kritzel-stencil 0.1.1 → 0.1.2

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 (172) hide show
  1. package/dist/cjs/{default-line-tool.config-SdMGkNhv.js → default-line-tool.config-MA02HCrH.js} +635 -118
  2. package/dist/cjs/{index-BeKMS-Zt.js → index-Bj0n7fQQ.js} +84 -7
  3. package/dist/cjs/index.cjs.js +1 -1
  4. package/dist/cjs/kritzel-brush-style.cjs.entry.js +1 -1
  5. package/dist/cjs/{kritzel-color_22.cjs.entry.js → kritzel-color_24.cjs.entry.js} +870 -769
  6. package/dist/cjs/loader.cjs.js +2 -2
  7. package/dist/cjs/stencil.cjs.js +3 -3
  8. package/dist/collection/classes/core/core.class.js +2 -0
  9. package/dist/collection/classes/core/viewport.class.js +43 -3
  10. package/dist/collection/classes/objects/line.class.js +1 -0
  11. package/dist/collection/classes/objects/path.class.js +1 -0
  12. package/dist/collection/classes/objects/shape.class.js +1 -0
  13. package/dist/collection/classes/objects/text.class.js +4 -3
  14. package/dist/collection/classes/providers/indexeddb-sync-provider.class.js +0 -1
  15. package/dist/collection/classes/tools/brush-tool.class.js +5 -0
  16. package/dist/collection/classes/tools/line-tool.class.js +31 -1
  17. package/dist/collection/classes/tools/selection-tool.class.js +193 -0
  18. package/dist/collection/classes/tools/shape-tool.class.js +2 -0
  19. package/dist/collection/classes/tools/text-tool.class.js +3 -0
  20. package/dist/collection/collection-manifest.json +5 -3
  21. package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js +3 -2
  22. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +37 -19
  23. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +108 -36
  24. package/dist/collection/components/shared/kritzel-color/kritzel-color.js +2 -2
  25. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.css +1 -1
  26. package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +24 -2
  27. package/dist/collection/components/shared/kritzel-font/kritzel-font.js +1 -1
  28. package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.css +1 -1
  29. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.css +1 -1
  30. package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +1 -1
  31. package/dist/collection/components/shared/kritzel-line-endings/kritzel-line-endings.css +60 -0
  32. package/dist/collection/components/shared/kritzel-line-endings/kritzel-line-endings.js +187 -0
  33. package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +15 -8
  34. package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +16 -9
  35. package/dist/collection/components/shared/kritzel-opacity-slider/kritzel-opacity-slider.css +85 -0
  36. package/dist/collection/components/shared/kritzel-opacity-slider/kritzel-opacity-slider.js +163 -0
  37. package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +1 -1
  38. package/dist/collection/components/shared/kritzel-shape-fill/kritzel-shape-fill.css +47 -0
  39. package/dist/collection/components/shared/kritzel-shape-fill/kritzel-shape-fill.js +93 -0
  40. package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +13 -7
  41. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.css +11 -2
  42. package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +2 -2
  43. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.css +1 -1
  44. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +6 -4
  45. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +6 -3
  46. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +95 -14
  47. package/dist/collection/components/ui/kritzel-tool-config/kritzel-tool-config.css +38 -0
  48. package/dist/collection/components/ui/kritzel-tool-config/kritzel-tool-config.js +321 -0
  49. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +3 -2
  50. package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js +6 -3
  51. package/dist/collection/configs/default-brush-tool.config.js +2 -52
  52. package/dist/collection/configs/default-line-tool.config.js +2 -26
  53. package/dist/collection/configs/default-shape-tool.config.js +2 -15
  54. package/dist/collection/configs/default-text-tool.config.js +2 -26
  55. package/dist/collection/constants/color-palette.constants.js +30 -0
  56. package/dist/collection/helpers/color.helper.js +31 -0
  57. package/dist/collection/helpers/tool-config.helper.js +65 -0
  58. package/dist/collection/interfaces/tool-config.interface.js +1 -0
  59. package/dist/components/index.d.ts +8 -4
  60. package/dist/components/index.js +1 -1
  61. package/dist/components/kritzel-brush-style.js +1 -1
  62. package/dist/components/kritzel-color-palette.js +1 -1
  63. package/dist/components/kritzel-color.js +1 -1
  64. package/dist/components/kritzel-context-menu.js +1 -1
  65. package/dist/components/kritzel-controls.js +1 -1
  66. package/dist/components/kritzel-cursor-trail.js +1 -1
  67. package/dist/components/kritzel-dropdown.js +1 -1
  68. package/dist/components/kritzel-editor.js +1 -1
  69. package/dist/components/kritzel-engine.js +1 -1
  70. package/dist/components/kritzel-font-family.js +1 -1
  71. package/dist/components/kritzel-font-size.js +1 -1
  72. package/dist/components/kritzel-font.js +1 -1
  73. package/dist/components/kritzel-icon.js +1 -1
  74. package/dist/components/kritzel-line-endings.d.ts +11 -0
  75. package/dist/components/kritzel-line-endings.js +1 -0
  76. package/dist/components/kritzel-menu-item.js +1 -1
  77. package/dist/components/kritzel-menu.js +1 -1
  78. package/dist/components/kritzel-opacity-slider.d.ts +11 -0
  79. package/dist/components/kritzel-opacity-slider.js +1 -0
  80. package/dist/components/kritzel-portal.js +1 -1
  81. package/dist/components/kritzel-shape-fill.d.ts +11 -0
  82. package/dist/components/kritzel-shape-fill.js +1 -0
  83. package/dist/components/kritzel-split-button.js +1 -1
  84. package/dist/components/kritzel-stroke-size.js +1 -1
  85. package/dist/components/kritzel-tool-config.d.ts +11 -0
  86. package/dist/components/kritzel-tool-config.js +1 -0
  87. package/dist/components/kritzel-tooltip.js +1 -1
  88. package/dist/components/kritzel-utility-panel.js +1 -1
  89. package/dist/components/kritzel-workspace-manager.js +1 -1
  90. package/dist/components/p-83YX0-FS.js +1 -0
  91. package/dist/components/p-8iEiCuEN.js +1 -0
  92. package/dist/components/p-9XZbc_qK.js +1 -0
  93. package/dist/components/p-B3P64-gH.js +9 -0
  94. package/dist/components/p-B8QjTqOY.js +1 -0
  95. package/dist/components/p-BF6MdW17.js +1 -0
  96. package/dist/components/p-BVIY50lR.js +1 -0
  97. package/dist/components/p-BbqT9o1F.js +1 -0
  98. package/dist/components/{p-CXzfYQ_u.js → p-BnidlyU0.js} +1 -1
  99. package/dist/components/{p-Bj_Og27M.js → p-BxS4Pdpz.js} +1 -1
  100. package/dist/components/{p-g0N9j_uT.js → p-CCj8nmQH.js} +1 -1
  101. package/dist/components/{p-1z-ds26_.js → p-CLOnpu42.js} +1 -1
  102. package/dist/components/{p-D1tfzpy8.js → p-CSGeDE4f.js} +1 -1
  103. package/dist/components/p-CbuHMNa9.js +1 -0
  104. package/dist/components/p-ClMFs3KI.js +1 -0
  105. package/dist/components/{p-IAqZFssU.js → p-Cnpk2hfo.js} +1 -1
  106. package/dist/components/{p-Cy77SpWt.js → p-Ctv4NAxk.js} +1 -1
  107. package/dist/components/p-CyHZWbkS.js +1 -0
  108. package/dist/components/{p-C4krHoUl.js → p-D8GeJNUv.js} +1 -1
  109. package/dist/components/{p-XGgKC_Fe.js → p-DKgqzi2Y.js} +1 -1
  110. package/dist/components/p-DOF5fWDU.js +1 -0
  111. package/dist/components/{p-4FEa4ADy.js → p-DV_h5Jo2.js} +1 -1
  112. package/dist/components/{p-DTezr6w9.js → p-DgCGSL2Q.js} +1 -1
  113. package/dist/components/{p-D5ZsALCP.js → p-wRXL928z.js} +1 -1
  114. package/dist/esm/{default-line-tool.config-Cw8mdDpt.js → default-line-tool.config-DLpNl6R9.js} +634 -110
  115. package/dist/esm/{index-BqhmuUH2.js → index-OLdaFN6W.js} +84 -7
  116. package/dist/esm/index.js +2 -2
  117. package/dist/esm/kritzel-brush-style.entry.js +1 -1
  118. package/dist/esm/{kritzel-color_22.entry.js → kritzel-color_24.entry.js} +859 -760
  119. package/dist/esm/loader.js +3 -3
  120. package/dist/esm/stencil.js +4 -4
  121. package/dist/stencil/index.esm.js +1 -1
  122. package/dist/stencil/{p-09295079.entry.js → p-802bc7cf.entry.js} +1 -1
  123. package/dist/stencil/p-DLpNl6R9.js +1 -0
  124. package/dist/stencil/p-OLdaFN6W.js +2 -0
  125. package/dist/stencil/p-caf30edb.entry.js +9 -0
  126. package/dist/stencil/stencil.esm.js +1 -1
  127. package/dist/types/classes/core/viewport.class.d.ts +6 -0
  128. package/dist/types/classes/objects/shape.class.d.ts +1 -0
  129. package/dist/types/classes/tools/brush-tool.class.d.ts +1 -0
  130. package/dist/types/classes/tools/line-tool.class.d.ts +2 -1
  131. package/dist/types/classes/tools/selection-tool.class.d.ts +22 -0
  132. package/dist/types/classes/tools/shape-tool.class.d.ts +1 -0
  133. package/dist/types/classes/tools/text-tool.class.d.ts +1 -0
  134. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +2 -0
  135. package/dist/types/components/shared/kritzel-color-palette/kritzel-color-palette.d.ts +1 -0
  136. package/dist/types/components/shared/kritzel-line-endings/kritzel-line-endings.d.ts +23 -0
  137. package/dist/types/components/shared/kritzel-opacity-slider/kritzel-opacity-slider.d.ts +17 -0
  138. package/dist/types/components/shared/kritzel-shape-fill/kritzel-shape-fill.d.ts +10 -0
  139. package/dist/types/components/ui/kritzel-controls/kritzel-controls.d.ts +9 -0
  140. package/dist/types/components/ui/kritzel-tool-config/kritzel-tool-config.d.ts +25 -0
  141. package/dist/types/components.d.ts +235 -82
  142. package/dist/types/constants/color-palette.constants.d.ts +5 -0
  143. package/dist/types/helpers/color.helper.d.ts +9 -0
  144. package/dist/types/helpers/tool-config.helper.d.ts +4 -0
  145. package/dist/types/interfaces/line-options.interface.d.ts +1 -0
  146. package/dist/types/interfaces/path-options.interface.d.ts +1 -0
  147. package/dist/types/interfaces/tool-config.interface.d.ts +26 -0
  148. package/dist/types/stencil-public-runtime.d.ts +29 -0
  149. package/package.json +5 -3
  150. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.css +0 -19
  151. package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +0 -134
  152. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.css +0 -19
  153. package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +0 -114
  154. package/dist/components/kritzel-control-brush-config.d.ts +0 -11
  155. package/dist/components/kritzel-control-brush-config.js +0 -1
  156. package/dist/components/kritzel-control-text-config.d.ts +0 -11
  157. package/dist/components/kritzel-control-text-config.js +0 -1
  158. package/dist/components/p-BXaWhpO2.js +0 -1
  159. package/dist/components/p-BtuXeItZ.js +0 -1
  160. package/dist/components/p-C-d2IH4v.js +0 -1
  161. package/dist/components/p-C3UriJh7.js +0 -1
  162. package/dist/components/p-CF5L2Gdl.js +0 -1
  163. package/dist/components/p-CeKT_dTd.js +0 -1
  164. package/dist/components/p-Cp15toXH.js +0 -1
  165. package/dist/components/p-D4n7UbGY.js +0 -1
  166. package/dist/components/p-Du1vxHy8.js +0 -1
  167. package/dist/components/p-exWKDgI8.js +0 -9
  168. package/dist/stencil/p-BqhmuUH2.js +0 -2
  169. package/dist/stencil/p-Cw8mdDpt.js +0 -1
  170. package/dist/stencil/p-d21a009f.entry.js +0 -9
  171. package/dist/types/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.d.ts +0 -15
  172. package/dist/types/components/ui/kritzel-control-text-config/kritzel-control-text-config.d.ts +0 -12
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-BeKMS-Zt.js');
3
+ var index = require('./index-Bj0n7fQQ.js');
4
4
  var appGlobals = require('./app-globals-V2Kpy_OQ.js');
