kritzel-stencil 0.0.119 → 0.0.121

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 (167) hide show
  1. package/dist/cjs/{index-CXT94beA.js → index-BcrLbdO1.js} +50 -10
  2. package/dist/cjs/index-BcrLbdO1.js.map +1 -0
  3. package/dist/cjs/index-BjLSiQIM.js +2342 -0
  4. package/dist/cjs/index-BjLSiQIM.js.map +1 -0
  5. package/dist/cjs/index.cjs.js +8 -1
  6. package/dist/cjs/index.cjs.js.map +1 -1
  7. package/dist/cjs/kritzel-brush-style_18.cjs.entry.js +363 -1743
  8. package/dist/cjs/kritzel-brush-style_18.cjs.entry.js.map +1 -1
  9. package/dist/cjs/loader.cjs.js +2 -2
  10. package/dist/cjs/stencil.cjs.js +3 -3
  11. package/dist/cjs/stencil.cjs.js.map +1 -1
  12. package/dist/collection/classes/commands/add-selection-group.command.js +2 -0
  13. package/dist/collection/classes/commands/add-selection-group.command.js.map +1 -1
  14. package/dist/collection/classes/objects/base-object.class.js +4 -0
  15. package/dist/collection/classes/objects/base-object.class.js.map +1 -1
  16. package/dist/collection/classes/objects/image.class.js +23 -2
  17. package/dist/collection/classes/objects/image.class.js.map +1 -1
  18. package/dist/collection/classes/objects/path.class.js +15 -5
  19. package/dist/collection/classes/objects/path.class.js.map +1 -1
  20. package/dist/collection/classes/objects/text.class.js +2 -1
  21. package/dist/collection/classes/objects/text.class.js.map +1 -1
  22. package/dist/collection/classes/store.class.js +2 -13
  23. package/dist/collection/classes/store.class.js.map +1 -1
  24. package/dist/collection/classes/tools/image-tool.class.js +6 -23
  25. package/dist/collection/classes/tools/image-tool.class.js.map +1 -1
  26. package/dist/collection/classes/tools/selection-tool.class.js +4 -13
  27. package/dist/collection/classes/tools/selection-tool.class.js.map +1 -1
  28. package/dist/collection/classes/viewport.class.js.map +1 -1
  29. package/dist/collection/collection-manifest.json +1 -1
  30. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +217 -13
  31. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
  32. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +159 -68
  33. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  34. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +104 -4
  35. package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js.map +1 -1
  36. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +30 -9
  37. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +1 -1
  38. package/dist/collection/configs/default-brush-tool.config.js +60 -0
  39. package/dist/collection/configs/default-brush-tool.config.js.map +1 -0
  40. package/dist/collection/configs/default-engine-state.js +6 -2
  41. package/dist/collection/configs/default-engine-state.js.map +1 -1
  42. package/dist/collection/configs/default-text-tool.config.js +32 -0
  43. package/dist/collection/configs/default-text-tool.config.js.map +1 -0
  44. package/dist/collection/constants/engine.constants.js +3 -0
  45. package/dist/collection/constants/engine.constants.js.map +1 -0
  46. package/dist/collection/index.js +8 -0
  47. package/dist/collection/index.js.map +1 -1
  48. package/dist/collection/interfaces/context-menu-item.interface.js.map +1 -1
  49. package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
  50. package/dist/collection/interfaces/object.interface.js.map +1 -1
  51. package/dist/components/index.js +4 -4
  52. package/dist/components/kritzel-brush-style.js +1 -1
  53. package/dist/components/kritzel-color-palette.js +1 -1
  54. package/dist/components/kritzel-color.js +1 -1
  55. package/dist/components/kritzel-context-menu.js +1 -1
  56. package/dist/components/kritzel-control-brush-config.js +1 -1
  57. package/dist/components/kritzel-control-text-config.js +1 -1
  58. package/dist/components/kritzel-controls.js +1 -1
  59. package/dist/components/kritzel-cursor-trail.js +1 -1
  60. package/dist/components/kritzel-dropdown.js +1 -1
  61. package/dist/components/kritzel-editor.js +110 -68
  62. package/dist/components/kritzel-editor.js.map +1 -1
  63. package/dist/components/kritzel-engine.js +1 -1
  64. package/dist/components/kritzel-font-family.js +1 -1
  65. package/dist/components/kritzel-font-size.js +1 -1
  66. package/dist/components/kritzel-font.js +1 -1
  67. package/dist/components/kritzel-icon.js +1 -1
  68. package/dist/components/kritzel-stroke-size.js +1 -1
  69. package/dist/components/kritzel-tooltip.js +1 -1
  70. package/dist/components/kritzel-utility-panel.js +1 -1
  71. package/dist/components/{p-CtNzxQ7T.js → p--2FkikYE.js} +4 -4
  72. package/dist/components/{p-CtNzxQ7T.js.map → p--2FkikYE.js.map} +1 -1
  73. package/dist/components/{p-LIijWPsT.js → p--tElassI.js} +4 -4
  74. package/dist/components/{p-LIijWPsT.js.map → p--tElassI.js.map} +1 -1
  75. package/dist/components/{p-C6kzcN4b.js → p-B2wWYPH8.js} +4 -4
  76. package/dist/components/{p-C6kzcN4b.js.map → p-B2wWYPH8.js.map} +1 -1
  77. package/dist/components/{p-93b-eQ0s.js → p-BAMl2Ww6.js} +29 -27
  78. package/dist/components/p-BAMl2Ww6.js.map +1 -0
  79. package/dist/components/{p-B8nuvSxt.js → p-BSS4UREq.js} +10 -10
  80. package/dist/components/{p-B8nuvSxt.js.map → p-BSS4UREq.js.map} +1 -1
  81. package/dist/components/{p-JQA2FRVr.js → p-C3E9PtD3.js} +11 -11
  82. package/dist/components/{p-JQA2FRVr.js.map → p-C3E9PtD3.js.map} +1 -1
  83. package/dist/components/{p-B57pFHwJ.js → p-CDpq9L_H.js} +4 -4
  84. package/dist/components/{p-B57pFHwJ.js.map → p-CDpq9L_H.js.map} +1 -1
  85. package/dist/components/p-CEYRFk55.js +119 -0
  86. package/dist/components/p-CEYRFk55.js.map +1 -0
  87. package/dist/components/{p-BV9-NuyD.js → p-CIb4IA9u.js} +6 -6
  88. package/dist/components/{p-BV9-NuyD.js.map → p-CIb4IA9u.js.map} +1 -1
  89. package/dist/components/{p-eBBOf568.js → p-CqPrOhzi.js} +5 -5
  90. package/dist/components/{p-eBBOf568.js.map → p-CqPrOhzi.js.map} +1 -1
  91. package/dist/components/{p-CaQ7Iei7.js → p-CxmkJbeV.js} +4 -4
  92. package/dist/components/{p-CaQ7Iei7.js.map → p-CxmkJbeV.js.map} +1 -1
  93. package/dist/components/{p-yBnfPxIa.js → p-D-Rf05Ov.js} +5 -5
  94. package/dist/components/{p-yBnfPxIa.js.map → p-D-Rf05Ov.js.map} +1 -1
  95. package/dist/components/{p-CSSrNLad.js → p-D0L3GqSK.js} +4 -4
  96. package/dist/components/{p-CSSrNLad.js.map → p-D0L3GqSK.js.map} +1 -1
  97. package/dist/components/{p-fmNiA3Yr.js → p-D1oFXBAp.js} +5 -5
  98. package/dist/components/{p-fmNiA3Yr.js.map → p-D1oFXBAp.js.map} +1 -1
  99. package/dist/components/{p-DRuQsvUx.js → p-DC3j4P1n.js} +23 -8
  100. package/dist/components/p-DC3j4P1n.js.map +1 -0
  101. package/dist/components/{p-D04aTZsR.js → p-DbPbyRLO.js} +5 -5
  102. package/dist/components/{p-D04aTZsR.js.map → p-DbPbyRLO.js.map} +1 -1
  103. package/dist/components/{p-DoQOtXjT.js → p-dCaxwGmu.js} +44 -9
  104. package/dist/components/p-dCaxwGmu.js.map +1 -0
  105. package/dist/components/{p-BBIuV3j1.js → p-gDLg_PJJ.js} +5 -5
  106. package/dist/components/{p-BBIuV3j1.js.map → p-gDLg_PJJ.js.map} +1 -1
  107. package/dist/components/{p-DuWb7MaD.js → p-q-xqpmae.js} +137 -125
  108. package/dist/components/p-q-xqpmae.js.map +1 -0
  109. package/dist/esm/{index-CGHvfMWF.js → index-BPFXWTBp.js} +50 -10
  110. package/dist/esm/index-BPFXWTBp.js.map +1 -0
  111. package/dist/esm/index-DsUDklEm.js +2318 -0
  112. package/dist/esm/index-DsUDklEm.js.map +1 -0
  113. package/dist/esm/index.js +1 -1
  114. package/dist/esm/kritzel-brush-style_18.entry.js +333 -1713
  115. package/dist/esm/kritzel-brush-style_18.entry.js.map +1 -1
  116. package/dist/esm/loader.js +3 -3
  117. package/dist/esm/stencil.js +4 -4
  118. package/dist/esm/stencil.js.map +1 -1
  119. package/dist/stencil/index.esm.js +1 -1
  120. package/dist/stencil/p-3797c300.entry.js +2 -0
  121. package/dist/stencil/p-3797c300.entry.js.map +1 -0
  122. package/dist/stencil/p-BPFXWTBp.js +3 -0
  123. package/dist/stencil/p-BPFXWTBp.js.map +1 -0
  124. package/dist/stencil/p-DsUDklEm.js +2 -0
  125. package/dist/stencil/p-DsUDklEm.js.map +1 -0
  126. package/dist/stencil/stencil.esm.js +1 -1
  127. package/dist/stencil/stencil.esm.js.map +1 -1
  128. package/dist/types/classes/objects/base-object.class.d.ts +3 -1
  129. package/dist/types/classes/objects/image.class.d.ts +8 -0
  130. package/dist/types/classes/objects/path.class.d.ts +9 -0
  131. package/dist/types/classes/objects/text.class.d.ts +2 -1
  132. package/dist/types/classes/store.class.d.ts +1 -1
  133. package/dist/types/classes/tools/image-tool.class.d.ts +0 -4
  134. package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +9 -3
  135. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +12 -4
  136. package/dist/types/components/ui/kritzel-context-menu/kritzel-context-menu.d.ts +8 -0
  137. package/dist/types/components/ui/kritzel-controls/kritzel-controls.d.ts +2 -1
  138. package/dist/types/components.d.ts +77 -22
  139. package/dist/types/configs/default-brush-tool.config.d.ts +2 -0
  140. package/dist/types/configs/default-text-tool.config.d.ts +2 -0
  141. package/dist/types/constants/engine.constants.d.ts +2 -0
  142. package/dist/types/index.d.ts +8 -0
  143. package/dist/types/interfaces/context-menu-item.interface.d.ts +13 -2
  144. package/dist/types/interfaces/engine-state.interface.d.ts +4 -0
  145. package/dist/types/interfaces/object.interface.d.ts +2 -0
  146. package/package.json +1 -1
  147. package/dist/cjs/index-CXT94beA.js.map +0 -1
  148. package/dist/cjs/index-aaWestcD.js +0 -827
  149. package/dist/cjs/index-aaWestcD.js.map +0 -1
  150. package/dist/collection/configs/default-toolbar-controls.js +0 -139
  151. package/dist/collection/configs/default-toolbar-controls.js.map +0 -1
  152. package/dist/components/p-93b-eQ0s.js.map +0 -1
  153. package/dist/components/p-CYnE3twZ.js +0 -49
  154. package/dist/components/p-CYnE3twZ.js.map +0 -1
  155. package/dist/components/p-DRuQsvUx.js.map +0 -1
  156. package/dist/components/p-DoQOtXjT.js.map +0 -1
  157. package/dist/components/p-DuWb7MaD.js.map +0 -1
  158. package/dist/esm/index-CGHvfMWF.js.map +0 -1
  159. package/dist/esm/index-Dn7aP72S.js +0 -814
  160. package/dist/esm/index-Dn7aP72S.js.map +0 -1
  161. package/dist/stencil/p-6c35ba88.entry.js +0 -2
  162. package/dist/stencil/p-6c35ba88.entry.js.map +0 -1
  163. package/dist/stencil/p-CGHvfMWF.js +0 -3
  164. package/dist/stencil/p-CGHvfMWF.js.map +0 -1
  165. package/dist/stencil/p-Dn7aP72S.js +0 -2
  166. package/dist/stencil/p-Dn7aP72S.js.map +0 -1
  167. package/dist/types/configs/default-toolbar-controls.d.ts +0 -4
