kritzel-stencil 0.0.121 → 0.0.122

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 (93) hide show
  1. package/dist/cjs/{index-BjLSiQIM.js → index-CFCyVs0_.js} +185 -69
  2. package/dist/cjs/index-CFCyVs0_.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +1 -1
  4. package/dist/cjs/kritzel-brush-style_18.cjs.entry.js +127 -71
  5. package/dist/cjs/kritzel-brush-style_18.cjs.entry.js.map +1 -1
  6. package/dist/collection/classes/commands/remove-object.command.js +3 -0
  7. package/dist/collection/classes/commands/remove-object.command.js.map +1 -1
  8. package/dist/collection/classes/handlers/context-menu.handler.js +1 -1
  9. package/dist/collection/classes/handlers/context-menu.handler.js.map +1 -1
  10. package/dist/collection/classes/handlers/move.handler.js +2 -2
  11. package/dist/collection/classes/handlers/move.handler.js.map +1 -1
  12. package/dist/collection/classes/handlers/selection.handler.js +5 -5
  13. package/dist/collection/classes/handlers/selection.handler.js.map +1 -1
  14. package/dist/collection/classes/history.class.js +16 -13
  15. package/dist/collection/classes/history.class.js.map +1 -1
  16. package/dist/collection/classes/objects/base-object.class.js +28 -32
  17. package/dist/collection/classes/objects/base-object.class.js.map +1 -1
  18. package/dist/collection/classes/objects/custom-element.class.js +52 -0
  19. package/dist/collection/classes/objects/custom-element.class.js.map +1 -0
  20. package/dist/collection/classes/objects/image.class.js +1 -1
  21. package/dist/collection/classes/objects/image.class.js.map +1 -1
  22. package/dist/collection/classes/objects/path.class.js +62 -2
  23. package/dist/collection/classes/objects/path.class.js.map +1 -1
  24. package/dist/collection/classes/objects/selection-group.class.js +1 -1
  25. package/dist/collection/classes/objects/selection-group.class.js.map +1 -1
  26. package/dist/collection/classes/objects/text.class.js +1 -1
  27. package/dist/collection/classes/objects/text.class.js.map +1 -1
  28. package/dist/collection/classes/reviver.class.js +4 -0
  29. package/dist/collection/classes/reviver.class.js.map +1 -1
  30. package/dist/collection/classes/store.class.js +45 -6
  31. package/dist/collection/classes/store.class.js.map +1 -1
  32. package/dist/collection/classes/tools/eraser-tool.class.js +18 -14
  33. package/dist/collection/classes/tools/eraser-tool.class.js.map +1 -1
  34. package/dist/collection/classes/tools/image-tool.class.js +1 -1
  35. package/dist/collection/classes/tools/image-tool.class.js.map +1 -1
  36. package/dist/collection/classes/tools/selection-tool.class.js +2 -6
  37. package/dist/collection/classes/tools/selection-tool.class.js.map +1 -1
  38. package/dist/collection/classes/viewport.class.js +20 -12
  39. package/dist/collection/classes/viewport.class.js.map +1 -1
  40. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +6 -6
  41. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
  42. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +38 -32
  43. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
  44. package/dist/collection/configs/default-engine-state.js +2 -2
  45. package/dist/collection/configs/default-engine-state.js.map +1 -1
  46. package/dist/collection/helpers/html.helper.js +7 -0
  47. package/dist/collection/helpers/html.helper.js.map +1 -0
  48. package/dist/collection/helpers/object.helper.js +6 -2
  49. package/dist/collection/helpers/object.helper.js.map +1 -1
  50. package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
  51. package/dist/collection/interfaces/object.interface.js.map +1 -1
  52. package/dist/components/index.js +2 -2
  53. package/dist/components/kritzel-controls.js +1 -1
  54. package/dist/components/kritzel-editor.js +7 -7
  55. package/dist/components/kritzel-editor.js.map +1 -1
  56. package/dist/components/kritzel-engine.js +1 -1
  57. package/dist/components/{p-q-xqpmae.js → p-COPOzWCn.js} +211 -99
  58. package/dist/components/p-COPOzWCn.js.map +1 -0
  59. package/dist/components/{p-DC3j4P1n.js → p-Ch8eM2R8.js} +99 -39
  60. package/dist/components/p-Ch8eM2R8.js.map +1 -0
  61. package/dist/components/{p-BAMl2Ww6.js → p-DIu9OTyP.js} +3 -3
  62. package/dist/components/{p-BAMl2Ww6.js.map → p-DIu9OTyP.js.map} +1 -1
  63. package/dist/esm/{index-DsUDklEm.js → index-DYLW4hYm.js} +185 -69
  64. package/dist/esm/index-DYLW4hYm.js.map +1 -0
  65. package/dist/esm/index.js +1 -1
  66. package/dist/esm/kritzel-brush-style_18.entry.js +127 -71
  67. package/dist/esm/kritzel-brush-style_18.entry.js.map +1 -1
  68. package/dist/stencil/index.esm.js +1 -1
  69. package/dist/stencil/p-DYLW4hYm.js +2 -0
  70. package/dist/stencil/p-DYLW4hYm.js.map +1 -0
  71. package/dist/stencil/p-fa584641.entry.js +2 -0
  72. package/dist/stencil/p-fa584641.entry.js.map +1 -0
  73. package/dist/stencil/stencil.esm.js +1 -1
  74. package/dist/types/classes/history.class.d.ts +1 -0
  75. package/dist/types/classes/objects/base-object.class.d.ts +10 -6
  76. package/dist/types/classes/objects/custom-element.class.d.ts +26 -0
  77. package/dist/types/classes/objects/image.class.d.ts +1 -1
  78. package/dist/types/classes/objects/path.class.d.ts +5 -2
  79. package/dist/types/classes/objects/text.class.d.ts +1 -1
  80. package/dist/types/classes/store.class.d.ts +5 -0
  81. package/dist/types/components.d.ts +4 -4
  82. package/dist/types/helpers/html.helper.d.ts +3 -0
  83. package/dist/types/interfaces/engine-state.interface.d.ts +2 -2
  84. package/dist/types/interfaces/object.interface.d.ts +9 -4
  85. package/package.json +1 -1
  86. package/dist/cjs/index-BjLSiQIM.js.map +0 -1
  87. package/dist/components/p-DC3j4P1n.js.map +0 -1
  88. package/dist/components/p-q-xqpmae.js.map +0 -1
  89. package/dist/esm/index-DsUDklEm.js.map +0 -1
  90. package/dist/stencil/p-3797c300.entry.js +0 -2
  91. package/dist/stencil/p-3797c300.entry.js.map +0 -1
  92. package/dist/stencil/p-DsUDklEm.js +0 -2
  93. package/dist/stencil/p-DsUDklEm.js.map +0 -1