5
5
 
6
6
  const defineCustomElements = async (win, options) => {
7
7
  if (typeof window === 'undefined') return undefined;
8
8
  await appGlobals.globalScripts();
9
- return index.bootstrapLazy([["kritzel-color_22.cjs",[[512,"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":0}],"isControlsReady":[{"onIsControlsReady":0}],"workspaces":[{"onWorkspacesChange":0}]}],[513,"kritzel-controls",{"controls":[16],"activeControl":[1040],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"undoState":[16],"firstConfig":[32],"isTooltipVisible":[32],"isTouchDevice":[32],"selectedSubOptions":[32],"openSubMenuControl":[32],"canScrollLeft":[32],"canScrollRight":[32],"closeTooltip":[64]},[[4,"click","handleDocumentClick"],[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"]]],[513,"kritzel-workspace-manager",{"activeWorkspace":[1040],"workspaces":[16],"childMenuAnchor":[32],"openChildMenuItem":[32],"newWorkspace":[32],"editingItemId":[32]},[[8,"wheel","handleWheel"]]],[513,"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],"group":[64],"ungroup":[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":0}],"scaleMax":[{"validateScaleMax":0}],"scaleMin":[{"validateScaleMin":0}],"cursorTarget":[{"onCursorTargetChange":0}]}],[513,"kritzel-control-text-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"]}],[513,"kritzel-control-brush-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"],"palette":[32]},null,{"tool":[{"handleToolChange":0}]}],[513,"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]}],[513,"kritzel-context-menu",{"items":[16],"objects":[16],"processedItems":[32]},[[9,"pointerdown","handleOutsideClick"]],{"items":[{"onItemsChanged":0}]}],[513,"kritzel-utility-panel",{"undoState":[16]}],[513,"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],"offsetY":[2,"offset-y"],"positionX":[32],"positionY":[32],"focusContent":[64]},[[4,"click","handleOutsideClick"],[9,"resize","handleWindowResize"]]],[513,"kritzel-font-family",{"fontOptions":[16],"selectedFontFamily":[1025,"selected-font-family"]}],[513,"kritzel-font-size",{"sizes":[16],"selectedSize":[1026,"selected-size"],"fontFamily":[1,"font-family"]}],[513,"kritzel-stroke-size",{"sizes":[16],"selectedSize":[1026,"selected-size"]}],[513,"kritzel-color-palette",{"colors":[16],"selectedColor":[1025,"selected-color"],"isExpanded":[4,"is-expanded"],"isOpaque":[4,"is-opaque"]}],[513,"kritzel-font",{"fontFamily":[1,"font-family"],"size":[2],"color":[1]}],[513,"kritzel-menu",{"items":[16],"parent":[16],"selectedIndex":[32],"setScrollTop":[64],"setFocus":[64]}],[513,"kritzel-menu-item",{"item":[16],"parent":[16],"isDirty":[32]},null,{"item":[{"onItemChange":0}]}],[769,"kritzel-dropdown",{"options":[16],"value":[1],"width":[1],"selectStyles":[16],"internalValue":[32],"hasSuffixContent":[32],"hasPrefixContent":[32],"isOpen":[32],"focusedIndex":[32],"openDirection":[32]},[[4,"click","handleDocumentClick"],[4,"keydown","handleDocumentKeydown"]],{"options":[{"optionsChanged":0}],"value":[{"externalValueChanged":0}]}],[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":0}]}],[513,"kritzel-color",{"value":[1],"size":[2]}],[513,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}]]],["kritzel-brush-style.cjs",[[513,"kritzel-brush-style",{"type":[1],"brushOptions":[16]}]]]], options);
9
+ return index.bootstrapLazy([["kritzel-color_24.cjs",[[512,"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":0}],"isControlsReady":[{"onIsControlsReady":0}],"workspaces":[{"onWorkspacesChange":0}]}],[513,"kritzel-controls",{"controls":[16],"activeControl":[1040],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"undoState":[16],"firstConfig":[32],"isTooltipVisible":[32],"isTouchDevice":[32],"selectedSubOptions":[32],"openSubMenuControl":[32],"canScrollLeft":[32],"canScrollRight":[32],"displayValues":[32],"closeTooltip":[64]},[[4,"click","handleDocumentClick"],[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"],[4,"objectsSelectionChange","handleSelectionChange"]]],[513,"kritzel-workspace-manager",{"activeWorkspace":[1040],"workspaces":[16],"childMenuAnchor":[32],"openChildMenuItem":[32],"newWorkspace":[32],"editingItemId":[32]},[[8,"wheel","handleWheel"]]],[513,"kritzel-engine",{"workspace":[16],"syncConfig":[16],"activeTool":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"forceUpdate":[32],"triggerSelectionChange":[64],"registerTool":[64],"changeActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"group":[64],"ungroup":[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":0}],"scaleMax":[{"validateScaleMax":0}],"scaleMin":[{"validateScaleMin":0}],"cursorTarget":[{"onCursorTargetChange":0}]}],[513,"kritzel-tool-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"],"config":[32],"palette":[32],"currentOpacity":[32],"updateTrigger":[32]},[[4,"objectsSelectionChange","handleSelectionChange"]],{"tool":[{"handleToolChange":0}]}],[513,"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]}],[513,"kritzel-context-menu",{"items":[16],"objects":[16],"processedItems":[32]},[[9,"pointerdown","handleOutsideClick"]],{"items":[{"onItemsChanged":0}]}],[513,"kritzel-utility-panel",{"undoState":[16]}],[513,"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],"offsetY":[2,"offset-y"],"positionX":[32],"positionY":[32],"focusContent":[64]},[[4,"click","handleOutsideClick"],[9,"resize","handleWindowResize"]]],[513,"kritzel-color-palette",{"colors":[16],"selectedColor":[1025,"selected-color"],"isExpanded":[4,"is-expanded"],"isOpaque":[4,"is-opaque"],"opacity":[2]}],[513,"kritzel-font-family",{"fontOptions":[16],"selectedFontFamily":[1025,"selected-font-family"]}],[513,"kritzel-font-size",{"sizes":[16],"selectedSize":[1026,"selected-size"],"fontFamily":[1,"font-family"]}],[513,"kritzel-stroke-size",{"sizes":[16],"selectedSize":[1026,"selected-size"]}],[513,"kritzel-line-endings",{"styles":[16],"value":[1040],"strokeColor":[1,"stroke-color"]}],[513,"kritzel-opacity-slider",{"value":[1026],"min":[2],"max":[2],"step":[2],"previewColor":[1,"preview-color"]}],[513,"kritzel-shape-fill",{"value":[1025]}],[513,"kritzel-font",{"fontFamily":[1,"font-family"],"size":[2],"color":[1]}],[513,"kritzel-menu",{"items":[16],"parent":[16],"selectedIndex":[32],"setScrollTop":[64],"setFocus":[64]}],[513,"kritzel-menu-item",{"item":[16],"parent":[16],"isDirty":[32]},null,{"item":[{"onItemChange":0}]}],[513,"kritzel-color",{"value":[1],"size":[2]}],[769,"kritzel-dropdown",{"options":[16],"value":[1],"width":[1],"selectStyles":[16],"internalValue":[32],"hasSuffixContent":[32],"hasPrefixContent":[32],"isOpen":[32],"focusedIndex":[32],"openDirection":[32]},[[4,"click","handleDocumentClick"],[4,"keydown","handleDocumentKeydown"]],{"options":[{"optionsChanged":0}],"value":[{"externalValueChanged":0}]}],[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":0}]}],[513,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}]]],["kritzel-brush-style.cjs",[[513,"kritzel-brush-style",{"type":[1],"brushOptions":[16]}]]]], options);
10
10
  };