@@ -1,2 +1,2 @@
1
- import{p as e,b as t}from"./p-CGHvfMWF.js";export{s as setNonce}from"./p-CGHvfMWF.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-6c35ba88",[[0,"kritzel-editor",{controls:[16],customSvgIcons:[16,"custom-svg-icons"],hideControls:[4,"hide-controls"],isEngineReady:[32],isControlsReady:[32],getObjectById:[64],addObject:[64],updateObject:[64],removeObject:[64],getSelectedObjects:[64],selectObjects:[64],selectAllObjectsInViewport:[64],clearSelection:[64],centerObjectInViewport:[64]},[[0,"dblclick","handleTouchStart"],[8,"keydown","handleKeyDown"]],{isEngineReady:["onIsEngineReady"],isControlsReady:["onIsControlsReady"]}],[1,"kritzel-controls",{controls:[16],activeControl:[1040,"active-control"],firstConfig:[32],tooltipVisible:[32],isTouchDevice:[32],closeTooltip:[64]},[[4,"activeToolChange","handleActiveToolChange"],[4,"click","handleClick"]]],[1,"kritzel-engine",{activeTool:[16,"active-tool"],globalContextMenuItems:[16,"global-context-menu-items"],objectContextMenuItems:[16,"object-context-menu-items"],forceUpdate:[32],registerTool:[64],changeActiveTool:[64],setFocus:[64],disable:[64],enable:[64],delete:[64],copy:[64],paste:[64],bringForward:[64],sendBackward:[64],moveToTop:[64],moveToBottom:[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]},[[0,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[9,"mousedown","updateFocus"]]],[1,"kritzel-control-text-config",{tool:[1040],isExpanded:[1028,"is-expanded"]}],[1,"kritzel-control-brush-config",{tool:[1040],isExpanded:[1028,"is-expanded"],palette:[32]},null,{tool:["handleToolChange"]}],[1,"kritzel-context-menu",{items:[16]}],[1,"kritzel-utility-panel"],[1,"kritzel-cursor-trail",{store:[16],cursorTrailPoints:[32],isLeftButtonDown:[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[1,"kritzel-tooltip",{isVisible:[4,"is-visible"],anchorElement:[16,"anchor-element"],arrowSize:[2,"arrow-size"],offsetY:[2,"offset-y"],positionX:[32],arrowOffset:[32],isMobileView:[32]},[[9,"resize","handleWindowResize"]]],[1,"kritzel-brush-style",{type:[1],brushOptions:[16,"brush-options"]}],[1,"kritzel-font-family",{fontOptions:[16,"font-options"],selectedFontFamily:[1025,"selected-font-family"]}],[1,"kritzel-font-size",{sizes:[16],selectedSize:[1026,"selected-size"],fontFamily:[1,"font-family"]}],[1,"kritzel-stroke-size",{sizes:[16],selectedSize:[1026,"selected-size"]}],[1,"kritzel-color-palette",{colors:[16],selectedColor:[1025,"selected-color"],isExpanded:[4,"is-expanded"],isOpaque:[4,"is-opaque"]}],[1,"kritzel-font",{fontFamily:[1,"font-family"],size:[2],color:[1]}],[1,"kritzel-color",{value:[1],size:[2]}],[1,"kritzel-dropdown",{options:[16],value:[1],width:[1],selectStyles:[8,"select-styles"],internalValue:[32],hasSuffixContent:[32],hasPrefixContent:[32]},null,{value:["externalValueChanged"],options:["optionsChanged"]}],[1,"kritzel-icon",{name:[1],label:[1],size:[2]}]]]],e)}));
1
+ import{p as e,b as t}from"./p-BPFXWTBp.js";export{s as setNonce}from"./p-BPFXWTBp.js";import{g as o}from"./p-DQuL1Twl.js";var i=()=>{const t=import.meta.url;const o={};if(t!==""){o.resourcesUrl=new URL(".",t).href}return e(o)};i().then((async e=>{await o();return t([["p-3797c300",[[256,"kritzel-editor",{scaleMax:[2,"scale-max"],scaleMin:[2,"scale-min"],controls:[16],globalContextMenuItems:[16,"global-context-menu-items"],objectContextMenuItems:[16,"object-context-menu-items"],customSvgIcons:[16,"custom-svg-icons"],isControlsVisible:[4,"is-controls-visible"],isUtilityPanelVisible:[4,"is-utility-panel-visible"],isEngineReady:[32],isControlsReady:[32],getObjectById:[64],addObject:[64],updateObject:[64],removeObject:[64],getSelectedObjects:[64],selectObjects:[64],selectAllObjectsInViewport:[64],clearSelection:[64],centerObjectInViewport:[64]},[[0,"dblclick","handleTouchStart"],[8,"keydown","handleKeyDown"]],{isEngineReady:["onIsEngineReady"],isControlsReady:["onIsControlsReady"]}],[257,"kritzel-controls",{controls:[16],activeControl:[1040,"active-control"],isUtilityPanelVisible:[4,"is-utility-panel-visible"],firstConfig:[32],isTooltipVisible:[32],isTouchDevice:[32],closeTooltip:[64]},[[4,"activeToolChange","handleActiveToolChange"],[4,"click","handleClick"]]],[257,"kritzel-engine",{activeTool:[16,"active-tool"],globalContextMenuItems:[16,"global-context-menu-items"],objectContextMenuItems:[16,"object-context-menu-items"],scaleMax:[1026,"scale-max"],scaleMin:[1026,"scale-min"],forceUpdate:[32],registerTool:[64],changeActiveTool:[64],setFocus:[64],disable:[64],enable:[64],delete:[64],copy:[64],paste:[64],bringForward:[64],sendBackward:[64],moveToTop:[64],moveToBottom:[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]},[[0,"wheel","handleWheel"],[0,"pointerdown","handlePointerDown"],[0,"pointermove","handlePointerMove"],[0,"pointerup","handlePointerUp"],[0,"pointercancel","handlePointerCancel"],[0,"contextmenu","handleContextMenu"],[9,"resize","handleResize"],[8,"keydown","handleKeyDown"],[8,"keyup","handleKeyUp"],[9,"mousedown","updateFocus"]],{scaleMax:["validateScaleMax"],scaleMin:["validateScaleMin"]}],[257,"kritzel-control-text-config",{tool:[1040],isExpanded:[1028,"is-expanded"]}],[257,"kritzel-control-brush-config",{tool:[1040],isExpanded:[1028,"is-expanded"],palette:[32]},null,{tool:["handleToolChange"]}],[257,"kritzel-context-menu",{items:[16],objects:[16],disabledStates:[32],visibleItems:[32]},null,{items:["onItemsChanged"]}],[257,"kritzel-utility-panel"],[257,"kritzel-cursor-trail",{store:[16],cursorTrailPoints:[32],isLeftButtonDown:[32]},[[9,"pointerdown","handleMouseDown"],[9,"pointermove","handlePointerMove"],[9,"pointerup","handlePointerUp"]]],[257,"kritzel-tooltip",{isVisible:[4,"is-visible"],anchorElement:[16,"anchor-element"],arrowSize:[2,"arrow-size"],offsetY:[2,"offset-y"],positionX:[32],arrowOffset:[32],isMobileView:[32]},[[9,"resize","handleWindowResize"]]],[257,"kritzel-brush-style",{type:[1],brushOptions:[16,"brush-options"]}],[257,"kritzel-font-family",{fontOptions:[16,"font-options"],selectedFontFamily:[1025,"selected-font-family"]}],[257,"kritzel-font-size",{sizes:[16],selectedSize:[1026,"selected-size"],fontFamily:[1,"font-family"]}],[257,"kritzel-stroke-size",{sizes:[16],selectedSize:[1026,"selected-size"]}],[257,"kritzel-color-palette",{colors:[16],selectedColor:[1025,"selected-color"],isExpanded:[4,"is-expanded"],isOpaque:[4,"is-opaque"]}],[257,"kritzel-font",{fontFamily:[1,"font-family"],size:[2],color:[1]}],[257,"kritzel-color",{value:[1],size:[2]}],[257,"kritzel-dropdown",{options:[16],value:[1],width:[1],selectStyles:[8,"select-styles"],internalValue:[32],hasSuffixContent:[32],hasPrefixContent:[32]},null,{value:["externalValueChanged"],options:["optionsChanged"]}],[257,"kritzel-icon",{name:[1],label:[1],size:[2]}]]]],e)}));
2
2
  //# sourceMappingURL=stencil.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stencil.esm.js","sources":["../../node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"sourcesContent":["/*\n Stencil Client Patch Browser v4.35.3 | MIT Licensed | https://stenciljs.com\n */\n\n// src/client/client-patch-browser.ts\nimport { BUILD, NAMESPACE } from \"@stencil/core/internal/app-data\";\nimport { consoleDevInfo, H, promiseResolve, win } from \"@stencil/core\";\nvar patchBrowser = () => {\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo(\"Running in development mode.\");\n }\n if (BUILD.cloneNodeFix) {\n patchCloneNodeFix(H.prototype);\n }\n const scriptElm = BUILD.scriptDataOpts ? win.document && Array.from(win.document.querySelectorAll(\"script\")).find(\n (s) => new RegExp(`/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) || s.getAttribute(\"data-stencil-namespace\") === NAMESPACE\n ) : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? (scriptElm || {})[\"data-opts\"] || {} : {};\n if (importMeta !== \"\") {\n opts.resourcesUrl = new URL(\".\", importMeta).href;\n }\n return promiseResolve(opts);\n};\nvar patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function(deep) {\n if (this.nodeName === \"TEMPLATE\") {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport {\n patchBrowser\n};\n","export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(async (options) => {\n await globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"],"names":[],"mappings":";;;;AAAA;AACA;AACA;;AAKA,IAAI,YAAY,GAAG,MAAM;AAUzB,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG;AACpC,EAAE,MAAM,IAAI,GAAiE,EAAE;AAC/E,EAAE,IAAI,UAAU,KAAK,EAAE,EAAE;AACzB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI;AACrD;AACA,EAAE,OAAO,cAAc,CAAC,IAAI,CAAC;AAC7B,CAAC;;ACnBD,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK;AACvC,EAAE,MAAM,aAAa,EAAE;AACvB,EAAE,OAAO,aAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC;AAC7D,CAAC,CAAC","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"stencil.esm.js","sources":["../../node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"sourcesContent":["/*\n Stencil Client Patch Browser v4.36.1 | MIT Licensed | https://stenciljs.com\n */\n\n// src/client/client-patch-browser.ts\nimport { BUILD, NAMESPACE } from \"@stencil/core/internal/app-data\";\nimport { consoleDevInfo, H, promiseResolve, win } from \"@stencil/core\";\nvar patchBrowser = () => {\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo(\"Running in development mode.\");\n }\n if (BUILD.cloneNodeFix) {\n patchCloneNodeFix(H.prototype);\n }\n const scriptElm = BUILD.scriptDataOpts ? win.document && Array.from(win.document.querySelectorAll(\"script\")).find(\n (s) => new RegExp(`/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) || s.getAttribute(\"data-stencil-namespace\") === NAMESPACE\n ) : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? (scriptElm || {})[\"data-opts\"] || {} : {};\n if (importMeta !== \"\") {\n opts.resourcesUrl = new URL(\".\", importMeta).href;\n }\n return promiseResolve(opts);\n};\nvar patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function(deep) {\n if (this.nodeName === \"TEMPLATE\") {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport {\n patchBrowser\n};\n","export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(async (options) => {\n await globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"],"names":[],"mappings":";;;;AAAA;AACA;AACA;;AAKA,IAAI,YAAY,GAAG,MAAM;AAUzB,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG;AACpC,EAAE,MAAM,IAAI,GAAiE,EAAE;AAC/E,EAAE,IAAI,UAAU,KAAK,EAAE,EAAE;AACzB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI;AACrD;AACA,EAAE,OAAO,cAAc,CAAC,IAAI,CAAC;AAC7B,CAAC;;ACnBD,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK;AACvC,EAAE,MAAM,aAAa,EAAE;AACvB,EAAE,OAAO,aAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC;AAC7D,CAAC,CAAC","x_google_ignoreList":[0]}