@@ -1,2 +1,2 @@
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)}));
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-fa584641",[[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
@@ -15,4 +15,5 @@ export declare class KritzelHistory {
15
15
  executeCommand(command: KritzelBaseCommand): void;
16
16
  undo(): void;
17
17
  redo(): void;
18
+ private addUpdateViewportCommand;
18
19
  }
@@ -5,8 +5,9 @@ import { KritzelSerializable } from '../../interfaces/serializable.interface';
5
5
  import { KritzelStore } from '../store.class';
6
6
  export declare class KritzelBaseObject<T extends Element = HTMLElement | SVGElement> implements KritzelObject<T>, KritzelSerializable {
7
7
  __class__: string;
8
+ _store: KritzelStore;
9
+ _elementRef: T;
8
10
  id: string;
9
- visible: boolean;
10
11
  x: number;
11
12
  y: number;
12
13
  translateX: number;
@@ -19,16 +20,16 @@ export declare class KritzelBaseObject<T extends Element = HTMLElement | SVGElem
19
20
  opacity: number;
20
21
  padding: number;
21
22
  scale: number;
22
- selected: boolean;
23
23
  resizing: boolean;
24
24
  rotation: number;
25
25
  markedForRemoval: boolean;
26
- isMounted: boolean;
27
26
  zIndex: number;
27
+ isVisible: boolean;
28
+ isSelected: boolean;
29
+ isMounted: boolean;
28
30
  isEditable: boolean;
29
- debugInfoVisible: boolean;
30
- _store: KritzelStore;
31
- _elementRef: T;
31
+ isInteractive: boolean;
32
+ isDebugInfoVisible: boolean;
32
33
  get totalWidth(): number;
33
34
  get totalHeight(): number;
34
35
  set elementRef(element: T);
@@ -47,6 +48,8 @@ export declare class KritzelBaseObject<T extends Element = HTMLElement | SVGElem
47
48
  constructor();
48
49
  static create(store: KritzelStore): KritzelBaseObject<Element>;
49
50
  mount(element: T): void;
51
+ unmount(): void;
52
+ remount(): void;
50
53
  generateId(): string;
51
54
  isInViewport(): boolean;
52
55
  centerInViewport(): void;
@@ -58,4 +61,5 @@ export declare class KritzelBaseObject<T extends Element = HTMLElement | SVGElem
58
61
  revive(object: any): KritzelBaseObject<T>;
59
62
  isClass<T extends KritzelBaseObject>(this: T, className: string): this is T;
60
63
  edit(): void;
64
+ hitTest(_x: number, _y: number): boolean;
61
65
  }