11
11
 
12
12
  exports.setNonce = index.setNonce;
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-BeKMS-Zt.js');
3
+ var index = require('./index-Bj0n7fQQ.js');
4
4
  var appGlobals = require('./app-globals-V2Kpy_OQ.js');
5
5
 
6
6
  var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
7
7
  /*
8
- Stencil Client Patch Browser v4.40.1 | MIT Licensed | https://stenciljs.com
8
+ Stencil Client Patch Browser v4.41.0 | MIT Licensed | https://stenciljs.com
9
9
  */
10
10
 
11
11
  var patchBrowser = () => {
@@ -19,7 +19,7 @@ var patchBrowser = () => {
19
19
 
20
20
  patchBrowser().then(async (options) => {
21
21
  await appGlobals.globalScripts();
22
- return index.bootstrapLazy([["kritzel-color_22.cjs",[[512,"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":0}],"isControlsReady":[{"onIsControlsReady":0}],"workspaces":[{"onWorkspacesChange":0}]}],[513,"kritzel-controls",{"controls":[16],"activeControl":[1040],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"undoState":[16],"firstConfig":[32],"isTooltipVisible":[32],"isTouchDevice":[32],"selectedSubOptions":[32],"openSubMenuControl":[32],"canScrollLeft":[32],"canScrollRight":[32],"closeTooltip":[64]},[[4,"click","handleDocumentClick"],[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"]]],[513,"kritzel-workspace-manager",{"activeWorkspace":[1040],"workspaces":[16],"childMenuAnchor":[32],"openChildMenuItem":[32],"newWorkspace":[32],"editingItemId":[32]},[[8,"wheel","handleWheel"]]],[513,"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],"group":[64],"ungroup":[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":0}],"scaleMax":[{"validateScaleMax":0}],"scaleMin":[{"validateScaleMin":0}],"cursorTarget":[{"onCursorTargetChange":0}]}],[513,"kritzel-control-text-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"]}],[513,"kritzel-control-brush-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"],"palette":[32]},null,{"tool":[{"handleToolChange":0}]}],[513,"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]}],[513,"kritzel-context-menu",{"items":[16],"objects":[16],"processedItems":[32]},[[9,"pointerdown","handleOutsideClick"]],{"items":[{"onItemsChanged":0}]}],[513,"kritzel-utility-panel",{"undoState":[16]}],[513,"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],"offsetY":[2,"offset-y"],"positionX":[32],"positionY":[32],"focusContent":[64]},[[4,"click","handleOutsideClick"],[9,"resize","handleWindowResize"]]],[513,"kritzel-font-family",{"fontOptions":[16],"selectedFontFamily":[1025,"selected-font-family"]}],[513,"kritzel-font-size",{"sizes":[16],"selectedSize":[1026,"selected-size"],"fontFamily":[1,"font-family"]}],[513,"kritzel-stroke-size",{"sizes":[16],"selectedSize":[1026,"selected-size"]}],[513,"kritzel-color-palette",{"colors":[16],"selectedColor":[1025,"selected-color"],"isExpanded":[4,"is-expanded"],"isOpaque":[4,"is-opaque"]}],[513,"kritzel-font",{"fontFamily":[1,"font-family"],"size":[2],"color":[1]}],[513,"kritzel-menu",{"items":[16],"parent":[16],"selectedIndex":[32],"setScrollTop":[64],"setFocus":[64]}],[513,"kritzel-menu-item",{"item":[16],"parent":[16],"isDirty":[32]},null,{"item":[{"onItemChange":0}]}],[769,"kritzel-dropdown",{"options":[16],"value":[1],"width":[1],"selectStyles":[16],"internalValue":[32],"hasSuffixContent":[32],"hasPrefixContent":[32],"isOpen":[32],"focusedIndex":[32],"openDirection":[32]},[[4,"click","handleDocumentClick"],[4,"keydown","handleDocumentKeydown"]],{"options":[{"optionsChanged":0}],"value":[{"externalValueChanged":0}]}],[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":0}]}],[513,"kritzel-color",{"value":[1],"size":[2]}],[513,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}]]],["kritzel-brush-style.cjs",[[513,"kritzel-brush-style",{"type":[1],"brushOptions":[16]}]]]], options);
22
+ return index.bootstrapLazy([["kritzel-color_24.cjs",[[512,"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":0}],"isControlsReady":[{"onIsControlsReady":0}],"workspaces":[{"onWorkspacesChange":0}]}],[513,"kritzel-controls",{"controls":[16],"activeControl":[1040],"isUtilityPanelVisible":[4,"is-utility-panel-visible"],"undoState":[16],"firstConfig":[32],"isTooltipVisible":[32],"isTouchDevice":[32],"selectedSubOptions":[32],"openSubMenuControl":[32],"canScrollLeft":[32],"canScrollRight":[32],"displayValues":[32],"closeTooltip":[64]},[[4,"click","handleDocumentClick"],[8,"keydown","handleKeyDown"],[4,"activeToolChange","handleActiveToolChange"],[4,"objectsSelectionChange","handleSelectionChange"]]],[513,"kritzel-workspace-manager",{"activeWorkspace":[1040],"workspaces":[16],"childMenuAnchor":[32],"openChildMenuItem":[32],"newWorkspace":[32],"editingItemId":[32]},[[8,"wheel","handleWheel"]]],[513,"kritzel-engine",{"workspace":[16],"syncConfig":[16],"activeTool":[16],"globalContextMenuItems":[16],"objectContextMenuItems":[16],"scaleMax":[1026,"scale-max"],"scaleMin":[1026,"scale-min"],"cursorTarget":[16],"forceUpdate":[32],"triggerSelectionChange":[64],"registerTool":[64],"changeActiveTool":[64],"disable":[64],"enable":[64],"delete":[64],"copy":[64],"paste":[64],"bringForward":[64],"sendBackward":[64],"bringToFront":[64],"sendToBack":[64],"group":[64],"ungroup":[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":0}],"scaleMax":[{"validateScaleMax":0}],"scaleMin":[{"validateScaleMin":0}],"cursorTarget":[{"onCursorTargetChange":0}]}],[513,"kritzel-tool-config",{"tool":[1040],"isExpanded":[1028,"is-expanded"],"config":[32],"palette":[32],"currentOpacity":[32],"updateTrigger":[32]},[[4,"objectsSelectionChange","handleSelectionChange"]],{"tool":[{"handleToolChange":0}]}],[513,"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]}],[513,"kritzel-context-menu",{"items":[16],"objects":[16],"processedItems":[32]},[[9,"pointerdown","handleOutsideClick"]],{"items":[{"onItemsChanged":0}]}],[513,"kritzel-utility-panel",{"undoState":[16]}],[513,"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],"offsetY":[2,"offset-y"],"positionX":[32],"positionY":[32],"focusContent":[64]},[[4,"click","handleOutsideClick"],[9,"resize","handleWindowResize"]]],[513,"kritzel-color-palette",{"colors":[16],"selectedColor":[1025,"selected-color"],"isExpanded":[4,"is-expanded"],"isOpaque":[4,"is-opaque"],"opacity":[2]}],[513,"kritzel-font-family",{"fontOptions":[16],"selectedFontFamily":[1025,"selected-font-family"]}],[513,"kritzel-font-size",{"sizes":[16],"selectedSize":[1026,"selected-size"],"fontFamily":[1,"font-family"]}],[513,"kritzel-stroke-size",{"sizes":[16],"selectedSize":[1026,"selected-size"]}],[513,"kritzel-line-endings",{"styles":[16],"value":[1040],"strokeColor":[1,"stroke-color"]}],[513,"kritzel-opacity-slider",{"value":[1026],"min":[2],"max":[2],"step":[2],"previewColor":[1,"preview-color"]}],[513,"kritzel-shape-fill",{"value":[1025]}],[513,"kritzel-font",{"fontFamily":[1,"font-family"],"size":[2],"color":[1]}],[513,"kritzel-menu",{"items":[16],"parent":[16],"selectedIndex":[32],"setScrollTop":[64],"setFocus":[64]}],[513,"kritzel-menu-item",{"item":[16],"parent":[16],"isDirty":[32]},null,{"item":[{"onItemChange":0}]}],[513,"kritzel-color",{"value":[1],"size":[2]}],[769,"kritzel-dropdown",{"options":[16],"value":[1],"width":[1],"selectStyles":[16],"internalValue":[32],"hasSuffixContent":[32],"hasPrefixContent":[32],"isOpen":[32],"focusedIndex":[32],"openDirection":[32]},[[4,"click","handleDocumentClick"],[4,"keydown","handleDocumentKeydown"]],{"options":[{"optionsChanged":0}],"value":[{"externalValueChanged":0}]}],[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":0}]}],[513,"kritzel-icon",{"name":[1],"label":[1],"size":[2]}]]],["kritzel-brush-style.cjs",[[513,"kritzel-brush-style",{"type":[1],"brushOptions":[16]}]]]], options);
23
23
  });