@@ -3,7 +3,7 @@ import { KritzelObject } from '../../interfaces/object.interface';
3
3
  import { KritzelPolygon } from '../../interfaces/polygon.interface';
4
4
  import { KritzelSerializable } from '../../interfaces/serializable.interface';
5
5
  import { KritzelStore } from '../store.class';
6
- export declare class KritzelBaseObject<T extends Element = HTMLElement> implements KritzelObject<T>, KritzelSerializable {
6
+ export declare class KritzelBaseObject<T extends Element = HTMLElement | SVGElement> implements KritzelObject<T>, KritzelSerializable {
7
7
  __class__: string;
8
8
  id: string;
9
9
  visible: boolean;
@@ -25,6 +25,7 @@ export declare class KritzelBaseObject<T extends Element = HTMLElement> implemen
25
25
  markedForRemoval: boolean;
26
26
  isMounted: boolean;
27
27
  zIndex: number;
28
+ isEditable: boolean;
28
29
  debugInfoVisible: boolean;
29
30
  _store: KritzelStore;
30
31
  _elementRef: T;
@@ -56,4 +57,5 @@ export declare class KritzelBaseObject<T extends Element = HTMLElement> implemen
56
57
  onSelectedClick(): void;
57
58
  revive(object: any): KritzelBaseObject<T>;
58
59
  isClass<T extends KritzelBaseObject>(this: T, className: string): this is T;
60
+ edit(): void;
59
61
  }
@@ -3,7 +3,15 @@ import { KritzelBaseObject } from './base-object.class';
3
3
  export declare class KritzelImage extends KritzelBaseObject<HTMLImageElement> {
4
4
  __class__: string;
5
5
  src: string;
6
+ maxWidth: number;
7
+ maxHeight: number;
8
+ maxCompressionSize: number;
6
9
  debugInfoVisible: boolean;
10
+ constructor(config?: Partial<KritzelImage>);
7
11
  static create(store: KritzelStore): KritzelImage;
8
12
  resize(x: number, y: number, width: number, height: number): void;
13
+ calculateScaledDimensions(img: HTMLImageElement): {
14
+ scaledWidth: number;
15
+ scaledHeight: number;
16
+ };
9
17
  }
@@ -20,6 +20,15 @@ export declare class KritzelPath extends KritzelBaseObject<SVGElement> {
20
20
  options: KritzelPathOptions | undefined;
21
21
  debugInfoVisible: boolean;
22
22
  get viewBox(): string;
23
+ constructor(config?: {
24
+ points: number[][];
25
+ translateX?: number;
26
+ translateY?: number;
27
+ scale?: number;
28
+ strokeWidth?: number;
29
+ fill?: string;
30
+ lineSlack?: number;
31
+ });
23
32
  static create(store: KritzelStore, options?: KritzelPathOptions): KritzelPath;
24
33
  resize(x: number | null, y: number | null, width: number, height: number): void;
25
34
  rotate(value: number): void;
@@ -9,6 +9,7 @@ export declare class KritzelText extends KritzelBaseObject<HTMLTextAreaElement>
9
9
  initialWidth: number;
10
10
  isNew: boolean;
11
11
  debugInfoVisible: boolean;
12
+ isEditable: boolean;
12
13
  readonly rows: number;
13
14
  get isReadonly(): boolean;
14
15
  constructor(config?: {
@@ -31,5 +32,5 @@ export declare class KritzelText extends KritzelBaseObject<HTMLTextAreaElement>
31
32
  focus(): void;
32
33
  selectAll(): void;
33
34
  insertFromClipboard(): void;
34
- onSelectedClick(): void;
35
+ edit(): void;
35
36
  }
@@ -34,5 +34,5 @@ export declare class KritzelStore {
34
34
  selectAllObjectsInViewport(): void;
35
35
  clearSelection(): void;
36
36
  resetActiveText(): void;
37
- getObjectFromPointerEvent(event: TouchEvent | MouseEvent, selector?: string): KritzelBaseObject<any> | null;
37
+ getObjectFromPointerEvent(event: PointerEvent, selector?: string): KritzelBaseObject<any> | null;
38
38
  }
@@ -2,8 +2,6 @@ import { KritzelStore } from '../store.class';
2
2
  import { KritzelBaseTool } from './base-tool.class';
3
3
  export declare class KritzelImageTool extends KritzelBaseTool {
4
4
  fileInput: HTMLInputElement | null;
5
- maxWidth: number;
6
- maxHeight: number;
7
5
  maxCompressionSize: number;
8
6
  constructor(store: KritzelStore);
9
7
  onActivate(): void;
@@ -11,8 +9,6 @@ export declare class KritzelImageTool extends KritzelBaseTool {
11
9
  private setupFileInput;
12
10
  private handleFileSelect;
13
11
  private readFile;
14
- private processImage;
15
- private calculateScaledDimensions;
16
12
  private createKritzelImage;
17
13
  private addImageToStore;
18
14
  private handleCancel;
@@ -1,10 +1,16 @@
1
1
  import { EventEmitter } from '../../../stencil-public-runtime';
2
2
  import { KritzelToolbarControl } from '../../../interfaces/toolbar-control.interface';
3
3
  import { KritzelBaseObject } from '../../../classes/objects/base-object.class';
4
+ import { ContextMenuItem } from '../../../interfaces/context-menu-item.interface';
4
5
  export declare class KritzelEditor {
6
+ scaleMax: number;
7
+ scaleMin: number;
5
8
  controls: KritzelToolbarControl[];
9
+ globalContextMenuItems: ContextMenuItem[];
10
+ objectContextMenuItems: ContextMenuItem[];
6
11
  customSvgIcons: Record<string, string>;
7
- hideControls: boolean;
12
+ isControlsVisible: boolean;
13
+ isUtilityPanelVisible: boolean;
8
14
  isReady: EventEmitter<HTMLElement>;
9
15
  host: HTMLElement;
10
16
  isEngineReady: boolean;
@@ -19,8 +25,8 @@ export declare class KritzelEditor {
19
25
  selectObjects(objects: KritzelBaseObject[]): Promise<void>;
20
26
  selectAllObjectsInViewport(): Promise<void>;
21
27
  clearSelection(): Promise<void>;
22
- centerObjectInViewport(object: KritzelBaseObject): Promise<KritzelBaseObject<HTMLElement>>;
23
- handleTouchStart(event: TouchEvent): void;
28
+ centerObjectInViewport(object: KritzelBaseObject): Promise<KritzelBaseObject<HTMLElement | SVGElement>>;
29
+ handleTouchStart(event: MouseEvent): void;
24
30
  handleKeyDown(event: any): void;
25
31
  engineRef: HTMLKritzelEngineElement;
26
32
  controlsRef: HTMLKritzelControlsElement;
@@ -9,13 +9,17 @@ import { KritzelBrushToolConfig, KritzelTextToolConfig } from '../../../interfac
9
9
  import { KritzelContextMenuHandler } from '../../../classes/handlers/context-menu.handler';
10
10
  import { KritzelBaseObject } from '../../../classes/objects/base-object.class';
11
11
  export declare class KritzelEngine {
12
- host: HTMLElement;
13
12
  activeTool: KritzelTool;
14
13
  globalContextMenuItems: ContextMenuItem[];
15
14
  objectContextMenuItems: ContextMenuItem[];
16
- forceUpdate: number;
15
+ scaleMax: number;
16
+ scaleMin: number;
17
17
  isEngineReady: EventEmitter<void>;
18
18
  activeToolChange: EventEmitter<KritzelBaseTool>;
19
+ host: HTMLElement;
20
+ forceUpdate: number;
21
+ validateScaleMax(newValue: number): void;
22
+ validateScaleMin(newValue: number): void;
19
23
  store: KritzelStore;
20
24
  viewport: KritzelViewport;
21
25
  contextMenuHandler: KritzelContextMenuHandler;
@@ -24,6 +28,7 @@ export declare class KritzelEngine {
24
28
  get isSelecting(): boolean;
25
29
  get isSelectionActive(): boolean;
26
30
  constructor();
31
+ componentWillLoad(): void;
27
32
  componentDidLoad(): void;
28
33
  handleWheel(ev: any): void;
29
34
  handlePointerDown(ev: PointerEvent): void;
@@ -35,7 +40,6 @@ export declare class KritzelEngine {
35
40
  handleKeyDown(ev: any): void;
36
41
  handleKeyUp(ev: any): void;
37
42
  updateFocus(ev: any): void;
38
- handleContextMenuAction(event: CustomEvent<ContextMenuItem>): void;
39
43
  registerTool(toolName: string, toolClass: any, toolConfig?: KritzelTextToolConfig | KritzelBrushToolConfig): Promise<KritzelBaseTool>;
40
44
  changeActiveTool(tool: KritzelBaseTool): Promise<void>;
41
45
  setFocus(): Promise<void>;
@@ -59,6 +63,10 @@ export declare class KritzelEngine {
59
63
  selectObjects(objects: KritzelBaseObject[]): Promise<void>;
60
64
  selectAllObjectsInViewport(): Promise<void>;
61
65
  clearSelection(): Promise<void>;
62
- centerObjectInViewport(object: KritzelBaseObject): Promise<KritzelBaseObject<HTMLElement>>;
66
+ centerObjectInViewport(object: KritzelBaseObject): Promise<KritzelBaseObject<HTMLElement | SVGElement>>;
67
+ getCopiedObjects(): Promise<KritzelBaseObject[]>;
68
+ private _registerStateChangeListeners;
69
+ private _handleActiveToolChange;
70
+ private _handleIsFocusedChange;
63
71
  render(): any;
64
72
  }
@@ -1,9 +1,17 @@
1
1
  import { EventEmitter } from '../../../stencil-public-runtime';
2
2
  import { ContextMenuItem } from '../../../interfaces/context-menu-item.interface';
3
+ import { KritzelBaseObject } from '../../../classes/objects/base-object.class';
3
4
  export declare class KritzelContextMenu {
4
5
  items: ContextMenuItem[];
6
+ objects: KritzelBaseObject[];
5
7
  actionSelected: EventEmitter<ContextMenuItem>;
6
8
  hostElement: HTMLElement;
9
+ private disabledStates;
10
+ private visibleItems;
11
+ componentWillLoad(): void;
12
+ onItemsChanged(): void;
7
13
  private handleItemClick;
14
+ private resolveVisibleItems;
15
+ private resolveDisabledStates;
8
16
  render(): any;
9
17
  }
@@ -6,9 +6,10 @@ type ToolConfig = Record<string, any>;
6
6
  export declare class KritzelControls {
7
7
  controls: KritzelToolbarControl[];
8
8
  activeControl: KritzelToolbarControl | null;
9
+ isUtilityPanelVisible: boolean;
9
10
  isControlsReady: EventEmitter<void>;
10
11
  firstConfig: ToolConfig | null;
11
- tooltipVisible: boolean;
12
+ isTooltipVisible: boolean;
12
13
  isTouchDevice: boolean;
13
14
  host: HTMLElement;
14
15
  handleActiveToolChange(event: CustomEvent): Promise<void>;
@@ -7,23 +7,23 @@
7
7
  import { HTMLStencilElement, JSXBase } from "./stencil-public-runtime";
8
8
  import { BrushStyleOption } from "./components/shared/kritzel-brush-style/kritzel-brush-style";
9
9
  import { ContextMenuItem } from "./interfaces/context-menu-item.interface";
10
+ import { KritzelBaseObject } from "./classes/objects/base-object.class";
10
11
  import { KritzelBrushTool } from "./classes/tools/brush-tool.class";
11
12
  import { KritzelTextTool } from "./classes/tools/text-tool.class";
12
13
  import { KritzelBrushToolConfig, KritzelTextToolConfig, KritzelToolbarControl } from "./interfaces/toolbar-control.interface";
13
14
  import { KritzelStore } from "./classes/store.class";
14
15
  import { DropdownOption } from "./components/shared/kritzel-dropdown/kritzel-dropdown";
15
- import { KritzelBaseObject } from "./classes/objects/base-object.class";
16
16
  import { KritzelTool } from "./interfaces/tool.interface";
17
17
  import { KritzelBaseTool } from "./classes/tools/base-tool.class";
18
18
  import { FontOption } from "./components/shared/kritzel-font-family/kritzel-font-family";
19
19
  export { BrushStyleOption } from "./components/shared/kritzel-brush-style/kritzel-brush-style";
20
20
  export { ContextMenuItem } from "./interfaces/context-menu-item.interface";
21
+ export { KritzelBaseObject } from "./classes/objects/base-object.class";
21
22
  export { KritzelBrushTool } from "./classes/tools/brush-tool.class";
22
23
  export { KritzelTextTool } from "./classes/tools/text-tool.class";
23
24
  export { KritzelBrushToolConfig, KritzelTextToolConfig, KritzelToolbarControl } from "./interfaces/toolbar-control.interface";
24
25
  export { KritzelStore } from "./classes/store.class";
25
26
  export { DropdownOption } from "./components/shared/kritzel-dropdown/kritzel-dropdown";
26
- export { KritzelBaseObject } from "./classes/objects/base-object.class";
27
27
  export { KritzelTool } from "./interfaces/tool.interface";
28
28
  export { KritzelBaseTool } from "./classes/tools/base-tool.class";
29
29
  export { FontOption } from "./components/shared/kritzel-font-family/kritzel-font-family";
@@ -65,6 +65,7 @@ export namespace Components {
65
65
  }
66
66
  interface KritzelContextMenu {
67
67
  "items": ContextMenuItem[];
68
+ "objects": KritzelBaseObject[];
68
69
  }
69
70
  interface KritzelControlBrushConfig {
70
71
  /**
@@ -90,6 +91,10 @@ export namespace Components {
90
91
  * @default []
91
92
  */
92
93
  "controls": KritzelToolbarControl[];
94
+ /**
95
+ * @default true
96
+ */
97
+ "isUtilityPanelVisible": boolean;
93
98
  }
94
99
  interface KritzelCursorTrail {
95
100
  "store": KritzelStore;
@@ -108,10 +113,10 @@ export namespace Components {
108
113
  }
109
114
  interface KritzelEditor {
110
115
  "addObject": <T extends KritzelBaseObject>(object: T) => Promise<T | null>;
111
- "centerObjectInViewport": (object: KritzelBaseObject) => Promise<KritzelBaseObject<HTMLElement>>;
116
+ "centerObjectInViewport": (object: KritzelBaseObject) => Promise<KritzelBaseObject<HTMLElement | SVGElement>>;
112
117
  "clearSelection": () => Promise<void>;
113
118
  /**
114
- * @default DEFAULT_KRITZEL_CONTROLS
119
+ * @default [ { name: 'selection', type: 'tool', tool: KritzelSelectionTool, icon: 'cursor', }, { name: 'brush', type: 'tool', tool: KritzelBrushTool, isDefault: true, icon: 'pen', config: DEFAULT_BRUSH_CONFIG, }, { name: 'eraser', type: 'tool', tool: KritzelEraserTool, icon: 'eraser', }, { name: 'text', type: 'tool', tool: KritzelTextTool, icon: 'type', config: DEFAULT_TEXT_CONFIG, }, { name: 'image', type: 'tool', tool: KritzelImageTool, icon: 'image', }, { name: 'divider', type: 'divider', }, { name: 'config', type: 'config', }, ]
115
120
  */
116
121
  "controls": KritzelToolbarControl[];
117
122
  /**
@@ -121,10 +126,30 @@ export namespace Components {
121
126
  "getObjectById": <T extends KritzelBaseObject>(id: string) => Promise<T | null>;
122
127
  "getSelectedObjects": () => Promise<KritzelBaseObject[]>;
123
128
  /**
124
- * @default false
129
+ * @default [ { label: 'Paste', icon: 'paste', disabled: async () => (await this.engineRef.getCopiedObjects()).length === 0, action: menu => this.engineRef.paste(menu.x, menu.y), }, { label: 'Select All', icon: 'select-all', action: () => this.selectAllObjectsInViewport() }, ]
125
130
  */
126
- "hideControls": boolean;
131
+ "globalContextMenuItems": ContextMenuItem[];
132
+ /**
133
+ * @default true
134
+ */
135
+ "isControlsVisible": boolean;
136
+ /**
137
+ * @default true
138
+ */
139
+ "isUtilityPanelVisible": boolean;
140
+ /**
141
+ * @default [ { label: 'Edit', icon: 'pen', visible: (_, objects) => objects.length === 1 && objects[0].isEditable, action: (_, objects) => { if (objects.length === 1) { const object = objects[0]; if (object.isEditable) { object.edit(); } } } }, { label: 'Copy', icon: 'copy', action: () => this.engineRef.copy() }, { label: 'Paste', icon: 'paste', disabled: async () => (await this.engineRef.getCopiedObjects()).length === 0, action: (menu, _) => this.engineRef.paste(menu.x, menu.y) }, { label: 'Delete', icon: 'delete', action: () => this.engineRef.delete() }, { label: 'Bring to Front', icon: 'bring-to-front', action: () => this.engineRef.moveToTop() }, { label: 'Send to Back', icon: 'send-to-back', action: () => this.engineRef.moveToBottom() }, ]
142
+ */
143
+ "objectContextMenuItems": ContextMenuItem[];
127
144
  "removeObject": <T extends KritzelBaseObject>(object: T) => Promise<T | null>;
145
+ /**
146
+ * @default ABSOLUTE_SCALE_MAX
147
+ */
148
+ "scaleMax": number;
149
+ /**
150
+ * @default ABSOLUTE_SCALE_MIN
151
+ */
152
+ "scaleMin": number;
128
153
  "selectAllObjectsInViewport": () => Promise<void>;
129
154
  "selectObjects": (objects: KritzelBaseObject[]) => Promise<void>;
130
155
  "updateObject": <T extends KritzelBaseObject>(object: T, updatedProperties: Partial<T>) => Promise<T | null>;
@@ -133,30 +158,33 @@ export namespace Components {
133
158
  "activeTool": KritzelTool;
134
159
  "addObject": <T extends KritzelBaseObject>(object: T) => Promise<T | null>;
135
160
  "bringForward": (object?: KritzelBaseObject<any>) => Promise<void>;
136
- "centerObjectInViewport": (object: KritzelBaseObject) => Promise<KritzelBaseObject<HTMLElement>>;
161
+ "centerObjectInViewport": (object: KritzelBaseObject) => Promise<KritzelBaseObject<HTMLElement | SVGElement>>;
137
162
  "changeActiveTool": (tool: KritzelBaseTool) => Promise<void>;
138
163
  "clearSelection": () => Promise<void>;
139
164
  "copy": () => Promise<void>;
140
165
  "delete": () => Promise<void>;
141
166
  "disable": () => Promise<void>;
142
167
  "enable": () => Promise<void>;
168
+ "getCopiedObjects": () => Promise<KritzelBaseObject[]>;
143
169
  "getObjectById": <T extends KritzelBaseObject>(id: string) => Promise<T | null>;
144
170
  "getSelectedObjects": () => Promise<KritzelBaseObject<any>[]>;
145
- /**
146
- * @default [ { label: 'Paste', icon: 'paste', disabled: () => this.store.state.copiedObjects === null, action: () => { const x = (-this.store.state.translateX + this.store.state.contextMenuX) / this.store.state.scale; const y = (-this.store.state.translateY + this.store.state.contextMenuY) / this.store.state.scale; this.paste(x, y); }, }, { label: 'Select All', icon: 'select-all', action: () => this.selectAllObjectsInViewport() }, ]
147
- */
148
171
  "globalContextMenuItems": ContextMenuItem[];
149
172
  "hideContextMenu": () => Promise<void>;
150
173
  "moveToBottom": (object?: KritzelBaseObject<any>) => Promise<void>;
151
174
  "moveToTop": (object?: KritzelBaseObject<any>) => Promise<void>;
152
- /**
153
- * @default [ { label: 'Copy', icon: 'copy', action: () => this.copy() }, { label: 'Paste', icon: 'paste', disabled: () => this.store.state.copiedObjects === null, action: () => { const x = (-this.store.state.translateX + this.store.state.contextMenuX) / this.store.state.scale; const y = (-this.store.state.translateY + this.store.state.contextMenuY) / this.store.state.scale; this.paste(x, y); }, }, { label: 'Delete', icon: 'delete', action: () => this.delete() }, { label: 'Bring to Front', icon: 'bring-to-front', action: () => this.moveToTop() }, { label: 'Send to Back', icon: 'send-to-back', action: () => this.moveToBottom() }, ]
154
- */
155
175
  "objectContextMenuItems": ContextMenuItem[];
156
176
  "paste": (x: number, y: number) => Promise<void>;
157
177
  "redo": () => Promise<void>;
158
178
  "registerTool": (toolName: string, toolClass: any, toolConfig?: KritzelTextToolConfig | KritzelBrushToolConfig) => Promise<KritzelBaseTool>;
159
179
  "removeObject": <T extends KritzelBaseObject>(object: T) => Promise<T | null>;
180
+ /**
181
+ * @default ABSOLUTE_SCALE_MAX
182
+ */
183
+ "scaleMax": number;
184
+ /**
185
+ * @default ABSOLUTE_SCALE_MIN
186
+ */
187
+ "scaleMin": number;
160
188
  "selectAllObjectsInViewport": () => Promise<void>;
161
189
  "selectObjects": (objects: KritzelBaseObject[]) => Promise<void>;
162
190
  "sendBackward": (object?: KritzelBaseObject<any>) => Promise<void>;
@@ -603,6 +631,7 @@ declare namespace LocalJSX {
603
631
  }
604
632
  interface KritzelContextMenu {
605
633
  "items"?: ContextMenuItem[];
634
+ "objects"?: KritzelBaseObject[];
606
635
  "onActionSelected"?: (event: KritzelContextMenuCustomEvent<ContextMenuItem>) => void;
607
636
  }
608
637
  interface KritzelControlBrushConfig {
@@ -630,6 +659,10 @@ declare namespace LocalJSX {
630
659
  * @default []
631
660
  */
632
661
  "controls"?: KritzelToolbarControl[];
662
+ /**
663
+ * @default true
664
+ */
665
+ "isUtilityPanelVisible"?: boolean;
633
666
  "onIsControlsReady"?: (event: KritzelControlsCustomEvent<void>) => void;
634
667
  }
635
668
  interface KritzelCursorTrail {
@@ -650,7 +683,7 @@ declare namespace LocalJSX {
650
683
  }
651
684
  interface KritzelEditor {
652
685
  /**
653
- * @default DEFAULT_KRITZEL_CONTROLS
686
+ * @default [ { name: 'selection', type: 'tool', tool: KritzelSelectionTool, icon: 'cursor', }, { name: 'brush', type: 'tool', tool: KritzelBrushTool, isDefault: true, icon: 'pen', config: DEFAULT_BRUSH_CONFIG, }, { name: 'eraser', type: 'tool', tool: KritzelEraserTool, icon: 'eraser', }, { name: 'text', type: 'tool', tool: KritzelTextTool, icon: 'type', config: DEFAULT_TEXT_CONFIG, }, { name: 'image', type: 'tool', tool: KritzelImageTool, icon: 'image', }, { name: 'divider', type: 'divider', }, { name: 'config', type: 'config', }, ]
654
687
  */
655
688
  "controls"?: KritzelToolbarControl[];
656
689
  /**
@@ -658,23 +691,45 @@ declare namespace LocalJSX {
658
691
  */
659
692
  "customSvgIcons"?: Record<string, string>;
660
693
  /**
661
- * @default false
694
+ * @default [ { label: 'Paste', icon: 'paste', disabled: async () => (await this.engineRef.getCopiedObjects()).length === 0, action: menu => this.engineRef.paste(menu.x, menu.y), }, { label: 'Select All', icon: 'select-all', action: () => this.selectAllObjectsInViewport() }, ]
662
695
  */
663
- "hideControls"?: boolean;
696
+ "globalContextMenuItems"?: ContextMenuItem[];
697
+ /**
698
+ * @default true
699
+ */
700
+ "isControlsVisible"?: boolean;
701
+ /**
702
+ * @default true
703
+ */
704
+ "isUtilityPanelVisible"?: boolean;
705
+ /**
706
+ * @default [ { label: 'Edit', icon: 'pen', visible: (_, objects) => objects.length === 1 && objects[0].isEditable, action: (_, objects) => { if (objects.length === 1) { const object = objects[0]; if (object.isEditable) { object.edit(); } } } }, { label: 'Copy', icon: 'copy', action: () => this.engineRef.copy() }, { label: 'Paste', icon: 'paste', disabled: async () => (await this.engineRef.getCopiedObjects()).length === 0, action: (menu, _) => this.engineRef.paste(menu.x, menu.y) }, { label: 'Delete', icon: 'delete', action: () => this.engineRef.delete() }, { label: 'Bring to Front', icon: 'bring-to-front', action: () => this.engineRef.moveToTop() }, { label: 'Send to Back', icon: 'send-to-back', action: () => this.engineRef.moveToBottom() }, ]
707
+ */
708
+ "objectContextMenuItems"?: ContextMenuItem[];
664
709
  "onIsReady"?: (event: KritzelEditorCustomEvent<HTMLElement>) => void;
665
- }
666
- interface KritzelEngine {
667
- "activeTool"?: KritzelTool;
668
710
  /**
669
- * @default [ { label: 'Paste', icon: 'paste', disabled: () => this.store.state.copiedObjects === null, action: () => { const x = (-this.store.state.translateX + this.store.state.contextMenuX) / this.store.state.scale; const y = (-this.store.state.translateY + this.store.state.contextMenuY) / this.store.state.scale; this.paste(x, y); }, }, { label: 'Select All', icon: 'select-all', action: () => this.selectAllObjectsInViewport() }, ]
711
+ * @default ABSOLUTE_SCALE_MAX
670
712
  */
671
- "globalContextMenuItems"?: ContextMenuItem[];
713
+ "scaleMax"?: number;
672
714
  /**
673
- * @default [ { label: 'Copy', icon: 'copy', action: () => this.copy() }, { label: 'Paste', icon: 'paste', disabled: () => this.store.state.copiedObjects === null, action: () => { const x = (-this.store.state.translateX + this.store.state.contextMenuX) / this.store.state.scale; const y = (-this.store.state.translateY + this.store.state.contextMenuY) / this.store.state.scale; this.paste(x, y); }, }, { label: 'Delete', icon: 'delete', action: () => this.delete() }, { label: 'Bring to Front', icon: 'bring-to-front', action: () => this.moveToTop() }, { label: 'Send to Back', icon: 'send-to-back', action: () => this.moveToBottom() }, ]
715
+ * @default ABSOLUTE_SCALE_MIN
674
716
  */
717
+ "scaleMin"?: number;
718
+ }
719
+ interface KritzelEngine {
720
+ "activeTool"?: KritzelTool;
721
+ "globalContextMenuItems"?: ContextMenuItem[];
675
722
  "objectContextMenuItems"?: ContextMenuItem[];
676
723
  "onActiveToolChange"?: (event: KritzelEngineCustomEvent<KritzelBaseTool>) => void;
677
724
  "onIsEngineReady"?: (event: KritzelEngineCustomEvent<void>) => void;
725
+ /**
726
+ * @default ABSOLUTE_SCALE_MAX
727
+ */
728
+ "scaleMax"?: number;
729
+ /**
730
+ * @default ABSOLUTE_SCALE_MIN
731
+ */
732
+ "scaleMin"?: number;
678
733
  }
679
734
  interface KritzelFont {
680
735
  /**
@@ -0,0 +1,2 @@
1
+ import { KritzelBrushToolConfig } from '../interfaces/toolbar-control.interface';
2
+ export declare const DEFAULT_BRUSH_CONFIG: KritzelBrushToolConfig;
@@ -0,0 +1,2 @@
1
+ import { KritzelTextToolConfig } from "../interfaces/toolbar-control.interface";
2
+ export declare const DEFAULT_TEXT_CONFIG: KritzelTextToolConfig;
@@ -0,0 +1,2 @@
1
+ export declare const ABSOLUTE_SCALE_MAX = 1000;
2
+ export declare const ABSOLUTE_SCALE_MIN = 0.0001;
@@ -11,3 +11,11 @@ export type * from './components';
11
11
  export * from './classes/objects/text.class';
12
12
  export * from './classes/objects/path.class';
13
13
  export * from './classes/objects/image.class';
14
+ export * from './classes/tools/brush-tool.class';
15
+ export * from './classes/tools/eraser-tool.class';
16
+ export * from './classes/tools/image-tool.class';
17
+ export * from './classes/tools/text-tool.class';
18
+ export * from './classes/tools/selection-tool.class';
19
+ export * from './interfaces/toolbar-control.interface';
20
+ export * from './configs/default-brush-tool.config';
21
+ export * from './configs/default-text-tool.config';
@@ -1,6 +1,17 @@
1
+ import { KritzelBaseObject } from "../classes/objects/base-object.class";
1
2
  export interface ContextMenuItem {
2
3
  label: string;
3
- action: () => void;
4
+ action: (menu: {
5
+ x: number;
6
+ y: number;
7
+ }, objects: KritzelBaseObject[]) => void;
4
8
  icon?: string;
5
- disabled?: boolean | (() => boolean);
9
+ visible?: boolean | ((menu: {
10
+ x: number;
11
+ y: number;
12
+ }, objects: KritzelBaseObject[]) => boolean | Promise<boolean>);
13
+ disabled?: boolean | ((menu: {
14
+ x: number;
15
+ y: number;
16
+ }, objects: KritzelBaseObject[]) => boolean | Promise<boolean>);
6
17
  }
@@ -49,7 +49,11 @@ export interface KritzelEngineState {
49
49
  startX: number;
50
50
  startY: number;
51
51
  translateX: number;
52
+ translateXMax: number;
53
+ translateXMin: number;
52
54
  translateY: number;
55
+ translateYMax: number;
56
+ translateYMin: number;
53
57
  viewportWidth: number;
54
58
  viewportHeight: number;
55
59
  historyBufferSize: number;
@@ -20,6 +20,7 @@ export interface KritzelObject<T = Element> {
20
20
  markedForRemoval: boolean;
21
21
  isMounted: boolean;
22
22
  zIndex: number;
23
+ isEditable: boolean;
23
24
  _elementRef: T;
24
25
  set elementRef(element: T);
25
26
  get elementRef(): T;
@@ -39,4 +40,5 @@ export interface KritzelObject<T = Element> {
39
40
  copy(): KritzelBaseObject<Element>;
40
41
  onSelectedClick(): void;
41
42
  isClass<T extends KritzelBaseObject>(this: T, type: string): this is T;
43
+ edit(): void;
42
44
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kritzel-stencil",
3
- "version": "0.0.119",
3
+ "version": "0.0.121",
4
4
  "description": "Stencil Component Starter",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.js",