@erase2d/fabric 1.1.6 → 1.1.8

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.
package/README.md CHANGED
@@ -44,13 +44,15 @@ eraser.on('start', (e) => {
44
44
  // inform something
45
45
  });
46
46
 
47
- eraser.on('end', (e) => {
47
+ eraser.on('end', async (e) => {
48
48
  // prevent from committing erasing to the tree
49
49
  e.preventDefault();
50
- const isErased = e.targets.includes(circle);
50
+
51
+ const { path, targets } = e.detail;
52
+ const isErased = targets.includes(circle);
51
53
 
52
54
  // commit erasing manually
53
- eraser.commit(e.detail);
55
+ const pathPerObjectMap = await eraser.commit({ path, targets });
54
56
 
55
57
  const committedEraser = circle.clipPath instanceof ClippingGroup;
56
58
  });
@@ -59,6 +61,38 @@ canvas.freeDrawingBrush = eraser;
59
61
  canvas.isDrawingMode = true;
60
62
  ```
61
63
 
64
+ ## Sponsors
65
+
66
+ <table>
67
+ <tr>
68
+ <td>
69
+ <a
70
+ href="https://rembg.com/?utm_source=erase2d&utm_medium=github_readme&utm_campaign=sponsorship"
71
+ >
72
+ <img
73
+ width="120px"
74
+ height="120px"
75
+ alt="RemBG.com Logo"
76
+ src="https://github.com/user-attachments/assets/25433a27-5758-4c02-8375-649acde37556"
77
+ />
78
+ </a>
79
+ </td>
80
+ <td>
81
+ <b>RemBG Remove Background API</b>
82
+ <br />
83
+ <a
84
+ href="https://rembg.com/?utm_source=erase2d&utm_medium=github_readme&utm_campaign=sponsorship"
85
+ >https://rembg.com</a
86
+ >
87
+ <br />
88
+ <p width="200px">
89
+ Accurate and affordable background remover API
90
+ <br />
91
+ </p>
92
+ </td>
93
+ </tr>
94
+ </table>
95
+
62
96
  ## Migrating from fabric@5
63
97
 
64
98
  The logic has been reworked from the bottom.
@@ -349,7 +349,7 @@ var EraserBrush = /*#__PURE__*/function (_fabric$PencilBrush) {
349
349
  }())), _toConsumableArray([[this.canvas.backgroundImage, !this.canvas.backgroundVpt ? this.canvas.viewportTransform : undefined], [this.canvas.overlayImage, !this.canvas.overlayVpt ? this.canvas.viewportTransform : undefined]].filter(function (_ref5) {
350
350
  var _ref6 = _slicedToArray(_ref5, 1),
351
351
  object = _ref6[0];
352
- return object;
352
+ return !!(object !== null && object !== void 0 && object.erasable);
353
353
  }).map( /*#__PURE__*/function () {
354
354
  var _ref8 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_ref7) {
355
355
  var _ref9, object, vptFlag;
@@ -1 +1 @@
1
- {"version":3,"file":"EraserBrush.js","sources":["../../../src/EraserBrush.ts"],"sourcesContent":["import { erase } from '@erase2d/core';\nimport * as fabric from 'fabric';\nimport { FabricObject, Group, Path } from 'fabric';\nimport { ClippingGroup } from './ClippingGroup';\nimport { draw } from './ErasingEffect';\n\nexport type EventDetailMap = {\n start: fabric.TEvent<fabric.TPointerEvent>;\n move: fabric.TEvent<fabric.TPointerEvent>;\n end: {\n path: fabric.Path;\n targets: fabric.FabricObject[];\n };\n redraw: { type: 'start' | 'render' };\n cancel: never;\n};\n\nexport type ErasingEventType = keyof EventDetailMap;\n\nexport type ErasingEvent<T extends ErasingEventType> = CustomEvent<\n EventDetailMap[T]\n>;\n\nfunction walk(objects: FabricObject[], path: Path): FabricObject[] {\n return objects.flatMap((object) => {\n if (!object.erasable || !object.intersectsWithObject(path)) {\n return [];\n } else if (object instanceof Group && object.erasable === 'deep') {\n return walk(object.getObjects(), path);\n } else {\n return [object];\n }\n });\n}\n\nconst assertClippingGroup = (object: fabric.FabricObject) => {\n const curr = object.clipPath;\n\n if (curr instanceof ClippingGroup) {\n return curr;\n }\n\n const strokeWidth = object.strokeWidth;\n const strokeWidthFactor = new fabric.Point(strokeWidth, strokeWidth);\n const strokeVector = object.strokeUniform\n ? strokeWidthFactor.divide(object.getObjectScaling())\n : strokeWidthFactor;\n\n const next = new ClippingGroup([], {\n width: object.width + strokeVector.x,\n height: object.height + strokeVector.y,\n });\n\n if (curr) {\n const { x, y } = curr.translateToOriginPoint(\n new fabric.Point(),\n curr.originX,\n curr.originY\n );\n curr.originX = curr.originY = 'center';\n fabric.util.sendObjectToPlane(\n curr,\n undefined,\n fabric.util.createTranslateMatrix(x, y)\n );\n next.add(curr as FabricObject);\n }\n\n return (object.clipPath = next);\n};\n\nexport function commitErasing(\n object: fabric.FabricObject,\n sourceInObjectPlane: fabric.Path\n) {\n const clipPath = assertClippingGroup(object);\n clipPath.add(sourceInObjectPlane);\n clipPath.set('dirty', true);\n object.set('dirty', true);\n}\n\nexport async function eraseObject(\n object: fabric.FabricObject,\n source: fabric.Path\n) {\n const clone = await source.clone();\n fabric.util.sendObjectToPlane(clone, undefined, object.calcTransformMatrix());\n commitErasing(object, clone);\n return clone;\n}\n\nexport async function eraseCanvasDrawable(\n object: fabric.FabricObject,\n vpt: fabric.TMat2D | undefined,\n source: fabric.Path\n) {\n const clone = await source.clone();\n const d =\n vpt &&\n object.translateToOriginPoint(\n new fabric.Point(),\n object.originX,\n object.originY\n );\n fabric.util.sendObjectToPlane(\n clone,\n undefined,\n d\n ? fabric.util.multiplyTransformMatrixArray([\n [1, 0, 0, 1, d.x, d.y],\n // apply vpt from center of drawable\n vpt,\n [1, 0, 0, 1, -d.x, -d.y],\n object.calcTransformMatrix(),\n ])\n : object.calcTransformMatrix()\n );\n commitErasing(object, clone);\n return clone;\n}\n\nconst setCanvasDimensions = (\n el: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D,\n { width, height }: fabric.TSize,\n retinaScaling = 1\n) => {\n el.width = width;\n el.height = height;\n if (retinaScaling > 1) {\n el.setAttribute('width', (width * retinaScaling).toString());\n el.setAttribute('height', (height * retinaScaling).toString());\n ctx.scale(retinaScaling, retinaScaling);\n }\n};\n\n/**\n * Supports **selective** erasing: only erasable objects are affected by the eraser brush.\n *\n * Supports **{@link inverted}** erasing: the brush can \"undo\" erasing.\n *\n * Supports **alpha** erasing: setting the alpha channel of the `color` property controls the eraser intensity.\n *\n * In order to support selective erasing, the brush clips the entire canvas and\n * masks all non-erasable objects over the erased path, see {@link draw}.\n *\n * If **{@link inverted}** draws all objects, erasable objects without their eraser, over the erased path.\n * This achieves the desired effect of seeming to erase or undo erasing on erasable objects only.\n *\n * After erasing is done the `end` event {@link ErasingEndEvent} is fired, after which erasing will be committed to the tree.\n * @example\n * canvas = new Canvas();\n * const eraser = new EraserBrush(canvas);\n * canvas.freeDrawingBrush = eraser;\n * canvas.isDrawingMode = true;\n * eraser.on('start', (e) => {\n * console.log('started erasing');\n * // prevent erasing\n * e.preventDefault();\n * });\n * eraser.on('end', (e) => {\n * const { targets: erasedTargets, path } = e.detail;\n * e.preventDefault(); // prevent erasing being committed to the tree\n * eraser.commit({ targets: erasedTargets, path }); // commit manually since default was prevented\n * });\n *\n * In case of performance issues trace {@link drawEffect} calls and consider preventing it from executing\n * @example\n * const eraser = new EraserBrush(canvas);\n * eraser.on('redraw', (e) => {\n * // prevent effect redraw on pointer down (e.g. useful if canvas didn't change)\n * e.detail.type === 'start' && e.preventDefault());\n * // prevent effect redraw after canvas has rendered (effect will become stale)\n * e.detail.type === 'render' && e.preventDefault());\n * });\n */\nexport class EraserBrush extends fabric.PencilBrush {\n /**\n * When set to `true` the brush will create a visual effect of undoing erasing\n */\n inverted = false;\n\n effectContext: CanvasRenderingContext2D;\n\n private eventEmitter: EventTarget;\n private active = false;\n private _disposer?: VoidFunction;\n\n constructor(canvas: fabric.Canvas) {\n super(canvas);\n const el = document.createElement('canvas');\n const ctx = el.getContext('2d');\n if (!ctx) {\n throw new Error('Failed to get context');\n }\n setCanvasDimensions(el, ctx, canvas, this.canvas.getRetinaScaling());\n this.effectContext = ctx;\n this.eventEmitter = new EventTarget();\n }\n\n /**\n * @returns disposer make sure to call it to avoid memory leaks\n */\n on<T extends ErasingEventType>(\n type: T,\n cb: (evt: ErasingEvent<T>) => any,\n options?: boolean | AddEventListenerOptions\n ) {\n this.eventEmitter.addEventListener(type, cb as EventListener, options);\n return () =>\n this.eventEmitter.removeEventListener(type, cb as EventListener, options);\n }\n\n drawEffect() {\n draw(\n this.effectContext,\n {\n opacity: new fabric.Color(this.color).getAlpha(),\n inverted: this.inverted,\n },\n { canvas: this.canvas }\n );\n }\n\n /**\n * @override\n */\n _setBrushStyles(ctx: CanvasRenderingContext2D = this.canvas.contextTop) {\n super._setBrushStyles(ctx);\n ctx.strokeStyle = 'black';\n }\n\n /**\n * @override strictly speaking the eraser needs a full render only if it has opacity set.\n * However since {@link PencilBrush} is designed for subclassing that is what we have to work with.\n */\n needsFullRender(): boolean {\n return true;\n }\n\n /**\n * @override erase\n */\n _render(ctx: CanvasRenderingContext2D = this.canvas.getTopContext()): void {\n super._render(ctx);\n erase(this.canvas.getContext(), ctx, this.effectContext);\n }\n\n /**\n * @override {@link drawEffect}\n */\n onMouseDown(\n pointer: fabric.Point,\n context: fabric.TEvent<fabric.TPointerEvent>\n ): void {\n if (\n !this.eventEmitter.dispatchEvent(\n new CustomEvent('start', { detail: context, cancelable: true })\n )\n ) {\n return;\n }\n\n this.active = true;\n\n this.eventEmitter.dispatchEvent(\n new CustomEvent('redraw', {\n detail: { type: 'start' },\n cancelable: true,\n })\n ) && this.drawEffect();\n\n // consider a different approach\n this._disposer = this.canvas.on('after:render', ({ ctx }) => {\n if (ctx !== this.canvas.getContext()) {\n return;\n }\n this.eventEmitter.dispatchEvent(\n new CustomEvent('redraw', {\n detail: { type: 'render' },\n cancelable: true,\n })\n ) && this.drawEffect();\n this._render();\n });\n\n super.onMouseDown(pointer, context);\n }\n\n /**\n * @override run if active\n */\n onMouseMove(\n pointer: fabric.Point,\n context: fabric.TEvent<fabric.TPointerEvent>\n ): void {\n this.active &&\n this.eventEmitter.dispatchEvent(\n new CustomEvent('move', { detail: context, cancelable: true })\n ) &&\n super.onMouseMove(pointer, context);\n }\n\n /**\n * @override run if active, dispose of {@link drawEffect} listener\n */\n onMouseUp(context: fabric.TEvent<fabric.TPointerEvent>): boolean {\n this.active && super.onMouseUp(context);\n this.active = false;\n this._disposer?.();\n delete this._disposer;\n return false;\n }\n\n /**\n * @override {@link fabric.PencilBrush} logic\n */\n convertPointsToSVGPath(points: fabric.Point[]): fabric.util.TSimplePathData {\n return super.convertPointsToSVGPath(\n this.decimate ? this.decimatePoints(points, this.decimate) : points\n );\n }\n\n /**\n * @override\n */\n createPath(pathData: fabric.util.TSimplePathData) {\n const path = super.createPath(pathData);\n path.set(\n this.inverted\n ? {\n globalCompositeOperation: 'source-over',\n stroke: 'white',\n }\n : {\n globalCompositeOperation: 'destination-out',\n stroke: 'black',\n opacity: new fabric.Color(this.color).getAlpha(),\n }\n );\n return path;\n }\n\n async commit({\n path,\n targets,\n }: EventDetailMap['end']): Promise<Map<fabric.FabricObject, fabric.Path>> {\n return new Map(\n await Promise.all([\n ...targets.map(async (object) => {\n return [object, await eraseObject(object, path)] as const;\n }),\n ...(\n [\n [\n this.canvas.backgroundImage,\n !this.canvas.backgroundVpt\n ? this.canvas.viewportTransform\n : undefined,\n ],\n [\n this.canvas.overlayImage,\n !this.canvas.overlayVpt\n ? this.canvas.viewportTransform\n : undefined,\n ],\n ] as const\n )\n .filter(([object]) => object)\n .map(async ([object, vptFlag]) => {\n return [\n object,\n await eraseCanvasDrawable(object as FabricObject, vptFlag, path),\n ] as [fabric.FabricObject, fabric.Path];\n }),\n ])\n );\n }\n\n /**\n * @override handle events\n */\n _finalizeAndAddPath(): void {\n const points = this['_points'];\n\n if (points.length < 2) {\n this.eventEmitter.dispatchEvent(\n new CustomEvent('cancel', {\n cancelable: false,\n })\n );\n return;\n }\n\n const path = this.createPath(this.convertPointsToSVGPath(points));\n const targets = walk(this.canvas.getObjects(), path);\n\n this.eventEmitter.dispatchEvent(\n new CustomEvent('end', {\n detail: {\n path,\n targets,\n },\n cancelable: true,\n })\n ) && this.commit({ path, targets });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this.canvas.requestRenderAll();\n\n this._resetShadow();\n }\n\n dispose() {\n const { canvas } = this.effectContext;\n // prompt GC\n canvas.width = canvas.height = 0;\n // release ref?\n // delete this.effectContext\n }\n}\n"],"names":["walk","objects","path","flatMap","object","erasable","intersectsWithObject","Group","getObjects","assertClippingGroup","curr","clipPath","ClippingGroup","strokeWidth","strokeWidthFactor","fabric","Point","strokeVector","strokeUniform","divide","getObjectScaling","next","width","x","height","y","_curr$translateToOrig","translateToOriginPoint","originX","originY","util","sendObjectToPlane","undefined","createTranslateMatrix","add","commitErasing","sourceInObjectPlane","set","eraseObject","_x","_x2","_eraseObject","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee4","source","clone","wrap","_callee4$","_context4","prev","sent","calcTransformMatrix","abrupt","stop","eraseCanvasDrawable","_x3","_x4","_x5","_eraseCanvasDrawable","_callee5","vpt","d","_callee5$","_context5","multiplyTransformMatrixArray","setCanvasDimensions","el","ctx","_ref","retinaScaling","length","setAttribute","toString","scale","EraserBrush","_fabric$PencilBrush","_inherits","canvas","_this","_classCallCheck","_callSuper","_defineProperty","_assertThisInitialized","document","createElement","getContext","Error","getRetinaScaling","effectContext","eventEmitter","EventTarget","_createClass","key","value","on","type","cb","options","_this2","addEventListener","removeEventListener","drawEffect","draw","opacity","Color","color","getAlpha","inverted","_setBrushStyles","contextTop","_get","_getPrototypeOf","prototype","call","strokeStyle","needsFullRender","_render","getTopContext","erase","onMouseDown","pointer","context","_this3","dispatchEvent","CustomEvent","detail","cancelable","active","_disposer","_ref2","onMouseMove","onMouseUp","_this$_disposer","convertPointsToSVGPath","points","decimate","decimatePoints","createPath","pathData","globalCompositeOperation","stroke","_commit","_callee3","_ref3","targets","_callee3$","_context3","t0","Map","Promise","all","concat","_toConsumableArray","map","_ref4","_callee","_callee$","_context","t1","_x7","backgroundImage","backgroundVpt","viewportTransform","overlayImage","overlayVpt","filter","_ref5","_ref6","_slicedToArray","_ref8","_callee2","_ref7","_ref9","vptFlag","_callee2$","_context2","_x8","commit","_x6","_finalizeAndAddPath","clearContext","requestRenderAll","_resetShadow","dispose","PencilBrush"],"mappings":"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"}
1
+ {"version":3,"file":"EraserBrush.js","sources":["../../../src/EraserBrush.ts"],"sourcesContent":["import { erase } from '@erase2d/core';\nimport * as fabric from 'fabric';\nimport { FabricObject, Group, Path } from 'fabric';\nimport { ClippingGroup } from './ClippingGroup';\nimport { draw } from './ErasingEffect';\n\nexport type EventDetailMap = {\n start: fabric.TEvent<fabric.TPointerEvent>;\n move: fabric.TEvent<fabric.TPointerEvent>;\n end: {\n path: fabric.Path;\n targets: fabric.FabricObject[];\n };\n redraw: { type: 'start' | 'render' };\n cancel: never;\n};\n\nexport type ErasingEventType = keyof EventDetailMap;\n\nexport type ErasingEvent<T extends ErasingEventType> = CustomEvent<\n EventDetailMap[T]\n>;\n\nfunction walk(objects: FabricObject[], path: Path): FabricObject[] {\n return objects.flatMap((object) => {\n if (!object.erasable || !object.intersectsWithObject(path)) {\n return [];\n } else if (object instanceof Group && object.erasable === 'deep') {\n return walk(object.getObjects(), path);\n } else {\n return [object];\n }\n });\n}\n\nconst assertClippingGroup = (object: fabric.FabricObject) => {\n const curr = object.clipPath;\n\n if (curr instanceof ClippingGroup) {\n return curr;\n }\n\n const strokeWidth = object.strokeWidth;\n const strokeWidthFactor = new fabric.Point(strokeWidth, strokeWidth);\n const strokeVector = object.strokeUniform\n ? strokeWidthFactor.divide(object.getObjectScaling())\n : strokeWidthFactor;\n\n const next = new ClippingGroup([], {\n width: object.width + strokeVector.x,\n height: object.height + strokeVector.y,\n });\n\n if (curr) {\n const { x, y } = curr.translateToOriginPoint(\n new fabric.Point(),\n curr.originX,\n curr.originY\n );\n curr.originX = curr.originY = 'center';\n fabric.util.sendObjectToPlane(\n curr,\n undefined,\n fabric.util.createTranslateMatrix(x, y)\n );\n next.add(curr as FabricObject);\n }\n\n return (object.clipPath = next);\n};\n\nexport function commitErasing(\n object: fabric.FabricObject,\n sourceInObjectPlane: fabric.Path\n) {\n const clipPath = assertClippingGroup(object);\n clipPath.add(sourceInObjectPlane);\n clipPath.set('dirty', true);\n object.set('dirty', true);\n}\n\nexport async function eraseObject(\n object: fabric.FabricObject,\n source: fabric.Path\n) {\n const clone = await source.clone();\n fabric.util.sendObjectToPlane(clone, undefined, object.calcTransformMatrix());\n commitErasing(object, clone);\n return clone;\n}\n\nexport async function eraseCanvasDrawable(\n object: fabric.FabricObject,\n vpt: fabric.TMat2D | undefined,\n source: fabric.Path\n) {\n const clone = await source.clone();\n const d =\n vpt &&\n object.translateToOriginPoint(\n new fabric.Point(),\n object.originX,\n object.originY\n );\n fabric.util.sendObjectToPlane(\n clone,\n undefined,\n d\n ? fabric.util.multiplyTransformMatrixArray([\n [1, 0, 0, 1, d.x, d.y],\n // apply vpt from center of drawable\n vpt,\n [1, 0, 0, 1, -d.x, -d.y],\n object.calcTransformMatrix(),\n ])\n : object.calcTransformMatrix()\n );\n commitErasing(object, clone);\n return clone;\n}\n\nconst setCanvasDimensions = (\n el: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D,\n { width, height }: fabric.TSize,\n retinaScaling = 1\n) => {\n el.width = width;\n el.height = height;\n if (retinaScaling > 1) {\n el.setAttribute('width', (width * retinaScaling).toString());\n el.setAttribute('height', (height * retinaScaling).toString());\n ctx.scale(retinaScaling, retinaScaling);\n }\n};\n\n/**\n * Supports **selective** erasing: only erasable objects are affected by the eraser brush.\n *\n * Supports **{@link inverted}** erasing: the brush can \"undo\" erasing.\n *\n * Supports **alpha** erasing: setting the alpha channel of the `color` property controls the eraser intensity.\n *\n * In order to support selective erasing, the brush clips the entire canvas and\n * masks all non-erasable objects over the erased path, see {@link draw}.\n *\n * If **{@link inverted}** draws all objects, erasable objects without their eraser, over the erased path.\n * This achieves the desired effect of seeming to erase or undo erasing on erasable objects only.\n *\n * After erasing is done the `end` event {@link ErasingEndEvent} is fired, after which erasing will be committed to the tree.\n * @example\n * canvas = new Canvas();\n * const eraser = new EraserBrush(canvas);\n * canvas.freeDrawingBrush = eraser;\n * canvas.isDrawingMode = true;\n * eraser.on('start', (e) => {\n * console.log('started erasing');\n * // prevent erasing\n * e.preventDefault();\n * });\n * eraser.on('end', (e) => {\n * const { targets: erasedTargets, path } = e.detail;\n * e.preventDefault(); // prevent erasing being committed to the tree\n * eraser.commit({ targets: erasedTargets, path }); // commit manually since default was prevented\n * });\n *\n * In case of performance issues trace {@link drawEffect} calls and consider preventing it from executing\n * @example\n * const eraser = new EraserBrush(canvas);\n * eraser.on('redraw', (e) => {\n * // prevent effect redraw on pointer down (e.g. useful if canvas didn't change)\n * e.detail.type === 'start' && e.preventDefault());\n * // prevent effect redraw after canvas has rendered (effect will become stale)\n * e.detail.type === 'render' && e.preventDefault());\n * });\n */\nexport class EraserBrush extends fabric.PencilBrush {\n /**\n * When set to `true` the brush will create a visual effect of undoing erasing\n */\n inverted = false;\n\n effectContext: CanvasRenderingContext2D;\n\n private eventEmitter: EventTarget;\n private active = false;\n private _disposer?: VoidFunction;\n\n constructor(canvas: fabric.Canvas) {\n super(canvas);\n const el = document.createElement('canvas');\n const ctx = el.getContext('2d');\n if (!ctx) {\n throw new Error('Failed to get context');\n }\n setCanvasDimensions(el, ctx, canvas, this.canvas.getRetinaScaling());\n this.effectContext = ctx;\n this.eventEmitter = new EventTarget();\n }\n\n /**\n * @returns disposer make sure to call it to avoid memory leaks\n */\n on<T extends ErasingEventType>(\n type: T,\n cb: (evt: ErasingEvent<T>) => any,\n options?: boolean | AddEventListenerOptions\n ) {\n this.eventEmitter.addEventListener(type, cb as EventListener, options);\n return () =>\n this.eventEmitter.removeEventListener(type, cb as EventListener, options);\n }\n\n drawEffect() {\n draw(\n this.effectContext,\n {\n opacity: new fabric.Color(this.color).getAlpha(),\n inverted: this.inverted,\n },\n { canvas: this.canvas }\n );\n }\n\n /**\n * @override\n */\n _setBrushStyles(ctx: CanvasRenderingContext2D = this.canvas.contextTop) {\n super._setBrushStyles(ctx);\n ctx.strokeStyle = 'black';\n }\n\n /**\n * @override strictly speaking the eraser needs a full render only if it has opacity set.\n * However since {@link PencilBrush} is designed for subclassing that is what we have to work with.\n */\n needsFullRender(): boolean {\n return true;\n }\n\n /**\n * @override erase\n */\n _render(ctx: CanvasRenderingContext2D = this.canvas.getTopContext()): void {\n super._render(ctx);\n erase(this.canvas.getContext(), ctx, this.effectContext);\n }\n\n /**\n * @override {@link drawEffect}\n */\n onMouseDown(\n pointer: fabric.Point,\n context: fabric.TEvent<fabric.TPointerEvent>\n ): void {\n if (\n !this.eventEmitter.dispatchEvent(\n new CustomEvent('start', { detail: context, cancelable: true })\n )\n ) {\n return;\n }\n\n this.active = true;\n\n this.eventEmitter.dispatchEvent(\n new CustomEvent('redraw', {\n detail: { type: 'start' },\n cancelable: true,\n })\n ) && this.drawEffect();\n\n // consider a different approach\n this._disposer = this.canvas.on('after:render', ({ ctx }) => {\n if (ctx !== this.canvas.getContext()) {\n return;\n }\n this.eventEmitter.dispatchEvent(\n new CustomEvent('redraw', {\n detail: { type: 'render' },\n cancelable: true,\n })\n ) && this.drawEffect();\n this._render();\n });\n\n super.onMouseDown(pointer, context);\n }\n\n /**\n * @override run if active\n */\n onMouseMove(\n pointer: fabric.Point,\n context: fabric.TEvent<fabric.TPointerEvent>\n ): void {\n this.active &&\n this.eventEmitter.dispatchEvent(\n new CustomEvent('move', { detail: context, cancelable: true })\n ) &&\n super.onMouseMove(pointer, context);\n }\n\n /**\n * @override run if active, dispose of {@link drawEffect} listener\n */\n onMouseUp(context: fabric.TEvent<fabric.TPointerEvent>): boolean {\n this.active && super.onMouseUp(context);\n this.active = false;\n this._disposer?.();\n delete this._disposer;\n return false;\n }\n\n /**\n * @override {@link fabric.PencilBrush} logic\n */\n convertPointsToSVGPath(points: fabric.Point[]): fabric.util.TSimplePathData {\n return super.convertPointsToSVGPath(\n this.decimate ? this.decimatePoints(points, this.decimate) : points\n );\n }\n\n /**\n * @override\n */\n createPath(pathData: fabric.util.TSimplePathData) {\n const path = super.createPath(pathData);\n path.set(\n this.inverted\n ? {\n globalCompositeOperation: 'source-over',\n stroke: 'white',\n }\n : {\n globalCompositeOperation: 'destination-out',\n stroke: 'black',\n opacity: new fabric.Color(this.color).getAlpha(),\n }\n );\n return path;\n }\n\n async commit({\n path,\n targets,\n }: EventDetailMap['end']): Promise<Map<fabric.FabricObject, fabric.Path>> {\n return new Map(\n await Promise.all([\n ...targets.map(async (object) => {\n return [object, await eraseObject(object, path)] as const;\n }),\n ...(\n [\n [\n this.canvas.backgroundImage,\n !this.canvas.backgroundVpt\n ? this.canvas.viewportTransform\n : undefined,\n ],\n [\n this.canvas.overlayImage,\n !this.canvas.overlayVpt\n ? this.canvas.viewportTransform\n : undefined,\n ],\n ] as const\n )\n .filter(([object]) => !!object?.erasable)\n .map(async ([object, vptFlag]) => {\n return [\n object,\n await eraseCanvasDrawable(object as FabricObject, vptFlag, path),\n ] as [fabric.FabricObject, fabric.Path];\n }),\n ])\n );\n }\n\n /**\n * @override handle events\n */\n _finalizeAndAddPath(): void {\n const points = this['_points'];\n\n if (points.length < 2) {\n this.eventEmitter.dispatchEvent(\n new CustomEvent('cancel', {\n cancelable: false,\n })\n );\n return;\n }\n\n const path = this.createPath(this.convertPointsToSVGPath(points));\n const targets = walk(this.canvas.getObjects(), path);\n\n this.eventEmitter.dispatchEvent(\n new CustomEvent('end', {\n detail: {\n path,\n targets,\n },\n cancelable: true,\n })\n ) && this.commit({ path, targets });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this.canvas.requestRenderAll();\n\n this._resetShadow();\n }\n\n dispose() {\n const { canvas } = this.effectContext;\n // prompt GC\n canvas.width = canvas.height = 0;\n // release ref?\n // delete this.effectContext\n }\n}\n"],"names":["walk","objects","path","flatMap","object","erasable","intersectsWithObject","Group","getObjects","assertClippingGroup","curr","clipPath","ClippingGroup","strokeWidth","strokeWidthFactor","fabric","Point","strokeVector","strokeUniform","divide","getObjectScaling","next","width","x","height","y","_curr$translateToOrig","translateToOriginPoint","originX","originY","util","sendObjectToPlane","undefined","createTranslateMatrix","add","commitErasing","sourceInObjectPlane","set","eraseObject","_x","_x2","_eraseObject","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee4","source","clone","wrap","_callee4$","_context4","prev","sent","calcTransformMatrix","abrupt","stop","eraseCanvasDrawable","_x3","_x4","_x5","_eraseCanvasDrawable","_callee5","vpt","d","_callee5$","_context5","multiplyTransformMatrixArray","setCanvasDimensions","el","ctx","_ref","retinaScaling","length","setAttribute","toString","scale","EraserBrush","_fabric$PencilBrush","_inherits","canvas","_this","_classCallCheck","_callSuper","_defineProperty","_assertThisInitialized","document","createElement","getContext","Error","getRetinaScaling","effectContext","eventEmitter","EventTarget","_createClass","key","value","on","type","cb","options","_this2","addEventListener","removeEventListener","drawEffect","draw","opacity","Color","color","getAlpha","inverted","_setBrushStyles","contextTop","_get","_getPrototypeOf","prototype","call","strokeStyle","needsFullRender","_render","getTopContext","erase","onMouseDown","pointer","context","_this3","dispatchEvent","CustomEvent","detail","cancelable","active","_disposer","_ref2","onMouseMove","onMouseUp","_this$_disposer","convertPointsToSVGPath","points","decimate","decimatePoints","createPath","pathData","globalCompositeOperation","stroke","_commit","_callee3","_ref3","targets","_callee3$","_context3","t0","Map","Promise","all","concat","_toConsumableArray","map","_ref4","_callee","_callee$","_context","t1","_x7","backgroundImage","backgroundVpt","viewportTransform","overlayImage","overlayVpt","filter","_ref5","_ref6","_slicedToArray","_ref8","_callee2","_ref7","_ref9","vptFlag","_callee2$","_context2","_x8","commit","_x6","_finalizeAndAddPath","clearContext","requestRenderAll","_resetShadow","dispose","PencilBrush"],"mappings":";;;;;;;AAuBA,SAASA,IAAIA,CAACC,OAAuB,EAAEC,IAAU,EAAkB;AACjE,EAAA,OAAOD,OAAO,CAACE,OAAO,CAAC,UAACC,MAAM,EAAK;AACjC,IAAA,IAAI,CAACA,MAAM,CAACC,QAAQ,IAAI,CAACD,MAAM,CAACE,oBAAoB,CAACJ,IAAI,CAAC,EAAE;AAC1D,MAAA,OAAO,EAAE,CAAA;KACV,MAAM,IAAIE,MAAM,YAAYG,KAAK,IAAIH,MAAM,CAACC,QAAQ,KAAK,MAAM,EAAE;MAChE,OAAOL,IAAI,CAACI,MAAM,CAACI,UAAU,EAAE,EAAEN,IAAI,CAAC,CAAA;AACxC,KAAC,MAAM;MACL,OAAO,CAACE,MAAM,CAAC,CAAA;AACjB,KAAA;AACF,GAAC,CAAC,CAAA;AACJ,CAAA;AAEA,IAAMK,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIL,MAA2B,EAAK;AAC3D,EAAA,IAAMM,IAAI,GAAGN,MAAM,CAACO,QAAQ,CAAA;EAE5B,IAAID,IAAI,YAAYE,aAAa,EAAE;AACjC,IAAA,OAAOF,IAAI,CAAA;AACb,GAAA;AAEA,EAAA,IAAMG,WAAW,GAAGT,MAAM,CAACS,WAAW,CAAA;EACtC,IAAMC,iBAAiB,GAAG,IAAIC,MAAM,CAACC,KAAK,CAACH,WAAW,EAAEA,WAAW,CAAC,CAAA;AACpE,EAAA,IAAMI,YAAY,GAAGb,MAAM,CAACc,aAAa,GACrCJ,iBAAiB,CAACK,MAAM,CAACf,MAAM,CAACgB,gBAAgB,EAAE,CAAC,GACnDN,iBAAiB,CAAA;AAErB,EAAA,IAAMO,IAAI,GAAG,IAAIT,aAAa,CAAC,EAAE,EAAE;AACjCU,IAAAA,KAAK,EAAElB,MAAM,CAACkB,KAAK,GAAGL,YAAY,CAACM,CAAC;AACpCC,IAAAA,MAAM,EAAEpB,MAAM,CAACoB,MAAM,GAAGP,YAAY,CAACQ,CAAAA;AACvC,GAAC,CAAC,CAAA;AAEF,EAAA,IAAIf,IAAI,EAAE;IACR,IAAAgB,qBAAA,GAAiBhB,IAAI,CAACiB,sBAAsB,CAC1C,IAAIZ,MAAM,CAACC,KAAK,EAAE,EAClBN,IAAI,CAACkB,OAAO,EACZlB,IAAI,CAACmB,OACP,CAAC;MAJON,CAAC,GAAAG,qBAAA,CAADH,CAAC;MAAEE,CAAC,GAAAC,qBAAA,CAADD,CAAC,CAAA;AAKZf,IAAAA,IAAI,CAACkB,OAAO,GAAGlB,IAAI,CAACmB,OAAO,GAAG,QAAQ,CAAA;AACtCd,IAAAA,MAAM,CAACe,IAAI,CAACC,iBAAiB,CAC3BrB,IAAI,EACJsB,SAAS,EACTjB,MAAM,CAACe,IAAI,CAACG,qBAAqB,CAACV,CAAC,EAAEE,CAAC,CACxC,CAAC,CAAA;AACDJ,IAAAA,IAAI,CAACa,GAAG,CAACxB,IAAoB,CAAC,CAAA;AAChC,GAAA;AAEA,EAAA,OAAQN,MAAM,CAACO,QAAQ,GAAGU,IAAI,CAAA;AAChC,CAAC,CAAA;AAEM,SAASc,aAAaA,CAC3B/B,MAA2B,EAC3BgC,mBAAgC,EAChC;AACA,EAAA,IAAMzB,QAAQ,GAAGF,mBAAmB,CAACL,MAAM,CAAC,CAAA;AAC5CO,EAAAA,QAAQ,CAACuB,GAAG,CAACE,mBAAmB,CAAC,CAAA;AACjCzB,EAAAA,QAAQ,CAAC0B,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AAC3BjC,EAAAA,MAAM,CAACiC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AAC3B,CAAA;AAEA,SAAsBC,WAAWA,CAAAC,EAAA,EAAAC,GAAA,EAAA;AAAA,EAAA,OAAAC,YAAA,CAAAC,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,CAAA;AAQhC,SAAAF,YAAA,GAAA;EAAAA,YAAA,GAAAG,iBAAA,eAAAC,mBAAA,EAAA,CAAAC,IAAA,CARM,SAAAC,QAAAA,CACL3C,MAA2B,EAC3B4C,MAAmB,EAAA;AAAA,IAAA,IAAAC,KAAA,CAAA;AAAA,IAAA,OAAAJ,mBAAA,EAAA,CAAAK,IAAA,CAAA,SAAAC,UAAAC,SAAA,EAAA;AAAA,MAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAC,IAAA,GAAAD,SAAA,CAAA/B,IAAA;AAAA,QAAA,KAAA,CAAA;AAAA+B,UAAAA,SAAA,CAAA/B,IAAA,GAAA,CAAA,CAAA;AAAA,UAAA,OAEC2B,MAAM,CAACC,KAAK,EAAE,CAAA;AAAA,QAAA,KAAA,CAAA;UAA5BA,KAAK,GAAAG,SAAA,CAAAE,IAAA,CAAA;AACXvC,UAAAA,MAAM,CAACe,IAAI,CAACC,iBAAiB,CAACkB,KAAK,EAAEjB,SAAS,EAAE5B,MAAM,CAACmD,mBAAmB,EAAE,CAAC,CAAA;AAC7EpB,UAAAA,aAAa,CAAC/B,MAAM,EAAE6C,KAAK,CAAC,CAAA;AAAC,UAAA,OAAAG,SAAA,CAAAI,MAAA,CAAA,QAAA,EACtBP,KAAK,CAAA,CAAA;AAAA,QAAA,KAAA,CAAA,CAAA;AAAA,QAAA,KAAA,KAAA;UAAA,OAAAG,SAAA,CAAAK,IAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAAV,QAAA,CAAA,CAAA;GACb,CAAA,CAAA,CAAA;AAAA,EAAA,OAAAN,YAAA,CAAAC,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,CAAA;AAED,SAAsBe,mBAAmBA,CAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA,EAAA;AAAA,EAAA,OAAAC,oBAAA,CAAApB,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,CAAA;AA4BxC,SAAAmB,oBAAA,GAAA;AAAAA,EAAAA,oBAAA,GAAAlB,iBAAA,eAAAC,mBAAA,EAAAC,CAAAA,IAAA,CA5BM,SAAAiB,QACL3D,CAAAA,MAA2B,EAC3B4D,GAA8B,EAC9BhB,MAAmB,EAAA;IAAA,IAAAC,KAAA,EAAAgB,CAAA,CAAA;AAAA,IAAA,OAAApB,mBAAA,EAAA,CAAAK,IAAA,CAAA,SAAAgB,UAAAC,SAAA,EAAA;AAAA,MAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAd,IAAA,GAAAc,SAAA,CAAA9C,IAAA;AAAA,QAAA,KAAA,CAAA;AAAA8C,UAAAA,SAAA,CAAA9C,IAAA,GAAA,CAAA,CAAA;AAAA,UAAA,OAEC2B,MAAM,CAACC,KAAK,EAAE,CAAA;AAAA,QAAA,KAAA,CAAA;UAA5BA,KAAK,GAAAkB,SAAA,CAAAb,IAAA,CAAA;UACLW,CAAC,GACLD,GAAG,IACH5D,MAAM,CAACuB,sBAAsB,CAC3B,IAAIZ,MAAM,CAACC,KAAK,EAAE,EAClBZ,MAAM,CAACwB,OAAO,EACdxB,MAAM,CAACyB,OACT,CAAC,CAAA;AACHd,UAAAA,MAAM,CAACe,IAAI,CAACC,iBAAiB,CAC3BkB,KAAK,EACLjB,SAAS,EACTiC,CAAC,GACGlD,MAAM,CAACe,IAAI,CAACsC,4BAA4B,CAAC,CACvC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAEH,CAAC,CAAC1C,CAAC,EAAE0C,CAAC,CAACxC,CAAC,CAAC;AACtB;AACAuC,UAAAA,GAAG,EACH,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAACC,CAAC,CAAC1C,CAAC,EAAE,CAAC0C,CAAC,CAACxC,CAAC,CAAC,EACxBrB,MAAM,CAACmD,mBAAmB,EAAE,CAC7B,CAAC,GACFnD,MAAM,CAACmD,mBAAmB,EAChC,CAAC,CAAA;AACDpB,UAAAA,aAAa,CAAC/B,MAAM,EAAE6C,KAAK,CAAC,CAAA;AAAC,UAAA,OAAAkB,SAAA,CAAAX,MAAA,CAAA,QAAA,EACtBP,KAAK,CAAA,CAAA;AAAA,QAAA,KAAA,CAAA,CAAA;AAAA,QAAA,KAAA,KAAA;UAAA,OAAAkB,SAAA,CAAAV,IAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAAM,QAAA,CAAA,CAAA;GACb,CAAA,CAAA,CAAA;AAAA,EAAA,OAAAD,oBAAA,CAAApB,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,CAAA;AAED,IAAM0B,mBAAmB,GAAG,SAAtBA,mBAAmBA,CACvBC,EAAqB,EACrBC,GAA6B,EAAAC,IAAA,EAG1B;AAAA,EAAA,IAFDlD,KAAK,GAAAkD,IAAA,CAALlD,KAAK;IAAEE,MAAM,GAAAgD,IAAA,CAANhD,MAAM,CAAA;AAAA,EAAA,IACfiD,aAAa,GAAA9B,SAAA,CAAA+B,MAAA,GAAA,CAAA,IAAA/B,SAAA,CAAA,CAAA,CAAA,KAAAX,SAAA,GAAAW,SAAA,CAAA,CAAA,CAAA,GAAG,CAAC,CAAA;EAEjB2B,EAAE,CAAChD,KAAK,GAAGA,KAAK,CAAA;EAChBgD,EAAE,CAAC9C,MAAM,GAAGA,MAAM,CAAA;EAClB,IAAIiD,aAAa,GAAG,CAAC,EAAE;AACrBH,IAAAA,EAAE,CAACK,YAAY,CAAC,OAAO,EAAE,CAACrD,KAAK,GAAGmD,aAAa,EAAEG,QAAQ,EAAE,CAAC,CAAA;AAC5DN,IAAAA,EAAE,CAACK,YAAY,CAAC,QAAQ,EAAE,CAACnD,MAAM,GAAGiD,aAAa,EAAEG,QAAQ,EAAE,CAAC,CAAA;AAC9DL,IAAAA,GAAG,CAACM,KAAK,CAACJ,aAAa,EAAEA,aAAa,CAAC,CAAA;AACzC,GAAA;AACF,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACaK,IAAAA,WAAW,0BAAAC,mBAAA,EAAA;EAAAC,SAAA,CAAAF,WAAA,EAAAC,mBAAA,CAAA,CAAA;EAYtB,SAAAD,WAAAA,CAAYG,MAAqB,EAAE;AAAA,IAAA,IAAAC,KAAA,CAAA;AAAAC,IAAAA,eAAA,OAAAL,WAAA,CAAA,CAAA;AACjCI,IAAAA,KAAA,GAAAE,UAAA,CAAAN,IAAAA,EAAAA,WAAA,GAAMG,MAAM,CAAA,CAAA,CAAA;AAZd;AACF;AACA;AAFEI,IAAAA,eAAA,CAAAC,sBAAA,CAAAJ,KAAA,eAGW,KAAK,CAAA,CAAA;AAAAG,IAAAA,eAAA,CAAAC,sBAAA,CAAAJ,KAAA,aAKC,KAAK,CAAA,CAAA;AAKpB,IAAA,IAAMZ,EAAE,GAAGiB,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC,CAAA;AAC3C,IAAA,IAAMjB,GAAG,GAAGD,EAAE,CAACmB,UAAU,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAI,CAAClB,GAAG,EAAE;AACR,MAAA,MAAM,IAAImB,KAAK,CAAC,uBAAuB,CAAC,CAAA;AAC1C,KAAA;AACArB,IAAAA,mBAAmB,CAACC,EAAE,EAAEC,GAAG,EAAEU,MAAM,EAAEC,KAAA,CAAKD,MAAM,CAACU,gBAAgB,EAAE,CAAC,CAAA;IACpET,KAAA,CAAKU,aAAa,GAAGrB,GAAG,CAAA;AACxBW,IAAAA,KAAA,CAAKW,YAAY,GAAG,IAAIC,WAAW,EAAE,CAAA;AAAC,IAAA,OAAAZ,KAAA,CAAA;AACxC,GAAA;;AAEA;AACF;AACA;AAFEa,EAAAA,YAAA,CAAAjB,WAAA,EAAA,CAAA;IAAAkB,GAAA,EAAA,IAAA;IAAAC,KAAA,EAGA,SAAAC,EACEC,CAAAA,IAAO,EACPC,EAAiC,EACjCC,OAA2C,EAC3C;AAAA,MAAA,IAAAC,MAAA,GAAA,IAAA,CAAA;MACA,IAAI,CAACT,YAAY,CAACU,gBAAgB,CAACJ,IAAI,EAAEC,EAAE,EAAmBC,OAAO,CAAC,CAAA;MACtE,OAAO,YAAA;QAAA,OACLC,MAAI,CAACT,YAAY,CAACW,mBAAmB,CAACL,IAAI,EAAEC,EAAE,EAAmBC,OAAO,CAAC,CAAA;AAAA,OAAA,CAAA;AAC7E,KAAA;AAAC,GAAA,EAAA;IAAAL,GAAA,EAAA,YAAA;IAAAC,KAAA,EAED,SAAAQ,UAAAA,GAAa;AACXC,MAAAA,IAAI,CACF,IAAI,CAACd,aAAa,EAClB;AACEe,QAAAA,OAAO,EAAE,IAAI5F,MAAM,CAAC6F,KAAK,CAAC,IAAI,CAACC,KAAK,CAAC,CAACC,QAAQ,EAAE;QAChDC,QAAQ,EAAE,IAAI,CAACA,QAAAA;AACjB,OAAC,EACD;QAAE9B,MAAM,EAAE,IAAI,CAACA,MAAAA;AAAO,OACxB,CAAC,CAAA;AACH,KAAA;;AAEA;AACF;AACA;AAFE,GAAA,EAAA;IAAAe,GAAA,EAAA,iBAAA;IAAAC,KAAA,EAGA,SAAAe,eAAAA,GAAwE;AAAA,MAAA,IAAxDzC,GAA6B,GAAA5B,SAAA,CAAA+B,MAAA,QAAA/B,SAAA,CAAA,CAAA,CAAA,KAAAX,SAAA,GAAAW,SAAA,CAAG,CAAA,CAAA,GAAA,IAAI,CAACsC,MAAM,CAACgC,UAAU,CAAA;MACpEC,IAAA,CAAAC,eAAA,CAAArC,WAAA,CAAAsC,SAAA,CAAA,EAAA,iBAAA,EAAA,IAAA,CAAA,CAAAC,IAAA,CAAA,IAAA,EAAsB9C,GAAG,CAAA,CAAA;MACzBA,GAAG,CAAC+C,WAAW,GAAG,OAAO,CAAA;AAC3B,KAAA;;AAEA;AACF;AACA;AACA;AAHE,GAAA,EAAA;IAAAtB,GAAA,EAAA,iBAAA;IAAAC,KAAA,EAIA,SAAAsB,eAAAA,GAA2B;AACzB,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;;AAEA;AACF;AACA;AAFE,GAAA,EAAA;IAAAvB,GAAA,EAAA,SAAA;IAAAC,KAAA,EAGA,SAAAuB,OAAAA,GAA2E;AAAA,MAAA,IAAnEjD,GAA6B,GAAA5B,SAAA,CAAA+B,MAAA,GAAA,CAAA,IAAA/B,SAAA,CAAAX,CAAAA,CAAAA,KAAAA,SAAA,GAAAW,SAAA,MAAG,IAAI,CAACsC,MAAM,CAACwC,aAAa,EAAE,CAAA;MACjEP,IAAA,CAAAC,eAAA,CAAArC,WAAA,CAAAsC,SAAA,CAAA,EAAA,SAAA,EAAA,IAAA,CAAA,CAAAC,IAAA,CAAA,IAAA,EAAc9C,GAAG,CAAA,CAAA;AACjBmD,MAAAA,KAAK,CAAC,IAAI,CAACzC,MAAM,CAACQ,UAAU,EAAE,EAAElB,GAAG,EAAE,IAAI,CAACqB,aAAa,CAAC,CAAA;AAC1D,KAAA;;AAEA;AACF;AACA;AAFE,GAAA,EAAA;IAAAI,GAAA,EAAA,aAAA;AAAAC,IAAAA,KAAA,EAGA,SAAA0B,WAAAA,CACEC,OAAqB,EACrBC,OAA4C,EACtC;AAAA,MAAA,IAAAC,MAAA,GAAA,IAAA,CAAA;MACN,IACE,CAAC,IAAI,CAACjC,YAAY,CAACkC,aAAa,CAC9B,IAAIC,WAAW,CAAC,OAAO,EAAE;AAAEC,QAAAA,MAAM,EAAEJ,OAAO;AAAEK,QAAAA,UAAU,EAAE,IAAA;OAAM,CAChE,CAAC,EACD;AACA,QAAA,OAAA;AACF,OAAA;MAEA,IAAI,CAACC,MAAM,GAAG,IAAI,CAAA;MAElB,IAAI,CAACtC,YAAY,CAACkC,aAAa,CAC7B,IAAIC,WAAW,CAAC,QAAQ,EAAE;AACxBC,QAAAA,MAAM,EAAE;AAAE9B,UAAAA,IAAI,EAAE,OAAA;SAAS;AACzB+B,QAAAA,UAAU,EAAE,IAAA;AACd,OAAC,CACH,CAAC,IAAI,IAAI,CAACzB,UAAU,EAAE,CAAA;;AAEtB;AACA,MAAA,IAAI,CAAC2B,SAAS,GAAG,IAAI,CAACnD,MAAM,CAACiB,EAAE,CAAC,cAAc,EAAE,UAAAmC,KAAA,EAAa;AAAA,QAAA,IAAV9D,GAAG,GAAA8D,KAAA,CAAH9D,GAAG,CAAA;QACpD,IAAIA,GAAG,KAAKuD,MAAI,CAAC7C,MAAM,CAACQ,UAAU,EAAE,EAAE;AACpC,UAAA,OAAA;AACF,SAAA;QACAqC,MAAI,CAACjC,YAAY,CAACkC,aAAa,CAC7B,IAAIC,WAAW,CAAC,QAAQ,EAAE;AACxBC,UAAAA,MAAM,EAAE;AAAE9B,YAAAA,IAAI,EAAE,QAAA;WAAU;AAC1B+B,UAAAA,UAAU,EAAE,IAAA;AACd,SAAC,CACH,CAAC,IAAIJ,MAAI,CAACrB,UAAU,EAAE,CAAA;QACtBqB,MAAI,CAACN,OAAO,EAAE,CAAA;AAChB,OAAC,CAAC,CAAA;MAEFN,IAAA,CAAAC,eAAA,CAAArC,WAAA,CAAAsC,SAAA,CAAA,EAAA,aAAA,EAAA,IAAA,CAAA,CAAAC,IAAA,CAAA,IAAA,EAAkBO,OAAO,EAAEC,OAAO,CAAA,CAAA;AACpC,KAAA;;AAEA;AACF;AACA;AAFE,GAAA,EAAA;IAAA7B,GAAA,EAAA,aAAA;AAAAC,IAAAA,KAAA,EAGA,SAAAqC,WAAAA,CACEV,OAAqB,EACrBC,OAA4C,EACtC;AACN,MAAA,IAAI,CAACM,MAAM,IACT,IAAI,CAACtC,YAAY,CAACkC,aAAa,CAC7B,IAAIC,WAAW,CAAC,MAAM,EAAE;AAAEC,QAAAA,MAAM,EAAEJ,OAAO;AAAEK,QAAAA,UAAU,EAAE,IAAA;AAAK,OAAC,CAC/D,CAAC,IAAAhB,IAAA,CAAAC,eAAA,CAAArC,WAAA,CAAAsC,SAAA,wBAAAC,IAAA,CAAA,IAAA,EACiBO,OAAO,EAAEC,OAAO,CAAC,CAAA;AACvC,KAAA;;AAEA;AACF;AACA;AAFE,GAAA,EAAA;IAAA7B,GAAA,EAAA,WAAA;AAAAC,IAAAA,KAAA,EAGA,SAAAsC,SAAUV,CAAAA,OAA4C,EAAW;AAAA,MAAA,IAAAW,eAAA,CAAA;AAC/D,MAAA,IAAI,CAACL,MAAM,IAAAjB,IAAA,CAAAC,eAAA,CAAArC,WAAA,CAAAsC,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,CAAA,CAAAC,IAAA,CAAA,IAAA,EAAoBQ,OAAO,CAAC,CAAA;MACvC,IAAI,CAACM,MAAM,GAAG,KAAK,CAAA;MACnB,CAAAK,eAAA,GAAI,IAAA,CAACJ,SAAS,MAAA,IAAA,IAAAI,eAAA,KAAA,KAAA,CAAA,IAAdA,eAAA,CAAAnB,IAAA,CAAA,IAAiB,CAAC,CAAA;MAClB,OAAO,IAAI,CAACe,SAAS,CAAA;AACrB,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;;AAEA;AACF;AACA;AAFE,GAAA,EAAA;IAAApC,GAAA,EAAA,wBAAA;AAAAC,IAAAA,KAAA,EAGA,SAAAwC,sBAAuBC,CAAAA,MAAsB,EAA+B;MAC1E,OAAAxB,IAAA,CAAAC,eAAA,CAAArC,WAAA,CAAAsC,SAAA,CAAA,EAAA,wBAAA,EAAA,IAAA,CAAA,CAAAC,IAAA,CAAA,IAAA,EACE,IAAI,CAACsB,QAAQ,GAAG,IAAI,CAACC,cAAc,CAACF,MAAM,EAAE,IAAI,CAACC,QAAQ,CAAC,GAAGD,MAAM,CAAA,CAAA;AAEvE,KAAA;;AAEA;AACF;AACA;AAFE,GAAA,EAAA;IAAA1C,GAAA,EAAA,YAAA;AAAAC,IAAAA,KAAA,EAGA,SAAA4C,UAAWC,CAAAA,QAAqC,EAAE;AAChD,MAAA,IAAM5I,IAAI,GAAAgH,IAAA,CAAAC,eAAA,CAAArC,WAAA,CAAAsC,SAAA,CAAA,EAAA,YAAA,EAAA,IAAA,CAAA,CAAAC,IAAA,CAAA,IAAA,EAAoByB,QAAQ,CAAC,CAAA;AACvC5I,MAAAA,IAAI,CAACmC,GAAG,CACN,IAAI,CAAC0E,QAAQ,GACT;AACEgC,QAAAA,wBAAwB,EAAE,aAAa;AACvCC,QAAAA,MAAM,EAAE,OAAA;AACV,OAAC,GACD;AACED,QAAAA,wBAAwB,EAAE,iBAAiB;AAC3CC,QAAAA,MAAM,EAAE,OAAO;AACfrC,QAAAA,OAAO,EAAE,IAAI5F,MAAM,CAAC6F,KAAK,CAAC,IAAI,CAACC,KAAK,CAAC,CAACC,QAAQ,EAAC;AACjD,OACN,CAAC,CAAA;AACD,MAAA,OAAO5G,IAAI,CAAA;AACb,KAAA;AAAC,GAAA,EAAA;IAAA8F,GAAA,EAAA,QAAA;IAAAC,KAAA,EAAA,YAAA;MAAA,IAAAgD,OAAA,GAAArG,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAED,SAAAoG,QAAAA,CAAAC,KAAA,EAAA;QAAA,IAAAjJ,IAAA,EAAAkJ,OAAA,CAAA;AAAA,QAAA,OAAAvG,mBAAA,EAAA,CAAAK,IAAA,CAAA,SAAAmG,UAAAC,SAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAjG,IAAA,GAAAiG,SAAA,CAAAjI,IAAA;AAAA,YAAA,KAAA,CAAA;cACEnB,IAAI,GAAAiJ,KAAA,CAAJjJ,IAAI,EACJkJ,OAAO,GAAAD,KAAA,CAAPC,OAAO,CAAA;cAAAE,SAAA,CAAAC,EAAA,GAEIC,GAAG,CAAA;AAAAF,cAAAA,SAAA,CAAAjI,IAAA,GAAA,CAAA,CAAA;cAAA,OACNoI,OAAO,CAACC,GAAG,CAAAC,EAAAA,CAAAA,MAAA,CAAAC,kBAAA,CACZR,OAAO,CAACS,GAAG,eAAA,YAAA;gBAAA,IAAAC,KAAA,GAAAlH,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAC,SAAAiH,OAAAA,CAAO3J,MAAM,EAAA;AAAA,kBAAA,OAAAyC,mBAAA,EAAA,CAAAK,IAAA,CAAA,SAAA8G,SAAAC,QAAA,EAAA;AAAA,oBAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAA5G,IAAA,GAAA4G,QAAA,CAAA5I,IAAA;AAAA,sBAAA,KAAA,CAAA;wBAAA4I,QAAA,CAAAV,EAAA,GAClBnJ,MAAM,CAAA;AAAA6J,wBAAAA,QAAA,CAAA5I,IAAA,GAAA,CAAA,CAAA;AAAA,wBAAA,OAAQiB,WAAW,CAAClC,MAAM,EAAEF,IAAI,CAAC,CAAA;AAAA,sBAAA,KAAA,CAAA;AAAA+J,wBAAAA,QAAA,CAAAC,EAAA,GAAAD,QAAA,CAAA3G,IAAA,CAAA;wBAAA,OAAA2G,QAAA,CAAAzG,MAAA,CAAAyG,QAAAA,EAAAA,CAAAA,QAAA,CAAAV,EAAA,EAAAU,QAAA,CAAAC,EAAA,CAAA,CAAA,CAAA;AAAA,sBAAA,KAAA,CAAA,CAAA;AAAA,sBAAA,KAAA,KAAA;wBAAA,OAAAD,QAAA,CAAAxG,IAAA,EAAA,CAAA;AAAA,qBAAA;AAAA,mBAAA,EAAAsG,OAAA,CAAA,CAAA;iBAChD,CAAA,CAAA,CAAA;AAAA,gBAAA,OAAA,UAAAI,GAAA,EAAA;AAAA,kBAAA,OAAAL,KAAA,CAAApH,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,iBAAA,CAAA;eAAC,EAAA,CAAA,CAAA,EAAAiH,kBAAA,CAEA,CACE,CACE,IAAI,CAAC3E,MAAM,CAACmF,eAAe,EAC3B,CAAC,IAAI,CAACnF,MAAM,CAACoF,aAAa,GACtB,IAAI,CAACpF,MAAM,CAACqF,iBAAiB,GAC7BtI,SAAS,CACd,EACD,CACE,IAAI,CAACiD,MAAM,CAACsF,YAAY,EACxB,CAAC,IAAI,CAACtF,MAAM,CAACuF,UAAU,GACnB,IAAI,CAACvF,MAAM,CAACqF,iBAAiB,GAC7BtI,SAAS,CACd,CACF,CAEAyI,MAAM,CAAC,UAAAC,KAAA,EAAA;AAAA,gBAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,KAAA,EAAA,CAAA,CAAA;AAAEtK,kBAAAA,MAAM,GAAAuK,KAAA,CAAA,CAAA,CAAA,CAAA;gBAAA,OAAM,CAAC,EAACvK,MAAM,KAAA,IAAA,IAANA,MAAM,KAANA,KAAAA,CAAAA,IAAAA,MAAM,CAAEC,QAAQ,CAAA,CAAA;AAAA,eAAA,CAAC,CACxCwJ,GAAG,eAAA,YAAA;gBAAA,IAAAgB,KAAA,GAAAjI,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAC,SAAAgI,QAAAA,CAAAC,KAAA,EAAA;AAAA,kBAAA,IAAAC,KAAA,EAAA5K,MAAA,EAAA6K,OAAA,CAAA;AAAA,kBAAA,OAAApI,mBAAA,EAAA,CAAAK,IAAA,CAAA,SAAAgI,UAAAC,SAAA,EAAA;AAAA,oBAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAA9H,IAAA,GAAA8H,SAAA,CAAA9J,IAAA;AAAA,sBAAA,KAAA,CAAA;wBAAA2J,KAAA,GAAAJ,cAAA,CAAAG,KAAA,EAAA,CAAA,CAAA,EAAQ3K,MAAM,GAAA4K,KAAA,CAAA,CAAA,CAAA,EAAEC,OAAO,GAAAD,KAAA,CAAA,CAAA,CAAA,CAAA;wBAAAG,SAAA,CAAA5B,EAAA,GAExBnJ,MAAM,CAAA;AAAA+K,wBAAAA,SAAA,CAAA9J,IAAA,GAAA,CAAA,CAAA;AAAA,wBAAA,OACAqC,mBAAmB,CAACtD,MAAM,EAAkB6K,OAAO,EAAE/K,IAAI,CAAC,CAAA;AAAA,sBAAA,KAAA,CAAA;AAAAiL,wBAAAA,SAAA,CAAAjB,EAAA,GAAAiB,SAAA,CAAA7H,IAAA,CAAA;wBAAA,OAAA6H,SAAA,CAAA3H,MAAA,CAAA2H,QAAAA,EAAAA,CAAAA,SAAA,CAAA5B,EAAA,EAAA4B,SAAA,CAAAjB,EAAA,CAAA,CAAA,CAAA;AAAA,sBAAA,KAAA,CAAA,CAAA;AAAA,sBAAA,KAAA,KAAA;wBAAA,OAAAiB,SAAA,CAAA1H,IAAA,EAAA,CAAA;AAAA,qBAAA;AAAA,mBAAA,EAAAqH,QAAA,CAAA,CAAA;iBAEnE,CAAA,CAAA,CAAA;AAAA,gBAAA,OAAA,UAAAM,GAAA,EAAA;AAAA,kBAAA,OAAAP,KAAA,CAAAnI,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,iBAAA,CAAA;AAAA,eAAA,EAAA,CAAC,EACL,CAAC,CAAA;AAAA,YAAA,KAAA,CAAA;AAAA2G,cAAAA,SAAA,CAAAY,EAAA,GAAAZ,SAAA,CAAAhG,IAAA,CAAA;cAAA,OAAAgG,SAAA,CAAA9F,MAAA,CAAA8F,QAAAA,EAAAA,IAAAA,SAAA,CAAAC,EAAA,CAAAD,SAAA,CAAAY,EAAA,CAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAZ,SAAA,CAAA7F,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAAyF,QAAA,EAAA,IAAA,CAAA,CAAA;OAEL,CAAA,CAAA,CAAA;AAAA,MAAA,SAAAmC,OAAAC,GAAA,EAAA;AAAA,QAAA,OAAArC,OAAA,CAAAvG,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAAA,OAAA0I,MAAA,CAAA;AAAA,KAAA,EAAA;AAED;AACF;AACA;AAFE,GAAA,EAAA;IAAArF,GAAA,EAAA,qBAAA;IAAAC,KAAA,EAGA,SAAAsF,mBAAAA,GAA4B;AAC1B,MAAA,IAAM7C,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;AAE9B,MAAA,IAAIA,MAAM,CAAChE,MAAM,GAAG,CAAC,EAAE;QACrB,IAAI,CAACmB,YAAY,CAACkC,aAAa,CAC7B,IAAIC,WAAW,CAAC,QAAQ,EAAE;AACxBE,UAAAA,UAAU,EAAE,KAAA;AACd,SAAC,CACH,CAAC,CAAA;AACD,QAAA,OAAA;AACF,OAAA;AAEA,MAAA,IAAMhI,IAAI,GAAG,IAAI,CAAC2I,UAAU,CAAC,IAAI,CAACJ,sBAAsB,CAACC,MAAM,CAAC,CAAC,CAAA;AACjE,MAAA,IAAMU,OAAO,GAAGpJ,IAAI,CAAC,IAAI,CAACiF,MAAM,CAACzE,UAAU,EAAE,EAAEN,IAAI,CAAC,CAAA;MAEpD,IAAI,CAAC2F,YAAY,CAACkC,aAAa,CAC7B,IAAIC,WAAW,CAAC,KAAK,EAAE;AACrBC,QAAAA,MAAM,EAAE;AACN/H,UAAAA,IAAI,EAAJA,IAAI;AACJkJ,UAAAA,OAAO,EAAPA,OAAAA;SACD;AACDlB,QAAAA,UAAU,EAAE,IAAA;AACd,OAAC,CACH,CAAC,IAAI,IAAI,CAACmD,MAAM,CAAC;AAAEnL,QAAAA,IAAI,EAAJA,IAAI;AAAEkJ,QAAAA,OAAO,EAAPA,OAAAA;AAAQ,OAAC,CAAC,CAAA;MAEnC,IAAI,CAACnE,MAAM,CAACuG,YAAY,CAAC,IAAI,CAACvG,MAAM,CAACgC,UAAU,CAAC,CAAA;AAChD,MAAA,IAAI,CAAChC,MAAM,CAACwG,gBAAgB,EAAE,CAAA;MAE9B,IAAI,CAACC,YAAY,EAAE,CAAA;AACrB,KAAA;AAAC,GAAA,EAAA;IAAA1F,GAAA,EAAA,SAAA;IAAAC,KAAA,EAED,SAAA0F,OAAAA,GAAU;AACR,MAAA,IAAQ1G,MAAM,GAAK,IAAI,CAACW,aAAa,CAA7BX,MAAM,CAAA;AACd;AACAA,MAAAA,MAAM,CAAC3D,KAAK,GAAG2D,MAAM,CAACzD,MAAM,GAAG,CAAC,CAAA;AAChC;AACA;AACF,KAAA;AAAC,GAAA,CAAA,CAAA,CAAA;AAAA,EAAA,OAAAsD,WAAA,CAAA;AAAA,CAnP8B/D,CAAAA,MAAM,CAAC6K,WAAW;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@erase2d/fabric",
3
- "version": "1.1.6",
3
+ "version": "1.1.8",
4
4
  "description": "Fabric.js erase2d bindings",
5
5
  "type": "module",
6
6
  "scripts": {