24
24
 
25
25
  exports.setNonce = index.setNonce;
@@ -217,11 +217,13 @@ export class KritzelCore {
217
217
  this.removeSelectionGroup();
218
218
  this.removeSelectionBox();
219
219
  this._store.state.objects.insert(selectionGroup);
220
+ this._kritzelEngine.triggerSelectionChange();
220
221
  }
221
222
  removeSelectionGroup() {
222
223
  const selectionGroup = this._store.selectionGroup;
223
224
  if (selectionGroup) {
224
225
  this._store.state.objects.remove(object => object.id === selectionGroup.id);
226
+ this._kritzelEngine.triggerSelectionChange();
225
227
  }
226
228
  }
227
229
  removeSelectionBox() {
@@ -4,6 +4,11 @@ export class KritzelViewport {
4
4
  _core;
5
5
  _debounceUpdate;
6
6
  _debounceEndScaling;
7
+ _velocityX = 0;
8
+ _velocityY = 0;
9
+ _panRafId = null;
10
+ _friction = 0.92;
11
+ _minVelocity = 0.5;
7
12
  initialTouchDistance = 0;
8
13
  startX = 0;
9
14
  startY = 0;
@@ -187,11 +192,46 @@ export class KritzelViewport {
187
192
  this._debounceEndScaling();
188
193
  }
189
194
  handlePan(event) {
195
+ // Normalize delta for trackpad vs mouse wheel
196
+ // WheelEvent.deltaMode: 0=pixels, 1=lines, 2=pages
197
+ let deltaX = event.deltaX;
198
+ let deltaY = event.deltaY;
199
+ if (event.deltaMode === 1) {
200
+ deltaX *= 16;
201
+ deltaY *= 16;
202
+ }
203
+ else if (event.deltaMode === 2) {
204
+ deltaX *= window.innerWidth;
205
+ deltaY *= window.innerHeight;
206
+ }
190
207
  const panSpeed = 0.8;
191
- this._core.store.state.translateX = this._core.store.state.translateX - event.deltaX * panSpeed;
192
- this._core.store.state.translateY = this._core.store.state.translateY - event.deltaY * panSpeed;
208
+ // Add to velocity for momentum effect
209
+ this._velocityX = -deltaX * panSpeed;
210
+ this._velocityY = -deltaY * panSpeed;
211
+ // Start animation loop if not already running
212
+ if (this._panRafId === null) {
213
+ this._animatePan();
214
+ }
215
+ }
216
+ _animatePan() {
217
+ // Apply current velocity
218
+ this._core.store.state.translateX += this._velocityX;
219
+ this._core.store.state.translateY += this._velocityY;
193
220
  this._core.store.state.hasViewportChanged = true;
194
221
  this._core.rerender();
195
- this._debounceUpdate();
222
+ // Apply friction to slow down
223
+ this._velocityX *= this._friction;
224
+ this._velocityY *= this._friction;
225
+ // Continue animation if velocity is still significant
226
+ if (Math.abs(this._velocityX) > this._minVelocity || Math.abs(this._velocityY) > this._minVelocity) {
227
+ this._panRafId = requestAnimationFrame(() => this._animatePan());
228
+ }
229
+ else {
230
+ // Stop animation and finalize
231
+ this._velocityX = 0;
232
+ this._velocityY = 0;
233
+ this._panRafId = null;
234
+ this._debounceUpdate();
235
+ }
196
236
  }
197
237
  }
@@ -68,6 +68,7 @@ export class KritzelLine extends KritzelBaseObject {
68
68
  object.scale = options?.scale ?? 1;
69
69
  object.strokeWidth = options?.strokeWidth ?? 4;
70
70
  object.stroke = options?.stroke ?? '#000000';
71
+ object.opacity = options?.opacity ?? 1;
71
72
  object.startAnchor = options?.startAnchor;
72
73
  object.endAnchor = options?.endAnchor;
73
74
  object.arrows = options?.arrows;
@@ -47,6 +47,7 @@ export class KritzelPath extends KritzelBaseObject {
47
47
  object.scale = options?.scale ?? 1;
48
48
  object.strokeWidth = options?.strokeWidth ?? 8;
49
49
  object.fill = options?.fill ?? '#000000';
50
+ object.opacity = options?.opacity ?? 1;
50
51
  object.zIndex = core.store.currentZIndex;
51
52
  object.d = object.generateSvgPath();
52
53
  object.updateDimensions();
@@ -86,6 +86,7 @@ export class KritzelShape extends KritzelBaseObject {
86
86
  object.fillColor = config?.fillColor ?? 'transparent';
87
87
  object.strokeColor = config?.strokeColor ?? '#000000';
88
88
  object.strokeWidth = config?.strokeWidth ?? 4;
89
+ object.opacity = config?.opacity ?? 1;
89
90
  object.fontSize = config?.fontSize ?? 16;
90
91
  object.fontFamily = config?.fontFamily ?? 'Arial';
91
92
  object.fontColor = config?.fontColor ?? '#000000';
@@ -78,13 +78,14 @@ export class KritzelText extends KritzelBaseObject {
78
78
  if (element === null || this.isInViewport() === false) {
79
79
  return;
80
80
  }
81
+ element.style.fontFamily = this.fontFamily;
82
+ element.style.fontSize = `${this.fontSize}pt`;
83
+ element.style.color = this.fontColor;
81
84
  if (this.isMounted && this.elementRef === element && this.editor.dom.parentElement === element) {
85
+ requestAnimationFrame(() => this.adjustSizeOnInput());
82
86
  return;
83
87
  }
84
88
  this.elementRef = element;
85
- this.elementRef.style.fontFamily = this.fontFamily;
86
- this.elementRef.style.fontSize = `${this.fontSize}pt`;
87
- this.elementRef.style.color = this.fontColor;
88
89
  this.elementRef.style.whiteSpace = 'pre-wrap';
89
90
  this.elementRef.style.wordWrap = 'break-word';
90
91
  this.elementRef.innerHTML = '';
@@ -8,7 +8,6 @@ export class IndexedDBSyncProvider {
8
8
  constructor(docName, doc, options) {
9
9
  const dbName = options?.name || docName;
10
10
  this.provider = new IndexeddbPersistence(dbName, doc);
11
- console.info(`IndexedDB Persistence initialized: ${dbName}`);
12
11
  }
13
12
  async connect() {
14
13
  if (this.isConnected) {
@@ -5,6 +5,7 @@ export class KritzelBrushTool extends KritzelBaseTool {
5
5
  type = 'pen';
6
6
  color = '#000000';
7
7
  size = 6;
8
+ opacity = 1;
8
9
  palettes = {
9
10
  pen: ['#000000', '#FFFFFF', '#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF', '#00FFFF', '#808080', '#C0C0C0', '#800000', '#008000', '#000080', '#800080'],
10
11
  highlighter: ['#ffff00', '#ffb347', '#b4ffb4'],
@@ -29,6 +30,7 @@ export class KritzelBrushTool extends KritzelBaseTool {
29
30
  scale: this._core.store.state.scale,
30
31
  fill: this.color,
31
32
  strokeWidth: this.size,
33
+ opacity: this.opacity,
32
34
  });
33
35
  path.isCompleted = false;
34
36
  this._currentPathId = path.id;
@@ -48,6 +50,7 @@ export class KritzelBrushTool extends KritzelBaseTool {
48
50
  scale: this._core.store.state.scale,
49
51
  fill: this.color,
50
52
  strokeWidth: this.size,
53
+ opacity: this.opacity,
51
54
  });
52
55
  path.isCompleted = false;
53
56
  this._currentPathId = path.id;
@@ -73,6 +76,7 @@ export class KritzelBrushTool extends KritzelBaseTool {
73
76
  scale: this._core.store.state.scale,
74
77
  fill: this.color,
75
78
  strokeWidth: this.size,
79
+ opacity: this.opacity,
76
80
  });
77
81
  updatedPath.id = currentPath.id;
78
82
  updatedPath.workspaceId = currentPath.workspaceId;
@@ -98,6 +102,7 @@ export class KritzelBrushTool extends KritzelBaseTool {
98
102
  scale: this._core.store.state.scale,
99
103
  fill: this.color,
100
104
  strokeWidth: this.size,
105
+ opacity: this.opacity,
101
106
  });
102
107
  updatedPath.id = currentPath.id;
103
108
  updatedPath.workspaceId = currentPath.workspaceId;
@@ -6,7 +6,33 @@ import { KritzelSelectionGroup } from "../objects/selection-group.class";
6
6
  export class KritzelLineTool extends KritzelBaseTool {
7
7
  color = '#000000';
8
8
  size = 4;
9
- palettes = ['#000000', '#FFFFFF', '#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF', '#00FFFF', '#808080', '#C0C0C0', '#800000', '#008000', '#000080', '#808000', '#800080'];
9
+ opacity = 1;
10
+ palette = [
11
+ '#000000',
12
+ '#ff5252',
13
+ '#ffbc00',
14
+ '#00c853',
15
+ '#0000FF',
16
+ '#d500f9',
17
+ '#fafafa',
18
+ '#a52714',
19
+ '#ee8100',
20
+ '#558b2f',
21
+ '#01579b',
22
+ '#8e24aa',
23
+ '#90a4ae',
24
+ '#ff4081',
25
+ '#ff6e40',
26
+ '#aeea00',
27
+ '#304ffe',
28
+ '#7c4dff',
29
+ '#cfd8dc',
30
+ '#f8bbd0',
31
+ '#ffccbc',
32
+ '#f0f4c3',
33
+ '#9fa8da',
34
+ '#d1c4e9',
35
+ ];
10
36
  /** Arrow head configuration for lines created with this tool */
11
37
  arrows;
12
38
  _startX = 0;
@@ -35,6 +61,7 @@ export class KritzelLineTool extends KritzelBaseTool {
35
61
  scale: this._core.store.state.scale,
36
62
  stroke: this.color,
37
63
  strokeWidth: this.size,
64
+ opacity: this.opacity,
38
65
  arrows: this.arrows,
39
66
  });
40
67
  line.isCompleted = false;
@@ -59,6 +86,7 @@ export class KritzelLineTool extends KritzelBaseTool {
59
86
  scale: this._core.store.state.scale,
60
87
  stroke: this.color,
61
88
  strokeWidth: this.size,
89
+ opacity: this.opacity,
62
90
  arrows: this.arrows,
63
91
  });
64
92
  line.isCompleted = false;
@@ -86,6 +114,7 @@ export class KritzelLineTool extends KritzelBaseTool {
86
114
  scale: this._core.store.state.scale,
87
115
  stroke: this.color,
88
116
  strokeWidth: this.size,
117
+ opacity: this.opacity,
89
118
  arrows: this.arrows,
90
119
  });
91
120
  updatedLine.id = currentLine.id;
@@ -113,6 +142,7 @@ export class KritzelLineTool extends KritzelBaseTool {
113
142
  scale: this._core.store.state.scale,
114
143
  stroke: this.color,
115
144
  strokeWidth: this.size,
145
+ opacity: this.opacity,
116
146
  arrows: this.arrows,
117
147
  });
118
148
  updatedLine.id = currentLine.id;
@@ -4,9 +4,15 @@ import { KritzelResizeHandler } from "../handlers/resize.handler";
4
4
  import { KritzelRotationHandler } from "../handlers/rotation.handler";
5
5
  import { KritzelSelectionHandler } from "../handlers/selection.handler";
6
6
  import { KritzelSelectionGroup } from "../objects/selection-group.class";
7
+ import { KritzelGroup } from "../objects/group.class";
7
8
  import { KritzelBaseTool } from "./base-tool.class";
8
9
  import { KritzelHoverHandler } from "../handlers/hover.handler";
9
10
  import { KritzelLineHandleHandler } from "../handlers/line-handle.handler";
11
+ import { KritzelPath } from "../objects/path.class";
12
+ import { KritzelLine } from "../objects/line.class";
13
+ import { KritzelShape } from "../objects/shape.class";
14
+ import { KritzelText } from "../objects/text.class";
15
+ import { DEFAULT_COLOR_PALETTE } from "../../constants/color-palette.constants";
10
16
  export class KritzelSelectionTool extends KritzelBaseTool {
11
17
  selectionHandler;
12
18
  moveHandler;
@@ -14,6 +20,193 @@ export class KritzelSelectionTool extends KritzelBaseTool {
14
20
  resizeHandler;
15
21
  rotationHandler;
16
22
  lineHandleHandler;
23
+ palette = [...DEFAULT_COLOR_PALETTE];
24
+ /** Returns true if there are objects in the selection group */
25
+ hasSelection() {
26
+ return !!this._core.store.selectionGroup && this._core.store.selectionGroup.objects.length > 0;
27
+ }
28
+ /** Returns the selected objects or empty array */
29
+ getSelectedObjects() {
30
+ return this._core.store.selectionGroup?.objects ?? [];
31
+ }
32
+ flattenObjects(objects) {
33
+ let result = [];
34
+ for (const obj of objects) {
35
+ if (obj instanceof KritzelGroup) {
36
+ result = result.concat(this.flattenObjects(obj.children));
37
+ }
38
+ else {
39
+ result.push(obj);
40
+ }
41
+ }
42
+ return result;
43
+ }
44
+ get color() {
45
+ const objects = this.flattenObjects(this.getSelectedObjects());
46
+ if (objects.length === 0)
47
+ return '#000000';
48
+ for (const obj of objects) {
49
+ if (obj instanceof KritzelPath)
50
+ return obj.fill;
51
+ if (obj instanceof KritzelLine)
52
+ return obj.stroke;
53
+ if (obj instanceof KritzelText)
54
+ return obj.fontColor;
55
+ if (obj instanceof KritzelShape)
56
+ return obj.strokeColor;
57
+ }
58
+ return '#000000';
59
+ }
60
+ set color(value) {
61
+ const objects = this.flattenObjects(this.getSelectedObjects());
62
+ objects.forEach(obj => {
63
+ if (obj instanceof KritzelPath)
64
+ this._core.updateObject(obj, { fill: value });
65
+ if (obj instanceof KritzelLine)
66
+ this._core.updateObject(obj, { stroke: value });
67
+ if (obj instanceof KritzelText)
68
+ this._core.updateObject(obj, { fontColor: value });
69
+ if (obj instanceof KritzelShape)
70
+ this._core.updateObject(obj, { strokeColor: value });
71
+ });
72
+ this._core.rerender();
73
+ }
74
+ get opacity() {
75
+ const objects = this.flattenObjects(this.getSelectedObjects());
76
+ if (objects.length === 0)
77
+ return 1;
78
+ return objects[0].opacity;
79
+ }
80
+ set opacity(value) {
81
+ const objects = this.flattenObjects(this.getSelectedObjects());
82
+ objects.forEach(obj => this._core.updateObject(obj, { opacity: value }));
83
+ this._core.rerender();
84
+ }
85
+ get size() {
86
+ const objects = this.flattenObjects(this.getSelectedObjects());
87
+ if (objects.length === 0)
88
+ return 1;
89
+ for (const obj of objects) {
90
+ if (obj instanceof KritzelPath)
91
+ return obj.strokeWidth;
92
+ if (obj instanceof KritzelLine)
93
+ return obj.strokeWidth;
94
+ if (obj instanceof KritzelText)
95
+ return obj.fontSize;
96
+ if (obj instanceof KritzelShape)
97
+ return obj.strokeWidth;
98
+ }
99
+ return 1;
100
+ }
101
+ set size(value) {
102
+ const objects = this.flattenObjects(this.getSelectedObjects());
103
+ objects.forEach(obj => {
104
+ if (obj instanceof KritzelPath)
105
+ this._core.updateObject(obj, { strokeWidth: value });
106
+ if (obj instanceof KritzelLine)
107
+ this._core.updateObject(obj, { strokeWidth: value });
108
+ if (obj instanceof KritzelText)
109
+ this._core.updateObject(obj, { fontSize: value });
110
+ if (obj instanceof KritzelShape)
111
+ this._core.updateObject(obj, { strokeWidth: value });
112
+ });
113
+ this._core.rerender();
114
+ }
115
+ get fillColor() {
116
+ const objects = this.flattenObjects(this.getSelectedObjects());
117
+ for (const obj of objects) {
118
+ if (obj instanceof KritzelShape)
119
+ return obj.fillColor;
120
+ }
121
+ return 'transparent';
122
+ }
123
+ set fillColor(value) {
124
+ const objects = this.flattenObjects(this.getSelectedObjects());
125
+ objects.forEach(obj => {
126
+ if (obj instanceof KritzelShape) {
127
+ this._core.updateObject(obj, { fillColor: value });
128
+ // When switching to fill mode, also update stroke color to match
129
+ if (value !== 'transparent') {
130
+ this._core.updateObject(obj, { strokeColor: value });
131
+ }
132
+ }
133
+ });
134
+ this._core.rerender();
135
+ }
136
+ get fontFamily() {
137
+ const objects = this.flattenObjects(this.getSelectedObjects());
138
+ for (const obj of objects) {
139
+ if (obj instanceof KritzelText)
140
+ return obj.fontFamily;
141
+ if (obj instanceof KritzelShape)
142
+ return obj.fontFamily;
143
+ }
144
+ return 'Arial';
145
+ }
146
+ set fontFamily(value) {
147
+ const objects = this.flattenObjects(this.getSelectedObjects());
148
+ objects.forEach(obj => {
149
+ if (obj instanceof KritzelText)
150
+ this._core.updateObject(obj, { fontFamily: value });
151
+ if (obj instanceof KritzelShape)
152
+ this._core.updateObject(obj, { fontFamily: value });
153
+ });
154
+ this._core.rerender();
155
+ }
156
+ get arrows() {
157
+ const objects = this.flattenObjects(this.getSelectedObjects());
158
+ for (const obj of objects) {
159
+ if (obj instanceof KritzelLine)
160
+ return obj.arrows;
161
+ }
162
+ return { start: { enabled: false }, end: { enabled: false } };
163
+ }
164
+ set arrows(value) {
165
+ const objects = this.flattenObjects(this.getSelectedObjects());
166
+ objects.forEach(obj => {
167
+ if (obj instanceof KritzelLine)
168
+ this._core.updateObject(obj, { arrows: value });
169
+ });
170
+ this._core.rerender();
171
+ }
172
+ /** Returns the tool config for selected objects, or null if no selection */
173
+ getToolConfig() {
174
+ if (!this.hasSelection())
175
+ return null;
176
+ const objects = this.flattenObjects(this.getSelectedObjects());
177
+ const controls = [];
178
+ const hasShape = objects.some(o => o instanceof KritzelShape);
179
+ const hasText = objects.some(o => o instanceof KritzelText);
180
+ const hasLine = objects.some(o => o instanceof KritzelLine);
181
+ const hasStroke = objects.some(o => o instanceof KritzelPath || o instanceof KritzelLine || o instanceof KritzelShape);
182
+ if (hasText && !hasStroke) {
183
+ controls.push({ type: 'font-size', propertyName: 'size' });
184
+ controls.push({ type: 'font-family', propertyName: 'fontFamily' });
185
+ }
186
+ else if (hasStroke && !hasText) {
187
+ controls.push({ type: 'stroke-size', propertyName: 'size' });
188
+ }
189
+ else {
190
+ if (hasStroke)
191
+ controls.push({ type: 'stroke-size', propertyName: 'size' });
192
+ if (hasText)
193
+ controls.push({ type: 'font-family', propertyName: 'fontFamily' });
194
+ }
195
+ if (hasLine) {
196
+ controls.push({ type: 'line-endings', propertyName: 'arrows' });
197
+ }
198
+ if (hasShape) {
199
+ controls.push({ type: 'shape-fill', propertyName: 'fillColor' });
200
+ }
201
+ return {
202
+ type: 'selection',
203
+ colorProperty: 'color',
204
+ sizeProperty: 'size',
205
+ opacityProperty: 'opacity',
206
+ paletteSource: 'palette',
207
+ controls,
208
+ };
209
+ }
17
210
  constructor(core) {
18
211
  super(core);
19
212
  this.selectionHandler = new KritzelSelectionHandler(this._core);
@@ -8,6 +8,7 @@ export class KritzelShapeTool extends KritzelBaseTool {
8
8
  fillColor = 'transparent';
9
9
  strokeColor = '#000000';
10
10
  strokeWidth = 4;
11
+ opacity = 1;
11
12
  fontFamily = 'Arial';
12
13
  fontSize = 16;
13
14
  fontColor = '#000000';
@@ -143,6 +144,7 @@ export class KritzelShapeTool extends KritzelBaseTool {
143
144
  fillColor: this.fillColor,
144
145
  strokeColor: this.strokeColor,
145
146
  strokeWidth: this.strokeWidth,
147
+ opacity: this.opacity,
146
148
  fontSize: this.fontSize,
147
149
  fontFamily: this.fontFamily,
148
150
  fontColor: this.fontColor,
@@ -6,6 +6,7 @@ export class KritzelTextTool extends KritzelBaseTool {
6
6
  fontFamily = 'Arial';
7
7
  fontSize = 16;
8
8
  fontColor = '#000000';
9
+ opacity = 1;
9
10
  palette = [
10
11
  '#000000',
11
12
  '#FFFFFF',
@@ -56,6 +57,7 @@ export class KritzelTextTool extends KritzelBaseTool {
56
57
  const clientY = event.clientY - this._core.store.offsetY;
57
58
  const text = KritzelText.create(this._core, this.fontSize, this.fontFamily);
58
59
  text.fontColor = this.fontColor;
60
+ text.opacity = this.opacity;
59
61
  text.translateX = (clientX - this._core.store.state.translateX) / this._core.store.state.scale;
60
62
  text.translateY = (clientY - this._core.store.state.translateY) / this._core.store.state.scale;
61
63
  text.zIndex = this._core.store.currentZIndex;
@@ -90,6 +92,7 @@ export class KritzelTextTool extends KritzelBaseTool {
90
92
  const clientY = Math.round(activePointers[0].clientY - this._core.store.offsetY);
91
93
  const text = KritzelText.create(this._core, this.fontSize, this.fontFamily);
92
94
  text.fontColor = this.fontColor;
95
+ text.opacity = this.opacity;
93
96
  text.translateX = (clientX - this._core.store.state.translateX) / this._core.store.state.scale;
94
97
  text.translateY = (clientY - this._core.store.state.translateY) / this._core.store.state.scale;
95
98
  text.zIndex = this._core.store.currentZIndex;
@@ -5,6 +5,7 @@
5
5
  "components/core/kritzel-engine/kritzel-engine.js",
6
6
  "components/ui/kritzel-context-menu/kritzel-context-menu.js",
7
7
  "components/shared/kritzel-font-family/kritzel-font-family.js",
8
+ "components/shared/kritzel-shape-fill/kritzel-shape-fill.js",
8
9
  "components/core/kritzel-cursor-trail/kritzel-cursor-trail.js",
9
10
  "components/core/kritzel-editor/kritzel-editor.js",
10
11
  "components/shared/kritzel-color/kritzel-color.js",
@@ -12,21 +13,22 @@
12
13
  "components/shared/kritzel-font/kritzel-font.js",
13
14
  "components/shared/kritzel-font-size/kritzel-font-size.js",
14
15
  "components/shared/kritzel-icon/kritzel-icon.js",
16
+ "components/shared/kritzel-line-endings/kritzel-line-endings.js",
15
17
  "components/shared/kritzel-menu/kritzel-menu.js",
16
18
  "components/shared/kritzel-menu-item/kritzel-menu-item.js",
19
+ "components/shared/kritzel-opacity-slider/kritzel-opacity-slider.js",
17
20
  "components/shared/kritzel-portal/kritzel-portal.js",
18
21
  "components/shared/kritzel-split-button/kritzel-split-button.js",
19
22
  "components/shared/kritzel-stroke-size/kritzel-stroke-size.js",
20
23
  "components/shared/kritzel-tooltip/kritzel-tooltip.js",
21
- "components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js",
22
- "components/ui/kritzel-control-text-config/kritzel-control-text-config.js",
23
24
  "components/ui/kritzel-controls/kritzel-controls.js",
25
+ "components/ui/kritzel-tool-config/kritzel-tool-config.js",
24
26
  "components/ui/kritzel-utility-panel/kritzel-utility-panel.js",
25
27
  "components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js"
26
28
  ],
27
29
  "compiler": {
28
30
  "name": "@stencil/core",
29
- "version": "4.40.1",
31
+ "version": "4.41.0",
30
32
  "typescriptVersion": "5.8.3"
31
33
  },
32
34
  "collections": [],