@@ -0,0 +1,26 @@
1
+ import { KritzelStore } from '../store.class';
2
+ import { KritzelBaseObject } from './base-object.class';
3
+ export declare class KritzelCustomElement extends KritzelBaseObject<HTMLElement> {
4
+ __class__: string;
5
+ element: HTMLElement;
6
+ isInteractive: boolean;
7
+ constructor(config?: {
8
+ element: HTMLElement;
9
+ translateX?: number;
10
+ translateY?: number;
11
+ scale?: number;
12
+ height?: number;
13
+ width?: number;
14
+ });
15
+ static create(store: KritzelStore, config?: {
16
+ element: HTMLElement;
17
+ translateX?: number;
18
+ translateY?: number;
19
+ scale?: number;
20
+ height?: number;
21
+ width?: number;
22
+ }): KritzelBaseObject<Element>;
23
+ mount(element: HTMLElement): void;
24
+ resize(x: number, y: number, width: number, height: number): void;
25
+ copy(): KritzelCustomElement;
26
+ }
@@ -6,7 +6,7 @@ export declare class KritzelImage extends KritzelBaseObject<HTMLImageElement> {
6
6
  maxWidth: number;
7
7
  maxHeight: number;
8
8
  maxCompressionSize: number;
9
- debugInfoVisible: boolean;
9
+ isDebugInfoVisible: boolean;
10
10
  constructor(config?: Partial<KritzelImage>);
11
11
  static create(store: KritzelStore): KritzelImage;
12
12
  resize(x: number, y: number, width: number, height: number): void;
@@ -4,6 +4,7 @@ import { KritzelStore } from '../store.class';
4
4
  export declare class KritzelPath extends KritzelBaseObject<SVGElement> {
5
5
  __class__: string;
6
6
  points: number[][];
7
+ adjustedPoints: number[][];
7
8
  d: string;
8
9
  stroke: string;
9
10
  strokeWidth: number;
@@ -16,9 +17,9 @@ export declare class KritzelPath extends KritzelBaseObject<SVGElement> {
16
17
  height: number;
17
18
  width: number;
18
19
  scale: number;
19
- visible: boolean;
20
20
  options: KritzelPathOptions | undefined;
21
- debugInfoVisible: boolean;
21
+ isVisible: boolean;
22
+ isDebugInfoVisible: boolean;
22
23
  get viewBox(): string;
23
24
  constructor(config?: {
24
25
  points: number[][];
@@ -32,6 +33,8 @@ export declare class KritzelPath extends KritzelBaseObject<SVGElement> {
32
33
  static create(store: KritzelStore, options?: KritzelPathOptions): KritzelPath;
33
34
  resize(x: number | null, y: number | null, width: number, height: number): void;
34
35
  rotate(value: number): void;
36
+ hitTest(x: number, y: number): boolean;
37
+ private pointToLineSegmentDistance;
35
38
  private updateDimensions;
36
39
  private generateSvgPath;
37
40
  private getStrokeFromPoints;
@@ -8,7 +8,7 @@ export declare class KritzelText extends KritzelBaseObject<HTMLTextAreaElement>
8
8
  fontColor: string;
9
9
  initialWidth: number;
10
10
  isNew: boolean;
11
- debugInfoVisible: boolean;
11
+ isDebugInfoVisible: boolean;
12
12
  isEditable: boolean;
13
13
  readonly rows: number;
14
14
  get isReadonly(): boolean;
@@ -35,4 +35,9 @@ export declare class KritzelStore {
35
35
  clearSelection(): void;
36
36
  resetActiveText(): void;
37
37
  getObjectFromPointerEvent(event: PointerEvent, selector?: string): KritzelBaseObject<any> | null;
38
+ getObjectsFromPointerEvent(event: PointerEvent, selector?: string): KritzelBaseObject<any>[];
39
+ getCanvasPoint(event: PointerEvent): {
40
+ x: number;
41
+ y: number;
42
+ };
38
43
  }
@@ -116,7 +116,7 @@ export namespace Components {
116
116
  "centerObjectInViewport": (object: KritzelBaseObject) => Promise<KritzelBaseObject<HTMLElement | SVGElement>>;
117
117
  "clearSelection": () => Promise<void>;
118
118
  /**
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', }, ]
119
+ * @default [ { name: 'selection', type: 'tool', tool: KritzelSelectionTool, icon: 'cursor', }, { name: 'brush', type: 'tool', tool: KritzelBrushTool, icon: 'pen', isDefault: true, 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', }, ]
120
120
  */
121
121
  "controls": KritzelToolbarControl[];
122
122
  /**
@@ -138,7 +138,7 @@ export namespace Components {
138
138
  */
139
139
  "isUtilityPanelVisible": boolean;
140
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() }, ]
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
142
  */
143
143
  "objectContextMenuItems": ContextMenuItem[];
144
144
  "removeObject": <T extends KritzelBaseObject>(object: T) => Promise<T | null>;
@@ -683,7 +683,7 @@ declare namespace LocalJSX {
683
683
  }
684
684
  interface KritzelEditor {
685
685
  /**
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', }, ]
686
+ * @default [ { name: 'selection', type: 'tool', tool: KritzelSelectionTool, icon: 'cursor', }, { name: 'brush', type: 'tool', tool: KritzelBrushTool, icon: 'pen', isDefault: true, 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', }, ]
687
687
  */
688
688
  "controls"?: KritzelToolbarControl[];
689
689
  /**
@@ -703,7 +703,7 @@ declare namespace LocalJSX {
703
703
  */
704
704
  "isUtilityPanelVisible"?: boolean;
705
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() }, ]
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
707
  */
708
708
  "objectContextMenuItems"?: ContextMenuItem[];
709
709
  "onIsReady"?: (event: KritzelEditorCustomEvent<HTMLElement>) => void;
@@ -0,0 +1,3 @@
1
+ export declare class KritzelKeyboardHelper {
2
+ static getNumericValueFromStyle(element: HTMLElement, property: string): number;
3
+ }
@@ -40,8 +40,8 @@ export interface KritzelEngineState {
40
40
  skipContextMenu: boolean;
41
41
  debugInfo: KritzelDebugInfo;
42
42
  host: HTMLElement;
43
- cursorX: number;
44
- cursorY: number;
43
+ pointerX: number;
44
+ pointerY: number;
45
45
  scale: number;
46
46
  scaleMax: number;
47
47
  scaleMin: number;
@@ -1,8 +1,8 @@
1
1
  import { KritzelBaseObject } from '../classes/objects/base-object.class';
2
2
  import { KritzelBoundingBox } from './bounding-box.interface';
3
3
  export interface KritzelObject<T = Element> {
4
+ _elementRef: T;
4
5
  id: string;
5
- visible: boolean;
6
6
  x: number;
7
7
  y: number;
8
8
  translateX: number;
@@ -14,14 +14,16 @@ export interface KritzelObject<T = Element> {
14
14
  borderWidth: number;
15
15
  opacity: number;
16
16
  scale: number;
17
- selected: boolean;
18
17
  resizing: boolean;
19
18
  rotation: number;
20
19
  markedForRemoval: boolean;
21
- isMounted: boolean;
22
20
  zIndex: number;
21
+ isVisible: boolean;
22
+ isSelected: boolean;
23
+ isMounted: boolean;
23
24
  isEditable: boolean;
24
- _elementRef: T;
25
+ isInteractive: boolean;
26
+ isDebugInfoVisible: boolean;
25
27
  set elementRef(element: T);
26
28
  get elementRef(): T;
27
29
  get boundingBox(): KritzelBoundingBox;
@@ -31,6 +33,8 @@ export interface KritzelObject<T = Element> {
31
33
  get centerX(): number;
32
34
  get centerY(): number;
33
35
  mount(element: T): void;
36
+ unmount(): void;
37
+ remount(): void;
34
38
  generateId(): string;
35
39
  isInViewport(viewport: KritzelBoundingBox, scale: number): boolean;
36
40
  centerInViewport(): void;
@@ -41,4 +45,5 @@ export interface KritzelObject<T = Element> {
41
45
  onSelectedClick(): void;
42
46
  isClass<T extends KritzelBaseObject>(this: T, type: string): this is T;
43
47
  edit(): void;
48
+ hitTest(x: number, y: number): boolean;
44
49
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kritzel-stencil",
3
- "version": "0.0.121",
3
+ "version": "0.0.122",
4
4
  "description": "Stencil Component Starter",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.js",