kritzel-stencil 0.0.161 → 0.0.163

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 (155) hide show
  1. package/dist/cjs/{default-text-tool.config-zB3FPuXq.js → default-line-tool.config-DJMYrkSu.js} +6301 -3866
  2. package/dist/cjs/default-line-tool.config-DJMYrkSu.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +131 -127
  4. package/dist/cjs/index.cjs.js.map +1 -1
  5. package/dist/cjs/kritzel-color_22.cjs.entry.js +1233 -167
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/stencil.cjs.js +1 -1
  8. package/dist/collection/classes/core/core.class.js +159 -6
  9. package/dist/collection/classes/core/core.class.js.map +1 -1
  10. package/dist/collection/classes/core/reviver.class.js +24 -0
  11. package/dist/collection/classes/core/reviver.class.js.map +1 -1
  12. package/dist/collection/classes/core/store.class.js +10 -0
  13. package/dist/collection/classes/core/store.class.js.map +1 -1
  14. package/dist/collection/classes/core/viewport.class.js +8 -0
  15. package/dist/collection/classes/core/viewport.class.js.map +1 -1
  16. package/dist/collection/classes/handlers/line-handle.handler.js +383 -0
  17. package/dist/collection/classes/handlers/line-handle.handler.js.map +1 -0
  18. package/dist/collection/classes/handlers/move.handler.js +2 -2
  19. package/dist/collection/classes/handlers/move.handler.js.map +1 -1
  20. package/dist/collection/classes/managers/anchor.manager.js +1052 -0
  21. package/dist/collection/classes/managers/anchor.manager.js.map +1 -0
  22. package/dist/collection/classes/managers/cursor.manager.js +117 -0
  23. package/dist/collection/classes/managers/cursor.manager.js.map +1 -0
  24. package/dist/collection/classes/objects/base-object.class.js +4 -2
  25. package/dist/collection/classes/objects/base-object.class.js.map +1 -1
  26. package/dist/collection/classes/objects/line.class.js +564 -0
  27. package/dist/collection/classes/objects/line.class.js.map +1 -0
  28. package/dist/collection/classes/objects/path.class.js +85 -0
  29. package/dist/collection/classes/objects/path.class.js.map +1 -1
  30. package/dist/collection/classes/objects/selection-group.class.js +4 -0
  31. package/dist/collection/classes/objects/selection-group.class.js.map +1 -1
  32. package/dist/collection/classes/objects/shape.class.js +372 -0
  33. package/dist/collection/classes/objects/shape.class.js.map +1 -0
  34. package/dist/collection/classes/registries/icon-registry.class.js +5 -0
  35. package/dist/collection/classes/registries/icon-registry.class.js.map +1 -1
  36. package/dist/collection/classes/tools/brush-tool.class.js +2 -2
  37. package/dist/collection/classes/tools/brush-tool.class.js.map +1 -1
  38. package/dist/collection/classes/tools/line-tool.class.js +172 -0
  39. package/dist/collection/classes/tools/line-tool.class.js.map +1 -0
  40. package/dist/collection/classes/tools/selection-tool.class.js +41 -8
  41. package/dist/collection/classes/tools/selection-tool.class.js.map +1 -1
  42. package/dist/collection/classes/tools/shape-tool.class.js +204 -0
  43. package/dist/collection/classes/tools/shape-tool.class.js.map +1 -0
  44. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +26 -6
  45. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
  46. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +168 -60
  47. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  48. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +143 -5
  49. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +76 -12
  50. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +1 -1
  51. package/dist/collection/configs/default-engine-config.js +5 -1
  52. package/dist/collection/configs/default-engine-config.js.map +1 -1
  53. package/dist/collection/configs/default-line-tool.config.js +34 -0
  54. package/dist/collection/configs/default-line-tool.config.js.map +1 -0
  55. package/dist/collection/configs/default-shape-tool.config.js +26 -0
  56. package/dist/collection/configs/default-shape-tool.config.js.map +1 -0
  57. package/dist/collection/enums/shape-type.enum.js +7 -0
  58. package/dist/collection/enums/shape-type.enum.js.map +1 -0
  59. package/dist/collection/helpers/geometry.helper.js +97 -0
  60. package/dist/collection/helpers/geometry.helper.js.map +1 -1
  61. package/dist/collection/index.js +5 -0
  62. package/dist/collection/index.js.map +1 -1
  63. package/dist/collection/interfaces/anchor.interface.js +2 -0
  64. package/dist/collection/interfaces/anchor.interface.js.map +1 -0
  65. package/dist/collection/interfaces/arrow-head.interface.js +2 -0
  66. package/dist/collection/interfaces/arrow-head.interface.js.map +1 -0
  67. package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
  68. package/dist/collection/interfaces/line-options.interface.js +2 -0
  69. package/dist/collection/interfaces/line-options.interface.js.map +1 -0
  70. package/dist/collection/interfaces/toolbar-control.interface.js.map +1 -1
  71. package/dist/components/index.js +4 -4
  72. package/dist/components/kritzel-brush-style.js +1 -1
  73. package/dist/components/kritzel-context-menu.js +1 -1
  74. package/dist/components/kritzel-control-brush-config.js +1 -1
  75. package/dist/components/kritzel-control-text-config.js +1 -1
  76. package/dist/components/kritzel-controls.js +1 -1
  77. package/dist/components/kritzel-editor.js +91 -17
  78. package/dist/components/kritzel-editor.js.map +1 -1
  79. package/dist/components/kritzel-engine.js +1 -1
  80. package/dist/components/kritzel-icon.js +1 -1
  81. package/dist/components/kritzel-menu-item.js +1 -1
  82. package/dist/components/kritzel-menu.js +1 -1
  83. package/dist/components/kritzel-split-button.js +1 -1
  84. package/dist/components/kritzel-utility-panel.js +1 -1
  85. package/dist/components/kritzel-workspace-manager.js +1 -1
  86. package/dist/components/{p-DxNbcUzt.js → p-5OECjGHq.js} +3 -3
  87. package/dist/components/{p-DxNbcUzt.js.map → p-5OECjGHq.js.map} +1 -1
  88. package/dist/components/{p-i0IlGLv2.js → p-BSBMBjhq.js} +3 -3
  89. package/dist/components/{p-i0IlGLv2.js.map → p-BSBMBjhq.js.map} +1 -1
  90. package/dist/components/{p-BdZKPKnx.js → p-BuS7MM1j.js} +4 -4
  91. package/dist/components/{p-BdZKPKnx.js.map → p-BuS7MM1j.js.map} +1 -1
  92. package/dist/components/{p-D7BLVRXX.js → p-CnRfQsIC.js} +3716 -554
  93. package/dist/components/p-CnRfQsIC.js.map +1 -0
  94. package/dist/components/{p-DbKKCHKd.js → p-Cv4BGNPb.js} +7 -2
  95. package/dist/components/p-Cv4BGNPb.js.map +1 -0
  96. package/dist/components/{p-D_ygcWSz.js → p-D1YAsWrL.js} +3 -3
  97. package/dist/components/{p-D_ygcWSz.js.map → p-D1YAsWrL.js.map} +1 -1
  98. package/dist/components/{p-Doixm8-N.js → p-D8L0t-Ro.js} +3 -3
  99. package/dist/components/{p-Doixm8-N.js.map → p-D8L0t-Ro.js.map} +1 -1
  100. package/dist/components/{p-CC8KFHSe.js → p-DguzZn_x.js} +3 -3
  101. package/dist/components/{p-CC8KFHSe.js.map → p-DguzZn_x.js.map} +1 -1
  102. package/dist/components/{p-CBYBurdY.js → p-Dz2XHHqa.js} +191 -7
  103. package/dist/components/p-Dz2XHHqa.js.map +1 -0
  104. package/dist/components/{p-58y59Acb.js → p-I3iPEDpx.js} +5 -5
  105. package/dist/components/{p-58y59Acb.js.map → p-I3iPEDpx.js.map} +1 -1
  106. package/dist/components/{p-BpXgwgnV.js → p-tp96UZ0l.js} +83 -19
  107. package/dist/components/p-tp96UZ0l.js.map +1 -0
  108. package/dist/esm/{default-text-tool.config-BvCgOiKA.js → default-line-tool.config-C35P3XfD.js} +6288 -3867
  109. package/dist/esm/default-line-tool.config-C35P3XfD.js.map +1 -0
  110. package/dist/esm/index.js +2 -2
  111. package/dist/esm/kritzel-color_22.entry.js +1154 -88
  112. package/dist/esm/loader.js +1 -1
  113. package/dist/esm/stencil.js +1 -1
  114. package/dist/stencil/index.esm.js +1 -1
  115. package/dist/stencil/p-9d43b708.entry.js +10 -0
  116. package/dist/stencil/p-9d43b708.entry.js.map +1 -0
  117. package/dist/stencil/p-C35P3XfD.js +2 -0
  118. package/dist/stencil/p-C35P3XfD.js.map +1 -0
  119. package/dist/stencil/stencil.esm.js +1 -1
  120. package/dist/types/classes/core/core.class.d.ts +19 -0
  121. package/dist/types/classes/core/store.class.d.ts +4 -0
  122. package/dist/types/classes/core/viewport.class.d.ts +6 -0
  123. package/dist/types/classes/handlers/line-handle.handler.d.ts +34 -0
  124. package/dist/types/classes/managers/anchor.manager.d.ts +180 -0
  125. package/dist/types/classes/managers/cursor.manager.d.ts +43 -0
  126. package/dist/types/classes/objects/line.class.d.ts +98 -0
  127. package/dist/types/classes/objects/path.class.d.ts +7 -0
  128. package/dist/types/classes/objects/shape.class.d.ts +116 -0
  129. package/dist/types/classes/tools/line-tool.class.d.ts +17 -0
  130. package/dist/types/classes/tools/selection-tool.class.d.ts +4 -0
  131. package/dist/types/classes/tools/shape-tool.class.d.ts +37 -0
  132. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +2 -4
  133. package/dist/types/components/ui/kritzel-controls/kritzel-controls.d.ts +16 -1
  134. package/dist/types/components.d.ts +5 -5
  135. package/dist/types/configs/default-line-tool.config.d.ts +2 -0
  136. package/dist/types/configs/default-shape-tool.config.d.ts +2 -0
  137. package/dist/types/enums/shape-type.enum.d.ts +5 -0
  138. package/dist/types/helpers/geometry.helper.d.ts +31 -0
  139. package/dist/types/index.d.ts +5 -0
  140. package/dist/types/interfaces/anchor.interface.d.ts +137 -0
  141. package/dist/types/interfaces/arrow-head.interface.d.ts +26 -0
  142. package/dist/types/interfaces/engine-state.interface.d.ts +8 -0
  143. package/dist/types/interfaces/line-options.interface.d.ts +21 -0
  144. package/dist/types/interfaces/toolbar-control.interface.d.ts +36 -2
  145. package/package.json +1 -1
  146. package/dist/cjs/default-text-tool.config-zB3FPuXq.js.map +0 -1
  147. package/dist/components/p-BpXgwgnV.js.map +0 -1
  148. package/dist/components/p-CBYBurdY.js.map +0 -1
  149. package/dist/components/p-D7BLVRXX.js.map +0 -1
  150. package/dist/components/p-DbKKCHKd.js.map +0 -1
  151. package/dist/esm/default-text-tool.config-BvCgOiKA.js.map +0 -1
  152. package/dist/stencil/p-6d9756d9.entry.js +0 -10
  153. package/dist/stencil/p-6d9756d9.entry.js.map +0 -1
  154. package/dist/stencil/p-BvCgOiKA.js +0 -2
  155. package/dist/stencil/p-BvCgOiKA.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{p as e,b as t}from"./p-SGde3HXB.js";export{s as setNonce}from"./p-SGde3HXB.js";import{g as o}from"./p-DQuL1Twl.js";var n=()=>{const t=import.meta.url;const o={};if(t!==""){o.resourcesUrl=new URL(".",t).href}return e(o)};n().then((async e=>{await o();return t([["p-6d9756d9",[[768,"kritzel-editor",{scaleMax:[2,"scale-max"],scaleMin:[2,"scale-min"],controls:[16],globalContextMenuItems:[16],objectContextMenuItems:[16],customSvgIcons:[16],isControlsVisible:[4,"is-controls-visible"],isUtilityPanelVisible:[4,"is-utility-panel-visible"],syncConfig:[16],isEngineReady:[32],isControlsReady:[32],isWorkspaceManagerReady:[32],workspaces:[32],activeWorkspace:[32],isVirtualKeyboardOpen:[32],undoState:[32],getObjectById:[64],addObject:[64],updateObject:[64],removeObject:[64],getSelectedObjects:[64],selectObjects:[64],selectAllObjectsInViewport:[64],clearSelection:[64],centerObjectInViewport:[64],createWorkspace:[64],updateWorkspace:[64],deleteWorkspace:[64],getWorkspaces:[64],getActiveWorkspace:[64]},[[0,"dblclick","onTouchStart"]],{isEngineReady:["onIsEngineReady"],isControlsReady:["onIsControlsReady"],workspaces:["onWorkspacesChange"]}],[769,"kritzel-controls",{controls:[16],activeControl:[1040],isUtilityPanelVisible:[4,"is-utility-panel-visible"],undoState:[16],firstConfig:[32],isTooltipVisible:[32],isTouchDevice:[32],closeTooltip:[64]},[[4,"click","handleDocumentClick"],[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"]]],[769,"kritzel-workspace-manager",{activeWorkspace:[1040],workspaces:[16],childMenuAnchor:[32],openChildMenuItem:[32],newWorkspace:[32],editingItemId:[32]},[[8,"wheel","handleWheel"]]],[769,"kritzel-engine",{workspace:[16],syncConfig:[16],activeTool:[16],globalContextMenuItems:[16],objectContextMenuItems:[16],scaleMax:[1026,"scale-max"],scaleMin:[1026,"scale-min"],cursorTarget:[16],forceUpdate:[32],registerTool:[64],changeActiveTool:[64],disable:[64],enable:[64],delete:[64],copy:[64],paste:[64],bringForward:[64],sendBackward:[64],bringToFront:[64],sendToBack:[64],undo:[64],redo:[64],hideContextMenu:[64],getObjectById:[64],addObject:[64],updateObject:[64],removeObject:[64],getSelectedObjects:[64],selectObjects:[64],selectAllObjectsInViewport:[64],clearSelection:[64],centerObjectInViewport:[64],getCopiedObjects:[64],createWorkspace:[64],updateWorkspace:[64],deleteWorkspace:[64],getWorkspaces:[64],getActiveWorkspace:[64]},[[0,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[0,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{workspace:["onWorkspaceChange"],scaleMax:["validateScaleMax"],scaleMin:["validateScaleMin"],cursorTarget:["onCursorTargetChange"]}],[769,"kritzel-control-text-config",{tool:[1040],isExpanded:[1028,"is-expanded"]}],[769,"kritzel-control-brush-config",{tool:[1040],isExpanded:[1028,"is-expanded"],palette:[32]},null,{tool:["handleToolChange"]}],[769,"kritzel-split-button",{buttonIcon:[1,"button-icon"],dropdownIcon:[1,"dropdown-icon"],items:[16],mainButtonDisabled:[4,"main-button-disabled"],menuButtonDisabled:[4,"menu-button-disabled"],isMenuOpen:[32],isTouchDevice:[32],anchorElement:[32],menuScrollTop:[32],open:[64],focusMenu:[64]}],[769,"kritzel-context-menu",{items:[16],objects:[16],processedItems:[32]},[[9,"pointerdown","handleOutsideClick"]],{items:["onItemsChanged"]}],[769,"kritzel-utility-panel",{undoState:[16]}],[769,"kritzel-cursor-trail",{core:[16],cursorTrailPoints:[32],isLeftButtonDown:[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[769,"kritzel-tooltip",{isVisible:[4,"is-visible"],anchorElement:[16],arrowSize:[2,"arrow-size"],offsetY:[2,"offset-y"],positionX:[32],arrowOffset:[32],isMobileView:[32],focusContent:[64]},[[4,"click","handleOutsideClick"],[9,"resize","handleWindowResize"]]],[769,"kritzel-font-family",{fontOptions:[16],selectedFontFamily:[1025,"selected-font-family"]}],[769,"kritzel-font-size",{sizes:[16],selectedSize:[1026,"selected-size"],fontFamily:[1,"font-family"]}],[769,"kritzel-stroke-size",{sizes:[16],selectedSize:[1026,"selected-size"]}],[769,"kritzel-color-palette",{colors:[16],selectedColor:[1025,"selected-color"],isExpanded:[4,"is-expanded"],isOpaque:[4,"is-opaque"]}],[769,"kritzel-font",{fontFamily:[1,"font-family"],size:[2],color:[1]}],[769,"kritzel-menu",{items:[16],parent:[16],selectedIndex:[32],setScrollTop:[64],setFocus:[64]}],[769,"kritzel-menu-item",{item:[16],parent:[16],isDirty:[32]},null,{item:["onItemChange"]}],[769,"kritzel-dropdown",{options:[16],value:[1],width:[1],selectStyles:[8,"select-styles"],internalValue:[32],hasSuffixContent:[32],hasPrefixContent:[32]},null,{options:["optionsChanged"],value:["externalValueChanged"]}],[769,"kritzel-portal",{anchor:[16],offsetX:[2,"offset-x"],offsetY:[2,"offset-y"],autoFocus:[4,"auto-focus"]},[[8,"click","handleOutsideClick"],[8,"keydown","handleKeyDown"],[11,"resize","handleResize"],[11,"scroll","handleWindowScroll"]],{anchor:["anchorChanged"]}],[769,"kritzel-color",{value:[1],size:[2]}],[769,"kritzel-icon",{name:[1],label:[1],size:[2]}]]],["p-385bab97",[[769,"kritzel-brush-style",{type:[1],brushOptions:[16]}]]]],e)}));
1
+ import{p as e,b as t}from"./p-SGde3HXB.js";export{s as setNonce}from"./p-SGde3HXB.js";import{g as o}from"./p-DQuL1Twl.js";var n=()=>{const t=import.meta.url;const o={};if(t!==""){o.resourcesUrl=new URL(".",t).href}return e(o)};n().then((async e=>{await o();return t([["p-9d43b708",[[768,"kritzel-editor",{scaleMax:[2,"scale-max"],scaleMin:[2,"scale-min"],controls:[16],globalContextMenuItems:[16],objectContextMenuItems:[16],customSvgIcons:[16],isControlsVisible:[4,"is-controls-visible"],isUtilityPanelVisible:[4,"is-utility-panel-visible"],syncConfig:[16],isEngineReady:[32],isControlsReady:[32],isWorkspaceManagerReady:[32],workspaces:[32],activeWorkspace:[32],isVirtualKeyboardOpen:[32],undoState:[32],getObjectById:[64],addObject:[64],updateObject:[64],removeObject:[64],getSelectedObjects:[64],selectObjects:[64],selectAllObjectsInViewport:[64],clearSelection:[64],centerObjectInViewport:[64],createWorkspace:[64],updateWorkspace:[64],deleteWorkspace:[64],getWorkspaces:[64],getActiveWorkspace:[64]},[[0,"dblclick","onTouchStart"]],{isEngineReady:["onIsEngineReady"],isControlsReady:["onIsControlsReady"],workspaces:["onWorkspacesChange"]}],[769,"kritzel-controls",{controls:[16],activeControl:[1040],isUtilityPanelVisible:[4,"is-utility-panel-visible"],undoState:[16],firstConfig:[32],isTooltipVisible:[32],isTouchDevice:[32],selectedSubOptions:[32],openSubMenuControl:[32],closeTooltip:[64]},[[4,"click","handleDocumentClick"],[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"]]],[769,"kritzel-workspace-manager",{activeWorkspace:[1040],workspaces:[16],childMenuAnchor:[32],openChildMenuItem:[32],newWorkspace:[32],editingItemId:[32]},[[8,"wheel","handleWheel"]]],[769,"kritzel-engine",{workspace:[16],syncConfig:[16],activeTool:[16],globalContextMenuItems:[16],objectContextMenuItems:[16],scaleMax:[1026,"scale-max"],scaleMin:[1026,"scale-min"],cursorTarget:[16],forceUpdate:[32],registerTool:[64],changeActiveTool:[64],disable:[64],enable:[64],delete:[64],copy:[64],paste:[64],bringForward:[64],sendBackward:[64],bringToFront:[64],sendToBack:[64],undo:[64],redo:[64],hideContextMenu:[64],getObjectById:[64],addObject:[64],updateObject:[64],removeObject:[64],getSelectedObjects:[64],selectObjects:[64],selectAllObjectsInViewport:[64],clearSelection:[64],centerObjectInViewport:[64],getCopiedObjects:[64],createWorkspace:[64],updateWorkspace:[64],deleteWorkspace:[64],getWorkspaces:[64],getActiveWorkspace:[64]},[[0,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[0,"longpress","handleLongPress"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[4,"dblclick","preventDoubleTapZoomOnTouchDevices"]],{workspace:["onWorkspaceChange"],scaleMax:["validateScaleMax"],scaleMin:["validateScaleMin"],cursorTarget:["onCursorTargetChange"]}],[769,"kritzel-control-text-config",{tool:[1040],isExpanded:[1028,"is-expanded"]}],[769,"kritzel-control-brush-config",{tool:[1040],isExpanded:[1028,"is-expanded"],palette:[32]},null,{tool:["handleToolChange"]}],[769,"kritzel-split-button",{buttonIcon:[1,"button-icon"],dropdownIcon:[1,"dropdown-icon"],items:[16],mainButtonDisabled:[4,"main-button-disabled"],menuButtonDisabled:[4,"menu-button-disabled"],isMenuOpen:[32],isTouchDevice:[32],anchorElement:[32],menuScrollTop:[32],open:[64],focusMenu:[64]}],[769,"kritzel-context-menu",{items:[16],objects:[16],processedItems:[32]},[[9,"pointerdown","handleOutsideClick"]],{items:["onItemsChanged"]}],[769,"kritzel-utility-panel",{undoState:[16]}],[769,"kritzel-cursor-trail",{core:[16],cursorTrailPoints:[32],isLeftButtonDown:[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[769,"kritzel-tooltip",{isVisible:[4,"is-visible"],anchorElement:[16],arrowSize:[2,"arrow-size"],offsetY:[2,"offset-y"],positionX:[32],arrowOffset:[32],isMobileView:[32],focusContent:[64]},[[4,"click","handleOutsideClick"],[9,"resize","handleWindowResize"]]],[769,"kritzel-font-family",{fontOptions:[16],selectedFontFamily:[1025,"selected-font-family"]}],[769,"kritzel-font-size",{sizes:[16],selectedSize:[1026,"selected-size"],fontFamily:[1,"font-family"]}],[769,"kritzel-stroke-size",{sizes:[16],selectedSize:[1026,"selected-size"]}],[769,"kritzel-color-palette",{colors:[16],selectedColor:[1025,"selected-color"],isExpanded:[4,"is-expanded"],isOpaque:[4,"is-opaque"]}],[769,"kritzel-font",{fontFamily:[1,"font-family"],size:[2],color:[1]}],[769,"kritzel-menu",{items:[16],parent:[16],selectedIndex:[32],setScrollTop:[64],setFocus:[64]}],[769,"kritzel-menu-item",{item:[16],parent:[16],isDirty:[32]},null,{item:["onItemChange"]}],[769,"kritzel-dropdown",{options:[16],value:[1],width:[1],selectStyles:[8,"select-styles"],internalValue:[32],hasSuffixContent:[32],hasPrefixContent:[32]},null,{options:["optionsChanged"],value:["externalValueChanged"]}],[769,"kritzel-portal",{anchor:[16],offsetX:[2,"offset-x"],offsetY:[2,"offset-y"],autoFocus:[4,"auto-focus"]},[[8,"click","handleOutsideClick"],[8,"keydown","handleKeyDown"],[11,"resize","handleResize"],[11,"scroll","handleWindowScroll"]],{anchor:["anchorChanged"]}],[769,"kritzel-color",{value:[1],size:[2]}],[769,"kritzel-icon",{name:[1],label:[1],size:[2]}]]],["p-385bab97",[[769,"kritzel-brush-style",{type:[1],brushOptions:[16]}]]]],e)}));
2
2
  //# sourceMappingURL=stencil.esm.js.map
@@ -5,14 +5,20 @@ import { KritzelStore } from './store.class';
5
5
  import { KritzelWorkspace } from './workspace.class';
6
6
  import { KritzelSyncConfig } from '../../interfaces/sync-config.interface';
7
7
  import { KritzelAppStateMap } from '../structures/app-state-map.structure';
8
+ import { KritzelAnchorManager } from '../managers/anchor.manager';
9
+ import { KritzelCursorManager } from '../managers/cursor.manager';
8
10
  export declare class KritzelCore {
9
11
  private readonly _kritzelEngine;
10
12
  private readonly _store;
11
13
  private _syncConfig?;
12
14
  private readonly _appStateMap;
15
+ private readonly _anchorManager;
16
+ private readonly _cursorManager;
13
17
  get engine(): KritzelEngine;
14
18
  get store(): KritzelStore;
15
19
  get appStateMap(): KritzelAppStateMap;
20
+ get anchorManager(): KritzelAnchorManager;
21
+ get cursorManager(): KritzelCursorManager;
16
22
  constructor(kritzelEngine: KritzelEngine);
17
23
  setSyncConfig(config?: KritzelSyncConfig): void;
18
24
  initializeYjs(): Promise<void>;
@@ -57,11 +63,24 @@ export declare class KritzelCore {
57
63
  selectAllObjectsInViewport(): void;
58
64
  clearSelection(): void;
59
65
  resetActiveText(): void;
66
+ resetActiveShape(): void;
60
67
  getObjectFromPointerEvent(event: PointerEvent, selector?: string): KritzelBaseObject<any> | null;
61
68
  getObjectsFromPointerEvent(event: PointerEvent, selector?: string): KritzelBaseObject<any>[];
69
+ /**
70
+ * Get all elements at a pointer position that match a given selector.
71
+ * Uses elementsFromPoint to find overlapped elements.
72
+ */
73
+ getElementsAtPoint(event: PointerEvent, selector: string): Element[];
74
+ /**
75
+ * Check if any element at the pointer position matches the given selector.
76
+ * Useful for detecting hover states on overlapped elements.
77
+ */
78
+ isPointerOverElement(event: PointerEvent, selector: string): boolean;
62
79
  getCanvasPoint(event: PointerEvent): {
63
80
  x: number;
64
81
  y: number;
65
82
  };
66
83
  beforeWorkspaceChange(): void;
84
+ displaySelectionGroupUI(object: KritzelBaseObject<any>): boolean;
85
+ displaySelectionLineUI(object: KritzelBaseObject<any>): boolean;
67
86
  }
@@ -2,7 +2,9 @@ import { KritzelSelectionGroup } from '../objects/selection-group.class';
2
2
  import { KritzelEngineState } from '../../interfaces/engine-state.interface';
3
3
  import { KritzelSelectionBox } from '../objects/selection-box.class';
4
4
  import { KritzelText } from '../objects/text.class';
5
+ import { KritzelShape } from '../objects/shape.class';
5
6
  import { KritzelPath } from '../objects/path.class';
7
+ import { KritzelLine } from '../objects/line.class';
6
8
  import { StateChangeListener, StatePropertyKey } from '../../types/state.types';
7
9
  import { KritzelBaseObject } from '../..';
8
10
  export declare class KritzelStore {
@@ -16,7 +18,9 @@ export declare class KritzelStore {
16
18
  get selectionBox(): KritzelSelectionBox | null;
17
19
  get selectionGroup(): KritzelSelectionGroup | null;
18
20
  get activeText(): KritzelText | null;
21
+ get activeShape(): KritzelShape | null;
19
22
  get currentPath(): KritzelPath | null;
23
+ get currentLine(): KritzelLine | null;
20
24
  get offsetX(): number;
21
25
  get offsetY(): number;
22
26
  get isDisabled(): boolean;
@@ -8,6 +8,12 @@ export declare class KritzelViewport {
8
8
  startX: number;
9
9
  startY: number;
10
10
  constructor(core: KritzelCore, host: HTMLElement);
11
+ /**
12
+ * Cancels any pending debounced viewport updates.
13
+ * Should be called before switching workspaces to prevent the old workspace's
14
+ * viewport state from being saved to the new workspace.
15
+ */
16
+ cancelPendingUpdates(): void;
11
17
  handleResize(): void;
12
18
  handlePointerDown(event: PointerEvent): void;
13
19
  handlePointerMove(event: PointerEvent): void;
@@ -0,0 +1,34 @@
1
+ import { KritzelCore } from '../core/core.class';
2
+ import { KritzelBaseHandler } from './base.handler';
3
+ export type LineHandleType = 'start' | 'end' | 'center';
4
+ export declare class KritzelLineHandleHandler extends KritzelBaseHandler {
5
+ initialMouseX: number;
6
+ initialMouseY: number;
7
+ initialStartX: number;
8
+ initialStartY: number;
9
+ initialEndX: number;
10
+ initialEndY: number;
11
+ initialControlX: number | undefined;
12
+ initialControlY: number | undefined;
13
+ initialTranslateX: number;
14
+ initialTranslateY: number;
15
+ hasMoved: boolean;
16
+ /** Current snap target during drag, if any */
17
+ private currentSnapTarget;
18
+ constructor(core: KritzelCore);
19
+ private reset;
20
+ handlePointerDown(event: PointerEvent): void;
21
+ private startHandleDrag;
22
+ handlePointerMove(event: PointerEvent): void;
23
+ /**
24
+ * Converts world coordinates to a line's local coordinate system.
25
+ */
26
+ private worldToLineLocal;
27
+ /**
28
+ * Converts a line's local coordinate system to world coordinates.
29
+ */
30
+ private lineLocalToWorld;
31
+ private updateLineEndpoint;
32
+ handlePointerUp(_event: PointerEvent): void;
33
+ private getSelectedLine;
34
+ }
@@ -0,0 +1,180 @@
1
+ import { AnchorIndexEntry, AnchorLinesRenderData, AnchorVisualization, LineAnchor, SnapCandidate, SnapIndicatorRenderData, SnapTarget } from '../../interfaces/anchor.interface';
2
+ import { KritzelCore } from '../core/core.class';
3
+ import { KritzelLine } from '../objects/line.class';
4
+ import { KritzelBaseObject } from '../objects/base-object.class';
5
+ type AnchorClipInfo = {
6
+ localX: number;
7
+ localY: number;
8
+ worldX: number;
9
+ worldY: number;
10
+ t?: number;
11
+ };
12
+ /**
13
+ * Manages anchor connections between line endpoints and other objects.
14
+ * Maintains a runtime index for efficient reverse lookups and handles
15
+ * snap detection during line endpoint dragging.
16
+ */
17
+ export declare class KritzelAnchorManager {
18
+ private readonly _core;
19
+ /**
20
+ * Runtime index mapping objectId to the lines anchored to it.
21
+ * This is derived from the anchor properties on lines and rebuilt as needed.
22
+ */
23
+ private readonly _anchorIndex;
24
+ constructor(core: KritzelCore);
25
+ /**
26
+ * Sets an anchor from a line endpoint to a target object's center.
27
+ * Updates both the line's anchor property and the internal index.
28
+ */
29
+ setAnchor(lineId: string, endpoint: 'start' | 'end', targetObjectId: string): void;
30
+ /**
31
+ * Removes an anchor from a line endpoint.
32
+ * Updates both the line's anchor property and the internal index.
33
+ */
34
+ removeAnchor(lineId: string, endpoint: 'start' | 'end'): void;
35
+ /**
36
+ * Gets the anchor for a specific line endpoint.
37
+ */
38
+ getAnchor(lineId: string, endpoint: 'start' | 'end'): LineAnchor | null;
39
+ /**
40
+ * Gets all lines that have an endpoint anchored to the specified object.
41
+ */
42
+ getLinesAnchoredTo(objectId: string): AnchorIndexEntry[];
43
+ /**
44
+ * Updates all line endpoints that are anchored to the specified object.
45
+ * Should be called when an object moves.
46
+ */
47
+ updateAnchorsForObject(objectId: string): void;
48
+ /**
49
+ * Snaps a line endpoint to an object's center.
50
+ */
51
+ private snapEndpointToObject;
52
+ /**
53
+ * Converts world coordinates to a line's local coordinate system.
54
+ */
55
+ private worldToLineLocal;
56
+ /**
57
+ * Finds the nearest object that can be snapped to within the snap threshold.
58
+ * Returns null if no suitable snap target is found.
59
+ *
60
+ * @param worldX - X coordinate in world space
61
+ * @param worldY - Y coordinate in world space
62
+ * @param excludeLineId - ID of the line being edited (to exclude from snap targets)
63
+ * @param otherEndpointAnchorId - ID of object anchored to the other endpoint (to prevent same-object anchoring)
64
+ */
65
+ findSnapTarget(worldX: number, worldY: number, excludeLineId: string, otherEndpointAnchorId?: string): SnapTarget | null;
66
+ /**
67
+ * Sets the current snap candidate for visual feedback.
68
+ */
69
+ setSnapCandidate(candidate: SnapCandidate | null): void;
70
+ /**
71
+ * Gets the current snap candidate.
72
+ */
73
+ getSnapCandidate(): SnapCandidate | null;
74
+ /**
75
+ * Clears the snap candidate.
76
+ */
77
+ clearSnapCandidate(): void;
78
+ /**
79
+ * Gets render data for anchor lines visualization.
80
+ * Returns null if there's no selected line with anchors or if snap is in progress.
81
+ */
82
+ getAnchorLinesRenderData(): AnchorLinesRenderData | null;
83
+ /**
84
+ * Gets render data for snap indicator visualization.
85
+ * Returns null if there's no snap candidate.
86
+ */
87
+ getSnapIndicatorRenderData(): SnapIndicatorRenderData | null;
88
+ /**
89
+ * Handles cleanup when an object is deleted.
90
+ * Detaches all lines that were anchored to the deleted object.
91
+ */
92
+ handleObjectDeleted(objectId: string): void;
93
+ /**
94
+ * Handles cleanup when a line is deleted.
95
+ * Removes all anchor index entries for the line.
96
+ */
97
+ handleLineDeleted(lineId: string): void;
98
+ /**
99
+ * Rebuilds the anchor index from all lines in the object map.
100
+ * Should be called after loading/deserializing objects.
101
+ */
102
+ rebuildIndex(): void;
103
+ /**
104
+ * Adds an entry to the anchor index.
105
+ */
106
+ private addToIndex;
107
+ /**
108
+ * Removes an entry from the anchor index.
109
+ */
110
+ private removeFromIndex;
111
+ /**
112
+ * Gets a line by its ID.
113
+ */
114
+ private getLineById;
115
+ /**
116
+ * Gets an object by its ID.
117
+ */
118
+ private getObjectById;
119
+ private findAnchorTarget;
120
+ /**
121
+ * Computes anchor visualization data for a line with anchors.
122
+ * Returns edge intersection points for rendering dashed lines from edge to center.
123
+ */
124
+ computeAnchorVisualization(line: KritzelLine, endpoint: 'start' | 'end'): AnchorVisualization | null;
125
+ /**
126
+ * Computes a clipped line path that stops at anchor edges instead of going to anchor centers.
127
+ * When arrows are present on anchored ends, the line is shortened so the arrow tip appears at the edge.
128
+ * Returns the SVG path 'd' attribute string, or the original path if no clipping is needed.
129
+ * @param line The line object
130
+ * @param offsetByViewBox If true, subtracts line.x and line.y from coordinates (for selection UI)
131
+ */
132
+ computeClippedLinePath(line: KritzelLine, offsetByViewBox?: boolean): string;
133
+ computeAnchorClipInfo(line: KritzelLine, endpoint: 'start' | 'end', targetObject: KritzelBaseObject<Element>): AnchorClipInfo | null;
134
+ private computeStraightClipInfo;
135
+ private computeCurvedClipInfo;
136
+ private findCurveExitPoint;
137
+ /**
138
+ * Finds the exit point for a curved line going to a Path object.
139
+ * Uses distance-to-stroke sampling instead of polygon containment.
140
+ */
141
+ private findCurveExitPointForPath;
142
+ private refineCurveExitParameterForPath;
143
+ private getPathAdjustedPoints;
144
+ private computePathAdjustedPoints;
145
+ private isPointInPathStroke;
146
+ private pointToSegmentDistance;
147
+ private refineCurveExitParameter;
148
+ private approximateParameterForWorldPoint;
149
+ private evaluateLineAtT;
150
+ private evaluateDerivativeSpeedAtT;
151
+ private extractQuadraticSegment;
152
+ private splitQuadraticSegment;
153
+ private lerpPoint;
154
+ private buildAnchorPath;
155
+ private buildWorldQuadraticPath;
156
+ private getPolygonPoints;
157
+ /**
158
+ * Gets the custom clip polygon for an object if it has one.
159
+ * Returns null for objects that should use the default rotatedPolygon.
160
+ */
161
+ private getClipPolygonForObject;
162
+ /**
163
+ * Gets the clip point for a Path object (stroke edge intersection).
164
+ * Returns null if the object is not a Path or no intersection found.
165
+ */
166
+ private getPathClipPoint;
167
+ /**
168
+ * Converts local line coordinates to world coordinates.
169
+ */
170
+ private lineLocalToWorld;
171
+ /**
172
+ * Converts world coordinates to line's local SVG coordinates.
173
+ */
174
+ private lineWorldToLocal;
175
+ /**
176
+ * Checks if an object can be used as an anchor target.
177
+ */
178
+ private isAnchorable;
179
+ }
180
+ export {};
@@ -0,0 +1,43 @@
1
+ import { KritzelCore } from '../core/core.class';
2
+ /**
3
+ * Manages cursor state and updates across the application.
4
+ * Handles cursor changes based on handle hovers, tool states, and interactions.
5
+ */
6
+ export declare class KritzelCursorManager {
7
+ private readonly _core;
8
+ private _targetElement;
9
+ private _shadowRoot;
10
+ constructor(core: KritzelCore);
11
+ /**
12
+ * Sets the target element where cursor styles will be applied.
13
+ * Also sets the pointer cursor CSS variable for child components.
14
+ */
15
+ setTargetElement(element: HTMLElement | null): void;
16
+ /**
17
+ * Gets the current cursor target element.
18
+ */
19
+ getTargetElement(): HTMLElement | null;
20
+ /**
21
+ * Sets the shadow root for element detection.
22
+ */
23
+ setShadowRoot(shadowRoot: ShadowRoot): void;
24
+ /**
25
+ * Resets cursor to default state.
26
+ * Should be called when all pointers are released.
27
+ */
28
+ resetToDefault(): void;
29
+ /**
30
+ * Detects handle hover states using elementsFromPoint() to work with overlapped elements.
31
+ * This approach finds all elements at the pointer position instead of relying on pointerenter/pointerleave.
32
+ */
33
+ updateHoverState(ev: PointerEvent): void;
34
+ /**
35
+ * Applies the current cursor state to the target element.
36
+ * Should be called in the render loop.
37
+ */
38
+ applyCursor(): void;
39
+ /**
40
+ * Cleans up cursor state when the component is disconnected.
41
+ */
42
+ cleanup(): void;
43
+ }
@@ -0,0 +1,98 @@
1
+ import { KritzelLineOptions } from '../../interfaces/line-options.interface';
2
+ import { KritzelBaseObject } from './base-object.class';
3
+ import { KritzelPolygon } from '../../interfaces/polygon.interface';
4
+ import { KritzelCore } from '../core/core.class';
5
+ import { LineAnchor } from '../../interfaces/anchor.interface';
6
+ import { ArrowHeadStyle, LineArrowConfig } from '../../interfaces/arrow-head.interface';
7
+ export declare class KritzelLine extends KritzelBaseObject<SVGElement> {
8
+ __class__: string;
9
+ startX: number;
10
+ startY: number;
11
+ endX: number;
12
+ endY: number;
13
+ controlX?: number;
14
+ controlY?: number;
15
+ stroke: string;
16
+ strokeWidth: number;
17
+ scale: number;
18
+ options: KritzelLineOptions | undefined;
19
+ /** Anchor connection for the start point of the line */
20
+ startAnchor?: LineAnchor;
21
+ /** Anchor connection for the end point of the line */
22
+ endAnchor?: LineAnchor;
23
+ /** Arrow head configuration for start and end of line */
24
+ arrows?: LineArrowConfig;
25
+ isVisible: boolean;
26
+ isDebugInfoVisible: boolean;
27
+ isCompleted: boolean;
28
+ private _adjustedPoints?;
29
+ get d(): string;
30
+ get viewBox(): string;
31
+ constructor(config?: KritzelLineOptions);
32
+ static create(core: KritzelCore, options?: KritzelLineOptions): KritzelLine;
33
+ resize(x: number | null, y: number | null, width: number, height: number): void;
34
+ rotate(value: number): void;
35
+ move(startX: number, startY: number, endX: number, endY: number): void;
36
+ hitTest(x: number, y: number): boolean;
37
+ hitTestPolygon(polygon: KritzelPolygon): boolean;
38
+ updatePosition(x: number, y: number): void;
39
+ /**
40
+ * Updates a specific endpoint of the line (start or end).
41
+ * The coordinates are in viewBox-local space (relative to x, y origin).
42
+ * This method recalculates the bounding box dimensions.
43
+ *
44
+ * @param handleType - Which endpoint to update: 'start' or 'end'
45
+ * @param newX - New X coordinate in viewBox-local space
46
+ * @param newY - New Y coordinate in viewBox-local space
47
+ */
48
+ updateEndpoint(handleType: 'start' | 'end', newX: number, newY: number): void;
49
+ updateControlPoint(newX: number | undefined, newY: number | undefined): void;
50
+ private computeAdjustedPoints;
51
+ private pointToLineSegmentDistance;
52
+ /**
53
+ * Calculates the minimum distance from a point to a quadratic Bezier curve.
54
+ * Uses sampling along the curve to find the closest point.
55
+ */
56
+ private pointToBezierDistance;
57
+ /**
58
+ * Computes the adjusted control point in world coordinates, accounting for rotation and translation.
59
+ */
60
+ private computeAdjustedControlPoint;
61
+ get rotatedPolygon(): KritzelPolygon;
62
+ /**
63
+ * Calculates the tight bounding box for a quadratic Bezier curve or straight line.
64
+ * For curves, it finds the extrema points where the derivative equals zero.
65
+ */
66
+ static calculateBoundingBox(startX: number, startY: number, endX: number, endY: number, controlX: number | undefined, controlY: number | undefined, strokeWidth: number): {
67
+ minX: number;
68
+ minY: number;
69
+ maxX: number;
70
+ maxY: number;
71
+ };
72
+ calculateBoundingBox(): {
73
+ minX: number;
74
+ minY: number;
75
+ maxX: number;
76
+ maxY: number;
77
+ };
78
+ private updateDimensions;
79
+ /** Get unique marker ID for SVG defs at the start of the line */
80
+ get startMarkerId(): string;
81
+ /** Get unique marker ID for SVG defs at the end of the line */
82
+ get endMarkerId(): string;
83
+ /** Get the arrow size for start or end, defaulting to strokeWidth * 3 */
84
+ getArrowSize(end: 'start' | 'end'): number;
85
+ /** Get the arrow fill color for start or end, defaulting to stroke color */
86
+ getArrowFill(end: 'start' | 'end'): string;
87
+ /**
88
+ * Generate SVG path data for an arrow head based on the given style.
89
+ * The path is designed to fit in a 10x10 viewBox with the tip at (10, 5).
90
+ * @param style The arrow head style
91
+ * @returns SVG path data string
92
+ */
93
+ getArrowPath(style?: ArrowHeadStyle): string;
94
+ /** Check if start arrow is enabled */
95
+ get hasStartArrow(): boolean;
96
+ /** Check if end arrow is enabled */
97
+ get hasEndArrow(): boolean;
98
+ }
@@ -1,6 +1,7 @@
1
1
  import { KritzelPathOptions } from '../../interfaces/path-options.interface';
2
2
  import { KritzelBaseObject } from './base-object.class';
3
3
  import { KritzelPolygon } from '../../interfaces/polygon.interface';
4
+ import { KritzelPoint } from '../../interfaces/point.interface';
4
5
  import { KritzelCore } from '../core/core.class';
5
6
  export declare class KritzelPath extends KritzelBaseObject<SVGElement> {
6
7
  __class__: string;
@@ -44,4 +45,10 @@ export declare class KritzelPath extends KritzelBaseObject<SVGElement> {
44
45
  private getStrokeFromPoints;
45
46
  private getSvgPathFromStroke;
46
47
  isLowRes(): boolean;
48
+ /**
49
+ * Finds the point where a line from outsidePoint to the path's center
50
+ * intersects the stroke edge. Returns null if no intersection found.
51
+ * This is used for arrow clipping at the actual stroke edge.
52
+ */
53
+ getClipPoint(outsidePoint: KritzelPoint): KritzelPoint | null;
47
54
  }
@@ -0,0 +1,116 @@
1
+ import { KritzelBaseObject } from './base-object.class';
2
+ import { KritzelCore } from '../core/core.class';
3
+ import { ShapeType } from '../../enums/shape-type.enum';
4
+ import { KritzelPoint } from '../../interfaces/point.interface';
5
+ import { EditorView } from 'prosemirror-view';
6
+ export declare class KritzelShape extends KritzelBaseObject<HTMLDivElement> {
7
+ __class__: string;
8
+ shapeType: ShapeType;
9
+ fillColor: string;
10
+ strokeColor: string;
11
+ strokeWidth: number;
12
+ fontFamily: string;
13
+ fontSize: number;
14
+ fontColor: string;
15
+ /** Screen-space x coordinate of the shape's top-left corner (like Path.x) */
16
+ x: number;
17
+ /** Screen-space y coordinate of the shape's top-left corner (like Path.y) */
18
+ y: number;
19
+ scale: number;
20
+ scaleFactor: number;
21
+ isDebugInfoVisible: boolean;
22
+ isEditable: boolean;
23
+ isEditing: boolean;
24
+ editor: EditorView | null;
25
+ content: any;
26
+ private readonly _schema;
27
+ uneditedObject: KritzelShape | null;
28
+ /**
29
+ * Returns the viewBox for the shape's SVG, using screen-space coordinates.
30
+ * This follows the same pattern as KritzelPath.viewBox.
31
+ */
32
+ get viewBox(): string;
33
+ constructor(config?: {
34
+ x?: number;
35
+ y?: number;
36
+ translateX?: number;
37
+ translateY?: number;
38
+ width?: number;
39
+ height?: number;
40
+ shapeType?: ShapeType;
41
+ fillColor?: string;
42
+ strokeColor?: string;
43
+ strokeWidth?: number;
44
+ fontSize?: number;
45
+ fontFamily?: string;
46
+ fontColor?: string;
47
+ scale?: number;
48
+ scaleX?: number;
49
+ scaleY?: number;
50
+ });
51
+ /**
52
+ * Creates a new KritzelShape with screen-space coordinates.
53
+ * Following the same pattern as KritzelPath.create():
54
+ * - x, y are screen-space coordinates of the shape's top-left corner
55
+ * - translateX, translateY should be set to -viewportTranslateX, -viewportTranslateY
56
+ * - width, height are in screen-space
57
+ * - scale is the viewport scale at creation time
58
+ */
59
+ static create(core: KritzelCore, config?: {
60
+ x?: number;
61
+ y?: number;
62
+ translateX?: number;
63
+ translateY?: number;
64
+ width?: number;
65
+ height?: number;
66
+ shapeType?: ShapeType;
67
+ fillColor?: string;
68
+ strokeColor?: string;
69
+ strokeWidth?: number;
70
+ fontSize?: number;
71
+ fontFamily?: string;
72
+ fontColor?: string;
73
+ }): KritzelShape;
74
+ /**
75
+ * Updates the translateX/Y to world coordinates based on screen-space x, y.
76
+ * This follows the same pattern as KritzelPath.updateDimensions().
77
+ *
78
+ * The formula: translateX = (x + initialTranslateX) / scale
79
+ * where initialTranslateX was -viewportTranslateX
80
+ *
81
+ * This converts screen-space position to world coordinates.
82
+ */
83
+ updateDimensions(): void;
84
+ mount(element: HTMLDivElement): void;
85
+ mountTextEditor(element: HTMLDivElement): void;
86
+ private createEditor;
87
+ setContent(content: any): void;
88
+ resize(x: number, y: number, width: number, height: number): void;
89
+ focus(coords?: {
90
+ x: number;
91
+ y: number;
92
+ }): void;
93
+ private scrollIntoViewOnIOS;
94
+ edit(event?: PointerEvent): void;
95
+ save(): void;
96
+ handlePointerDown(event: PointerEvent): void;
97
+ handlePointerMove(event: PointerEvent): void;
98
+ handlePointerUp(event: PointerEvent): void;
99
+ copy(): KritzelShape;
100
+ serialize(): any;
101
+ deserialize<KritzelShape>(object: any): KritzelShape;
102
+ /**
103
+ * Returns the clipping polygon for arrow intersection.
104
+ * For ellipse: returns a many-sided polygon approximation
105
+ * For triangle: returns the 3 corners
106
+ * For rectangle: returns null (uses default rotatedPolygon)
107
+ *
108
+ * Includes padding for half the stroke width so arrow heads don't overlap the stroke.
109
+ */
110
+ getClipPolygon(): KritzelPoint[] | null;
111
+ /**
112
+ * Returns the SVG path for rendering the shape.
113
+ * The path uses screen-space coordinates relative to (x, y).
114
+ */
115
+ getSvgPath(): string;
116
+ }
@@ -0,0 +1,17 @@
1
+ import { KritzelBaseTool } from './base-tool.class';
2
+ import { KritzelCore } from '../core/core.class';
3
+ import { LineArrowConfig } from '../../interfaces/arrow-head.interface';
4
+ export declare class KritzelLineTool extends KritzelBaseTool {
5
+ color: string;
6
+ size: number;
7
+ palettes: string[];
8
+ /** Arrow head configuration for lines created with this tool */
9
+ arrows?: LineArrowConfig;
10
+ private _startX;
11
+ private _startY;
12
+ constructor(core: KritzelCore);
13
+ handlePointerDown(event: PointerEvent): void;
14
+ handlePointerMove(event: PointerEvent): void;
15
+ handlePointerUp(event: PointerEvent): void;
16
+ private selectLineAndSwitchTool;
17
+ }
@@ -5,12 +5,14 @@ import { KritzelSelectionHandler } from '../handlers/selection.handler';
5
5
  import { KritzelBaseTool } from './base-tool.class';
6
6
  import { KritzelHoverHandler } from '../handlers/hover.handler';
7
7
  import { KritzelCore } from '../core/core.class';
8
+ import { KritzelLineHandleHandler } from '../handlers/line-handle.handler';
8
9
  export declare class KritzelSelectionTool extends KritzelBaseTool {
9
10
  selectionHandler: KritzelSelectionHandler;
10
11
  moveHandler: KritzelMoveHandler;
11
12
  hoverHandler: KritzelHoverHandler;
12
13
  resizeHandler: KritzelResizeHandler;
13
14
  rotationHandler: KritzelRotationHandler;
15
+ lineHandleHandler: KritzelLineHandleHandler;
14
16
  constructor(core: KritzelCore);
15
17
  handlePointerDown(event: PointerEvent): void;
16
18
  handlePointerMove(event: PointerEvent): void;
@@ -19,4 +21,6 @@ export declare class KritzelSelectionTool extends KritzelBaseTool {
19
21
  private getHandleType;
20
22
  private isHandleSelected;
21
23
  private isRotationHandleSelected;
24
+ private isLineHandleSelected;
25
+ private getLineHandleType;
22
26
  }