From 2d83a20c723ff111a093048da8fb69068b627545 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Mon, 14 Oct 2024 22:39:42 +0200 Subject: [PATCH 1/2] save this --- .codesandbox/templates/vanilla/src/index.ts | 2 +- .../vanilla/src/testcases/simpleTextbox.ts | 42 +-- dist-extensions/fabric.d.ts | 2 +- dist/index.mjs | 335 ++++++++++++------ dist/index.mjs.map | 2 +- dist/index.node.mjs | 335 ++++++++++++------ dist/index.node.mjs.map | 2 +- src/shapes/Text/Text.ts | 38 +- 8 files changed, 515 insertions(+), 243 deletions(-) diff --git a/.codesandbox/templates/vanilla/src/index.ts b/.codesandbox/templates/vanilla/src/index.ts index cafc616d9d6..52d1f945f19 100644 --- a/.codesandbox/templates/vanilla/src/index.ts +++ b/.codesandbox/templates/vanilla/src/index.ts @@ -1,6 +1,6 @@ import * as fabric from 'fabric'; import './styles.css'; -import { testCase } from './testcases/loadingSvgs'; +import { testCase } from './testcases/simpleTextbox'; const el = document.getElementById('canvas'); const canvas = (window.canvas = new fabric.Canvas(el)); diff --git a/.codesandbox/templates/vanilla/src/testcases/simpleTextbox.ts b/.codesandbox/templates/vanilla/src/testcases/simpleTextbox.ts index 2e68c6b2607..ddb2659ca92 100644 --- a/.codesandbox/templates/vanilla/src/testcases/simpleTextbox.ts +++ b/.codesandbox/templates/vanilla/src/testcases/simpleTextbox.ts @@ -1,40 +1,20 @@ import * as fabric from 'fabric'; export function testCase(canvas: fabric.Canvas) { - const textValue = 'fabric.js sandbox'; - const text = new fabric.Textbox(textValue, { - originX: 'center', - splitByGrapheme: true, + const textValue = 'LOL'; + const path = new fabric.Path( + 'M0 200 v-200 h200 a100,100 90 0,1 0,200 a100,100 90 0,1 -200,0 z', + { + fill: '', + stroke: 'red', + }, + ); + const text = new fabric.IText(textValue, { width: 200, top: 20, - styles: fabric.util.stylesFromArray( - [ - { - style: { - fontWeight: 'bold', - fontSize: 64, - }, - start: 0, - end: 9, - }, - ], - textValue, - ), + path, + objectCaching: false, }); canvas.add(text); canvas.centerObjectH(text); - function animate(toState) { - text.animate( - { scaleX: Math.max(toState, 0.1) * 2 }, - { - onChange: () => canvas.renderAll(), - onComplete: () => animate(!toState), - duration: 1000, - easing: toState - ? fabric.util.ease.easeInOutQuad - : fabric.util.ease.easeInOutSine, - }, - ); - } - // animate(1); } diff --git a/dist-extensions/fabric.d.ts b/dist-extensions/fabric.d.ts index df0a56e2dfe..6de379dcd0d 100644 --- a/dist-extensions/fabric.d.ts +++ b/dist-extensions/fabric.d.ts @@ -80,7 +80,7 @@ export { FabricText, * */ FabricText as Text, } from './src/shapes/Text/Text'; -export type { ITextProps, SerializedITextProps, } from './src/shapes/IText/IText'; +export type { ITextProps, SerializedITextProps, CursorRenderingData, CursorBoundaries, } from './src/shapes/IText/IText'; export { IText } from './src/shapes/IText/IText'; export type { GraphemeData, SerializedTextboxProps, TextboxProps, } from './src/shapes/Textbox'; export { Textbox } from './src/shapes/Textbox'; diff --git a/dist/index.mjs b/dist/index.mjs index 200c054ce4a..115ce5f5596 100644 --- a/dist/index.mjs +++ b/dist/index.mjs @@ -1556,10 +1556,14 @@ const createImage = () => getFabricDocument().createElement('img'); */ const copyCanvasElement = canvas => { var _newCanvas$getContext; + const newCanvas = createCanvasElementFor(canvas); + (_newCanvas$getContext = newCanvas.getContext('2d')) === null || _newCanvas$getContext === void 0 || _newCanvas$getContext.drawImage(canvas, 0, 0); + return newCanvas; +}; +const createCanvasElementFor = canvas => { const newCanvas = createCanvasElement(); newCanvas.width = canvas.width; newCanvas.height = canvas.height; - (_newCanvas$getContext = newCanvas.getContext('2d')) === null || _newCanvas$getContext === void 0 || _newCanvas$getContext.drawImage(canvas, 0, 0); return newCanvas; }; @@ -3464,6 +3468,7 @@ class StaticCanvas extends createCollectionMixin(CommonMethods) { if (path) { path._set('canvas', this); // needed to setup a couple of variables + // todo migrate to the newer one path.shouldCache(); path._transformDone = true; path.renderCache({ @@ -4081,9 +4086,7 @@ class StaticCanvas extends createCollectionMixin(CommonMethods) { * This essentially copies canvas dimensions since loadFromJSON does not affect canvas size. */ cloneWithoutData() { - const el = createCanvasElement(); - el.width = this.width; - el.height = this.height; + const el = createCanvasElementFor(this); return new this.constructor(el); } @@ -4172,10 +4175,11 @@ class StaticCanvas extends createCollectionMixin(CommonMethods) { translateY = (vp[5] - (top || 0)) * multiplier, newVp = [newZoom, 0, 0, newZoom, translateX, translateY], originalRetina = this.enableRetinaScaling, - canvasEl = createCanvasElement(), + canvasEl = createCanvasElementFor({ + width: scaledWidth, + height: scaledHeight + }), objectsToRender = filter ? this._objects.filter(obj => filter(obj)) : this._objects; - canvasEl.width = scaledWidth; - canvasEl.height = scaledHeight; this.enableRetinaScaling = false; this.viewportTransform = newVp; this.width = scaledWidth; @@ -6723,6 +6727,7 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { * Legacy identifier of the class. Prefer using utils like isType or instanceOf * Will be removed in fabric 7 or 8. * The setter exists to avoid type errors in old code and possibly current deserialization code. + * DO NOT build new code around this type value * @TODO add sustainable warning message * @type string * @deprecated @@ -7064,7 +7069,7 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { this.drawCacheOnCanvas(ctx); } else { this._removeCacheCanvas(); - this.drawObject(ctx); + this.drawObject(ctx, false, {}); this.dirty = false; } ctx.restore(); @@ -7078,7 +7083,25 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { this._createCacheCanvas(); } if (this.isCacheDirty() && this._cacheContext) { - this.drawObject(this._cacheContext, options.forClipping); + const { + zoomX, + zoomY, + cacheTranslationX, + cacheTranslationY + } = this; + const { + width, + height + } = this._cacheCanvas; + this.drawObject(this._cacheContext, options.forClipping, { + zoomX, + zoomY, + cacheTranslationX, + cacheTranslationY, + width, + height, + parentClipPaths: [] + }); this.dirty = false; } } @@ -7166,7 +7189,7 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { * @param {CanvasRenderingContext2D} ctx Context to render on * @param {FabricObject} clipPath */ - drawClipPathOnCache(ctx, clipPath) { + drawClipPathOnCache(ctx, clipPath, canvasWithClipPath) { ctx.save(); // DEBUG: uncomment this line, comment the following // ctx.globalAlpha = 0.4 @@ -7175,14 +7198,9 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { } else { ctx.globalCompositeOperation = 'destination-in'; } + ctx.setTransform(1, 0, 0, 1, 0, 0); //ctx.scale(1 / 2, 1 / 2); - if (clipPath.absolutePositioned) { - const m = invertTransform(this.calcTransformMatrix()); - ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]); - } - clipPath.transform(ctx); - ctx.scale(1 / clipPath.zoomX, 1 / clipPath.zoomY); - ctx.drawImage(clipPath._cacheCanvas, -clipPath.cacheTranslationX, -clipPath.cacheTranslationY); + ctx.drawImage(canvasWithClipPath, 0, 0); ctx.restore(); } @@ -7190,8 +7208,9 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { * Execute the drawing operation for an object on a specified context * @param {CanvasRenderingContext2D} ctx Context to render on * @param {boolean} forClipping apply clipping styles + * @param {DrawContext} context additional context for rendering */ - drawObject(ctx, forClipping) { + drawObject(ctx, forClipping, context) { const originalFill = this.fill, originalStroke = this.stroke; if (forClipping) { @@ -7202,30 +7221,43 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { this._renderBackground(ctx); } this._render(ctx); - this._drawClipPath(ctx, this.clipPath); + this._drawClipPath(ctx, this.clipPath, context); this.fill = originalFill; this.stroke = originalStroke; } + createClipPathLayer(clipPath, context) { + const canvas = createCanvasElementFor(context); + const ctx = canvas.getContext('2d'); + ctx.translate(context.cacheTranslationX, context.cacheTranslationY); + ctx.scale(context.zoomX, context.zoomY); + clipPath._cacheCanvas = canvas; + context.parentClipPaths.forEach(prevClipPath => { + prevClipPath.transform(ctx); + }); + context.parentClipPaths.push(clipPath); + if (clipPath.absolutePositioned) { + const m = invertTransform(this.calcTransformMatrix()); + ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]); + } + clipPath.transform(ctx); + clipPath.drawObject(ctx, true, context); + return canvas; + } /** * Prepare clipPath state and cache and draw it on instance's cache * @param {CanvasRenderingContext2D} ctx * @param {FabricObject} clipPath */ - _drawClipPath(ctx, clipPath) { + _drawClipPath(ctx, clipPath, context) { if (!clipPath) { return; } - // needed to setup a couple of variables - // path canvas gets overridden with this one. + // needed to setup _transformDone // TODO find a better solution? - clipPath._set('canvas', this.canvas); - clipPath.shouldCache(); clipPath._transformDone = true; - clipPath.renderCache({ - forClipping: true - }); - this.drawClipPathOnCache(ctx, clipPath); + const canvas = this.createClipPathLayer(clipPath, context); + this.drawClipPathOnCache(ctx, clipPath, canvas); } /** @@ -7497,14 +7529,15 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { _applyPatternForTransformedGradient(ctx, filler) { var _pCtx$createPattern; const dims = this._limitCacheSize(this._getCacheCanvasDimensions()), - pCanvas = createCanvasElement(), retinaScaling = this.getCanvasRetinaScaling(), width = dims.x / this.scaleX / retinaScaling, - height = dims.y / this.scaleY / retinaScaling; - // in case width and height are less than 1px, we have to round up. - // since the pattern is no-repeat, this is fine - pCanvas.width = Math.ceil(width); - pCanvas.height = Math.ceil(height); + height = dims.y / this.scaleY / retinaScaling, + pCanvas = createCanvasElementFor({ + // in case width and height are less than 1px, we have to round up. + // since the pattern is no-repeat, this is fine + width: Math.ceil(width), + height: Math.ceil(height) + }); const pCtx = pCanvas.getContext('2d'); if (!pCtx) { return; @@ -11321,7 +11354,6 @@ const _excluded$a = ["type", "objects", "layoutManager"]; * This layout manager doesn't do anything and therefore keeps the exact layout the group had when {@link Group#toObject} was called. */ class NoopLayoutManager extends LayoutManager { - // eslint-disable-next-line @typescript-eslint/no-empty-function performLayout() {} } const groupDefaultValues = { @@ -11705,21 +11737,22 @@ class Group extends createCollectionMixin(FabricObject) { * Execute the drawing operation for an object on a specified context * @param {CanvasRenderingContext2D} ctx Context to render on */ - drawObject(ctx) { + drawObject(ctx, forClipping, context) { this._renderBackground(ctx); for (let i = 0; i < this._objects.length; i++) { var _this$canvas; + const obj = this._objects[i]; // TODO: handle rendering edge case somehow - if ((_this$canvas = this.canvas) !== null && _this$canvas !== void 0 && _this$canvas.preserveObjectStacking && this._objects[i].group !== this) { + if ((_this$canvas = this.canvas) !== null && _this$canvas !== void 0 && _this$canvas.preserveObjectStacking && obj.group !== this) { ctx.save(); ctx.transform(...invertTransform(this.calcTransformMatrix())); - this._objects[i].render(ctx); + obj.render(ctx); ctx.restore(); - } else if (this._objects[i].group === this) { - this._objects[i].render(ctx); + } else if (obj.group === this) { + obj.render(ctx); } } - this._drawClipPath(ctx, this.clipPath); + this._drawClipPath(ctx, this.clipPath, context); } /** @@ -14852,17 +14885,28 @@ class Canvas extends SelectableCanvas { * @param {Event} e Event object fired on mousedown */ _onTouchStart(e) { - e.preventDefault(); + // we will prevent scrolling if allowTouchScrolling is not enabled and + let shouldPreventScrolling = !this.allowTouchScrolling; + const currentActiveObject = this._activeObject; if (this.mainTouchId === undefined) { this.mainTouchId = this.getPointerId(e); } this.__onMouseDown(e); + // after executing fabric logic for mouse down let's see + // if we didn't change target or if we are drawing + // we want to prevent scrolling anyway + if (this.isDrawingMode || currentActiveObject && this._target === currentActiveObject) { + shouldPreventScrolling = true; + } + // prevent default, will block scrolling from start + shouldPreventScrolling && e.preventDefault(); this._resetTransformEventData(); const canvasElement = this.upperCanvasEl, eventTypePrefix = this._getEventPrefix(); const doc = getDocumentFromElement(canvasElement); addListener(doc, 'touchend', this._onTouchEnd, addEventOptions); - addListener(doc, 'touchmove', this._onMouseMove, addEventOptions); + // if we scroll don't register the touch move event + shouldPreventScrolling && addListener(doc, 'touchmove', this._onMouseMove, addEventOptions); // Unbind mousedown to prevent double triggers from touch devices removeListener(canvasElement, "".concat(eventTypePrefix, "down"), this._onMouseDown); } @@ -18858,8 +18902,10 @@ let measuringContext; */ function getMeasuringContext() { if (!measuringContext) { - const canvas = createCanvasElement(); - canvas.width = canvas.height = 0; + const canvas = createCanvasElementFor({ + width: 0, + height: 0 + }); measuringContext = canvas.getContext('2d'); } return measuringContext; @@ -18938,11 +18984,36 @@ class FabricText extends StyledText { this._clearCache(); this.dirty = true; if (this.path) { - this.width = this.path.width; - this.height = this.path.height; + this.calcTextWidth(); + // gets all the charboxes and transform by the path angle + const points = []; + this.__charBounds.forEach(lineBoxes => { + lineBoxes.forEach(_ref => { + let { + width, + height, + renderLeft, + renderTop, + angle + } = _ref; + const wBy2 = width / 2; + const h = height * 0.75; + const m = createRotateMatrix({ + angle: radiansToDegrees(angle) + }); + m[4] = renderLeft; + m[5] = renderTop; + points.push(new Point(-wBy2, -h).transform(m), new Point(wBy2, -h).transform(m), new Point(wBy2, h).transform(m), new Point(-wBy2, h).transform(m)); + }); + }); + const bbox = makeBoundingBoxFromPoints(points); + this.pathOffset = new Point(bbox.width / 2 + bbox.left, bbox.height / 2 + bbox.top); + this.width = bbox.width; + this.height = bbox.height; } else { this.width = this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH; this.height = this.calcTextHeight(); + this.pathOffset = new Point(0, 0); } if (this.textAlign.includes(JUSTIFY)) { // once text is measured we need to make space fatter to make justified text. @@ -19056,6 +19127,7 @@ class FabricText extends StyledText { */ _render(ctx) { const path = this.path; + ctx.translate(-this.pathOffset.x, -this.pathOffset.y); path && !path.isNotVisible() && path._render(ctx); this._setTextStyles(ctx); this._renderTextLinesBackground(ctx); @@ -19592,10 +19664,13 @@ class FabricText extends StyledText { * @return {CanvasPattern} a pattern to use as fill/stroke style */ _applyPatternGradientTransformText(filler) { - const pCanvas = createCanvasElement(), - // TODO: verify compatibility with strokeUniform - width = this.width + this.strokeWidth, + // TODO: verify compatibility with strokeUniform + const width = this.width + this.strokeWidth, height = this.height + this.strokeWidth, + pCanvas = createCanvasElementFor({ + width, + height + }), pCtx = pCanvas.getContext('2d'); pCanvas.width = width; pCanvas.height = height; @@ -19649,11 +19724,11 @@ class FabricText extends StyledText { * @param {CompleteTextStyleDeclaration} style with stroke and strokeWidth defined * @returns */ - _setStrokeStyles(ctx, _ref) { + _setStrokeStyles(ctx, _ref2) { let { stroke, strokeWidth - } = _ref; + } = _ref2; ctx.lineWidth = strokeWidth; ctx.lineCap = this.strokeLineCap; ctx.lineDashOffset = this.strokeDashOffset; @@ -19669,10 +19744,10 @@ class FabricText extends StyledText { * @param {CompleteTextStyleDeclaration} style with ill defined * @returns */ - _setFillStyles(ctx, _ref2) { + _setFillStyles(ctx, _ref3) { let { fill - } = _ref2; + } = _ref3; return this.handleFiller(ctx, 'fillStyle', fill); } @@ -20755,6 +20830,24 @@ class ITextBehavior extends FabricText { if (this.isEditing || !this.editable) { return; } + this.enterEditingImpl(); + this.fire('editing:entered', e ? { + e + } : undefined); + this._fireSelectionChanged(); + if (this.canvas) { + this.canvas.fire('text:editing:entered', { + target: this, + e + }); + this.canvas.requestRenderAll(); + } + } + + /** + * runs the actual logic that enter from editing state, see {@link enterEditing} + */ + enterEditingImpl() { if (this.canvas) { this.canvas.calcOffset(); this.canvas.textEditingManager.exitTextEditing(); @@ -20768,17 +20861,6 @@ class ITextBehavior extends FabricText { this._setEditingProps(); this._textBeforeEdit = this.text; this._tick(); - this.fire('editing:entered', e ? { - e - } : undefined); - this._fireSelectionChanged(); - if (this.canvas) { - this.canvas.fire('text:editing:entered', { - target: this, - e - }); - this.canvas.requestRenderAll(); - } } /** @@ -20999,6 +21081,9 @@ class ITextBehavior extends FabricText { /** * runs the actual logic that exits from editing state, see {@link exitEditing} + * Please use exitEditingImpl, this function was kept to avoid breaking changes. + * Will be removed in fabric 7.0 + * @deprecated use "exitEditingImpl" */ _exitEditing() { const hiddenTextarea = this.hiddenTextarea; @@ -21014,10 +21099,10 @@ class ITextBehavior extends FabricText { } /** - * Exits from editing state and fires relevant events + * runs the actual logic that exits from editing state, see {@link exitEditing} + * But it does not fire events */ - exitEditing() { - const isTextChanged = this._textBeforeEdit !== this.text; + exitEditingImpl() { this._exitEditing(); this.selectionEnd = this.selectionStart; this._restoreEditingProps(); @@ -21025,6 +21110,14 @@ class ITextBehavior extends FabricText { this.initDimensions(); this.setCoords(); } + } + + /** + * Exits from editing state and fires relevant events + */ + exitEditing() { + const isTextChanged = this._textBeforeEdit !== this.text; + this.exitEditingImpl(); this.fire('editing:exited'); isTextChanged && this.fire(MODIFIED); if (this.canvas) { @@ -22490,7 +22583,7 @@ class IText extends ITextClickBehavior { return; } const boundaries = this._getCursorBoundaries(); - if (this.selectionStart === this.selectionEnd) { + if (this.selectionStart === this.selectionEnd && !this.inCompositionMode) { this.renderCursor(ctx, boundaries); } else { this.renderSelection(ctx, boundaries); @@ -22580,8 +22673,7 @@ class IText extends ITextClickBehavior { * If contextTop is not available, do nothing. */ renderCursorAt(selectionStart) { - const boundaries = this._getCursorBoundaries(selectionStart, true); - this._renderCursor(this.canvas.contextTop, boundaries, selectionStart); + this._renderCursor(this.canvas.contextTop, this._getCursorBoundaries(selectionStart, true), selectionStart); } /** @@ -22592,7 +22684,16 @@ class IText extends ITextClickBehavior { renderCursor(ctx, boundaries) { this._renderCursor(ctx, boundaries, this.selectionStart); } - _renderCursor(ctx, boundaries, selectionStart) { + + /** + * Return the data needed to render the cursor for given selection start + * The left,top are relative to the object, while width and height are prescaled + * to look think with canvas zoom and object scaling, + * so they depend on canvas and object scaling + */ + getCursorRenderingData() { + let selectionStart = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.selectionStart; + let boundaries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._getCursorBoundaries(selectionStart); const cursorLocation = this.get2DCursorLocation(selectionStart), lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex > 0 ? cursorLocation.charIndex - 1 : 0, @@ -22601,14 +22702,32 @@ class IText extends ITextClickBehavior { cursorWidth = this.cursorWidth / multiplier, dy = this.getValueOfPropertyAt(lineIndex, charIndex, 'deltaY'), topOffset = boundaries.topOffset + (1 - this._fontSizeFraction) * this.getHeightOfLine(lineIndex) / this.lineHeight - charHeight * (1 - this._fontSizeFraction); - if (this.inCompositionMode) { - // TODO: investigate why there isn't a return inside the if, - // and why can't happen at the top of the function - this.renderSelection(ctx, boundaries); - } - ctx.fillStyle = this.cursorColor || this.getValueOfPropertyAt(lineIndex, charIndex, FILL); - ctx.globalAlpha = this._currentCursorOpacity; - ctx.fillRect(boundaries.left + boundaries.leftOffset - cursorWidth / 2, topOffset + boundaries.top + dy, cursorWidth, charHeight); + return { + color: this.cursorColor || this.getValueOfPropertyAt(lineIndex, charIndex, 'fill'), + opacity: this._currentCursorOpacity, + left: boundaries.left + boundaries.leftOffset - cursorWidth / 2, + top: topOffset + boundaries.top + dy, + width: cursorWidth, + height: charHeight + }; + } + + /** + * Render the cursor at the given selectionStart. + * + */ + _renderCursor(ctx, boundaries, selectionStart) { + const { + color, + opacity, + left, + top, + width, + height + } = this.getCursorRenderingData(selectionStart, boundaries); + ctx.fillStyle = color; + ctx.globalAlpha = opacity; + ctx.fillRect(left, top, width, height); } /** @@ -22739,7 +22858,7 @@ class IText extends ITextClickBehavior { }; } dispose() { - this._exitEditing(); + this.exitEditingImpl(); this.draggableTextDelegate.dispose(); super.dispose(); } @@ -23744,9 +23863,10 @@ class WebGLFilterBackend { * class properties to the GLFilterBackend class. */ createWebGLCanvas(width, height) { - const canvas = createCanvasElement(); - canvas.width = width; - canvas.height = height; + const canvas = createCanvasElementFor({ + width, + height + }); const glOptions = { alpha: true, premultipliedAlpha: false, @@ -24376,15 +24496,15 @@ class FabricImage extends FabricObject { this._lastScaleY = scaleY; return; } - const canvasEl = createCanvasElement(), - sourceWidth = elementToFilter.width, - sourceHeight = elementToFilter.height; - canvasEl.width = sourceWidth; - canvasEl.height = sourceHeight; + const canvasEl = createCanvasElementFor(elementToFilter), + { + width, + height + } = elementToFilter; this._element = canvasEl; this._lastScaleX = filter.scaleX = scaleX; this._lastScaleY = filter.scaleY = scaleY; - getFilterBackend().applyFilters([filter], elementToFilter, sourceWidth, sourceHeight, this._element); + getFilterBackend().applyFilters([filter], elementToFilter, width, height, this._element); this._filterScalingX = canvasEl.width / this._originalElement.width; this._filterScalingY = canvasEl.height / this._originalElement.height; } @@ -24416,9 +24536,10 @@ class FabricImage extends FabricObject { if (this._element === this._originalElement) { // if the _element a reference to _originalElement // we need to create a new element to host the filtered pixels - const canvasEl = createCanvasElement(); - canvasEl.width = sourceWidth; - canvasEl.height = sourceHeight; + const canvasEl = createCanvasElementFor({ + width: sourceWidth, + height: sourceHeight + }); this._element = canvasEl; this._filteredEl = canvasEl; } else if (this._filteredEl) { @@ -25093,13 +25214,13 @@ class ElementsParser { // TODO: resolveClipPath could be run once per clippath with minor work per object. // is a refactor that i m not sure is worth on this code - async resolveClipPath(obj, usingElement) { + async resolveClipPath(obj, usingElement, exactOwner) { const clipPathElements = this.extractPropertyDefinition(obj, 'clipPath', this.clipPaths); if (clipPathElements) { const objTransformInv = invertTransform(obj.calcTransformMatrix()); const clipPathTag = clipPathElements[0].parentElement; let clipPathOwner = usingElement; - while (clipPathOwner.parentElement && clipPathOwner.getAttribute('clip-path') !== obj.clipPath) { + while (!exactOwner && clipPathOwner.parentElement && clipPathOwner.getAttribute('clip-path') !== obj.clipPath) { clipPathOwner = clipPathOwner.parentElement; } // move the clipPath tag as sibling to the real element that is using it @@ -25122,7 +25243,11 @@ class ElementsParser { const clipPath = container.length === 1 ? container[0] : new Group(container); const gTransform = multiplyTransformMatrices(objTransformInv, clipPath.calcTransformMatrix()); if (clipPath.clipPath) { - await this.resolveClipPath(clipPath, clipPathOwner); + await this.resolveClipPath(clipPath, clipPathOwner, + // this is tricky. + // it tries to differentiate from when clipPaths are inherited by outside groups + // or when are really clipPaths referencing other clipPaths + clipPathTag.getAttribute('clip-path') ? clipPathOwner : undefined); } const { scaleX, @@ -25536,7 +25661,10 @@ const isWebGLPipelineState = options => { * putImageData is faster than drawImage for that specific operation. */ const isPutImageFaster = (width, height) => { - const targetCanvas = createCanvasElement(); + const targetCanvas = createCanvasElementFor({ + width, + height + }); const sourceCanvas = createCanvasElement(); const gl = sourceCanvas.getContext('webgl'); // eslint-disable-next-line no-undef @@ -25550,8 +25678,6 @@ const isPutImageFaster = (width, height) => { targetCanvas: targetCanvas }; let startTime; - targetCanvas.width = width; - targetCanvas.height = height; startTime = getFabricWindow().performance.now(); WebGLFilterBackend.prototype.copyGLTo2D.call(testContext, gl, testPipelineState); const drawImageTime = getFabricWindow().performance.now() - startTime; @@ -25839,9 +25965,14 @@ class BaseFilter { */ createHelpLayer(options) { if (!options.helpLayer) { - const helpLayer = createCanvasElement(); - helpLayer.width = options.sourceWidth; - helpLayer.height = options.sourceHeight; + const { + sourceWidth, + sourceHeight + } = options; + const helpLayer = createCanvasElementFor({ + width: sourceWidth, + height: sourceHeight + }); options.helpLayer = helpLayer; } } diff --git a/dist/index.mjs.map b/dist/index.mjs.map index fcc82372ac1..9939e3bd4e7 100644 --- a/dist/index.mjs.map +++ b/dist/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"index.mjs","sources":["../src/config.ts","../src/util/internals/console.ts","../src/filters/GLProbes/GLProbe.ts","../src/filters/GLProbes/WebGLProbe.ts","../src/env/browser.ts","../src/env/index.ts","../src/cache.ts","../src/constants.ts","../src/ClassRegistry.ts","../src/util/animation/AnimationRegistry.ts","../src/Observable.ts","../src/util/internals/removeFromArray.ts","../src/util/misc/cos.ts","../src/util/misc/sin.ts","../src/Point.ts","../src/Collection.ts","../src/CommonMethods.ts","../src/util/animation/AnimationFrameProvider.ts","../src/util/internals/uid.ts","../src/util/misc/dom.ts","../src/util/misc/radiansDegreesConversion.ts","../src/util/misc/matrix.ts","../src/util/misc/objectEnlive.ts","../src/util/misc/pick.ts","../src/color/color_map.ts","../src/color/constants.ts","../src/color/util.ts","../src/color/Color.ts","../src/util/misc/toFixed.ts","../src/util/misc/svgParsing.ts","../src/util/typeAssertions.ts","../src/util/dom_misc.ts","../src/canvas/DOMManagers/util.ts","../src/canvas/DOMManagers/StaticCanvasDOMManager.ts","../src/canvas/StaticCanvasOptions.ts","../src/canvas/StaticCanvas.ts","../src/util/dom_event.ts","../src/util/misc/boundingBoxFromPoints.ts","../src/util/misc/objectTransforms.ts","../src/util/misc/planeChange.ts","../src/controls/fireEvent.ts","../src/util/misc/resolveOrigin.ts","../src/controls/util.ts","../src/controls/drag.ts","../src/shapes/Object/FabricObjectSVGExportMixin.ts","../src/parser/getSvgRegex.ts","../src/parser/constants.ts","../src/util/misc/vectors.ts","../src/Shadow.ts","../src/util/misc/capValue.ts","../src/shapes/Object/defaultValues.ts","../src/util/animation/easing.ts","../src/util/animation/AnimationBase.ts","../src/util/animation/ValueAnimation.ts","../src/util/animation/ArrayAnimation.ts","../src/util/animation/ColorAnimation.ts","../src/util/animation/animate.ts","../src/Intersection.ts","../src/shapes/Object/ObjectGeometry.ts","../src/shapes/Object/Object.ts","../src/controls/wrapWithFireEvent.ts","../src/controls/wrapWithFixedAnchor.ts","../src/controls/changeWidth.ts","../src/controls/controlRendering.ts","../src/controls/Control.ts","../src/controls/rotate.ts","../src/controls/scale.ts","../src/controls/skew.ts","../src/controls/scaleSkew.ts","../src/controls/commonControls.ts","../src/shapes/Object/InteractiveObject.ts","../src/util/applyMixins.ts","../src/shapes/Object/FabricObject.ts","../src/util/misc/isTransparent.ts","../src/util/misc/rotatePoint.ts","../src/util/internals/findRight.ts","../src/util/misc/projectStroke/StrokeProjectionsBase.ts","../src/util/misc/projectStroke/StrokeLineJoinProjections.ts","../src/util/misc/projectStroke/StrokeLineCapProjections.ts","../src/util/misc/projectStroke/index.ts","../src/util/internals/cloneStyles.ts","../src/util/lang_string.ts","../src/util/misc/textStyles.ts","../src/parser/attributes.ts","../src/parser/selectorMatches.ts","../src/parser/doesSomeParentMatch.ts","../src/parser/elementMatchesRule.ts","../src/parser/getGlobalStylesForElement.ts","../src/parser/normalizeAttr.ts","../src/util/internals/cleanupSvgAttribute.ts","../src/parser/parseTransformAttribute.ts","../src/parser/normalizeValue.ts","../src/parser/parseFontDeclaration.ts","../src/parser/parseStyleObject.ts","../src/parser/parseStyleString.ts","../src/parser/parseStyleAttribute.ts","../src/parser/setStrokeFillOpacity.ts","../src/parser/parseAttributes.ts","../src/shapes/Rect.ts","../src/LayoutManager/constants.ts","../src/LayoutManager/LayoutStrategies/utils.ts","../src/LayoutManager/LayoutStrategies/LayoutStrategy.ts","../src/LayoutManager/LayoutStrategies/FitContentLayout.ts","../src/LayoutManager/LayoutManager.ts","../src/shapes/Group.ts","../src/util/misc/groupSVGElements.ts","../src/util/misc/findScaleTo.ts","../src/util/path/regex.ts","../src/util/path/index.ts","../src/util/dom_style.ts","../src/util/misc/mergeClipPaths.ts","../src/util/internals/getRandomInt.ts","../src/util/internals/dom_request.ts","../src/util/transform_matrix_removal.ts","../src/canvas/DOMManagers/CanvasDOMManager.ts","../src/canvas/CanvasOptions.ts","../src/canvas/SelectableCanvas.ts","../src/canvas/TextEditingManager.ts","../src/canvas/Canvas.ts","../src/gradient/constants.ts","../src/util/internals/ifNaN.ts","../src/parser/percent.ts","../src/gradient/parser/parseColorStops.ts","../src/gradient/parser/misc.ts","../src/gradient/parser/parseCoords.ts","../src/gradient/Gradient.ts","../src/Pattern/Pattern.ts","../src/brushes/BaseBrush.ts","../src/shapes/Path.ts","../src/brushes/PencilBrush.ts","../src/shapes/Circle.ts","../src/brushes/CircleBrush.ts","../src/brushes/SprayBrush.ts","../src/brushes/PatternBrush.ts","../src/shapes/Line.ts","../src/shapes/Triangle.ts","../src/shapes/Ellipse.ts","../src/parser/parsePointsAttribute.ts","../src/shapes/Polyline.ts","../src/shapes/Polygon.ts","../src/shapes/Text/constants.ts","../src/shapes/Text/StyledText.ts","../src/shapes/Text/TextSVGExportMixin.ts","../src/shapes/Text/Text.ts","../src/shapes/IText/DraggableTextDelegate.ts","../src/shapes/IText/ITextBehavior.ts","../src/shapes/IText/ITextKeyBehavior.ts","../src/shapes/IText/ITextClickBehavior.ts","../src/shapes/IText/constants.ts","../src/shapes/IText/IText.ts","../src/shapes/Textbox.ts","../src/LayoutManager/LayoutStrategies/ClipPathLayout.ts","../src/LayoutManager/LayoutStrategies/FixedLayout.ts","../src/LayoutManager/ActiveSelectionLayoutManager.ts","../src/shapes/ActiveSelection.ts","../src/filters/Canvas2dFilterBackend.ts","../src/filters/WebGLFilterBackend.ts","../src/filters/FilterBackend.ts","../src/shapes/Image.ts","../src/parser/applyViewboxTransform.ts","../src/parser/getTagName.ts","../src/parser/hasInvalidAncestor.ts","../src/parser/getMultipleNodes.ts","../src/parser/parseUseDirectives.ts","../src/parser/recursivelyParseGradientsXlink.ts","../src/parser/getGradientDefs.ts","../src/parser/getCSSRules.ts","../src/parser/elements_parser.ts","../src/parser/parseSVGDocument.ts","../src/parser/loadSVGFromString.ts","../src/parser/loadSVGFromURL.ts","../src/controls/polyControl.ts","../src/controls/pathControl.ts","../src/filters/utils.ts","../src/filters/shaders/baseFilter.ts","../src/filters/BaseFilter.ts","../src/filters/shaders/blendColor.ts","../src/filters/BlendColor.ts","../src/filters/shaders/blendImage.ts","../src/filters/BlendImage.ts","../src/filters/shaders/blur.ts","../src/filters/Blur.ts","../src/filters/shaders/brightness.ts","../src/filters/Brightness.ts","../src/filters/shaders/colorMatrix.ts","../src/filters/ColorMatrix.ts","../src/filters/ColorMatrixFilters.ts","../src/filters/Composed.ts","../src/filters/shaders/constrast.ts","../src/filters/Contrast.ts","../src/filters/shaders/convolute.ts","../src/filters/Convolute.ts","../src/filters/shaders/gamma.ts","../src/filters/Gamma.ts","../src/filters/shaders/grayscale.ts","../src/filters/Grayscale.ts","../src/filters/HueRotation.ts","../src/filters/shaders/invert.ts","../src/filters/Invert.ts","../src/filters/shaders/noise.ts","../src/filters/Noise.ts","../src/filters/shaders/pixelate.ts","../src/filters/Pixelate.ts","../src/filters/shaders/removeColor.ts","../src/filters/RemoveColor.ts","../src/filters/Resize.ts","../src/filters/shaders/saturation.ts","../src/filters/Saturation.ts","../src/filters/shaders/vibrance.ts","../src/filters/Vibrance.ts"],"sourcesContent":["export type TConfiguration = Partial;\n\nclass BaseConfiguration {\n /**\n * Browser-specific constant to adjust CanvasRenderingContext2D.shadowBlur value,\n * which is unitless and not rendered equally across browsers.\n *\n * Values that work quite well (as of October 2017) are:\n * - Chrome: 1.5\n * - Edge: 1.75\n * - Firefox: 0.9\n * - Safari: 0.95\n *\n * @since 2.0.0\n * @type Number\n * @default 1\n */\n browserShadowBlurConstant = 1;\n\n /**\n * Pixel per Inch as a default value set to 96. Can be changed for more realistic conversion.\n */\n DPI = 96;\n\n /**\n * Device Pixel Ratio\n * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\n */\n devicePixelRatio =\n typeof window !== 'undefined' ? window.devicePixelRatio : 1; // eslint-disable-line no-restricted-globals\n\n /**\n * Pixel limit for cache canvases. 1Mpx , 4Mpx should be fine.\n * @since 1.7.14\n * @type Number\n * @default\n */\n perfLimitSizeTotal = 2097152;\n\n /**\n * Pixel limit for cache canvases width or height. IE fixes the maximum at 5000\n * @since 1.7.14\n * @type Number\n * @default\n */\n maxCacheSideLimit = 4096;\n\n /**\n * Lowest pixel limit for cache canvases, set at 256PX\n * @since 1.7.14\n * @type Number\n * @default\n */\n minCacheSideLimit = 256;\n\n /**\n * When 'true', style information is not retained when copy/pasting text, making\n * pasted text use destination style.\n * Defaults to 'false'.\n * @type Boolean\n * @default\n * @deprecated\n */\n disableStyleCopyPaste = false;\n\n /**\n * Enable webgl for filtering picture is available\n * A filtering backend will be initialized, this will both take memory and\n * time since a default 2048x2048 canvas will be created for the gl context\n * @since 2.0.0\n * @type Boolean\n * @default\n */\n enableGLFiltering = true;\n\n /**\n * if webgl is enabled and available, textureSize will determine the size\n * of the canvas backend\n *\n * In order to support old hardware set to `2048` to avoid OOM\n *\n * @since 2.0.0\n * @type Number\n * @default\n */\n textureSize = 4096;\n\n /**\n * Skip performance testing of setupGLContext and force the use of putImageData that seems to be the one that works best on\n * Chrome + old hardware. if your users are experiencing empty images after filtering you may try to force this to true\n * this has to be set before instantiating the filtering backend ( before filtering the first image )\n * @type Boolean\n * @default false\n */\n forceGLPutImageData = false;\n\n /**\n * If disabled boundsOfCurveCache is not used. For apps that make heavy usage of pencil drawing probably disabling it is better\n * With the standard behaviour of fabric to translate all curves in absolute commands and by not subtracting the starting point from\n * the curve is very hard to hit any cache.\n * Enable only if you know why it could be useful.\n * Candidate for removal/simplification\n * @default false\n */\n cachesBoundsOfCurve = false;\n\n /**\n * Map of font files\n * Map of font files\n */\n fontPaths: Record = {};\n\n /**\n * Defines the number of fraction digits to use when serializing object values.\n * Used in exporting methods (`toObject`, `toJSON`, `toSVG`)\n * You can use it to increase/decrease precision of such values like left, top, scaleX, scaleY, etc.\n */\n NUM_FRACTION_DIGITS = 4;\n}\n\nexport class Configuration extends BaseConfiguration {\n constructor(config?: TConfiguration) {\n super();\n this.configure(config);\n }\n\n configure(config: TConfiguration = {}) {\n Object.assign(this, config);\n }\n\n /**\n * Map of font files\n */\n addFonts(\n paths: Record = {},\n ) {\n this.fontPaths = {\n ...this.fontPaths,\n ...paths,\n };\n }\n\n removeFonts(fontFamilys: string[] = []) {\n fontFamilys.forEach((fontFamily) => {\n delete this.fontPaths[fontFamily];\n });\n }\n\n clearFonts() {\n this.fontPaths = {};\n }\n\n restoreDefaults(keys?: (keyof T)[]) {\n const defaults = new BaseConfiguration() as T;\n const config =\n keys?.reduce((acc, key) => {\n acc[key] = defaults[key];\n return acc;\n }, {} as T) || defaults;\n this.configure(config);\n }\n}\n\nexport const config = new Configuration();\n","export const log = (\n severity: 'log' | 'warn' | 'error',\n ...optionalParams: any[]\n) =>\n // eslint-disable-next-line no-restricted-syntax\n console[severity]('fabric', ...optionalParams);\n\nexport class FabricError extends Error {\n constructor(message?: string, options?: ErrorOptions) {\n super(`fabric: ${message}`, options);\n }\n}\n\nexport class SignalAbortedError extends FabricError {\n constructor(context: string) {\n super(`${context} 'options.signal' is in 'aborted' state`);\n }\n}\n","export type GLPrecision = 'lowp' | 'mediump' | 'highp';\n\nexport abstract class GLProbe {\n declare GLPrecision: GLPrecision | undefined;\n abstract queryWebGL(canvas: HTMLCanvasElement): void;\n abstract isSupported(textureSize: number): boolean;\n}\n","import { log } from '../../util/internals/console';\nimport { GLProbe } from './GLProbe';\nimport type { GLPrecision } from './GLProbe';\n\n/**\n * Lazy initialize WebGL constants\n */\nexport class WebGLProbe extends GLProbe {\n declare maxTextureSize?: number;\n\n /**\n * Tests if webgl supports certain precision\n * @param {WebGL} Canvas WebGL context to test on\n * @param {GLPrecision} Precision to test can be any of following\n * @returns {Boolean} Whether the user's browser WebGL supports given precision.\n */\n private testPrecision(\n gl: WebGLRenderingContext,\n precision: GLPrecision,\n ): boolean {\n const fragmentSource = `precision ${precision} float;\\nvoid main(){}`;\n const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n if (!fragmentShader) {\n return false;\n }\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n return !!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS);\n }\n\n /**\n * query browser for WebGL\n */\n queryWebGL(canvas: HTMLCanvasElement) {\n const gl = canvas.getContext('webgl');\n if (gl) {\n this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n this.GLPrecision = (['highp', 'mediump', 'lowp'] as const).find(\n (precision) => this.testPrecision(gl, precision),\n );\n gl.getExtension('WEBGL_lose_context')!.loseContext();\n log('log', `WebGL: max texture size ${this.maxTextureSize}`);\n }\n }\n\n isSupported(textureSize: number) {\n return !!this.maxTextureSize && this.maxTextureSize >= textureSize;\n }\n}\n","/* eslint-disable no-restricted-globals */\nimport { WebGLProbe } from '../filters/GLProbes/WebGLProbe';\nimport type { TCopyPasteData, TFabricEnv } from './types';\n\nconst copyPasteData: TCopyPasteData = {};\n\nexport const getEnv = (): TFabricEnv => {\n return {\n document,\n window,\n isTouchSupported:\n 'ontouchstart' in window ||\n 'ontouchstart' in document ||\n (window && window.navigator && window.navigator.maxTouchPoints > 0),\n WebGLProbe: new WebGLProbe(),\n dispose() {\n // noop\n },\n copyPasteData,\n };\n};\n","/**\n * This file is consumed by fabric.\n * The `./node` and `./browser` files define the env variable that is used by this module.\n * The `./browser` module is defined to be the default env and doesn't set the env at all.\n * This is done in order to support isomorphic usage for browser and node applications\n * since window and document aren't defined at time of import in SSR, we can't set env so we avoid it by deferring to the default env.\n */\n\nimport { config } from '../config';\nimport { getEnv as getBrowserEnv } from './browser';\nimport type { TFabricEnv } from './types';\nimport type { DOMWindow } from 'jsdom';\n\nlet env: TFabricEnv;\n\n/**\n * Sets the environment variables used by fabric.\\\n * This is exposed for special cases, such as configuring a test environment, and should be used with care.\n *\n * **CAUTION**: Must be called before using the package.\n *\n * @example\n * Passing `window` and `document` objects to fabric (in case they are mocked or something)\n * import { getEnv, setEnv } from 'fabric';\n * // we want fabric to use the `window` and `document` objects exposed by the environment we are running in.\n * setEnv({ ...getEnv(), window, document });\n * // done with setup, using fabric is now safe\n */\nexport const setEnv = (value: TFabricEnv) => {\n env = value;\n};\n\n/**\n * In order to support SSR we **MUST** access the browser env only after the window has loaded\n */\nexport const getEnv = () => env || (env = getBrowserEnv());\n\nexport const getFabricDocument = (): Document => getEnv().document;\n\nexport const getFabricWindow = (): (Window & typeof globalThis) | DOMWindow =>\n getEnv().window;\n\n/**\n * @returns the config value if defined, fallbacks to the environment value\n */\nexport const getDevicePixelRatio = () =>\n Math.max(config.devicePixelRatio ?? getFabricWindow().devicePixelRatio, 1);\n","import { config } from './config';\nimport type { TRectBounds } from './typedefs';\n\nexport class Cache {\n /**\n * Cache of widths of chars in text rendering.\n */\n charWidthsCache: Record<\n /** fontFamily */ string,\n Record<\n /** fontStyleCacheKey */ string,\n Record\n >\n > = {};\n\n /**\n * @return {Object} reference to cache\n */\n getFontCache({\n fontFamily,\n fontStyle,\n fontWeight,\n }: {\n fontFamily: string;\n fontStyle: string;\n fontWeight: string | number;\n }) {\n fontFamily = fontFamily.toLowerCase();\n if (!this.charWidthsCache[fontFamily]) {\n this.charWidthsCache[fontFamily] = {};\n }\n const fontCache = this.charWidthsCache[fontFamily];\n const cacheKey = `${fontStyle.toLowerCase()}_${(\n fontWeight + ''\n ).toLowerCase()}`;\n if (!fontCache[cacheKey]) {\n fontCache[cacheKey] = {};\n }\n return fontCache[cacheKey];\n }\n\n /**\n * Clear char widths cache for the given font family or all the cache if no\n * fontFamily is specified.\n * Use it if you know you are loading fonts in a lazy way and you are not waiting\n * for custom fonts to load properly when adding text objects to the canvas.\n * If a text object is added when its own font is not loaded yet, you will get wrong\n * measurement and so wrong bounding boxes.\n * After the font cache is cleared, either change the textObject text content or call\n * initDimensions() to trigger a recalculation\n * @param {String} [fontFamily] font family to clear\n */\n clearFontCache(fontFamily?: string) {\n fontFamily = (fontFamily || '').toLowerCase();\n if (!fontFamily) {\n this.charWidthsCache = {};\n } else if (this.charWidthsCache[fontFamily]) {\n delete this.charWidthsCache[fontFamily];\n }\n }\n\n /**\n * Given current aspect ratio, determines the max width and height that can\n * respect the total allowed area for the cache.\n * @param {number} ar aspect ratio\n * @return {number[]} Limited dimensions X and Y\n */\n limitDimsByArea(ar: number) {\n const { perfLimitSizeTotal } = config;\n const roughWidth = Math.sqrt(perfLimitSizeTotal * ar);\n // we are not returning a point on purpose, to avoid circular dependencies\n // this is an internal utility\n return [\n Math.floor(roughWidth),\n Math.floor(perfLimitSizeTotal / roughWidth),\n ];\n }\n\n /**\n * This object keeps the results of the boundsOfCurve calculation mapped by the joined arguments necessary to calculate it.\n * It does speed up calculation, if you parse and add always the same paths, but in case of heavy usage of freedrawing\n * you do not get any speed benefit and you get a big object in memory.\n * The object was a private variable before, while now is appended to the lib so that you have access to it and you\n * can eventually clear it.\n * It was an internal variable, is accessible since version 2.3.4\n */\n boundsOfCurveCache: Record = {};\n}\n\nexport const cache = new Cache();\n","import type { TMat2D } from './typedefs';\n// use this syntax so babel plugin see this import here\nimport { version } from '../package.json';\n\nexport const VERSION = version;\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop() {}\n\nexport const halfPI = Math.PI / 2;\nexport const twoMathPi = Math.PI * 2;\nexport const PiBy180 = Math.PI / 180;\n\nexport const iMatrix = Object.freeze([1, 0, 0, 1, 0, 0]) as TMat2D;\nexport const DEFAULT_SVG_FONT_SIZE = 16;\nexport const ALIASING_LIMIT = 2;\n\n/* \"magic number\" for bezier approximations of arcs (http://itc.ktu.lt/itc354/Riskus354.pdf) */\nexport const kRect = 1 - 0.5522847498;\n\nexport const CENTER = 'center';\nexport const LEFT = 'left';\nexport const TOP = 'top';\nexport const BOTTOM = 'bottom';\nexport const RIGHT = 'right';\nexport const NONE = 'none';\n\nexport const reNewline = /\\r?\\n/;\n\nexport const MOVING = 'moving';\nexport const SCALING = 'scaling';\nexport const ROTATING = 'rotating';\nexport const ROTATE = 'rotate';\nexport const SKEWING = 'skewing';\nexport const RESIZING = 'resizing';\nexport const MODIFY_POLY = 'modifyPoly';\nexport const MODIFY_PATH = 'modifyPath';\nexport const CHANGED = 'changed';\nexport const SCALE = 'scale';\nexport const SCALE_X = 'scaleX';\nexport const SCALE_Y = 'scaleY';\nexport const SKEW_X = 'skewX';\nexport const SKEW_Y = 'skewY';\nexport const FILL = 'fill';\nexport const STROKE = 'stroke';\nexport const MODIFIED = 'modified';\n","import { FabricError } from './util/internals/console';\n\n/*\n * This Map connects the objects type value with their\n * class implementation. It used from any object to understand which are\n * the classes to enlive when requesting a object.type = 'path' for example.\n * Objects uses it for clipPath, Canvas uses it for everything.\n * This is necessary for generic code to run and enlive instances from serialized representation.\n * You can customize which classes get enlived from SVG parsing using this classRegistry.\n * The Registry start empty and gets filled in depending which files you import.\n * If you want to be able to parse arbitrary SVGs or JSON representation of canvases, coming from\n * different sources you will need to import all fabric because you may need all classes.\n */\n\nexport const JSON = 'json';\nexport const SVG = 'svg';\n\nexport class ClassRegistry {\n declare [JSON]: Map;\n declare [SVG]: Map;\n\n constructor() {\n this[JSON] = new Map();\n this[SVG] = new Map();\n }\n\n has(classType: string): boolean {\n return this[JSON].has(classType);\n }\n\n getClass(classType: string): T {\n const constructor = this[JSON].get(classType);\n if (!constructor) {\n throw new FabricError(`No class registered for ${classType}`);\n }\n return constructor;\n }\n\n setClass(classConstructor: any, classType?: string) {\n if (classType) {\n this[JSON].set(classType, classConstructor);\n } else {\n this[JSON].set(classConstructor.type, classConstructor);\n // legacy\n // @TODO: needs to be removed in fabric 7 or 8\n this[JSON].set(classConstructor.type.toLowerCase(), classConstructor);\n }\n }\n\n getSVGClass(SVGTagName: string): any {\n return this[SVG].get(SVGTagName);\n }\n\n setSVGClass(classConstructor: any, SVGTagName?: string) {\n this[SVG].set(\n SVGTagName ?? classConstructor.type.toLowerCase(),\n classConstructor,\n );\n }\n}\n\nexport const classRegistry = new ClassRegistry();\n","import type { StaticCanvas } from '../../canvas/StaticCanvas';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport type { AnimationBase } from './AnimationBase';\n\n/**\n * Array holding all running animations\n */\nclass AnimationRegistry extends Array {\n /**\n * Remove a single animation using an animation context\n * @param {AnimationBase} context\n */\n remove(context: AnimationBase) {\n const index = this.indexOf(context);\n index > -1 && this.splice(index, 1);\n }\n\n /**\n * Cancel all running animations on the next frame\n */\n cancelAll() {\n const animations = this.splice(0);\n animations.forEach((animation) => animation.abort());\n return animations;\n }\n\n /**\n * Cancel all running animations attached to a canvas on the next frame\n * @param {StaticCanvas} canvas\n */\n cancelByCanvas(canvas: StaticCanvas) {\n if (!canvas) {\n return [];\n }\n const animations = this.filter(\n (animation) =>\n animation.target === canvas ||\n (typeof animation.target === 'object' &&\n (animation.target as FabricObject)?.canvas === canvas),\n );\n animations.forEach((animation) => animation.abort());\n return animations;\n }\n\n /**\n * Cancel all running animations for target on the next frame\n * @param target\n */\n cancelByTarget(target: AnimationBase['target']) {\n if (!target) {\n return [];\n }\n const animations = this.filter((animation) => animation.target === target);\n animations.forEach((animation) => animation.abort());\n return animations;\n }\n}\n\nexport const runningAnimations = new AnimationRegistry();\n","export type TEventCallback = (options: T) => any;\n\ntype EventRegistryObject = {\n [K in keyof E]?: TEventCallback;\n};\n\n/**\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#events}\n * @see {@link http://fabricjs.com/events|Events demo}\n */\nexport class Observable {\n private __eventListeners: Record =\n {} as Record;\n\n /**\n * Observes specified event\n * @alias on\n * @param {string} eventName Event name (eg. 'after:render')\n * @param {EventRegistryObject} handlers key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function that receives a notification when an event of the specified type occurs\n * @return {Function} disposer\n */\n on(\n eventName: K,\n handler: TEventCallback,\n ): VoidFunction;\n on(handlers: EventRegistryObject): VoidFunction;\n on(\n arg0: K | EventRegistryObject,\n handler?: TEventCallback,\n ): VoidFunction {\n if (!this.__eventListeners) {\n this.__eventListeners = {} as Record;\n }\n if (typeof arg0 === 'object') {\n // one object with key/value pairs was passed\n Object.entries(arg0).forEach(([eventName, handler]) => {\n this.on(eventName as K, handler as TEventCallback);\n });\n return () => this.off(arg0);\n } else if (handler) {\n const eventName = arg0;\n if (!this.__eventListeners[eventName]) {\n this.__eventListeners[eventName] = [];\n }\n this.__eventListeners[eventName].push(handler);\n return () => this.off(eventName, handler);\n } else {\n // noop\n return () => false;\n }\n }\n\n /**\n * Observes specified event **once**\n * @alias once\n * @param {string} eventName Event name (eg. 'after:render')\n * @param {EventRegistryObject} handlers key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function that receives a notification when an event of the specified type occurs\n * @return {Function} disposer\n */\n once(\n eventName: K,\n handler: TEventCallback,\n ): VoidFunction;\n once(handlers: EventRegistryObject): VoidFunction;\n once(\n arg0: K | EventRegistryObject,\n handler?: TEventCallback,\n ): VoidFunction {\n if (typeof arg0 === 'object') {\n // one object with key/value pairs was passed\n const disposers: VoidFunction[] = [];\n Object.entries(arg0).forEach(([eventName, handler]) => {\n disposers.push(this.once(eventName as K, handler as TEventCallback));\n });\n return () => disposers.forEach((d) => d());\n } else if (handler) {\n const disposer = this.on(\n arg0,\n function onceHandler(this: Observable, ...args) {\n handler.call(this, ...args);\n disposer();\n },\n );\n return disposer;\n } else {\n // noop\n return () => false;\n }\n }\n\n /**\n * @private\n * @param {string} eventName\n * @param {Function} [handler]\n */\n private _removeEventListener(\n eventName: K,\n handler?: TEventCallback,\n ) {\n if (!this.__eventListeners[eventName]) {\n return;\n }\n\n if (handler) {\n const eventListener = this.__eventListeners[eventName];\n const index = eventListener.indexOf(handler);\n index > -1 && eventListener.splice(index, 1);\n } else {\n this.__eventListeners[eventName] = [];\n }\n }\n\n /**\n * Unsubscribe all event listeners for eventname.\n * Do not use this pattern. You could kill internal fabricJS events.\n * We know we should have protected events for internal flows, but we don't have yet\n * @deprecated\n * @param {string} eventName event name (eg. 'after:render')\n */\n off(eventName: K): void;\n /**\n * unsubscribe an event listener\n * @param {string} eventName event name (eg. 'after:render')\n * @param {TEventCallback} handler event listener to unsubscribe\n */\n off(eventName: K, handler: TEventCallback): void;\n /**\n * unsubscribe event listeners\n * @param handlers handlers key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n */\n off(handlers: EventRegistryObject): void;\n /**\n * unsubscribe all event listeners\n */\n off(): void;\n off(\n arg0?: K | EventRegistryObject,\n handler?: TEventCallback,\n ) {\n if (!this.__eventListeners) {\n return;\n }\n\n // remove all key/value pairs (event name -> event handler)\n if (typeof arg0 === 'undefined') {\n for (const eventName in this.__eventListeners) {\n this._removeEventListener(eventName);\n }\n }\n // one object with key/value pairs was passed\n else if (typeof arg0 === 'object') {\n Object.entries(arg0).forEach(([eventName, handler]) => {\n this._removeEventListener(eventName as K, handler as TEventCallback);\n });\n } else {\n this._removeEventListener(arg0, handler);\n }\n }\n\n /**\n * Fires event with an optional options object\n * @param {String} eventName Event name to fire\n * @param {Object} [options] Options object\n */\n fire(eventName: K, options?: EventSpec[K]) {\n if (!this.__eventListeners) {\n return;\n }\n\n const listenersForEvent = this.__eventListeners[eventName]?.concat();\n if (listenersForEvent) {\n for (let i = 0; i < listenersForEvent.length; i++) {\n listenersForEvent[i].call(this, options || {});\n }\n }\n }\n}\n","/**\n * Removes value from an array.\n * Presence of value (and its position in an array) is determined via `Array.prototype.indexOf`\n * @param {Array} array\n * @param {*} value\n * @return {Array} original array\n */\nexport const removeFromArray = (array: T[], value: T): T[] => {\n const idx = array.indexOf(value);\n if (idx !== -1) {\n array.splice(idx, 1);\n }\n return array;\n};\n","import type { TRadian } from '../../typedefs';\nimport { halfPI } from '../../constants';\n\n/**\n * Calculate the cos of an angle, avoiding returning floats for known results\n * This function is here just to avoid getting 0.999999999999999 when dealing\n * with numbers that are really 1 or 0.\n * @param {TRadian} angle the angle\n * @return {Number} the cosin value for angle.\n */\nexport const cos = (angle: TRadian): number => {\n if (angle === 0) {\n return 1;\n }\n const angleSlice = Math.abs(angle) / halfPI;\n switch (angleSlice) {\n case 1:\n case 3:\n return 0;\n case 2:\n return -1;\n }\n return Math.cos(angle);\n};\n","import type { TRadian } from '../../typedefs';\nimport { halfPI } from '../../constants';\n\n/**\n * Calculate the cos of an angle, avoiding returning floats for known results\n * This function is here just to avoid getting 0.999999999999999 when dealing\n * with numbers that are really 1 or 0.\n * @param {TRadian} angle the angle\n * @return {Number} the sin value for angle.\n */\nexport const sin = (angle: TRadian): number => {\n if (angle === 0) {\n return 0;\n }\n const angleSlice = angle / halfPI;\n const value = Math.sign(angle);\n switch (angleSlice) {\n case 1:\n return value;\n case 2:\n return 0;\n case 3:\n return -value;\n }\n return Math.sin(angle);\n};\n","import type { TMat2D, TRadian } from './typedefs';\nimport { cos } from './util/misc/cos';\nimport { sin } from './util/misc/sin';\n\nexport interface XY {\n x: number;\n y: number;\n}\n\n/**\n * Adaptation of work of Kevin Lindsey(kevin@kevlindev.com)\n */\nexport class Point implements XY {\n declare x: number;\n\n declare y: number;\n\n constructor();\n constructor(x: number, y: number);\n constructor(point?: XY);\n constructor(arg0: number | XY = 0, y = 0) {\n if (typeof arg0 === 'object') {\n this.x = arg0.x;\n this.y = arg0.y;\n } else {\n this.x = arg0;\n this.y = y;\n }\n }\n\n /**\n * Adds another point to this one and returns another one\n * @param {XY} that\n * @return {Point} new Point instance with added values\n */\n add(that: XY): Point {\n return new Point(this.x + that.x, this.y + that.y);\n }\n\n /**\n * Adds another point to this one\n * @param {XY} that\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n addEquals(that: XY): Point {\n this.x += that.x;\n this.y += that.y;\n return this;\n }\n\n /**\n * Adds value to this point and returns a new one\n * @param {Number} scalar\n * @return {Point} new Point with added value\n */\n scalarAdd(scalar: number): Point {\n return new Point(this.x + scalar, this.y + scalar);\n }\n\n /**\n * Adds value to this point\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarAddEquals(scalar: number): Point {\n this.x += scalar;\n this.y += scalar;\n return this;\n }\n\n /**\n * Subtracts another point from this point and returns a new one\n * @param {XY} that\n * @return {Point} new Point object with subtracted values\n */\n subtract(that: XY): Point {\n return new Point(this.x - that.x, this.y - that.y);\n }\n\n /**\n * Subtracts another point from this point\n * @param {XY} that\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n subtractEquals(that: XY): Point {\n this.x -= that.x;\n this.y -= that.y;\n return this;\n }\n\n /**\n * Subtracts value from this point and returns a new one\n * @param {Number} scalar\n * @return {Point}\n */\n scalarSubtract(scalar: number): Point {\n return new Point(this.x - scalar, this.y - scalar);\n }\n\n /**\n * Subtracts value from this point\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarSubtractEquals(scalar: number): Point {\n this.x -= scalar;\n this.y -= scalar;\n return this;\n }\n\n /**\n * Multiplies this point by another value and returns a new one\n * @param {XY} that\n * @return {Point}\n */\n multiply(that: XY): Point {\n return new Point(this.x * that.x, this.y * that.y);\n }\n\n /**\n * Multiplies this point by a value and returns a new one\n * @param {Number} scalar\n * @return {Point}\n */\n scalarMultiply(scalar: number): Point {\n return new Point(this.x * scalar, this.y * scalar);\n }\n\n /**\n * Multiplies this point by a value\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarMultiplyEquals(scalar: number): Point {\n this.x *= scalar;\n this.y *= scalar;\n return this;\n }\n\n /**\n * Divides this point by another and returns a new one\n * @param {XY} that\n * @return {Point}\n */\n divide(that: XY): Point {\n return new Point(this.x / that.x, this.y / that.y);\n }\n\n /**\n * Divides this point by a value and returns a new one\n * @param {Number} scalar\n * @return {Point}\n */\n scalarDivide(scalar: number): Point {\n return new Point(this.x / scalar, this.y / scalar);\n }\n\n /**\n * Divides this point by a value\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarDivideEquals(scalar: number): Point {\n this.x /= scalar;\n this.y /= scalar;\n return this;\n }\n\n /**\n * Returns true if this point is equal to another one\n * @param {XY} that\n * @return {Boolean}\n */\n eq(that: XY): boolean {\n return this.x === that.x && this.y === that.y;\n }\n\n /**\n * Returns true if this point is less than another one\n * @param {XY} that\n * @return {Boolean}\n */\n lt(that: XY): boolean {\n return this.x < that.x && this.y < that.y;\n }\n\n /**\n * Returns true if this point is less than or equal to another one\n * @param {XY} that\n * @return {Boolean}\n */\n lte(that: XY): boolean {\n return this.x <= that.x && this.y <= that.y;\n }\n\n /**\n\n * Returns true if this point is greater another one\n * @param {XY} that\n * @return {Boolean}\n */\n gt(that: XY): boolean {\n return this.x > that.x && this.y > that.y;\n }\n\n /**\n * Returns true if this point is greater than or equal to another one\n * @param {XY} that\n * @return {Boolean}\n */\n gte(that: XY): boolean {\n return this.x >= that.x && this.y >= that.y;\n }\n\n /**\n * Returns new point which is the result of linear interpolation with this one and another one\n * @param {XY} that\n * @param {Number} t , position of interpolation, between 0 and 1 default 0.5\n * @return {Point}\n */\n lerp(that: XY, t = 0.5): Point {\n t = Math.max(Math.min(1, t), 0);\n return new Point(\n this.x + (that.x - this.x) * t,\n this.y + (that.y - this.y) * t,\n );\n }\n\n /**\n * Returns distance from this point and another one\n * @param {XY} that\n * @return {Number}\n */\n distanceFrom(that: XY): number {\n const dx = this.x - that.x,\n dy = this.y - that.y;\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n /**\n * Returns the point between this point and another one\n * @param {XY} that\n * @return {Point}\n */\n midPointFrom(that: XY): Point {\n return this.lerp(that);\n }\n\n /**\n * Returns a new point which is the min of this and another one\n * @param {XY} that\n * @return {Point}\n */\n min(that: XY): Point {\n return new Point(Math.min(this.x, that.x), Math.min(this.y, that.y));\n }\n\n /**\n * Returns a new point which is the max of this and another one\n * @param {XY} that\n * @return {Point}\n */\n max(that: XY): Point {\n return new Point(Math.max(this.x, that.x), Math.max(this.y, that.y));\n }\n\n /**\n * Returns string representation of this point\n * @return {String}\n */\n toString(): string {\n return `${this.x},${this.y}`;\n }\n\n /**\n * Sets x/y of this point\n * @param {Number} x\n * @param {Number} y\n * @chainable\n */\n setXY(x: number, y: number) {\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * Sets x of this point\n * @param {Number} x\n * @chainable\n */\n setX(x: number) {\n this.x = x;\n return this;\n }\n\n /**\n * Sets y of this point\n * @param {Number} y\n * @chainable\n */\n setY(y: number) {\n this.y = y;\n return this;\n }\n\n /**\n * Sets x/y of this point from another point\n * @param {XY} that\n * @chainable\n */\n setFromPoint(that: XY) {\n this.x = that.x;\n this.y = that.y;\n return this;\n }\n\n /**\n * Swaps x/y of this point and another point\n * @param {XY} that\n */\n swap(that: XY) {\n const x = this.x,\n y = this.y;\n this.x = that.x;\n this.y = that.y;\n that.x = x;\n that.y = y;\n }\n\n /**\n * return a cloned instance of the point\n * @return {Point}\n */\n clone(): Point {\n return new Point(this.x, this.y);\n }\n\n /**\n * Rotates `point` around `origin` with `radians`\n * @static\n * @memberOf fabric.util\n * @param {XY} origin The origin of the rotation\n * @param {TRadian} radians The radians of the angle for the rotation\n * @return {Point} The new rotated point\n */\n rotate(radians: TRadian, origin: XY = ZERO): Point {\n // TODO benchmark and verify the add and subtract how much cost\n // and then in case early return if no origin is passed\n const sinus = sin(radians),\n cosinus = cos(radians);\n const p = this.subtract(origin);\n const rotated = new Point(\n p.x * cosinus - p.y * sinus,\n p.x * sinus + p.y * cosinus,\n );\n return rotated.add(origin);\n }\n\n /**\n * Apply transform t to point p\n * @static\n * @memberOf fabric.util\n * @param {TMat2D} t The transform\n * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied\n * @return {Point} The transformed point\n */\n transform(t: TMat2D, ignoreOffset = false): Point {\n return new Point(\n t[0] * this.x + t[2] * this.y + (ignoreOffset ? 0 : t[4]),\n t[1] * this.x + t[3] * this.y + (ignoreOffset ? 0 : t[5]),\n );\n }\n}\n\nexport const ZERO = new Point(0, 0);\n","import type { Constructor, TBBox } from './typedefs';\nimport { removeFromArray } from './util/internals/removeFromArray';\nimport { Point } from './Point';\nimport type { ActiveSelection } from './shapes/ActiveSelection';\nimport type { Group } from './shapes/Group';\nimport type { InteractiveFabricObject } from './shapes/Object/InteractiveObject';\nimport type { FabricObject } from './shapes/Object/FabricObject';\n\nexport const isCollection = (\n fabricObject?: FabricObject,\n): fabricObject is Group | ActiveSelection => {\n return !!fabricObject && Array.isArray((fabricObject as Group)._objects);\n};\n\nexport function createCollectionMixin(Base: TBase) {\n class Collection extends Base {\n /**\n * @type {FabricObject[]}\n * @TODO needs to end up in the constructor too\n */\n _objects: FabricObject[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectAdded(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectRemoved(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onStackOrderChanged(object: FabricObject) {\n // subclasses should override this method\n }\n\n /**\n * Adds objects to collection\n * Objects should be instances of (or inherit from) FabricObject\n * @param {...FabricObject[]} objects to add\n * @returns {number} new array length\n */\n add(...objects: FabricObject[]): number {\n const size = this._objects.push(...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return size;\n }\n\n /**\n * Inserts an object into collection at specified index\n * @param {number} index Index to insert object at\n * @param {...FabricObject[]} objects Object(s) to insert\n * @returns {number} new array length\n */\n insertAt(index: number, ...objects: FabricObject[]) {\n this._objects.splice(index, 0, ...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return this._objects.length;\n }\n\n /**\n * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n * @private\n * @param {...FabricObject[]} objects objects to remove\n * @returns {FabricObject[]} removed objects\n */\n remove(...objects: FabricObject[]) {\n const array = this._objects,\n removed: FabricObject[] = [];\n objects.forEach((object) => {\n const index = array.indexOf(object);\n // only call onObjectRemoved if an object was actually removed\n if (index !== -1) {\n array.splice(index, 1);\n removed.push(object);\n this._onObjectRemoved(object);\n }\n });\n return removed;\n }\n\n /**\n * Executes given function for each object in this group\n * A simple shortcut for getObjects().forEach, before es6 was more complicated,\n * now is just a shortcut.\n * @param {Function} callback\n * Callback invoked with current object as first argument,\n * index - as second and an array of all objects - as third.\n */\n forEachObject(\n callback: (\n object: FabricObject,\n index: number,\n array: FabricObject[],\n ) => any,\n ) {\n this.getObjects().forEach((object, index, objects) =>\n callback(object, index, objects),\n );\n }\n\n /**\n * Returns an array of children objects of this instance\n * @param {...String} [types] When specified, only objects of these types are returned\n * @return {Array}\n */\n getObjects(...types: string[]) {\n if (types.length === 0) {\n return [...this._objects];\n }\n return this._objects.filter((o) => o.isType(...types));\n }\n\n /**\n * Returns object at specified index\n * @param {Number} index\n * @return {Object} object at index\n */\n item(index: number) {\n return this._objects[index];\n }\n\n /**\n * Returns true if collection contains no objects\n * @return {Boolean} true if collection is empty\n */\n isEmpty() {\n return this._objects.length === 0;\n }\n\n /**\n * Returns a size of a collection (i.e: length of an array containing its objects)\n * @return {Number} Collection size\n */\n size() {\n return this._objects.length;\n }\n\n /**\n * Returns true if collection contains an object.\\\n * **Prefer using {@link FabricObject#isDescendantOf} for performance reasons**\n * instead of `a.contains(b)` use `b.isDescendantOf(a)`\n * @param {Object} object Object to check against\n * @param {Boolean} [deep=false] `true` to check all descendants, `false` to check only `_objects`\n * @return {Boolean} `true` if collection contains an object\n */\n contains(object: FabricObject, deep?: boolean): boolean {\n if (this._objects.includes(object)) {\n return true;\n } else if (deep) {\n return this._objects.some(\n (obj) =>\n obj instanceof Collection &&\n (obj as unknown as Collection).contains(object, true),\n );\n }\n return false;\n }\n\n /**\n * Returns number representation of a collection complexity\n * @return {Number} complexity\n */\n complexity() {\n return this._objects.reduce((memo, current) => {\n memo += current.complexity ? current.complexity() : 0;\n return memo;\n }, 0);\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the bottom of the stack of drawn objects\n * @param {fabric.Object} object Object to send to back\n * @returns {boolean} true if change occurred\n */\n sendObjectToBack(object: FabricObject) {\n if (!object || object === this._objects[0]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.unshift(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the top of the stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @returns {boolean} true if change occurred\n */\n bringObjectToFront(object: FabricObject) {\n if (!object || object === this._objects[this._objects.length - 1]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.push(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or a selection down in stack of drawn objects\n * An optional parameter, `intersecting` allows to move the object in behind\n * the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @returns {boolean} true if change occurred\n */\n sendObjectBackwards(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== 0) {\n // if object is not on the bottom of stack\n const newIdx = this.findNewLowerIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object or a selection up in stack of drawn objects\n * An optional parameter, intersecting allows to move the object in front\n * of the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @returns {boolean} true if change occurred\n */\n bringObjectForward(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== this._objects.length - 1) {\n // if object is not on top of stack (last item in an array)\n const newIdx = this.findNewUpperIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @param {number} index Position to move to\n * @returns {boolean} true if change occurred\n */\n moveObjectTo(object: FabricObject, index: number) {\n if (object === this._objects[index]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.splice(index, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n findNewLowerIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean,\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse down the stack looking for the nearest intersecting object\n for (let i = idx - 1; i >= 0; --i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx - 1;\n }\n\n return newIdx;\n }\n\n findNewUpperIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean,\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse up the stack looking for the nearest intersecting object\n for (let i = idx + 1; i < this._objects.length; ++i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx + 1;\n }\n\n return newIdx;\n }\n\n /**\n * Given a bounding box, return all the objects of the collection that are contained in the bounding box.\n * If `includeIntersecting` is true, return also the objects that intersect the bounding box as well.\n * This is meant to work with selection. Is not a generic method.\n * @param {TBBox} bbox a bounding box in scene coordinates\n * @param {{ includeIntersecting?: boolean }} options an object with includeIntersecting\n * @returns array of objects contained in the bounding box, ordered from top to bottom stacking wise\n */\n collectObjects(\n { left, top, width, height }: TBBox,\n { includeIntersecting = true }: { includeIntersecting?: boolean } = {},\n ) {\n const objects: InteractiveFabricObject[] = [],\n tl = new Point(left, top),\n br = tl.add(new Point(width, height));\n\n // we iterate reverse order to collect top first in case of click.\n for (let i = this._objects.length - 1; i >= 0; i--) {\n const object = this._objects[i] as unknown as InteractiveFabricObject;\n if (\n object.selectable &&\n object.visible &&\n ((includeIntersecting && object.intersectsWithRect(tl, br)) ||\n object.isContainedWithinRect(tl, br) ||\n (includeIntersecting && object.containsPoint(tl)) ||\n (includeIntersecting && object.containsPoint(br)))\n ) {\n objects.push(object);\n }\n }\n\n return objects;\n }\n }\n\n // https://github.com/microsoft/TypeScript/issues/32080\n return Collection as typeof Collection & TBase;\n}\n","import { Observable } from './Observable';\n\nexport class CommonMethods extends Observable {\n /**\n * Sets object's properties from options, for initialization only\n * @protected\n * @param {Object} [options] Options object\n */\n protected _setOptions(options: any = {}) {\n for (const prop in options) {\n this.set(prop, options[prop]);\n }\n }\n\n /**\n * @private\n */\n _setObject(obj: Record) {\n for (const prop in obj) {\n this._set(prop, obj[prop]);\n }\n }\n\n /**\n * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\n * @param {String|Object} key Property name or object (if object, iterate over the object properties)\n * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\n */\n set(key: string | Record, value?: any) {\n if (typeof key === 'object') {\n this._setObject(key);\n } else {\n this._set(key, value);\n }\n return this;\n }\n\n _set(key: string, value: any) {\n this[key as keyof this] = value;\n }\n\n /**\n * Toggles specified property from `true` to `false` or from `false` to `true`\n * @param {String} property Property to toggle\n */\n toggle(property: string) {\n const value = this.get(property);\n if (typeof value === 'boolean') {\n this.set(property, !value);\n }\n return this;\n }\n\n /**\n * Basic getter\n * @param {String} property Property name\n * @return {*} value of a property\n */\n get(property: string): any {\n return this[property as keyof this];\n }\n}\n","import { getFabricWindow } from '../../env';\n\nexport function requestAnimFrame(callback: FrameRequestCallback): number {\n return getFabricWindow().requestAnimationFrame(callback);\n}\n\nexport function cancelAnimFrame(handle: number): void {\n return getFabricWindow().cancelAnimationFrame(handle);\n}\n","let id = 0;\n\nexport const uid = () => id++;\n","import { getFabricDocument } from '../../env';\nimport type { ImageFormat } from '../../typedefs';\nimport { FabricError } from '../internals/console';\n/**\n * Creates canvas element\n * @return {CanvasElement} initialized canvas element\n */\nexport const createCanvasElement = (): HTMLCanvasElement => {\n const element = getFabricDocument().createElement('canvas');\n if (!element || typeof element.getContext === 'undefined') {\n throw new FabricError('Failed to create `canvas` element');\n }\n return element;\n};\n\n/**\n * Creates image element (works on client and node)\n * @return {HTMLImageElement} HTML image element\n */\nexport const createImage = (): HTMLImageElement =>\n getFabricDocument().createElement('img');\n\n/**\n * Creates a canvas element that is a copy of another and is also painted\n * @param {CanvasElement} canvas to copy size and content of\n * @return {CanvasElement} initialized canvas element\n */\nexport const copyCanvasElement = (\n canvas: HTMLCanvasElement,\n): HTMLCanvasElement => {\n const newCanvas = createCanvasElement();\n newCanvas.width = canvas.width;\n newCanvas.height = canvas.height;\n newCanvas.getContext('2d')?.drawImage(canvas, 0, 0);\n return newCanvas;\n};\n\n/**\n * since 2.6.0 moved from canvas instance to utility.\n * possibly useless\n * @param {CanvasElement} canvasEl to copy size and content of\n * @param {String} format 'jpeg' or 'png', in some browsers 'webp' is ok too\n * @param {Number} quality <= 1 and > 0\n * @return {String} data url\n */\nexport const toDataURL = (\n canvasEl: HTMLCanvasElement,\n format: ImageFormat,\n quality: number,\n) => canvasEl.toDataURL(`image/${format}`, quality);\n\nexport const isHTMLCanvas = (\n canvas?: HTMLCanvasElement | string,\n): canvas is HTMLCanvasElement => {\n return !!canvas && (canvas as HTMLCanvasElement).getContext !== undefined;\n};\n","import type { TRadian, TDegree } from '../../typedefs';\nimport { PiBy180 } from '../../constants';\n\n/**\n * Transforms degrees to radians.\n * @param {TDegree} degrees value in degrees\n * @return {TRadian} value in radians\n */\nexport const degreesToRadians = (degrees: TDegree): TRadian =>\n (degrees * PiBy180) as TRadian;\n\n/**\n * Transforms radians to degrees.\n * @param {TRadian} radians value in radians\n * @return {TDegree} value in degrees\n */\nexport const radiansToDegrees = (radians: TRadian): TDegree =>\n (radians / PiBy180) as TDegree;\n","import { iMatrix } from '../../constants';\nimport type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport type { TDegree, TRadian, TMat2D } from '../../typedefs';\nimport { cos } from './cos';\nimport { degreesToRadians, radiansToDegrees } from './radiansDegreesConversion';\nimport { sin } from './sin';\n\nexport type TRotateMatrixArgs = {\n angle?: TDegree;\n};\n\nexport type TTranslateMatrixArgs = {\n translateX?: number;\n translateY?: number;\n};\n\nexport type TScaleMatrixArgs = {\n scaleX?: number;\n scaleY?: number;\n flipX?: boolean;\n flipY?: boolean;\n skewX?: TDegree;\n skewY?: TDegree;\n};\n\nexport type TComposeMatrixArgs = TTranslateMatrixArgs &\n TRotateMatrixArgs &\n TScaleMatrixArgs;\n\nexport type TQrDecomposeOut = Required<\n Omit\n>;\n\nexport const isIdentityMatrix = (mat: TMat2D) =>\n mat.every((value, index) => value === iMatrix[index]);\n\n/**\n * Apply transform t to point p\n * @deprecated use {@link Point#transform}\n * @param {Point | XY} p The point to transform\n * @param {Array} t The transform\n * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied\n * @return {Point} The transformed point\n */\nexport const transformPoint = (\n p: XY,\n t: TMat2D,\n ignoreOffset?: boolean,\n): Point => new Point(p).transform(t, ignoreOffset);\n\n/**\n * Invert transformation t\n * @param {Array} t The transform\n * @return {Array} The inverted transform\n */\nexport const invertTransform = (t: TMat2D): TMat2D => {\n const a = 1 / (t[0] * t[3] - t[1] * t[2]),\n r = [a * t[3], -a * t[1], -a * t[2], a * t[0], 0, 0] as TMat2D,\n { x, y } = new Point(t[4], t[5]).transform(r, true);\n r[4] = -x;\n r[5] = -y;\n return r;\n};\n\n/**\n * Multiply matrix A by matrix B to nest transformations\n * @param {TMat2D} a First transformMatrix\n * @param {TMat2D} b Second transformMatrix\n * @param {Boolean} is2x2 flag to multiply matrices as 2x2 matrices\n * @return {TMat2D} The product of the two transform matrices\n */\nexport const multiplyTransformMatrices = (\n a: TMat2D,\n b: TMat2D,\n is2x2?: boolean,\n): TMat2D =>\n [\n a[0] * b[0] + a[2] * b[1],\n a[1] * b[0] + a[3] * b[1],\n a[0] * b[2] + a[2] * b[3],\n a[1] * b[2] + a[3] * b[3],\n is2x2 ? 0 : a[0] * b[4] + a[2] * b[5] + a[4],\n is2x2 ? 0 : a[1] * b[4] + a[3] * b[5] + a[5],\n ] as TMat2D;\n\n/**\n * Multiplies {@link matrices} such that a matrix defines the plane for the rest of the matrices **after** it\n *\n * `multiplyTransformMatrixArray([A, B, C, D])` is equivalent to `A(B(C(D)))`\n *\n * @param matrices an array of matrices\n * @param [is2x2] flag to multiply matrices as 2x2 matrices\n * @returns the multiplication product\n */\nexport const multiplyTransformMatrixArray = (\n matrices: (TMat2D | undefined | null | false)[],\n is2x2?: boolean,\n) =>\n matrices.reduceRight(\n (product: TMat2D, curr) =>\n curr && product\n ? multiplyTransformMatrices(curr, product, is2x2)\n : curr || product,\n undefined as unknown as TMat2D,\n ) || iMatrix.concat();\n\nexport const calcPlaneRotation = ([a, b]: TMat2D) =>\n Math.atan2(b, a) as TRadian;\n\n/**\n * Decomposes standard 2x3 matrix into transform components\n * @param {TMat2D} a transformMatrix\n * @return {Object} Components of transform\n */\nexport const qrDecompose = (a: TMat2D): TQrDecomposeOut => {\n const angle = calcPlaneRotation(a),\n denom = Math.pow(a[0], 2) + Math.pow(a[1], 2),\n scaleX = Math.sqrt(denom),\n scaleY = (a[0] * a[3] - a[2] * a[1]) / scaleX,\n skewX = Math.atan2(a[0] * a[2] + a[1] * a[3], denom);\n return {\n angle: radiansToDegrees(angle),\n scaleX,\n scaleY,\n skewX: radiansToDegrees(skewX),\n skewY: 0 as TDegree,\n translateX: a[4] || 0,\n translateY: a[5] || 0,\n };\n};\n\n/**\n * Generate a translation matrix\n *\n * A translation matrix in the form of\n * [ 1 0 x ]\n * [ 0 1 y ]\n * [ 0 0 1 ]\n *\n * See @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#translate for more details\n *\n * @param {number} x translation on X axis\n * @param {number} [y] translation on Y axis\n * @returns {TMat2D} matrix\n */\nexport const createTranslateMatrix = (x: number, y = 0): TMat2D => [\n 1,\n 0,\n 0,\n 1,\n x,\n y,\n];\n\n/**\n * Generate a rotation matrix around around a point (x,y), defaulting to (0,0)\n *\n * A matrix in the form of\n * [cos(a) -sin(a) -x*cos(a)+y*sin(a)+x]\n * [sin(a) cos(a) -x*sin(a)-y*cos(a)+y]\n * [0 0 1 ]\n *\n *\n * @param {TDegree} angle rotation in degrees\n * @param {XY} [pivotPoint] pivot point to rotate around\n * @returns {TMat2D} matrix\n */\nexport function createRotateMatrix(\n { angle = 0 }: TRotateMatrixArgs = {},\n { x = 0, y = 0 }: Partial = {},\n): TMat2D {\n const angleRadiant = degreesToRadians(angle),\n cosValue = cos(angleRadiant),\n sinValue = sin(angleRadiant);\n return [\n cosValue,\n sinValue,\n -sinValue,\n cosValue,\n x ? x - (cosValue * x - sinValue * y) : 0,\n y ? y - (sinValue * x + cosValue * y) : 0,\n ];\n}\n\n/**\n * Generate a scale matrix around the point (0,0)\n *\n * A matrix in the form of\n * [x 0 0]\n * [0 y 0]\n * [0 0 1]\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#scale\n *\n * @param {number} x scale on X axis\n * @param {number} [y] scale on Y axis\n * @returns {TMat2D} matrix\n */\nexport const createScaleMatrix = (x: number, y: number = x): TMat2D => [\n x,\n 0,\n 0,\n y,\n 0,\n 0,\n];\n\nexport const angleToSkew = (angle: TDegree) =>\n Math.tan(degreesToRadians(angle));\n\nexport const skewToAngle = (value: TRadian) =>\n radiansToDegrees(Math.atan(value));\n\n/**\n * Generate a skew matrix for the X axis\n *\n * A matrix in the form of\n * [1 x 0]\n * [0 1 0]\n * [0 0 1]\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#skewx\n *\n * @param {TDegree} skewValue translation on X axis\n * @returns {TMat2D} matrix\n */\nexport const createSkewXMatrix = (skewValue: TDegree): TMat2D => [\n 1,\n 0,\n angleToSkew(skewValue),\n 1,\n 0,\n 0,\n];\n\n/**\n * Generate a skew matrix for the Y axis\n *\n * A matrix in the form of\n * [1 0 0]\n * [y 1 0]\n * [0 0 1]\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#skewy\n *\n * @param {TDegree} skewValue translation on Y axis\n * @returns {TMat2D} matrix\n */\nexport const createSkewYMatrix = (skewValue: TDegree): TMat2D => [\n 1,\n angleToSkew(skewValue),\n 0,\n 1,\n 0,\n 0,\n];\n\n/**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet.\n * is called DimensionsTransformMatrix because those properties are the one that influence\n * the size of the resulting box of the object.\n * @param {Object} options\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewY]\n * @return {Number[]} transform matrix\n */\nexport const calcDimensionsMatrix = ({\n scaleX = 1,\n scaleY = 1,\n flipX = false,\n flipY = false,\n skewX = 0 as TDegree,\n skewY = 0 as TDegree,\n}: TScaleMatrixArgs) => {\n let matrix = createScaleMatrix(\n flipX ? -scaleX : scaleX,\n flipY ? -scaleY : scaleY,\n );\n if (skewX) {\n matrix = multiplyTransformMatrices(matrix, createSkewXMatrix(skewX), true);\n }\n if (skewY) {\n matrix = multiplyTransformMatrices(matrix, createSkewYMatrix(skewY), true);\n }\n return matrix;\n};\n\n/**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet\n * Before changing this function look at: src/benchmarks/calcTransformMatrix.mjs\n * @param {Object} options\n * @param {Number} [options.angle]\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewY]\n * @param {Number} [options.translateX]\n * @param {Number} [options.translateY]\n * @return {Number[]} transform matrix\n */\nexport const composeMatrix = (options: TComposeMatrixArgs): TMat2D => {\n const { translateX = 0, translateY = 0, angle = 0 as TDegree } = options;\n let matrix = createTranslateMatrix(translateX, translateY);\n if (angle) {\n matrix = multiplyTransformMatrices(matrix, createRotateMatrix({ angle }));\n }\n const scaleMatrix = calcDimensionsMatrix(options);\n if (!isIdentityMatrix(scaleMatrix)) {\n matrix = multiplyTransformMatrices(matrix, scaleMatrix);\n }\n return matrix;\n};\n","import { noop } from '../../constants';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport type {\n Abortable,\n Constructor,\n TCrossOrigin,\n TFiller,\n} from '../../typedefs';\nimport { createImage } from './dom';\nimport { classRegistry } from '../../ClassRegistry';\nimport type { BaseFilter } from '../../filters/BaseFilter';\nimport type { FabricObject as BaseFabricObject } from '../../shapes/Object/Object';\nimport { FabricError, SignalAbortedError } from '../internals/console';\nimport type { Shadow } from '../../Shadow';\n\nexport type LoadImageOptions = Abortable & {\n /**\n * cors value for the image loading, default to anonymous\n */\n crossOrigin?: TCrossOrigin;\n};\n\n/**\n * Loads image element from given url and resolve it, or catch.\n * @param {String} url URL representing an image\n * @param {LoadImageOptions} [options] image loading options\n * @returns {Promise} the loaded image.\n */\nexport const loadImage = (\n url: string,\n { signal, crossOrigin = null }: LoadImageOptions = {},\n) =>\n new Promise(function (resolve, reject) {\n if (signal && signal.aborted) {\n return reject(new SignalAbortedError('loadImage'));\n }\n const img = createImage();\n let abort: EventListenerOrEventListenerObject;\n if (signal) {\n abort = function (err: Event) {\n img.src = '';\n reject(err);\n };\n signal.addEventListener('abort', abort, { once: true });\n }\n const done = function () {\n img.onload = img.onerror = null;\n abort && signal?.removeEventListener('abort', abort);\n resolve(img);\n };\n if (!url) {\n done();\n return;\n }\n img.onload = done;\n img.onerror = function () {\n abort && signal?.removeEventListener('abort', abort);\n reject(new FabricError(`Error loading ${img.src}`));\n };\n crossOrigin && (img.crossOrigin = crossOrigin);\n img.src = url;\n });\n\nexport type EnlivenObjectOptions = Abortable & {\n /**\n * Method for further parsing of object elements,\n * called after each fabric object created.\n */\n reviver?: <\n T extends\n | BaseFabricObject\n | FabricObject\n | BaseFilter\n | Shadow\n | TFiller,\n >(\n serializedObj: Record,\n instance: T,\n ) => void;\n};\n\n/**\n * @TODO type this correctly.\n * Creates corresponding fabric instances from their object representations\n * @param {Object[]} objects Objects to enliven\n * @param {EnlivenObjectOptions} [options]\n * @param {(serializedObj: object, instance: FabricObject) => any} [options.reviver] Method for further parsing of object elements,\n * called after each fabric object created.\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\nexport const enlivenObjects = <\n T extends\n | BaseFabricObject\n | FabricObject\n | BaseFilter\n | Shadow\n | TFiller,\n>(\n objects: any[],\n { signal, reviver = noop }: EnlivenObjectOptions = {},\n) =>\n new Promise((resolve, reject) => {\n const instances: T[] = [];\n signal && signal.addEventListener('abort', reject, { once: true });\n Promise.all(\n objects.map((obj) =>\n classRegistry\n .getClass<\n Constructor & {\n fromObject(options: any, context: Abortable): Promise;\n }\n >(obj.type)\n .fromObject(obj, { signal })\n .then((fabricInstance) => {\n reviver(obj, fabricInstance);\n instances.push(fabricInstance);\n return fabricInstance;\n }),\n ),\n )\n .then(resolve)\n .catch((error) => {\n // cleanup\n instances.forEach((instance) => {\n (instance as FabricObject).dispose &&\n (instance as FabricObject).dispose();\n });\n reject(error);\n })\n .finally(() => {\n signal && signal.removeEventListener('abort', reject);\n });\n });\n\n/**\n * Creates corresponding fabric instances residing in an object, e.g. `clipPath`\n * @param {Object} object with properties to enlive ( fill, stroke, clipPath, path )\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise>} the input object with enlived values\n */\nexport const enlivenObjectEnlivables = <\n R = Record,\n>(\n serializedObject: any,\n { signal }: Abortable = {},\n) =>\n new Promise((resolve, reject) => {\n const instances: (FabricObject | TFiller | Shadow)[] = [];\n signal && signal.addEventListener('abort', reject, { once: true });\n // enlive every possible property\n const promises = Object.values(serializedObject).map((value: any) => {\n if (!value) {\n return value;\n }\n /**\n * clipPath or shadow or gradient or text on a path or a pattern,\n * or the backgroundImage or overlayImage of canvas\n * If we have a type and there is a classe registered for it, we enlive it.\n * If there is no class registered for it we return the value as is\n * */\n if (value.type && classRegistry.has(value.type)) {\n return enlivenObjects([value], {\n signal,\n }).then(([enlived]) => {\n instances.push(enlived);\n return enlived;\n });\n }\n return value;\n });\n const keys = Object.keys(serializedObject);\n Promise.all(promises)\n .then((enlived) => {\n return enlived.reduce((acc, instance, index) => {\n acc[keys[index]] = instance;\n return acc;\n }, {});\n })\n .then(resolve)\n .catch((error) => {\n // cleanup\n instances.forEach((instance: any) => {\n instance.dispose && instance.dispose();\n });\n reject(error);\n })\n .finally(() => {\n signal && signal.removeEventListener('abort', reject);\n });\n });\n","/**\n * Populates an object with properties of another object\n * @param {Object} source Source object\n * @param {string[]} properties Properties names to include\n * @returns object populated with the picked keys\n */\nexport const pick = >(\n source: T,\n keys: (keyof T)[] = [],\n) => {\n return keys.reduce((o, key) => {\n if (key in source) {\n o[key] = source[key];\n }\n return o;\n }, {} as Partial);\n};\n\nexport const pickBy = >(\n source: T,\n predicate: (value: T[K], key: K, collection: T) => boolean,\n) => {\n return (Object.keys(source) as (keyof T)[]).reduce((o, key) => {\n if (predicate(source[key], key, source)) {\n o[key] = source[key];\n }\n return o;\n }, {} as Partial);\n};\n","/**\n * Map of the 148 color names with HEX code\n * @see: https://www.w3.org/TR/css3-color/#svg-color\n */\nexport const ColorNameMap = {\n aliceblue: '#F0F8FF',\n antiquewhite: '#FAEBD7',\n aqua: '#0FF',\n aquamarine: '#7FFFD4',\n azure: '#F0FFFF',\n beige: '#F5F5DC',\n bisque: '#FFE4C4',\n black: '#000',\n blanchedalmond: '#FFEBCD',\n blue: '#00F',\n blueviolet: '#8A2BE2',\n brown: '#A52A2A',\n burlywood: '#DEB887',\n cadetblue: '#5F9EA0',\n chartreuse: '#7FFF00',\n chocolate: '#D2691E',\n coral: '#FF7F50',\n cornflowerblue: '#6495ED',\n cornsilk: '#FFF8DC',\n crimson: '#DC143C',\n cyan: '#0FF',\n darkblue: '#00008B',\n darkcyan: '#008B8B',\n darkgoldenrod: '#B8860B',\n darkgray: '#A9A9A9',\n darkgrey: '#A9A9A9',\n darkgreen: '#006400',\n darkkhaki: '#BDB76B',\n darkmagenta: '#8B008B',\n darkolivegreen: '#556B2F',\n darkorange: '#FF8C00',\n darkorchid: '#9932CC',\n darkred: '#8B0000',\n darksalmon: '#E9967A',\n darkseagreen: '#8FBC8F',\n darkslateblue: '#483D8B',\n darkslategray: '#2F4F4F',\n darkslategrey: '#2F4F4F',\n darkturquoise: '#00CED1',\n darkviolet: '#9400D3',\n deeppink: '#FF1493',\n deepskyblue: '#00BFFF',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1E90FF',\n firebrick: '#B22222',\n floralwhite: '#FFFAF0',\n forestgreen: '#228B22',\n fuchsia: '#F0F',\n gainsboro: '#DCDCDC',\n ghostwhite: '#F8F8FF',\n gold: '#FFD700',\n goldenrod: '#DAA520',\n gray: '#808080',\n grey: '#808080',\n green: '#008000',\n greenyellow: '#ADFF2F',\n honeydew: '#F0FFF0',\n hotpink: '#FF69B4',\n indianred: '#CD5C5C',\n indigo: '#4B0082',\n ivory: '#FFFFF0',\n khaki: '#F0E68C',\n lavender: '#E6E6FA',\n lavenderblush: '#FFF0F5',\n lawngreen: '#7CFC00',\n lemonchiffon: '#FFFACD',\n lightblue: '#ADD8E6',\n lightcoral: '#F08080',\n lightcyan: '#E0FFFF',\n lightgoldenrodyellow: '#FAFAD2',\n lightgray: '#D3D3D3',\n lightgrey: '#D3D3D3',\n lightgreen: '#90EE90',\n lightpink: '#FFB6C1',\n lightsalmon: '#FFA07A',\n lightseagreen: '#20B2AA',\n lightskyblue: '#87CEFA',\n lightslategray: '#789',\n lightslategrey: '#789',\n lightsteelblue: '#B0C4DE',\n lightyellow: '#FFFFE0',\n lime: '#0F0',\n limegreen: '#32CD32',\n linen: '#FAF0E6',\n magenta: '#F0F',\n maroon: '#800000',\n mediumaquamarine: '#66CDAA',\n mediumblue: '#0000CD',\n mediumorchid: '#BA55D3',\n mediumpurple: '#9370DB',\n mediumseagreen: '#3CB371',\n mediumslateblue: '#7B68EE',\n mediumspringgreen: '#00FA9A',\n mediumturquoise: '#48D1CC',\n mediumvioletred: '#C71585',\n midnightblue: '#191970',\n mintcream: '#F5FFFA',\n mistyrose: '#FFE4E1',\n moccasin: '#FFE4B5',\n navajowhite: '#FFDEAD',\n navy: '#000080',\n oldlace: '#FDF5E6',\n olive: '#808000',\n olivedrab: '#6B8E23',\n orange: '#FFA500',\n orangered: '#FF4500',\n orchid: '#DA70D6',\n palegoldenrod: '#EEE8AA',\n palegreen: '#98FB98',\n paleturquoise: '#AFEEEE',\n palevioletred: '#DB7093',\n papayawhip: '#FFEFD5',\n peachpuff: '#FFDAB9',\n peru: '#CD853F',\n pink: '#FFC0CB',\n plum: '#DDA0DD',\n powderblue: '#B0E0E6',\n purple: '#800080',\n rebeccapurple: '#639',\n red: '#F00',\n rosybrown: '#BC8F8F',\n royalblue: '#4169E1',\n saddlebrown: '#8B4513',\n salmon: '#FA8072',\n sandybrown: '#F4A460',\n seagreen: '#2E8B57',\n seashell: '#FFF5EE',\n sienna: '#A0522D',\n silver: '#C0C0C0',\n skyblue: '#87CEEB',\n slateblue: '#6A5ACD',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#FFFAFA',\n springgreen: '#00FF7F',\n steelblue: '#4682B4',\n tan: '#D2B48C',\n teal: '#008080',\n thistle: '#D8BFD8',\n tomato: '#FF6347',\n turquoise: '#40E0D0',\n violet: '#EE82EE',\n wheat: '#F5DEB3',\n white: '#FFF',\n whitesmoke: '#F5F5F5',\n yellow: '#FF0',\n yellowgreen: '#9ACD32',\n};\n","/**\n * Regex matching color in RGB or RGBA formats (ex: `rgb(0, 0, 0)`, `rgba(255, 100, 10, 0.5)`, `rgba( 255 , 100 , 10 , 0.5 )`, `rgb(1,1,1)`, `rgba(100%, 60%, 10%, 0.5)`)\n * Also matching rgba(r g b / a) as per new specs\n * https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/rgb\n * Formal syntax at the time of writing:\n * =\n * rgb( [ | none ]{3} [ / [ | none ] ]? ) |\n * rgb( [ | none ]{3} [ / [ | none ] ]? )\n * = | \n *\n * For learners this is how you can read this regex\n * Regular expression for matching an rgba or rgb CSS color value\n *\n * /^ # Beginning of the string\n * rgba? # \"rgb\" or \"rgba\"\n * \\(\\s* # Opening parenthesis and optional whitespace\n * (\\d{0,3} # 0 to three digits R channel\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for the first color component\n * %? # Optional percent sign after the first color component\n * \\s* # Optional whitespace\n * [\\s|,] # Separator between color components can be a space or comma\n * \\s* # Optional whitespace\n * (\\d{0,3} # 0 to three digits G channel\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for the second color component\n * %? # Optional percent sign after the second color component\n * \\s* # Optional whitespace\n * [\\s|,] # Separator between color components can be a space or comma\n * \\s* # Optional whitespace\n * (\\d{0,3} # 0 to three digits B channel\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for the third color component\n * %? # Optional percent sign after the third color component\n * \\s* # Optional whitespace\n * (?: # Beginning of non-capturing group for alpha value\n * \\s* # Optional whitespace\n * [,/] # Comma or slash separator for alpha value\n * \\s* # Optional whitespace\n * (\\d{0,3} # Zero to three digits\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for alpha value\n * %? # Optional percent sign after alpha value\n * \\s* # Optional whitespace\n * )? # End of non-capturing group for alpha value (optional)\n * \\) # Closing parenthesis\n * $ # End of the string\n *\n * The alpha channel can be in the format 0.4 .7 or 1 or 73%\n *\n * WARNING this regex doesn't fail on off spec colors. it matches everything that could be a color.\n * So the spec does not allow for `rgba(30 , 45% 35, 49%)` but this will work anyways for us\n */\nexport const reRGBa = () =>\n /^rgba?\\(\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*(?:\\s*[,/]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*)?\\)$/i;\n\n/**\n * Regex matching color in HSL or HSLA formats (ex: hsl(0, 0, 0), rgba(255, 100, 10, 0.5), rgba( 255 , 100 , 10 , 0.5 ), rgb(1,1,1), rgba(100%, 60%, 10%, 0.5))\n * Also matching rgba(r g b / a) as per new specs\n * https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/hsl\n * Formal syntax at the time of writing:\n * =\n * hsl( [ | none ] [ | none ] [ | none ] [ / [ | none ] ]? )\n *\n * =\n * |\n * \n *\n * =\n * |\n * \n *\n * For learners this is how you can read this regex\n * Regular expression for matching an hsla or hsl CSS color value\n *\n * /^hsla?\\( // Matches the beginning of the string and the opening parenthesis of \"hsl\" or \"hsla\"\n * \\s* // Matches any whitespace characters (space, tab, etc.) zero or more times\n * (\\d{0,3} // Hue: 0 to three digits - start capture in a group\n * (?:\\.\\d+)? // Hue: Optional (non capture group) decimal with one or more digits.\n * (?:deg|turn|rad)? // Hue: Optionally include suffix deg or turn or rad\n * ) // Hue: End capture group\n * \\s* // Matches any whitespace characters zero or more times\n * [\\s|,] // Matches a space, tab or comma\n * \\s* // Matches any whitespace characters zero or more times\n * (\\d{0,3} // Saturation: 0 to three digits - start capture in a group\n * (?:\\.\\d+)? // Saturation: Optional decimal with one or more digits in a non-capturing group\n * %?) // Saturation: match optional % character and end capture group\n * \\s* // Matches any whitespace characters zero or more times\n * [\\s|,] // Matches a space, tab or comma\n * \\s* // Matches any whitespace characters zero or more times\n * (\\d{0,3} // Lightness: 0 to three digits - start capture in a group\n * (?:\\.\\d+)? // Lightness: Optional decimal with one or more digits in a non-capturing group\n * %?) // Lightness: match % character and end capture group\n * \\s* // Matches any whitespace characters zero or more times\n * (?: // Alpha: Begins a non-capturing group for the alpha value\n * \\s* // Matches any whitespace characters zero or more times\n * [,/] // Matches a comma or forward slash\n * \\s* // Matches any whitespace characters zero or more times\n * (\\d*(?:\\.\\d+)?%?) // Matches zero or more digits, optionally followed by a decimal point and one or more digits, followed by an optional percentage sign and captures it in a group\n * \\s* // Matches any whitespace characters zero or more times\n * )? // Makes the alpha value group optional\n * \\) // Matches the closing parenthesis\n * $/i // Matches the end of the string and sets the regular expression to case-insensitive mode\n *\n * WARNING this regex doesn't fail on off spec colors. It matches everything that could be a color.\n * So the spec does not allow `hsl(30 , 45% 35, 49%)` but this will work anyways for us.\n */\nexport const reHSLa = () =>\n /^hsla?\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?(?:deg|turn|rad)?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*(?:\\s*[,/]\\s*(\\d*(?:\\.\\d+)?%?)\\s*)?\\)$/i;\n\n/**\n * Regex matching color in HEX format (ex: #FF5544CC, #FF5555, 010155, aff)\n */\nexport const reHex = () => /^#?(([0-9a-f]){3,4}|([0-9a-f]{2}){3,4})$/i;\n","import type { TRGBAColorSource } from './typedefs';\n\n/**\n * @param {Number} p\n * @param {Number} q\n * @param {Number} t\n * @return {Number}\n */\nexport const hue2rgb = (p: number, q: number, t: number): number => {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n};\n\n/**\n * Adapted from {@link https://gist.github.com/mjackson/5311256 https://gist.github.com/mjackson}\n * @param {Number} r Red color value\n * @param {Number} g Green color value\n * @param {Number} b Blue color value\n * @param {Number} a Alpha color value pass through\n * @return {TRGBColorSource} Hsl color\n */\nexport const rgb2Hsl = (\n r: number,\n g: number,\n b: number,\n a: number,\n): TRGBAColorSource => {\n r /= 255;\n g /= 255;\n b /= 255;\n const maxValue = Math.max(r, g, b),\n minValue = Math.min(r, g, b);\n\n let h!: number, s: number;\n const l = (maxValue + minValue) / 2;\n\n if (maxValue === minValue) {\n h = s = 0; // achromatic\n } else {\n const d = maxValue - minValue;\n s = l > 0.5 ? d / (2 - maxValue - minValue) : d / (maxValue + minValue);\n switch (maxValue) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return [Math.round(h * 360), Math.round(s * 100), Math.round(l * 100), a];\n};\n\nexport const fromAlphaToFloat = (value = '1') =>\n parseFloat(value) / (value.endsWith('%') ? 100 : 1);\n\n/**\n * Convert a value in the inclusive range [0, 255] to hex\n */\nexport const hexify = (value: number) =>\n Math.min(Math.round(value), 255).toString(16).toUpperCase().padStart(2, '0');\n\n/**\n * Calculate the grey average value for rgb and pass through alpha\n */\nexport const greyAverage = ([\n r,\n g,\n b,\n a = 1,\n]: TRGBAColorSource): TRGBAColorSource => {\n const avg = Math.round(r * 0.3 + g * 0.59 + b * 0.11);\n return [avg, avg, avg, a];\n};\n","import { radiansToDegrees } from '../util/misc/radiansDegreesConversion';\nimport { ColorNameMap } from './color_map';\nimport { reHSLa, reHex, reRGBa } from './constants';\nimport type { TRGBAColorSource, TColorArg } from './typedefs';\nimport {\n hue2rgb,\n hexify,\n rgb2Hsl,\n fromAlphaToFloat,\n greyAverage,\n} from './util';\n\n/**\n * @class Color common color operations\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2/#colors colors}\n */\nexport class Color {\n private declare _source: TRGBAColorSource;\n isUnrecognised = false;\n\n /**\n *\n * @param {string} [color] optional in hex or rgb(a) or hsl format or from known color list\n */\n constructor(color?: TColorArg) {\n if (!color) {\n // we default to black as canvas does\n this.setSource([0, 0, 0, 1]);\n } else if (color instanceof Color) {\n this.setSource([...color._source]);\n } else if (Array.isArray(color)) {\n const [r, g, b, a = 1] = color;\n this.setSource([r, g, b, a]);\n } else {\n this.setSource(this._tryParsingColor(color));\n }\n }\n\n /**\n * @private\n * @param {string} [color] Color value to parse\n * @returns {TRGBAColorSource}\n */\n protected _tryParsingColor(color: string) {\n if (color in ColorNameMap) {\n color = ColorNameMap[color as keyof typeof ColorNameMap];\n }\n return color === 'transparent'\n ? ([255, 255, 255, 0] as TRGBAColorSource)\n : Color.sourceFromHex(color) ||\n Color.sourceFromRgb(color) ||\n Color.sourceFromHsl(color) ||\n // color is not recognized\n // we default to black as canvas does\n // eslint-disable-next-line no-constant-binary-expression\n ((this.isUnrecognised = true) && ([0, 0, 0, 1] as TRGBAColorSource));\n }\n\n /**\n * Returns source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n * @return {TRGBAColorSource}\n */\n getSource() {\n return this._source;\n }\n\n /**\n * Sets source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n * @param {TRGBAColorSource} source\n */\n setSource(source: TRGBAColorSource) {\n this._source = source;\n }\n\n /**\n * Returns color representation in RGB format\n * @return {String} ex: rgb(0-255,0-255,0-255)\n */\n toRgb() {\n const [r, g, b] = this.getSource();\n return `rgb(${r},${g},${b})`;\n }\n\n /**\n * Returns color representation in RGBA format\n * @return {String} ex: rgba(0-255,0-255,0-255,0-1)\n */\n toRgba() {\n return `rgba(${this.getSource().join(',')})`;\n }\n\n /**\n * Returns color representation in HSL format\n * @return {String} ex: hsl(0-360,0%-100%,0%-100%)\n */\n toHsl() {\n const [h, s, l] = rgb2Hsl(...this.getSource());\n return `hsl(${h},${s}%,${l}%)`;\n }\n\n /**\n * Returns color representation in HSLA format\n * @return {String} ex: hsla(0-360,0%-100%,0%-100%,0-1)\n */\n toHsla() {\n const [h, s, l, a] = rgb2Hsl(...this.getSource());\n return `hsla(${h},${s}%,${l}%,${a})`;\n }\n\n /**\n * Returns color representation in HEX format\n * @return {String} ex: FF5555\n */\n toHex() {\n const fullHex = this.toHexa();\n return fullHex.slice(0, 6);\n }\n\n /**\n * Returns color representation in HEXA format\n * @return {String} ex: FF5555CC\n */\n toHexa() {\n const [r, g, b, a] = this.getSource();\n return `${hexify(r)}${hexify(g)}${hexify(b)}${hexify(Math.round(a * 255))}`;\n }\n\n /**\n * Gets value of alpha channel for this color\n * @return {Number} 0-1\n */\n getAlpha() {\n return this.getSource()[3];\n }\n\n /**\n * Sets value of alpha channel for this color\n * @param {Number} alpha Alpha value 0-1\n * @return {Color} thisArg\n */\n setAlpha(alpha: number) {\n this._source[3] = alpha;\n return this;\n }\n\n /**\n * Transforms color to its grayscale representation\n * @return {Color} thisArg\n */\n toGrayscale() {\n this.setSource(greyAverage(this.getSource()));\n return this;\n }\n\n /**\n * Transforms color to its black and white representation\n * @param {Number} threshold\n * @return {Color} thisArg\n */\n toBlackWhite(threshold: number) {\n const [average, , , a] = greyAverage(this.getSource()),\n bOrW = average < (threshold || 127) ? 0 : 255;\n this.setSource([bOrW, bOrW, bOrW, a]);\n return this;\n }\n\n /**\n * Overlays color with another color\n * @param {String|Color} otherColor\n * @return {Color} thisArg\n */\n overlayWith(otherColor: string | Color) {\n if (!(otherColor instanceof Color)) {\n otherColor = new Color(otherColor);\n }\n\n const source = this.getSource(),\n otherAlpha = 0.5,\n otherSource = otherColor.getSource(),\n [R, G, B] = source.map((value, index) =>\n Math.round(value * (1 - otherAlpha) + otherSource[index] * otherAlpha),\n );\n\n this.setSource([R, G, B, source[3]]);\n return this;\n }\n\n /**\n * Returns new color object, when given a color in RGB format\n * @memberOf Color\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255)\n * @return {Color}\n */\n static fromRgb(color: string): Color {\n return Color.fromRgba(color);\n }\n\n /**\n * Returns new color object, when given a color in RGBA format\n * @static\n * @function\n * @memberOf Color\n * @param {String} color\n * @return {Color}\n */\n static fromRgba(color: string): Color {\n return new Color(Color.sourceFromRgb(color));\n }\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in RGB or RGBA format\n * @memberOf Color\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255), rgb(0%-100%,0%-100%,0%-100%)\n * @return {TRGBAColorSource | undefined} source\n */\n static sourceFromRgb(color: string): TRGBAColorSource | undefined {\n const match = color.match(reRGBa());\n if (match) {\n const [r, g, b] = match.slice(1, 4).map((value) => {\n const parsedValue = parseFloat(value);\n return value.endsWith('%')\n ? Math.round(parsedValue * 2.55)\n : parsedValue;\n });\n return [r, g, b, fromAlphaToFloat(match[4])];\n }\n }\n\n /**\n * Returns new color object, when given a color in HSL format\n * @param {String} color Color value ex: hsl(0-260,0%-100%,0%-100%)\n * @memberOf Color\n * @return {Color}\n */\n static fromHsl(color: string): Color {\n return Color.fromHsla(color);\n }\n\n /**\n * Returns new color object, when given a color in HSLA format\n * @static\n * @function\n * @memberOf Color\n * @param {String} color\n * @return {Color}\n */\n static fromHsla(color: string): Color {\n return new Color(Color.sourceFromHsl(color));\n }\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HSL or HSLA format.\n * Adapted from https://github.com/mjijackson\n * @memberOf Color\n * @param {String} color Color value ex: hsl(0-360,0%-100%,0%-100%) or hsla(0-360,0%-100%,0%-100%, 0-1)\n * @return {TRGBAColorSource | undefined} source\n * @see http://http://www.w3.org/TR/css3-color/#hsl-color\n */\n static sourceFromHsl(color: string): TRGBAColorSource | undefined {\n const match = color.match(reHSLa());\n if (!match) {\n return;\n }\n const match1degrees = Color.parseAngletoDegrees(match[1]);\n\n const h = (((match1degrees % 360) + 360) % 360) / 360,\n s = parseFloat(match[2]) / 100,\n l = parseFloat(match[3]) / 100;\n let r: number, g: number, b: number;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const q = l <= 0.5 ? l * (s + 1) : l + s - l * s,\n p = l * 2 - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n fromAlphaToFloat(match[4]),\n ];\n }\n\n /**\n * Returns new color object, when given a color in HEX format\n * @static\n * @memberOf Color\n * @param {String} color Color value ex: FF5555\n * @return {Color}\n */\n static fromHex(color: string): Color {\n return new Color(Color.sourceFromHex(color));\n }\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HEX format\n * @static\n * @memberOf Color\n * @param {String} color ex: FF5555 or FF5544CC (RGBa)\n * @return {TRGBAColorSource | undefined} source\n */\n static sourceFromHex(color: string): TRGBAColorSource | undefined {\n if (color.match(reHex())) {\n const value = color.slice(color.indexOf('#') + 1),\n isShortNotation = value.length <= 4;\n let expandedValue: string[];\n if (isShortNotation) {\n expandedValue = value.split('').map((hex) => hex + hex);\n } else {\n expandedValue = value.match(/.{2}/g)!;\n }\n const [r, g, b, a = 255] = expandedValue.map((hexCouple) =>\n parseInt(hexCouple, 16),\n );\n return [r, g, b, a / 255];\n }\n }\n\n /**\n * Converts a string that could be any angle notation (50deg, 0.5turn, 2rad)\n * into degrees without the 'deg' suffix\n * @static\n * @memberOf Color\n * @param {String} value ex: 0deg, 0.5turn, 2rad\n * @return {Number} number in degrees or NaN if inputs are invalid\n */\n static parseAngletoDegrees(value: string): number {\n const lowercase = value.toLowerCase();\n const numeric = parseFloat(lowercase);\n\n if (lowercase.includes('rad')) {\n return radiansToDegrees(numeric);\n }\n\n if (lowercase.includes('turn')) {\n return numeric * 360;\n }\n\n // Value is probably just a number already in degrees eg '50'\n return numeric;\n }\n}\n","/**\n * A wrapper around Number#toFixed, which contrary to native method returns number, not string.\n * @param {number|string} number number to operate on\n * @param {number} fractionDigits number of fraction digits to \"leave\"\n * @return {number}\n */\nexport const toFixed = (number: number | string, fractionDigits: number) =>\n parseFloat(Number(number).toFixed(fractionDigits));\n","import { Color } from '../../color/Color';\nimport { config } from '../../config';\nimport { DEFAULT_SVG_FONT_SIZE, FILL, NONE } from '../../constants';\nimport type {\n TBBox,\n TMat2D,\n SVGElementName,\n SupportedSVGUnit,\n} from '../../typedefs';\nimport { toFixed } from './toFixed';\n\n/**\n * Returns array of attributes for given svg that fabric parses\n * @param {SVGElementName} type Type of svg element (eg. 'circle')\n * @return {Array} string names of supported attributes\n */\nexport const getSvgAttributes = (type: SVGElementName) => {\n const commonAttributes = ['instantiated_by_use', 'style', 'id', 'class'];\n switch (type) {\n case 'linearGradient':\n return commonAttributes.concat([\n 'x1',\n 'y1',\n 'x2',\n 'y2',\n 'gradientUnits',\n 'gradientTransform',\n ]);\n case 'radialGradient':\n return commonAttributes.concat([\n 'gradientUnits',\n 'gradientTransform',\n 'cx',\n 'cy',\n 'r',\n 'fx',\n 'fy',\n 'fr',\n ]);\n case 'stop':\n return commonAttributes.concat(['offset', 'stop-color', 'stop-opacity']);\n }\n return commonAttributes;\n};\n\n/**\n * Converts from attribute value to pixel value if applicable.\n * Returns converted pixels or original value not converted.\n * @param {string} value number to operate on\n * @param {number} fontSize\n * @return {number}\n */\nexport const parseUnit = (value: string, fontSize = DEFAULT_SVG_FONT_SIZE) => {\n const unit = /\\D{0,2}$/.exec(value),\n number = parseFloat(value);\n const dpi = config.DPI;\n switch (unit?.[0] as SupportedSVGUnit) {\n case 'mm':\n return (number * dpi) / 25.4;\n\n case 'cm':\n return (number * dpi) / 2.54;\n\n case 'in':\n return number * dpi;\n\n case 'pt':\n return (number * dpi) / 72; // or * 4 / 3\n\n case 'pc':\n return ((number * dpi) / 72) * 12; // or * 16\n\n case 'em':\n return number * fontSize;\n\n default:\n return number;\n }\n};\n\nexport type MeetOrSlice = 'meet' | 'slice';\n\nexport type MinMidMax = 'Min' | 'Mid' | 'Max' | 'none';\n\nexport type TPreserveArParsed = {\n meetOrSlice: MeetOrSlice;\n alignX: MinMidMax;\n alignY: MinMidMax;\n};\n\n// align can be either none or undefined or a combination of mid/max\nconst parseAlign = (align: string): MinMidMax[] => {\n //divide align in alignX and alignY\n if (align && align !== NONE) {\n return [align.slice(1, 4) as MinMidMax, align.slice(5, 8) as MinMidMax];\n } else if (align === NONE) {\n return [align, align];\n }\n return ['Mid', 'Mid'];\n};\n\n/**\n * Parse preserveAspectRatio attribute from element\n * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio\n * @param {string} attribute to be parsed\n * @return {Object} an object containing align and meetOrSlice attribute\n */\nexport const parsePreserveAspectRatioAttribute = (\n attribute: string,\n): TPreserveArParsed => {\n const [firstPart, secondPart] = attribute.trim().split(' ') as [\n MinMidMax,\n MeetOrSlice | undefined,\n ];\n const [alignX, alignY] = parseAlign(firstPart);\n return {\n meetOrSlice: secondPart || 'meet',\n alignX,\n alignY,\n };\n};\n\n/**\n * given an array of 6 number returns something like `\"matrix(...numbers)\"`\n * @param {TMat2D} transform an array with 6 numbers\n * @return {String} transform matrix for svg\n */\nexport const matrixToSVG = (transform: TMat2D) =>\n 'matrix(' +\n transform\n .map((value) => toFixed(value, config.NUM_FRACTION_DIGITS))\n .join(' ') +\n ')';\n\n/**\n * Adobe Illustrator (at least CS5) is unable to render rgba()-based fill values\n * we work around it by \"moving\" alpha channel into opacity attribute and setting fill's alpha to 1\n * @param prop\n * @param value\n * @param {boolean} inlineStyle The default is inline style, the separator used is \":\", The other is \"=\"\n * @returns\n */\nexport const colorPropToSVG = (\n prop: string,\n value?: any,\n inlineStyle = true,\n) => {\n let colorValue;\n let opacityValue;\n if (!value) {\n colorValue = 'none';\n } else if (value.toLive) {\n colorValue = `url(#SVGID_${value.id})`;\n } else {\n const color = new Color(value),\n opacity = color.getAlpha();\n\n colorValue = color.toRgb();\n if (opacity !== 1) {\n opacityValue = opacity.toString();\n }\n }\n if (inlineStyle) {\n return `${prop}: ${colorValue}; ${\n opacityValue ? `${prop}-opacity: ${opacityValue}; ` : ''\n }`;\n } else {\n return `${prop}=\"${colorValue}\" ${\n opacityValue ? `${prop}-opacity=\"${opacityValue}\" ` : ''\n }`;\n }\n};\n\nexport const createSVGRect = (\n color: string,\n { left, top, width, height }: TBBox,\n precision = config.NUM_FRACTION_DIGITS,\n) => {\n const svgColor = colorPropToSVG(FILL, color, false);\n const [x, y, w, h] = [left, top, width, height].map((value) =>\n toFixed(value, precision),\n );\n return ``;\n};\n","import type { FabricObject } from '../shapes/Object/Object';\nimport type { TFiller } from '../typedefs';\nimport type { FabricText } from '../shapes/Text/Text';\nimport type { Pattern } from '../Pattern';\nimport type { Path } from '../shapes/Path';\nimport type { ActiveSelection } from '../shapes/ActiveSelection';\n\nexport const isFiller = (\n filler: TFiller | string | null,\n): filler is TFiller => {\n return !!filler && (filler as TFiller).toLive !== undefined;\n};\n\nexport const isSerializableFiller = (\n filler: TFiller | string | null,\n): filler is TFiller => {\n return !!filler && typeof (filler as TFiller).toObject === 'function';\n};\n\nexport const isPattern = (filler: TFiller): filler is Pattern => {\n return (\n !!filler && (filler as Pattern).offsetX !== undefined && 'source' in filler\n );\n};\n\nexport const isTextObject = (\n fabricObject?: FabricObject,\n): fabricObject is FabricText => {\n return (\n !!fabricObject &&\n typeof (fabricObject as FabricText)._renderText === 'function'\n );\n};\n\nexport const isPath = (fabricObject?: FabricObject): fabricObject is Path => {\n // we could use instanceof but that would mean pulling in Text code for a simple check\n // @todo discuss what to do and how to do\n return (\n !!fabricObject &&\n typeof (fabricObject as Path)._renderPathCommands === 'function'\n );\n};\n\nexport const isActiveSelection = (\n fabricObject?: FabricObject,\n): fabricObject is ActiveSelection =>\n !!fabricObject && 'multiSelectionStacking' in fabricObject;\n","/**\n * Returns element scroll offsets\n * @param {HTMLElement} element Element to operate on\n * @return {Object} Object with left/top values\n */\nexport function getScrollLeftTop(element: HTMLElement | null) {\n const doc = element && getDocumentFromElement(element);\n let left = 0,\n top = 0;\n if (!element || !doc) {\n return { left, top };\n }\n let elementLoop: HTMLElement | Document | ShadowRoot = element;\n const docElement = doc.documentElement,\n body = doc.body || {\n scrollLeft: 0,\n scrollTop: 0,\n };\n // While loop checks (and then sets element to) .parentNode OR .host\n // to account for ShadowDOM. We still want to traverse up out of ShadowDOM,\n // but the .parentNode of a root ShadowDOM node will always be null, instead\n // it should be accessed through .host. See http://stackoverflow.com/a/24765528/4383938\n while (\n elementLoop &&\n (elementLoop.parentNode || (elementLoop as unknown as ShadowRoot).host)\n ) {\n elementLoop = (elementLoop.parentNode ||\n (elementLoop as unknown as ShadowRoot).host) as\n | HTMLElement\n | Document\n | ShadowRoot;\n if (elementLoop === doc) {\n left = body.scrollLeft || docElement.scrollLeft || 0;\n top = body.scrollTop || docElement.scrollTop || 0;\n } else {\n left += (elementLoop as HTMLElement).scrollLeft || 0;\n top += (elementLoop as HTMLElement).scrollTop || 0;\n }\n\n if (\n elementLoop.nodeType === 1 &&\n (elementLoop as HTMLElement).style.position === 'fixed'\n ) {\n break;\n }\n }\n\n return { left, top };\n}\n\nexport const getDocumentFromElement = (el: HTMLElement) =>\n el.ownerDocument || null;\n\nexport const getWindowFromElement = (el: HTMLElement) =>\n el.ownerDocument?.defaultView || null;\n","import { NONE } from '../../constants';\nimport type { TSize } from '../../typedefs';\nimport {\n getDocumentFromElement,\n getWindowFromElement,\n getScrollLeftTop,\n} from '../../util/dom_misc';\n\nexport const setCanvasDimensions = (\n el: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D,\n { width, height }: 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\nexport type CSSDimensions = {\n width: number | string;\n height: number | string;\n};\n\nexport const setCSSDimensions = (\n el: HTMLElement,\n { width, height }: Partial,\n) => {\n width && (el.style.width = typeof width === 'number' ? `${width}px` : width);\n height &&\n (el.style.height = typeof height === 'number' ? `${height}px` : height);\n};\n\n/**\n * Returns offset for a given element\n * @param {HTMLElement} element Element to get offset for\n * @return {Object} Object with \"left\" and \"top\" properties\n */\nexport function getElementOffset(element: HTMLElement) {\n const doc = element && getDocumentFromElement(element),\n offset = { left: 0, top: 0 };\n\n if (!doc) {\n return offset;\n }\n const elemStyle: CSSStyleDeclaration =\n getWindowFromElement(element)?.getComputedStyle(element, null) ||\n ({} as CSSStyleDeclaration);\n offset.left += parseInt(elemStyle.borderLeftWidth, 10) || 0;\n offset.top += parseInt(elemStyle.borderTopWidth, 10) || 0;\n offset.left += parseInt(elemStyle.paddingLeft, 10) || 0;\n offset.top += parseInt(elemStyle.paddingTop, 10) || 0;\n\n let box = { left: 0, top: 0 };\n\n const docElem = doc.documentElement;\n if (typeof element.getBoundingClientRect !== 'undefined') {\n box = element.getBoundingClientRect();\n }\n\n const scrollLeftTop = getScrollLeftTop(element);\n\n return {\n left:\n box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,\n top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top,\n };\n}\n\n/**\n * Makes element unselectable\n * @param {HTMLElement} element Element to make unselectable\n * @return {HTMLElement} Element that was passed in\n */\nexport function makeElementUnselectable(element: HTMLElement) {\n if (typeof element.onselectstart !== 'undefined') {\n element.onselectstart = () => false;\n }\n element.style.userSelect = NONE;\n return element;\n}\n","import { getEnv, getFabricDocument } from '../../env';\nimport type { TSize } from '../../typedefs';\nimport type { CSSDimensions } from './util';\nimport { setCSSDimensions, getElementOffset } from './util';\nimport { createCanvasElement, isHTMLCanvas } from '../../util/misc/dom';\nimport { setCanvasDimensions } from './util';\nimport { FabricError } from '../../util/internals/console';\n\nexport type CanvasItem = {\n el: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n};\n\nexport class StaticCanvasDOMManager {\n /**\n * Keeps a copy of the canvas style before setting retina scaling and other potions\n * in order to return it to original state on dispose\n * @type string\n */\n private _originalCanvasStyle?: string;\n\n lower: CanvasItem;\n\n constructor(arg0?: string | HTMLCanvasElement) {\n const el = this.createLowerCanvas(arg0);\n this.lower = { el, ctx: el.getContext('2d')! };\n }\n\n protected createLowerCanvas(arg0?: HTMLCanvasElement | string) {\n // canvasEl === 'HTMLCanvasElement' does not work on jsdom/node\n const el = isHTMLCanvas(arg0)\n ? arg0\n : (arg0 &&\n (getFabricDocument().getElementById(arg0) as HTMLCanvasElement)) ||\n createCanvasElement();\n if (el.hasAttribute('data-fabric')) {\n throw new FabricError(\n 'Trying to initialize a canvas that has already been initialized. Did you forget to dispose the canvas?',\n );\n }\n this._originalCanvasStyle = el.style.cssText;\n el.setAttribute('data-fabric', 'main');\n el.classList.add('lower-canvas');\n return el;\n }\n\n cleanupDOM({ width, height }: TSize) {\n const { el } = this.lower;\n // restore canvas style and attributes\n el.classList.remove('lower-canvas');\n el.removeAttribute('data-fabric');\n // restore canvas size to original size in case retina scaling was applied\n el.setAttribute('width', `${width}`);\n el.setAttribute('height', `${height}`);\n el.style.cssText = this._originalCanvasStyle || '';\n this._originalCanvasStyle = undefined;\n }\n\n setDimensions(size: TSize, retinaScaling: number) {\n const { el, ctx } = this.lower;\n setCanvasDimensions(el, ctx, size, retinaScaling);\n }\n\n setCSSDimensions(size: Partial) {\n setCSSDimensions(this.lower.el, size);\n }\n\n /**\n * Calculates canvas element offset relative to the document\n */\n calcOffset() {\n return getElementOffset(this.lower.el);\n }\n\n dispose() {\n getEnv().dispose(this.lower.el);\n // @ts-expect-error disposing\n delete this.lower;\n }\n}\n","import { iMatrix } from '../constants';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TFiller, TMat2D, TOptions } from '../typedefs';\n\ninterface CanvasDrawableOptions {\n /**\n * if set to false background image is not affected by viewport transform\n * @since 1.6.3\n * @type Boolean\n * @todo we should really find a different way to do this\n * @default\n */\n backgroundVpt: boolean;\n\n /**\n * Background color of canvas instance.\n * @type {(String|TFiller)}\n * @default\n */\n backgroundColor: TFiller | string;\n\n /**\n * Background image of canvas instance.\n * since 2.4.0 image caching is active, please when putting an image as background, add to the\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n * vale. As an alternative you can disable image objectCaching\n * @type FabricObject\n * @default\n */\n backgroundImage?: FabricObject;\n\n /**\n * if set to false overlay image is not affected by viewport transform\n * @since 1.6.3\n * @type Boolean\n * @todo we should really find a different way to do this\n * @default\n */\n overlayVpt: boolean;\n\n /**\n * Overlay color of canvas instance.\n * @since 1.3.9\n * @type {(String|TFiller)}\n * @default\n */\n overlayColor: TFiller | string;\n\n /**\n * Overlay image of canvas instance.\n * since 2.4.0 image caching is active, please when putting an image as overlay, add to the\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n * vale. As an alternative you can disable image objectCaching\n * @type FabricObject\n * @default\n */\n overlayImage?: FabricObject;\n}\n\ninterface CanvasRenderingOptions {\n /**\n * Indicates whether {@link StaticCanvas#add}, {@link StaticCanvas#insertAt} and {@link StaticCanvas#remove},\n * {@link StaticCanvas#moveTo}, {@link StaticCanvas#clear} and many more, should also re-render canvas.\n * Disabling this option will not give a performance boost when adding/removing a lot of objects to/from canvas at once\n * since the renders are queued and executed one per frame.\n * Disabling is suggested anyway and managing the renders of the app manually is not a big effort ( canvas.requestRenderAll() )\n * Left default to true to do not break documentation and old app, fiddles.\n * @type Boolean\n * @default\n */\n renderOnAddRemove: boolean;\n\n /**\n * Based on vptCoords and object.aCoords, skip rendering of objects that\n * are not included in current viewport.\n * May greatly help in applications with crowded canvas and use of zoom/pan\n * If One of the corner of the bounding box of the object is on the canvas\n * the objects get rendered.\n * @type Boolean\n * @default true\n */\n skipOffscreen: boolean;\n\n /**\n * When true, canvas is scaled by devicePixelRatio for better rendering on retina screens\n * @type Boolean\n * @default\n */\n enableRetinaScaling: boolean;\n\n /**\n * Indicates whether this canvas will use image smoothing, this is on by default in browsers\n * @type Boolean\n * @default\n */\n imageSmoothingEnabled: boolean;\n\n /**\n * a fabricObject that, without stroke define a clipping area with their shape. filled in black\n * the clipPath object gets used when the canvas has rendered, and the context is placed in the\n * top left corner of the canvas.\n * clipPath will clip away controls, if you do not want this to happen use controlsAboveOverlay = true\n * @type FabricObject\n */\n clipPath?: FabricObject;\n}\n\nexport interface CanvasExportOptions {\n /**\n * Indicates whether toObject/toDatalessObject should include default values\n * if set to false, takes precedence over the object value.\n * @type Boolean\n * @default\n */\n includeDefaultValues: boolean;\n\n /**\n * When true, getSvgTransform() will apply the StaticCanvas.viewportTransform to the SVG transformation. When true,\n * a zoomed canvas will then produce zoomed SVG output.\n * @type Boolean\n * @default\n */\n svgViewportTransformation: boolean;\n}\n\nexport interface StaticCanvasOptions\n extends CanvasDrawableOptions,\n CanvasRenderingOptions,\n CanvasExportOptions {\n /**\n * Width in virtual/logical pixels of the canvas.\n * The canvas can be larger than width if retina scaling is active\n * @type number\n */\n width: number;\n\n /**\n * Height in virtual/logical pixels of the canvas.\n * The canvas can be taller than width if retina scaling is active\n * @type height\n */\n height: number;\n\n /**\n * Indicates whether object controls (borders/controls) are rendered above overlay image\n * @type Boolean\n * @default\n *\n * @todo move to Canvas\n */\n controlsAboveOverlay: boolean;\n\n /**\n * Indicates whether the browser can be scrolled when using a touchscreen and dragging on the canvas\n * @type Boolean\n * @default\n *\n * @todo move to Canvas\n */\n allowTouchScrolling: boolean;\n\n /**\n * The transformation (a Canvas 2D API transform matrix) which focuses the viewport\n * @type Array\n * @example Default transform\n * canvas.viewportTransform = [1, 0, 0, 1, 0, 0];\n * @example Scale by 70% and translate toward bottom-right by 50, without skewing\n * canvas.viewportTransform = [0.7, 0, 0, 0.7, 50, 50];\n * @default\n */\n viewportTransform: TMat2D;\n}\n\nexport const staticCanvasDefaults: TOptions = {\n backgroundVpt: true,\n backgroundColor: '',\n overlayVpt: true,\n overlayColor: '',\n\n includeDefaultValues: true,\n svgViewportTransformation: true,\n\n renderOnAddRemove: true,\n skipOffscreen: true,\n enableRetinaScaling: true,\n imageSmoothingEnabled: true,\n\n /**\n * @todo move to Canvas\n */\n controlsAboveOverlay: false,\n /**\n * @todo move to Canvas\n */\n allowTouchScrolling: false,\n\n viewportTransform: [...iMatrix],\n};\n","import { config } from '../config';\nimport { CENTER, VERSION } from '../constants';\nimport type { CanvasEvents, StaticCanvasEvents } from '../EventTypeDefs';\nimport type { Gradient } from '../gradient/Gradient';\nimport { createCollectionMixin, isCollection } from '../Collection';\nimport { CommonMethods } from '../CommonMethods';\nimport type { Pattern } from '../Pattern';\nimport { Point } from '../Point';\nimport type { TCachedFabricObject } from '../shapes/Object/Object';\nimport type {\n Abortable,\n Constructor,\n TCornerPoint,\n TDataUrlOptions,\n TFiller,\n TMat2D,\n TSize,\n TSVGReviver,\n TToCanvasElementOptions,\n TValidToObjectMethod,\n TOptions,\n} from '../typedefs';\nimport {\n cancelAnimFrame,\n requestAnimFrame,\n} from '../util/animation/AnimationFrameProvider';\nimport { runningAnimations } from '../util/animation/AnimationRegistry';\nimport { uid } from '../util/internals/uid';\nimport { createCanvasElement, toDataURL } from '../util/misc/dom';\nimport { invertTransform, transformPoint } from '../util/misc/matrix';\nimport type { EnlivenObjectOptions } from '../util/misc/objectEnlive';\nimport {\n enlivenObjectEnlivables,\n enlivenObjects,\n} from '../util/misc/objectEnlive';\nimport { pick } from '../util/misc/pick';\nimport { matrixToSVG } from '../util/misc/svgParsing';\nimport { toFixed } from '../util/misc/toFixed';\nimport { isFiller, isPattern, isTextObject } from '../util/typeAssertions';\nimport { StaticCanvasDOMManager } from './DOMManagers/StaticCanvasDOMManager';\nimport type { CSSDimensions } from './DOMManagers/util';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { StaticCanvasOptions } from './StaticCanvasOptions';\nimport { staticCanvasDefaults } from './StaticCanvasOptions';\nimport { log, FabricError } from '../util/internals/console';\nimport { getDevicePixelRatio } from '../env';\n\n/**\n * Having both options in TCanvasSizeOptions set to true transform the call in a calcOffset\n * Better try to restrict with types to avoid confusion.\n */\nexport type TCanvasSizeOptions =\n | {\n backstoreOnly?: true;\n cssOnly?: false;\n }\n | {\n backstoreOnly?: false;\n cssOnly?: true;\n };\n\nexport type TSVGExportOptions = {\n suppressPreamble?: boolean;\n viewBox?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n encoding?: 'UTF-8'; // test Encoding type and see what happens\n width?: string;\n height?: string;\n reviver?: TSVGReviver;\n};\n\n/**\n * Static canvas class\n * @see {@link http://fabricjs.com/static_canvas|StaticCanvas demo}\n * @fires before:render\n * @fires after:render\n * @fires canvas:cleared\n * @fires object:added\n * @fires object:removed\n */\n// TODO: fix `EventSpec` inheritance https://github.com/microsoft/TypeScript/issues/26154#issuecomment-1366616260\nexport class StaticCanvas<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n EventSpec extends StaticCanvasEvents = StaticCanvasEvents,\n >\n extends createCollectionMixin(CommonMethods)\n implements StaticCanvasOptions\n{\n declare width: number;\n declare height: number;\n\n // background\n declare backgroundVpt: boolean;\n declare backgroundColor: TFiller | string;\n declare backgroundImage?: FabricObject;\n // overlay\n declare overlayVpt: boolean;\n declare overlayColor: TFiller | string;\n declare overlayImage?: FabricObject;\n\n declare clipPath?: FabricObject;\n\n declare includeDefaultValues: boolean;\n\n // rendering config\n declare renderOnAddRemove: boolean;\n declare skipOffscreen: boolean;\n declare enableRetinaScaling: boolean;\n declare imageSmoothingEnabled: boolean;\n\n /**\n * @todo move to Canvas\n */\n declare controlsAboveOverlay: boolean;\n\n /**\n * @todo move to Canvas\n */\n declare allowTouchScrolling: boolean;\n\n declare viewportTransform: TMat2D;\n\n /**\n * The viewport bounding box in scene plane coordinates, see {@link calcViewportBoundaries}\n */\n declare vptCoords: TCornerPoint;\n\n /**\n * A reference to the canvas actual HTMLCanvasElement.\n * Can be use to read the raw pixels, but never write or manipulate\n * @type HTMLCanvasElement\n */\n get lowerCanvasEl() {\n return this.elements.lower?.el;\n }\n\n get contextContainer() {\n return this.elements.lower?.ctx;\n }\n\n /**\n * If true the Canvas is in the process or has been disposed/destroyed.\n * No more rendering operation will be executed on this canvas.\n * @type boolean\n */\n declare destroyed?: boolean;\n\n /**\n * Started the process of disposing but not done yet.\n * WIll likely complete the render cycle already scheduled but stopping adding more.\n * @type boolean\n */\n declare disposed?: boolean;\n\n declare _offset: { left: number; top: number };\n protected declare hasLostContext: boolean;\n protected declare nextRenderHandle: number;\n\n declare elements: StaticCanvasDOMManager;\n\n /**\n * When true control drawing is skipped.\n * This boolean is used to avoid toDataURL to export controls.\n * Usage of this boolean to build up other flows and features is not supported\n * @type Boolean\n * @default false\n */\n protected declare skipControlsDrawing: boolean;\n\n static ownDefaults = staticCanvasDefaults;\n\n // reference to\n protected declare __cleanupTask?: {\n (): void;\n kill: (reason?: any) => void;\n };\n\n static getDefaults(): Record {\n return StaticCanvas.ownDefaults;\n }\n\n constructor(\n el?: string | HTMLCanvasElement,\n options: TOptions = {},\n ) {\n super();\n Object.assign(\n this,\n (this.constructor as typeof StaticCanvas).getDefaults(),\n );\n this.set(options);\n this.initElements(el);\n this._setDimensionsImpl({\n width: this.width || this.elements.lower.el.width || 0,\n height: this.height || this.elements.lower.el.height || 0,\n });\n this.skipControlsDrawing = false;\n this.viewportTransform = [...this.viewportTransform];\n this.calcViewportBoundaries();\n }\n\n protected initElements(el?: string | HTMLCanvasElement) {\n this.elements = new StaticCanvasDOMManager(el);\n }\n\n add(...objects: FabricObject[]) {\n const size = super.add(...objects);\n objects.length > 0 && this.renderOnAddRemove && this.requestRenderAll();\n return size;\n }\n\n insertAt(index: number, ...objects: FabricObject[]) {\n const size = super.insertAt(index, ...objects);\n objects.length > 0 && this.renderOnAddRemove && this.requestRenderAll();\n return size;\n }\n\n remove(...objects: FabricObject[]) {\n const removed = super.remove(...objects);\n removed.length > 0 && this.renderOnAddRemove && this.requestRenderAll();\n return removed;\n }\n\n _onObjectAdded(obj: FabricObject) {\n if (obj.canvas && (obj.canvas as StaticCanvas) !== this) {\n log(\n 'warn',\n 'Canvas is trying to add an object that belongs to a different canvas.\\n' +\n 'Resulting to default behavior: removing object from previous canvas and adding to new canvas',\n );\n obj.canvas.remove(obj);\n }\n obj._set('canvas', this);\n obj.setCoords();\n this.fire('object:added', { target: obj });\n obj.fire('added', { target: this });\n }\n\n _onObjectRemoved(obj: FabricObject) {\n obj._set('canvas', undefined);\n this.fire('object:removed', { target: obj });\n obj.fire('removed', { target: this });\n }\n\n _onStackOrderChanged() {\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * @private\n * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\n * @return {Number} retinaScaling if applied, otherwise 1;\n */\n getRetinaScaling() {\n return this.enableRetinaScaling ? getDevicePixelRatio() : 1;\n }\n\n /**\n * Calculates canvas element offset relative to the document\n * This method is also attached as \"resize\" event handler of window\n */\n calcOffset() {\n return (this._offset = this.elements.calcOffset());\n }\n\n /**\n * Returns canvas width (in px)\n * @return {Number}\n */\n getWidth(): number {\n return this.width;\n }\n\n /**\n * Returns canvas height (in px)\n * @return {Number}\n */\n getHeight(): number {\n return this.height;\n }\n\n /**\n * Sets width of this canvas instance\n * @param {Number|String} value Value to set width to\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @deprecated will be removed in 7.0\n */\n setWidth(\n value: TSize['width'],\n options?: { backstoreOnly?: true; cssOnly?: false },\n ): void;\n setWidth(\n value: CSSDimensions['width'],\n options?: { cssOnly?: true; backstoreOnly?: false },\n ): void;\n setWidth(value: number, options?: never) {\n return this.setDimensions({ width: value }, options);\n }\n\n /**s\n * Sets height of this canvas instance\n * @param {Number|String} value Value to set height to\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @deprecated will be removed in 7.0\n */\n setHeight(\n value: TSize['height'],\n options?: { backstoreOnly?: true; cssOnly?: false },\n ): void;\n setHeight(\n value: CSSDimensions['height'],\n options?: { cssOnly?: true; backstoreOnly?: false },\n ): void;\n setHeight(value: CSSDimensions['height'], options?: never) {\n return this.setDimensions({ height: value }, options);\n }\n\n /**\n * Internal use only\n * @protected\n */\n protected _setDimensionsImpl(\n dimensions: Partial,\n { cssOnly = false, backstoreOnly = false }: TCanvasSizeOptions = {},\n ) {\n if (!cssOnly) {\n const size = {\n width: this.width,\n height: this.height,\n ...(dimensions as Partial),\n };\n this.elements.setDimensions(size, this.getRetinaScaling());\n this.hasLostContext = true;\n this.width = size.width;\n this.height = size.height;\n }\n if (!backstoreOnly) {\n this.elements.setCSSDimensions(dimensions);\n }\n\n this.calcOffset();\n }\n\n /**\n * Sets dimensions (width, height) of this canvas instance. when options.cssOnly flag active you should also supply the unit of measure (px/%/em)\n * @param {Object} dimensions Object with width/height properties\n * @param {Number|String} [dimensions.width] Width of canvas element\n * @param {Number|String} [dimensions.height] Height of canvas element\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n */\n setDimensions(\n dimensions: Partial,\n options?: { cssOnly?: true; backstoreOnly?: false },\n ): void;\n setDimensions(\n dimensions: Partial,\n options?: { backstoreOnly?: true; cssOnly?: false },\n ): void;\n setDimensions(dimensions: Partial, options?: never): void;\n setDimensions(\n dimensions: Partial,\n options?: TCanvasSizeOptions,\n ) {\n this._setDimensionsImpl(dimensions, options);\n if (!options || !options.cssOnly) {\n this.requestRenderAll();\n }\n }\n\n /**\n * Returns canvas zoom level\n * @return {Number}\n */\n getZoom() {\n return this.viewportTransform[0];\n }\n\n /**\n * Sets viewport transformation of this canvas instance\n * @param {Array} vpt a Canvas 2D API transform matrix\n */\n setViewportTransform(vpt: TMat2D) {\n this.viewportTransform = vpt;\n this.calcViewportBoundaries();\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * Sets zoom level of this canvas instance, the zoom centered around point\n * meaning that following zoom to point with the same point will have the visual\n * effect of the zoom originating from that point. The point won't move.\n * It has nothing to do with canvas center or visual center of the viewport.\n * @param {Point} point to zoom with respect to\n * @param {Number} value to set zoom to, less than 1 zooms out\n */\n zoomToPoint(point: Point, value: number) {\n // TODO: just change the scale, preserve other transformations\n const before = point,\n vpt: TMat2D = [...this.viewportTransform];\n const newPoint = transformPoint(point, invertTransform(vpt));\n vpt[0] = value;\n vpt[3] = value;\n const after = transformPoint(newPoint, vpt);\n vpt[4] += before.x - after.x;\n vpt[5] += before.y - after.y;\n this.setViewportTransform(vpt);\n }\n\n /**\n * Sets zoom level of this canvas instance\n * @param {Number} value to set zoom to, less than 1 zooms out\n */\n setZoom(value: number) {\n this.zoomToPoint(new Point(0, 0), value);\n }\n\n /**\n * Pan viewport so as to place point at top left corner of canvas\n * @param {Point} point to move to\n */\n absolutePan(point: Point) {\n const vpt: TMat2D = [...this.viewportTransform];\n vpt[4] = -point.x;\n vpt[5] = -point.y;\n return this.setViewportTransform(vpt);\n }\n\n /**\n * Pans viewpoint relatively\n * @param {Point} point (position vector) to move by\n */\n relativePan(point: Point) {\n return this.absolutePan(\n new Point(\n -point.x - this.viewportTransform[4],\n -point.y - this.viewportTransform[5],\n ),\n );\n }\n\n /**\n * Returns <canvas> element corresponding to this instance\n * @return {HTMLCanvasElement}\n */\n getElement(): HTMLCanvasElement {\n return this.elements.lower.el;\n }\n\n /**\n * Clears specified context of canvas element\n * @param {CanvasRenderingContext2D} ctx Context to clear\n */\n clearContext(ctx: CanvasRenderingContext2D) {\n ctx.clearRect(0, 0, this.width, this.height);\n }\n\n /**\n * Returns context of canvas where objects are drawn\n * @return {CanvasRenderingContext2D}\n */\n getContext(): CanvasRenderingContext2D {\n return this.elements.lower.ctx;\n }\n\n /**\n * Clears all contexts (background, main, top) of an instance\n */\n clear() {\n this.remove(...this.getObjects());\n this.backgroundImage = undefined;\n this.overlayImage = undefined;\n this.backgroundColor = '';\n this.overlayColor = '';\n this.clearContext(this.getContext());\n this.fire('canvas:cleared');\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * Renders the canvas\n */\n renderAll() {\n this.cancelRequestedRender();\n if (this.destroyed) {\n return;\n }\n this.renderCanvas(this.getContext(), this._objects);\n }\n\n /**\n * Function created to be instance bound at initialization\n * used in requestAnimationFrame rendering\n * Let the fabricJS call it. If you call it manually you could have more\n * animationFrame stacking on to of each other\n * for an imperative rendering, use canvas.renderAll\n * @private\n */\n renderAndReset() {\n this.nextRenderHandle = 0;\n this.renderAll();\n }\n\n /**\n * Append a renderAll request to next animation frame.\n * unless one is already in progress, in that case nothing is done\n * a boolean flag will avoid appending more.\n */\n requestRenderAll() {\n if (!this.nextRenderHandle && !this.disposed && !this.destroyed) {\n this.nextRenderHandle = requestAnimFrame(() => this.renderAndReset());\n }\n }\n\n /**\n * Calculate the position of the 4 corner of canvas with current viewportTransform.\n * helps to determinate when an object is in the current rendering viewport\n */\n calcViewportBoundaries(): TCornerPoint {\n const width = this.width,\n height = this.height,\n iVpt = invertTransform(this.viewportTransform),\n a = transformPoint({ x: 0, y: 0 }, iVpt),\n b = transformPoint({ x: width, y: height }, iVpt),\n // we don't support vpt flipping\n // but the code is robust enough to mostly work with flipping\n min = a.min(b),\n max = a.max(b);\n return (this.vptCoords = {\n tl: min,\n tr: new Point(max.x, min.y),\n bl: new Point(min.x, max.y),\n br: max,\n });\n }\n\n cancelRequestedRender() {\n if (this.nextRenderHandle) {\n cancelAnimFrame(this.nextRenderHandle);\n this.nextRenderHandle = 0;\n }\n }\n\n drawControls(_ctx: CanvasRenderingContext2D) {\n // Static canvas has no controls\n }\n\n /**\n * Renders background, objects, overlay and controls.\n * @param {CanvasRenderingContext2D} ctx\n * @param {Array} objects to render\n */\n renderCanvas(ctx: CanvasRenderingContext2D, objects: FabricObject[]) {\n if (this.destroyed) {\n return;\n }\n\n const v = this.viewportTransform,\n path = this.clipPath;\n this.calcViewportBoundaries();\n this.clearContext(ctx);\n ctx.imageSmoothingEnabled = this.imageSmoothingEnabled;\n // @ts-expect-error node-canvas stuff\n ctx.patternQuality = 'best';\n this.fire('before:render', { ctx });\n this._renderBackground(ctx);\n\n ctx.save();\n //apply viewport transform once for all rendering process\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n this._renderObjects(ctx, objects);\n ctx.restore();\n if (!this.controlsAboveOverlay && !this.skipControlsDrawing) {\n this.drawControls(ctx);\n }\n if (path) {\n path._set('canvas', this);\n // needed to setup a couple of variables\n path.shouldCache();\n path._transformDone = true;\n path.renderCache({ forClipping: true });\n this.drawClipPathOnCanvas(ctx, path as TCachedFabricObject);\n }\n this._renderOverlay(ctx);\n if (this.controlsAboveOverlay && !this.skipControlsDrawing) {\n this.drawControls(ctx);\n }\n this.fire('after:render', { ctx });\n\n if (this.__cleanupTask) {\n this.__cleanupTask();\n this.__cleanupTask = undefined;\n }\n }\n\n /**\n * Paint the cached clipPath on the lowerCanvasEl\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawClipPathOnCanvas(\n ctx: CanvasRenderingContext2D,\n clipPath: TCachedFabricObject,\n ) {\n const v = this.viewportTransform;\n ctx.save();\n ctx.transform(...v);\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4;\n ctx.globalCompositeOperation = 'destination-in';\n clipPath.transform(ctx);\n ctx.scale(1 / clipPath.zoomX, 1 / clipPath.zoomY);\n ctx.drawImage(\n clipPath._cacheCanvas,\n -clipPath.cacheTranslationX,\n -clipPath.cacheTranslationY,\n );\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Array} objects to render\n */\n _renderObjects(ctx: CanvasRenderingContext2D, objects: FabricObject[]) {\n for (let i = 0, len = objects.length; i < len; ++i) {\n objects[i] && objects[i].render(ctx);\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {string} property 'background' or 'overlay'\n */\n _renderBackgroundOrOverlay(\n ctx: CanvasRenderingContext2D,\n property: 'background' | 'overlay',\n ) {\n const fill = this[`${property}Color`],\n object = this[`${property}Image`],\n v = this.viewportTransform,\n needsVpt = this[`${property}Vpt`];\n if (!fill && !object) {\n return;\n }\n const isAFiller = isFiller(fill);\n if (fill) {\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.width, 0);\n ctx.lineTo(this.width, this.height);\n ctx.lineTo(0, this.height);\n ctx.closePath();\n ctx.fillStyle = isAFiller ? fill.toLive(ctx /* this */)! : fill;\n if (needsVpt) {\n ctx.transform(...v);\n }\n if (isAFiller) {\n ctx.transform(1, 0, 0, 1, fill.offsetX || 0, fill.offsetY || 0);\n const m = ((fill as Gradient<'linear'>).gradientTransform ||\n (fill as Pattern).patternTransform) as TMat2D;\n m && ctx.transform(...m);\n }\n ctx.fill();\n ctx.restore();\n }\n if (object) {\n ctx.save();\n const { skipOffscreen } = this;\n // if the object doesn't move with the viewport,\n // the offscreen concept does not apply;\n this.skipOffscreen = needsVpt;\n if (needsVpt) {\n ctx.transform(...v);\n }\n object.render(ctx);\n this.skipOffscreen = skipOffscreen;\n ctx.restore();\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground(ctx: CanvasRenderingContext2D) {\n this._renderBackgroundOrOverlay(ctx, 'background');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderOverlay(ctx: CanvasRenderingContext2D) {\n this._renderBackgroundOrOverlay(ctx, 'overlay');\n }\n\n /**\n * Returns coordinates of a center of canvas.\n * Returned value is an object with top and left properties\n * @return {Object} object with \"top\" and \"left\" number values\n * @deprecated migrate to `getCenterPoint`\n */\n getCenter() {\n return {\n top: this.height / 2,\n left: this.width / 2,\n };\n }\n\n /**\n * Returns coordinates of a center of canvas.\n * @return {Point}\n */\n getCenterPoint() {\n return new Point(this.width / 2, this.height / 2);\n }\n\n /**\n * Centers object horizontally in the canvas\n */\n centerObjectH(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(this.getCenterPoint().x, object.getCenterPoint().y),\n );\n }\n\n /**\n * Centers object vertically in the canvas\n * @param {FabricObject} object Object to center vertically\n */\n centerObjectV(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(object.getCenterPoint().x, this.getCenterPoint().y),\n );\n }\n\n /**\n * Centers object vertically and horizontally in the canvas\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n centerObject(object: FabricObject) {\n return this._centerObject(object, this.getCenterPoint());\n }\n\n /**\n * Centers object vertically and horizontally in the viewport\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n viewportCenterObject(object: FabricObject) {\n return this._centerObject(object, this.getVpCenter());\n }\n\n /**\n * Centers object horizontally in the viewport, object.top is unchanged\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n viewportCenterObjectH(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(this.getVpCenter().x, object.getCenterPoint().y),\n );\n }\n\n /**\n * Centers object Vertically in the viewport, object.top is unchanged\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n viewportCenterObjectV(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(object.getCenterPoint().x, this.getVpCenter().y),\n );\n }\n\n /**\n * Calculate the point in canvas that correspond to the center of actual viewport.\n * @return {Point} vpCenter, viewport center\n */\n getVpCenter(): Point {\n return transformPoint(\n this.getCenterPoint(),\n invertTransform(this.viewportTransform),\n );\n }\n\n /**\n * @private\n * @param {FabricObject} object Object to center\n * @param {Point} center Center point\n */\n _centerObject(object: FabricObject, center: Point) {\n object.setXY(center, CENTER, CENTER);\n object.setCoords();\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * Returns dataless JSON representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {String} json string\n */\n toDatalessJSON(propertiesToInclude?: string[]) {\n return this.toDatalessObject(propertiesToInclude);\n }\n\n /**\n * Returns object representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject(propertiesToInclude?: string[]) {\n return this._toObjectMethod('toObject', propertiesToInclude);\n }\n\n /**\n * Returns Object representation of canvas\n * this alias is provided because if you call JSON.stringify on an instance,\n * the toJSON object will be invoked if it exists.\n * Having a toJSON method means you can do JSON.stringify(myCanvas)\n * @return {Object} JSON compatible object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n * @see {@link http://jsfiddle.net/fabricjs/pec86/|jsFiddle demo}\n * @example JSON without additional properties\n * var json = canvas.toJSON();\n * @example JSON with additional properties included\n * var json = canvas.toJSON(['lockMovementX', 'lockMovementY', 'lockRotation', 'lockScalingX', 'lockScalingY']);\n * @example JSON without default values\n * var json = canvas.toJSON();\n */\n toJSON() {\n return this.toObject();\n }\n\n /**\n * Returns dataless object representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject(propertiesToInclude?: string[]) {\n return this._toObjectMethod('toDatalessObject', propertiesToInclude);\n }\n\n /**\n * @private\n */\n _toObjectMethod(\n methodName: TValidToObjectMethod,\n propertiesToInclude?: string[],\n ) {\n const clipPath = this.clipPath;\n const clipPathData =\n clipPath && !clipPath.excludeFromExport\n ? this._toObject(clipPath, methodName, propertiesToInclude)\n : null;\n return {\n version: VERSION,\n ...pick(this, propertiesToInclude as (keyof this)[]),\n objects: this._objects\n .filter((object) => !object.excludeFromExport)\n .map((instance) =>\n this._toObject(instance, methodName, propertiesToInclude),\n ),\n ...this.__serializeBgOverlay(methodName, propertiesToInclude),\n ...(clipPathData ? { clipPath: clipPathData } : null),\n };\n }\n\n /**\n * @private\n */\n protected _toObject(\n instance: FabricObject,\n methodName: TValidToObjectMethod,\n propertiesToInclude?: string[],\n ) {\n let originalValue;\n\n if (!this.includeDefaultValues) {\n originalValue = instance.includeDefaultValues;\n instance.includeDefaultValues = false;\n }\n\n const object = instance[methodName](propertiesToInclude);\n if (!this.includeDefaultValues) {\n instance.includeDefaultValues = !!originalValue;\n }\n return object;\n }\n\n /**\n * @private\n */\n __serializeBgOverlay(\n methodName: TValidToObjectMethod,\n propertiesToInclude?: string[],\n ) {\n const data: any = {},\n bgImage = this.backgroundImage,\n overlayImage = this.overlayImage,\n bgColor = this.backgroundColor,\n overlayColor = this.overlayColor;\n\n if (isFiller(bgColor)) {\n if (!bgColor.excludeFromExport) {\n data.background = bgColor.toObject(propertiesToInclude);\n }\n } else if (bgColor) {\n data.background = bgColor;\n }\n\n if (isFiller(overlayColor)) {\n if (!overlayColor.excludeFromExport) {\n data.overlay = overlayColor.toObject(propertiesToInclude);\n }\n } else if (overlayColor) {\n data.overlay = overlayColor;\n }\n\n if (bgImage && !bgImage.excludeFromExport) {\n data.backgroundImage = this._toObject(\n bgImage,\n methodName,\n propertiesToInclude,\n );\n }\n if (overlayImage && !overlayImage.excludeFromExport) {\n data.overlayImage = this._toObject(\n overlayImage,\n methodName,\n propertiesToInclude,\n );\n }\n\n return data;\n }\n\n /* _TO_SVG_START_ */\n\n declare svgViewportTransformation: boolean;\n\n /**\n * Returns SVG representation of canvas\n * @function\n * @param {Object} [options] Options object for SVG output\n * @param {Boolean} [options.suppressPreamble=false] If true xml tag is not included\n * @param {Object} [options.viewBox] SVG viewbox object\n * @param {Number} [options.viewBox.x] x-coordinate of viewbox\n * @param {Number} [options.viewBox.y] y-coordinate of viewbox\n * @param {Number} [options.viewBox.width] Width of viewbox\n * @param {Number} [options.viewBox.height] Height of viewbox\n * @param {String} [options.encoding=UTF-8] Encoding of SVG output\n * @param {String} [options.width] desired width of svg with or without units\n * @param {String} [options.height] desired height of svg with or without units\n * @param {Function} [reviver] Method for further parsing of svg elements, called after each fabric object converted into svg representation.\n * @return {String} SVG string\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n * @see {@link http://jsfiddle.net/fabricjs/jQ3ZZ/|jsFiddle demo}\n * @example Normal SVG output\n * var svg = canvas.toSVG();\n * @example SVG output without preamble (without <?xml ../>)\n * var svg = canvas.toSVG({suppressPreamble: true});\n * @example SVG output with viewBox attribute\n * var svg = canvas.toSVG({\n * viewBox: {\n * x: 100,\n * y: 100,\n * width: 200,\n * height: 300\n * }\n * });\n * @example SVG output with different encoding (default: UTF-8)\n * var svg = canvas.toSVG({encoding: 'ISO-8859-1'});\n * @example Modify SVG output with reviver function\n * var svg = canvas.toSVG(null, function(svg) {\n * return svg.replace('stroke-dasharray: ; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; ', '');\n * });\n */\n toSVG(options: TSVGExportOptions = {}, reviver?: TSVGReviver) {\n options.reviver = reviver;\n const markup: string[] = [];\n\n this._setSVGPreamble(markup, options);\n this._setSVGHeader(markup, options);\n if (this.clipPath) {\n markup.push(`\\n`);\n }\n this._setSVGBgOverlayColor(markup, 'background');\n this._setSVGBgOverlayImage(markup, 'backgroundImage', reviver);\n this._setSVGObjects(markup, reviver);\n if (this.clipPath) {\n markup.push('\\n');\n }\n this._setSVGBgOverlayColor(markup, 'overlay');\n this._setSVGBgOverlayImage(markup, 'overlayImage', reviver);\n\n markup.push('');\n\n return markup.join('');\n }\n\n /**\n * @private\n */\n _setSVGPreamble(markup: string[], options: TSVGExportOptions): void {\n if (options.suppressPreamble) {\n return;\n }\n markup.push(\n '\\n',\n '\\n',\n );\n }\n\n /**\n * @private\n */\n _setSVGHeader(markup: string[], options: TSVGExportOptions): void {\n const width = options.width || `${this.width}`,\n height = options.height || `${this.height}`,\n NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS,\n optViewBox = options.viewBox;\n let viewBox: string;\n if (optViewBox) {\n viewBox = `viewBox=\"${optViewBox.x} ${optViewBox.y} ${optViewBox.width} ${optViewBox.height}\" `;\n } else if (this.svgViewportTransformation) {\n const vpt = this.viewportTransform;\n viewBox = `viewBox=\"${toFixed(\n -vpt[4] / vpt[0],\n NUM_FRACTION_DIGITS,\n )} ${toFixed(-vpt[5] / vpt[3], NUM_FRACTION_DIGITS)} ${toFixed(\n this.width / vpt[0],\n NUM_FRACTION_DIGITS,\n )} ${toFixed(this.height / vpt[3], NUM_FRACTION_DIGITS)}\" `;\n } else {\n viewBox = `viewBox=\"0 0 ${this.width} ${this.height}\" `;\n }\n\n markup.push(\n '\\n',\n 'Created with Fabric.js ',\n VERSION,\n '\\n',\n '\\n',\n this.createSVGFontFacesMarkup(),\n this.createSVGRefElementsMarkup(),\n this.createSVGClipPathMarkup(options),\n '\\n',\n );\n }\n\n createSVGClipPathMarkup(options: TSVGExportOptions): string {\n const clipPath = this.clipPath;\n if (clipPath) {\n clipPath.clipPathId = `CLIPPATH_${uid()}`;\n return `\\n${clipPath.toClipPathSVG(\n options.reviver,\n )}\\n`;\n }\n return '';\n }\n\n /**\n * Creates markup containing SVG referenced elements like patterns, gradients etc.\n * @return {String}\n */\n createSVGRefElementsMarkup(): string {\n return (['background', 'overlay'] as const)\n .map((prop) => {\n const fill = this[`${prop}Color`];\n if (isFiller(fill)) {\n const shouldTransform = this[`${prop}Vpt`],\n vpt = this.viewportTransform,\n object = {\n // otherwise circular dependency\n isType: () => false,\n width: this.width / (shouldTransform ? vpt[0] : 1),\n height: this.height / (shouldTransform ? vpt[3] : 1),\n };\n return fill.toSVG(object as FabricObject, {\n additionalTransform: shouldTransform ? matrixToSVG(vpt) : '',\n });\n }\n })\n .join('');\n }\n\n /**\n * Creates markup containing SVG font faces,\n * font URLs for font faces must be collected by developers\n * and are not extracted from the DOM by fabricjs\n * @param {Array} objects Array of fabric objects\n * @return {String}\n */\n createSVGFontFacesMarkup(): string {\n const objects: FabricObject[] = [],\n fontList: Record = {},\n fontPaths = config.fontPaths;\n\n this._objects.forEach(function add(object) {\n objects.push(object);\n if (isCollection(object)) {\n object._objects.forEach(add);\n }\n });\n\n objects.forEach((obj) => {\n if (!isTextObject(obj)) {\n return;\n }\n const { styles, fontFamily } = obj;\n if (fontList[fontFamily] || !fontPaths[fontFamily]) {\n return;\n }\n fontList[fontFamily] = true;\n if (!styles) {\n return;\n }\n Object.values(styles).forEach((styleRow) => {\n Object.values(styleRow).forEach(({ fontFamily = '' }) => {\n if (!fontList[fontFamily] && fontPaths[fontFamily]) {\n fontList[fontFamily] = true;\n }\n });\n });\n });\n\n const fontListMarkup = Object.keys(fontList)\n .map(\n (fontFamily) =>\n `\\t\\t@font-face {\\n\\t\\t\\tfont-family: '${fontFamily}';\\n\\t\\t\\tsrc: url('${fontPaths[fontFamily]}');\\n\\t\\t}\\n`,\n )\n .join('');\n\n if (fontListMarkup) {\n return `\\t\\n`;\n }\n return '';\n }\n\n /**\n * @private\n */\n _setSVGObjects(markup: string[], reviver?: TSVGReviver) {\n this.forEachObject((fabricObject) => {\n if (fabricObject.excludeFromExport) {\n return;\n }\n this._setSVGObject(markup, fabricObject, reviver);\n });\n }\n\n /**\n * This is its own function because the Canvas ( non static ) requires extra code here\n * @private\n */\n _setSVGObject(\n markup: string[],\n instance: FabricObject,\n reviver?: TSVGReviver,\n ) {\n markup.push(instance.toSVG(reviver));\n }\n\n /**\n * @private\n */\n _setSVGBgOverlayImage(\n markup: string[],\n property: 'overlayImage' | 'backgroundImage',\n reviver?: TSVGReviver,\n ) {\n const bgOrOverlay = this[property];\n if (bgOrOverlay && !bgOrOverlay.excludeFromExport && bgOrOverlay.toSVG) {\n markup.push(bgOrOverlay.toSVG(reviver));\n }\n }\n\n /**\n * @TODO this seems to handle patterns but fail at gradients.\n * @private\n */\n _setSVGBgOverlayColor(markup: string[], property: 'background' | 'overlay') {\n const filler = this[`${property}Color`];\n if (!filler) {\n return;\n }\n if (isFiller(filler)) {\n const repeat = (filler as Pattern).repeat || '',\n finalWidth = this.width,\n finalHeight = this.height,\n shouldInvert = this[`${property}Vpt`],\n additionalTransform = shouldInvert\n ? matrixToSVG(invertTransform(this.viewportTransform))\n : '';\n markup.push(\n `\\n`,\n );\n } else {\n markup.push(\n '\\n',\n );\n }\n }\n /* _TO_SVG_END_ */\n\n /**\n * Populates canvas with data from the specified JSON.\n * JSON format must conform to the one of {@link fabric.Canvas#toJSON}\n *\n * **IMPORTANT**: It is recommended to abort loading tasks before calling this method to prevent race conditions and unnecessary networking\n *\n * @param {String|Object} json JSON string or object\n * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created.\n * @param {Object} [options] options\n * @param {AbortSignal} [options.signal] see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @return {Promise} instance\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#deserialization}\n * @see {@link http://jsfiddle.net/fabricjs/fmgXt/|jsFiddle demo}\n * @example loadFromJSON\n * canvas.loadFromJSON(json).then((canvas) => canvas.requestRenderAll());\n * @example loadFromJSON with reviver\n * canvas.loadFromJSON(json, function(o, object) {\n * // `o` = json object\n * // `object` = fabric.Object instance\n * // ... do some stuff ...\n * }).then((canvas) => {\n * ... canvas is restored, add your code.\n * });\n *\n */\n loadFromJSON(\n json: string | Record,\n reviver?: EnlivenObjectOptions['reviver'],\n { signal }: Abortable = {},\n ): Promise {\n if (!json) {\n return Promise.reject(new FabricError('`json` is undefined'));\n }\n\n // parse json if it wasn't already\n const serialized = typeof json === 'string' ? JSON.parse(json) : json;\n const {\n objects = [],\n backgroundImage,\n background,\n overlayImage,\n overlay,\n clipPath,\n } = serialized;\n const renderOnAddRemove = this.renderOnAddRemove;\n this.renderOnAddRemove = false;\n\n return Promise.all([\n enlivenObjects(objects, {\n reviver,\n signal,\n }),\n enlivenObjectEnlivables(\n {\n backgroundImage,\n backgroundColor: background,\n overlayImage,\n overlayColor: overlay,\n clipPath,\n },\n { signal },\n ),\n ]).then(([enlived, enlivedMap]) => {\n this.clear();\n this.add(...enlived);\n this.set(serialized);\n this.set(enlivedMap);\n this.renderOnAddRemove = renderOnAddRemove;\n return this;\n });\n }\n\n /**\n * Clones canvas instance\n * @param {string[]} [properties] Array of properties to include in the cloned canvas and children\n */\n clone(properties: string[]) {\n const data = this.toObject(properties);\n const canvas = this.cloneWithoutData();\n return canvas.loadFromJSON(data);\n }\n\n /**\n * Clones canvas instance without cloning existing data.\n * This essentially copies canvas dimensions since loadFromJSON does not affect canvas size.\n */\n cloneWithoutData() {\n const el = createCanvasElement();\n el.width = this.width;\n el.height = this.height;\n return new (this.constructor as Constructor)(el);\n }\n\n /**\n * Exports canvas element to a dataurl image. Note that when multiplier is used, cropping is scaled appropriately\n * @param {Object} [options] Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by, to have consistent\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 2.0.0\n * @param {(object: fabric.Object) => boolean} [options.filter] Function to filter objects.\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n * @see {@link https://jsfiddle.net/xsjua1rd/ demo}\n * @example Generate jpeg dataURL with lower quality\n * var dataURL = canvas.toDataURL({\n * format: 'jpeg',\n * quality: 0.8\n * });\n * @example Generate cropped png dataURL (clipping of canvas)\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * left: 100,\n * top: 100,\n * width: 200,\n * height: 200\n * });\n * @example Generate double scaled png dataURL\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * multiplier: 2\n * });\n * @example Generate dataURL with objects that overlap a specified object\n * var myObject;\n * var dataURL = canvas.toDataURL({\n * filter: (object) => object.isContainedWithinObject(myObject) || object.intersectsWithObject(myObject)\n * });\n */\n toDataURL(options = {} as TDataUrlOptions): string {\n const {\n format = 'png',\n quality = 1,\n multiplier = 1,\n enableRetinaScaling = false,\n } = options;\n const finalMultiplier =\n multiplier * (enableRetinaScaling ? this.getRetinaScaling() : 1);\n\n return toDataURL(\n this.toCanvasElement(finalMultiplier, options),\n format,\n quality,\n );\n }\n\n /**\n * Create a new HTMLCanvas element painted with the current canvas content.\n * No need to resize the actual one or repaint it.\n * Will transfer object ownership to a new canvas, paint it, and set everything back.\n * This is an intermediary step used to get to a dataUrl but also it is useful to\n * create quick image copies of a canvas without passing for the dataUrl string\n * @param {Number} [multiplier] a zoom factor.\n * @param {Object} [options] Cropping informations\n * @param {Number} [options.left] Cropping left offset.\n * @param {Number} [options.top] Cropping top offset.\n * @param {Number} [options.width] Cropping width.\n * @param {Number} [options.height] Cropping height.\n * @param {(object: fabric.Object) => boolean} [options.filter] Function to filter objects.\n */\n toCanvasElement(\n multiplier = 1,\n { width, height, left, top, filter } = {} as TToCanvasElementOptions,\n ): HTMLCanvasElement {\n const scaledWidth = (width || this.width) * multiplier,\n scaledHeight = (height || this.height) * multiplier,\n zoom = this.getZoom(),\n originalWidth = this.width,\n originalHeight = this.height,\n originalSkipControlsDrawing = this.skipControlsDrawing,\n newZoom = zoom * multiplier,\n vp = this.viewportTransform,\n translateX = (vp[4] - (left || 0)) * multiplier,\n translateY = (vp[5] - (top || 0)) * multiplier,\n newVp = [newZoom, 0, 0, newZoom, translateX, translateY] as TMat2D,\n originalRetina = this.enableRetinaScaling,\n canvasEl = createCanvasElement(),\n objectsToRender = filter\n ? this._objects.filter((obj) => filter(obj))\n : this._objects;\n canvasEl.width = scaledWidth;\n canvasEl.height = scaledHeight;\n this.enableRetinaScaling = false;\n this.viewportTransform = newVp;\n this.width = scaledWidth;\n this.height = scaledHeight;\n this.skipControlsDrawing = true;\n this.calcViewportBoundaries();\n this.renderCanvas(canvasEl.getContext('2d')!, objectsToRender);\n this.viewportTransform = vp;\n this.width = originalWidth;\n this.height = originalHeight;\n this.calcViewportBoundaries();\n this.enableRetinaScaling = originalRetina;\n this.skipControlsDrawing = originalSkipControlsDrawing;\n return canvasEl;\n }\n\n /**\n * Waits until rendering has settled to destroy the canvas\n * @returns {Promise} a promise resolving to `true` once the canvas has been destroyed or to `false` if the canvas has was already destroyed\n * @throws if aborted by a consequent call\n */\n dispose() {\n !this.disposed &&\n this.elements.cleanupDOM({ width: this.width, height: this.height });\n runningAnimations.cancelByCanvas(this);\n this.disposed = true;\n return new Promise((resolve, reject) => {\n const task = () => {\n this.destroy();\n resolve(true);\n };\n task.kill = reject;\n if (this.__cleanupTask) {\n this.__cleanupTask.kill('aborted');\n }\n\n if (this.destroyed) {\n resolve(false);\n } else if (this.nextRenderHandle) {\n this.__cleanupTask = task;\n } else {\n task();\n }\n });\n }\n\n /**\n * Clears the canvas element, disposes objects and frees resources.\n *\n * Invoked as part of the **async** operation of {@link dispose}.\n *\n * **CAUTION**:\n *\n * This method is **UNSAFE**.\n * You may encounter a race condition using it if there's a requested render.\n * Call this method only if you are sure rendering has settled.\n * Consider using {@link dispose} as it is **SAFE**\n *\n * @private\n */\n destroy() {\n this.destroyed = true;\n this.cancelRequestedRender();\n this.forEachObject((object) => object.dispose());\n this._objects = [];\n if (this.backgroundImage) {\n this.backgroundImage.dispose();\n }\n this.backgroundImage = undefined;\n if (this.overlayImage) {\n this.overlayImage.dispose();\n }\n this.overlayImage = undefined;\n this.elements.dispose();\n }\n\n /**\n * Returns a string representation of an instance\n * @return {String} string representation of an instance\n */\n toString() {\n return `#`;\n }\n}\n","import type { TPointerEvent } from '../EventTypeDefs';\nimport { Point } from '../Point';\nimport { getScrollLeftTop } from './dom_misc';\n\nconst touchEvents = ['touchstart', 'touchmove', 'touchend'];\n\nfunction getTouchInfo(event: TouchEvent | MouseEvent): MouseEvent | Touch {\n const touchProp = (event as TouchEvent).changedTouches;\n if (touchProp && touchProp[0]) {\n return touchProp[0];\n }\n return event as MouseEvent;\n}\n\nexport const getPointer = (event: TPointerEvent): Point => {\n const element = event.target as HTMLElement,\n scroll = getScrollLeftTop(element),\n _evt = getTouchInfo(event);\n return new Point(_evt.clientX + scroll.left, _evt.clientY + scroll.top);\n};\n\nexport const isTouchEvent = (event: TPointerEvent) =>\n touchEvents.includes(event.type) ||\n (event as PointerEvent).pointerType === 'touch';\n\nexport const stopEvent = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n};\n","import type { XY } from '../../Point';\nimport type { TBBox } from '../../typedefs';\n\n/**\n * Calculates bounding box (left, top, width, height) from given `points`\n * @param {XY[]} points\n * @return {Object} Object with left, top, width, height properties\n */\nexport const makeBoundingBoxFromPoints = (points: XY[]): TBBox => {\n let left = 0,\n top = 0,\n width = 0,\n height = 0;\n\n for (let i = 0, len = points.length; i < len; i++) {\n const { x, y } = points[i];\n if (x > width || !i) width = x;\n if (x < left || !i) left = x;\n if (y > height || !i) height = y;\n if (y < top || !i) top = y;\n }\n\n return {\n left,\n top,\n width: width - left,\n height: height - top,\n };\n};\n","import { Point } from '../../Point';\nimport { CENTER } from '../../constants';\nimport type { FabricObject } from '../../shapes/Object/Object';\nimport type { TMat2D } from '../../typedefs';\nimport { makeBoundingBoxFromPoints } from './boundingBoxFromPoints';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n qrDecompose,\n} from './matrix';\n\n/**\n * given an object and a transform, apply the inverse transform to the object,\n * this is equivalent to remove from that object that transformation, so that\n * added in a space with the removed transform, the object will be the same as before.\n * Removing from an object a transform that scale by 2 is like scaling it by 1/2.\n * Removing from an object a transform that rotate by 30deg is like rotating by 30deg\n * in the opposite direction.\n * This util is used to add objects inside transformed groups or nested groups.\n * @param {FabricObject} object the object you want to transform\n * @param {TMat2D} transform the destination transform\n */\nexport const removeTransformFromObject = (\n object: FabricObject,\n transform: TMat2D,\n) => {\n const inverted = invertTransform(transform),\n finalTransform = multiplyTransformMatrices(\n inverted,\n object.calcOwnMatrix(),\n );\n applyTransformToObject(object, finalTransform);\n};\n\n/**\n * given an object and a transform, apply the transform to the object.\n * this is equivalent to change the space where the object is drawn.\n * Adding to an object a transform that scale by 2 is like scaling it by 2.\n * This is used when removing an object from an active selection for example.\n * @param {FabricObject} object the object you want to transform\n * @param {Array} transform the destination transform\n */\nexport const addTransformToObject = (object: FabricObject, transform: TMat2D) =>\n applyTransformToObject(\n object,\n multiplyTransformMatrices(transform, object.calcOwnMatrix()),\n );\n\n/**\n * discard an object transform state and apply the one from the matrix.\n * @param {FabricObject} object the object you want to transform\n * @param {Array} transform the destination transform\n */\nexport const applyTransformToObject = (\n object: FabricObject,\n transform: TMat2D,\n) => {\n const { translateX, translateY, scaleX, scaleY, ...otherOptions } =\n qrDecompose(transform),\n center = new Point(translateX, translateY);\n object.flipX = false;\n object.flipY = false;\n Object.assign(object, otherOptions);\n object.set({ scaleX, scaleY });\n object.setPositionByOrigin(center, CENTER, CENTER);\n};\n/**\n * reset an object transform state to neutral. Top and left are not accounted for\n * @param {FabricObject} target object to transform\n */\nexport const resetObjectTransform = (target: FabricObject) => {\n target.scaleX = 1;\n target.scaleY = 1;\n target.skewX = 0;\n target.skewY = 0;\n target.flipX = false;\n target.flipY = false;\n target.rotate(0);\n};\n\n/**\n * Extract Object transform values\n * @param {FabricObject} target object to read from\n * @return {Object} Components of transform\n */\nexport const saveObjectTransform = (target: FabricObject) => ({\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n angle: target.angle,\n left: target.left,\n flipX: target.flipX,\n flipY: target.flipY,\n top: target.top,\n});\n\n/**\n * given a width and height, return the size of the bounding box\n * that can contains the box with width/height with applied transform.\n * Use to calculate the boxes around objects for controls.\n * @param {Number} width\n * @param {Number} height\n * @param {TMat2D} t\n * @returns {Point} size\n */\nexport const sizeAfterTransform = (\n width: number,\n height: number,\n t: TMat2D,\n) => {\n const dimX = width / 2,\n dimY = height / 2,\n points = [\n new Point(-dimX, -dimY),\n new Point(dimX, -dimY),\n new Point(-dimX, dimY),\n new Point(dimX, dimY),\n ].map((p) => p.transform(t)),\n bbox = makeBoundingBoxFromPoints(points);\n return new Point(bbox.width, bbox.height);\n};\n","import { iMatrix } from '../../constants';\nimport type { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/Object';\nimport type { TMat2D } from '../../typedefs';\nimport { invertTransform, multiplyTransformMatrices } from './matrix';\nimport { applyTransformToObject } from './objectTransforms';\n\n/**\n * We are actually looking for the transformation from the destination plane to the source plane (change of basis matrix)\\\n * The object will exist on the destination plane and we want it to seem unchanged by it so we invert the destination matrix (`to`) and then apply the source matrix (`from`)\n * @param [from]\n * @param [to]\n * @returns\n */\nexport const calcPlaneChangeMatrix = (\n from: TMat2D = iMatrix,\n to: TMat2D = iMatrix,\n) => multiplyTransformMatrices(invertTransform(to), from);\n\n/**\n * Sends a point from the source coordinate plane to the destination coordinate plane.\\\n * From the canvas/viewer's perspective the point remains unchanged.\n *\n * @example Send point from canvas plane to group plane\n * var obj = new Rect({ left: 20, top: 20, width: 60, height: 60, strokeWidth: 0 });\n * var group = new Group([obj], { strokeWidth: 0 });\n * var sentPoint1 = sendPointToPlane(new Point(50, 50), undefined, group.calcTransformMatrix());\n * var sentPoint2 = sendPointToPlane(new Point(50, 50), iMatrix, group.calcTransformMatrix());\n * console.log(sentPoint1, sentPoint2) // both points print (0,0) which is the center of group\n *\n * @param {Point} point\n * @param {TMat2D} [from] plane matrix containing object. Passing `undefined` is equivalent to passing the identity matrix, which means `point` exists in the canvas coordinate plane.\n * @param {TMat2D} [to] destination plane matrix to contain object. Passing `undefined` means `point` should be sent to the canvas coordinate plane.\n * @returns {Point} transformed point\n */\nexport const sendPointToPlane = (\n point: Point,\n from: TMat2D = iMatrix,\n to: TMat2D = iMatrix,\n): Point => point.transform(calcPlaneChangeMatrix(from, to));\n\n/**\n * See {@link sendPointToPlane}\n */\nexport const sendVectorToPlane = (\n point: Point,\n from: TMat2D = iMatrix,\n to: TMat2D = iMatrix,\n): Point => point.transform(calcPlaneChangeMatrix(from, to), true);\n\n/**\n *\n * A util that abstracts applying transform to objects.\\\n * Sends `object` to the destination coordinate plane by applying the relevant transformations.\\\n * Changes the space/plane where `object` is drawn.\\\n * From the canvas/viewer's perspective `object` remains unchanged.\n *\n * @example Move clip path from one object to another while preserving it's appearance as viewed by canvas/viewer\n * let obj, obj2;\n * let clipPath = new Circle({ radius: 50 });\n * obj.clipPath = clipPath;\n * // render\n * sendObjectToPlane(clipPath, obj.calcTransformMatrix(), obj2.calcTransformMatrix());\n * obj.clipPath = undefined;\n * obj2.clipPath = clipPath;\n * // render, clipPath now clips obj2 but seems unchanged from the eyes of the viewer\n *\n * @example Clip an object's clip path with an existing object\n * let obj, existingObj;\n * let clipPath = new Circle({ radius: 50 });\n * obj.clipPath = clipPath;\n * let transformTo = multiplyTransformMatrices(obj.calcTransformMatrix(), clipPath.calcTransformMatrix());\n * sendObjectToPlane(existingObj, existingObj.group?.calcTransformMatrix(), transformTo);\n * clipPath.clipPath = existingObj;\n *\n * @param {FabricObject} object\n * @param {Matrix} [from] plane matrix containing object. Passing `undefined` is equivalent to passing the identity matrix, which means `object` is a direct child of canvas.\n * @param {Matrix} [to] destination plane matrix to contain object. Passing `undefined` means `object` should be sent to the canvas coordinate plane.\n * @returns {Matrix} the transform matrix that was applied to `object`\n */\nexport const sendObjectToPlane = (\n object: FabricObject,\n from?: TMat2D,\n to?: TMat2D,\n): TMat2D => {\n const t = calcPlaneChangeMatrix(from, to);\n applyTransformToObject(\n object,\n multiplyTransformMatrices(t, object.calcOwnMatrix()),\n );\n return t;\n};\n","import type {\n ObjectModificationEvents,\n TModificationEvents,\n} from '../EventTypeDefs';\n\nexport const fireEvent = (\n eventName: TModificationEvents,\n options: ObjectModificationEvents[typeof eventName],\n) => {\n const {\n transform: { target },\n } = options;\n target.canvas?.fire(`object:${eventName}`, {\n ...options,\n target,\n });\n target.fire(eventName, options);\n};\n","import type { TOriginX, TOriginY } from '../../typedefs';\n\nconst originOffset = {\n left: -0.5,\n top: -0.5,\n center: 0,\n bottom: 0.5,\n right: 0.5,\n};\n/**\n * Resolves origin value relative to center\n * @private\n * @param {TOriginX | TOriginY} originValue originX / originY\n * @returns number\n */\n\nexport const resolveOrigin = (\n originValue: TOriginX | TOriginY | number,\n): number =>\n typeof originValue === 'string'\n ? originOffset[originValue]\n : originValue - 0.5;\n","import type {\n TPointerEvent,\n Transform,\n TransformAction,\n BasicTransformEvent,\n} from '../EventTypeDefs';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { Point } from '../Point';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TOriginX, TOriginY } from '../typedefs';\nimport {\n degreesToRadians,\n radiansToDegrees,\n} from '../util/misc/radiansDegreesConversion';\nimport type { Control } from './Control';\nimport { CENTER } from '../constants';\n\nexport const NOT_ALLOWED_CURSOR = 'not-allowed';\n\n/**\n * @param {Boolean} alreadySelected true if target is already selected\n * @param {String} corner a string representing the corner ml, mr, tl ...\n * @param {Event} e Event object\n * @param {FabricObject} [target] inserted back to help overriding. Unused\n */\nexport const getActionFromCorner = (\n alreadySelected: boolean,\n corner: string | undefined,\n e: TPointerEvent,\n target: FabricObject,\n) => {\n if (!corner || !alreadySelected) {\n return 'drag';\n }\n const control = target.controls[corner];\n return control.getActionName(e, control, target);\n};\n\n/**\n * Checks if transform is centered\n * @param {Object} transform transform data\n * @return {Boolean} true if transform is centered\n */\nexport function isTransformCentered(transform: Transform) {\n return (\n resolveOrigin(transform.originX) === resolveOrigin(CENTER) &&\n resolveOrigin(transform.originY) === resolveOrigin(CENTER)\n );\n}\n\nexport function invertOrigin(origin: TOriginX | TOriginY) {\n return -resolveOrigin(origin) + 0.5;\n}\n\nexport const isLocked = (\n target: FabricObject,\n lockingKey:\n | 'lockMovementX'\n | 'lockMovementY'\n | 'lockRotation'\n | 'lockScalingX'\n | 'lockScalingY'\n | 'lockSkewingX'\n | 'lockSkewingY'\n | 'lockScalingFlip',\n) => target[lockingKey];\n\nexport const commonEventInfo: TransformAction<\n Transform,\n BasicTransformEvent\n> = (eventData, transform, x, y) => {\n return {\n e: eventData,\n transform,\n pointer: new Point(x, y),\n };\n};\n\n/**\n * Combine control position and object angle to find the control direction compared\n * to the object center.\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n * @param {Control} control the control class\n * @return {Number} 0 - 7 a quadrant number\n */\nexport function findCornerQuadrant(\n fabricObject: FabricObject,\n control: Control,\n): number {\n // angle is relative to canvas plane\n const angle = fabricObject.getTotalAngle(),\n cornerAngle =\n angle + radiansToDegrees(Math.atan2(control.y, control.x)) + 360;\n return Math.round((cornerAngle % 360) / 45);\n}\n\n/**\n * @returns the normalized point (rotated relative to center) in local coordinates\n */\nfunction normalizePoint(\n target: FabricObject,\n point: Point,\n originX: TOriginX,\n originY: TOriginY,\n): Point {\n const center = target.getRelativeCenterPoint(),\n p =\n typeof originX !== 'undefined' && typeof originY !== 'undefined'\n ? target.translateToGivenOrigin(\n center,\n CENTER,\n CENTER,\n originX,\n originY,\n )\n : new Point(target.left, target.top),\n p2 = target.angle\n ? point.rotate(-degreesToRadians(target.angle), center)\n : point;\n return p2.subtract(p);\n}\n\n/**\n * Transforms a point to the offset from the given origin\n * @param {Object} transform\n * @param {String} originX\n * @param {String} originY\n * @param {number} x\n * @param {number} y\n * @return {Fabric.Point} the normalized point\n */\nexport function getLocalPoint(\n { target, corner }: Transform,\n originX: TOriginX,\n originY: TOriginY,\n x: number,\n y: number,\n) {\n const control = target.controls[corner],\n zoom = target.canvas?.getZoom() || 1,\n padding = target.padding / zoom,\n localPoint = normalizePoint(target, new Point(x, y), originX, originY);\n if (localPoint.x >= padding) {\n localPoint.x -= padding;\n }\n if (localPoint.x <= -padding) {\n localPoint.x += padding;\n }\n if (localPoint.y >= padding) {\n localPoint.y -= padding;\n }\n if (localPoint.y <= padding) {\n localPoint.y += padding;\n }\n localPoint.x -= control.offsetX;\n localPoint.y -= control.offsetY;\n return localPoint;\n}\n","import type { TransformActionHandler } from '../EventTypeDefs';\nimport { LEFT, TOP, MOVING } from '../constants';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo, isLocked } from './util';\n\n/**\n * Action handler\n * @private\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if the translation occurred\n */\nexport const dragHandler: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target, offsetX, offsetY } = transform,\n newLeft = x - offsetX,\n newTop = y - offsetY,\n moveX = !isLocked(target, 'lockMovementX') && target.left !== newLeft,\n moveY = !isLocked(target, 'lockMovementY') && target.top !== newTop;\n moveX && target.set(LEFT, newLeft);\n moveY && target.set(TOP, newTop);\n if (moveX || moveY) {\n fireEvent(MOVING, commonEventInfo(eventData, transform, x, y));\n }\n return moveX || moveY;\n};\n","import type { TSVGReviver } from '../../typedefs';\nimport { uid } from '../../util/internals/uid';\nimport { colorPropToSVG, matrixToSVG } from '../../util/misc/svgParsing';\nimport { FILL, NONE, STROKE } from '../../constants';\nimport type { FabricObject } from './FabricObject';\nimport { isFiller } from '../../util/typeAssertions';\n\nexport class FabricObjectSVGExportMixin {\n /**\n * When an object is being exported as SVG as a clippath, a reference inside the SVG is needed.\n * This reference is a UID in the fabric namespace and is temporary stored here.\n * @type {String}\n */\n declare clipPathId?: string;\n\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles(\n this: FabricObjectSVGExportMixin & FabricObject,\n skipShadow?: boolean,\n ) {\n const fillRule = this.fillRule ? this.fillRule : 'nonzero',\n strokeWidth = this.strokeWidth ? this.strokeWidth : '0',\n strokeDashArray = this.strokeDashArray\n ? this.strokeDashArray.join(' ')\n : NONE,\n strokeDashOffset = this.strokeDashOffset ? this.strokeDashOffset : '0',\n strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt',\n strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter',\n strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4',\n opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1',\n visibility = this.visible ? '' : ' visibility: hidden;',\n filter = skipShadow ? '' : this.getSvgFilter(),\n fill = colorPropToSVG(FILL, this.fill),\n stroke = colorPropToSVG(STROKE, this.stroke);\n\n return [\n stroke,\n 'stroke-width: ',\n strokeWidth,\n '; ',\n 'stroke-dasharray: ',\n strokeDashArray,\n '; ',\n 'stroke-linecap: ',\n strokeLineCap,\n '; ',\n 'stroke-dashoffset: ',\n strokeDashOffset,\n '; ',\n 'stroke-linejoin: ',\n strokeLineJoin,\n '; ',\n 'stroke-miterlimit: ',\n strokeMiterLimit,\n '; ',\n fill,\n 'fill-rule: ',\n fillRule,\n '; ',\n 'opacity: ',\n opacity,\n ';',\n filter,\n visibility,\n ].join('');\n }\n\n /**\n * Returns filter for svg shadow\n * @return {String}\n */\n getSvgFilter(this: FabricObjectSVGExportMixin & FabricObject) {\n return this.shadow ? `filter: url(#SVGID_${this.shadow.id});` : '';\n }\n\n /**\n * Returns id attribute for svg output\n * @return {String}\n */\n getSvgCommons(\n this: FabricObjectSVGExportMixin & FabricObject & { id?: string },\n ) {\n return [\n this.id ? `id=\"${this.id}\" ` : '',\n this.clipPath\n ? `clip-path=\"url(#${\n (this.clipPath as FabricObjectSVGExportMixin & FabricObject)\n .clipPathId\n })\" `\n : '',\n ].join('');\n }\n\n /**\n * Returns transform-string for svg-export\n * @param {Boolean} use the full transform or the single object one.\n * @return {String}\n */\n getSvgTransform(\n this: FabricObjectSVGExportMixin & FabricObject,\n full?: boolean,\n additionalTransform = '',\n ) {\n const transform = full ? this.calcTransformMatrix() : this.calcOwnMatrix(),\n svgTransform = `transform=\"${matrixToSVG(transform)}`;\n return `${svgTransform}${additionalTransform}\" `;\n }\n\n /**\n * Returns svg representation of an instance\n * This function is implemented in each subclass\n * This is just because typescript otherwise cryies all the time\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG(_reviver?: TSVGReviver): string[] {\n return [''];\n }\n\n /**\n * Returns svg representation of an instance\n * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG(\n this: FabricObjectSVGExportMixin & FabricObject,\n reviver?: TSVGReviver,\n ) {\n return this._createBaseSVGMarkup(this._toSVG(reviver), {\n reviver,\n });\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG(\n this: FabricObjectSVGExportMixin & FabricObject,\n reviver?: TSVGReviver,\n ) {\n return (\n '\\t' +\n this._createBaseClipPathSVGMarkup(this._toSVG(reviver), {\n reviver,\n })\n );\n }\n\n /**\n * @private\n */\n _createBaseClipPathSVGMarkup(\n this: FabricObjectSVGExportMixin & FabricObject,\n objectMarkup: string[],\n {\n reviver,\n additionalTransform = '',\n }: { reviver?: TSVGReviver; additionalTransform?: string } = {},\n ) {\n const commonPieces = [\n this.getSvgTransform(true, additionalTransform),\n this.getSvgCommons(),\n ].join(''),\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS');\n objectMarkup[index] = commonPieces;\n return reviver ? reviver(objectMarkup.join('')) : objectMarkup.join('');\n }\n\n /**\n * @private\n */\n _createBaseSVGMarkup(\n this: FabricObjectSVGExportMixin & FabricObject,\n objectMarkup: string[],\n {\n noStyle,\n reviver,\n withShadow,\n additionalTransform,\n }: {\n noStyle?: boolean;\n reviver?: TSVGReviver;\n withShadow?: boolean;\n additionalTransform?: string;\n } = {},\n ): string {\n const styleInfo = noStyle ? '' : `style=\"${this.getSvgStyles()}\" `,\n shadowInfo = withShadow ? `style=\"${this.getSvgFilter()}\" ` : '',\n clipPath = this.clipPath as FabricObjectSVGExportMixin & FabricObject,\n vectorEffect = this.strokeUniform\n ? 'vector-effect=\"non-scaling-stroke\" '\n : '',\n absoluteClipPath = clipPath && clipPath.absolutePositioned,\n stroke = this.stroke,\n fill = this.fill,\n shadow = this.shadow,\n markup = [],\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS');\n let clipPathMarkup;\n if (clipPath) {\n clipPath.clipPathId = `CLIPPATH_${uid()}`;\n clipPathMarkup = `\\n${clipPath.toClipPathSVG(reviver)}\\n`;\n }\n if (absoluteClipPath) {\n markup.push('\\n');\n }\n markup.push(\n '\\n',\n );\n const commonPieces = [\n styleInfo,\n vectorEffect,\n noStyle ? '' : this.addPaintOrder(),\n ' ',\n additionalTransform ? `transform=\"${additionalTransform}\" ` : '',\n ].join('');\n objectMarkup[index] = commonPieces;\n if (isFiller(fill)) {\n markup.push(fill.toSVG(this));\n }\n if (isFiller(stroke)) {\n markup.push(stroke.toSVG(this));\n }\n if (shadow) {\n markup.push(shadow.toSVG(this));\n }\n if (clipPath) {\n markup.push(clipPathMarkup);\n }\n markup.push(objectMarkup.join(''));\n markup.push('\\n');\n absoluteClipPath && markup.push('\\n');\n return reviver ? reviver(markup.join('')) : markup.join('');\n }\n\n addPaintOrder(this: FabricObjectSVGExportMixin & FabricObject) {\n return this.paintFirst !== FILL ? ` paint-order=\"${this.paintFirst}\" ` : '';\n }\n}\n","export function getSvgRegex(arr: string[]) {\n return new RegExp('^(' + arr.join('|') + ')\\\\b', 'i');\n}\n","import { getSvgRegex } from './getSvgRegex';\nimport { LEFT, TOP } from '../constants';\n\nexport const reNum = String.raw`(?:[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?)`;\n\nexport const svgNS = 'http://www.w3.org/2000/svg';\n\nexport const reFontDeclaration = new RegExp(\n '(normal|italic)?\\\\s*(normal|small-caps)?\\\\s*' +\n '(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\\\s*(' +\n reNum +\n '(?:px|cm|mm|em|pt|pc|in)*)(?:\\\\/(normal|' +\n reNum +\n '))?\\\\s+(.*)',\n);\n\nexport const svgValidTagNames = [\n 'path',\n 'circle',\n 'polygon',\n 'polyline',\n 'ellipse',\n 'rect',\n 'line',\n 'image',\n 'text',\n ],\n svgViewBoxElements = ['symbol', 'image', 'marker', 'pattern', 'view', 'svg'],\n svgInvalidAncestors = [\n 'pattern',\n 'defs',\n 'symbol',\n 'metadata',\n 'clipPath',\n 'mask',\n 'desc',\n ],\n svgValidParents = ['symbol', 'g', 'a', 'svg', 'clipPath', 'defs'],\n attributesMap = {\n cx: LEFT,\n x: LEFT,\n r: 'radius',\n cy: TOP,\n y: TOP,\n display: 'visible',\n visibility: 'visible',\n transform: 'transformMatrix',\n 'fill-opacity': 'fillOpacity',\n 'fill-rule': 'fillRule',\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-style': 'fontStyle',\n 'font-weight': 'fontWeight',\n 'letter-spacing': 'charSpacing',\n 'paint-order': 'paintFirst',\n 'stroke-dasharray': 'strokeDashArray',\n 'stroke-dashoffset': 'strokeDashOffset',\n 'stroke-linecap': 'strokeLineCap',\n 'stroke-linejoin': 'strokeLineJoin',\n 'stroke-miterlimit': 'strokeMiterLimit',\n 'stroke-opacity': 'strokeOpacity',\n 'stroke-width': 'strokeWidth',\n 'text-decoration': 'textDecoration',\n 'text-anchor': 'textAnchor',\n opacity: 'opacity',\n 'clip-path': 'clipPath',\n 'clip-rule': 'clipRule',\n 'vector-effect': 'strokeUniform',\n 'image-rendering': 'imageSmoothing',\n },\n fSize = 'font-size',\n cPath = 'clip-path';\n\nexport const svgValidTagNamesRegEx = getSvgRegex(svgValidTagNames);\n\nexport const svgViewBoxElementsRegEx = getSvgRegex(svgViewBoxElements);\n\nexport const svgValidParentsRegEx = getSvgRegex(svgValidParents);\n\n// http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute\n// matches, e.g.: +14.56e-12, etc.\nexport const reViewBoxAttrValue = new RegExp(\n '^' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*,?' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*,?' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*,?' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*' +\n '$',\n);\n","import type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport type { TRadian } from '../../typedefs';\n\nconst unitVectorX = new Point(1, 0);\nconst zero = new Point();\n\n/**\n * Rotates `vector` with `radians`\n * @param {Point} vector The vector to rotate (x and y)\n * @param {Number} radians The radians of the angle for the rotation\n * @return {Point} The new rotated point\n */\nexport const rotateVector = (vector: Point, radians: TRadian) =>\n vector.rotate(radians);\n\n/**\n * Creates a vector from points represented as a point\n *\n * @param {Point} from\n * @param {Point} to\n * @returns {Point} vector\n */\nexport const createVector = (from: XY, to: XY): Point =>\n new Point(to).subtract(from);\n\n/**\n * return the magnitude of a vector\n * @return {number}\n */\nexport const magnitude = (point: Point) => point.distanceFrom(zero);\n\n/**\n * Calculates the angle between 2 vectors\n * @param {Point} a\n * @param {Point} b\n * @returns the angle in radians from `a` to `b`\n */\nexport const calcAngleBetweenVectors = (a: Point, b: Point): TRadian =>\n Math.atan2(crossProduct(a, b), dotProduct(a, b)) as TRadian;\n\n/**\n * Calculates the angle between the x axis and the vector\n * @param {Point} v\n * @returns the angle in radians of `v`\n */\nexport const calcVectorRotation = (v: Point) =>\n calcAngleBetweenVectors(unitVectorX, v);\n\n/**\n * @param {Point} v\n * @returns {Point} vector representing the unit vector pointing to the direction of `v`\n */\nexport const getUnitVector = (v: Point): Point =>\n v.eq(zero) ? v : v.scalarDivide(magnitude(v));\n\n/**\n * @param {Point} v\n * @param {Boolean} [counterClockwise] the direction of the orthogonal vector, defaults to `true`\n * @returns {Point} the unit orthogonal vector\n */\nexport const getOrthonormalVector = (\n v: Point,\n counterClockwise = true,\n): Point =>\n getUnitVector(new Point(-v.y, v.x).scalarMultiply(counterClockwise ? 1 : -1));\n\n/**\n * Cross product of two vectors in 2D\n * @param {Point} a\n * @param {Point} b\n * @returns {number} the magnitude of Z vector\n */\nexport const crossProduct = (a: Point, b: Point): number =>\n a.x * b.y - a.y * b.x;\n\n/**\n * Dot product of two vectors in 2D\n * @param {Point} a\n * @param {Point} b\n * @returns {number}\n */\nexport const dotProduct = (a: Point, b: Point): number => a.x * b.x + a.y * b.y;\n\n/**\n * Checks if the vector is between two others. It is considered\n * to be inside when the vector to be tested is between the\n * initial vector and the final vector (included) in a counterclockwise direction.\n * @param {Point} t vector to be tested\n * @param {Point} a initial vector\n * @param {Point} b final vector\n * @returns {boolean} true if the vector is among the others\n */\nexport const isBetweenVectors = (t: Point, a: Point, b: Point): boolean => {\n if (t.eq(a) || t.eq(b)) return true;\n const AxB = crossProduct(a, b),\n AxT = crossProduct(a, t),\n BxT = crossProduct(b, t);\n return AxB >= 0 ? AxT >= 0 && BxT <= 0 : !(AxT <= 0 && BxT >= 0);\n};\n","import { classRegistry } from './ClassRegistry';\nimport { Color } from './color/Color';\nimport { config } from './config';\nimport { reNum } from './parser/constants';\nimport { Point } from './Point';\nimport type { FabricObject } from './shapes/Object/FabricObject';\nimport type { TClassProperties } from './typedefs';\nimport { uid } from './util/internals/uid';\nimport { pickBy } from './util/misc/pick';\nimport { degreesToRadians } from './util/misc/radiansDegreesConversion';\nimport { toFixed } from './util/misc/toFixed';\nimport { rotateVector } from './util/misc/vectors';\n\n/**\n * Regex matching shadow offsetX, offsetY and blur (ex: \"2px 2px 10px rgba(0,0,0,0.2)\", \"rgb(0,255,0) 2px 2px\")\n * - (?:\\s|^): This part captures either a whitespace character (\\s) or the beginning of a line (^). It's non-capturing (due to (?:...)), meaning it doesn't create a capturing group.\n * - (-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?: This captures the first component of the shadow, which is the horizontal offset. Breaking it down:\n * - (-?\\d+): Captures an optional minus sign followed by one or more digits (integer part of the number).\n * - (?:\\.\\d*)?: Optionally captures a decimal point followed by zero or more digits (decimal part of the number).\n * - (?:px)?: Optionally captures the \"px\" unit.\n * - (?:\\s?|$): Captures either an optional whitespace or the end of the line. This whole part is wrapped in a non-capturing group and marked as optional with ?.\n * - (-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?: Similar to the previous step, this captures the vertical offset.\n\n(\\d+(?:\\.\\d*)?(?:px)?)?: This captures the blur radius. It's similar to the horizontal offset but without the optional minus sign.\n\n(?:\\s+(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?){0,1}: This captures an optional part for the color. It allows for whitespace followed by a component with an optional minus sign, digits, decimal point, and \"px\" unit.\n\n(?:$|\\s): This captures either the end of the line or a whitespace character. It ensures that the match ends either at the end of the string or with a whitespace character.\n */\n// eslint-disable-next-line max-len\n\nconst shadowOffsetRegex = '(-?\\\\d+(?:\\\\.\\\\d*)?(?:px)?(?:\\\\s?|$))?';\n\nconst reOffsetsAndBlur = new RegExp(\n '(?:\\\\s|^)' +\n shadowOffsetRegex +\n shadowOffsetRegex +\n '(' +\n reNum +\n '?(?:px)?)?(?:\\\\s?|$)(?:$|\\\\s)',\n);\n\nexport const shadowDefaultValues: Partial> = {\n color: 'rgb(0,0,0)',\n blur: 0,\n offsetX: 0,\n offsetY: 0,\n affectStroke: false,\n includeDefaultValues: true,\n nonScaling: false,\n};\n\nexport type SerializedShadowOptions = {\n color: string;\n blur: number;\n offsetX: number;\n offsetY: number;\n affectStroke: boolean;\n nonScaling: boolean;\n type: string;\n};\n\nexport class Shadow {\n /**\n * Shadow color\n * @type String\n * @default\n */\n declare color: string;\n\n /**\n * Shadow blur\n * @type Number\n */\n declare blur: number;\n\n /**\n * Shadow horizontal offset\n * @type Number\n * @default\n */\n declare offsetX: number;\n\n /**\n * Shadow vertical offset\n * @type Number\n * @default\n */\n declare offsetY: number;\n\n /**\n * Whether the shadow should affect stroke operations\n * @type Boolean\n * @default\n */\n declare affectStroke: boolean;\n\n /**\n * Indicates whether toObject should include default values\n * @type Boolean\n * @default\n */\n declare includeDefaultValues: boolean;\n\n /**\n * When `false`, the shadow will scale with the object.\n * When `true`, the shadow's offsetX, offsetY, and blur will not be affected by the object's scale.\n * default to false\n * @type Boolean\n * @default\n */\n declare nonScaling: boolean;\n\n declare id: number;\n\n static ownDefaults = shadowDefaultValues;\n\n static type = 'shadow';\n\n /**\n * @see {@link http://fabricjs.com/shadows|Shadow demo}\n * @param {Object|String} [options] Options object with any of color, blur, offsetX, offsetY properties or string (e.g. \"rgba(0,0,0,0.2) 2px 2px 10px\")\n */\n constructor(options: Partial>);\n constructor(svgAttribute: string);\n constructor(arg0: string | Partial>) {\n const options: Partial> =\n typeof arg0 === 'string' ? Shadow.parseShadow(arg0) : arg0;\n Object.assign(this, Shadow.ownDefaults, options);\n this.id = uid();\n }\n\n /**\n * @param {String} value Shadow value to parse\n * @return {Object} Shadow object with color, offsetX, offsetY and blur\n */\n static parseShadow(value: string) {\n const shadowStr = value.trim(),\n [, offsetX = 0, offsetY = 0, blur = 0] = (\n reOffsetsAndBlur.exec(shadowStr) || []\n ).map((value) => parseFloat(value) || 0),\n color = (shadowStr.replace(reOffsetsAndBlur, '') || 'rgb(0,0,0)').trim();\n\n return {\n color,\n offsetX,\n offsetY,\n blur,\n };\n }\n\n /**\n * Returns a string representation of an instance\n * @see http://www.w3.org/TR/css-text-decor-3/#text-shadow\n * @return {String} Returns CSS3 text-shadow declaration\n */\n toString() {\n return [this.offsetX, this.offsetY, this.blur, this.color].join('px ');\n }\n\n /**\n * Returns SVG representation of a shadow\n * @param {FabricObject} object\n * @return {String} SVG representation of a shadow\n */\n toSVG(object: FabricObject) {\n const offset = rotateVector(\n new Point(this.offsetX, this.offsetY),\n degreesToRadians(-object.angle),\n ),\n BLUR_BOX = 20,\n color = new Color(this.color);\n let fBoxX = 40,\n fBoxY = 40;\n\n if (object.width && object.height) {\n //http://www.w3.org/TR/SVG/filters.html#FilterEffectsRegion\n // we add some extra space to filter box to contain the blur ( 20 )\n fBoxX =\n toFixed(\n (Math.abs(offset.x) + this.blur) / object.width,\n config.NUM_FRACTION_DIGITS,\n ) *\n 100 +\n BLUR_BOX;\n fBoxY =\n toFixed(\n (Math.abs(offset.y) + this.blur) / object.height,\n config.NUM_FRACTION_DIGITS,\n ) *\n 100 +\n BLUR_BOX;\n }\n if (object.flipX) {\n offset.x *= -1;\n }\n if (object.flipY) {\n offset.y *= -1;\n }\n\n return `\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\t\\n\\t\\t\\n\\t\\n\\n`;\n }\n\n /**\n * Returns object representation of a shadow\n * @return {Object} Object representation of a shadow instance\n */\n toObject() {\n const data: SerializedShadowOptions = {\n color: this.color,\n blur: this.blur,\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n affectStroke: this.affectStroke,\n nonScaling: this.nonScaling,\n type: (this.constructor as typeof Shadow).type,\n };\n const defaults = Shadow.ownDefaults as SerializedShadowOptions;\n return !this.includeDefaultValues\n ? pickBy(data, (value, key) => value !== defaults[key])\n : data;\n }\n\n static async fromObject(options: Partial>) {\n return new this(options);\n }\n}\n\nclassRegistry.setClass(Shadow, 'shadow');\n","export const capValue = (min: number, value: number, max: number) =>\n Math.max(min, Math.min(value, max));\n","import {\n TOP,\n LEFT,\n SCALE_Y,\n SCALE_X,\n SKEW_X,\n SKEW_Y,\n FILL,\n STROKE,\n} from '../../constants';\nimport type { TClassProperties } from '../../typedefs';\nimport type { InteractiveFabricObject } from './InteractiveObject';\nimport type { FabricObject } from './Object';\n\nexport const stateProperties = [\n TOP,\n LEFT,\n SCALE_X,\n SCALE_Y,\n 'flipX',\n 'flipY',\n 'originX',\n 'originY',\n 'angle',\n 'opacity',\n 'globalCompositeOperation',\n 'shadow',\n 'visible',\n SKEW_X,\n SKEW_Y,\n];\n\nexport const cacheProperties = [\n FILL,\n STROKE,\n 'strokeWidth',\n 'strokeDashArray',\n 'width',\n 'height',\n 'paintFirst',\n 'strokeUniform',\n 'strokeLineCap',\n 'strokeDashOffset',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'backgroundColor',\n 'clipPath',\n];\n\nexport const fabricObjectDefaultValues: Partial<\n TClassProperties\n> = {\n // see composeMatrix() to see order of transforms. First defaults listed based on this\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n angle: 0,\n flipX: false,\n flipY: false,\n scaleX: 1,\n scaleY: 1,\n minScaleLimit: 0,\n skewX: 0,\n skewY: 0,\n originX: LEFT,\n originY: TOP,\n strokeWidth: 1,\n strokeUniform: false,\n padding: 0,\n opacity: 1,\n paintFirst: FILL,\n fill: 'rgb(0,0,0)',\n fillRule: 'nonzero',\n stroke: null,\n strokeDashArray: null,\n strokeDashOffset: 0,\n strokeLineCap: 'butt',\n strokeLineJoin: 'miter',\n strokeMiterLimit: 4,\n globalCompositeOperation: 'source-over',\n backgroundColor: '',\n shadow: null,\n visible: true,\n includeDefaultValues: true,\n excludeFromExport: false,\n objectCaching: true,\n clipPath: undefined,\n inverted: false,\n absolutePositioned: false,\n centeredRotation: true,\n centeredScaling: false,\n dirty: true,\n} as const;\n\nexport const interactiveObjectDefaultValues: Partial<\n TClassProperties\n> = {\n noScaleCache: true,\n lockMovementX: false,\n lockMovementY: false,\n lockRotation: false,\n lockScalingX: false,\n lockScalingY: false,\n lockSkewingX: false,\n lockSkewingY: false,\n lockScalingFlip: false,\n cornerSize: 13,\n touchCornerSize: 24,\n transparentCorners: true,\n cornerColor: 'rgb(178,204,255)',\n cornerStrokeColor: '',\n cornerStyle: 'rect',\n cornerDashArray: null,\n hasControls: true,\n borderColor: 'rgb(178,204,255)',\n borderDashArray: null,\n borderOpacityWhenMoving: 0.4,\n borderScaleFactor: 1,\n hasBorders: true,\n selectionBackgroundColor: '',\n selectable: true,\n evented: true,\n perPixelTargetFind: false,\n activeOn: 'down',\n hoverCursor: null,\n moveCursor: null,\n};\n","/**\n * Easing functions\n * @see {@link http://gizma.com/easing/ Easing Equations by Robert Penner}\n */\n\nimport { twoMathPi, halfPI } from '../../constants';\nimport type { TEasingFunction } from './types';\n\nconst normalize = (a: number, c: number, p: number, s: number) => {\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n //handle the 0/0 case:\n if (c === 0 && a === 0) {\n s = (p / twoMathPi) * Math.asin(1);\n } else {\n s = (p / twoMathPi) * Math.asin(c / a);\n }\n }\n return { a, c, p, s };\n};\n\nconst elastic = (\n a: number,\n s: number,\n p: number,\n t: number,\n d: number,\n): number =>\n a * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t * d - s) * twoMathPi) / p);\n\n/**\n * Default sinusoidal easing\n */\nexport const defaultEasing: TEasingFunction = (t, b, c, d) =>\n -c * Math.cos((t / d) * halfPI) + c + b;\n\n/**\n * Cubic easing in\n */\nexport const easeInCubic: TEasingFunction = (t, b, c, d) =>\n c * (t / d) ** 3 + b;\n\n/**\n * Cubic easing out\n */\nexport const easeOutCubic: TEasingFunction = (t, b, c, d) =>\n c * ((t / d - 1) ** 3 + 1) + b;\n\n/**\n * Cubic easing in and out\n */\nexport const easeInOutCubic: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 3 + b;\n }\n return (c / 2) * ((t - 2) ** 3 + 2) + b;\n};\n\n/**\n * Quartic easing in\n */\nexport const easeInQuart: TEasingFunction = (t, b, c, d) =>\n c * (t /= d) * t ** 3 + b;\n\n/**\n * Quartic easing out\n */\nexport const easeOutQuart: TEasingFunction = (t, b, c, d) =>\n -c * ((t = t / d - 1) * t ** 3 - 1) + b;\n\n/**\n * Quartic easing in and out\n */\nexport const easeInOutQuart: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 4 + b;\n }\n return (-c / 2) * ((t -= 2) * t ** 3 - 2) + b;\n};\n\n/**\n * Quintic easing in\n */\nexport const easeInQuint: TEasingFunction = (t, b, c, d) =>\n c * (t / d) ** 5 + b;\n\n/**\n * Quintic easing out\n */\nexport const easeOutQuint: TEasingFunction = (t, b, c, d) =>\n c * ((t / d - 1) ** 5 + 1) + b;\n\n/**\n * Quintic easing in and out\n */\nexport const easeInOutQuint: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 5 + b;\n }\n return (c / 2) * ((t - 2) ** 5 + 2) + b;\n};\n\n/**\n * Sinusoidal easing in\n */\nexport const easeInSine: TEasingFunction = (t, b, c, d) =>\n -c * Math.cos((t / d) * halfPI) + c + b;\n\n/**\n * Sinusoidal easing out\n */\nexport const easeOutSine: TEasingFunction = (t, b, c, d) =>\n c * Math.sin((t / d) * halfPI) + b;\n\n/**\n * Sinusoidal easing in and out\n */\nexport const easeInOutSine: TEasingFunction = (t, b, c, d) =>\n (-c / 2) * (Math.cos((Math.PI * t) / d) - 1) + b;\n\n/**\n * Exponential easing in\n */\nexport const easeInExpo: TEasingFunction = (t, b, c, d) =>\n t === 0 ? b : c * 2 ** (10 * (t / d - 1)) + b;\n\n/**\n * Exponential easing out\n */\nexport const easeOutExpo: TEasingFunction = (t, b, c, d) =>\n t === d ? b + c : c * -(2 ** ((-10 * t) / d) + 1) + b;\n\n/**\n * Exponential easing in and out\n */\nexport const easeInOutExpo: TEasingFunction = (t, b, c, d) => {\n if (t === 0) {\n return b;\n }\n if (t === d) {\n return b + c;\n }\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * 2 ** (10 * (t - 1)) + b;\n }\n return (c / 2) * -(2 ** (-10 * --t) + 2) + b;\n};\n\n/**\n * Circular easing in\n */\nexport const easeInCirc: TEasingFunction = (t, b, c, d) =>\n -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n\n/**\n * Circular easing out\n */\nexport const easeOutCirc: TEasingFunction = (t, b, c, d) =>\n c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n\n/**\n * Circular easing in and out\n */\nexport const easeInOutCirc: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (-c / 2) * (Math.sqrt(1 - t ** 2) - 1) + b;\n }\n return (c / 2) * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n};\n\n/**\n * Elastic easing in\n */\nexport const easeInElastic: TEasingFunction = (t, b, c, d) => {\n const s = 1.70158,\n a = c;\n let p = 0;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n const { a: normA, s: normS, p: normP } = normalize(a, c, p, s);\n return -elastic(normA, normS, normP, t, d) + b;\n};\n\n/**\n * Elastic easing out\n */\nexport const easeOutElastic: TEasingFunction = (t, b, c, d) => {\n const s = 1.70158,\n a = c;\n let p = 0;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);\n return (\n normA * 2 ** (-10 * t) * Math.sin(((t * d - normS) * twoMathPi) / normP) +\n normC +\n b\n );\n};\n\n/**\n * Elastic easing in and out\n */\nexport const easeInOutElastic: TEasingFunction = (t, b, c, d) => {\n const s = 1.70158,\n a = c;\n let p = 0;\n if (t === 0) {\n return b;\n }\n t /= d / 2;\n if (t === 2) {\n return b + c;\n }\n if (!p) {\n p = d * (0.3 * 1.5);\n }\n const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);\n if (t < 1) {\n return -0.5 * elastic(normA, normS, normP, t, d) + b;\n }\n return (\n normA *\n Math.pow(2, -10 * (t -= 1)) *\n Math.sin(((t * d - normS) * twoMathPi) / normP) *\n 0.5 +\n normC +\n b\n );\n};\n\n/**\n * Backwards easing in\n */\nexport const easeInBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>\n c * (t /= d) * t * ((s + 1) * t - s) + b;\n\n/**\n * Backwards easing out\n */\nexport const easeOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>\n c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n\n/**\n * Backwards easing in and out\n */\nexport const easeInOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n }\n return (c / 2) * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n};\n\n/**\n * Bouncing easing out\n */\nexport const easeOutBounce: TEasingFunction = (t, b, c, d) => {\n if ((t /= d) < 1 / 2.75) {\n return c * (7.5625 * t * t) + b;\n } else if (t < 2 / 2.75) {\n return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;\n } else if (t < 2.5 / 2.75) {\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;\n } else {\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;\n }\n};\n\n/**\n * Bouncing easing in\n */\nexport const easeInBounce: TEasingFunction = (t, b, c, d) =>\n c - easeOutBounce(d - t, 0, c, d) + b;\n\n/**\n * Bouncing easing in and out\n */\nexport const easeInOutBounce: TEasingFunction = (t, b, c, d) =>\n t < d / 2\n ? easeInBounce(t * 2, 0, c, d) * 0.5 + b\n : easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n\n/**\n * Quadratic easing in\n */\nexport const easeInQuad: TEasingFunction = (t, b, c, d) => c * (t /= d) * t + b;\n\n/**\n * Quadratic easing out\n */\nexport const easeOutQuad: TEasingFunction = (t, b, c, d) =>\n -c * (t /= d) * (t - 2) + b;\n\n/**\n * Quadratic easing in and out\n */\nexport const easeInOutQuad: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 2 + b;\n }\n return (-c / 2) * (--t * (t - 2) - 1) + b;\n};\n","import { noop } from '../../constants';\nimport { requestAnimFrame } from './AnimationFrameProvider';\nimport { runningAnimations } from './AnimationRegistry';\nimport { defaultEasing } from './easing';\nimport type {\n AnimationState,\n TAbortCallback,\n TBaseAnimationOptions,\n TEasingFunction,\n TOnAnimationChangeCallback,\n} from './types';\n\nconst defaultAbort = () => false;\n\nexport abstract class AnimationBase<\n T extends number | number[] = number | number[],\n> {\n declare readonly startValue: T;\n declare readonly endValue: T;\n declare readonly duration: number;\n declare readonly delay: number;\n\n protected declare readonly byValue: T;\n protected declare readonly easing: TEasingFunction;\n\n private declare readonly _onStart: VoidFunction;\n private declare readonly _onChange: TOnAnimationChangeCallback;\n private declare readonly _onComplete: TOnAnimationChangeCallback;\n private declare readonly _abort: TAbortCallback;\n\n /**\n * Used to register the animation to a target object\n * so that it can be cancelled within the object context\n */\n declare readonly target?: unknown;\n\n private _state: AnimationState = 'pending';\n /**\n * Time %, or the ratio of `timeElapsed / duration`\n * @see tick\n */\n durationProgress = 0;\n /**\n * Value %, or the ratio of `(currentValue - startValue) / (endValue - startValue)`\n */\n valueProgress = 0;\n /**\n * Current value\n */\n declare value: T;\n /**\n * Animation start time ms\n */\n private declare startTime: number;\n\n constructor({\n startValue,\n byValue,\n duration = 500,\n delay = 0,\n easing = defaultEasing,\n onStart = noop,\n onChange = noop,\n onComplete = noop,\n abort = defaultAbort,\n target,\n }: TBaseAnimationOptions) {\n this.tick = this.tick.bind(this);\n\n this.duration = duration;\n this.delay = delay;\n this.easing = easing;\n this._onStart = onStart;\n this._onChange = onChange;\n this._onComplete = onComplete;\n this._abort = abort;\n this.target = target;\n\n this.startValue = startValue;\n this.byValue = byValue;\n this.value = this.startValue;\n this.endValue = Object.freeze(this.calculate(this.duration).value);\n }\n\n get state() {\n return this._state;\n }\n\n isDone() {\n return this._state === 'aborted' || this._state === 'completed';\n }\n\n /**\n * Calculate the current value based on the easing parameters\n * @param timeElapsed in ms\n * @protected\n */\n protected abstract calculate(timeElapsed: number): {\n value: T;\n valueProgress: number;\n };\n\n start() {\n const firstTick: FrameRequestCallback = (timestamp) => {\n if (this._state !== 'pending') return;\n this.startTime = timestamp || +new Date();\n this._state = 'running';\n this._onStart();\n this.tick(this.startTime);\n };\n\n this.register();\n\n // setTimeout(cb, 0) will run cb on the next frame, causing a delay\n // we don't want that\n if (this.delay > 0) {\n setTimeout(() => requestAnimFrame(firstTick), this.delay);\n } else {\n requestAnimFrame(firstTick);\n }\n }\n\n private tick(t: number) {\n const durationMs = (t || +new Date()) - this.startTime;\n const boundDurationMs = Math.min(durationMs, this.duration);\n this.durationProgress = boundDurationMs / this.duration;\n const { value, valueProgress } = this.calculate(boundDurationMs);\n this.value = Object.freeze(value);\n this.valueProgress = valueProgress;\n\n if (this._state === 'aborted') {\n return;\n } else if (\n this._abort(this.value, this.valueProgress, this.durationProgress)\n ) {\n this._state = 'aborted';\n this.unregister();\n } else if (durationMs >= this.duration) {\n this.durationProgress = this.valueProgress = 1;\n this._onChange(this.endValue, this.valueProgress, this.durationProgress);\n this._state = 'completed';\n this._onComplete(\n this.endValue,\n this.valueProgress,\n this.durationProgress,\n );\n this.unregister();\n } else {\n this._onChange(this.value, this.valueProgress, this.durationProgress);\n requestAnimFrame(this.tick);\n }\n }\n\n private register() {\n runningAnimations.push(this as unknown as AnimationBase);\n }\n\n private unregister() {\n runningAnimations.remove(this as unknown as AnimationBase);\n }\n\n abort() {\n this._state = 'aborted';\n this.unregister();\n }\n}\n","import { AnimationBase } from './AnimationBase';\nimport type { ValueAnimationOptions } from './types';\n\nexport class ValueAnimation extends AnimationBase {\n constructor({\n startValue = 0,\n endValue = 100,\n ...otherOptions\n }: ValueAnimationOptions) {\n super({\n ...otherOptions,\n startValue,\n byValue: endValue - startValue,\n });\n }\n\n protected calculate(timeElapsed: number) {\n const value = this.easing(\n timeElapsed,\n this.startValue,\n this.byValue,\n this.duration,\n );\n return {\n value,\n valueProgress: Math.abs((value - this.startValue) / this.byValue),\n };\n }\n}\n","import { AnimationBase } from './AnimationBase';\nimport type { ArrayAnimationOptions } from './types';\n\nexport class ArrayAnimation extends AnimationBase {\n constructor({\n startValue = [0],\n endValue = [100],\n ...options\n }: ArrayAnimationOptions) {\n super({\n ...options,\n startValue,\n byValue: endValue.map((value, i) => value - startValue[i]),\n });\n }\n protected calculate(timeElapsed: number) {\n const values = this.startValue.map((value, i) =>\n this.easing(timeElapsed, value, this.byValue[i], this.duration, i),\n );\n return {\n value: values,\n valueProgress: Math.abs(\n (values[0] - this.startValue[0]) / this.byValue[0],\n ),\n };\n }\n}\n","import { Color } from '../../color/Color';\nimport type { TRGBAColorSource } from '../../color/typedefs';\nimport { halfPI } from '../../constants';\nimport { capValue } from '../misc/capValue';\nimport { AnimationBase } from './AnimationBase';\nimport type {\n ColorAnimationOptions,\n TEasingFunction,\n TOnAnimationChangeCallback,\n} from './types';\n\nconst defaultColorEasing: TEasingFunction = (\n timeElapsed,\n startValue,\n byValue,\n duration,\n) => {\n const durationProgress = 1 - Math.cos((timeElapsed / duration) * halfPI);\n return startValue + byValue * durationProgress;\n};\n\nconst wrapColorCallback = (\n callback?: TOnAnimationChangeCallback,\n) =>\n callback &&\n ((rgba: TRGBAColorSource, valueProgress: number, durationProgress: number) =>\n callback(new Color(rgba).toRgba(), valueProgress, durationProgress));\n\nexport class ColorAnimation extends AnimationBase {\n constructor({\n startValue,\n endValue,\n easing = defaultColorEasing,\n onChange,\n onComplete,\n abort,\n ...options\n }: ColorAnimationOptions) {\n const startColor = new Color(startValue).getSource();\n const endColor = new Color(endValue).getSource();\n super({\n ...options,\n startValue: startColor,\n byValue: endColor.map(\n (value, i) => value - startColor[i],\n ) as TRGBAColorSource,\n easing,\n onChange: wrapColorCallback(onChange),\n onComplete: wrapColorCallback(onComplete),\n abort: wrapColorCallback(abort),\n });\n }\n protected calculate(timeElapsed: number) {\n const [r, g, b, a] = this.startValue.map((value, i) =>\n this.easing(timeElapsed, value, this.byValue[i], this.duration, i),\n ) as TRGBAColorSource;\n const value = [\n ...[r, g, b].map(Math.round),\n capValue(0, a, 1),\n ] as TRGBAColorSource;\n return {\n value,\n valueProgress:\n // to correctly calculate the change ratio we must find a changed value\n value\n .map((p, i) =>\n this.byValue[i] !== 0\n ? Math.abs((p - this.startValue[i]) / this.byValue[i])\n : 0,\n )\n .find((p) => p !== 0) || 0,\n };\n }\n}\n","import { ValueAnimation } from './ValueAnimation';\nimport { ArrayAnimation } from './ArrayAnimation';\nimport { ColorAnimation } from './ColorAnimation';\nimport type {\n ValueAnimationOptions,\n ArrayAnimationOptions,\n ColorAnimationOptions,\n} from './types';\nimport type { TColorArg } from '../../color/typedefs';\n\nexport type TAnimation =\n T extends TColorArg\n ? ColorAnimation\n : T extends number[]\n ? ArrayAnimation\n : ValueAnimation;\n\nconst isArrayAnimation = (\n options: ArrayAnimationOptions | ValueAnimationOptions,\n): options is ArrayAnimationOptions => {\n return Array.isArray(options.startValue) || Array.isArray(options.endValue);\n};\n\n/**\n * Changes value(s) from startValue to endValue within a certain period of time,\n * invoking callbacks as the value(s) change.\n *\n * @example\n * animate({\n * startValue: 1,\n * endValue: 0,\n * onChange: (v) => {\n * obj.set('opacity', v);\n * // since we are running in a requested frame we should call `renderAll` and not `requestRenderAll`\n * canvas.renderAll();\n * }\n * });\n *\n * @example Using lists:\n * animate({\n * startValue: [1, 2, 3],\n * endValue: [2, 4, 6],\n * onChange: ([x, y, zoom]) => {\n * canvas.zoomToPoint(new Point(x, y), zoom);\n * canvas.renderAll();\n * }\n * });\n *\n */\nexport function animate(options: ArrayAnimationOptions): ArrayAnimation;\nexport function animate(options: ValueAnimationOptions): ValueAnimation;\nexport function animate<\n T extends ValueAnimationOptions | ArrayAnimationOptions,\n>(\n options: T,\n): T extends ArrayAnimationOptions ? ArrayAnimation : ValueAnimation;\nexport function animate<\n T extends ValueAnimationOptions | ArrayAnimationOptions,\n R extends T extends ArrayAnimationOptions ? ArrayAnimation : ValueAnimation,\n>(options: T): R {\n const animation = (\n isArrayAnimation(options)\n ? new ArrayAnimation(options)\n : new ValueAnimation(options)\n ) as R;\n animation.start();\n return animation;\n}\n\nexport function animateColor(options: ColorAnimationOptions) {\n const animation = new ColorAnimation(options);\n animation.start();\n return animation;\n}\n","import { Point } from './Point';\nimport { createVector } from './util/misc/vectors';\n\n/* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n\nexport type IntersectionType = 'Intersection' | 'Coincident' | 'Parallel';\n\nexport class Intersection {\n declare points: Point[];\n\n declare status?: IntersectionType;\n\n constructor(status?: IntersectionType) {\n this.status = status;\n this.points = [];\n }\n\n /**\n * Used to verify if a point is alredy in the collection\n * @param {Point} point\n * @returns {boolean}\n */\n private includes(point: Point): boolean {\n return this.points.some((p) => p.eq(point));\n }\n\n /**\n * Appends points of intersection\n * @param {...Point[]} points\n * @return {Intersection} thisArg\n * @chainable\n */\n private append(...points: Point[]): Intersection {\n this.points = this.points.concat(\n points.filter((point) => {\n return !this.includes(point);\n }),\n );\n return this;\n }\n\n /**\n * check if point T is on the segment or line defined between A and B\n *\n * @param {Point} T the point we are checking for\n * @param {Point} A one extremity of the segment\n * @param {Point} B the other extremity of the segment\n * @param [infinite] if true checks if `T` is on the line defined by `A` and `B`\n * @returns true if `T` is contained\n */\n static isPointContained(T: Point, A: Point, B: Point, infinite = false) {\n if (A.eq(B)) {\n // Edge case: the segment is a point, we check for coincidence,\n // infinite param has no meaning because there are infinite lines to consider\n return T.eq(A);\n } else if (A.x === B.x) {\n // Edge case: horizontal line.\n // we first check if T.x has the same value, and then if T.y is contained between A.y and B.y\n return (\n T.x === A.x &&\n (infinite || (T.y >= Math.min(A.y, B.y) && T.y <= Math.max(A.y, B.y)))\n );\n } else if (A.y === B.y) {\n // Edge case: vertical line.\n // we first check if T.y has the same value, and then if T.x is contained between A.x and B.x\n return (\n T.y === A.y &&\n (infinite || (T.x >= Math.min(A.x, B.x) && T.x <= Math.max(A.x, B.x)))\n );\n } else {\n // Generic case: sloped line.\n // we check that AT has the same slope as AB\n // for the segment case we need both the vectors to have the same direction and for AT to be lte AB in size\n // for the infinite case we check the absolute value of the slope, since direction is meaningless\n const AB = createVector(A, B);\n const AT = createVector(A, T);\n const s = AT.divide(AB);\n return infinite\n ? Math.abs(s.x) === Math.abs(s.y)\n : s.x === s.y && s.x >= 0 && s.x <= 1;\n }\n }\n\n /**\n * Use the ray casting algorithm to determine if {@link point} is in the polygon defined by {@link points}\n * @see https://en.wikipedia.org/wiki/Point_in_polygon\n * @param point\n * @param points polygon points\n * @returns\n */\n static isPointInPolygon(point: Point, points: Point[]) {\n const other = new Point(point).setX(\n Math.min(point.x - 1, ...points.map((p) => p.x)),\n );\n let hits = 0;\n for (let index = 0; index < points.length; index++) {\n const inter = this.intersectSegmentSegment(\n // polygon side\n points[index],\n points[(index + 1) % points.length],\n // ray\n point,\n other,\n );\n if (inter.includes(point)) {\n // point is on the polygon side\n return true;\n }\n hits += Number(inter.status === 'Intersection');\n }\n return hits % 2 === 1;\n }\n\n /**\n * Checks if a line intersects another\n * @see {@link https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection line intersection}\n * @see {@link https://en.wikipedia.org/wiki/Cramer%27s_rule Cramer's rule}\n * @static\n * @param {Point} a1\n * @param {Point} a2\n * @param {Point} b1\n * @param {Point} b2\n * @param {boolean} [aInfinite=true] check segment intersection by passing `false`\n * @param {boolean} [bInfinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLineLine(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point,\n aInfinite = true,\n bInfinite = true,\n ): Intersection {\n const a2xa1x = a2.x - a1.x,\n a2ya1y = a2.y - a1.y,\n b2xb1x = b2.x - b1.x,\n b2yb1y = b2.y - b1.y,\n a1xb1x = a1.x - b1.x,\n a1yb1y = a1.y - b1.y,\n uaT = b2xb1x * a1yb1y - b2yb1y * a1xb1x,\n ubT = a2xa1x * a1yb1y - a2ya1y * a1xb1x,\n uB = b2yb1y * a2xa1x - b2xb1x * a2ya1y;\n if (uB !== 0) {\n const ua = uaT / uB,\n ub = ubT / uB;\n if (\n (aInfinite || (0 <= ua && ua <= 1)) &&\n (bInfinite || (0 <= ub && ub <= 1))\n ) {\n return new Intersection('Intersection').append(\n new Point(a1.x + ua * a2xa1x, a1.y + ua * a2ya1y),\n );\n } else {\n return new Intersection();\n }\n } else {\n if (uaT === 0 || ubT === 0) {\n const segmentsCoincide =\n aInfinite ||\n bInfinite ||\n Intersection.isPointContained(a1, b1, b2) ||\n Intersection.isPointContained(a2, b1, b2) ||\n Intersection.isPointContained(b1, a1, a2) ||\n Intersection.isPointContained(b2, a1, a2);\n return new Intersection(segmentsCoincide ? 'Coincident' : undefined);\n } else {\n return new Intersection('Parallel');\n }\n }\n }\n\n /**\n * Checks if a segment intersects a line\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} s1 boundary point of segment\n * @param {Point} s2 other boundary point of segment\n * @param {Point} l1 point on line\n * @param {Point} l2 other point on line\n * @return {Intersection}\n */\n static intersectSegmentLine(\n s1: Point,\n s2: Point,\n l1: Point,\n l2: Point,\n ): Intersection {\n return Intersection.intersectLineLine(s1, s2, l1, l2, false, true);\n }\n\n /**\n * Checks if a segment intersects another\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point} b1 boundary point of segment\n * @param {Point} b2 other boundary point of segment\n * @return {Intersection}\n */\n static intersectSegmentSegment(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point,\n ): Intersection {\n return Intersection.intersectLineLine(a1, a2, b1, b2, false, false);\n }\n\n /**\n * Checks if line intersects polygon\n *\n * @todo account for stroke\n *\n * @static\n * @see {@link intersectSegmentPolygon} for segment intersection\n * @param {Point} a1 point on line\n * @param {Point} a2 other point on line\n * @param {Point[]} points polygon points\n * @param {boolean} [infinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLinePolygon(\n a1: Point,\n a2: Point,\n points: Point[],\n infinite = true,\n ): Intersection {\n const result = new Intersection();\n const length = points.length;\n\n for (let i = 0, b1, b2, inter; i < length; i++) {\n b1 = points[i];\n b2 = points[(i + 1) % length];\n inter = Intersection.intersectLineLine(a1, a2, b1, b2, infinite, false);\n if (inter.status === 'Coincident') {\n return inter;\n }\n result.append(...inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if segment intersects polygon\n * @static\n * @see {@link intersectLinePolygon} for line intersection\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point[]} points polygon points\n * @return {Intersection}\n */\n static intersectSegmentPolygon(\n a1: Point,\n a2: Point,\n points: Point[],\n ): Intersection {\n return Intersection.intersectLinePolygon(a1, a2, points, false);\n }\n\n /**\n * Checks if polygon intersects another polygon\n *\n * @todo account for stroke\n *\n * @static\n * @param {Point[]} points1\n * @param {Point[]} points2\n * @return {Intersection}\n */\n static intersectPolygonPolygon(\n points1: Point[],\n points2: Point[],\n ): Intersection {\n const result = new Intersection(),\n length = points1.length;\n const coincidences: Intersection[] = [];\n\n for (let i = 0; i < length; i++) {\n const a1 = points1[i],\n a2 = points1[(i + 1) % length],\n inter = Intersection.intersectSegmentPolygon(a1, a2, points2);\n if (inter.status === 'Coincident') {\n coincidences.push(inter);\n result.append(a1, a2);\n } else {\n result.append(...inter.points);\n }\n }\n\n if (coincidences.length > 0 && coincidences.length === points1.length) {\n return new Intersection('Coincident');\n } else if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if polygon intersects rectangle\n * @static\n * @see {@link intersectPolygonPolygon} for polygon intersection\n * @param {Point[]} points polygon points\n * @param {Point} r1 top left point of rect\n * @param {Point} r2 bottom right point of rect\n * @return {Intersection}\n */\n static intersectPolygonRectangle(\n points: Point[],\n r1: Point,\n r2: Point,\n ): Intersection {\n const min = r1.min(r2),\n max = r1.max(r2),\n topRight = new Point(max.x, min.y),\n bottomLeft = new Point(min.x, max.y);\n\n return Intersection.intersectPolygonPolygon(points, [\n min,\n topRight,\n max,\n bottomLeft,\n ]);\n }\n}\n","import type {\n TBBox,\n TCornerPoint,\n TDegree,\n TMat2D,\n TOriginX,\n TOriginY,\n} from '../../typedefs';\nimport { SCALE_X, SCALE_Y, iMatrix } from '../../constants';\nimport { Intersection } from '../../Intersection';\nimport { Point } from '../../Point';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport {\n createRotateMatrix,\n createTranslateMatrix,\n composeMatrix,\n invertTransform,\n multiplyTransformMatrices,\n transformPoint,\n calcPlaneRotation,\n} from '../../util/misc/matrix';\nimport { radiansToDegrees } from '../../util/misc/radiansDegreesConversion';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { StaticCanvas } from '../../canvas/StaticCanvas';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport type { ControlProps } from './types/ControlProps';\nimport { resolveOrigin } from '../../util/misc/resolveOrigin';\nimport type { Group } from '../Group';\nimport { calcDimensionsMatrix } from '../../util/misc/matrix';\nimport { sizeAfterTransform } from '../../util/misc/objectTransforms';\nimport { degreesToRadians } from '../../util/misc/radiansDegreesConversion';\nimport { CommonMethods } from '../../CommonMethods';\nimport type { BaseProps } from './types/BaseProps';\nimport type { FillStrokeProps } from './types/FillStrokeProps';\nimport { CENTER, LEFT, TOP } from '../../constants';\n\ntype TMatrixCache = {\n key: number[];\n value: TMat2D;\n};\n\ntype TACoords = TCornerPoint;\n\nexport class ObjectGeometry\n extends CommonMethods\n implements\n Pick,\n BaseProps,\n Pick\n{\n // #region Geometry\n\n declare padding: number;\n\n /**\n * Describe object's corner position in scene coordinates.\n * The coordinates are derived from the following:\n * left, top, width, height, scaleX, scaleY, skewX, skewY, angle, strokeWidth.\n * The coordinates do not depend on viewport changes.\n * The coordinates get updated with {@link setCoords}.\n * You can calculate them without updating with {@link calcACoords()}\n */\n declare aCoords: TACoords;\n\n /**\n * storage cache for object transform matrix\n */\n declare ownMatrixCache?: TMatrixCache;\n\n /**\n * storage cache for object full transform matrix\n */\n declare matrixCache?: TMatrixCache;\n\n /**\n * A Reference of the Canvas where the object is actually added\n * @type StaticCanvas | Canvas;\n * @default undefined\n * @private\n */\n declare canvas?: StaticCanvas | Canvas;\n\n /**\n * @returns {number} x position according to object's {@link originX} property in canvas coordinate plane\n */\n getX(): number {\n return this.getXY().x;\n }\n\n /**\n * @param {number} value x position according to object's {@link originX} property in canvas coordinate plane\n */\n setX(value: number) {\n this.setXY(this.getXY().setX(value));\n }\n\n /**\n * @returns {number} y position according to object's {@link originY} property in canvas coordinate plane\n */\n getY(): number {\n return this.getXY().y;\n }\n\n /**\n * @param {number} value y position according to object's {@link originY} property in canvas coordinate plane\n */\n setY(value: number) {\n this.setXY(this.getXY().setY(value));\n }\n\n /**\n * @returns {number} x position according to object's {@link originX} property in parent's coordinate plane\\\n * if parent is canvas then this property is identical to {@link getX}\n */\n getRelativeX(): number {\n return this.left;\n }\n\n /**\n * @param {number} value x position according to object's {@link originX} property in parent's coordinate plane\\\n * if parent is canvas then this method is identical to {@link setX}\n */\n setRelativeX(value: number) {\n this.left = value;\n }\n\n /**\n * @returns {number} y position according to object's {@link originY} property in parent's coordinate plane\\\n * if parent is canvas then this property is identical to {@link getY}\n */\n getRelativeY(): number {\n return this.top;\n }\n\n /**\n * @param {number} value y position according to object's {@link originY} property in parent's coordinate plane\\\n * if parent is canvas then this property is identical to {@link setY}\n */\n setRelativeY(value: number) {\n this.top = value;\n }\n\n /**\n * @returns {Point} x position according to object's {@link originX} {@link originY} properties in canvas coordinate plane\n */\n getXY(): Point {\n const relativePosition = this.getRelativeXY();\n return this.group\n ? transformPoint(relativePosition, this.group.calcTransformMatrix())\n : relativePosition;\n }\n\n /**\n * Set an object position to a particular point, the point is intended in absolute ( canvas ) coordinate.\n * You can specify {@link originX} and {@link originY} values,\n * that otherwise are the object's current values.\n * @example Set object's bottom left corner to point (5,5) on canvas\n * object.setXY(new Point(5, 5), 'left', 'bottom').\n * @param {Point} point position in scene coordinate plane\n * @param {TOriginX} [originX] Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} [originY] Vertical origin: 'top', 'center' or 'bottom'\n */\n setXY(point: Point, originX?: TOriginX, originY?: TOriginY) {\n if (this.group) {\n point = transformPoint(\n point,\n invertTransform(this.group.calcTransformMatrix()),\n );\n }\n this.setRelativeXY(point, originX, originY);\n }\n\n /**\n * @returns {Point} x,y position according to object's {@link originX} {@link originY} properties in parent's coordinate plane\n */\n getRelativeXY(): Point {\n return new Point(this.left, this.top);\n }\n\n /**\n * As {@link setXY}, but in current parent's coordinate plane (the current group if any or the canvas)\n * @param {Point} point position according to object's {@link originX} {@link originY} properties in parent's coordinate plane\n * @param {TOriginX} [originX] Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} [originY] Vertical origin: 'top', 'center' or 'bottom'\n */\n setRelativeXY(\n point: Point,\n originX: TOriginX = this.originX,\n originY: TOriginY = this.originY,\n ) {\n this.setPositionByOrigin(point, originX, originY);\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return false;\n }\n\n /**\n * @return {Point[]} [tl, tr, br, bl] in the scene plane\n */\n getCoords(): Point[] {\n const { tl, tr, br, bl } =\n this.aCoords || (this.aCoords = this.calcACoords());\n const coords = [tl, tr, br, bl];\n if (this.group) {\n const t = this.group.calcTransformMatrix();\n return coords.map((p) => transformPoint(p, t));\n }\n return coords;\n }\n\n /**\n * Checks if object intersects with the scene rect formed by {@link tl} and {@link br}\n */\n intersectsWithRect(tl: Point, br: Point): boolean {\n const intersection = Intersection.intersectPolygonRectangle(\n this.getCoords(),\n tl,\n br,\n );\n return intersection.status === 'Intersection';\n }\n\n /**\n * Checks if object intersects with another object\n * @param {Object} other Object to test\n * @return {Boolean} true if object intersects with another object\n */\n intersectsWithObject(other: ObjectGeometry): boolean {\n const intersection = Intersection.intersectPolygonPolygon(\n this.getCoords(),\n other.getCoords(),\n );\n\n return (\n intersection.status === 'Intersection' ||\n intersection.status === 'Coincident' ||\n other.isContainedWithinObject(this) ||\n this.isContainedWithinObject(other)\n );\n }\n\n /**\n * Checks if object is fully contained within area of another object\n * @param {Object} other Object to test\n * @return {Boolean} true if object is fully contained within area of another object\n */\n isContainedWithinObject(other: ObjectGeometry): boolean {\n const points = this.getCoords();\n return points.every((point) => other.containsPoint(point));\n }\n\n /**\n * Checks if object is fully contained within the scene rect formed by {@link tl} and {@link br}\n */\n isContainedWithinRect(tl: Point, br: Point): boolean {\n const { left, top, width, height } = this.getBoundingRect();\n return (\n left >= tl.x &&\n left + width <= br.x &&\n top >= tl.y &&\n top + height <= br.y\n );\n }\n\n isOverlapping(other: T): boolean {\n return (\n this.intersectsWithObject(other) ||\n this.isContainedWithinObject(other) ||\n other.isContainedWithinObject(this)\n );\n }\n\n /**\n * Checks if point is inside the object\n * @param {Point} point Point to check against\n * @return {Boolean} true if point is inside the object\n */\n containsPoint(point: Point): boolean {\n return Intersection.isPointInPolygon(point, this.getCoords());\n }\n\n /**\n * Checks if object is contained within the canvas with current viewportTransform\n * the check is done stopping at first point that appears on screen\n * @return {Boolean} true if object is fully or partially contained within canvas\n */\n isOnScreen(): boolean {\n if (!this.canvas) {\n return false;\n }\n const { tl, br } = this.canvas.vptCoords;\n const points = this.getCoords();\n // if some point is on screen, the object is on screen.\n if (\n points.some(\n (point) =>\n point.x <= br.x &&\n point.x >= tl.x &&\n point.y <= br.y &&\n point.y >= tl.y,\n )\n ) {\n return true;\n }\n // no points on screen, check intersection with absolute coordinates\n if (this.intersectsWithRect(tl, br)) {\n return true;\n }\n // check if the object is so big that it contains the entire viewport\n return this.containsPoint(tl.midPointFrom(br));\n }\n\n /**\n * Checks if object is partially contained within the canvas with current viewportTransform\n * @return {Boolean} true if object is partially contained within canvas\n */\n isPartiallyOnScreen(): boolean {\n if (!this.canvas) {\n return false;\n }\n const { tl, br } = this.canvas.vptCoords;\n if (this.intersectsWithRect(tl, br)) {\n return true;\n }\n const allPointsAreOutside = this.getCoords().every(\n (point) =>\n (point.x >= br.x || point.x <= tl.x) &&\n (point.y >= br.y || point.y <= tl.y),\n );\n // check if the object is so big that it contains the entire viewport\n return allPointsAreOutside && this.containsPoint(tl.midPointFrom(br));\n }\n\n /**\n * Returns coordinates of object's bounding rectangle (left, top, width, height)\n * the box is intended as aligned to axis of canvas.\n * @return {Object} Object with left, top, width, height properties\n */\n getBoundingRect(): TBBox {\n return makeBoundingBoxFromPoints(this.getCoords());\n }\n\n /**\n * Returns width of an object's bounding box counting transformations\n * @todo shouldn't this account for group transform and return the actual size in canvas coordinate plane?\n * @return {Number} width value\n */\n getScaledWidth(): number {\n return this._getTransformedDimensions().x;\n }\n\n /**\n * Returns height of an object bounding box counting transformations\n * @todo shouldn't this account for group transform and return the actual size in canvas coordinate plane?\n * @return {Number} height value\n */\n getScaledHeight(): number {\n return this._getTransformedDimensions().y;\n }\n\n /**\n * Scales an object (equally by x and y)\n * @param {Number} value Scale factor\n * @return {void}\n */\n scale(value: number): void {\n this._set(SCALE_X, value);\n this._set(SCALE_Y, value);\n this.setCoords();\n }\n\n /**\n * Scales an object to a given width, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New width value\n * @return {void}\n */\n scaleToWidth(value: number) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n const boundingRectFactor =\n this.getBoundingRect().width / this.getScaledWidth();\n return this.scale(value / this.width / boundingRectFactor);\n }\n\n /**\n * Scales an object to a given height, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New height value\n * @return {void}\n */\n scaleToHeight(value: number) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n const boundingRectFactor =\n this.getBoundingRect().height / this.getScaledHeight();\n return this.scale(value / this.height / boundingRectFactor);\n }\n\n getCanvasRetinaScaling() {\n return this.canvas?.getRetinaScaling() || 1;\n }\n\n /**\n * Returns the object angle relative to canvas counting also the group property\n * @returns {TDegree}\n */\n getTotalAngle(): TDegree {\n return this.group\n ? radiansToDegrees(calcPlaneRotation(this.calcTransformMatrix()))\n : this.angle;\n }\n\n /**\n * Retrieves viewportTransform from Object's canvas if available\n * @return {TMat2D}\n */\n getViewportTransform(): TMat2D {\n return this.canvas?.viewportTransform || (iMatrix.concat() as TMat2D);\n }\n\n /**\n * Calculates the coordinates of the 4 corner of the bbox, in absolute coordinates.\n * those never change with zoom or viewport changes.\n * @return {TCornerPoint}\n */\n calcACoords(): TCornerPoint {\n const rotateMatrix = createRotateMatrix({ angle: this.angle }),\n { x, y } = this.getRelativeCenterPoint(),\n tMatrix = createTranslateMatrix(x, y),\n finalMatrix = multiplyTransformMatrices(tMatrix, rotateMatrix),\n dim = this._getTransformedDimensions(),\n w = dim.x / 2,\n h = dim.y / 2;\n return {\n // corners\n tl: transformPoint({ x: -w, y: -h }, finalMatrix),\n tr: transformPoint({ x: w, y: -h }, finalMatrix),\n bl: transformPoint({ x: -w, y: h }, finalMatrix),\n br: transformPoint({ x: w, y: h }, finalMatrix),\n };\n }\n\n /**\n * Sets corner and controls position coordinates based on current angle, width and height, left and top.\n * aCoords are used to quickly find an object on the canvas.\n * See {@link https://github.com/fabricjs/fabric.js/wiki/When-to-call-setCoords} and {@link http://fabricjs.com/fabric-gotchas}\n */\n setCoords(): void {\n this.aCoords = this.calcACoords();\n }\n\n transformMatrixKey(skipGroup = false): number[] {\n let prefix: number[] = [];\n if (!skipGroup && this.group) {\n prefix = this.group.transformMatrixKey(skipGroup);\n }\n prefix.push(\n this.top,\n this.left,\n this.width,\n this.height,\n this.scaleX,\n this.scaleY,\n this.angle,\n this.strokeWidth,\n this.skewX,\n this.skewY,\n +this.flipX,\n +this.flipY,\n resolveOrigin(this.originX),\n resolveOrigin(this.originY),\n );\n\n return prefix;\n }\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties.\n * @param {Boolean} [skipGroup] return transform matrix for object not counting parent transformations\n * There are some situation in which this is useful to avoid the fake rotation.\n * @return {TMat2D} transform matrix for the object\n */\n calcTransformMatrix(skipGroup = false): TMat2D {\n let matrix = this.calcOwnMatrix();\n if (skipGroup || !this.group) {\n return matrix;\n }\n const key = this.transformMatrixKey(skipGroup),\n cache = this.matrixCache;\n if (cache && cache.key.every((x, i) => x === key[i])) {\n return cache.value;\n }\n if (this.group) {\n matrix = multiplyTransformMatrices(\n this.group.calcTransformMatrix(false),\n matrix,\n );\n }\n this.matrixCache = {\n key,\n value: matrix,\n };\n return matrix;\n }\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties, this matrix does not include the group transformation\n * @return {TMat2D} transform matrix for the object\n */\n calcOwnMatrix(): TMat2D {\n const key = this.transformMatrixKey(true),\n cache = this.ownMatrixCache;\n if (cache && cache.key === key) {\n return cache.value;\n }\n const center = this.getRelativeCenterPoint(),\n options = {\n angle: this.angle,\n translateX: center.x,\n translateY: center.y,\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n flipX: this.flipX,\n flipY: this.flipY,\n },\n value = composeMatrix(options);\n this.ownMatrixCache = {\n key,\n value,\n };\n return value;\n }\n\n /**\n * Calculate object dimensions from its properties\n * @private\n * @returns {Point} dimensions\n */\n _getNonTransformedDimensions(): Point {\n return new Point(this.width, this.height).scalarAdd(this.strokeWidth);\n }\n\n /**\n * Calculate object dimensions for controls box, including padding and canvas zoom.\n * and active selection\n * @private\n * @param {object} [options] transform options\n * @returns {Point} dimensions\n */\n _calculateCurrentDimensions(options?: any): Point {\n return this._getTransformedDimensions(options)\n .transform(this.getViewportTransform(), true)\n .scalarAdd(2 * this.padding);\n }\n\n // #region Origin\n\n declare top: number;\n declare left: number;\n declare width: number;\n declare height: number;\n declare flipX: boolean;\n declare flipY: boolean;\n declare scaleX: number;\n declare scaleY: number;\n declare skewX: number;\n declare skewY: number;\n /**\n * @deprecated please use 'center' as value in new projects\n * */\n declare originX: TOriginX;\n /**\n * @deprecated please use 'center' as value in new projects\n * */\n declare originY: TOriginY;\n declare angle: TDegree;\n declare strokeWidth: number;\n declare strokeUniform: boolean;\n\n /**\n * Object containing this object.\n * can influence its size and position\n */\n declare group?: Group;\n\n /**\n * Calculate object bounding box dimensions from its properties scale, skew.\n * This bounding box is aligned with object angle and not with canvas axis or screen.\n * @param {Object} [options]\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewY]\n * @private\n * @returns {Point} dimensions\n */\n _getTransformedDimensions(options: any = {}): Point {\n const dimOptions = {\n // if scaleX or scaleY are negative numbers,\n // this will return dimensions that are negative.\n // and this will break assumptions around the codebase\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n width: this.width,\n height: this.height,\n strokeWidth: this.strokeWidth,\n ...options,\n };\n // stroke is applied before/after transformations are applied according to `strokeUniform`\n const strokeWidth = dimOptions.strokeWidth;\n let preScalingStrokeValue = strokeWidth,\n postScalingStrokeValue = 0;\n\n if (this.strokeUniform) {\n preScalingStrokeValue = 0;\n postScalingStrokeValue = strokeWidth;\n }\n const dimX = dimOptions.width + preScalingStrokeValue,\n dimY = dimOptions.height + preScalingStrokeValue,\n noSkew = dimOptions.skewX === 0 && dimOptions.skewY === 0;\n let finalDimensions;\n if (noSkew) {\n finalDimensions = new Point(\n dimX * dimOptions.scaleX,\n dimY * dimOptions.scaleY,\n );\n } else {\n finalDimensions = sizeAfterTransform(\n dimX,\n dimY,\n calcDimensionsMatrix(dimOptions),\n );\n }\n\n return finalDimensions.scalarAdd(postScalingStrokeValue);\n }\n\n /**\n * Translates the coordinates from a set of origin to another (based on the object's dimensions)\n * @param {Point} point The point which corresponds to the originX and originY params\n * @param {TOriginX} fromOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} fromOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @param {TOriginX} toOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} toOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n translateToGivenOrigin(\n point: Point,\n fromOriginX: TOriginX,\n fromOriginY: TOriginY,\n toOriginX: TOriginX,\n toOriginY: TOriginY,\n ): Point {\n let x = point.x,\n y = point.y;\n const offsetX = resolveOrigin(toOriginX) - resolveOrigin(fromOriginX),\n offsetY = resolveOrigin(toOriginY) - resolveOrigin(fromOriginY);\n\n if (offsetX || offsetY) {\n const dim = this._getTransformedDimensions();\n x += offsetX * dim.x;\n y += offsetY * dim.y;\n }\n\n return new Point(x, y);\n }\n\n /**\n * Translates the coordinates from origin to center coordinates (based on the object's dimensions)\n * @param {Point} point The point which corresponds to the originX and originY params\n * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n translateToCenterPoint(\n point: Point,\n originX: TOriginX,\n originY: TOriginY,\n ): Point {\n if (originX === CENTER && originY === CENTER) {\n return point;\n }\n const p = this.translateToGivenOrigin(\n point,\n originX,\n originY,\n CENTER,\n CENTER,\n );\n if (this.angle) {\n return p.rotate(degreesToRadians(this.angle), point);\n }\n return p;\n }\n\n /**\n * Translates the coordinates from center to origin coordinates (based on the object's dimensions)\n * @param {Point} center The point which corresponds to center of the object\n * @param {OriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {OriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n translateToOriginPoint(\n center: Point,\n originX: TOriginX,\n originY: TOriginY,\n ): Point {\n const p = this.translateToGivenOrigin(\n center,\n CENTER,\n CENTER,\n originX,\n originY,\n );\n if (this.angle) {\n return p.rotate(degreesToRadians(this.angle), center);\n }\n return p;\n }\n\n /**\n * Returns the center coordinates of the object relative to canvas\n * @return {Point}\n */\n getCenterPoint(): Point {\n const relCenter = this.getRelativeCenterPoint();\n return this.group\n ? transformPoint(relCenter, this.group.calcTransformMatrix())\n : relCenter;\n }\n\n /**\n * Returns the center coordinates of the object relative to it's parent\n * @return {Point}\n */\n getRelativeCenterPoint(): Point {\n return this.translateToCenterPoint(\n new Point(this.left, this.top),\n this.originX,\n this.originY,\n );\n }\n\n /**\n * Returns the position of the object as if it has a different origin.\n * Take an object that has left, top set to 100, 100 with origin 'left', 'top'.\n * Return the values of left top ( wrapped in a point ) that you would need to keep\n * the same position if origin where different.\n * Alternatively you can use this to also find which point in the parent plane is a specific origin\n * ( where is the bottom right corner of my object? )\n * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n getPointByOrigin(originX: TOriginX, originY: TOriginY): Point {\n return this.translateToOriginPoint(\n this.getRelativeCenterPoint(),\n originX,\n originY,\n );\n }\n\n /**\n * Sets the position of the object taking into consideration the object's origin\n * @param {Point} pos The new position of the object\n * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {void}\n */\n setPositionByOrigin(pos: Point, originX: TOriginX, originY: TOriginY) {\n const center = this.translateToCenterPoint(pos, originX, originY),\n position = this.translateToOriginPoint(\n center,\n this.originX,\n this.originY,\n );\n this.set({ left: position.x, top: position.y });\n }\n\n /**\n * @private\n */\n _getLeftTopCoords() {\n return this.translateToOriginPoint(\n this.getRelativeCenterPoint(),\n LEFT,\n TOP,\n );\n }\n}\n","import { cache } from '../../cache';\nimport { config } from '../../config';\nimport {\n ALIASING_LIMIT,\n CENTER,\n iMatrix,\n LEFT,\n SCALE_X,\n SCALE_Y,\n STROKE,\n FILL,\n TOP,\n VERSION,\n} from '../../constants';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport { Shadow } from '../../Shadow';\nimport type {\n TDegree,\n TFiller,\n TSize,\n TCacheCanvasDimensions,\n Abortable,\n TOptions,\n ImageFormat,\n} from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { runningAnimations } from '../../util/animation/AnimationRegistry';\nimport { capValue } from '../../util/misc/capValue';\nimport { createCanvasElement, toDataURL } from '../../util/misc/dom';\nimport { invertTransform, qrDecompose } from '../../util/misc/matrix';\nimport { enlivenObjectEnlivables } from '../../util/misc/objectEnlive';\nimport {\n resetObjectTransform,\n saveObjectTransform,\n} from '../../util/misc/objectTransforms';\nimport { sendObjectToPlane } from '../../util/misc/planeChange';\nimport { pick, pickBy } from '../../util/misc/pick';\nimport { toFixed } from '../../util/misc/toFixed';\nimport type { Group } from '../Group';\nimport { StaticCanvas } from '../../canvas/StaticCanvas';\nimport {\n isFiller,\n isSerializableFiller,\n isTextObject,\n} from '../../util/typeAssertions';\nimport type { FabricImage } from '../Image';\nimport {\n cacheProperties,\n fabricObjectDefaultValues,\n stateProperties,\n} from './defaultValues';\nimport type { Gradient } from '../../gradient/Gradient';\nimport type { Pattern } from '../../Pattern';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { SerializedObjectProps } from './types/SerializedObjectProps';\nimport type { ObjectProps } from './types/ObjectProps';\nimport { getDevicePixelRatio, getEnv } from '../../env';\nimport { log } from '../../util/internals/console';\nimport type { TColorArg } from '../../color/typedefs';\nimport type { TAnimation } from '../../util/animation/animate';\nimport { animate, animateColor } from '../../util/animation/animate';\nimport type {\n AnimationOptions,\n ArrayAnimationOptions,\n ColorAnimationOptions,\n ValueAnimationOptions,\n} from '../../util/animation/types';\nimport { ObjectGeometry } from './ObjectGeometry';\n\ntype TAncestor = FabricObject;\ntype TCollection = Group;\n\nexport type Ancestors =\n | [FabricObject | Group]\n | [FabricObject | Group, ...Group[]]\n | Group[];\n\nexport type AncestryComparison = {\n /**\n * common ancestors of `this` and`other`(may include`this` | `other`)\n */\n common: Ancestors;\n /**\n * ancestors that are of `this` only\n */\n fork: Ancestors;\n /**\n * ancestors that are of `other` only\n */\n otherFork: Ancestors;\n};\n\nexport type TCachedFabricObject = T &\n Required<\n Pick<\n T,\n | 'zoomX'\n | 'zoomY'\n | '_cacheCanvas'\n | '_cacheContext'\n | 'cacheTranslationX'\n | 'cacheTranslationY'\n >\n > & {\n _cacheContext: CanvasRenderingContext2D;\n };\n\nexport type ObjectToCanvasElementOptions = {\n format?: ImageFormat;\n /** Multiplier to scale by */\n multiplier?: number;\n /** Cropping left offset. Introduced in v1.2.14 */\n left?: number;\n /** Cropping top offset. Introduced in v1.2.14 */\n top?: number;\n /** Cropping width. Introduced in v1.2.14 */\n width?: number;\n /** Cropping height. Introduced in v1.2.14 */\n height?: number;\n /** Enable retina scaling for clone image. Introduce in 1.6.4 */\n enableRetinaScaling?: boolean;\n /** Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4 */\n withoutTransform?: boolean;\n /** Remove current object shadow. Introduced in 2.4.2 */\n withoutShadow?: boolean;\n /** Account for canvas viewport transform */\n viewportTransform?: boolean;\n /** Function to create the output canvas to export onto */\n canvasProvider?: (el?: HTMLCanvasElement) => T;\n};\n\ntype toDataURLOptions = ObjectToCanvasElementOptions & {\n quality?: number;\n};\n\n/**\n * Root object class from which all 2d shape classes inherit from\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#objects}\n *\n * @fires added\n * @fires removed\n *\n * @fires selected\n * @fires deselected\n *\n * @fires rotating\n * @fires scaling\n * @fires moving\n * @fires skewing\n * @fires modified\n *\n * @fires mousedown\n * @fires mouseup\n * @fires mouseover\n * @fires mouseout\n * @fires mousewheel\n * @fires mousedblclick\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop\n */\nexport class FabricObject<\n Props extends TOptions = Partial,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends ObjectGeometry\n implements ObjectProps\n{\n declare minScaleLimit: number;\n\n declare opacity: number;\n\n declare paintFirst: 'fill' | 'stroke';\n declare fill: string | TFiller | null;\n declare fillRule: CanvasFillRule;\n declare stroke: string | TFiller | null;\n declare strokeDashArray: number[] | null;\n declare strokeDashOffset: number;\n declare strokeLineCap: CanvasLineCap;\n declare strokeLineJoin: CanvasLineJoin;\n declare strokeMiterLimit: number;\n\n declare globalCompositeOperation: GlobalCompositeOperation;\n declare backgroundColor: string;\n\n declare shadow: Shadow | null;\n\n declare visible: boolean;\n\n declare includeDefaultValues: boolean;\n declare excludeFromExport: boolean;\n\n declare objectCaching: boolean;\n\n declare clipPath?: FabricObject;\n declare inverted: boolean;\n declare absolutePositioned: boolean;\n declare centeredRotation: boolean;\n declare centeredScaling: boolean;\n\n /**\n * This list of properties is used to check if the state of an object is changed.\n * This state change now is only used for children of groups to understand if a group\n * needs its cache regenerated during a .set call\n * @type Array\n */\n static stateProperties: string[] = stateProperties;\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * Those properties are checked by\n * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n * and refreshed at the next render\n * @type Array\n */\n static cacheProperties: string[] = cacheProperties;\n\n /**\n * When set to `true`, object's cache will be rerendered next render call.\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n declare dirty: boolean;\n\n /**\n * Quick access for the _cacheCanvas rendering context\n * This is part of the objectCaching feature\n * since 1.7.0\n * @type boolean\n * @default undefined\n * @private\n */\n _cacheContext: CanvasRenderingContext2D | null = null;\n\n /**\n * A reference to the HTMLCanvasElement that is used to contain the cache of the object\n * this canvas element is resized and cleared as needed\n * Is marked private, you can read it, don't use it since it is handled by fabric\n * since 1.7.0\n * @type HTMLCanvasElement\n * @default undefined\n * @private\n */\n declare _cacheCanvas?: HTMLCanvasElement;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, X axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare zoomX?: number;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, Y axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare zoomY?: number;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, Y axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare cacheTranslationX?: number;\n\n /**\n * translation of the cacheCanvas away from the center, for subpixel accuracy and crispness\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare cacheTranslationY?: number;\n\n /**\n * A reference to the parent of the object, usually a Group\n * @type number\n * @default undefined\n * @private\n */\n declare group?: Group;\n\n /**\n * Indicate if the object is sitting on a cache dedicated to it\n * or is part of a larger cache for many object ( a group for example)\n * @type number\n * @default undefined\n * @private\n */\n declare ownCaching?: boolean;\n\n /**\n * Private. indicates if the object inside a group is on a transformed context or not\n * or is part of a larger cache for many object ( a group for example)\n * @type boolean\n * @default undefined\n * @private\n */\n declare _transformDone?: boolean;\n\n static ownDefaults = fabricObjectDefaultValues;\n\n static getDefaults(): Record {\n return FabricObject.ownDefaults;\n }\n\n /**\n * The class type.\n * This is used for serialization and deserialization purposes and internally it can be used\n * to identify classes.\n * When we transform a class in a plain JS object we need a way to recognize which class it was,\n * and the type is the way we do that. It has no other purposes and you should not give one.\n * Hard to reach on instances and please do not use to drive instance's logic (this.constructor.type).\n * To idenfity a class use instanceof class ( instanceof Rect ).\n * We do not do that in fabricJS code because we want to try to have code splitting possible.\n */\n static type = 'FabricObject';\n\n /**\n * Legacy identifier of the class. Prefer using utils like isType or instanceOf\n * Will be removed in fabric 7 or 8.\n * The setter exists to avoid type errors in old code and possibly current deserialization code.\n * @TODO add sustainable warning message\n * @type string\n * @deprecated\n */\n get type() {\n const name = (this.constructor as typeof FabricObject).type;\n if (name === 'FabricObject') {\n return 'object';\n }\n return name.toLowerCase();\n }\n\n set type(value) {\n log('warn', 'Setting type has no effect', value);\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, FabricObject.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * Create a the canvas used to keep the cached copy of the object\n * @private\n */\n _createCacheCanvas() {\n this._cacheCanvas = createCanvasElement();\n this._cacheContext = this._cacheCanvas.getContext('2d');\n this._updateCacheCanvas();\n // if canvas gets created, is empty, so dirty.\n this.dirty = true;\n }\n\n /**\n * Limit the cache dimensions so that X * Y do not cross config.perfLimitSizeTotal\n * and each side do not cross fabric.cacheSideLimit\n * those numbers are configurable so that you can get as much detail as you want\n * making bargain with performances.\n * @param {Object} dims\n * @param {Object} dims.width width of canvas\n * @param {Object} dims.height height of canvas\n * @param {Object} dims.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @param {Object} dims.zoomY zoomY zoom value to unscale the canvas before drawing cache\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _limitCacheSize(\n dims: TSize & { zoomX: number; zoomY: number; capped: boolean } & any,\n ) {\n const width = dims.width,\n height = dims.height,\n max = config.maxCacheSideLimit,\n min = config.minCacheSideLimit;\n if (\n width <= max &&\n height <= max &&\n width * height <= config.perfLimitSizeTotal\n ) {\n if (width < min) {\n dims.width = min;\n }\n if (height < min) {\n dims.height = min;\n }\n return dims;\n }\n const ar = width / height,\n [limX, limY] = cache.limitDimsByArea(ar),\n x = capValue(min, limX, max),\n y = capValue(min, limY, max);\n if (width > x) {\n dims.zoomX /= width / x;\n dims.width = x;\n dims.capped = true;\n }\n if (height > y) {\n dims.zoomY /= height / y;\n dims.height = y;\n dims.capped = true;\n }\n return dims;\n }\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @return {Object}.x width of object to be cached\n * @return {Object}.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions(): TCacheCanvasDimensions {\n const objectScale = this.getTotalObjectScaling(),\n // calculate dimensions without skewing\n dim = this._getTransformedDimensions({ skewX: 0, skewY: 0 }),\n neededX = (dim.x * objectScale.x) / this.scaleX,\n neededY = (dim.y * objectScale.y) / this.scaleY;\n return {\n // for sure this ALIASING_LIMIT is slightly creating problem\n // in situation in which the cache canvas gets an upper limit\n // also objectScale contains already scaleX and scaleY\n width: neededX + ALIASING_LIMIT,\n height: neededY + ALIASING_LIMIT,\n zoomX: objectScale.x,\n zoomY: objectScale.y,\n x: neededX,\n y: neededY,\n };\n }\n\n /**\n * Update width and height of the canvas for cache\n * returns true or false if canvas needed resize.\n * @private\n * @return {Boolean} true if the canvas has been resized\n */\n _updateCacheCanvas() {\n const canvas = this._cacheCanvas!,\n context = this._cacheContext,\n dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n minCacheSize = config.minCacheSideLimit,\n width = dims.width,\n height = dims.height,\n zoomX = dims.zoomX,\n zoomY = dims.zoomY,\n dimensionsChanged = width !== canvas.width || height !== canvas.height,\n zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY;\n\n if (!canvas || !context) {\n return false;\n }\n\n let drawingWidth,\n drawingHeight,\n shouldRedraw = dimensionsChanged || zoomChanged,\n additionalWidth = 0,\n additionalHeight = 0,\n shouldResizeCanvas = false;\n\n if (dimensionsChanged) {\n const canvasWidth = (this._cacheCanvas as HTMLCanvasElement).width,\n canvasHeight = (this._cacheCanvas as HTMLCanvasElement).height,\n sizeGrowing = width > canvasWidth || height > canvasHeight,\n sizeShrinking =\n (width < canvasWidth * 0.9 || height < canvasHeight * 0.9) &&\n canvasWidth > minCacheSize &&\n canvasHeight > minCacheSize;\n shouldResizeCanvas = sizeGrowing || sizeShrinking;\n if (\n sizeGrowing &&\n !dims.capped &&\n (width > minCacheSize || height > minCacheSize)\n ) {\n additionalWidth = width * 0.1;\n additionalHeight = height * 0.1;\n }\n }\n if (isTextObject(this) && this.path) {\n shouldRedraw = true;\n shouldResizeCanvas = true;\n // IMHO in those lines we are using zoomX and zoomY not the this version.\n additionalWidth += this.getHeightOfLine(0) * this.zoomX!;\n additionalHeight += this.getHeightOfLine(0) * this.zoomY!;\n }\n if (shouldRedraw) {\n if (shouldResizeCanvas) {\n canvas.width = Math.ceil(width + additionalWidth);\n canvas.height = Math.ceil(height + additionalHeight);\n } else {\n context.setTransform(1, 0, 0, 1, 0, 0);\n context.clearRect(0, 0, canvas.width, canvas.height);\n }\n drawingWidth = dims.x / 2;\n drawingHeight = dims.y / 2;\n this.cacheTranslationX =\n Math.round(canvas.width / 2 - drawingWidth) + drawingWidth;\n this.cacheTranslationY =\n Math.round(canvas.height / 2 - drawingHeight) + drawingHeight;\n context.translate(this.cacheTranslationX, this.cacheTranslationY);\n context.scale(zoomX, zoomY);\n this.zoomX = zoomX;\n this.zoomY = zoomY;\n return true;\n }\n return false;\n }\n\n /**\n * Sets object's properties from options, for class constructor only.\n * Needs to be overridden for different defaults.\n * @protected\n * @param {Object} [options] Options object\n */\n protected setOptions(options: Record = {}) {\n this._setOptions(options);\n }\n\n /**\n * Transforms context when rendering an object\n * @param {CanvasRenderingContext2D} ctx Context\n */\n transform(ctx: CanvasRenderingContext2D) {\n const needFullTransform =\n (this.group && !this.group._transformDone) ||\n (this.group && this.canvas && ctx === (this.canvas as Canvas).contextTop);\n const m = this.calcTransformMatrix(!needFullTransform);\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n\n /**\n * Return the object scale factor counting also the group scaling\n * @return {Point}\n */\n getObjectScaling() {\n // if the object is a top level one, on the canvas, we go for simple aritmetic\n // otherwise the complex method with angles will return approximations and decimals\n // and will likely kill the cache when not needed\n // https://github.com/fabricjs/fabric.js/issues/7157\n if (!this.group) {\n return new Point(Math.abs(this.scaleX), Math.abs(this.scaleY));\n }\n // if we are inside a group total zoom calculation is complex, we defer to generic matrices\n const options = qrDecompose(this.calcTransformMatrix());\n return new Point(Math.abs(options.scaleX), Math.abs(options.scaleY));\n }\n\n /**\n * Return the object scale factor counting also the group scaling, zoom and retina\n * @return {Object} object with scaleX and scaleY properties\n */\n getTotalObjectScaling() {\n const scale = this.getObjectScaling();\n if (this.canvas) {\n const zoom = this.canvas.getZoom();\n const retina = this.getCanvasRetinaScaling();\n return scale.scalarMultiply(zoom * retina);\n }\n return scale;\n }\n\n /**\n * Return the object opacity counting also the group property\n * @return {Number}\n */\n getObjectOpacity() {\n let opacity = this.opacity;\n if (this.group) {\n opacity *= this.group.getObjectOpacity();\n }\n return opacity;\n }\n\n /**\n * Makes sure the scale is valid and modifies it if necessary\n * @todo: this is a control action issue, not a geometry one\n * @private\n * @param {Number} value, unconstrained\n * @return {Number} constrained value;\n */\n _constrainScale(value: number): number {\n if (Math.abs(value) < this.minScaleLimit) {\n if (value < 0) {\n return -this.minScaleLimit;\n } else {\n return this.minScaleLimit;\n }\n } else if (value === 0) {\n return 0.0001;\n }\n return value;\n }\n\n /**\n * Handles setting values on the instance and handling internal side effects\n * @protected\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n if (key === SCALE_X || key === SCALE_Y) {\n value = this._constrainScale(value);\n }\n if (key === SCALE_X && value < 0) {\n this.flipX = !this.flipX;\n value *= -1;\n } else if (key === 'scaleY' && value < 0) {\n this.flipY = !this.flipY;\n value *= -1;\n // i don't like this automatic initialization here\n } else if (key === 'shadow' && value && !(value instanceof Shadow)) {\n value = new Shadow(value);\n }\n\n const isChanged = this[key as keyof this] !== value;\n this[key as keyof this] = value;\n\n // invalidate caches\n if (\n isChanged &&\n (this.constructor as typeof FabricObject).cacheProperties.includes(key)\n ) {\n this.dirty = true;\n }\n // a dirty child makes the parent dirty.\n // but a non dirty child does not make the parent not dirty.\n // the parent could be dirty for some other reason.\n this.parent &&\n (this.dirty ||\n (isChanged &&\n (this.constructor as typeof FabricObject).stateProperties.includes(\n key,\n ))) &&\n this.parent._set('dirty', true);\n\n return this;\n }\n\n /*\n * @private\n * return if the object would be visible in rendering\n * @memberOf FabricObject.prototype\n * @return {Boolean}\n */\n isNotVisible() {\n return (\n this.opacity === 0 ||\n (!this.width && !this.height && this.strokeWidth === 0) ||\n !this.visible\n );\n }\n\n /**\n * Renders an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n // do not render if width/height are zeros or object is not visible\n if (this.isNotVisible()) {\n return;\n }\n if (\n this.canvas &&\n this.canvas.skipOffscreen &&\n !this.group &&\n !this.isOnScreen()\n ) {\n return;\n }\n ctx.save();\n this._setupCompositeOperation(ctx);\n this.drawSelectionBackground(ctx);\n this.transform(ctx);\n this._setOpacity(ctx);\n this._setShadow(ctx);\n if (this.shouldCache()) {\n this.renderCache();\n (this as TCachedFabricObject).drawCacheOnCanvas(ctx);\n } else {\n this._removeCacheCanvas();\n this.drawObject(ctx);\n this.dirty = false;\n }\n ctx.restore();\n }\n\n drawSelectionBackground(_ctx: CanvasRenderingContext2D) {\n /* no op */\n }\n\n renderCache(options?: any) {\n options = options || {};\n if (!this._cacheCanvas || !this._cacheContext) {\n this._createCacheCanvas();\n }\n if (this.isCacheDirty() && this._cacheContext) {\n this.drawObject(this._cacheContext, options.forClipping);\n this.dirty = false;\n }\n }\n\n /**\n * Remove cacheCanvas and its dimensions from the objects\n */\n _removeCacheCanvas() {\n this._cacheCanvas = undefined;\n this._cacheContext = null;\n }\n\n /**\n * return true if the object will draw a stroke\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when stroke happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the stroke is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasStroke() {\n return (\n this.stroke && this.stroke !== 'transparent' && this.strokeWidth !== 0\n );\n }\n\n /**\n * return true if the object will draw a fill\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when fill happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the fill is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasFill() {\n return this.fill && this.fill !== 'transparent';\n }\n\n /**\n * When set to `true`, force the object to have its own cache, even if it is inside a group\n * it may be needed when your object behave in a particular way on the cache and always needs\n * its own isolated canvas to render correctly.\n * Created to be overridden\n * since 1.7.12\n * @returns Boolean\n */\n needsItsOwnCache() {\n if (\n this.paintFirst === STROKE &&\n this.hasFill() &&\n this.hasStroke() &&\n !!this.shadow\n ) {\n return true;\n }\n if (this.clipPath) {\n return true;\n }\n return false;\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * Read as: cache if is needed, or if the feature is enabled but we are not already caching.\n * @return {Boolean}\n */\n shouldCache() {\n this.ownCaching =\n this.needsItsOwnCache() ||\n (this.objectCaching && (!this.parent || !this.parent.isOnACache()));\n return this.ownCaching;\n }\n\n /**\n * Check if this object will cast a shadow with an offset.\n * used by Group.shouldCache to know if child has a shadow recursively\n * @return {Boolean}\n * @deprecated\n */\n willDrawShadow() {\n return (\n !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0)\n );\n }\n\n /**\n * Execute the drawing operation for an object clipPath\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {FabricObject} clipPath\n */\n drawClipPathOnCache(\n ctx: CanvasRenderingContext2D,\n clipPath: TCachedFabricObject,\n ) {\n ctx.save();\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4\n if (clipPath.inverted) {\n ctx.globalCompositeOperation = 'destination-out';\n } else {\n ctx.globalCompositeOperation = 'destination-in';\n }\n //ctx.scale(1 / 2, 1 / 2);\n if (clipPath.absolutePositioned) {\n const m = invertTransform(this.calcTransformMatrix());\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n clipPath.transform(ctx);\n ctx.scale(1 / clipPath.zoomX, 1 / clipPath.zoomY);\n ctx.drawImage(\n clipPath._cacheCanvas,\n -clipPath.cacheTranslationX,\n -clipPath.cacheTranslationY,\n );\n ctx.restore();\n }\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {boolean} forClipping apply clipping styles\n */\n drawObject(ctx: CanvasRenderingContext2D, forClipping?: boolean) {\n const originalFill = this.fill,\n originalStroke = this.stroke;\n if (forClipping) {\n this.fill = 'black';\n this.stroke = '';\n this._setClippingProperties(ctx);\n } else {\n this._renderBackground(ctx);\n }\n this._render(ctx);\n this._drawClipPath(ctx, this.clipPath);\n this.fill = originalFill;\n this.stroke = originalStroke;\n }\n\n /**\n * Prepare clipPath state and cache and draw it on instance's cache\n * @param {CanvasRenderingContext2D} ctx\n * @param {FabricObject} clipPath\n */\n _drawClipPath(ctx: CanvasRenderingContext2D, clipPath?: FabricObject) {\n if (!clipPath) {\n return;\n }\n // needed to setup a couple of variables\n // path canvas gets overridden with this one.\n // TODO find a better solution?\n clipPath._set('canvas', this.canvas);\n clipPath.shouldCache();\n clipPath._transformDone = true;\n clipPath.renderCache({ forClipping: true });\n this.drawClipPathOnCache(ctx, clipPath as TCachedFabricObject);\n }\n\n /**\n * Paint the cached copy of the object on the target context.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas(this: TCachedFabricObject, ctx: CanvasRenderingContext2D) {\n ctx.scale(1 / this.zoomX, 1 / this.zoomY);\n ctx.drawImage(\n this._cacheCanvas,\n -this.cacheTranslationX,\n -this.cacheTranslationY,\n );\n }\n\n /**\n * Check if cache is dirty\n * @param {Boolean} skipCanvas skip canvas checks because this object is painted\n * on parent canvas.\n */\n isCacheDirty(skipCanvas = false) {\n if (this.isNotVisible()) {\n return false;\n }\n const canvas = this._cacheCanvas;\n const ctx = this._cacheContext;\n if (canvas && ctx && !skipCanvas && this._updateCacheCanvas()) {\n // in this case the context is already cleared.\n return true;\n } else {\n if (this.dirty || (this.clipPath && this.clipPath.absolutePositioned)) {\n if (canvas && ctx && !skipCanvas) {\n ctx.save();\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n }\n return true;\n }\n }\n return false;\n }\n\n /**\n * Draws a background for the object big as its untransformed dimensions\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground(ctx: CanvasRenderingContext2D) {\n if (!this.backgroundColor) {\n return;\n }\n const dim = this._getNonTransformedDimensions();\n ctx.fillStyle = this.backgroundColor;\n\n ctx.fillRect(-dim.x / 2, -dim.y / 2, dim.x, dim.y);\n // if there is background color no other shadows\n // should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setOpacity(ctx: CanvasRenderingContext2D) {\n if (this.group && !this.group._transformDone) {\n ctx.globalAlpha = this.getObjectOpacity();\n } else {\n ctx.globalAlpha *= this.opacity;\n }\n }\n\n _setStrokeStyles(\n ctx: CanvasRenderingContext2D,\n decl: Pick<\n this,\n | 'stroke'\n | 'strokeWidth'\n | 'strokeLineCap'\n | 'strokeDashOffset'\n | 'strokeLineJoin'\n | 'strokeMiterLimit'\n >,\n ) {\n const stroke = decl.stroke;\n if (stroke) {\n ctx.lineWidth = decl.strokeWidth;\n ctx.lineCap = decl.strokeLineCap;\n ctx.lineDashOffset = decl.strokeDashOffset;\n ctx.lineJoin = decl.strokeLineJoin;\n ctx.miterLimit = decl.strokeMiterLimit;\n if (isFiller(stroke)) {\n if (\n (stroke as Gradient<'linear'>).gradientUnits === 'percentage' ||\n (stroke as Gradient<'linear'>).gradientTransform ||\n (stroke as Pattern).patternTransform\n ) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n this._applyPatternForTransformedGradient(ctx, stroke);\n } else {\n // is a simple gradient or pattern\n ctx.strokeStyle = stroke.toLive(ctx)!;\n this._applyPatternGradientTransform(ctx, stroke);\n }\n } else {\n // is a color\n ctx.strokeStyle = decl.stroke as string;\n }\n }\n }\n\n _setFillStyles(ctx: CanvasRenderingContext2D, { fill }: Pick) {\n if (fill) {\n if (isFiller(fill)) {\n ctx.fillStyle = fill.toLive(ctx)!;\n this._applyPatternGradientTransform(ctx, fill);\n } else {\n ctx.fillStyle = fill;\n }\n }\n }\n\n _setClippingProperties(ctx: CanvasRenderingContext2D) {\n ctx.globalAlpha = 1;\n ctx.strokeStyle = 'transparent';\n ctx.fillStyle = '#000000';\n }\n\n /**\n * @private\n * Sets line dash\n * @param {CanvasRenderingContext2D} ctx Context to set the dash line on\n * @param {Array} dashArray array representing dashes\n */\n _setLineDash(ctx: CanvasRenderingContext2D, dashArray?: number[] | null) {\n if (!dashArray || dashArray.length === 0) {\n return;\n }\n // Spec requires the concatenation of two copies of the dash array when the number of elements is odd\n if (1 & dashArray.length) {\n dashArray.push(...dashArray);\n }\n ctx.setLineDash(dashArray);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setShadow(ctx: CanvasRenderingContext2D) {\n if (!this.shadow) {\n return;\n }\n\n const shadow = this.shadow,\n canvas = this.canvas,\n retinaScaling = this.getCanvasRetinaScaling(),\n [sx, , , sy] = canvas?.viewportTransform || iMatrix,\n multX = sx * retinaScaling,\n multY = sy * retinaScaling,\n scaling = shadow.nonScaling ? new Point(1, 1) : this.getObjectScaling();\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur =\n (shadow.blur *\n config.browserShadowBlurConstant *\n (multX + multY) *\n (scaling.x + scaling.y)) /\n 4;\n ctx.shadowOffsetX = shadow.offsetX * multX * scaling.x;\n ctx.shadowOffsetY = shadow.offsetY * multY * scaling.y;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _removeShadow(ctx: CanvasRenderingContext2D) {\n if (!this.shadow) {\n return;\n }\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {TFiller} filler {@link Pattern} or {@link Gradient}\n */\n _applyPatternGradientTransform(\n ctx: CanvasRenderingContext2D,\n filler: TFiller,\n ) {\n if (!isFiller(filler)) {\n return { offsetX: 0, offsetY: 0 };\n }\n const t =\n (filler as Gradient<'linear'>).gradientTransform ||\n (filler as Pattern).patternTransform;\n const offsetX = -this.width / 2 + filler.offsetX || 0,\n offsetY = -this.height / 2 + filler.offsetY || 0;\n\n if ((filler as Gradient<'linear'>).gradientUnits === 'percentage') {\n ctx.transform(this.width, 0, 0, this.height, offsetX, offsetY);\n } else {\n ctx.transform(1, 0, 0, 1, offsetX, offsetY);\n }\n if (t) {\n ctx.transform(t[0], t[1], t[2], t[3], t[4], t[5]);\n }\n return { offsetX: offsetX, offsetY: offsetY };\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderPaintInOrder(ctx: CanvasRenderingContext2D) {\n if (this.paintFirst === STROKE) {\n this._renderStroke(ctx);\n this._renderFill(ctx);\n } else {\n this._renderFill(ctx);\n this._renderStroke(ctx);\n }\n }\n\n /**\n * @private\n * function that actually render something on the context.\n * empty here to allow Obects to work on tests to benchmark fabric functionalites\n * not related to rendering\n * @param {CanvasRenderingContext2D} _ctx Context to render on\n */\n _render(_ctx: CanvasRenderingContext2D) {\n // placeholder to be overridden\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderFill(ctx: CanvasRenderingContext2D) {\n if (!this.fill) {\n return;\n }\n\n ctx.save();\n this._setFillStyles(ctx, this);\n if (this.fillRule === 'evenodd') {\n ctx.fill('evenodd');\n } else {\n ctx.fill();\n }\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderStroke(ctx: CanvasRenderingContext2D) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n if (this.strokeUniform) {\n const scaling = this.getObjectScaling();\n ctx.scale(1 / scaling.x, 1 / scaling.y);\n }\n this._setLineDash(ctx, this.strokeDashArray);\n this._setStrokeStyles(ctx, this);\n ctx.stroke();\n ctx.restore();\n }\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Gradient} filler\n */\n _applyPatternForTransformedGradient(\n ctx: CanvasRenderingContext2D,\n filler: TFiller,\n ) {\n const dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n pCanvas = createCanvasElement(),\n retinaScaling = this.getCanvasRetinaScaling(),\n width = dims.x / this.scaleX / retinaScaling,\n height = dims.y / this.scaleY / retinaScaling;\n // in case width and height are less than 1px, we have to round up.\n // since the pattern is no-repeat, this is fine\n pCanvas.width = Math.ceil(width);\n pCanvas.height = Math.ceil(height);\n const pCtx = pCanvas.getContext('2d');\n if (!pCtx) {\n return;\n }\n pCtx.beginPath();\n pCtx.moveTo(0, 0);\n pCtx.lineTo(width, 0);\n pCtx.lineTo(width, height);\n pCtx.lineTo(0, height);\n pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.scale(\n dims.zoomX / this.scaleX / retinaScaling,\n dims.zoomY / this.scaleY / retinaScaling,\n );\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fillStyle = filler.toLive(ctx)!;\n pCtx.fill();\n ctx.translate(\n -this.width / 2 - this.strokeWidth / 2,\n -this.height / 2 - this.strokeWidth / 2,\n );\n ctx.scale(\n (retinaScaling * this.scaleX) / dims.zoomX,\n (retinaScaling * this.scaleY) / dims.zoomY,\n );\n ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat') ?? '';\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement() {\n return new Point(this.left + this.width / 2, this.top + this.height / 2);\n }\n\n /**\n * Clones an instance.\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @returns {Promise}\n */\n clone(propertiesToInclude?: string[]): Promise {\n const objectForm = this.toObject(propertiesToInclude);\n return (this.constructor as typeof FabricObject).fromObject(\n objectForm,\n ) as unknown as Promise;\n }\n\n /**\n * Creates an instance of Image out of an object\n * makes use of toCanvasElement.\n * Once this method was based on toDataUrl and loadImage, so it also had a quality\n * and format option. toCanvasElement is faster and produce no loss of quality.\n * If you need to get a real Jpeg or Png from an object, using toDataURL is the right way to do it.\n * toCanvasElement and then toBlob from the obtained canvas is also a good option.\n * @todo fix the export type, it could not be Image but the type that getClass return for 'image'.\n * @param {ObjectToCanvasElementOptions} [options] for clone as image, passed to toDataURL\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {FabricImage} Object cloned as image.\n */\n cloneAsImage(options: ObjectToCanvasElementOptions): FabricImage {\n const canvasEl = this.toCanvasElement(options);\n // TODO: how to import Image w/o an import cycle?\n const ImageClass = classRegistry.getClass('image');\n return new ImageClass(canvasEl);\n }\n\n /**\n * Converts an object into a HTMLCanvas element\n * @param {ObjectToCanvasElementOptions} options Options object\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @param {Boolean} [options.viewportTransform] Account for canvas viewport transform\n * @param {(el?: HTMLCanvasElement) => StaticCanvas} [options.canvasProvider] Create the output canvas\n * @return {HTMLCanvasElement} Returns DOM element with the FabricObject\n */\n toCanvasElement(options: ObjectToCanvasElementOptions = {}) {\n const origParams = saveObjectTransform(this),\n originalGroup = this.group,\n originalShadow = this.shadow,\n abs = Math.abs,\n retinaScaling = options.enableRetinaScaling ? getDevicePixelRatio() : 1,\n multiplier = (options.multiplier || 1) * retinaScaling,\n canvasProvider: (el: HTMLCanvasElement) => StaticCanvas =\n options.canvasProvider ||\n ((el: HTMLCanvasElement) =>\n new StaticCanvas(el, {\n enableRetinaScaling: false,\n renderOnAddRemove: false,\n skipOffscreen: false,\n }));\n delete this.group;\n if (options.withoutTransform) {\n resetObjectTransform(this);\n }\n if (options.withoutShadow) {\n this.shadow = null;\n }\n if (options.viewportTransform) {\n sendObjectToPlane(this, this.getViewportTransform());\n }\n\n this.setCoords();\n const el = createCanvasElement(),\n boundingRect = this.getBoundingRect(),\n shadow = this.shadow,\n shadowOffset = new Point();\n\n if (shadow) {\n const shadowBlur = shadow.blur;\n const scaling = shadow.nonScaling\n ? new Point(1, 1)\n : this.getObjectScaling();\n // consider non scaling shadow.\n shadowOffset.x =\n 2 * Math.round(abs(shadow.offsetX) + shadowBlur) * abs(scaling.x);\n shadowOffset.y =\n 2 * Math.round(abs(shadow.offsetY) + shadowBlur) * abs(scaling.y);\n }\n const width = boundingRect.width + shadowOffset.x,\n height = boundingRect.height + shadowOffset.y;\n // if the current width/height is not an integer\n // we need to make it so.\n el.width = Math.ceil(width);\n el.height = Math.ceil(height);\n const canvas = canvasProvider(el);\n if (options.format === 'jpeg') {\n canvas.backgroundColor = '#fff';\n }\n this.setPositionByOrigin(\n new Point(canvas.width / 2, canvas.height / 2),\n CENTER,\n CENTER,\n );\n const originalCanvas = this.canvas;\n // static canvas and canvas have both an array of InteractiveObjects\n // @ts-expect-error this needs to be fixed somehow, or ignored globally\n canvas._objects = [this];\n this.set('canvas', canvas);\n this.setCoords();\n const canvasEl = canvas.toCanvasElement(multiplier || 1, options);\n this.set('canvas', originalCanvas);\n this.shadow = originalShadow;\n if (originalGroup) {\n this.group = originalGroup;\n }\n this.set(origParams);\n this.setCoords();\n // canvas.dispose will call image.dispose that will nullify the elements\n // since this canvas is a simple element for the process, we remove references\n // to objects in this way in order to avoid object trashing.\n canvas._objects = [];\n // since render has settled it is safe to destroy canvas\n canvas.destroy();\n return canvasEl;\n }\n\n /**\n * Converts an object into a data-url-like string\n * @param {Object} options Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n */\n toDataURL(options: toDataURLOptions = {}) {\n return toDataURL(\n this.toCanvasElement(options),\n options.format || 'png',\n options.quality || 1,\n );\n }\n\n /**\n * Returns true if any of the specified types is identical to the type of an instance\n * @param {String} type Type to check against\n * @return {Boolean}\n */\n isType(...types: string[]) {\n return (\n types.includes((this.constructor as typeof FabricObject).type) ||\n types.includes(this.type)\n );\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance (is 1 unless subclassed)\n */\n complexity() {\n return 1;\n }\n\n /**\n * Returns a JSON representation of an instance\n * @return {Object} JSON\n */\n toJSON() {\n // delegate, not alias\n return this.toObject();\n }\n\n /**\n * Sets \"angle\" of an instance with centered rotation\n * @param {TDegree} angle Angle value (in degrees)\n */\n rotate(angle: TDegree) {\n const { centeredRotation, originX, originY } = this;\n\n if (centeredRotation) {\n const { x, y } = this.getRelativeCenterPoint();\n this.originX = CENTER;\n this.originY = CENTER;\n this.left = x;\n this.top = y;\n }\n\n this.set('angle', angle);\n\n if (centeredRotation) {\n const { x, y } = this.translateToOriginPoint(\n this.getRelativeCenterPoint(),\n originX,\n originY,\n );\n this.left = x;\n this.top = y;\n this.originX = originX;\n this.originY = originY;\n }\n }\n\n /**\n * This callback function is called by the parent group of an object every\n * time a non-delegated property changes on the group. It is passed the key\n * and value as parameters. Not adding in this function's signature to avoid\n * Travis build error about unused variables.\n */\n setOnGroup() {\n // implemented by sub-classes, as needed.\n }\n\n /**\n * Sets canvas globalCompositeOperation for specific object\n * custom composition operation for the particular object can be specified using globalCompositeOperation property\n * @param {CanvasRenderingContext2D} ctx Rendering canvas context\n */\n _setupCompositeOperation(ctx: CanvasRenderingContext2D) {\n if (this.globalCompositeOperation) {\n ctx.globalCompositeOperation = this.globalCompositeOperation;\n }\n }\n\n /**\n * cancel instance's running animations\n * override if necessary to dispose artifacts such as `clipPath`\n */\n dispose() {\n runningAnimations.cancelByTarget(this);\n this.off();\n this._set('canvas', undefined);\n // clear caches\n this._cacheCanvas && getEnv().dispose(this._cacheCanvas);\n this._cacheCanvas = undefined;\n this._cacheContext = null;\n }\n\n // #region Animation methods\n /**\n * List of properties to consider for animating colors.\n * @type String[]\n */\n static colorProperties: string[] = [FILL, STROKE, 'backgroundColor'];\n\n /**\n * Animates object's properties\n * @param {Record} animatable map of keys and end values\n * @param {Partial>} options\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#animation}\n * @return {Record>} map of animation contexts\n *\n * As object — multiple properties\n *\n * object.animate({ left: ..., top: ... });\n * object.animate({ left: ..., top: ... }, { duration: ... });\n */\n animate(\n animatable: Record,\n options?: Partial>,\n ): Record> {\n return Object.entries(animatable).reduce(\n (acc, [key, endValue]) => {\n acc[key] = this._animate(key, endValue, options);\n return acc;\n },\n {} as Record>,\n );\n }\n\n /**\n * @private\n * @param {String} key Property to animate\n * @param {String} to Value to animate to\n * @param {Object} [options] Options object\n */\n _animate(\n key: string,\n endValue: T,\n options: Partial> = {},\n ): TAnimation {\n const path = key.split('.');\n const propIsColor = (\n this.constructor as typeof FabricObject\n ).colorProperties.includes(path[path.length - 1]);\n const { abort, startValue, onChange, onComplete } = options;\n const animationOptions = {\n ...options,\n target: this,\n // path.reduce... is the current value in case start value isn't provided\n startValue:\n startValue ?? path.reduce((deep: any, key) => deep[key], this),\n endValue,\n abort: abort?.bind(this),\n onChange: (\n value: number | number[] | string,\n valueProgress: number,\n durationProgress: number,\n ) => {\n path.reduce((deep: Record, key, index) => {\n if (index === path.length - 1) {\n deep[key] = value;\n }\n return deep[key];\n }, this);\n onChange &&\n // @ts-expect-error generic callback arg0 is wrong\n onChange(value, valueProgress, durationProgress);\n },\n onComplete: (\n value: number | number[] | string,\n valueProgress: number,\n durationProgress: number,\n ) => {\n this.setCoords();\n onComplete &&\n // @ts-expect-error generic callback arg0 is wrong\n onComplete(value, valueProgress, durationProgress);\n },\n } as AnimationOptions;\n\n return (\n propIsColor\n ? animateColor(animationOptions as ColorAnimationOptions)\n : animate(\n animationOptions as ValueAnimationOptions | ArrayAnimationOptions,\n )\n ) as TAnimation;\n }\n\n // #region Object stacking methods\n\n /**\n * A reference to the parent of the object\n * Used to keep the original parent ref when the object has been added to an ActiveSelection, hence loosing the `group` ref\n */\n declare parent?: Group;\n\n /**\n * Checks if object is descendant of target\n * Should be used instead of {@link Group.contains} or {@link StaticCanvas.contains} for performance reasons\n * @param {TAncestor} target\n * @returns {boolean}\n */\n isDescendantOf(target: TAncestor): boolean {\n const { parent, group } = this;\n return (\n parent === target ||\n group === target ||\n // walk up\n (!!parent && parent.isDescendantOf(target)) ||\n (!!group && group !== parent && group.isDescendantOf(target))\n );\n }\n\n /**\n * @returns {Ancestors} ancestors (excluding `ActiveSelection`) from bottom to top\n */\n getAncestors(): Ancestors {\n const ancestors: TAncestor[] = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let parent: TAncestor | undefined = this;\n do {\n parent = parent.parent;\n parent && ancestors.push(parent);\n } while (parent);\n return ancestors as Ancestors;\n }\n\n /**\n * Compare ancestors\n *\n * @param {StackedObject} other\n * @returns {AncestryComparison} an object that represent the ancestry situation.\n */\n findCommonAncestors(other: T): AncestryComparison {\n if (this === other) {\n return {\n fork: [],\n otherFork: [],\n common: [this, ...this.getAncestors()],\n } as AncestryComparison;\n }\n const ancestors = this.getAncestors();\n const otherAncestors = other.getAncestors();\n // if `this` has no ancestors and `this` is top ancestor of `other` we must handle the following case\n if (\n ancestors.length === 0 &&\n otherAncestors.length > 0 &&\n this === otherAncestors[otherAncestors.length - 1]\n ) {\n return {\n fork: [],\n otherFork: [\n other,\n ...otherAncestors.slice(0, otherAncestors.length - 1),\n ],\n common: [this],\n } as AncestryComparison;\n }\n // compare ancestors\n for (let i = 0, ancestor; i < ancestors.length; i++) {\n ancestor = ancestors[i];\n if (ancestor === other) {\n return {\n fork: [this, ...ancestors.slice(0, i)],\n otherFork: [],\n common: ancestors.slice(i),\n } as AncestryComparison;\n }\n for (let j = 0; j < otherAncestors.length; j++) {\n if (this === otherAncestors[j]) {\n return {\n fork: [],\n otherFork: [other, ...otherAncestors.slice(0, j)],\n common: [this, ...ancestors],\n } as AncestryComparison;\n }\n if (ancestor === otherAncestors[j]) {\n return {\n fork: [this, ...ancestors.slice(0, i)],\n otherFork: [other, ...otherAncestors.slice(0, j)],\n common: ancestors.slice(i),\n } as AncestryComparison;\n }\n }\n }\n // nothing shared\n return {\n fork: [this, ...ancestors],\n otherFork: [other, ...otherAncestors],\n common: [],\n } as AncestryComparison;\n }\n\n /**\n *\n * @param {StackedObject} other\n * @returns {boolean}\n */\n hasCommonAncestors(other: T): boolean {\n const commonAncestors = this.findCommonAncestors(other);\n return commonAncestors && !!commonAncestors.common.length;\n }\n\n /**\n *\n * @param {FabricObject} other object to compare against\n * @returns {boolean | undefined} if objects do not share a common ancestor or they are strictly equal it is impossible to determine which is in front of the other; in such cases the function returns `undefined`\n */\n isInFrontOf(other: T): boolean | undefined {\n if (this === other) {\n return undefined;\n }\n const ancestorData = this.findCommonAncestors(other);\n\n if (ancestorData.fork.includes(other as any)) {\n return true;\n }\n if (ancestorData.otherFork.includes(this as any)) {\n return false;\n }\n // if there isn't a common ancestor, we take the canvas.\n // if there is no canvas, there is nothing to compare\n const firstCommonAncestor = ancestorData.common[0] || this.canvas;\n if (!firstCommonAncestor) {\n return undefined;\n }\n const headOfFork = ancestorData.fork.pop(),\n headOfOtherFork = ancestorData.otherFork.pop(),\n thisIndex = (firstCommonAncestor as TCollection)._objects.indexOf(\n headOfFork as any,\n ),\n otherIndex = (firstCommonAncestor as TCollection)._objects.indexOf(\n headOfOtherFork as any,\n );\n return thisIndex > -1 && thisIndex > otherIndex;\n }\n\n // #region Serialization\n /**\n * Define a list of custom properties that will be serialized when\n * instance.toObject() gets called\n */\n static customProperties: string[] = [];\n\n /**\n * Returns an object representation of an instance\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject(propertiesToInclude: any[] = []): any {\n const propertiesToSerialize = propertiesToInclude.concat(\n FabricObject.customProperties,\n (this.constructor as typeof FabricObject).customProperties || [],\n );\n let clipPathData: Partial | undefined;\n const NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n const {\n clipPath,\n fill,\n stroke,\n shadow,\n strokeDashArray,\n left,\n top,\n originX,\n originY,\n width,\n height,\n strokeWidth,\n strokeLineCap,\n strokeDashOffset,\n strokeLineJoin,\n strokeUniform,\n strokeMiterLimit,\n scaleX,\n scaleY,\n angle,\n flipX,\n flipY,\n opacity,\n visible,\n backgroundColor,\n fillRule,\n paintFirst,\n globalCompositeOperation,\n skewX,\n skewY,\n } = this;\n if (clipPath && !clipPath.excludeFromExport) {\n clipPathData = clipPath.toObject(\n propertiesToSerialize.concat('inverted', 'absolutePositioned'),\n );\n }\n const toFixedBound = (val: number) => toFixed(val, NUM_FRACTION_DIGITS);\n const object = {\n ...pick(this, propertiesToSerialize as (keyof this)[]),\n type: (this.constructor as typeof FabricObject).type,\n version: VERSION,\n originX,\n originY,\n left: toFixedBound(left),\n top: toFixedBound(top),\n width: toFixedBound(width),\n height: toFixedBound(height),\n fill: isSerializableFiller(fill) ? fill.toObject() : fill,\n stroke: isSerializableFiller(stroke) ? stroke.toObject() : stroke,\n strokeWidth: toFixedBound(strokeWidth),\n strokeDashArray: strokeDashArray\n ? strokeDashArray.concat()\n : strokeDashArray,\n strokeLineCap,\n strokeDashOffset,\n strokeLineJoin,\n strokeUniform,\n strokeMiterLimit: toFixedBound(strokeMiterLimit),\n scaleX: toFixedBound(scaleX),\n scaleY: toFixedBound(scaleY),\n angle: toFixedBound(angle),\n flipX,\n flipY,\n opacity: toFixedBound(opacity),\n shadow: shadow ? shadow.toObject() : shadow,\n visible,\n backgroundColor,\n fillRule,\n paintFirst,\n globalCompositeOperation,\n skewX: toFixedBound(skewX),\n skewY: toFixedBound(skewY),\n ...(clipPathData ? { clipPath: clipPathData } : null),\n };\n\n return !this.includeDefaultValues\n ? this._removeDefaultValues(object)\n : object;\n }\n\n /**\n * Returns (dataless) object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toDatalessObject(propertiesToInclude?: any[]): any {\n // will be overwritten by subclasses\n return this.toObject(propertiesToInclude);\n }\n\n /**\n * @private\n * @param {Object} object\n */\n _removeDefaultValues(object: T): Partial {\n // getDefaults() ( get from static ownDefaults ) should win over prototype since anyway they get assigned to instance\n // ownDefault vs prototype is swappable only if you change all the fabric objects consistently.\n const defaults = (this.constructor as typeof FabricObject).getDefaults();\n const hasStaticDefaultValues = Object.keys(defaults).length > 0;\n const baseValues = hasStaticDefaultValues\n ? defaults\n : Object.getPrototypeOf(this);\n\n return pickBy(object, (value, key) => {\n if (key === LEFT || key === TOP || key === 'type') {\n return true;\n }\n const baseValue = baseValues[key];\n return (\n value !== baseValue &&\n // basically a check for [] === []\n !(\n Array.isArray(value) &&\n Array.isArray(baseValue) &&\n value.length === 0 &&\n baseValue.length === 0\n )\n );\n });\n }\n\n /**\n * Returns a string representation of an instance\n * @return {String}\n */\n toString() {\n return `#<${(this.constructor as typeof FabricObject).type}>`;\n }\n\n /**\n *\n * @param {Function} klass\n * @param {object} object\n * @param {object} [options]\n * @param {string} [options.extraParam] property to pass as first argument to the constructor\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static _fromObject(\n { type, ...serializedObjectOptions }: Record,\n { extraParam, ...options }: Abortable & { extraParam?: string } = {},\n ): Promise {\n return enlivenObjectEnlivables(serializedObjectOptions, options).then(\n (enlivedObjectOptions) => {\n // from the resulting enlived options, extract options.extraParam to arg0\n // to avoid accidental overrides later\n if (extraParam) {\n delete enlivedObjectOptions[extraParam];\n return new this(\n serializedObjectOptions[extraParam],\n // @ts-expect-error different signature\n enlivedObjectOptions,\n );\n } else {\n return new this(enlivedObjectOptions);\n }\n },\n ) as Promise;\n }\n\n /**\n *\n * @param {object} object\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static fromObject>(\n object: T,\n options?: Abortable,\n ) {\n return this._fromObject(object, options);\n }\n}\n\nclassRegistry.setClass(FabricObject);\nclassRegistry.setClass(FabricObject, 'object');\n","import type {\n TModificationEvents,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo } from './util';\n\n/**\n * Wrap an action handler with firing an event if the action is performed\n * @param {TModificationEvents} eventName the event we want to fire\n * @param {TransformActionHandler} actionHandler the function to wrap\n * @param {object} extraEventInfo extra information to pas to the event handler\n * @return {TransformActionHandler} a function with an action handler signature\n */\nexport const wrapWithFireEvent = <\n T extends Transform,\n P extends object = Record,\n>(\n eventName: TModificationEvents,\n actionHandler: TransformActionHandler,\n extraEventInfo?: P,\n) => {\n return ((eventData, transform, x, y) => {\n const actionPerformed = actionHandler(eventData, transform, x, y);\n if (actionPerformed) {\n fireEvent(eventName, {\n ...commonEventInfo(eventData, transform, x, y),\n ...extraEventInfo,\n });\n }\n return actionPerformed;\n }) as TransformActionHandler;\n};\n","import type { Transform, TransformActionHandler } from '../EventTypeDefs';\n\n/**\n * Wrap an action handler with saving/restoring object position on the transform.\n * this is the code that permits to objects to keep their position while transforming.\n * @param {Function} actionHandler the function to wrap\n * @return {Function} a function with an action handler signature\n */\nexport function wrapWithFixedAnchor(\n actionHandler: TransformActionHandler,\n) {\n return ((eventData, transform, x, y) => {\n const { target, originX, originY } = transform,\n centerPoint = target.getRelativeCenterPoint(),\n constraint = target.translateToOriginPoint(centerPoint, originX, originY),\n actionPerformed = actionHandler(eventData, transform, x, y);\n // flipping requires to change the transform origin, so we read from the mutated transform\n // instead of leveraging the one destructured before\n target.setPositionByOrigin(\n constraint,\n transform.originX,\n transform.originY,\n );\n return actionPerformed;\n }) as TransformActionHandler;\n}\n","import type { TransformActionHandler } from '../EventTypeDefs';\nimport { CENTER, LEFT, RESIZING, RIGHT } from '../constants';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { getLocalPoint, isTransformCentered } from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\n\n/**\n * Action handler to change object's width\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const changeObjectWidth: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const localPoint = getLocalPoint(\n transform,\n transform.originX,\n transform.originY,\n x,\n y,\n );\n // make sure the control changes width ONLY from it's side of target\n if (\n resolveOrigin(transform.originX) === resolveOrigin(CENTER) ||\n (resolveOrigin(transform.originX) === resolveOrigin(RIGHT) &&\n localPoint.x < 0) ||\n (resolveOrigin(transform.originX) === resolveOrigin(LEFT) &&\n localPoint.x > 0)\n ) {\n const { target } = transform,\n strokePadding =\n target.strokeWidth / (target.strokeUniform ? target.scaleX : 1),\n multiplier = isTransformCentered(transform) ? 2 : 1,\n oldWidth = target.width,\n newWidth =\n Math.abs((localPoint.x * multiplier) / target.scaleX) - strokePadding;\n target.set('width', Math.max(newWidth, 1));\n // check against actual target width in case `newWidth` was rejected\n return oldWidth !== target.width;\n }\n return false;\n};\n\nexport const changeWidth = wrapWithFireEvent(\n RESIZING,\n wrapWithFixedAnchor(changeObjectWidth),\n);\n","import { FILL, STROKE, twoMathPi } from '../constants';\nimport type { InteractiveFabricObject } from '../shapes/Object/InteractiveObject';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport type { Control } from './Control';\n\nexport type ControlRenderingStyleOverride = Partial<\n Pick<\n InteractiveFabricObject,\n | 'cornerStyle'\n | 'cornerSize'\n | 'cornerColor'\n | 'cornerStrokeColor'\n | 'cornerDashArray'\n | 'transparentCorners'\n >\n>;\n\nexport type ControlRenderer<\n O extends InteractiveFabricObject = InteractiveFabricObject,\n> = (\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: O,\n) => void;\n\n/**\n * Render a round control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for FabricObject controls style\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n */\nexport function renderCircleControl(\n this: Control,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: InteractiveFabricObject,\n) {\n styleOverride = styleOverride || {};\n const xSize =\n this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners =\n typeof styleOverride.transparentCorners !== 'undefined'\n ? styleOverride.transparentCorners\n : fabricObject.transparentCorners,\n methodName = transparentCorners ? STROKE : FILL,\n stroke =\n !transparentCorners &&\n (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor);\n let myLeft = left,\n myTop = top,\n size;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor || '';\n ctx.strokeStyle =\n styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor || '';\n // TODO: use proper ellipse code.\n if (xSize > ySize) {\n size = xSize;\n ctx.scale(1.0, ySize / xSize);\n myTop = (top * xSize) / ySize;\n } else if (ySize > xSize) {\n size = ySize;\n ctx.scale(xSize / ySize, 1.0);\n myLeft = (left * ySize) / xSize;\n } else {\n size = xSize;\n }\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.arc(myLeft, myTop, size / 2, 0, twoMathPi, false);\n ctx[methodName]();\n if (stroke) {\n ctx.stroke();\n }\n ctx.restore();\n}\n\n/**\n * Render a square control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for FabricObject controls style\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n */\nexport function renderSquareControl(\n this: Control,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: InteractiveFabricObject,\n) {\n styleOverride = styleOverride || {};\n const xSize =\n this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners =\n typeof styleOverride.transparentCorners !== 'undefined'\n ? styleOverride.transparentCorners\n : fabricObject.transparentCorners,\n methodName = transparentCorners ? STROKE : FILL,\n stroke =\n !transparentCorners &&\n (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor),\n xSizeBy2 = xSize / 2,\n ySizeBy2 = ySize / 2;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor || '';\n ctx.strokeStyle =\n styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor || '';\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.translate(left, top);\n // angle is relative to canvas plane\n const angle = fabricObject.getTotalAngle();\n ctx.rotate(degreesToRadians(angle));\n // this does not work, and fixed with ( && ) does not make sense.\n // to have real transparent corners we need the controls on upperCanvas\n // transparentCorners || ctx.clearRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n ctx[`${methodName}Rect`](-xSizeBy2, -ySizeBy2, xSize, ySize);\n if (stroke) {\n ctx.strokeRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n }\n ctx.restore();\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type {\n ControlActionHandler,\n TPointerEvent,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { Intersection } from '../Intersection';\nimport { Point } from '../Point';\nimport { SCALE } from '../constants';\nimport type { InteractiveFabricObject } from '../shapes/Object/InteractiveObject';\nimport type { TCornerPoint, TDegree, TMat2D } from '../typedefs';\nimport {\n createRotateMatrix,\n createScaleMatrix,\n createTranslateMatrix,\n multiplyTransformMatrixArray,\n} from '../util/misc/matrix';\nimport type { ControlRenderingStyleOverride } from './controlRendering';\nimport { renderCircleControl, renderSquareControl } from './controlRendering';\n\nexport class Control {\n /**\n * keep track of control visibility.\n * mainly for backward compatibility.\n * if you do not want to see a control, you can remove it\n * from the control set.\n * @type {Boolean}\n * @default true\n */\n visible = true;\n\n /**\n * Name of the action that the control will likely execute.\n * This is optional. FabricJS uses to identify what the user is doing for some\n * extra optimizations. If you are writing a custom control and you want to know\n * somewhere else in the code what is going on, you can use this string here.\n * you can also provide a custom getActionName if your control run multiple actions\n * depending on some external state.\n * default to scale since is the most common, used on 4 corners by default\n * @type {String}\n * @default 'scale'\n */\n actionName = SCALE;\n\n /**\n * Drawing angle of the control.\n * NOT used for now, but name marked as needed for internal logic\n * example: to reuse the same drawing function for different rotated controls\n * @type {Number}\n * @default 0\n */\n angle = 0;\n\n /**\n * Relative position of the control. X\n * 0,0 is the center of the Object, while -0.5 (left) or 0.5 (right) are the extremities\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n x = 0;\n\n /**\n * Relative position of the control. Y\n * 0,0 is the center of the Object, while -0.5 (top) or 0.5 (bottom) are the extremities\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n y = 0;\n\n /**\n * Horizontal offset of the control from the defined position. In pixels\n * Positive offset moves the control to the right, negative to the left.\n * It used when you want to have position of control that does not scale with\n * the bounding box. Example: rotation control is placed at x:0, y: 0.5 on\n * the boundind box, with an offset of 30 pixels vertically. Those 30 pixels will\n * stay 30 pixels no matter how the object is big. Another example is having 2\n * controls in the corner, that stay in the same position when the object scale.\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n offsetX = 0;\n\n /**\n * Vertical offset of the control from the defined position. In pixels\n * Positive offset moves the control to the bottom, negative to the top.\n * @type {Number}\n * @default 0\n */\n offsetY = 0;\n\n /**\n * Sets the length of the control. If null, defaults to object's cornerSize.\n * Expects both sizeX and sizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n sizeX = 0;\n\n /**\n * Sets the height of the control. If null, defaults to object's cornerSize.\n * Expects both sizeX and sizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n sizeY = 0;\n\n /**\n * Sets the length of the touch area of the control. If null, defaults to object's touchCornerSize.\n * Expects both touchSizeX and touchSizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n touchSizeX = 0;\n\n /**\n * Sets the height of the touch area of the control. If null, defaults to object's touchCornerSize.\n * Expects both touchSizeX and touchSizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n touchSizeY = 0;\n\n /**\n * Css cursor style to display when the control is hovered.\n * if the method `cursorStyleHandler` is provided, this property is ignored.\n * @type {String}\n * @default 'crosshair'\n */\n cursorStyle = 'crosshair';\n\n /**\n * If controls has an offsetY or offsetX, draw a line that connects\n * the control to the bounding box\n * @type {Boolean}\n * @default false\n */\n withConnection = false;\n\n constructor(options?: Partial) {\n Object.assign(this, options);\n }\n\n /**\n * The control actionHandler, provide one to handle action ( control being moved )\n * @param {Event} eventData the native mouse event\n * @param {Transform} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n declare actionHandler: TransformActionHandler;\n\n /**\n * The control handler for mouse down, provide one to handle mouse down on control\n * @param {Event} eventData the native mouse event\n * @param {Transform} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n declare mouseDownHandler?: ControlActionHandler;\n\n /**\n * The control mouseUpHandler, provide one to handle an effect on mouse up.\n * @param {Event} eventData the native mouse event\n * @param {Transform} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n declare mouseUpHandler?: ControlActionHandler;\n\n shouldActivate(\n controlKey: string,\n fabricObject: InteractiveFabricObject,\n pointer: Point,\n { tl, tr, br, bl }: TCornerPoint,\n ) {\n // TODO: locking logic can be handled here instead of in the control handler logic\n return (\n fabricObject.canvas?.getActiveObject() === fabricObject &&\n fabricObject.isControlVisible(controlKey) &&\n Intersection.isPointInPolygon(pointer, [tl, tr, br, bl])\n );\n }\n\n /**\n * Returns control actionHandler\n * @param {Event} eventData the native mouse event\n * @param {FabricObject} fabricObject on which the control is displayed\n * @param {Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getActionHandler(\n eventData: TPointerEvent,\n fabricObject: InteractiveFabricObject,\n control: Control,\n ): TransformActionHandler | undefined {\n return this.actionHandler;\n }\n\n /**\n * Returns control mouseDown handler\n * @param {Event} eventData the native mouse event\n * @param {FabricObject} fabricObject on which the control is displayed\n * @param {Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getMouseDownHandler(\n eventData: TPointerEvent,\n fabricObject: InteractiveFabricObject,\n control: Control,\n ): ControlActionHandler | undefined {\n return this.mouseDownHandler;\n }\n\n /**\n * Returns control mouseUp handler.\n * During actions the fabricObject or the control can be of different obj\n * @param {Event} eventData the native mouse event\n * @param {FabricObject} fabricObject on which the control is displayed\n * @param {Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getMouseUpHandler(\n eventData: TPointerEvent,\n fabricObject: InteractiveFabricObject,\n control: Control,\n ): ControlActionHandler | undefined {\n return this.mouseUpHandler;\n }\n\n /**\n * Returns control cursorStyle for css using cursorStyle. If you need a more elaborate\n * function you can pass one in the constructor\n * the cursorStyle property\n * @param {Event} eventData the native mouse event\n * @param {Control} control the current control ( likely this)\n * @param {FabricObject} object on which the control is displayed\n * @return {String}\n */\n cursorStyleHandler(\n eventData: TPointerEvent,\n control: Control,\n fabricObject: InteractiveFabricObject,\n ) {\n return control.cursorStyle;\n }\n\n /**\n * Returns the action name. The basic implementation just return the actionName property.\n * @param {Event} eventData the native mouse event\n * @param {Control} control the current control ( likely this)\n * @param {FabricObject} object on which the control is displayed\n * @return {String}\n */\n getActionName(\n eventData: TPointerEvent,\n control: Control,\n fabricObject: InteractiveFabricObject,\n ) {\n return control.actionName;\n }\n\n /**\n * Returns controls visibility\n * @param {FabricObject} object on which the control is displayed\n * @param {String} controlKey key where the control is memorized on the\n * @return {Boolean}\n */\n getVisibility(fabricObject: InteractiveFabricObject, controlKey: string) {\n return fabricObject._controlsVisibility?.[controlKey] ?? this.visible;\n }\n\n /**\n * Sets controls visibility\n * @param {Boolean} visibility for the object\n * @return {Void}\n */\n setVisibility(\n visibility: boolean,\n name: string,\n fabricObject: InteractiveFabricObject,\n ) {\n this.visible = visibility;\n }\n\n positionHandler(\n dim: Point,\n finalMatrix: TMat2D,\n fabricObject: InteractiveFabricObject,\n currentControl: Control,\n ) {\n return new Point(\n this.x * dim.x + this.offsetX,\n this.y * dim.y + this.offsetY,\n ).transform(finalMatrix);\n }\n\n /**\n * Returns the coords for this control based on object values.\n * @param {Number} objectAngle angle from the fabric object holding the control\n * @param {Number} objectCornerSize cornerSize from the fabric object holding the control (or touchCornerSize if\n * isTouch is true)\n * @param {Number} centerX x coordinate where the control center should be\n * @param {Number} centerY y coordinate where the control center should be\n * @param {boolean} isTouch true if touch corner, false if normal corner\n */\n calcCornerCoords(\n angle: TDegree,\n objectCornerSize: number,\n centerX: number,\n centerY: number,\n isTouch: boolean,\n fabricObject: InteractiveFabricObject,\n ) {\n const t = multiplyTransformMatrixArray([\n createTranslateMatrix(centerX, centerY),\n createRotateMatrix({ angle }),\n createScaleMatrix(\n (isTouch ? this.touchSizeX : this.sizeX) || objectCornerSize,\n (isTouch ? this.touchSizeY : this.sizeY) || objectCornerSize,\n ),\n ]);\n return {\n tl: new Point(-0.5, -0.5).transform(t),\n tr: new Point(0.5, -0.5).transform(t),\n br: new Point(0.5, 0.5).transform(t),\n bl: new Point(-0.5, 0.5).transform(t),\n };\n }\n\n /**\n * Render function for the control.\n * When this function runs the context is unscaled. unrotate. Just retina scaled.\n * all the functions will have to translate to the point left,top before starting Drawing\n * if they want to draw a control where the position is detected.\n * left and top are the result of the positionHandler function\n * @param {RenderingContext2D} ctx the context where the control will be drawn\n * @param {Number} left position of the canvas where we are about to render the control.\n * @param {Number} top position of the canvas where we are about to render the control.\n * @param {Object} styleOverride\n * @param {FabricObject} fabricObject the object where the control is about to be rendered\n */\n render(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: InteractiveFabricObject,\n ) {\n styleOverride = styleOverride || {};\n switch (styleOverride.cornerStyle || fabricObject.cornerStyle) {\n case 'circle':\n renderCircleControl.call(\n this,\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n );\n break;\n default:\n renderSquareControl.call(\n this,\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n );\n }\n }\n}\n","import type {\n ControlCursorCallback,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { ROTATING } from '../constants';\nimport { radiansToDegrees } from '../util/misc/radiansDegreesConversion';\nimport { isLocked, NOT_ALLOWED_CURSOR } from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\n\n/**\n * Find the correct style for the control that is used for rotation.\n * this function is very simple and it just take care of not-allowed or standard cursor\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const rotationStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n if (fabricObject.lockRotation) {\n return NOT_ALLOWED_CURSOR;\n }\n return control.cursorStyle;\n};\n\n/**\n * Action handler for rotation and snapping, without anchor point.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n * @private\n */\nconst rotateObjectWithSnapping: TransformActionHandler = (\n eventData,\n { target, ex, ey, theta, originX, originY },\n x,\n y,\n) => {\n const pivotPoint = target.translateToOriginPoint(\n target.getRelativeCenterPoint(),\n originX,\n originY,\n );\n\n if (isLocked(target, 'lockRotation')) {\n return false;\n }\n\n const lastAngle = Math.atan2(ey - pivotPoint.y, ex - pivotPoint.x),\n curAngle = Math.atan2(y - pivotPoint.y, x - pivotPoint.x);\n let angle = radiansToDegrees(curAngle - lastAngle + theta);\n\n if (target.snapAngle && target.snapAngle > 0) {\n const snapAngle = target.snapAngle,\n snapThreshold = target.snapThreshold || snapAngle,\n rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle,\n leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle;\n\n if (Math.abs(angle - leftAngleLocked) < snapThreshold) {\n angle = leftAngleLocked;\n } else if (Math.abs(angle - rightAngleLocked) < snapThreshold) {\n angle = rightAngleLocked;\n }\n }\n\n // normalize angle to positive value\n if (angle < 0) {\n angle = 360 + angle;\n }\n angle %= 360;\n\n const hasRotated = target.angle !== angle;\n // TODO: why aren't we using set?\n target.angle = angle;\n return hasRotated;\n};\n\nexport const rotationWithSnapping = wrapWithFireEvent(\n ROTATING,\n wrapWithFixedAnchor(rotateObjectWithSnapping),\n);\n","import type {\n ControlCursorCallback,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TAxis } from '../typedefs';\nimport type { Canvas } from '../canvas/Canvas';\nimport {\n findCornerQuadrant,\n getLocalPoint,\n invertOrigin,\n isLocked,\n isTransformCentered,\n NOT_ALLOWED_CURSOR,\n} from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\nimport { SCALE_X, SCALE_Y, SCALING } from '../constants';\n\ntype ScaleTransform = Transform & {\n gestureScale?: number;\n signX?: number;\n signY?: number;\n};\n\ntype ScaleBy = TAxis | 'equally' | '' | undefined;\n\n/**\n * Inspect event and fabricObject properties to understand if the scaling action\n * @param {Event} eventData from the user action\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @return {Boolean} true if scale is proportional\n */\nexport function scaleIsProportional(\n eventData: TPointerEvent,\n fabricObject: FabricObject,\n): boolean {\n const canvas = fabricObject.canvas as Canvas,\n uniformIsToggled = eventData[canvas.uniScaleKey!];\n return (\n (canvas.uniformScaling && !uniformIsToggled) ||\n (!canvas.uniformScaling && uniformIsToggled)\n );\n}\n\n/**\n * Inspect fabricObject to understand if the current scaling action is allowed\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @param {String} by 'x' or 'y' or ''\n * @param {Boolean} scaleProportionally true if we are trying to scale proportionally\n * @return {Boolean} true if scaling is not allowed at current conditions\n */\nexport function scalingIsForbidden(\n fabricObject: FabricObject,\n by: ScaleBy,\n scaleProportionally: boolean,\n) {\n const lockX = isLocked(fabricObject, 'lockScalingX'),\n lockY = isLocked(fabricObject, 'lockScalingY');\n if (lockX && lockY) {\n return true;\n }\n if (!by && (lockX || lockY) && scaleProportionally) {\n return true;\n }\n if (lockX && by === 'x') {\n return true;\n }\n if (lockY && by === 'y') {\n return true;\n }\n // code crashes because of a division by 0 if a 0 sized object is scaled\n // forbid to prevent scaling to happen. ISSUE-9475\n const { width, height, strokeWidth } = fabricObject;\n if (width === 0 && strokeWidth === 0 && by !== 'y') {\n return true;\n }\n if (height === 0 && strokeWidth === 0 && by !== 'x') {\n return true;\n }\n return false;\n}\n\nconst scaleMap = ['e', 'se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'];\n\n/**\n * return the correct cursor style for the scale action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const scaleCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n const scaleProportionally = scaleIsProportional(eventData, fabricObject),\n by =\n control.x !== 0 && control.y === 0\n ? 'x'\n : control.x === 0 && control.y !== 0\n ? 'y'\n : '';\n if (scalingIsForbidden(fabricObject, by, scaleProportionally)) {\n return NOT_ALLOWED_CURSOR;\n }\n const n = findCornerQuadrant(fabricObject, control);\n return `${scaleMap[n]}-resize`;\n};\n\n/**\n * Basic scaling logic, reused with different constrain for scaling X,Y, freely or equally.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @param {Object} options additional information for scaling\n * @param {String} options.by 'x', 'y', 'equally' or '' to indicate type of scaling\n * @return {Boolean} true if some change happened\n * @private\n */\nfunction scaleObject(\n eventData: TPointerEvent,\n transform: ScaleTransform,\n x: number,\n y: number,\n options: { by?: ScaleBy } = {},\n) {\n const target = transform.target,\n by = options.by,\n scaleProportionally = scaleIsProportional(eventData, target),\n forbidScaling = scalingIsForbidden(target, by, scaleProportionally);\n let newPoint, scaleX, scaleY, dim, signX, signY;\n\n if (forbidScaling) {\n return false;\n }\n if (transform.gestureScale) {\n scaleX = transform.scaleX * transform.gestureScale;\n scaleY = transform.scaleY * transform.gestureScale;\n } else {\n newPoint = getLocalPoint(\n transform,\n transform.originX,\n transform.originY,\n x,\n y,\n );\n // use of sign: We use sign to detect change of direction of an action. sign usually change when\n // we cross the origin point with the mouse. So a scale flip for example. There is an issue when scaling\n // by center and scaling using one middle control ( default: mr, mt, ml, mb), the mouse movement can easily\n // cross many time the origin point and flip the object. so we need a way to filter out the noise.\n // This ternary here should be ok to filter out X scaling when we want Y only and vice versa.\n signX = by !== 'y' ? Math.sign(newPoint.x || transform.signX || 1) : 1;\n signY = by !== 'x' ? Math.sign(newPoint.y || transform.signY || 1) : 1;\n if (!transform.signX) {\n transform.signX = signX;\n }\n if (!transform.signY) {\n transform.signY = signY;\n }\n\n if (\n isLocked(target, 'lockScalingFlip') &&\n (transform.signX !== signX || transform.signY !== signY)\n ) {\n return false;\n }\n\n dim = target._getTransformedDimensions();\n // missing detection of flip and logic to switch the origin\n if (scaleProportionally && !by) {\n // uniform scaling\n const distance = Math.abs(newPoint.x) + Math.abs(newPoint.y),\n { original } = transform,\n originalDistance =\n Math.abs((dim.x * original.scaleX) / target.scaleX) +\n Math.abs((dim.y * original.scaleY) / target.scaleY),\n scale = distance / originalDistance;\n scaleX = original.scaleX * scale;\n scaleY = original.scaleY * scale;\n } else {\n scaleX = Math.abs((newPoint.x * target.scaleX) / dim.x);\n scaleY = Math.abs((newPoint.y * target.scaleY) / dim.y);\n }\n // if we are scaling by center, we need to double the scale\n if (isTransformCentered(transform)) {\n scaleX *= 2;\n scaleY *= 2;\n }\n if (transform.signX !== signX && by !== 'y') {\n transform.originX = invertOrigin(transform.originX);\n scaleX *= -1;\n transform.signX = signX;\n }\n if (transform.signY !== signY && by !== 'x') {\n transform.originY = invertOrigin(transform.originY);\n scaleY *= -1;\n transform.signY = signY;\n }\n }\n // minScale is taken care of in the setter.\n const oldScaleX = target.scaleX,\n oldScaleY = target.scaleY;\n if (!by) {\n !isLocked(target, 'lockScalingX') && target.set(SCALE_X, scaleX);\n !isLocked(target, 'lockScalingY') && target.set(SCALE_Y, scaleY);\n } else {\n // forbidden cases already handled on top here.\n by === 'x' && target.set(SCALE_X, scaleX);\n by === 'y' && target.set(SCALE_Y, scaleY);\n }\n return oldScaleX !== target.scaleX || oldScaleY !== target.scaleY;\n}\n\n/**\n * Generic scaling logic, to scale from corners either equally or freely.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scaleObjectFromCorner: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y);\n};\n\n/**\n * Scaling logic for the X axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'x' });\n};\n\n/**\n * Scaling logic for the Y axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'y' });\n};\n\nexport const scalingEqually = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectFromCorner),\n);\n\nexport const scalingX = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectX),\n);\n\nexport const scalingY = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectY),\n);\n","import type {\n ControlCursorCallback,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { Point } from '../Point';\nimport type { TAxis, TAxisKey } from '../typedefs';\nimport {\n degreesToRadians,\n radiansToDegrees,\n} from '../util/misc/radiansDegreesConversion';\nimport {\n findCornerQuadrant,\n getLocalPoint,\n isLocked,\n NOT_ALLOWED_CURSOR,\n} from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\nimport {\n CENTER,\n SCALE_X,\n SCALE_Y,\n SKEWING,\n SKEW_X,\n SKEW_Y,\n} from '../constants';\n\nexport type SkewTransform = Transform & { skewingSide: -1 | 1 };\n\nconst AXIS_KEYS: Record<\n TAxis,\n {\n counterAxis: TAxis;\n scale: TAxisKey<'scale'>;\n skew: TAxisKey<'skew'>;\n lockSkewing: TAxisKey<'lockSkewing'>;\n origin: TAxisKey<'origin'>;\n flip: TAxisKey<'flip'>;\n }\n> = {\n x: {\n counterAxis: 'y',\n scale: SCALE_X,\n skew: SKEW_X,\n lockSkewing: 'lockSkewingX',\n origin: 'originX',\n flip: 'flipX',\n },\n y: {\n counterAxis: 'x',\n scale: SCALE_Y,\n skew: SKEW_Y,\n lockSkewing: 'lockSkewingY',\n origin: 'originY',\n flip: 'flipY',\n },\n};\n\nconst skewMap = ['ns', 'nesw', 'ew', 'nwse'];\n\n/**\n * return the correct cursor style for the skew action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const skewCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n if (control.x !== 0 && isLocked(fabricObject, 'lockSkewingY')) {\n return NOT_ALLOWED_CURSOR;\n }\n if (control.y !== 0 && isLocked(fabricObject, 'lockSkewingX')) {\n return NOT_ALLOWED_CURSOR;\n }\n const n = findCornerQuadrant(fabricObject, control) % 4;\n return `${skewMap[n]}-resize`;\n};\n\n/**\n * Since skewing is applied before scaling, calculations are done in a scaleless plane\n * @see https://github.com/fabricjs/fabric.js/pull/8380\n */\nfunction skewObject(\n axis: TAxis,\n { target, ex, ey, skewingSide, ...transform }: SkewTransform,\n pointer: Point,\n) {\n const { skew: skewKey } = AXIS_KEYS[axis],\n offset = pointer\n .subtract(new Point(ex, ey))\n .divide(new Point(target.scaleX, target.scaleY))[axis],\n skewingBefore = target[skewKey],\n skewingStart = transform[skewKey],\n shearingStart = Math.tan(degreesToRadians(skewingStart)),\n // let a, b be the size of target\n // let a' be the value of a after applying skewing\n // then:\n // a' = a + b * skewA => skewA = (a' - a) / b\n // the value b is tricky since skewY is applied before skewX\n b =\n axis === 'y'\n ? target._getTransformedDimensions({\n scaleX: 1,\n scaleY: 1,\n // since skewY is applied before skewX, b (=width) is not affected by skewX\n skewX: 0,\n }).x\n : target._getTransformedDimensions({\n scaleX: 1,\n scaleY: 1,\n }).y;\n\n const shearing =\n (2 * offset * skewingSide) /\n // we max out fractions to safeguard from asymptotic behavior\n Math.max(b, 1) +\n // add starting state\n shearingStart;\n\n const skewing = radiansToDegrees(Math.atan(shearing));\n\n target.set(skewKey, skewing);\n const changed = skewingBefore !== target[skewKey];\n\n if (changed && axis === 'y') {\n // we don't want skewing to affect scaleX\n // so we factor it by the inverse skewing diff to make it seem unchanged to the viewer\n const { skewX, scaleX } = target,\n dimBefore = target._getTransformedDimensions({ skewY: skewingBefore }),\n dimAfter = target._getTransformedDimensions(),\n compensationFactor = skewX !== 0 ? dimBefore.x / dimAfter.x : 1;\n compensationFactor !== 1 &&\n target.set(SCALE_X, compensationFactor * scaleX);\n }\n\n return changed;\n}\n\n/**\n * Wrapped Action handler for skewing on a given axis, takes care of the\n * skew direction and determines the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nfunction skewHandler(\n axis: TAxis,\n eventData: TPointerEvent,\n transform: Transform,\n x: number,\n y: number,\n) {\n const { target } = transform,\n {\n counterAxis,\n origin: originKey,\n lockSkewing: lockSkewingKey,\n skew: skewKey,\n flip: flipKey,\n } = AXIS_KEYS[axis];\n if (isLocked(target, lockSkewingKey)) {\n return false;\n }\n\n const { origin: counterOriginKey, flip: counterFlipKey } =\n AXIS_KEYS[counterAxis],\n counterOriginFactor =\n resolveOrigin(transform[counterOriginKey]) *\n (target[counterFlipKey] ? -1 : 1),\n // if the counter origin is top/left (= -0.5) then we are skewing x/y values on the bottom/right side of target respectively.\n // if the counter origin is bottom/right (= 0.5) then we are skewing x/y values on the top/left side of target respectively.\n // skewing direction on the top/left side of target is OPPOSITE to the direction of the movement of the pointer,\n // so we factor skewing direction by this value.\n skewingSide = (-Math.sign(counterOriginFactor) *\n (target[flipKey] ? -1 : 1)) as 1 | -1,\n skewingDirection =\n ((target[skewKey] === 0 &&\n // in case skewing equals 0 we use the pointer offset from target center to determine the direction of skewing\n getLocalPoint(transform, CENTER, CENTER, x, y)[axis] > 0) ||\n // in case target has skewing we use that as the direction\n target[skewKey] > 0\n ? 1\n : -1) * skewingSide,\n // anchor to the opposite side of the skewing direction\n // normalize value from [-1, 1] to origin value [0, 1]\n origin = -skewingDirection * 0.5 + 0.5;\n\n const finalHandler = wrapWithFireEvent(\n SKEWING,\n wrapWithFixedAnchor((eventData, transform, x, y) =>\n skewObject(axis, transform, new Point(x, y)),\n ),\n );\n\n return finalHandler(\n eventData,\n {\n ...transform,\n [originKey]: origin,\n skewingSide,\n },\n x,\n y,\n );\n}\n\n/**\n * Wrapped Action handler for skewing on the X axis, takes care of the\n * skew direction and determines the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const skewHandlerX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return skewHandler('x', eventData, transform, x, y);\n};\n\n/**\n * Wrapped Action handler for skewing on the Y axis, takes care of the\n * skew direction and determines the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const skewHandlerY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return skewHandler('y', eventData, transform, x, y);\n};\n","import type {\n ControlCallback,\n ControlCursorCallback,\n TPointerEvent,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { SCALE_X, SCALE_Y, SKEW_X, SKEW_Y } from '../constants';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TAxisKey } from '../typedefs';\nimport { scaleCursorStyleHandler, scalingX, scalingY } from './scale';\nimport { skewCursorStyleHandler, skewHandlerX, skewHandlerY } from './skew';\n\nfunction isAltAction(eventData: TPointerEvent, target: FabricObject) {\n return eventData[target.canvas!.altActionKey!];\n}\n\n/**\n * Inspect event, control and fabricObject to return the correct action name\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} an action name\n */\nexport const scaleOrSkewActionName: ControlCallback<\n TAxisKey<'skew' | 'scale'> | ''\n> = (eventData, control, fabricObject) => {\n const isAlternative = isAltAction(eventData, fabricObject);\n if (control.x === 0) {\n // then is scaleY or skewX\n return isAlternative ? SKEW_X : SCALE_Y;\n }\n if (control.y === 0) {\n // then is scaleY or skewX\n return isAlternative ? SKEW_Y : SCALE_X;\n }\n return '';\n};\n\n/**\n * Combine skew and scale style handlers to cover fabric standard use case\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const scaleSkewCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n return isAltAction(eventData, fabricObject)\n ? skewCursorStyleHandler(eventData, control, fabricObject)\n : scaleCursorStyleHandler(eventData, control, fabricObject);\n};\n/**\n * Composed action handler to either scale X or skew Y\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scalingXOrSkewingY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return isAltAction(eventData, transform.target)\n ? skewHandlerY(eventData, transform, x, y)\n : scalingX(eventData, transform, x, y);\n};\n\n/**\n * Composed action handler to either scale Y or skew X\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scalingYOrSkewingX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return isAltAction(eventData, transform.target)\n ? skewHandlerX(eventData, transform, x, y)\n : scalingY(eventData, transform, x, y);\n};\n","import { RESIZING, ROTATE } from '../constants';\nimport { changeWidth } from './changeWidth';\nimport { Control } from './Control';\nimport { rotationStyleHandler, rotationWithSnapping } from './rotate';\nimport { scaleCursorStyleHandler, scalingEqually } from './scale';\nimport {\n scaleOrSkewActionName,\n scaleSkewCursorStyleHandler,\n scalingXOrSkewingY,\n scalingYOrSkewingX,\n} from './scaleSkew';\n\n// use this function if you want to generate new controls for every instance\nexport const createObjectDefaultControls = () => ({\n ml: new Control({\n x: -0.5,\n y: 0,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingXOrSkewingY,\n getActionName: scaleOrSkewActionName,\n }),\n\n mr: new Control({\n x: 0.5,\n y: 0,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingXOrSkewingY,\n getActionName: scaleOrSkewActionName,\n }),\n\n mb: new Control({\n x: 0,\n y: 0.5,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingYOrSkewingX,\n getActionName: scaleOrSkewActionName,\n }),\n\n mt: new Control({\n x: 0,\n y: -0.5,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingYOrSkewingX,\n getActionName: scaleOrSkewActionName,\n }),\n\n tl: new Control({\n x: -0.5,\n y: -0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n tr: new Control({\n x: 0.5,\n y: -0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n bl: new Control({\n x: -0.5,\n y: 0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n br: new Control({\n x: 0.5,\n y: 0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n mtr: new Control({\n x: 0,\n y: -0.5,\n actionHandler: rotationWithSnapping,\n cursorStyleHandler: rotationStyleHandler,\n offsetY: -40,\n withConnection: true,\n actionName: ROTATE,\n }),\n});\n\nexport const createResizeControls = () => ({\n mr: new Control({\n x: 0.5,\n y: 0,\n actionHandler: changeWidth,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionName: RESIZING,\n }),\n ml: new Control({\n x: -0.5,\n y: 0,\n actionHandler: changeWidth,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionName: RESIZING,\n }),\n});\n\nexport const createTextboxDefaultControls = () => ({\n ...createObjectDefaultControls(),\n ...createResizeControls(),\n});\n","import { Point, ZERO } from '../../Point';\nimport type { TCornerPoint, TDegree } from '../../typedefs';\nimport { FabricObject } from './Object';\nimport { degreesToRadians } from '../../util/misc/radiansDegreesConversion';\nimport type { TQrDecomposeOut } from '../../util/misc/matrix';\nimport {\n calcDimensionsMatrix,\n createRotateMatrix,\n createTranslateMatrix,\n multiplyTransformMatrices,\n qrDecompose,\n} from '../../util/misc/matrix';\nimport type { Control } from '../../controls/Control';\nimport { sizeAfterTransform } from '../../util/misc/objectTransforms';\nimport type { ObjectEvents, TPointerEvent } from '../../EventTypeDefs';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { ControlRenderingStyleOverride } from '../../controls/controlRendering';\nimport type { FabricObjectProps } from './types/FabricObjectProps';\nimport type { TFabricObjectProps, SerializedObjectProps } from './types';\nimport { createObjectDefaultControls } from '../../controls/commonControls';\nimport { interactiveObjectDefaultValues } from './defaultValues';\nimport { SCALE } from '../../constants';\n\nexport type TOCoord = Point & {\n corner: TCornerPoint;\n touchCorner: TCornerPoint;\n};\n\nexport type TControlSet = Record;\n\nexport type TBorderRenderingStyleOverride = Partial<\n Pick\n>;\n\nexport type TStyleOverride = ControlRenderingStyleOverride &\n TBorderRenderingStyleOverride &\n Partial<\n Pick & {\n forActiveSelection: boolean;\n }\n >;\n\nexport class InteractiveFabricObject<\n Props extends TFabricObjectProps = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements FabricObjectProps\n{\n declare noScaleCache: boolean;\n\n declare snapAngle?: TDegree;\n declare snapThreshold?: TDegree;\n\n declare lockMovementX: boolean;\n declare lockMovementY: boolean;\n declare lockRotation: boolean;\n declare lockScalingX: boolean;\n declare lockScalingY: boolean;\n declare lockSkewingX: boolean;\n declare lockSkewingY: boolean;\n declare lockScalingFlip: boolean;\n\n declare cornerSize: number;\n declare touchCornerSize: number;\n declare transparentCorners: boolean;\n declare cornerColor: string;\n declare cornerStrokeColor: string;\n declare cornerStyle: 'rect' | 'circle';\n declare cornerDashArray: number[] | null;\n declare hasControls: boolean;\n\n declare borderColor: string;\n declare borderDashArray: number[] | null;\n declare borderOpacityWhenMoving: number;\n declare borderScaleFactor: number;\n declare hasBorders: boolean;\n declare selectionBackgroundColor: string;\n\n declare selectable: boolean;\n declare evented: boolean;\n declare perPixelTargetFind: boolean;\n declare activeOn: 'down' | 'up';\n\n declare hoverCursor: CSSStyleDeclaration['cursor'] | null;\n declare moveCursor: CSSStyleDeclaration['cursor'] | null;\n\n /**\n * The object's controls' position in viewport coordinates\n * Calculated by {@link Control#positionHandler} and {@link Control#calcCornerCoords}, depending on {@link padding}.\n * `corner/touchCorner` describe the 4 points forming the interactive area of the corner.\n * Used to draw and locate controls.\n */\n declare oCoords: Record;\n\n /**\n * keeps the value of the last hovered corner during mouse move.\n * 0 is no corner, or 'mt', 'ml', 'mtr' etc..\n * It should be private, but there is no harm in using it as\n * a read-only property.\n * this isn't cleaned automatically. Non selected objects may have wrong values\n * @type [string]\n */\n declare __corner?: string;\n\n /**\n * a map of control visibility for this object.\n * this was left when controls were introduced to not break the api too much\n * this takes priority over the generic control visibility\n */\n declare _controlsVisibility: Record;\n\n /**\n * holds the controls for the object.\n * controls are added by default_controls.js\n */\n declare controls: TControlSet;\n\n /**\n * internal boolean to signal the code that the object is\n * part of the move action.\n */\n declare isMoving?: boolean;\n\n /**\n * A boolean used from the gesture module to keep tracking of a scaling\n * action when there is no scaling transform in place.\n * This is an edge case and is used twice in all codebase.\n * Probably added to keep track of some performance issues\n * @TODO use git blame to investigate why it was added\n * DON'T USE IT. WE WILL TRY TO REMOVE IT\n */\n declare _scaling?: boolean;\n\n declare canvas?: Canvas;\n\n static ownDefaults = interactiveObjectDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...InteractiveFabricObject.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(\n this,\n (this.constructor as typeof InteractiveFabricObject).createControls(),\n InteractiveFabricObject.ownDefaults,\n );\n this.setOptions(options);\n }\n\n /**\n * Creates the default control object.\n * If you prefer to have on instance of controls shared among all objects\n * make this function return an empty object and add controls to the ownDefaults\n * @param {Object} [options] Options object\n */\n static createControls(): { controls: Record } {\n return { controls: createObjectDefaultControls() };\n }\n\n /**\n * Update width and height of the canvas for cache\n * returns true or false if canvas needed resize.\n * @private\n * @return {Boolean} true if the canvas has been resized\n */\n _updateCacheCanvas() {\n const targetCanvas = this.canvas;\n if (this.noScaleCache && targetCanvas && targetCanvas._currentTransform) {\n const transform = targetCanvas._currentTransform,\n target = transform.target,\n action = transform.action;\n if (\n this === (target as unknown as this) &&\n action &&\n action.startsWith(SCALE)\n ) {\n return false;\n }\n }\n return super._updateCacheCanvas();\n }\n\n getActiveControl() {\n const key = this.__corner;\n return key\n ? {\n key,\n control: this.controls[key],\n coord: this.oCoords[key],\n }\n : undefined;\n }\n\n /**\n * Determines which corner is under the mouse cursor, represented by `pointer`.\n * This function is return a corner only if the object is the active one.\n * This is done to avoid selecting corner of non active object and activating transformations\n * rather than drag action. The default behavior of fabricJS is that if you want to transform\n * an object, first you select it to show the control set\n * @private\n * @param {Object} pointer The pointer indicating the mouse position\n * @param {boolean} forTouch indicates if we are looking for interaction area with a touch action\n * @return {String|Boolean} corner code (tl, tr, bl, br, etc.), or 0 if nothing is found.\n */\n findControl(\n pointer: Point,\n forTouch = false,\n ): { key: string; control: Control; coord: TOCoord } | undefined {\n if (!this.hasControls || !this.canvas) {\n return undefined;\n }\n\n this.__corner = undefined;\n const cornerEntries = Object.entries(this.oCoords);\n for (let i = cornerEntries.length - 1; i >= 0; i--) {\n const [key, corner] = cornerEntries[i];\n const control = this.controls[key];\n\n if (\n control.shouldActivate(\n key,\n this,\n pointer,\n forTouch ? corner.touchCorner : corner.corner,\n )\n ) {\n // this.canvas.contextTop.fillRect(pointer.x - 1, pointer.y - 1, 2, 2);\n this.__corner = key;\n\n return { key, control, coord: this.oCoords[key] };\n }\n }\n\n return undefined;\n }\n\n /**\n * Calculates the coordinates of the center of each control plus the corners of the control itself\n * This basically just delegates to each control positionHandler\n * WARNING: changing what is passed to positionHandler is a breaking change, since position handler\n * is a public api and should be done just if extremely necessary\n * @return {Record}\n */\n calcOCoords(): Record {\n const vpt = this.getViewportTransform(),\n center = this.getCenterPoint(),\n tMatrix = createTranslateMatrix(center.x, center.y),\n rMatrix = createRotateMatrix({\n angle: this.getTotalAngle() - (!!this.group && this.flipX ? 180 : 0),\n }),\n positionMatrix = multiplyTransformMatrices(tMatrix, rMatrix),\n startMatrix = multiplyTransformMatrices(vpt, positionMatrix),\n finalMatrix = multiplyTransformMatrices(startMatrix, [\n 1 / vpt[0],\n 0,\n 0,\n 1 / vpt[3],\n 0,\n 0,\n ]),\n transformOptions = this.group\n ? qrDecompose(this.calcTransformMatrix())\n : undefined;\n // decomposing could bring negative scaling and `_calculateCurrentDimensions` can't take it\n if (transformOptions) {\n transformOptions.scaleX = Math.abs(transformOptions.scaleX);\n transformOptions.scaleY = Math.abs(transformOptions.scaleY);\n }\n const dim = this._calculateCurrentDimensions(transformOptions),\n coords: Record = {};\n\n this.forEachControl((control, key) => {\n const position = control.positionHandler(dim, finalMatrix, this, control);\n // coords[key] are sometimes used as points. Those are points to which we add\n // the property corner and touchCorner from `_calcCornerCoords`.\n // don't remove this assign for an object spread.\n coords[key] = Object.assign(\n position,\n this._calcCornerCoords(control, position),\n );\n });\n\n // debug code\n /*\n const canvas = this.canvas;\n setTimeout(function () {\n if (!canvas) return;\n canvas.contextTop.clearRect(0, 0, 700, 700);\n canvas.contextTop.fillStyle = 'green';\n Object.keys(coords).forEach(function(key) {\n const control = coords[key];\n canvas.contextTop.fillRect(control.x, control.y, 3, 3);\n });\n } 50);\n */\n return coords;\n }\n\n /**\n * Sets the coordinates that determine the interaction area of each control\n * note: if we would switch to ROUND corner area, all of this would disappear.\n * everything would resolve to a single point and a pythagorean theorem for the distance\n * @todo evaluate simplification of code switching to circle interaction area at runtime\n * @private\n */\n private _calcCornerCoords(control: Control, position: Point) {\n const angle = this.getTotalAngle();\n const corner = control.calcCornerCoords(\n angle,\n this.cornerSize,\n position.x,\n position.y,\n false,\n this,\n );\n const touchCorner = control.calcCornerCoords(\n angle,\n this.touchCornerSize,\n position.x,\n position.y,\n true,\n this,\n );\n return { corner, touchCorner };\n }\n\n /**\n * @override set controls' coordinates as well\n * See {@link https://github.com/fabricjs/fabric.js/wiki/When-to-call-setCoords} and {@link http://fabricjs.com/fabric-gotchas}\n * @return {void}\n */\n setCoords(): void {\n super.setCoords();\n this.canvas && (this.oCoords = this.calcOCoords());\n }\n\n /**\n * Calls a function for each control. The function gets called,\n * with the control, the control's key and the object that is calling the iterator\n * @param {Function} fn function to iterate over the controls over\n */\n forEachControl(\n fn: (\n control: Control,\n key: string,\n fabricObject: InteractiveFabricObject,\n ) => any,\n ) {\n for (const i in this.controls) {\n fn(this.controls[i], i, this);\n }\n }\n\n /**\n * Draws a colored layer behind the object, inside its selection borders.\n * Requires public options: padding, selectionBackgroundColor\n * this function is called when the context is transformed\n * has checks to be skipped when the object is on a staticCanvas\n * @todo evaluate if make this disappear in favor of a pre-render hook for objects\n * this was added by Andrea Bogazzi to make possible some feature for work reasons\n * it seemed a good option, now is an edge case\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n */\n drawSelectionBackground(ctx: CanvasRenderingContext2D): void {\n if (\n !this.selectionBackgroundColor ||\n (this.canvas && (this.canvas._activeObject as unknown as this) !== this)\n ) {\n return;\n }\n ctx.save();\n const center = this.getRelativeCenterPoint(),\n wh = this._calculateCurrentDimensions(),\n vpt = this.getViewportTransform();\n ctx.translate(center.x, center.y);\n ctx.scale(1 / vpt[0], 1 / vpt[3]);\n ctx.rotate(degreesToRadians(this.angle));\n ctx.fillStyle = this.selectionBackgroundColor;\n ctx.fillRect(-wh.x / 2, -wh.y / 2, wh.x, wh.y);\n ctx.restore();\n }\n\n /**\n * @public override this function in order to customize the drawing of the control box, e.g. rounded corners, different border style.\n * @param {CanvasRenderingContext2D} ctx ctx is rotated and translated so that (0,0) is at object's center\n * @param {Point} size the control box size used\n */\n strokeBorders(ctx: CanvasRenderingContext2D, size: Point): void {\n ctx.strokeRect(-size.x / 2, -size.y / 2, size.x, size.y);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Point} size\n * @param {TStyleOverride} styleOverride object to override the object style\n */\n _drawBorders(\n ctx: CanvasRenderingContext2D,\n size: Point,\n styleOverride: TStyleOverride = {},\n ): void {\n const options = {\n hasControls: this.hasControls,\n borderColor: this.borderColor,\n borderDashArray: this.borderDashArray,\n ...styleOverride,\n };\n ctx.save();\n ctx.strokeStyle = options.borderColor;\n this._setLineDash(ctx, options.borderDashArray);\n this.strokeBorders(ctx, size);\n options.hasControls && this.drawControlsConnectingLines(ctx, size);\n ctx.restore();\n }\n\n /**\n * Renders controls and borders for the object\n * the context here is not transformed\n * @todo move to interactivity\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {TStyleOverride} [styleOverride] properties to override the object style\n */\n _renderControls(\n ctx: CanvasRenderingContext2D,\n styleOverride: TStyleOverride = {},\n ) {\n const { hasBorders, hasControls } = this;\n const styleOptions = {\n hasBorders,\n hasControls,\n ...styleOverride,\n };\n const vpt = this.getViewportTransform(),\n shouldDrawBorders = styleOptions.hasBorders,\n shouldDrawControls = styleOptions.hasControls;\n const matrix = multiplyTransformMatrices(vpt, this.calcTransformMatrix());\n const options = qrDecompose(matrix);\n ctx.save();\n ctx.translate(options.translateX, options.translateY);\n ctx.lineWidth = 1 * this.borderScaleFactor;\n // since interactive groups have been introduced, an object could be inside a group and needing controls\n // the following equality check `this.group === this.parent` covers:\n // object without a group ( undefined === undefined )\n // object inside a group\n // excludes object inside a group but multi selected since group and parent will differ in value\n if (this.group === this.parent) {\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n }\n if (this.flipX) {\n options.angle -= 180;\n }\n ctx.rotate(degreesToRadians(this.group ? options.angle : this.angle));\n shouldDrawBorders && this.drawBorders(ctx, options, styleOverride);\n shouldDrawControls && this.drawControls(ctx, styleOverride);\n ctx.restore();\n }\n\n /**\n * Draws borders of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {object} options object representing current object parameters\n * @param {TStyleOverride} [styleOverride] object to override the object style\n */\n drawBorders(\n ctx: CanvasRenderingContext2D,\n options: TQrDecomposeOut,\n styleOverride: TStyleOverride,\n ): void {\n let size;\n if ((styleOverride && styleOverride.forActiveSelection) || this.group) {\n const bbox = sizeAfterTransform(\n this.width,\n this.height,\n calcDimensionsMatrix(options),\n ),\n stroke = !this.isStrokeAccountedForInDimensions()\n ? (this.strokeUniform\n ? new Point().scalarAdd(this.canvas ? this.canvas.getZoom() : 1)\n : // this is extremely confusing. options comes from the upper function\n // and is the qrDecompose of a matrix that takes in account zoom too\n new Point(options.scaleX, options.scaleY)\n ).scalarMultiply(this.strokeWidth)\n : ZERO;\n size = bbox\n .add(stroke)\n .scalarAdd(this.borderScaleFactor)\n .scalarAdd(this.padding * 2);\n } else {\n size = this._calculateCurrentDimensions().scalarAdd(\n this.borderScaleFactor,\n );\n }\n this._drawBorders(ctx, size, styleOverride);\n }\n\n /**\n * Draws lines from a borders of an object's bounding box to controls that have `withConnection` property set.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Point} size object size x = width, y = height\n */\n drawControlsConnectingLines(\n ctx: CanvasRenderingContext2D,\n size: Point,\n ): void {\n let shouldStroke = false;\n\n ctx.beginPath();\n this.forEachControl((control, key) => {\n // in this moment, the ctx is centered on the object.\n // width and height of the above function are the size of the bbox.\n if (control.withConnection && control.getVisibility(this, key)) {\n // reset movement for each control\n shouldStroke = true;\n ctx.moveTo(control.x * size.x, control.y * size.y);\n ctx.lineTo(\n control.x * size.x + control.offsetX,\n control.y * size.y + control.offsetY,\n );\n }\n });\n shouldStroke && ctx.stroke();\n }\n\n /**\n * Draws corners of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: cornerSize, padding\n * Be aware that since fabric 6.0 this function does not call setCoords anymore.\n * setCoords needs to be called manually if the object of which we are rendering controls\n * is outside the standard selection and transform process.\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {ControlRenderingStyleOverride} styleOverride object to override the object style\n */\n drawControls(\n ctx: CanvasRenderingContext2D,\n styleOverride: ControlRenderingStyleOverride = {},\n ) {\n ctx.save();\n const retinaScaling = this.getCanvasRetinaScaling();\n const { cornerStrokeColor, cornerDashArray, cornerColor } = this;\n const options = {\n cornerStrokeColor,\n cornerDashArray,\n cornerColor,\n ...styleOverride,\n };\n ctx.setTransform(retinaScaling, 0, 0, retinaScaling, 0, 0);\n ctx.strokeStyle = ctx.fillStyle = options.cornerColor;\n if (!this.transparentCorners) {\n ctx.strokeStyle = options.cornerStrokeColor;\n }\n this._setLineDash(ctx, options.cornerDashArray);\n this.forEachControl((control, key) => {\n if (control.getVisibility(this, key)) {\n const p = this.oCoords[key];\n control.render(ctx, p.x, p.y, options, this);\n }\n });\n ctx.restore();\n }\n\n /**\n * Returns true if the specified control is visible, false otherwise.\n * @param {string} controlKey The key of the control. Possible values are usually 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr',\n * but since the control api allow for any control name, can be any string.\n * @returns {boolean} true if the specified control is visible, false otherwise\n */\n isControlVisible(controlKey: string): boolean {\n return (\n this.controls[controlKey] &&\n this.controls[controlKey].getVisibility(this, controlKey)\n );\n }\n\n /**\n * Sets the visibility of the specified control.\n * please do not use.\n * @param {String} controlKey The key of the control. Possible values are 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr'.\n * but since the control api allow for any control name, can be any string.\n * @param {Boolean} visible true to set the specified control visible, false otherwise\n * @todo discuss this overlap of priority here with the team. Andrea Bogazzi for details\n */\n setControlVisible(controlKey: string, visible: boolean) {\n if (!this._controlsVisibility) {\n this._controlsVisibility = {};\n }\n this._controlsVisibility[controlKey] = visible;\n }\n\n /**\n * Sets the visibility state of object controls, this is just a bulk option for setControlVisible;\n * @param {Record} [options] with an optional key per control\n * example: {Boolean} [options.bl] true to enable the bottom-left control, false to disable it\n */\n setControlsVisibility(options: Record = {}) {\n Object.entries(options).forEach(([controlKey, visibility]) =>\n this.setControlVisible(controlKey, visibility),\n );\n }\n\n /**\n * Clears the canvas.contextTop in a specific area that corresponds to the object's bounding box\n * that is in the canvas.contextContainer.\n * This function is used to clear pieces of contextTop where we render ephemeral effects on top of the object.\n * Example: blinking cursor text selection, drag effects.\n * @todo discuss swapping restoreManually with a renderCallback, but think of async issues\n * @param {Boolean} [restoreManually] When true won't restore the context after clear, in order to draw something else.\n * @return {CanvasRenderingContext2D|undefined} canvas.contextTop that is either still transformed\n * with the object transformMatrix, or restored to neutral transform\n */\n clearContextTop(\n restoreManually?: boolean,\n ): CanvasRenderingContext2D | undefined {\n if (!this.canvas) {\n return;\n }\n const ctx = this.canvas.contextTop;\n if (!ctx) {\n return;\n }\n const v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n this.transform(ctx);\n // we add 4 pixel, to be sure to do not leave any pixel out\n const width = this.width + 4,\n height = this.height + 4;\n ctx.clearRect(-width / 2, -height / 2, width, height);\n\n restoreManually || ctx.restore();\n return ctx;\n }\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to deselect this object. If the function returns true, the process is cancelled\n * @param {Object} [_options] options sent from the upper functions\n * @param {TPointerEvent} [options.e] event if the process is generated by an event\n * @param {FabricObject} [options.object] next object we are setting as active, and reason why\n * this is being deselected\n */\n onDeselect(_options?: {\n e?: TPointerEvent;\n object?: InteractiveFabricObject;\n }): boolean {\n // implemented by sub-classes, as needed.\n return false;\n }\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to select this object. If the function returns true, the process is cancelled\n * @param {Object} [_options] options sent from the upper functions\n * @param {Event} [_options.e] event if the process is generated by an event\n */\n onSelect(_options?: { e?: TPointerEvent }): boolean {\n // implemented by sub-classes, as needed.\n return false;\n }\n\n /**\n * Override to customize Drag behavior\n * Fired from {@link Canvas#_onMouseMove}\n * @returns true in order for the window to start a drag session\n */\n shouldStartDragging(_e: TPointerEvent) {\n return false;\n }\n\n /**\n * Override to customize Drag behavior\\\n * Fired once a drag session has started\n * @returns true to handle the drag event\n */\n onDragStart(_e: DragEvent) {\n return false;\n }\n\n /**\n * Override to customize drag and drop behavior\n * @public\n * @param {DragEvent} _e\n * @returns {boolean} true if the object currently dragged can be dropped on the target\n */\n canDrop(_e: DragEvent): boolean {\n return false;\n }\n\n /**\n * Override to customize drag and drop behavior\n * render a specific effect when an object is the source of a drag event\n * example: render the selection status for the part of text that is being dragged from a text object\n * @public\n * @param {DragEvent} _e\n */\n renderDragSourceEffect(_e: DragEvent) {\n // for subclasses\n }\n\n /**\n * Override to customize drag and drop behavior\n * render a specific effect when an object is the target of a drag event\n * used to show that the underly object can receive a drop, or to show how the\n * object will change when dropping. example: show the cursor where the text is about to be dropped\n * @public\n * @param {DragEvent} _e\n */\n renderDropTargetEffect(_e: DragEvent) {\n // for subclasses\n }\n}\n","import type { Constructor } from '../typedefs';\n\n/***\n * https://www.typescriptlang.org/docs/handbook/mixins.html#alternative-pattern\n */\nexport function applyMixins(\n derivedCtor: T,\n constructors: S[],\n) {\n constructors.forEach((baseCtor) => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\n name !== 'constructor' &&\n Object.defineProperty(\n derivedCtor.prototype,\n name,\n Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||\n Object.create(null),\n );\n });\n });\n return derivedCtor as T & { prototype: InstanceType };\n}\n","import type { ObjectEvents } from '../../EventTypeDefs';\nimport { FabricObjectSVGExportMixin } from './FabricObjectSVGExportMixin';\nimport { InteractiveFabricObject } from './InteractiveObject';\nimport { applyMixins } from '../../util/applyMixins';\nimport type { FabricObjectProps } from './types/FabricObjectProps';\nimport type { TFabricObjectProps, SerializedObjectProps } from './types';\nimport { classRegistry } from '../../ClassRegistry';\n\n// TODO somehow we have to make a tree-shakeable import\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface FabricObject<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Props extends TFabricObjectProps = Partial,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n SProps extends SerializedObjectProps = SerializedObjectProps,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObjectSVGExportMixin {}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class FabricObject<\n Props extends TFabricObjectProps = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends InteractiveFabricObject {}\n\napplyMixins(FabricObject, [FabricObjectSVGExportMixin]);\n\nclassRegistry.setClass(FabricObject);\nclassRegistry.setClass(FabricObject, 'object');\n\nexport { cacheProperties } from './defaultValues';\n","/**\n * Returns true if context has transparent pixel\n * at specified location (taking tolerance into account)\n * @param {CanvasRenderingContext2D} ctx context\n * @param {Number} x x coordinate in canvasElementCoordinate, not fabric space. integer\n * @param {Number} y y coordinate in canvasElementCoordinate, not fabric space. integer\n * @param {Number} tolerance Tolerance pixels around the point, not alpha tolerance, integer\n * @return {boolean} true if transparent\n */\nexport const isTransparent = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n tolerance: number,\n): boolean => {\n tolerance = Math.round(tolerance);\n const size = tolerance * 2 + 1;\n const { data } = ctx.getImageData(x - tolerance, y - tolerance, size, size);\n\n // Split image data - for tolerance > 1, pixelDataSize = 4;\n for (let i = 3; i < data.length; i += 4) {\n const alphaChannel = data[i];\n if (alphaChannel > 0) {\n return false;\n }\n }\n return true;\n};\n","import type { Point } from '../../Point';\nimport type { TRadian } from '../../typedefs';\n/**\n * Rotates `point` around `origin` with `radians`\n * @deprecated use the Point.rotate\n * @param {Point} origin The origin of the rotation\n * @param {Point} origin The origin of the rotation\n * @param {TRadian} radians The radians of the angle for the rotation\n * @return {Point} The new rotated point\n */\nexport const rotatePoint = (\n point: Point,\n origin: Point,\n radians: TRadian,\n): Point => point.rotate(radians, origin);\n","export const findIndexRight = (\n array: T[],\n predicate: (value: T, index: number, array: T[]) => boolean,\n) => {\n for (let index = array.length - 1; index >= 0; index--) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\n","import type { XY } from '../../../Point';\nimport { Point } from '../../../Point';\nimport { degreesToRadians } from '../radiansDegreesConversion';\nimport { createVector } from '../vectors';\nimport type { TProjectStrokeOnPointsOptions, TProjection } from './types';\n\n/**\n * @see https://github.com/fabricjs/fabric.js/pull/8344\n * @todo consider removing skewing from points before calculating stroke projection,\n * see https://github.com/fabricjs/fabric.js/commit/494a10ee2f8c2278ae9a55b20bf50cf6ee25b064#commitcomment-94751537\n */\nexport abstract class StrokeProjectionsBase {\n declare options: TProjectStrokeOnPointsOptions;\n declare scale: Point;\n declare strokeUniformScalar: Point;\n declare strokeProjectionMagnitude: number;\n\n constructor(options: TProjectStrokeOnPointsOptions) {\n this.options = options;\n this.strokeProjectionMagnitude = this.options.strokeWidth / 2;\n this.scale = new Point(this.options.scaleX, this.options.scaleY);\n this.strokeUniformScalar = this.options.strokeUniform\n ? new Point(1 / this.options.scaleX, 1 / this.options.scaleY)\n : new Point(1, 1);\n }\n\n /**\n * When the stroke is uniform, scaling affects the arrangement of points. So we must take it into account.\n */\n protected createSideVector(from: XY, to: XY) {\n const v = createVector(from, to);\n return this.options.strokeUniform ? v.multiply(this.scale) : v;\n }\n\n protected abstract calcOrthogonalProjection(\n from: Point,\n to: Point,\n magnitude?: number,\n ): Point;\n\n protected projectOrthogonally(from: Point, to: Point, magnitude?: number) {\n return this.applySkew(\n from.add(this.calcOrthogonalProjection(from, to, magnitude)),\n );\n }\n\n protected isSkewed() {\n return this.options.skewX !== 0 || this.options.skewY !== 0;\n }\n\n protected applySkew(point: Point) {\n const p = new Point(point);\n // skewY must be applied before skewX as this distortion affects skewX calculation\n p.y += p.x * Math.tan(degreesToRadians(this.options.skewY));\n p.x += p.y * Math.tan(degreesToRadians(this.options.skewX));\n return p;\n }\n\n protected scaleUnitVector(unitVector: Point, scalar: number) {\n return unitVector.multiply(this.strokeUniformScalar).scalarMultiply(scalar);\n }\n\n protected abstract projectPoints(): Point[];\n\n public abstract project(): TProjection[];\n}\n","import type { XY } from '../../../Point';\nimport { Point } from '../../../Point';\nimport { halfPI, twoMathPi } from '../../../constants';\nimport type { TRadian } from '../../../typedefs';\nimport { degreesToRadians } from '../radiansDegreesConversion';\nimport {\n calcAngleBetweenVectors,\n calcVectorRotation,\n crossProduct,\n getOrthonormalVector,\n getUnitVector,\n isBetweenVectors,\n magnitude,\n rotateVector,\n} from '../vectors';\nimport { StrokeProjectionsBase } from './StrokeProjectionsBase';\nimport type { TProjection, TProjectStrokeOnPointsOptions } from './types';\n\nconst zeroVector = new Point();\n\n/**\n * class in charge of finding projections for each type of line join\n * @see {@link [Closed path projections at #8344](https://github.com/fabricjs/fabric.js/pull/8344#2-closed-path)}\n *\n * - MDN:\n * - https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin\n * - https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin\n * - Spec: https://svgwg.org/svg2-draft/painting.html#StrokeLinejoinProperty\n * - Playground to understand how the line joins works: https://hypertolosana.github.io/efficient-webgl-stroking/index.html\n * - View the calculated projections for each of the control points: https://codesandbox.io/s/project-stroke-points-with-context-to-trace-b8jc4j?file=/src/index.js\n *\n */\nexport class StrokeLineJoinProjections extends StrokeProjectionsBase {\n /**\n * The point being projected (the angle ∠BAC)\n */\n declare A: Point;\n /**\n * The point before A\n */\n declare B: Point;\n /**\n * The point after A\n */\n declare C: Point;\n /**\n * The AB vector\n */\n AB: Point;\n /**\n * The AC vector\n */\n AC: Point;\n /**\n * The angle of A (∠BAC)\n */\n alpha: TRadian;\n /**\n * The bisector of A (∠BAC)\n */\n bisector: Point;\n\n static getOrthogonalRotationFactor(vector1: Point, vector2?: Point) {\n const angle = vector2\n ? calcAngleBetweenVectors(vector1, vector2)\n : calcVectorRotation(vector1);\n return Math.abs(angle) < halfPI ? -1 : 1;\n }\n\n constructor(A: XY, B: XY, C: XY, options: TProjectStrokeOnPointsOptions) {\n super(options);\n this.A = new Point(A);\n this.B = new Point(B);\n this.C = new Point(C);\n this.AB = this.createSideVector(this.A, this.B);\n this.AC = this.createSideVector(this.A, this.C);\n this.alpha = calcAngleBetweenVectors(this.AB, this.AC);\n this.bisector = getUnitVector(\n // if AC is also the zero vector nothing will be projected\n // in that case the next point will handle the projection\n rotateVector(this.AB.eq(zeroVector) ? this.AC : this.AB, this.alpha / 2),\n );\n }\n\n calcOrthogonalProjection(\n from: Point,\n to: Point,\n magnitude: number = this.strokeProjectionMagnitude,\n ) {\n const vector = this.createSideVector(from, to);\n const orthogonalProjection = getOrthonormalVector(vector);\n const correctSide = StrokeLineJoinProjections.getOrthogonalRotationFactor(\n orthogonalProjection,\n this.bisector,\n );\n return this.scaleUnitVector(orthogonalProjection, magnitude * correctSide);\n }\n\n /**\n * BEVEL\n * Calculation: the projection points are formed by the vector orthogonal to the vertex.\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-2-bevel\n */\n projectBevel() {\n const projections: Point[] = [];\n // if `alpha` equals 0 or 2*PI, the projections are the same for `B` and `C`\n (this.alpha % twoMathPi === 0 ? [this.B] : [this.B, this.C]).forEach(\n (to) => {\n projections.push(this.projectOrthogonally(this.A, to));\n projections.push(\n this.projectOrthogonally(this.A, to, -this.strokeProjectionMagnitude),\n );\n },\n );\n return projections;\n }\n\n /**\n * MITER\n * Calculation: the corner is formed by extending the outer edges of the stroke\n * at the tangents of the path segments until they intersect.\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-1-miter\n */\n projectMiter() {\n const projections: Point[] = [],\n alpha = Math.abs(this.alpha),\n hypotUnitScalar = 1 / Math.sin(alpha / 2),\n miterVector = this.scaleUnitVector(\n this.bisector,\n -this.strokeProjectionMagnitude * hypotUnitScalar,\n );\n\n // When two line segments meet at a sharp angle, it is possible for the join to extend,\n // far beyond the thickness of the line stroking the path. The stroke-miterlimit imposes\n // a limit on the extent of the line join.\n // MDN: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit\n // When the stroke is uniform, scaling changes the arrangement of points, this changes the miter-limit\n const strokeMiterLimit = this.options.strokeUniform\n ? magnitude(\n this.scaleUnitVector(this.bisector, this.options.strokeMiterLimit),\n )\n : this.options.strokeMiterLimit;\n\n if (\n magnitude(miterVector) / this.strokeProjectionMagnitude <=\n strokeMiterLimit\n ) {\n projections.push(this.applySkew(this.A.add(miterVector)));\n }\n /* when the miter-limit is reached, the stroke line join becomes of type bevel.\n We always need two orthogonal projections which are basically bevel-type projections,\n so regardless of whether the miter-limit was reached or not, we include these projections.\n */\n projections.push(...this.projectBevel());\n\n return projections;\n }\n\n /**\n * ROUND (without skew)\n * Calculation: the projections are the two vectors parallel to X and Y axes\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-3-1-round-without-skew\n */\n private projectRoundNoSkew(startCircle: Point, endCircle: Point) {\n const projections: Point[] = [],\n // correctSide is used to only consider projecting for the outer side\n correctSide = new Point(\n StrokeLineJoinProjections.getOrthogonalRotationFactor(this.bisector),\n StrokeLineJoinProjections.getOrthogonalRotationFactor(\n new Point(this.bisector.y, this.bisector.x),\n ),\n ),\n radiusOnAxisX = new Point(1, 0)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar)\n .multiply(correctSide),\n radiusOnAxisY = new Point(0, 1)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar)\n .multiply(correctSide);\n\n [radiusOnAxisX, radiusOnAxisY].forEach((vector) => {\n if (isBetweenVectors(vector, startCircle, endCircle)) {\n projections.push(this.A.add(vector));\n }\n });\n return projections;\n }\n\n /**\n * ROUND (with skew)\n * Calculation: the projections are the points furthest from the vertex in\n * the direction of the X and Y axes after distortion.\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-3-2-round-skew\n */\n private projectRoundWithSkew(startCircle: Point, endCircle: Point) {\n const projections: Point[] = [];\n\n const { skewX, skewY, scaleX, scaleY, strokeUniform } = this.options,\n shearing = new Point(\n Math.tan(degreesToRadians(skewX)),\n Math.tan(degreesToRadians(skewY)),\n );\n // The points furthest from the vertex in the direction of the X and Y axes after distortion\n const circleRadius = this.strokeProjectionMagnitude,\n newY = strokeUniform\n ? circleRadius /\n scaleY /\n Math.sqrt(1 / scaleY ** 2 + (1 / scaleX ** 2) * shearing.y ** 2)\n : circleRadius / Math.sqrt(1 + shearing.y ** 2),\n furthestY = new Point(\n // Safe guard due to floating point precision. In some situations the square root\n // was returning NaN because of a negative number close to zero.\n Math.sqrt(Math.max(circleRadius ** 2 - newY ** 2, 0)),\n newY,\n ),\n newX = strokeUniform\n ? circleRadius /\n Math.sqrt(\n 1 +\n (shearing.x ** 2 * (1 / scaleY) ** 2) /\n (1 / scaleX + (1 / scaleX) * shearing.x * shearing.y) ** 2,\n )\n : circleRadius /\n Math.sqrt(1 + shearing.x ** 2 / (1 + shearing.x * shearing.y) ** 2),\n furthestX = new Point(\n newX,\n Math.sqrt(Math.max(circleRadius ** 2 - newX ** 2, 0)),\n );\n\n [\n furthestX,\n furthestX.scalarMultiply(-1),\n furthestY,\n furthestY.scalarMultiply(-1),\n ]\n // We need to skew the vector here as this information is used to check if\n // it is between the start and end of the circle segment\n .map((vector) =>\n this.applySkew(\n strokeUniform ? vector.multiply(this.strokeUniformScalar) : vector,\n ),\n )\n .forEach((vector) => {\n if (isBetweenVectors(vector, startCircle, endCircle)) {\n projections.push(this.applySkew(this.A).add(vector));\n }\n });\n\n return projections;\n }\n\n projectRound() {\n const projections: Point[] = [];\n /* Include the start and end points of the circle segment, so that only\n the projections contained within it are included */\n // add the orthogonal projections (start and end points of circle segment)\n projections.push(...this.projectBevel());\n // let's determines which one of the orthogonal projection is the beginning and end of the circle segment.\n // when `alpha` equals 0 or 2*PI, we have a straight line, so the way to find the start/end is different.\n const isStraightLine = this.alpha % twoMathPi === 0,\n // change the origin of the projections to point A\n // so that the cross product calculation is correct\n newOrigin = this.applySkew(this.A),\n proj0 = projections[isStraightLine ? 0 : 2].subtract(newOrigin),\n proj1 = projections[isStraightLine ? 1 : 0].subtract(newOrigin),\n // when `isStraightLine` === true, we compare with the vector opposite AB, otherwise we compare with the bisector.\n comparisonVector = isStraightLine\n ? this.applySkew(this.AB.scalarMultiply(-1))\n : this.applySkew(\n this.bisector.multiply(this.strokeUniformScalar).scalarMultiply(-1),\n ),\n // the beginning of the circle segment is always to the right of the comparison vector (cross product > 0)\n isProj0Start = crossProduct(proj0, comparisonVector) > 0,\n startCircle = isProj0Start ? proj0 : proj1,\n endCircle = isProj0Start ? proj1 : proj0;\n if (!this.isSkewed()) {\n projections.push(...this.projectRoundNoSkew(startCircle, endCircle));\n } else {\n projections.push(...this.projectRoundWithSkew(startCircle, endCircle));\n }\n return projections;\n }\n\n /**\n * Project stroke width on points returning projections for each point as follows:\n * - `miter`: 1 point corresponding to the outer boundary. If the miter limit is exceeded, it will be 2 points (becomes bevel)\n * - `bevel`: 2 points corresponding to the bevel possible boundaries, orthogonal to the stroke.\n * - `round`: same as `bevel` when it has no skew, with skew are 4 points.\n */\n protected projectPoints() {\n switch (this.options.strokeLineJoin) {\n case 'miter':\n return this.projectMiter();\n case 'round':\n return this.projectRound();\n default:\n return this.projectBevel();\n }\n }\n\n public project(): TProjection[] {\n return this.projectPoints().map((point) => ({\n originPoint: this.A,\n projectedPoint: point,\n angle: this.alpha,\n bisector: this.bisector,\n }));\n }\n}\n","import type { XY } from '../../../Point';\nimport { Point } from '../../../Point';\nimport { getOrthonormalVector, getUnitVector } from '../vectors';\nimport { StrokeLineJoinProjections } from './StrokeLineJoinProjections';\nimport { StrokeProjectionsBase } from './StrokeProjectionsBase';\nimport type { TProjection, TProjectStrokeOnPointsOptions } from './types';\n\n/**\n * class in charge of finding projections for each type of line cap for start/end of an open path\n * @see {@link [Open path projections at #8344](https://github.com/fabricjs/fabric.js/pull/8344#1-open-path)}\n *\n * Reference:\n * - MDN:\n * - https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap\n * - https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap\n * - Spec: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-linecap-dev\n * - Playground to understand how the line joins works: https://hypertolosana.github.io/efficient-webgl-stroking/index.html\n * - View the calculated projections for each of the control points: https://codesandbox.io/s/project-stroke-points-with-context-to-trace-b8jc4j?file=/src/index.js\n */\nexport class StrokeLineCapProjections extends StrokeProjectionsBase {\n /**\n * edge point\n */\n declare A: Point;\n /**\n * point next to edge point\n */\n declare T: Point;\n\n constructor(A: XY, T: XY, options: TProjectStrokeOnPointsOptions) {\n super(options);\n this.A = new Point(A);\n this.T = new Point(T);\n }\n\n calcOrthogonalProjection(\n from: Point,\n to: Point,\n magnitude: number = this.strokeProjectionMagnitude,\n ) {\n const vector = this.createSideVector(from, to);\n return this.scaleUnitVector(getOrthonormalVector(vector), magnitude);\n }\n\n /**\n * OPEN PATH START/END - Line cap: Butt\n * Calculation: to find the projections, just find the points orthogonal to the stroke\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#1-1-butt\n */\n projectButt() {\n return [\n this.projectOrthogonally(this.A, this.T, this.strokeProjectionMagnitude),\n this.projectOrthogonally(this.A, this.T, -this.strokeProjectionMagnitude),\n ];\n }\n\n /**\n * OPEN PATH START/END - Line cap: Round\n * Calculation: same as stroke line join `round`\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#1-2-round\n */\n projectRound() {\n const projections: Point[] = [];\n\n if (!this.isSkewed() && this.A.eq(this.T)) {\n /* 1 point case without `skew`\n When `strokeUniform` is true, scaling has no effect.\n So we divide by scale, to remove its effect.\n */\n const projection = new Point(1, 1)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar);\n projections.push(\n this.applySkew(this.A.add(projection)),\n this.applySkew(this.A.subtract(projection)),\n );\n } else {\n projections.push(\n ...new StrokeLineJoinProjections(\n this.A,\n this.T,\n this.T,\n this.options,\n ).projectRound(),\n );\n }\n\n return projections;\n }\n\n /**\n * OPEN PATH START/END - Line cap: Square\n * Calculation: project a rectangle of points on the stroke in the opposite direction of the vector `AT`\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#1-3-square\n */\n projectSquare() {\n const projections: Point[] = [];\n\n if (this.A.eq(this.T)) {\n /* 1 point case without `skew`\n When `strokeUniform` is true, scaling has no effect.\n So we divide by scale, to remove its effect.\n */\n const projection = new Point(1, 1)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar);\n projections.push(this.A.add(projection), this.A.subtract(projection));\n } else {\n const orthogonalProjection = this.calcOrthogonalProjection(\n this.A,\n this.T,\n this.strokeProjectionMagnitude,\n );\n const strokePointingOut = this.scaleUnitVector(\n getUnitVector(this.createSideVector(this.A, this.T)),\n -this.strokeProjectionMagnitude,\n );\n const projectedA = this.A.add(strokePointingOut);\n projections.push(\n projectedA.add(orthogonalProjection),\n projectedA.subtract(orthogonalProjection),\n );\n }\n\n return projections.map((p) => this.applySkew(p));\n }\n\n protected projectPoints() {\n switch (this.options.strokeLineCap) {\n case 'round':\n return this.projectRound();\n case 'square':\n return this.projectSquare();\n default:\n return this.projectButt();\n }\n }\n\n public project(): TProjection[] {\n return this.projectPoints().map((point) => ({\n originPoint: this.A,\n projectedPoint: point,\n }));\n }\n}\n","import { Point, type XY } from '../../../Point';\nimport { findIndexRight } from '../../internals/findRight';\nimport { StrokeLineCapProjections } from './StrokeLineCapProjections';\nimport { StrokeLineJoinProjections } from './StrokeLineJoinProjections';\nimport type { TProjection, TProjectStrokeOnPointsOptions } from './types';\n\nexport * from './types';\n\n/**\n *\n * Used to calculate object's bounding box\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344\n *\n */\nexport const projectStrokeOnPoints = (\n points: XY[],\n options: TProjectStrokeOnPointsOptions,\n openPath = false,\n): TProjection[] => {\n const projections: TProjection[] = [];\n\n if (points.length === 0) {\n return projections;\n }\n\n // first we remove duplicate neighboring points\n const reduced = points.reduce(\n (reduced, point) => {\n if (!reduced[reduced.length - 1].eq(point)) {\n reduced.push(new Point(point));\n }\n return reduced;\n },\n [new Point(points[0])],\n );\n\n if (reduced.length === 1) {\n openPath = true;\n } else if (!openPath) {\n // remove points from end in case they equal the first point\n // in order to correctly project the first point\n const start = reduced[0];\n const index = findIndexRight(reduced, (point) => !point.eq(start));\n reduced.splice(index + 1);\n }\n\n reduced.forEach((A, index, points) => {\n let B: XY, C: XY;\n if (index === 0) {\n C = points[1];\n B = openPath ? A : points[points.length - 1];\n } else if (index === points.length - 1) {\n B = points[index - 1];\n C = openPath ? A : points[0];\n } else {\n B = points[index - 1];\n C = points[index + 1];\n }\n\n if (openPath && points.length === 1) {\n projections.push(\n ...new StrokeLineCapProjections(A, A, options).project(),\n );\n } else if (openPath && (index === 0 || index === points.length - 1)) {\n projections.push(\n ...new StrokeLineCapProjections(\n A,\n index === 0 ? C : B,\n options,\n ).project(),\n );\n } else {\n projections.push(\n ...new StrokeLineJoinProjections(A, B, C, options).project(),\n );\n }\n });\n\n return projections;\n};\n","import type { TextStyle } from '../../shapes/Text/StyledText';\n\nexport const cloneStyles = (style: TextStyle): TextStyle => {\n const newObj: TextStyle = {};\n Object.keys(style).forEach((key) => {\n newObj[key] = {};\n Object.keys(style[key]).forEach((keyInner) => {\n newObj[key][keyInner] = { ...style[key][keyInner] };\n });\n });\n return newObj;\n};\n","/**\n * Capitalizes a string\n * @param {String} string String to capitalize\n * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized\n * and other letters stay untouched, if false first letter is capitalized\n * and other letters are converted to lowercase.\n * @return {String} Capitalized version of a string\n */\nexport const capitalize = (string: string, firstLetterOnly = false): string =>\n `${string.charAt(0).toUpperCase()}${\n firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase()\n }`;\n\n/**\n * Escapes XML in a string\n * @param {String} string String to escape\n * @return {String} Escaped version of a string\n */\nexport const escapeXml = (string: string): string =>\n string\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(//g, '>');\n\n/**\n * Divide a string in the user perceived single units\n * @param {String} textstring String to escape\n * @return {Array} array containing the graphemes\n */\nexport const graphemeSplit = (textstring: string): string[] => {\n const graphemes = [];\n for (let i = 0, chr; i < textstring.length; i++) {\n if ((chr = getWholeChar(textstring, i)) === false) {\n continue;\n }\n graphemes.push(chr as string);\n }\n return graphemes;\n};\n\n// taken from mdn in the charAt doc page.\nconst getWholeChar = (str: string, i: number): string | boolean => {\n const code = str.charCodeAt(i);\n if (isNaN(code)) {\n return ''; // Position not found\n }\n if (code < 0xd800 || code > 0xdfff) {\n return str.charAt(i);\n }\n\n // High surrogate (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xd800 <= code && code <= 0xdbff) {\n if (str.length <= i + 1) {\n throw 'High surrogate without following low surrogate';\n }\n const next = str.charCodeAt(i + 1);\n if (0xdc00 > next || next > 0xdfff) {\n throw 'High surrogate without following low surrogate';\n }\n return str.charAt(i) + str.charAt(i + 1);\n }\n // Low surrogate (0xDC00 <= code && code <= 0xDFFF)\n if (i === 0) {\n throw 'Low surrogate without preceding high surrogate';\n }\n const prev = str.charCodeAt(i - 1);\n\n // (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xd800 > prev || prev > 0xdbff) {\n throw 'Low surrogate without preceding high surrogate';\n }\n // We can pass over low surrogates now as the second component\n // in a pair which we have already processed\n return false;\n};\n","import { reNewline } from '../../constants';\nimport type {\n TextStyle,\n TextStyleDeclaration,\n} from '../../shapes/Text/StyledText';\nimport { cloneStyles } from '../internals/cloneStyles';\nimport { graphemeSplit } from '../lang_string';\n\nexport type TextStyleArray = {\n start: number;\n end: number;\n style: TextStyleDeclaration;\n}[];\n\n/**\n * @param {Object} prevStyle first style to compare\n * @param {Object} thisStyle second style to compare\n * @param {boolean} forTextSpans whether to check overline, underline, and line-through properties\n * @return {boolean} true if the style changed\n */\nexport const hasStyleChanged = (\n prevStyle: TextStyleDeclaration,\n thisStyle: TextStyleDeclaration,\n forTextSpans = false,\n) =>\n prevStyle.fill !== thisStyle.fill ||\n prevStyle.stroke !== thisStyle.stroke ||\n prevStyle.strokeWidth !== thisStyle.strokeWidth ||\n prevStyle.fontSize !== thisStyle.fontSize ||\n prevStyle.fontFamily !== thisStyle.fontFamily ||\n prevStyle.fontWeight !== thisStyle.fontWeight ||\n prevStyle.fontStyle !== thisStyle.fontStyle ||\n prevStyle.textBackgroundColor !== thisStyle.textBackgroundColor ||\n prevStyle.deltaY !== thisStyle.deltaY ||\n (forTextSpans &&\n (prevStyle.overline !== thisStyle.overline ||\n prevStyle.underline !== thisStyle.underline ||\n prevStyle.linethrough !== thisStyle.linethrough));\n\n/**\n * Returns the array form of a text object's inline styles property with styles grouped in ranges\n * rather than per character. This format is less verbose, and is better suited for storage\n * so it is used in serialization (not during runtime).\n * @param {object} styles per character styles for a text object\n * @param {String} text the text string that the styles are applied to\n * @return {{start: number, end: number, style: object}[]}\n */\nexport const stylesToArray = (\n styles: TextStyle,\n text: string,\n): TextStyleArray => {\n const textLines = text.split('\\n'),\n stylesArray = [];\n let charIndex = -1,\n prevStyle = {};\n // clone style structure to prevent mutation\n styles = cloneStyles(styles);\n\n //loop through each textLine\n for (let i = 0; i < textLines.length; i++) {\n const chars = graphemeSplit(textLines[i]);\n if (!styles[i]) {\n //no styles exist for this line, so add the line's length to the charIndex total and reset prevStyle\n charIndex += chars.length;\n prevStyle = {};\n continue;\n }\n //loop through each character of the current line\n for (let c = 0; c < chars.length; c++) {\n charIndex++;\n const thisStyle = styles[i][c];\n //check if style exists for this character\n if (thisStyle && Object.keys(thisStyle).length > 0) {\n if (hasStyleChanged(prevStyle, thisStyle, true)) {\n stylesArray.push({\n start: charIndex,\n end: charIndex + 1,\n style: thisStyle,\n });\n } else {\n //if style is the same as previous character, increase end index\n stylesArray[stylesArray.length - 1].end++;\n }\n }\n prevStyle = thisStyle || {};\n }\n }\n return stylesArray;\n};\n\n/**\n * Returns the object form of the styles property with styles that are assigned per\n * character rather than grouped by range. This format is more verbose, and is\n * only used during runtime (not for serialization/storage)\n * @param {Array} styles the serialized form of a text object's styles\n * @param {String} text the text string that the styles are applied to\n * @return {Object}\n */\nexport const stylesFromArray = (\n styles: TextStyleArray | TextStyle,\n text: string,\n): TextStyle => {\n if (!Array.isArray(styles)) {\n // clone to prevent mutation\n return cloneStyles(styles);\n }\n const textLines = text.split(reNewline),\n stylesObject: TextStyle = {};\n let charIndex = -1,\n styleIndex = 0;\n //loop through each textLine\n for (let i = 0; i < textLines.length; i++) {\n const chars = graphemeSplit(textLines[i]);\n\n //loop through each character of the current line\n for (let c = 0; c < chars.length; c++) {\n charIndex++;\n //check if there's a style collection that includes the current character\n if (\n styles[styleIndex] &&\n styles[styleIndex].start <= charIndex &&\n charIndex < styles[styleIndex].end\n ) {\n //create object for line index if it doesn't exist\n stylesObject[i] = stylesObject[i] || {};\n //assign a style at this character's index\n stylesObject[i][c] = { ...styles[styleIndex].style };\n //if character is at the end of the current style collection, move to the next\n if (charIndex === styles[styleIndex].end - 1) {\n styleIndex++;\n }\n }\n }\n }\n return stylesObject;\n};\n","import { FILL, STROKE } from '../constants';\n\n/**\n * Attributes parsed from all SVG elements\n * @type array\n */\nexport const SHARED_ATTRIBUTES = [\n 'display',\n 'transform',\n FILL,\n 'fill-opacity',\n 'fill-rule',\n 'opacity',\n STROKE,\n 'stroke-dasharray',\n 'stroke-linecap',\n 'stroke-dashoffset',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'id',\n 'paint-order',\n 'vector-effect',\n 'instantiated_by_use',\n 'clip-path',\n];\n","export function selectorMatches(element: HTMLElement, selector: string) {\n const nodeName = element.nodeName;\n const classNames = element.getAttribute('class');\n const id = element.getAttribute('id');\n const azAz = '(?![a-zA-Z\\\\-]+)';\n let matcher;\n // i check if a selector matches slicing away part from it.\n // if i get empty string i should match\n matcher = new RegExp('^' + nodeName, 'i');\n selector = selector.replace(matcher, '');\n if (id && selector.length) {\n matcher = new RegExp('#' + id + azAz, 'i');\n selector = selector.replace(matcher, '');\n }\n if (classNames && selector.length) {\n const splitClassNames = classNames.split(' ');\n for (let i = splitClassNames.length; i--; ) {\n matcher = new RegExp('\\\\.' + splitClassNames[i] + azAz, 'i');\n selector = selector.replace(matcher, '');\n }\n }\n return selector.length === 0;\n}\n","import { selectorMatches } from './selectorMatches';\n\nexport function doesSomeParentMatch(element: HTMLElement, selectors: string[]) {\n let selector: string,\n parentMatching = true;\n while (\n element.parentElement &&\n element.parentElement.nodeType === 1 &&\n selectors.length\n ) {\n if (parentMatching) {\n selector = selectors.pop()!;\n }\n element = element.parentElement;\n parentMatching = selectorMatches(element, selector!);\n }\n return selectors.length === 0;\n}\n","import { selectorMatches } from './selectorMatches';\nimport { doesSomeParentMatch } from './doesSomeParentMatch';\n\n/**\n * @private\n */\n\nexport function elementMatchesRule(element: HTMLElement, selectors: string[]) {\n let parentMatching = true;\n // start from rightmost selector.\n const firstMatching = selectorMatches(element, selectors.pop()!);\n if (firstMatching && selectors.length) {\n parentMatching = doesSomeParentMatch(element, selectors);\n }\n return firstMatching && parentMatching && selectors.length === 0;\n}\n","import { elementMatchesRule } from './elementMatchesRule';\nimport type { CSSRules } from './typedefs';\n\n/**\n * @private\n */\n\nexport function getGlobalStylesForElement(\n element: HTMLElement,\n cssRules: CSSRules = {},\n) {\n let styles: Record = {};\n for (const rule in cssRules) {\n if (elementMatchesRule(element, rule.split(' '))) {\n styles = {\n ...styles,\n ...cssRules[rule],\n };\n }\n }\n return styles;\n}\n","import { attributesMap } from './constants';\n\nexport const normalizeAttr = (\n attr: keyof typeof attributesMap | string,\n): string => attributesMap[attr as keyof typeof attributesMap] ?? attr;\n","import { reNum } from '../../parser/constants';\n\nconst regex = new RegExp(`(${reNum})`, 'gi');\n\nexport const cleanupSvgAttribute = (attributeValue: string) =>\n attributeValue\n .replace(regex, ' $1 ')\n // replace annoying commas and arbitrary whitespace with single spaces\n .replace(/,/gi, ' ')\n .replace(/\\s+/gi, ' ');\n","import { ROTATE, SCALE, SKEW_X, SKEW_Y, iMatrix } from '../constants';\nimport { reNum } from './constants';\nimport type { TMat2D } from '../typedefs';\nimport { cleanupSvgAttribute } from '../util/internals/cleanupSvgAttribute';\nimport {\n createRotateMatrix,\n createScaleMatrix,\n createSkewXMatrix,\n createSkewYMatrix,\n createTranslateMatrix,\n multiplyTransformMatrixArray,\n} from '../util/misc/matrix';\n\n// == begin transform regexp\nconst p = `(${reNum})`;\nconst skewX = String.raw`(skewX)\\(${p}\\)`;\nconst skewY = String.raw`(skewY)\\(${p}\\)`;\nconst rotate = String.raw`(rotate)\\(${p}(?: ${p} ${p})?\\)`;\nconst scale = String.raw`(scale)\\(${p}(?: ${p})?\\)`;\nconst translate = String.raw`(translate)\\(${p}(?: ${p})?\\)`;\nconst matrix = String.raw`(matrix)\\(${p} ${p} ${p} ${p} ${p} ${p}\\)`;\nconst transform = `(?:${matrix}|${translate}|${rotate}|${scale}|${skewX}|${skewY})`;\nconst transforms = `(?:${transform}*)`;\nconst transformList = String.raw`^\\s*(?:${transforms}?)\\s*$`;\n// http://www.w3.org/TR/SVG/coords.html#TransformAttribute\nconst reTransformList = new RegExp(transformList);\nconst reTransform = new RegExp(transform);\nconst reTransformAll = new RegExp(transform, 'g');\n// == end transform regexp\n\n/**\n * Parses \"transform\" attribute, returning an array of values\n * @static\n * @function\n * @memberOf fabric\n * @param {String} attributeValue String containing attribute value\n * @return {TTransformMatrix} Array of 6 elements representing transformation matrix\n */\nexport function parseTransformAttribute(attributeValue: string): TMat2D {\n // first we clean the string\n attributeValue = cleanupSvgAttribute(attributeValue)\n // remove spaces around front parentheses\n .replace(/\\s*([()])\\s*/gi, '$1');\n\n // start with identity matrix\n const matrices: TMat2D[] = [];\n\n // return if no argument was given or\n // an argument does not match transform attribute regexp\n if (\n !attributeValue ||\n (attributeValue && !reTransformList.test(attributeValue))\n ) {\n return [...iMatrix];\n }\n\n for (const match of attributeValue.matchAll(reTransformAll)) {\n const transformMatch = reTransform.exec(match[0]);\n if (!transformMatch) {\n continue;\n }\n let matrix: TMat2D = iMatrix;\n const matchedParams = transformMatch.filter((m) => !!m);\n const [, operation, ...rawArgs] = matchedParams;\n const [arg0, arg1, arg2, arg3, arg4, arg5] = rawArgs.map((arg) =>\n parseFloat(arg),\n );\n\n switch (operation) {\n case 'translate':\n matrix = createTranslateMatrix(arg0, arg1);\n break;\n case ROTATE:\n matrix = createRotateMatrix({ angle: arg0 }, { x: arg1, y: arg2 });\n break;\n case SCALE:\n matrix = createScaleMatrix(arg0, arg1);\n break;\n case SKEW_X:\n matrix = createSkewXMatrix(arg0);\n break;\n case SKEW_Y:\n matrix = createSkewYMatrix(arg0);\n break;\n case 'matrix':\n matrix = [arg0, arg1, arg2, arg3, arg4, arg5];\n break;\n }\n\n // snapshot current matrix into matrices array\n matrices.push(matrix);\n }\n\n return multiplyTransformMatrixArray(matrices);\n}\n","import { multiplyTransformMatrices } from '../util/misc/matrix';\nimport { parseUnit } from '../util/misc/svgParsing';\nimport { parseTransformAttribute } from './parseTransformAttribute';\nimport { CENTER, LEFT, RIGHT, NONE, FILL, STROKE } from '../constants';\n\nexport function normalizeValue(\n attr: string,\n value: any,\n parentAttributes: Record,\n fontSize: number,\n): string | null | boolean | number[] | number {\n const isArray = Array.isArray(value);\n let parsed: number | number[];\n let ouputValue: string | null | boolean | number[] | number = value;\n if ((attr === FILL || attr === STROKE) && value === NONE) {\n ouputValue = '';\n } else if (attr === 'strokeUniform') {\n return value === 'non-scaling-stroke';\n } else if (attr === 'strokeDashArray') {\n if (value === NONE) {\n ouputValue = null;\n } else {\n ouputValue = value.replace(/,/g, ' ').split(/\\s+/).map(parseFloat);\n }\n } else if (attr === 'transformMatrix') {\n if (parentAttributes && parentAttributes.transformMatrix) {\n ouputValue = multiplyTransformMatrices(\n parentAttributes.transformMatrix,\n parseTransformAttribute(value),\n );\n } else {\n ouputValue = parseTransformAttribute(value);\n }\n } else if (attr === 'visible') {\n ouputValue = value !== NONE && value !== 'hidden';\n // display=none on parent element always takes precedence over child element\n if (parentAttributes && parentAttributes.visible === false) {\n ouputValue = false;\n }\n } else if (attr === 'opacity') {\n ouputValue = parseFloat(value);\n if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {\n ouputValue *= parentAttributes.opacity as number;\n }\n } else if (attr === 'textAnchor' /* text-anchor */) {\n ouputValue = value === 'start' ? LEFT : value === 'end' ? RIGHT : CENTER;\n } else if (attr === 'charSpacing') {\n // parseUnit returns px and we convert it to em\n parsed = (parseUnit(value, fontSize) / fontSize) * 1000;\n } else if (attr === 'paintFirst') {\n const fillIndex = value.indexOf(FILL);\n const strokeIndex = value.indexOf(STROKE);\n ouputValue = FILL;\n if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {\n ouputValue = STROKE;\n } else if (fillIndex === -1 && strokeIndex > -1) {\n ouputValue = STROKE;\n }\n } else if (\n attr === 'href' ||\n attr === 'xlink:href' ||\n attr === 'font' ||\n attr === 'id'\n ) {\n return value;\n } else if (attr === 'imageSmoothing') {\n return value === 'optimizeQuality';\n } else {\n parsed = isArray\n ? (value as string[]).map(parseUnit)\n : parseUnit(value, fontSize);\n }\n\n return !isArray && isNaN(parsed! as number) ? ouputValue : parsed!;\n}\n","import { parseUnit } from '../util/misc/svgParsing';\nimport { reFontDeclaration } from './constants';\n\n/**\n * Parses a short font declaration, building adding its properties to a style object\n * @static\n * @function\n * @memberOf fabric\n * @param {String} value font declaration\n * @param {Object} oStyle definition\n */\nexport function parseFontDeclaration(\n value: string,\n oStyle: Record,\n): void {\n const match = value.match(reFontDeclaration);\n\n if (!match) {\n return;\n }\n const fontStyle = match[1],\n // font variant is not used\n // fontVariant = match[2],\n fontWeight = match[3],\n fontSize = match[4],\n lineHeight = match[5],\n fontFamily = match[6];\n\n if (fontStyle) {\n oStyle.fontStyle = fontStyle;\n }\n if (fontWeight) {\n oStyle.fontWeight = isNaN(parseFloat(fontWeight))\n ? fontWeight\n : parseFloat(fontWeight);\n }\n if (fontSize) {\n oStyle.fontSize = parseUnit(fontSize);\n }\n if (fontFamily) {\n oStyle.fontFamily = fontFamily;\n }\n if (lineHeight) {\n oStyle.lineHeight = lineHeight === 'normal' ? 1 : lineHeight;\n }\n}\n","/**\n * Takes a style object and parses it in one that has only defined values\n * and lowercases properties\n * @param style\n * @param oStyle\n */\nexport function parseStyleObject(\n style: Record,\n oStyle: Record,\n): void {\n Object.entries(style).forEach(([prop, value]) => {\n if (value === undefined) {\n return;\n }\n oStyle[prop.toLowerCase()] = value;\n });\n}\n","/**\n * Takes a style string and parses it in one that has only defined values\n * and lowercases properties\n * @param style\n * @param oStyle\n */\nexport function parseStyleString(\n style: string,\n oStyle: Record,\n): void {\n style\n .replace(/;\\s*$/, '')\n .split(';')\n .forEach((chunk) => {\n if (!chunk) return;\n const [attr, value] = chunk.split(':');\n oStyle[attr.trim().toLowerCase()] = value.trim();\n });\n}\n","import { parseStyleObject } from './parseStyleObject';\nimport { parseStyleString } from './parseStyleString';\n\n/**\n * Parses \"style\" attribute, retuning an object with values\n * @static\n * @memberOf fabric\n * @param {SVGElement} element Element to parse\n * @return {Object} Objects with values parsed from style attribute of an element\n */\nexport function parseStyleAttribute(element: HTMLElement): Record {\n const oStyle: Record = {},\n style = element.getAttribute('style');\n\n if (!style) {\n return oStyle;\n }\n\n if (typeof style === 'string') {\n parseStyleString(style, oStyle);\n } else {\n parseStyleObject(style, oStyle);\n }\n\n return oStyle;\n}\n","import { Color } from '../color/Color';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject } from '../shapes/Object/FabricObject';\n\nconst colorAttributesMap = {\n stroke: 'strokeOpacity',\n fill: 'fillOpacity',\n};\n\n/**\n * @private\n * @param {Object} attributes Array of attributes to parse\n */\n\nexport function setStrokeFillOpacity(\n attributes: Record,\n): Record {\n const defaults = FabricObject.getDefaults();\n Object.entries(colorAttributesMap).forEach(([attr, colorAttr]) => {\n if (\n typeof attributes[colorAttr] === 'undefined' ||\n attributes[attr] === ''\n ) {\n return;\n }\n if (typeof attributes[attr] === 'undefined') {\n if (!defaults[attr]) {\n return;\n }\n attributes[attr] = defaults[attr];\n }\n if (attributes[attr].indexOf('url(') === 0) {\n return;\n }\n const color = new Color(attributes[attr]);\n attributes[attr] = color\n .setAlpha(toFixed(color.getAlpha() * attributes[colorAttr], 2))\n .toRgba();\n });\n return attributes;\n}\n","import { DEFAULT_SVG_FONT_SIZE } from '../constants';\nimport { parseUnit } from '../util/misc/svgParsing';\nimport { cPath, fSize, svgValidParentsRegEx } from './constants';\nimport { getGlobalStylesForElement } from './getGlobalStylesForElement';\nimport { normalizeAttr } from './normalizeAttr';\nimport { normalizeValue } from './normalizeValue';\nimport { parseFontDeclaration } from './parseFontDeclaration';\nimport { parseStyleAttribute } from './parseStyleAttribute';\nimport { setStrokeFillOpacity } from './setStrokeFillOpacity';\nimport type { CSSRules } from './typedefs';\n\n/**\n * Returns an object of attributes' name/value, given element and an array of attribute names;\n * Parses parent \"g\" nodes recursively upwards.\n * @param {SVGElement | HTMLElement} element Element to parse\n * @param {Array} attributes Array of attributes to parse\n * @return {Object} object containing parsed attributes' names/values\n */\nexport function parseAttributes(\n element: HTMLElement | null,\n attributes: string[],\n cssRules?: CSSRules,\n): Record {\n if (!element) {\n return {};\n }\n\n let parentAttributes: Record = {},\n fontSize: number,\n parentFontSize = DEFAULT_SVG_FONT_SIZE;\n\n // if there's a parent container (`g` or `a` or `symbol` node), parse its attributes recursively upwards\n if (\n element.parentNode &&\n svgValidParentsRegEx.test(element.parentNode.nodeName)\n ) {\n parentAttributes = parseAttributes(\n element.parentElement,\n attributes,\n cssRules,\n );\n if (parentAttributes.fontSize) {\n fontSize = parentFontSize = parseUnit(parentAttributes.fontSize);\n }\n }\n\n const ownAttributes: Record = {\n ...attributes.reduce>((memo, attr) => {\n const value = element.getAttribute(attr);\n if (value) {\n memo[attr] = value;\n }\n return memo;\n }, {}),\n // add values parsed from style, which take precedence over attributes\n // (see: http://www.w3.org/TR/SVG/styling.html#UsingPresentationAttributes)\n ...getGlobalStylesForElement(element, cssRules),\n ...parseStyleAttribute(element),\n };\n\n if (ownAttributes[cPath]) {\n element.setAttribute(cPath, ownAttributes[cPath]);\n }\n if (ownAttributes[fSize]) {\n // looks like the minimum should be 9px when dealing with ems. this is what looks like in browsers.\n fontSize = parseUnit(ownAttributes[fSize], parentFontSize);\n ownAttributes[fSize] = `${fontSize}`;\n }\n\n // this should have its own complex type\n const normalizedStyle: Record<\n string,\n string | boolean | number | number[] | null\n > = {};\n for (const attr in ownAttributes) {\n const normalizedAttr = normalizeAttr(attr);\n const normalizedValue = normalizeValue(\n normalizedAttr,\n ownAttributes[attr],\n parentAttributes,\n fontSize!,\n );\n normalizedStyle[normalizedAttr] = normalizedValue;\n }\n if (normalizedStyle && normalizedStyle.font) {\n parseFontDeclaration(normalizedStyle.font as string, normalizedStyle);\n }\n const mergedAttrs = { ...parentAttributes, ...normalizedStyle };\n return svgValidParentsRegEx.test(element.nodeName)\n ? mergedAttrs\n : setStrokeFillOpacity(mergedAttrs);\n}\n","import { kRect } from '../constants';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const rectDefaultValues: Partial> = {\n rx: 0,\n ry: 0,\n};\n\ninterface UniqueRectProps {\n rx: number;\n ry: number;\n}\n\nexport interface SerializedRectProps\n extends SerializedObjectProps,\n UniqueRectProps {}\n\nexport interface RectProps extends FabricObjectProps, UniqueRectProps {}\n\nconst RECT_PROPS = ['rx', 'ry'] as const;\n\nexport class Rect<\n Props extends TOptions = Partial,\n SProps extends SerializedRectProps = SerializedRectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements RectProps\n{\n /**\n * Horizontal border radius\n * @type Number\n * @default\n */\n declare rx: number;\n\n /**\n * Vertical border radius\n * @type Number\n * @default\n */\n declare ry: number;\n\n static type = 'Rect';\n\n static cacheProperties = [...cacheProperties, ...RECT_PROPS];\n\n static ownDefaults = rectDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Rect.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Rect.ownDefaults);\n this.setOptions(options);\n this._initRxRy();\n }\n /**\n * Initializes rx/ry attributes\n * @private\n */\n _initRxRy() {\n const { rx, ry } = this;\n if (rx && !ry) {\n this.ry = rx;\n } else if (ry && !rx) {\n this.rx = ry;\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const { width: w, height: h } = this;\n const x = -w / 2;\n const y = -h / 2;\n const rx = this.rx ? Math.min(this.rx, w / 2) : 0;\n const ry = this.ry ? Math.min(this.ry, h / 2) : 0;\n const isRounded = rx !== 0 || ry !== 0;\n\n ctx.beginPath();\n\n ctx.moveTo(x + rx, y);\n\n ctx.lineTo(x + w - rx, y);\n isRounded &&\n ctx.bezierCurveTo(\n x + w - kRect * rx,\n y,\n x + w,\n y + kRect * ry,\n x + w,\n y + ry,\n );\n\n ctx.lineTo(x + w, y + h - ry);\n isRounded &&\n ctx.bezierCurveTo(\n x + w,\n y + h - kRect * ry,\n x + w - kRect * rx,\n y + h,\n x + w - rx,\n y + h,\n );\n\n ctx.lineTo(x + rx, y + h);\n isRounded &&\n ctx.bezierCurveTo(\n x + kRect * rx,\n y + h,\n x,\n y + h - kRect * ry,\n x,\n y + h - ry,\n );\n\n ctx.lineTo(x, y + ry);\n isRounded &&\n ctx.bezierCurveTo(x, y + kRect * ry, x + kRect * rx, y, x + rx, y);\n\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([...RECT_PROPS, ...propertiesToInclude]);\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const { width, height, rx, ry } = this;\n return [\n '\\n`,\n ];\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `Rect.fromElement`)\n * @static\n * @memberOf Rect\n * @see: http://www.w3.org/TR/SVG/shapes.html#RectElement\n */\n static ATTRIBUTE_NAMES = [\n ...SHARED_ATTRIBUTES,\n 'x',\n 'y',\n 'rx',\n 'ry',\n 'width',\n 'height',\n ];\n\n /* _FROM_SVG_START_ */\n\n /**\n * Returns {@link Rect} instance from an SVG element\n * @static\n * @memberOf Rect\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const {\n left = 0,\n top = 0,\n width = 0,\n height = 0,\n visible = true,\n ...restOfparsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n\n return new this({\n ...options,\n ...restOfparsedAttributes,\n left,\n top,\n width,\n height,\n visible: Boolean(visible && width && height),\n });\n }\n\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Rect);\nclassRegistry.setSVGClass(Rect);\n","export const LAYOUT_TYPE_INITIALIZATION = 'initialization';\nexport const LAYOUT_TYPE_ADDED = 'added';\nexport const LAYOUT_TYPE_REMOVED = 'removed';\nexport const LAYOUT_TYPE_IMPERATIVE = 'imperative';\nexport const LAYOUT_TYPE_OBJECT_MODIFIED = 'object_modified';\nexport const LAYOUT_TYPE_OBJECT_MODIFYING = 'object_modifying';\n","import { Point, ZERO } from '../../Point';\nimport type { Group } from '../../shapes/Group';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { multiplyTransformMatrixArray } from '../../util/misc/matrix';\nimport { sizeAfterTransform } from '../../util/misc/objectTransforms';\nimport {\n calcPlaneChangeMatrix,\n sendVectorToPlane,\n} from '../../util/misc/planeChange';\n\n/**\n * @returns 2 points, the tl and br corners of the non rotated bounding box of an object\n * in the {@link group} plane, taking into account objects that {@link group} is their parent\n * but also belong to the active selection.\n */\nexport const getObjectBounds = (\n destinationGroup: Group,\n object: FabricObject,\n): Point[] => {\n const {\n strokeUniform,\n strokeWidth,\n width,\n height,\n group: currentGroup,\n } = object;\n const t =\n currentGroup && currentGroup !== destinationGroup\n ? calcPlaneChangeMatrix(\n currentGroup.calcTransformMatrix(),\n destinationGroup.calcTransformMatrix(),\n )\n : null;\n const objectCenter = t\n ? object.getRelativeCenterPoint().transform(t)\n : object.getRelativeCenterPoint();\n const accountForStroke = !object['isStrokeAccountedForInDimensions']();\n const strokeUniformVector =\n strokeUniform && accountForStroke\n ? sendVectorToPlane(\n new Point(strokeWidth, strokeWidth),\n undefined,\n destinationGroup.calcTransformMatrix(),\n )\n : ZERO;\n const scalingStrokeWidth =\n !strokeUniform && accountForStroke ? strokeWidth : 0;\n const sizeVector = sizeAfterTransform(\n width + scalingStrokeWidth,\n height + scalingStrokeWidth,\n multiplyTransformMatrixArray([t, object.calcOwnMatrix()], true),\n )\n .add(strokeUniformVector)\n .scalarDivide(2);\n return [objectCenter.subtract(sizeVector), objectCenter.add(sizeVector)];\n};\n","import { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_IMPERATIVE,\n} from '../constants';\nimport type {\n InitializationLayoutContext,\n LayoutStrategyResult,\n StrictLayoutContext,\n} from '../types';\nimport { getObjectBounds } from './utils';\n\n/**\n * Exposes a main public method {@link calcLayoutResult} that is used by the `LayoutManager` to perform layout.\n * Returning `undefined` signals the `LayoutManager` to skip the layout.\n *\n * In charge of calculating the bounding box of the passed objects.\n */\nexport abstract class LayoutStrategy {\n /**\n * override by subclass for persistence (TS does not support `static abstract`)\n */\n static type = 'strategy';\n\n /**\n * Used by the `LayoutManager` to perform layout\n * @TODO/fix: if this method is calcResult, should calc unconditionally.\n * the condition to not calc should be evaluated by the layoutManager.\n * @returns layout result **OR** `undefined` to skip layout\n */\n public calcLayoutResult(\n context: StrictLayoutContext,\n objects: FabricObject[],\n ): LayoutStrategyResult | undefined {\n if (this.shouldPerformLayout(context)) {\n return this.calcBoundingBox(objects, context);\n }\n }\n\n shouldPerformLayout({ type, prevStrategy, strategy }: StrictLayoutContext) {\n return (\n type === LAYOUT_TYPE_INITIALIZATION ||\n type === LAYOUT_TYPE_IMPERATIVE ||\n (!!prevStrategy && strategy !== prevStrategy)\n );\n }\n\n shouldLayoutClipPath({ type, target: { clipPath } }: StrictLayoutContext) {\n return (\n type !== LAYOUT_TYPE_INITIALIZATION &&\n clipPath &&\n !clipPath.absolutePositioned\n );\n }\n\n getInitialSize(\n context: StrictLayoutContext & InitializationLayoutContext,\n result: Pick,\n ) {\n return result.size;\n }\n\n /**\n * Override this method to customize layout.\n */\n calcBoundingBox(\n objects: FabricObject[],\n context: StrictLayoutContext,\n ): LayoutStrategyResult | undefined {\n const { type, target } = context;\n if (type === LAYOUT_TYPE_IMPERATIVE && context.overrides) {\n return context.overrides;\n }\n if (objects.length === 0) {\n return;\n }\n const { left, top, width, height } = makeBoundingBoxFromPoints(\n objects\n .map((object) => getObjectBounds(target, object))\n .reduce((coords, curr) => coords.concat(curr), []),\n );\n const bboxSize = new Point(width, height);\n const bboxLeftTop = new Point(left, top);\n const bboxCenter = bboxLeftTop.add(bboxSize.scalarDivide(2));\n\n if (type === LAYOUT_TYPE_INITIALIZATION) {\n const actualSize = this.getInitialSize(context, {\n size: bboxSize,\n center: bboxCenter,\n });\n return {\n // in `initialization` we do not account for target's transformation matrix\n center: bboxCenter,\n // TODO: investigate if this is still necessary\n relativeCorrection: new Point(0, 0),\n size: actualSize,\n };\n } else {\n // we send `relativeCenter` up to group's containing plane\n const center = bboxCenter.transform(target.calcOwnMatrix());\n return {\n center,\n size: bboxSize,\n };\n }\n }\n}\n","import type { StrictLayoutContext } from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will adjust the bounding box to fit target's objects.\n */\nexport class FitContentLayout extends LayoutStrategy {\n static readonly type = 'fit-content';\n\n /**\n * @override layout on all triggers\n * Override at will\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n shouldPerformLayout(context: StrictLayoutContext) {\n return true;\n }\n}\n\nclassRegistry.setClass(FitContentLayout);\n","import { Point } from '../Point';\nimport {\n CENTER,\n CHANGED,\n MODIFIED,\n MODIFY_PATH,\n MODIFY_POLY,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n iMatrix,\n} from '../constants';\nimport type { Group } from '../shapes/Group';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { invertTransform } from '../util/misc/matrix';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { FitContentLayout } from './LayoutStrategies/FitContentLayout';\nimport type { LayoutStrategy } from './LayoutStrategies/LayoutStrategy';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_OBJECT_MODIFIED,\n LAYOUT_TYPE_OBJECT_MODIFYING,\n} from './constants';\nimport type {\n LayoutContext,\n LayoutResult,\n RegistrationContext,\n StrictLayoutContext,\n} from './types';\nimport { classRegistry } from '../ClassRegistry';\nimport type { TModificationEvents } from '../EventTypeDefs';\n\nconst LAYOUT_MANAGER = 'layoutManager';\n\nexport type SerializedLayoutManager = {\n type: string;\n strategy: string;\n};\n\nexport class LayoutManager {\n private declare _prevLayoutStrategy?: LayoutStrategy;\n protected declare _subscriptions: Map;\n\n strategy: LayoutStrategy;\n\n constructor(strategy: LayoutStrategy = new FitContentLayout()) {\n this.strategy = strategy;\n this._subscriptions = new Map();\n }\n\n public performLayout(context: LayoutContext) {\n const strictContext: StrictLayoutContext = {\n bubbles: true,\n strategy: this.strategy,\n ...context,\n prevStrategy: this._prevLayoutStrategy,\n stopPropagation() {\n this.bubbles = false;\n },\n };\n\n this.onBeforeLayout(strictContext);\n\n const layoutResult = this.getLayoutResult(strictContext);\n if (layoutResult) {\n this.commitLayout(strictContext, layoutResult);\n }\n\n this.onAfterLayout(strictContext, layoutResult);\n this._prevLayoutStrategy = strictContext.strategy;\n }\n\n /**\n * Attach handlers for events that we know will invalidate the layout when\n * performed on child objects ( general transforms ).\n * Returns the disposers for later unsubscribing and cleanup\n * @param {FabricObject} object\n * @param {RegistrationContext & Partial} context\n * @returns {VoidFunction[]} disposers remove the handlers\n */\n protected attachHandlers(\n object: FabricObject,\n context: RegistrationContext & Partial,\n ): VoidFunction[] {\n const { target } = context;\n return (\n [\n MODIFIED,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n CHANGED,\n MODIFY_POLY,\n MODIFY_PATH,\n ] as (TModificationEvents & 'modified')[]\n ).map((key) =>\n object.on(key, (e) =>\n this.performLayout(\n key === MODIFIED\n ? {\n type: LAYOUT_TYPE_OBJECT_MODIFIED,\n trigger: key,\n e,\n target,\n }\n : {\n type: LAYOUT_TYPE_OBJECT_MODIFYING,\n trigger: key,\n e,\n target,\n },\n ),\n ),\n );\n }\n\n /**\n * Subscribe an object to transform events that will trigger a layout change on the parent\n * This is important only for interactive groups.\n * @param object\n * @param context\n */\n protected subscribe(\n object: FabricObject,\n context: RegistrationContext & Partial,\n ) {\n this.unsubscribe(object, context);\n const disposers = this.attachHandlers(object, context);\n this._subscriptions.set(object, disposers);\n }\n\n /**\n * unsubscribe object layout triggers\n */\n protected unsubscribe(\n object: FabricObject,\n _context?: RegistrationContext & Partial,\n ) {\n (this._subscriptions.get(object) || []).forEach((d) => d());\n this._subscriptions.delete(object);\n }\n\n unsubscribeTargets(\n context: RegistrationContext & Partial,\n ) {\n context.targets.forEach((object) => this.unsubscribe(object, context));\n }\n\n subscribeTargets(\n context: RegistrationContext & Partial,\n ) {\n context.targets.forEach((object) => this.subscribe(object, context));\n }\n\n protected onBeforeLayout(context: StrictLayoutContext) {\n const { target, type } = context;\n const { canvas } = target;\n // handle layout triggers subscription\n // @TODO: gate the registration when the group is interactive\n if (type === LAYOUT_TYPE_INITIALIZATION || type === LAYOUT_TYPE_ADDED) {\n this.subscribeTargets(context);\n } else if (type === LAYOUT_TYPE_REMOVED) {\n this.unsubscribeTargets(context);\n }\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:before', {\n context,\n });\n canvas &&\n canvas.fire('object:layout:before', {\n target,\n context,\n });\n\n if (type === LAYOUT_TYPE_IMPERATIVE && context.deep) {\n const { strategy: _, ...tricklingContext } = context;\n // traverse the tree\n target.forEachObject(\n (object) =>\n (object as Group).layoutManager &&\n (object as Group).layoutManager.performLayout({\n ...tricklingContext,\n bubbles: false,\n target: object as Group,\n }),\n );\n }\n }\n\n protected getLayoutResult(\n context: StrictLayoutContext,\n ): Required | undefined {\n const { target, strategy, type } = context;\n\n const result = strategy.calcLayoutResult(context, target.getObjects());\n\n if (!result) {\n return;\n }\n\n const prevCenter =\n type === LAYOUT_TYPE_INITIALIZATION\n ? new Point()\n : target.getRelativeCenterPoint();\n\n const {\n center: nextCenter,\n correction = new Point(),\n relativeCorrection = new Point(),\n } = result;\n const offset = prevCenter\n .subtract(nextCenter)\n .add(correction)\n .transform(\n // in `initialization` we do not account for target's transformation matrix\n type === LAYOUT_TYPE_INITIALIZATION\n ? iMatrix\n : invertTransform(target.calcOwnMatrix()),\n true,\n )\n .add(relativeCorrection);\n\n return {\n result,\n prevCenter,\n nextCenter,\n offset,\n };\n }\n\n protected commitLayout(\n context: StrictLayoutContext,\n layoutResult: Required,\n ) {\n const { target } = context;\n const {\n result: { size },\n nextCenter,\n } = layoutResult;\n // set dimensions\n target.set({ width: size.x, height: size.y });\n // layout descendants\n this.layoutObjects(context, layoutResult);\n // set position\n // in `initialization` we do not account for target's transformation matrix\n if (context.type === LAYOUT_TYPE_INITIALIZATION) {\n // TODO: what about strokeWidth?\n target.set({\n left:\n context.x ?? nextCenter.x + size.x * resolveOrigin(target.originX),\n top: context.y ?? nextCenter.y + size.y * resolveOrigin(target.originY),\n });\n } else {\n target.setPositionByOrigin(nextCenter, CENTER, CENTER);\n // invalidate\n target.setCoords();\n target.set('dirty', true);\n }\n }\n\n protected layoutObjects(\n context: StrictLayoutContext,\n layoutResult: Required,\n ) {\n const { target } = context;\n // adjust objects to account for new center\n target.forEachObject((object) => {\n object.group === target &&\n this.layoutObject(context, layoutResult, object);\n });\n // adjust clip path to account for new center\n context.strategy.shouldLayoutClipPath(context) &&\n this.layoutObject(context, layoutResult, target.clipPath as FabricObject);\n }\n\n /**\n * @param {FabricObject} object\n * @param {Point} offset\n */\n protected layoutObject(\n context: StrictLayoutContext,\n { offset }: Required,\n object: FabricObject,\n ) {\n // TODO: this is here for cache invalidation.\n // verify if this is necessary since we have explicit\n // cache invalidation at the end of commitLayout\n object.set({\n left: object.left + offset.x,\n top: object.top + offset.y,\n });\n }\n\n protected onAfterLayout(\n context: StrictLayoutContext,\n layoutResult?: LayoutResult,\n ) {\n const {\n target,\n strategy,\n bubbles,\n prevStrategy: _,\n ...bubblingContext\n } = context;\n const { canvas } = target;\n\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:after', {\n context,\n result: layoutResult,\n });\n canvas &&\n canvas.fire('object:layout:after', {\n context,\n result: layoutResult,\n target,\n });\n\n // bubble\n const parent = target.parent;\n if (bubbles && parent?.layoutManager) {\n // add target to context#path\n (bubblingContext.path || (bubblingContext.path = [])).push(target);\n // all parents should invalidate their layout\n parent.layoutManager.performLayout({\n ...bubblingContext,\n target: parent,\n });\n }\n target.set('dirty', true);\n }\n\n dispose() {\n const { _subscriptions } = this;\n _subscriptions.forEach((disposers) => disposers.forEach((d) => d()));\n _subscriptions.clear();\n }\n\n toObject() {\n return {\n type: LAYOUT_MANAGER,\n strategy: (this.strategy.constructor as typeof LayoutStrategy).type,\n };\n }\n\n toJSON() {\n return this.toObject();\n }\n}\n\nclassRegistry.setClass(LayoutManager, LAYOUT_MANAGER);\n","import type { CollectionEvents, ObjectEvents } from '../EventTypeDefs';\nimport { createCollectionMixin } from '../Collection';\nimport type {\n TClassProperties,\n TSVGReviver,\n TOptions,\n Abortable,\n} from '../typedefs';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n} from '../util/misc/matrix';\nimport {\n enlivenObjectEnlivables,\n enlivenObjects,\n} from '../util/misc/objectEnlive';\nimport { applyTransformToObject } from '../util/misc/objectTransforms';\nimport { FabricObject } from './Object/FabricObject';\nimport { Rect } from './Rect';\nimport { classRegistry } from '../ClassRegistry';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport { log } from '../util/internals/console';\nimport type {\n ImperativeLayoutOptions,\n LayoutBeforeEvent,\n LayoutAfterEvent,\n} from '../LayoutManager/types';\nimport { LayoutManager } from '../LayoutManager/LayoutManager';\nimport {\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_REMOVED,\n} from '../LayoutManager/constants';\nimport type { SerializedLayoutManager } from '../LayoutManager/LayoutManager';\nimport type { FitContentLayout } from '../LayoutManager';\n\n/**\n * This class handles the specific case of creating a group using {@link Group#fromObject} and is not meant to be used in any other case.\n * We could have used a boolean in the constructor, as we did previously, but we think the boolean\n * would stay in the group's constructor interface and create confusion, therefore it was removed.\n * This layout manager doesn't do anything and therefore keeps the exact layout the group had when {@link Group#toObject} was called.\n */\nclass NoopLayoutManager extends LayoutManager {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n performLayout() {}\n}\n\nexport interface GroupEvents extends ObjectEvents, CollectionEvents {\n 'layout:before': LayoutBeforeEvent;\n 'layout:after': LayoutAfterEvent;\n}\n\nexport interface GroupOwnProps {\n subTargetCheck: boolean;\n interactive: boolean;\n}\n\nexport interface SerializedGroupProps\n extends SerializedObjectProps,\n GroupOwnProps {\n objects: SerializedObjectProps[];\n layoutManager: SerializedLayoutManager;\n}\n\nexport interface GroupProps extends FabricObjectProps, GroupOwnProps {\n layoutManager: LayoutManager;\n}\n\nexport const groupDefaultValues: Partial> = {\n strokeWidth: 0,\n subTargetCheck: false,\n interactive: false,\n};\n\n/**\n * @fires object:added\n * @fires object:removed\n * @fires layout:before\n * @fires layout:after\n */\nexport class Group\n extends createCollectionMixin(\n FabricObject,\n )\n implements GroupProps\n{\n /**\n * Used to optimize performance\n * set to `false` if you don't need contained objects to be targets of events\n * @default\n * @type boolean\n */\n declare subTargetCheck: boolean;\n\n /**\n * Used to allow targeting of object inside groups.\n * set to true if you want to select an object inside a group.\\\n * **REQUIRES** `subTargetCheck` set to true\n * This will be not removed but slowly replaced with a method setInteractive\n * that will take care of enabling subTargetCheck and necessary object events.\n * There is too much attached to group interactivity to just be evaluated by a\n * boolean in the code\n * @default\n * @deprecated\n * @type boolean\n */\n declare interactive: boolean;\n\n declare layoutManager: LayoutManager;\n\n /**\n * Used internally to optimize performance\n * Once an object is selected, instance is rendered without the selected object.\n * This way instance is cached only once for the entire interaction with the selected object.\n * @private\n */\n protected _activeObjects: FabricObject[] = [];\n\n static type = 'Group';\n\n static ownDefaults: Record = groupDefaultValues;\n private __objectSelectionTracker: (ev: ObjectEvents['selected']) => void;\n private __objectSelectionDisposer: (ev: ObjectEvents['deselected']) => void;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Group.ownDefaults,\n };\n }\n\n /**\n * Constructor\n *\n * @param {FabricObject[]} [objects] instance objects\n * @param {Object} [options] Options object\n */\n constructor(objects: FabricObject[] = [], options: Partial = {}) {\n super();\n Object.assign(this, Group.ownDefaults);\n this.setOptions(options);\n this.groupInit(objects, options);\n }\n\n /**\n * Shared code between group and active selection\n * Meant to be used by the constructor.\n */\n protected groupInit(\n objects: FabricObject[],\n options: {\n layoutManager?: LayoutManager;\n top?: number;\n left?: number;\n },\n ) {\n this._objects = [...objects]; // Avoid unwanted mutations of Collection to affect the caller\n\n this.__objectSelectionTracker = this.__objectSelectionMonitor.bind(\n this,\n true,\n );\n this.__objectSelectionDisposer = this.__objectSelectionMonitor.bind(\n this,\n false,\n );\n\n this.forEachObject((object) => {\n this.enterGroup(object, false);\n });\n\n // perform initial layout\n this.layoutManager = options.layoutManager ?? new LayoutManager();\n this.layoutManager.performLayout({\n type: LAYOUT_TYPE_INITIALIZATION,\n target: this,\n targets: [...objects],\n // @TODO remove this concept from the layout manager.\n // Layout manager will calculate the correct position,\n // group options can override it later.\n x: options.left,\n y: options.top,\n });\n }\n\n /**\n * Checks if object can enter group and logs relevant warnings\n * @private\n * @param {FabricObject} object\n * @returns\n */\n canEnterGroup(object: FabricObject) {\n if (object === this || this.isDescendantOf(object)) {\n // prevent circular object tree\n log(\n 'error',\n 'Group: circular object trees are not supported, this call has no effect',\n );\n return false;\n } else if (this._objects.indexOf(object) !== -1) {\n // is already in the objects array\n log(\n 'error',\n 'Group: duplicate objects are not supported inside group, this call has no effect',\n );\n return false;\n }\n return true;\n }\n\n /**\n * Override this method to enhance performance (for groups with a lot of objects).\n * If Overriding, be sure not pass illegal objects to group - it will break your app.\n * @private\n */\n protected _filterObjectsBeforeEnteringGroup(objects: FabricObject[]) {\n return objects.filter((object, index, array) => {\n // can enter AND is the first occurrence of the object in the passed args (to prevent adding duplicates)\n return this.canEnterGroup(object) && array.indexOf(object) === index;\n });\n }\n\n /**\n * Add objects\n * @param {...FabricObject[]} objects\n */\n add(...objects: FabricObject[]) {\n const allowedObjects = this._filterObjectsBeforeEnteringGroup(objects);\n const size = super.add(...allowedObjects);\n this._onAfterObjectsChange(LAYOUT_TYPE_ADDED, allowedObjects);\n return size;\n }\n\n /**\n * Inserts an object into collection at specified index\n * @param {FabricObject[]} objects Object to insert\n * @param {Number} index Index to insert object at\n */\n insertAt(index: number, ...objects: FabricObject[]) {\n const allowedObjects = this._filterObjectsBeforeEnteringGroup(objects);\n const size = super.insertAt(index, ...allowedObjects);\n this._onAfterObjectsChange(LAYOUT_TYPE_ADDED, allowedObjects);\n return size;\n }\n\n /**\n * Remove objects\n * @param {...FabricObject[]} objects\n * @returns {FabricObject[]} removed objects\n */\n remove(...objects: FabricObject[]) {\n const removed = super.remove(...objects);\n this._onAfterObjectsChange(LAYOUT_TYPE_REMOVED, removed);\n return removed;\n }\n\n _onObjectAdded(object: FabricObject) {\n this.enterGroup(object, true);\n this.fire('object:added', { target: object });\n object.fire('added', { target: this });\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n _onObjectRemoved(object: FabricObject, removeParentTransform?: boolean) {\n this.exitGroup(object, removeParentTransform);\n this.fire('object:removed', { target: object });\n object.fire('removed', { target: this });\n }\n\n /**\n * @private\n * @param {'added'|'removed'} type\n * @param {FabricObject[]} targets\n */\n _onAfterObjectsChange(type: 'added' | 'removed', targets: FabricObject[]) {\n this.layoutManager.performLayout({\n type,\n targets,\n target: this,\n });\n }\n\n _onStackOrderChanged() {\n this._set('dirty', true);\n }\n\n /**\n * @private\n * @param {string} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n const prev = this[key as keyof this];\n super._set(key, value);\n if (key === 'canvas' && prev !== value) {\n (this._objects || []).forEach((object) => {\n object._set(key, value);\n });\n }\n return this;\n }\n\n /**\n * @private\n */\n _shouldSetNestedCoords() {\n return this.subTargetCheck;\n }\n\n /**\n * Remove all objects\n * @returns {FabricObject[]} removed objects\n */\n removeAll() {\n this._activeObjects = [];\n return this.remove(...this._objects);\n }\n\n /**\n * keeps track of the selected objects\n * @private\n */\n __objectSelectionMonitor(\n selected: T,\n {\n target: object,\n }: ObjectEvents[T extends true ? 'selected' : 'deselected'],\n ) {\n const activeObjects = this._activeObjects;\n if (selected) {\n activeObjects.push(object);\n this._set('dirty', true);\n } else if (activeObjects.length > 0) {\n const index = activeObjects.indexOf(object);\n if (index > -1) {\n activeObjects.splice(index, 1);\n this._set('dirty', true);\n }\n }\n }\n\n /**\n * @private\n * @param {boolean} watch\n * @param {FabricObject} object\n */\n _watchObject(watch: boolean, object: FabricObject) {\n // make sure we listen only once\n watch && this._watchObject(false, object);\n if (watch) {\n object.on('selected', this.__objectSelectionTracker);\n object.on('deselected', this.__objectSelectionDisposer);\n } else {\n object.off('selected', this.__objectSelectionTracker);\n object.off('deselected', this.__objectSelectionDisposer);\n }\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n object.group && object.group.remove(object);\n object._set('parent', this);\n this._enterGroup(object, removeParentTransform);\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n _enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n if (removeParentTransform) {\n // can this be converted to utils (sendObjectToPlane)?\n applyTransformToObject(\n object,\n multiplyTransformMatrices(\n invertTransform(this.calcTransformMatrix()),\n object.calcTransformMatrix(),\n ),\n );\n }\n this._shouldSetNestedCoords() && object.setCoords();\n object._set('group', this);\n object._set('canvas', this.canvas);\n this._watchObject(true, object);\n const activeObject =\n this.canvas &&\n this.canvas.getActiveObject &&\n this.canvas.getActiveObject();\n // if we are adding the activeObject in a group\n if (\n activeObject &&\n (activeObject === object || object.isDescendantOf(activeObject))\n ) {\n this._activeObjects.push(object);\n }\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n this._exitGroup(object, removeParentTransform);\n object._set('parent', undefined);\n object._set('canvas', undefined);\n }\n\n /**\n * Executes the inner fabric logic of exiting a group.\n * - Stop watching the object\n * - Remove the object from the optimization map this._activeObjects\n * - unset the group property of the object\n * @protected\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n _exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n object._set('group', undefined);\n if (!removeParentTransform) {\n applyTransformToObject(\n object,\n multiplyTransformMatrices(\n this.calcTransformMatrix(),\n object.calcTransformMatrix(),\n ),\n );\n object.setCoords();\n }\n this._watchObject(false, object);\n const index =\n this._activeObjects.length > 0 ? this._activeObjects.indexOf(object) : -1;\n if (index > -1) {\n this._activeObjects.splice(index, 1);\n }\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group is already cached.\n * @return {Boolean}\n */\n shouldCache() {\n const ownCache = FabricObject.prototype.shouldCache.call(this);\n if (ownCache) {\n for (let i = 0; i < this._objects.length; i++) {\n if (this._objects[i].willDrawShadow()) {\n this.ownCaching = false;\n return false;\n }\n }\n }\n return ownCache;\n }\n\n /**\n * Check if this object or a child object will cast a shadow\n * @return {Boolean}\n */\n willDrawShadow() {\n if (super.willDrawShadow()) {\n return true;\n }\n for (let i = 0; i < this._objects.length; i++) {\n if (this._objects[i].willDrawShadow()) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Check if instance or its group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache(): boolean {\n return this.ownCaching || (!!this.parent && this.parent.isOnACache());\n }\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawObject(ctx: CanvasRenderingContext2D) {\n this._renderBackground(ctx);\n for (let i = 0; i < this._objects.length; i++) {\n // TODO: handle rendering edge case somehow\n if (\n this.canvas?.preserveObjectStacking &&\n this._objects[i].group !== this\n ) {\n ctx.save();\n ctx.transform(...invertTransform(this.calcTransformMatrix()));\n this._objects[i].render(ctx);\n ctx.restore();\n } else if (this._objects[i].group === this) {\n this._objects[i].render(ctx);\n }\n }\n this._drawClipPath(ctx, this.clipPath);\n }\n\n /**\n * @override\n * @return {Boolean}\n */\n setCoords() {\n super.setCoords();\n this._shouldSetNestedCoords() &&\n this.forEachObject((object) => object.setCoords());\n }\n\n triggerLayout(options: ImperativeLayoutOptions = {}) {\n this.layoutManager.performLayout({\n target: this,\n type: LAYOUT_TYPE_IMPERATIVE,\n ...options,\n });\n }\n\n /**\n * Renders instance on a given context\n * @param {CanvasRenderingContext2D} ctx context to render instance on\n */\n render(ctx: CanvasRenderingContext2D) {\n this._transformDone = true;\n super.render(ctx);\n this._transformDone = false;\n }\n\n /**\n *\n * @private\n * @param {'toObject'|'toDatalessObject'} [method]\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @returns {FabricObject[]} serialized objects\n */\n __serializeObjects(\n method: 'toObject' | 'toDatalessObject',\n propertiesToInclude?: string[],\n ) {\n const _includeDefaultValues = this.includeDefaultValues;\n return this._objects\n .filter(function (obj) {\n return !obj.excludeFromExport;\n })\n .map(function (obj) {\n const originalDefaults = obj.includeDefaultValues;\n obj.includeDefaultValues = _includeDefaultValues;\n const data = obj[method || 'toObject'](propertiesToInclude);\n obj.includeDefaultValues = originalDefaults;\n // delete data.version;\n return data;\n });\n }\n\n /**\n * Returns object representation of an instance\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit<\n GroupProps & TClassProperties,\n keyof SerializedGroupProps\n >,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SerializedGroupProps {\n const layoutManager = this.layoutManager.toObject();\n\n return {\n ...super.toObject([\n 'subTargetCheck',\n 'interactive',\n ...propertiesToInclude,\n ]),\n ...(layoutManager.strategy !== 'fit-content' || this.includeDefaultValues\n ? { layoutManager }\n : {}),\n objects: this.__serializeObjects(\n 'toObject',\n propertiesToInclude as string[],\n ),\n };\n }\n\n toString() {\n return `#`;\n }\n\n dispose() {\n this.layoutManager.unsubscribeTargets({\n targets: this.getObjects(),\n target: this,\n });\n this._activeObjects = [];\n this.forEachObject((object) => {\n this._watchObject(false, object);\n object.dispose();\n });\n super.dispose();\n }\n\n /**\n * @private\n */\n _createSVGBgRect(reviver?: TSVGReviver) {\n if (!this.backgroundColor) {\n return '';\n }\n const fillStroke = Rect.prototype._toSVG.call(this);\n const commons = fillStroke.indexOf('COMMON_PARTS');\n fillStroke[commons] = 'for=\"group\" ';\n const markup = fillStroke.join('');\n return reviver ? reviver(markup) : markup;\n }\n\n /**\n * Returns svg representation of an instance\n * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n _toSVG(reviver?: TSVGReviver) {\n const svgString = ['\\n'];\n const bg = this._createSVGBgRect(reviver);\n bg && svgString.push('\\t\\t', bg);\n for (let i = 0; i < this._objects.length; i++) {\n svgString.push('\\t\\t', this._objects[i].toSVG(reviver));\n }\n svgString.push('\\n');\n return svgString;\n }\n\n /**\n * Returns styles-string for svg-export, specific version for group\n * @return {String}\n */\n getSvgStyles(): string {\n const opacity =\n typeof this.opacity !== 'undefined' && this.opacity !== 1\n ? `opacity: ${this.opacity};`\n : '',\n visibility = this.visible ? '' : ' visibility: hidden;';\n return [opacity, this.getSvgFilter(), visibility].join('');\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG(reviver?: TSVGReviver): string {\n const svgString = [];\n const bg = this._createSVGBgRect(reviver);\n bg && svgString.push('\\t', bg);\n for (let i = 0; i < this._objects.length; i++) {\n svgString.push('\\t', this._objects[i].toClipPathSVG(reviver));\n }\n return this._createBaseClipPathSVGMarkup(svgString, {\n reviver,\n });\n }\n\n /**\n * @todo support loading from svg\n * @private\n * @static\n * @memberOf Group\n * @param {Object} object Object to create a group from\n * @returns {Promise}\n */\n static fromObject>(\n { type, objects = [], layoutManager, ...options }: T,\n abortable?: Abortable,\n ) {\n return Promise.all([\n enlivenObjects(objects, abortable),\n enlivenObjectEnlivables(options, abortable),\n ]).then(([objects, hydratedOptions]) => {\n const group = new this(objects, {\n ...options,\n ...hydratedOptions,\n layoutManager: new NoopLayoutManager(),\n });\n if (layoutManager) {\n const layoutClass = classRegistry.getClass(\n layoutManager.type,\n );\n const strategyClass = classRegistry.getClass(\n layoutManager.strategy,\n );\n group.layoutManager = new layoutClass(new strategyClass());\n } else {\n group.layoutManager = new LayoutManager();\n }\n group.layoutManager.subscribeTargets({\n type: LAYOUT_TYPE_INITIALIZATION,\n target: group,\n targets: group.getObjects(),\n });\n group.setCoords();\n return group;\n });\n }\n}\n\nclassRegistry.setClass(Group);\n","import type { GroupProps } from '../../shapes/Group';\nimport { Group } from '../../shapes/Group';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\n\n/**\n * TODO experiment with different layout manager and svg results ( fixed fit content )\n * Groups SVG elements (usually those retrieved from SVG document)\n * @static\n * @param {FabricObject[]} elements FabricObject(s) parsed from svg, to group\n * @return {FabricObject | Group}\n */\nexport const groupSVGElements = (\n elements: FabricObject[],\n options?: Partial,\n) => {\n if (elements && elements.length === 1) {\n return elements[0];\n }\n return new Group(elements, options);\n};\n","import type { TSize } from '../../typedefs';\n\n/**\n * Finds the scale for the object source to fit inside the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @param {TSize} source natural unscaled size of the object\n * @param {TSize} destination natural unscaled size of the object\n * @return {Number} scale factor to apply to source to fit into destination\n */\nexport const findScaleToFit = (source: TSize, destination: TSize) =>\n Math.min(\n destination.width / source.width,\n destination.height / source.height,\n );\n\n/**\n * Finds the scale for the object source to cover entirely the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @param {TSize} source natural unscaled size of the object\n * @param {TSize} destination natural unscaled size of the object\n * @return {Number} scale factor to apply to source to cover destination\n */\nexport const findScaleToCover = (source: TSize, destination: TSize) =>\n Math.max(\n destination.width / source.width,\n destination.height / source.height,\n );\n","import { reNum } from '../../parser/constants';\n\nconst commaWsp = `\\\\s*,?\\\\s*`;\n\n/**\n * p for param\n * using \"bad naming\" here because it makes the regex much easier to read\n * p is a number that is preceded by an arbitary number of spaces, maybe 0,\n * a comma or not, and then possibly more spaces or not.\n */\nconst p = `${commaWsp}(${reNum})`;\n\n// const reMoveToCommand = `(M) ?(?:${p}${p} ?)+`;\n\n// const reLineCommand = `(L) ?(?:${p}${p} ?)+`;\n\n// const reHorizontalLineCommand = `(H) ?(?:${p} ?)+`;\n\n// const reVerticalLineCommand = `(V) ?(?:${p} ?)+`;\n\n// const reClosePathCommand = String.raw`(Z)\\s*`;\n\n// const reCubicCurveCommand = `(C) ?(?:${p}${p}${p}${p}${p}${p} ?)+`;\n\n// const reCubicCurveShortcutCommand = `(S) ?(?:${p}${p}${p}${p} ?)+`;\n\n// const reQuadraticCurveCommand = `(Q) ?(?:${p}${p}${p}${p} ?)+`;\n\n// const reQuadraticCurveShortcutCommand = `(T) ?(?:${p}${p} ?)+`;\n\nexport const reArcCommandPoints = `${p}${p}${p}${commaWsp}([01])${commaWsp}([01])${p}${p}`;\n// const reArcCommand = `(A) ?(?:${reArcCommandPoints} ?)+`;\n\n// export const rePathCommandGroups =\n// `(?:(?:${reMoveToCommand})` +\n// `|(?:${reLineCommand})` +\n// `|(?:${reHorizontalLineCommand})` +\n// `|(?:${reVerticalLineCommand})` +\n// `|(?:${reClosePathCommand})` +\n// `|(?:${reCubicCurveCommand})` +\n// `|(?:${reCubicCurveShortcutCommand})` +\n// `|(?:${reQuadraticCurveCommand})` +\n// `|(?:${reQuadraticCurveShortcutCommand})` +\n// `|(?:${reArcCommand}))`;\n\nexport const rePathCommand = '[mzlhvcsqta][^mzlhvcsqta]*';\n","import { cache } from '../../cache';\nimport { config } from '../../config';\nimport { halfPI, PiBy180 } from '../../constants';\nimport type { TMat2D, TRadian, TRectBounds } from '../../typedefs';\nimport { cos } from '../misc/cos';\nimport { multiplyTransformMatrices, transformPoint } from '../misc/matrix';\nimport { sin } from '../misc/sin';\nimport { toFixed } from '../misc/toFixed';\nimport type {\n TCurveInfo,\n TComplexPathData,\n TParsedAbsoluteCubicCurveCommand,\n TPathSegmentInfo,\n TPointAngle,\n TSimpleParsedCommand,\n TSimplePathData,\n TPathSegmentCommandInfo,\n TComplexParsedCommand,\n TPathSegmentInfoCommon,\n TEndPathInfo,\n TParsedArcCommand,\n TComplexParsedCommandType,\n} from './typedefs';\nimport type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport { reArcCommandPoints, rePathCommand } from './regex';\nimport { reNum } from '../../parser/constants';\n\n/**\n * Commands that may be repeated\n */\nconst repeatedCommands: Record = {\n m: 'l',\n M: 'L',\n};\n\n/**\n * Convert an arc of a rotated ellipse to a Bezier Curve\n * @param {TRadian} theta1 start of the arc\n * @param {TRadian} theta2 end of the arc\n * @param cosTh cosine of the angle of rotation\n * @param sinTh sine of the angle of rotation\n * @param rx x-axis radius (before rotation)\n * @param ry y-axis radius (before rotation)\n * @param cx1 center x of the ellipse\n * @param cy1 center y of the ellipse\n * @param mT\n * @param fromX starting point of arc x\n * @param fromY starting point of arc y\n */\nconst segmentToBezier = (\n theta1: TRadian,\n theta2: TRadian,\n cosTh: number,\n sinTh: number,\n rx: number,\n ry: number,\n cx1: number,\n cy1: number,\n mT: number,\n fromX: number,\n fromY: number,\n): TParsedAbsoluteCubicCurveCommand => {\n const costh1 = cos(theta1),\n sinth1 = sin(theta1),\n costh2 = cos(theta2),\n sinth2 = sin(theta2),\n toX = cosTh * rx * costh2 - sinTh * ry * sinth2 + cx1,\n toY = sinTh * rx * costh2 + cosTh * ry * sinth2 + cy1,\n cp1X = fromX + mT * (-cosTh * rx * sinth1 - sinTh * ry * costh1),\n cp1Y = fromY + mT * (-sinTh * rx * sinth1 + cosTh * ry * costh1),\n cp2X = toX + mT * (cosTh * rx * sinth2 + sinTh * ry * costh2),\n cp2Y = toY + mT * (sinTh * rx * sinth2 - cosTh * ry * costh2);\n\n return ['C', cp1X, cp1Y, cp2X, cp2Y, toX, toY];\n};\n\n/**\n * Adapted from {@link http://dxr.mozilla.org/mozilla-central/source/dom/svg/SVGPathDataParser.cpp}\n * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here\n * http://mozilla.org/MPL/2.0/\n * @param toX\n * @param toY\n * @param rx\n * @param ry\n * @param {number} large 0 or 1 flag\n * @param {number} sweep 0 or 1 flag\n * @param rotateX\n */\nconst arcToSegments = (\n toX: number,\n toY: number,\n rx: number,\n ry: number,\n large: number,\n sweep: number,\n rotateX: TRadian,\n): TParsedAbsoluteCubicCurveCommand[] => {\n if (rx === 0 || ry === 0) {\n return [];\n }\n let fromX = 0,\n fromY = 0,\n root = 0;\n const PI = Math.PI,\n theta = rotateX * PiBy180,\n sinTheta = sin(theta),\n cosTh = cos(theta),\n px = 0.5 * (-cosTh * toX - sinTheta * toY),\n py = 0.5 * (-cosTh * toY + sinTheta * toX),\n rx2 = rx ** 2,\n ry2 = ry ** 2,\n py2 = py ** 2,\n px2 = px ** 2,\n pl = rx2 * ry2 - rx2 * py2 - ry2 * px2;\n let _rx = Math.abs(rx);\n let _ry = Math.abs(ry);\n\n if (pl < 0) {\n const s = Math.sqrt(1 - pl / (rx2 * ry2));\n _rx *= s;\n _ry *= s;\n } else {\n root =\n (large === sweep ? -1.0 : 1.0) * Math.sqrt(pl / (rx2 * py2 + ry2 * px2));\n }\n\n const cx = (root * _rx * py) / _ry,\n cy = (-root * _ry * px) / _rx,\n cx1 = cosTh * cx - sinTheta * cy + toX * 0.5,\n cy1 = sinTheta * cx + cosTh * cy + toY * 0.5;\n let mTheta = calcVectorAngle(1, 0, (px - cx) / _rx, (py - cy) / _ry);\n let dtheta = calcVectorAngle(\n (px - cx) / _rx,\n (py - cy) / _ry,\n (-px - cx) / _rx,\n (-py - cy) / _ry,\n );\n\n if (sweep === 0 && dtheta > 0) {\n dtheta -= 2 * PI;\n } else if (sweep === 1 && dtheta < 0) {\n dtheta += 2 * PI;\n }\n\n // Convert into cubic bezier segments <= 90deg\n const segments = Math.ceil(Math.abs((dtheta / PI) * 2)),\n result = [],\n mDelta = dtheta / segments,\n mT =\n ((8 / 3) * Math.sin(mDelta / 4) * Math.sin(mDelta / 4)) /\n Math.sin(mDelta / 2);\n let th3 = mTheta + mDelta;\n\n for (let i = 0; i < segments; i++) {\n result[i] = segmentToBezier(\n mTheta,\n th3,\n cosTh,\n sinTheta,\n _rx,\n _ry,\n cx1,\n cy1,\n mT,\n fromX,\n fromY,\n );\n fromX = result[i][5];\n fromY = result[i][6];\n mTheta = th3;\n th3 += mDelta;\n }\n return result;\n};\n\n/**\n * @private\n * Calculate the angle between two vectors\n * @param ux u endpoint x\n * @param uy u endpoint y\n * @param vx v endpoint x\n * @param vy v endpoint y\n */\nconst calcVectorAngle = (\n ux: number,\n uy: number,\n vx: number,\n vy: number,\n): TRadian => {\n const ta = Math.atan2(uy, ux),\n tb = Math.atan2(vy, vx);\n if (tb >= ta) {\n return tb - ta;\n } else {\n return 2 * Math.PI - (ta - tb);\n }\n};\n\n// functions for the Cubic beizer\n// taken from: https://github.com/konvajs/konva/blob/7.0.5/src/shapes/Path.ts#L350\nconst CB1 = (t: number) => t ** 3;\nconst CB2 = (t: number) => 3 * t ** 2 * (1 - t);\nconst CB3 = (t: number) => 3 * t * (1 - t) ** 2;\nconst CB4 = (t: number) => (1 - t) ** 3;\n\n/**\n * Calculate bounding box of a cubic Bezier curve\n * Taken from http://jsbin.com/ivomiq/56/edit (no credits available)\n * TODO: can we normalize this with the starting points set at 0 and then translated the bbox?\n * @param {number} begx starting point\n * @param {number} begy\n * @param {number} cp1x first control point\n * @param {number} cp1y\n * @param {number} cp2x second control point\n * @param {number} cp2y\n * @param {number} endx end of bezier\n * @param {number} endy\n * @return {TRectBounds} the rectangular bounds\n */\nexport function getBoundsOfCurve(\n begx: number,\n begy: number,\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n endx: number,\n endy: number,\n): TRectBounds {\n let argsString: string;\n if (config.cachesBoundsOfCurve) {\n // eslint-disable-next-line\n argsString = [...arguments].join();\n if (cache.boundsOfCurveCache[argsString]) {\n return cache.boundsOfCurveCache[argsString];\n }\n }\n\n const sqrt = Math.sqrt,\n abs = Math.abs,\n tvalues = [],\n bounds: [[x: number, y: number], [x: number, y: number]] = [\n [0, 0],\n [0, 0],\n ];\n\n let b = 6 * begx - 12 * cp1x + 6 * cp2x;\n let a = -3 * begx + 9 * cp1x - 9 * cp2x + 3 * endx;\n let c = 3 * cp1x - 3 * begx;\n\n for (let i = 0; i < 2; ++i) {\n if (i > 0) {\n b = 6 * begy - 12 * cp1y + 6 * cp2y;\n a = -3 * begy + 9 * cp1y - 9 * cp2y + 3 * endy;\n c = 3 * cp1y - 3 * begy;\n }\n\n if (abs(a) < 1e-12) {\n if (abs(b) < 1e-12) {\n continue;\n }\n const t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n const b2ac = b * b - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n const sqrtb2ac = sqrt(b2ac);\n const t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n const t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n let j = tvalues.length;\n const jlen = j;\n const iterator = getPointOnCubicBezierIterator(\n begx,\n begy,\n cp1x,\n cp1y,\n cp2x,\n cp2y,\n endx,\n endy,\n );\n while (j--) {\n const { x, y } = iterator(tvalues[j]);\n bounds[0][j] = x;\n bounds[1][j] = y;\n }\n\n bounds[0][jlen] = begx;\n bounds[1][jlen] = begy;\n bounds[0][jlen + 1] = endx;\n bounds[1][jlen + 1] = endy;\n const result: TRectBounds = [\n new Point(Math.min(...bounds[0]), Math.min(...bounds[1])),\n new Point(Math.max(...bounds[0]), Math.max(...bounds[1])),\n ];\n if (config.cachesBoundsOfCurve) {\n cache.boundsOfCurveCache[argsString!] = result;\n }\n return result;\n}\n\n/**\n * Converts arc to a bunch of cubic Bezier curves\n * @param {number} fx starting point x\n * @param {number} fy starting point y\n * @param {TParsedArcCommand} coords Arc command\n */\nexport const fromArcToBeziers = (\n fx: number,\n fy: number,\n [_, rx, ry, rot, large, sweep, tx, ty]: TParsedArcCommand,\n): TParsedAbsoluteCubicCurveCommand[] => {\n const segsNorm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\n\n for (let i = 0, len = segsNorm.length; i < len; i++) {\n segsNorm[i][1] += fx;\n segsNorm[i][2] += fy;\n segsNorm[i][3] += fx;\n segsNorm[i][4] += fy;\n segsNorm[i][5] += fx;\n segsNorm[i][6] += fy;\n }\n return segsNorm;\n};\n\n/**\n * This function takes a parsed SVG path and makes it simpler for fabricJS logic.\n * Simplification consist of:\n * - All commands converted to absolute (lowercase to uppercase)\n * - S converted to C\n * - T converted to Q\n * - A converted to C\n * @param {TComplexPathData} path the array of commands of a parsed SVG path for `Path`\n * @return {TSimplePathData} the simplified array of commands of a parsed SVG path for `Path`\n * TODO: figure out how to remove the type assertions in a nice way\n */\nexport const makePathSimpler = (path: TComplexPathData): TSimplePathData => {\n // x and y represent the last point of the path, AKA the previous command point.\n // we add them to each relative command to make it an absolute comment.\n // we also swap the v V h H with L, because are easier to transform.\n let x = 0,\n y = 0;\n // x1 and y1 represent the last point of the subpath. the subpath is started with\n // m or M command. When a z or Z command is drawn, x and y need to be resetted to\n // the last x1 and y1.\n let x1 = 0,\n y1 = 0;\n // previous will host the letter of the previous command, to handle S and T.\n // controlX and controlY will host the previous reflected control point\n const destinationPath: TSimplePathData = [];\n let previous,\n // placeholders\n controlX = 0,\n controlY = 0;\n for (const parsedCommand of path) {\n const current: TComplexParsedCommand = [...parsedCommand];\n let converted: TSimpleParsedCommand | undefined;\n switch (\n current[0] // first letter\n ) {\n case 'l': // lineto, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'L':\n x = current[1];\n y = current[2];\n converted = ['L', x, y];\n break;\n case 'h': // horizontal lineto, relative\n current[1] += x;\n // falls through\n case 'H':\n x = current[1];\n converted = ['L', x, y];\n break;\n case 'v': // vertical lineto, relative\n current[1] += y;\n // falls through\n case 'V':\n y = current[1];\n converted = ['L', x, y];\n break;\n case 'm': // moveTo, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'M':\n x = current[1];\n y = current[2];\n x1 = current[1];\n y1 = current[2];\n converted = ['M', x, y];\n break;\n case 'c': // bezierCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n current[5] += x;\n current[6] += y;\n // falls through\n case 'C':\n controlX = current[3];\n controlY = current[4];\n x = current[5];\n y = current[6];\n converted = ['C', current[1], current[2], controlX, controlY, x, y];\n break;\n case 's': // shorthand cubic bezierCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'S':\n // would be sScC but since we are swapping sSc for C, we check just that.\n if (previous === 'C') {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n } else {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n x = current[3];\n y = current[4];\n converted = ['C', controlX, controlY, current[1], current[2], x, y];\n // converted[3] and converted[4] are NOW the second control point.\n // we keep it for the next reflection.\n controlX = converted[3];\n controlY = converted[4];\n break;\n case 'q': // quadraticCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'Q':\n controlX = current[1];\n controlY = current[2];\n x = current[3];\n y = current[4];\n converted = ['Q', controlX, controlY, x, y];\n break;\n case 't': // shorthand quadraticCurveTo, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'T':\n if (previous === 'Q') {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n } else {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n x = current[1];\n y = current[2];\n converted = ['Q', controlX, controlY, x, y];\n break;\n case 'a':\n current[6] += x;\n current[7] += y;\n // falls through\n case 'A':\n fromArcToBeziers(x, y, current).forEach((b) => destinationPath.push(b));\n x = current[6];\n y = current[7];\n break;\n case 'z':\n case 'Z':\n x = x1;\n y = y1;\n converted = ['Z'];\n break;\n default:\n }\n if (converted) {\n destinationPath.push(converted);\n previous = converted[0];\n } else {\n previous = '';\n }\n }\n return destinationPath;\n};\n\n// todo verify if we can just use the point class here\n/**\n * Calc length from point x1,y1 to x2,y2\n * @param {number} x1 starting point x\n * @param {number} y1 starting point y\n * @param {number} x2 starting point x\n * @param {number} y2 starting point y\n * @return {number} length of segment\n */\nconst calcLineLength = (\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n): number => Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n\n/**\n * Get an iterator that takes a percentage and returns a point\n * @param {number} begx\n * @param {number} begy\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} endx\n * @param {number} endy\n */\nconst getPointOnCubicBezierIterator =\n (\n begx: number,\n begy: number,\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n endx: number,\n endy: number,\n ) =>\n (pct: number) => {\n const c1 = CB1(pct),\n c2 = CB2(pct),\n c3 = CB3(pct),\n c4 = CB4(pct);\n return new Point(\n endx * c1 + cp2x * c2 + cp1x * c3 + begx * c4,\n endy * c1 + cp2y * c2 + cp1y * c3 + begy * c4,\n );\n };\n\nconst QB1 = (t: number) => t ** 2;\nconst QB2 = (t: number) => 2 * t * (1 - t);\nconst QB3 = (t: number) => (1 - t) ** 2;\n\nconst getTangentCubicIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n p4x: number,\n p4y: number,\n ) =>\n (pct: number) => {\n const qb1 = QB1(pct),\n qb2 = QB2(pct),\n qb3 = QB3(pct),\n tangentX =\n 3 * (qb3 * (p2x - p1x) + qb2 * (p3x - p2x) + qb1 * (p4x - p3x)),\n tangentY =\n 3 * (qb3 * (p2y - p1y) + qb2 * (p3y - p2y) + qb1 * (p4y - p3y));\n return Math.atan2(tangentY, tangentX);\n };\n\nconst getPointOnQuadraticBezierIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n ) =>\n (pct: number) => {\n const c1 = QB1(pct),\n c2 = QB2(pct),\n c3 = QB3(pct);\n return new Point(\n p3x * c1 + p2x * c2 + p1x * c3,\n p3y * c1 + p2y * c2 + p1y * c3,\n );\n };\n\nconst getTangentQuadraticIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n ) =>\n (pct: number) => {\n const invT = 1 - pct,\n tangentX = 2 * (invT * (p2x - p1x) + pct * (p3x - p2x)),\n tangentY = 2 * (invT * (p2y - p1y) + pct * (p3y - p2y));\n return Math.atan2(tangentY, tangentX);\n };\n\n// this will run over a path segment (a cubic or quadratic segment) and approximate it\n// with 100 segments. This will good enough to calculate the length of the curve\nconst pathIterator = (\n iterator: (pct: number) => Point,\n x1: number,\n y1: number,\n) => {\n let tempP = new Point(x1, y1),\n tmpLen = 0;\n for (let perc = 1; perc <= 100; perc += 1) {\n const p = iterator(perc / 100);\n tmpLen += calcLineLength(tempP.x, tempP.y, p.x, p.y);\n tempP = p;\n }\n return tmpLen;\n};\n\n/**\n * Given a pathInfo, and a distance in pixels, find the percentage from 0 to 1\n * that correspond to that pixels run over the path.\n * The percentage will be then used to find the correct point on the canvas for the path.\n * @param {Array} segInfo fabricJS collection of information on a parsed path\n * @param {number} distance from starting point, in pixels.\n * @return {TPointAngle} info object with x and y ( the point on canvas ) and angle, the tangent on that point;\n */\nconst findPercentageForDistance = (\n segInfo: TCurveInfo<'Q' | 'C'>,\n distance: number,\n): TPointAngle => {\n let perc = 0,\n tmpLen = 0,\n tempP: XY = { x: segInfo.x, y: segInfo.y },\n p: XY = { ...tempP },\n nextLen: number,\n nextStep = 0.01,\n lastPerc = 0;\n // nextStep > 0.0001 covers 0.00015625 that 1/64th of 1/100\n // the path\n const iterator = segInfo.iterator,\n angleFinder = segInfo.angleFinder;\n while (tmpLen < distance && nextStep > 0.0001) {\n p = iterator(perc);\n lastPerc = perc;\n nextLen = calcLineLength(tempP.x, tempP.y, p.x, p.y);\n // compare tmpLen each cycle with distance, decide next perc to test.\n if (nextLen + tmpLen > distance) {\n // we discard this step and we make smaller steps.\n perc -= nextStep;\n nextStep /= 2;\n } else {\n tempP = p;\n perc += nextStep;\n tmpLen += nextLen;\n }\n }\n return { ...p, angle: angleFinder(lastPerc) };\n};\n\n/**\n * Run over a parsed and simplified path and extract some information (length of each command and starting point)\n * @param {TSimplePathData} path parsed path commands\n * @return {TPathSegmentInfo[]} path commands information\n */\nexport const getPathSegmentsInfo = (\n path: TSimplePathData,\n): TPathSegmentInfo[] => {\n let totalLength = 0,\n //x2 and y2 are the coords of segment start\n //x1 and y1 are the coords of the current point\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n iterator,\n tempInfo: TPathSegmentInfo;\n const info: TPathSegmentInfo[] = [];\n for (const current of path) {\n const basicInfo: TPathSegmentInfoCommon = {\n x: x1,\n y: y1,\n command: current[0],\n length: 0,\n };\n switch (\n current[0] //first letter\n ) {\n case 'M':\n tempInfo = >basicInfo;\n tempInfo.x = x2 = x1 = current[1];\n tempInfo.y = y2 = y1 = current[2];\n break;\n case 'L':\n tempInfo = >basicInfo;\n tempInfo.length = calcLineLength(x1, y1, current[1], current[2]);\n x1 = current[1];\n y1 = current[2];\n break;\n case 'C':\n iterator = getPointOnCubicBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6],\n );\n tempInfo = >basicInfo;\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = getTangentCubicIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6],\n );\n tempInfo.length = pathIterator(iterator, x1, y1);\n\n x1 = current[5];\n y1 = current[6];\n break;\n case 'Q':\n iterator = getPointOnQuadraticBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n );\n tempInfo = >basicInfo;\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = getTangentQuadraticIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n );\n tempInfo.length = pathIterator(iterator, x1, y1);\n x1 = current[3];\n y1 = current[4];\n break;\n case 'Z':\n // we add those in order to ease calculations later\n tempInfo = basicInfo;\n tempInfo.destX = x2;\n tempInfo.destY = y2;\n tempInfo.length = calcLineLength(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n break;\n }\n totalLength += tempInfo.length;\n info.push(tempInfo);\n }\n info.push({ length: totalLength, x: x1, y: y1 });\n return info;\n};\n\n/**\n * Get the point on the path that is distance along the path\n * @param path\n * @param distance\n * @param infos\n */\nexport const getPointOnPath = (\n path: TSimplePathData,\n distance: number,\n infos: TPathSegmentInfo[] = getPathSegmentsInfo(path),\n): TPointAngle | undefined => {\n let i = 0;\n while (distance - infos[i].length > 0 && i < infos.length - 2) {\n distance -= infos[i].length;\n i++;\n }\n const segInfo = infos[i],\n segPercent = distance / segInfo.length,\n segment = path[i];\n\n switch (segInfo.command) {\n case 'M':\n return { x: segInfo.x, y: segInfo.y, angle: 0 };\n case 'Z':\n return {\n ...new Point(segInfo.x, segInfo.y).lerp(\n new Point(segInfo.destX, segInfo.destY),\n segPercent,\n ),\n angle: Math.atan2(segInfo.destY - segInfo.y, segInfo.destX - segInfo.x),\n };\n case 'L':\n return {\n ...new Point(segInfo.x, segInfo.y).lerp(\n new Point(segment[1]!, segment[2]!),\n segPercent,\n ),\n angle: Math.atan2(segment[2]! - segInfo.y, segment[1]! - segInfo.x),\n };\n case 'C':\n return findPercentageForDistance(segInfo, distance);\n case 'Q':\n return findPercentageForDistance(segInfo, distance);\n default:\n // throw Error('Invalid command');\n }\n};\n\nconst rePathCmdAll = new RegExp(rePathCommand, 'gi');\nconst regExpArcCommandPoints = new RegExp(reArcCommandPoints, 'g');\nconst reMyNum = new RegExp(reNum, 'gi');\nconst commandLengths = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7,\n} as const;\n/**\n *\n * @param {string} pathString\n * @return {TComplexPathData} An array of SVG path commands\n * @example Usage\n * parsePath('M 3 4 Q 3 5 2 1 4 0 Q 9 12 2 1 4 0') === [\n * ['M', 3, 4],\n * ['Q', 3, 5, 2, 1, 4, 0],\n * ['Q', 9, 12, 2, 1, 4, 0],\n * ];\n */\nexport const parsePath = (pathString: string): TComplexPathData => {\n const chain: TComplexPathData = [];\n const all = pathString.match(rePathCmdAll) ?? [];\n for (const matchStr of all) {\n // take match string and save the first letter as the command\n const commandLetter = matchStr[0] as TComplexParsedCommandType;\n // in case of Z we have very little to do\n if (commandLetter === 'z' || commandLetter === 'Z') {\n chain.push([commandLetter]);\n continue;\n }\n const commandLength =\n commandLengths[\n commandLetter.toLowerCase() as keyof typeof commandLengths\n ];\n\n let paramArr = [];\n if (commandLetter === 'a' || commandLetter === 'A') {\n // the arc command ha some peculariaties that requires a special regex other than numbers\n // it is possible to avoid using a space between the sweep and large arc flags, making them either\n // 00, 01, 10 or 11, making them identical to a plain number for the regex reMyNum\n // reset the regexp\n regExpArcCommandPoints.lastIndex = 0;\n for (let out = null; (out = regExpArcCommandPoints.exec(matchStr)); ) {\n paramArr.push(...out.slice(1));\n }\n } else {\n paramArr = matchStr.match(reMyNum) || [];\n }\n\n // inspect the length of paramArr, if is longer than commandLength\n // we are dealing with repeated commands\n for (let i = 0; i < paramArr.length; i += commandLength) {\n const newCommand = new Array(commandLength) as TComplexParsedCommand;\n const transformedCommand = repeatedCommands[commandLetter];\n newCommand[0] =\n i > 0 && transformedCommand ? transformedCommand : commandLetter;\n for (let j = 0; j < commandLength; j++) {\n newCommand[j + 1] = parseFloat(paramArr[i + j]);\n }\n chain.push(newCommand);\n }\n }\n return chain;\n};\n\n/**\n *\n * Converts points to a smooth SVG path\n * @param {XY[]} points Array of points\n * @param {number} [correction] Apply a correction to the path (usually we use `width / 1000`). If value is undefined 0 is used as the correction value.\n * @return {(string|number)[][]} An array of SVG path commands\n */\nexport const getSmoothPathFromPoints = (\n points: Point[],\n correction = 0,\n): TSimplePathData => {\n let p1 = new Point(points[0]),\n p2 = new Point(points[1]),\n multSignX = 1,\n multSignY = 0;\n const path: TSimplePathData = [],\n len = points.length,\n manyPoints = len > 2;\n\n if (manyPoints) {\n multSignX = points[2].x < p2.x ? -1 : points[2].x === p2.x ? 0 : 1;\n multSignY = points[2].y < p2.y ? -1 : points[2].y === p2.y ? 0 : 1;\n }\n path.push([\n 'M',\n p1.x - multSignX * correction,\n p1.y - multSignY * correction,\n ]);\n let i;\n for (i = 1; i < len; i++) {\n if (!p1.eq(p2)) {\n const midPoint = p1.midPointFrom(p2);\n // p1 is our bezier control point\n // midpoint is our endpoint\n // start point is p(i-1) value.\n path.push(['Q', p1.x, p1.y, midPoint.x, midPoint.y]);\n }\n p1 = points[i];\n if (i + 1 < points.length) {\n p2 = points[i + 1];\n }\n }\n if (manyPoints) {\n multSignX = p1.x > points[i - 2].x ? 1 : p1.x === points[i - 2].x ? 0 : -1;\n multSignY = p1.y > points[i - 2].y ? 1 : p1.y === points[i - 2].y ? 0 : -1;\n }\n path.push([\n 'L',\n p1.x + multSignX * correction,\n p1.y + multSignY * correction,\n ]);\n return path;\n};\n\n/**\n * Transform a path by transforming each segment.\n * it has to be a simplified path or it won't work.\n * WARNING: this depends from pathOffset for correct operation\n * @param {TSimplePathData} path fabricJS parsed and simplified path commands\n * @param {TMat2D} transform matrix that represent the transformation\n * @param {Point} [pathOffset] `Path.pathOffset`\n * @returns {TSimplePathData} the transformed path\n */\nexport const transformPath = (\n path: TSimplePathData,\n transform: TMat2D,\n pathOffset: Point,\n): TSimplePathData => {\n if (pathOffset) {\n transform = multiplyTransformMatrices(transform, [\n 1,\n 0,\n 0,\n 1,\n -pathOffset.x,\n -pathOffset.y,\n ]);\n }\n return path.map((pathSegment) => {\n const newSegment: TSimpleParsedCommand = [...pathSegment];\n for (let i = 1; i < pathSegment.length - 1; i += 2) {\n // TODO: is there a way to get around casting to any?\n const { x, y } = transformPoint(\n {\n x: pathSegment[i] as number,\n y: pathSegment[i + 1] as number,\n },\n transform,\n );\n newSegment[i] = x;\n newSegment[i + 1] = y;\n }\n return newSegment;\n });\n};\n\n/**\n * Returns an array of path commands to create a regular polygon\n * @param {number} numVertexes\n * @param {number} radius\n * @returns {TSimplePathData} An array of SVG path commands\n */\nexport const getRegularPolygonPath = (\n numVertexes: number,\n radius: number,\n): TSimplePathData => {\n const interiorAngle = (Math.PI * 2) / numVertexes;\n // rotationAdjustment rotates the path by 1/2 the interior angle so that the polygon always has a flat side on the bottom\n // This isn't strictly necessary, but it's how we tend to think of and expect polygons to be drawn\n let rotationAdjustment = -halfPI;\n if (numVertexes % 2 === 0) {\n rotationAdjustment += interiorAngle / 2;\n }\n const d = new Array(numVertexes + 1);\n for (let i = 0; i < numVertexes; i++) {\n const rad = i * interiorAngle + rotationAdjustment;\n const { x, y } = new Point(cos(rad), sin(rad)).scalarMultiply(radius);\n d[i] = [i === 0 ? 'M' : 'L', x, y];\n }\n d[numVertexes] = ['Z'];\n return d;\n};\n\n/**\n * Join path commands to go back to svg format\n * @param {TSimplePathData} pathData fabricJS parsed path commands\n * @param {number} fractionDigits number of fraction digits to \"leave\"\n * @return {String} joined path 'M 0 0 L 20 30'\n */\nexport const joinPath = (pathData: TSimplePathData, fractionDigits?: number) =>\n pathData\n .map((segment) => {\n return segment\n .map((arg, i) => {\n if (i === 0) return arg;\n return fractionDigits === undefined\n ? arg\n : toFixed(arg, fractionDigits);\n })\n .join(' ');\n })\n .join(' ');\n","// TODO this file needs to go away, cross browser style support is not fabricjs domain.\n\n/**\n * wrapper for setting element's style\n * @param {HTMLElement} element\n * @param {Object | string} styles\n */\nexport function setStyle(\n element: HTMLElement,\n styles: string | Record,\n) {\n const elementStyle = element.style;\n if (!elementStyle || !styles) {\n return;\n } else if (typeof styles === 'string') {\n elementStyle.cssText += ';' + styles;\n } else {\n Object.entries(styles).forEach(([property, value]) =>\n elementStyle.setProperty(property, value),\n );\n }\n}\n","import type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { sendObjectToPlane } from './planeChange';\nimport { Group } from '../../shapes/Group';\n/**\n * Merges 2 clip paths into one visually equal clip path\n *\n * **IMPORTANT**:\\\n * Does **NOT** clone the arguments, clone them proir if necessary.\n *\n * Creates a wrapper (group) that contains one clip path and is clipped by the other so content is kept where both overlap.\n * Use this method if both the clip paths may have nested clip paths of their own, so assigning one to the other's clip path property is not possible.\n *\n * In order to handle the `inverted` property we follow logic described in the following cases:\\\n * **(1)** both clip paths are inverted - the clip paths pass the inverted prop to the wrapper and loose it themselves.\\\n * **(2)** one is inverted and the other isn't - the wrapper shouldn't become inverted and the inverted clip path must clip the non inverted one to produce an identical visual effect.\\\n * **(3)** both clip paths are not inverted - wrapper and clip paths remain unchanged.\n *\n * @memberOf fabric.util\n * @param {fabric.Object} c1\n * @param {fabric.Object} c2\n * @returns {fabric.Object} merged clip path\n */\nexport const mergeClipPaths = (c1: FabricObject, c2: FabricObject) => {\n let a = c1,\n b = c2;\n if (a.inverted && !b.inverted) {\n // case (2)\n a = c2;\n b = c1;\n }\n // `b` becomes `a`'s clip path so we transform `b` to `a` coordinate plane\n sendObjectToPlane(b, b.group?.calcTransformMatrix(), a.calcTransformMatrix());\n // assign the `inverted` prop to the wrapping group\n const inverted = a.inverted && b.inverted;\n if (inverted) {\n // case (1)\n a.inverted = b.inverted = false;\n }\n return new Group([a], { clipPath: b, inverted });\n};\n","/**\n * Returns random number between 2 specified ones.\n * @param {Number} min lower limit\n * @param {Number} max upper limit\n * @return {Number} random value (between min and max)\n */\nexport const getRandomInt = (min: number, max: number): number =>\n Math.floor(Math.random() * (max - min + 1)) + min;\n","import { getFabricWindow } from '../../env';\nimport { noop } from '../../constants';\nimport type { Abortable } from '../../typedefs';\nimport { SignalAbortedError } from './console';\n\ntype requestOptions = Abortable & {\n onComplete?: (xhr: XMLHttpRequest) => void;\n};\n\n/**\n * Cross-browser abstraction for sending XMLHttpRequest\n * @deprecated this has to go away, we can use a modern browser method to do the same.\n * @param {String} url URL to send XMLHttpRequest to\n * @param {Object} [options] Options object\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @param {Function} options.onComplete Callback to invoke when request is completed\n * @return {XMLHttpRequest} request\n */\n\nexport function request(url: string, options: requestOptions = {}) {\n const onComplete = options.onComplete || noop,\n xhr = new (getFabricWindow().XMLHttpRequest)(),\n signal = options.signal,\n abort = function () {\n xhr.abort();\n },\n removeListener = function () {\n signal && signal.removeEventListener('abort', abort);\n xhr.onerror = xhr.ontimeout = noop;\n };\n\n if (signal && signal.aborted) {\n throw new SignalAbortedError('request');\n } else if (signal) {\n signal.addEventListener('abort', abort, { once: true });\n }\n\n /** @ignore */\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n removeListener();\n onComplete(xhr);\n xhr.onreadystatechange = noop;\n }\n };\n\n xhr.onerror = xhr.ontimeout = removeListener;\n\n xhr.open('get', url, true);\n\n xhr.send();\n return xhr;\n}\n","import { CENTER, SCALE_X, SCALE_Y } from '../constants';\nimport type { FabricImage } from '../shapes/Image';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { qrDecompose } from './misc/matrix';\n\ntype FabricObjectWithTransformMatrix = FabricObject & {\n transformMatrix?: TMat2D;\n};\n\n/**\n * This function is an helper for svg import. it decompose the transformMatrix\n * and assign properties to object.\n * untransformed coordinates\n * @private\n */\nconst _assignTransformMatrixProps = (\n object: FabricObjectWithTransformMatrix,\n) => {\n if (object.transformMatrix) {\n const { scaleX, scaleY, angle, skewX } = qrDecompose(\n object.transformMatrix,\n );\n object.flipX = false;\n object.flipY = false;\n object.set(SCALE_X, scaleX);\n object.set(SCALE_Y, scaleY);\n object.angle = angle;\n object.skewX = skewX;\n object.skewY = 0;\n }\n};\n\n/**\n * This function is an helper for svg import. it removes the transform matrix\n * and set to object properties that fabricjs can handle\n * @private\n * @param {Object} preserveAspectRatioOptions\n */\nexport const removeTransformMatrixForSvgParsing = (\n object: FabricObjectWithTransformMatrix,\n preserveAspectRatioOptions?: any,\n) => {\n let center = object._findCenterFromElement();\n if (object.transformMatrix) {\n _assignTransformMatrixProps(object);\n center = center.transform(object.transformMatrix);\n }\n delete object.transformMatrix;\n if (preserveAspectRatioOptions) {\n object.scaleX *= preserveAspectRatioOptions.scaleX;\n object.scaleY *= preserveAspectRatioOptions.scaleY;\n (object as FabricImage).cropX = preserveAspectRatioOptions.cropX;\n (object as FabricImage).cropY = preserveAspectRatioOptions.cropY;\n center.x += preserveAspectRatioOptions.offsetLeft;\n center.y += preserveAspectRatioOptions.offsetTop;\n object.width = preserveAspectRatioOptions.width;\n object.height = preserveAspectRatioOptions.height;\n }\n object.setPositionByOrigin(center, CENTER, CENTER);\n};\n","import { getEnv, getFabricDocument } from '../../env';\nimport type { TSize } from '../../typedefs';\nimport { createCanvasElement, setStyle } from '../../util';\nimport type { CSSDimensions } from './util';\nimport { makeElementUnselectable, setCSSDimensions } from './util';\nimport type { CanvasItem } from './StaticCanvasDOMManager';\nimport { StaticCanvasDOMManager } from './StaticCanvasDOMManager';\nimport { setCanvasDimensions } from './util';\nimport { NONE } from '../../constants';\n\nexport class CanvasDOMManager extends StaticCanvasDOMManager {\n upper: CanvasItem;\n container: HTMLDivElement;\n\n constructor(\n arg0?: string | HTMLCanvasElement,\n {\n allowTouchScrolling = false,\n containerClass = '',\n }: {\n allowTouchScrolling?: boolean;\n /**\n * @deprecated here only for backward compatibility\n */\n containerClass?: string;\n } = {},\n ) {\n super(arg0);\n const { el: lowerCanvasEl } = this.lower;\n const upperCanvasEl = this.createUpperCanvas();\n this.upper = { el: upperCanvasEl, ctx: upperCanvasEl.getContext('2d')! };\n this.applyCanvasStyle(lowerCanvasEl, {\n allowTouchScrolling,\n });\n this.applyCanvasStyle(upperCanvasEl, {\n allowTouchScrolling,\n styles: {\n position: 'absolute',\n left: '0',\n top: '0',\n },\n });\n const container = this.createContainerElement();\n container.classList.add(containerClass);\n if (lowerCanvasEl.parentNode) {\n lowerCanvasEl.parentNode.replaceChild(container, lowerCanvasEl);\n }\n container.append(lowerCanvasEl, upperCanvasEl);\n this.container = container;\n }\n\n protected createUpperCanvas() {\n const { el: lowerCanvasEl } = this.lower;\n const el = createCanvasElement();\n // we assign the same classname of the lowerCanvas\n el.className = lowerCanvasEl.className;\n // but then we remove the lower-canvas specific className\n el.classList.remove('lower-canvas');\n // we add the specific upper-canvas class\n el.classList.add('upper-canvas');\n el.setAttribute('data-fabric', 'top');\n el.style.cssText = lowerCanvasEl.style.cssText;\n el.setAttribute('draggable', 'true');\n return el;\n }\n\n protected createContainerElement() {\n const container = getFabricDocument().createElement('div');\n container.setAttribute('data-fabric', 'wrapper');\n setStyle(container, {\n position: 'relative',\n });\n makeElementUnselectable(container);\n return container;\n }\n\n /**\n * @private\n * @param {HTMLCanvasElement} element canvas element to apply styles on\n */\n protected applyCanvasStyle(\n element: HTMLCanvasElement,\n options: {\n allowTouchScrolling?: boolean;\n styles?: Record;\n },\n ) {\n const { styles, allowTouchScrolling } = options;\n setStyle(element, {\n ...styles,\n 'touch-action': allowTouchScrolling ? 'manipulation' : NONE,\n });\n makeElementUnselectable(element);\n }\n\n setDimensions(size: TSize, retinaScaling: number) {\n super.setDimensions(size, retinaScaling);\n const { el, ctx } = this.upper;\n setCanvasDimensions(el, ctx, size, retinaScaling);\n }\n\n setCSSDimensions(size: Partial): void {\n super.setCSSDimensions(size);\n setCSSDimensions(this.upper.el, size);\n setCSSDimensions(this.container, size);\n }\n\n cleanupDOM(size: TSize) {\n const container = this.container,\n { el: lowerCanvasEl } = this.lower,\n { el: upperCanvasEl } = this.upper;\n super.cleanupDOM(size);\n container.removeChild(upperCanvasEl);\n container.removeChild(lowerCanvasEl);\n if (container.parentNode) {\n container.parentNode.replaceChild(lowerCanvasEl, container);\n }\n }\n\n dispose() {\n super.dispose();\n getEnv().dispose(this.upper.el);\n // @ts-expect-error disposing\n delete this.upper;\n // @ts-expect-error disposing\n delete this.container;\n }\n}\n","import type { ModifierKey, TOptionalModifierKey } from '../EventTypeDefs';\nimport type { TOptions } from '../typedefs';\nimport type { StaticCanvasOptions } from './StaticCanvasOptions';\n\nexport interface CanvasTransformOptions {\n /**\n * When true, objects can be transformed by one side (unproportionately)\n * when dragged on the corners that normally would not do that.\n * @type Boolean\n * @default\n * @since fabric 4.0 // changed name and default value\n */\n uniformScaling: boolean;\n\n /**\n * Indicates which key switches uniform scaling.\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * totally wrong named. this sounds like `uniform scaling`\n * if Canvas.uniformScaling is true, pressing this will set it to false\n * and viceversa.\n * @since 1.6.2\n * @type ModifierKey\n * @default\n */\n uniScaleKey: TOptionalModifierKey;\n\n /**\n * When true, objects use center point as the origin of scale transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredScaling: boolean;\n\n /**\n * When true, objects use center point as the origin of rotate transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredRotation: boolean;\n\n /**\n * Indicates which key enable centered Transform\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type ModifierKey\n * @default\n */\n centeredKey: TOptionalModifierKey;\n\n /**\n * Indicates which key enable alternate action on corner\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type ModifierKey\n * @default\n */\n altActionKey: TOptionalModifierKey;\n}\n\nexport interface CanvasSelectionOptions {\n /**\n * Indicates whether group selection should be enabled\n * @type Boolean\n * @default\n */\n selection: boolean;\n\n /**\n * Indicates which key or keys enable multiple click selection\n * Pass value as a string or array of strings\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or empty or containing any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.2\n * @type ModifierKey|ModifierKey[]\n * @default\n */\n selectionKey: TOptionalModifierKey | ModifierKey[];\n\n /**\n * Indicates which key enable alternative selection\n * in case of target overlapping with active object\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * For a series of reason that come from the general expectations on how\n * things should work, this feature works only for preserveObjectStacking true.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.5\n * @type null|ModifierKey\n * @default\n */\n altSelectionKey: TOptionalModifierKey;\n\n /**\n * Color of selection\n * @type String\n * @default\n */\n selectionColor: string;\n\n /**\n * Default dash array pattern\n * If not empty the selection border is dashed\n * @type Array\n */\n selectionDashArray: number[];\n\n /**\n * Color of the border of selection (usually slightly darker than color of selection itself)\n * @type String\n * @default\n */\n selectionBorderColor: string;\n\n /**\n * Width of a line used in object/group selection\n * @type Number\n * @default\n */\n selectionLineWidth: number;\n\n /**\n * Select only shapes that are fully contained in the dragged selection rectangle.\n * @type Boolean\n * @default\n */\n selectionFullyContained: boolean;\n}\n\nexport interface CanvasCursorOptions {\n /**\n * Default cursor value used when hovering over an object on canvas\n * @type CSSStyleDeclaration['cursor']\n * @default move\n */\n hoverCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Default cursor value used when moving an object on canvas\n * @type CSSStyleDeclaration['cursor']\n * @default move\n */\n moveCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Default cursor value used for the entire canvas\n * @type String\n * @default default\n */\n defaultCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Cursor value used during free drawing\n * @type String\n * @default crosshair\n */\n freeDrawingCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Cursor value used for disabled elements ( corners with disabled action )\n * @type String\n * @since 2.0.0\n * @default not-allowed\n */\n notAllowedCursor: CSSStyleDeclaration['cursor'];\n}\n\nexport interface TargetFindOptions {\n /**\n * When true, object detection happens on per-pixel basis rather than on per-bounding-box\n * @type Boolean\n * @default\n */\n perPixelTargetFind: boolean;\n\n /**\n * Number of pixels around target pixel to tolerate (consider active) during object detection\n * @type Number\n * @default\n */\n targetFindTolerance: number;\n\n /**\n * When true, target detection is skipped. Target detection will return always undefined.\n * click selection won't work anymore, events will fire with no targets.\n * if something is selected before setting it to true, it will be deselected at the first click.\n * area selection will still work. check the `selection` property too.\n * if you deactivate both, you should look into staticCanvas.\n * @type Boolean\n * @default\n */\n skipTargetFind: boolean;\n}\n\nexport interface CanvasEventsOptions {\n /**\n * Indicates if the right click on canvas can output the context menu or not\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n stopContextMenu: boolean;\n\n /**\n * Indicates if the canvas can fire right click events\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n fireRightClick: boolean;\n\n /**\n * Indicates if the canvas can fire middle click events\n * @type Boolean\n * @since 1.7.8\n * @default\n */\n fireMiddleClick: boolean;\n\n /**\n * When the option is enabled, PointerEvent is used instead of TPointerEvent.\n * @type Boolean\n * @default\n */\n enablePointerEvents: boolean;\n}\n\nexport interface CanvasOptions\n extends StaticCanvasOptions,\n CanvasTransformOptions,\n CanvasSelectionOptions,\n CanvasCursorOptions,\n TargetFindOptions,\n CanvasEventsOptions {\n /**\n * Default element class that's given to wrapper (div) element of canvas\n * @type String\n * @default\n * @deprecated customize {@link CanvasDOMManager} instead or access {@link elements} directly\n */\n containerClass: string;\n\n /**\n * Indicates whether objects should remain in current stack position when selected.\n * When false objects are brought to top and rendered as part of the selection group\n * @type Boolean\n * @default\n */\n preserveObjectStacking: boolean;\n}\n\nexport type TCanvasOptions = TOptions;\n\nexport const canvasDefaults: TOptions = {\n uniformScaling: true,\n uniScaleKey: 'shiftKey',\n centeredScaling: false,\n centeredRotation: false,\n centeredKey: 'altKey',\n altActionKey: 'shiftKey',\n\n selection: true,\n selectionKey: 'shiftKey',\n selectionColor: 'rgba(100, 100, 255, 0.3)',\n selectionDashArray: [],\n selectionBorderColor: 'rgba(255, 255, 255, 0.3)',\n selectionLineWidth: 1,\n selectionFullyContained: false,\n\n hoverCursor: 'move',\n moveCursor: 'move',\n defaultCursor: 'default',\n freeDrawingCursor: 'crosshair',\n notAllowedCursor: 'not-allowed',\n\n perPixelTargetFind: false,\n targetFindTolerance: 0,\n skipTargetFind: false,\n\n stopContextMenu: false,\n fireRightClick: false,\n fireMiddleClick: false,\n enablePointerEvents: false,\n\n containerClass: 'canvas-container',\n\n preserveObjectStacking: false,\n};\n","import { dragHandler } from '../controls/drag';\nimport { getActionFromCorner } from '../controls/util';\nimport { Point } from '../Point';\nimport { FabricObject } from '../shapes/Object/FabricObject';\nimport type {\n CanvasEvents,\n ModifierKey,\n TOptionalModifierKey,\n TPointerEvent,\n Transform,\n} from '../EventTypeDefs';\nimport {\n addTransformToObject,\n saveObjectTransform,\n} from '../util/misc/objectTransforms';\nimport type { TCanvasSizeOptions } from './StaticCanvas';\nimport { StaticCanvas } from './StaticCanvas';\nimport { isCollection } from '../Collection';\nimport { isTransparent } from '../util/misc/isTransparent';\nimport type {\n TMat2D,\n TOriginX,\n TOriginY,\n TSize,\n TSVGReviver,\n} from '../typedefs';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { getPointer, isTouchEvent } from '../util/dom_event';\nimport type { IText } from '../shapes/IText/IText';\nimport type { BaseBrush } from '../brushes/BaseBrush';\nimport { pick } from '../util/misc/pick';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { cos, createCanvasElement, sin } from '../util';\nimport { CanvasDOMManager } from './DOMManagers/CanvasDOMManager';\nimport {\n BOTTOM,\n CENTER,\n LEFT,\n MODIFIED,\n RESIZING,\n RIGHT,\n ROTATE,\n SCALE,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CanvasOptions } from './CanvasOptions';\nimport { canvasDefaults } from './CanvasOptions';\nimport { Intersection } from '../Intersection';\nimport { isActiveSelection } from '../util/typeAssertions';\n\n/**\n * Canvas class\n * @class Canvas\n * @extends StaticCanvas\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#canvas}\n *\n * @fires object:modified at the end of a transform\n * @fires object:rotating while an object is being rotated from the control\n * @fires object:scaling while an object is being scaled by controls\n * @fires object:moving while an object is being dragged\n * @fires object:skewing while an object is being skewed from the controls\n *\n * @fires before:transform before a transform is is started\n * @fires before:selection:cleared\n * @fires selection:cleared\n * @fires selection:updated\n * @fires selection:created\n *\n * @fires path:created after a drawing operation ends and the path is added\n * @fires mouse:down\n * @fires mouse:move\n * @fires mouse:up\n * @fires mouse:down:before on mouse down, before the inner fabric logic runs\n * @fires mouse:move:before on mouse move, before the inner fabric logic runs\n * @fires mouse:up:before on mouse up, before the inner fabric logic runs\n * @fires mouse:over\n * @fires mouse:out\n * @fires mouse:dblclick whenever a native dbl click event fires on the canvas.\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drag:enter object drag enter\n * @fires drag:leave object drag leave\n * @fires drop:before before drop event. Prepare for the drop event (same native event).\n * @fires drop\n * @fires drop:after after drop event. Run logic on canvas after event has been accepted/declined (same native event).\n * @example\n * let a: fabric.Object, b: fabric.Object;\n * let flag = false;\n * canvas.add(a, b);\n * a.on('drop:before', opt => {\n * // we want a to accept the drop even though it's below b in the stack\n * flag = this.canDrop(opt.e);\n * });\n * b.canDrop = function(e) {\n * !flag && this.draggableTextDelegate.canDrop(e);\n * }\n * b.on('dragover', opt => b.set('fill', opt.dropTarget === b ? 'pink' : 'black'));\n * a.on('drop', opt => {\n * opt.e.defaultPrevented // drop occurred\n * opt.didDrop // drop occurred on canvas\n * opt.target // drop target\n * opt.target !== a && a.set('text', 'I lost');\n * });\n * canvas.on('drop:after', opt => {\n * // inform user who won\n * if(!opt.e.defaultPrevented) {\n * // no winners\n * }\n * else if(!opt.didDrop) {\n * // my objects didn't win, some other lucky object\n * }\n * else {\n * // we have a winner it's opt.target!!\n * }\n * })\n *\n * @fires after:render at the end of the render process, receives the context in the callback\n * @fires before:render at start the render process, receives the context in the callback\n *\n * @fires contextmenu:before\n * @fires contextmenu\n * @example\n * let handler;\n * targets.forEach(target => {\n * target.on('contextmenu:before', opt => {\n * // decide which target should handle the event before canvas hijacks it\n * if (someCaseHappens && opt.targets.includes(target)) {\n * handler = target;\n * }\n * });\n * target.on('contextmenu', opt => {\n * // do something fantastic\n * });\n * });\n * canvas.on('contextmenu', opt => {\n * if (!handler) {\n * // no one takes responsibility, it's always left to me\n * // let's show them how it's done!\n * }\n * });\n *\n */\nexport class SelectableCanvas\n extends StaticCanvas\n implements Omit\n{\n declare _objects: FabricObject[];\n\n // transform config\n declare uniformScaling: boolean;\n declare uniScaleKey: TOptionalModifierKey;\n declare centeredScaling: boolean;\n declare centeredRotation: boolean;\n declare centeredKey: TOptionalModifierKey;\n declare altActionKey: TOptionalModifierKey;\n\n // selection config\n declare selection: boolean;\n declare selectionKey: TOptionalModifierKey | ModifierKey[];\n declare altSelectionKey: TOptionalModifierKey;\n declare selectionColor: string;\n declare selectionDashArray: number[];\n declare selectionBorderColor: string;\n declare selectionLineWidth: number;\n declare selectionFullyContained: boolean;\n\n // cursors\n declare hoverCursor: CSSStyleDeclaration['cursor'];\n declare moveCursor: CSSStyleDeclaration['cursor'];\n declare defaultCursor: CSSStyleDeclaration['cursor'];\n declare freeDrawingCursor: CSSStyleDeclaration['cursor'];\n declare notAllowedCursor: CSSStyleDeclaration['cursor'];\n\n declare containerClass: string;\n\n // target find config\n declare perPixelTargetFind: boolean;\n declare targetFindTolerance: number;\n declare skipTargetFind: boolean;\n\n /**\n * When true, mouse events on canvas (mousedown/mousemove/mouseup) result in free drawing.\n * After mousedown, mousemove creates a shape,\n * and then mouseup finalizes it and adds an instance of `fabric.Path` onto canvas.\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-4#free_drawing}\n * @type Boolean\n * @default\n */\n declare isDrawingMode: boolean;\n\n declare preserveObjectStacking: boolean;\n\n // event config\n declare stopContextMenu: boolean;\n declare fireRightClick: boolean;\n declare fireMiddleClick: boolean;\n\n /**\n * Keep track of the subTargets for Mouse Events, ordered bottom up from innermost nested subTarget\n * @type FabricObject[]\n */\n targets: FabricObject[] = [];\n\n /**\n * Keep track of the hovered target\n * @type FabricObject | null\n * @private\n */\n declare _hoveredTarget?: FabricObject;\n\n /**\n * hold the list of nested targets hovered\n * @type FabricObject[]\n * @private\n */\n _hoveredTargets: FabricObject[] = [];\n\n /**\n * hold the list of objects to render\n * @type FabricObject[]\n * @private\n */\n _objectsToRender?: FabricObject[];\n\n /**\n * hold a reference to a data structure that contains information\n * on the current on going transform\n * @type\n * @private\n */\n _currentTransform: Transform | null = null;\n\n /**\n * hold a reference to a data structure used to track the selection\n * box on canvas drag\n * on the current on going transform\n * x, y, deltaX and deltaY are in scene plane\n * @type\n * @private\n */\n protected _groupSelector: {\n x: number;\n y: number;\n deltaX: number;\n deltaY: number;\n } | null = null;\n\n /**\n * internal flag used to understand if the context top requires a cleanup\n * in case this is true, the contextTop will be cleared at the next render\n * @type boolean\n * @private\n */\n contextTopDirty = false;\n\n /**\n * During a mouse event we may need the pointer multiple times in multiple functions.\n * _absolutePointer holds a reference to the pointer in fabricCanvas/design coordinates that is valid for the event\n * lifespan. Every fabricJS mouse event create and delete the cache every time\n * We do this because there are some HTML DOM inspection functions to get the actual pointer coordinates\n * @type {Point}\n */\n protected declare _absolutePointer?: Point;\n\n /**\n * During a mouse event we may need the pointer multiple times in multiple functions.\n * _pointer holds a reference to the pointer in html coordinates that is valid for the event\n * lifespan. Every fabricJS mouse event create and delete the cache every time\n * We do this because there are some HTML DOM inspection functions to get the actual pointer coordinates\n * @type {Point}\n */\n protected declare _pointer?: Point;\n\n /**\n * During a mouse event we may need the target multiple times in multiple functions.\n * _target holds a reference to the target that is valid for the event\n * lifespan. Every fabricJS mouse event create and delete the cache every time\n * @type {FabricObject}\n */\n protected declare _target?: FabricObject;\n\n static ownDefaults = canvasDefaults;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...SelectableCanvas.ownDefaults };\n }\n\n declare elements: CanvasDOMManager;\n get upperCanvasEl() {\n return this.elements.upper?.el;\n }\n get contextTop() {\n return this.elements.upper?.ctx;\n }\n get wrapperEl() {\n return this.elements.container;\n }\n private declare pixelFindCanvasEl: HTMLCanvasElement;\n private declare pixelFindContext: CanvasRenderingContext2D;\n\n protected declare _isCurrentlyDrawing: boolean;\n declare freeDrawingBrush?: BaseBrush;\n declare _activeObject?: FabricObject;\n\n protected initElements(el?: string | HTMLCanvasElement) {\n this.elements = new CanvasDOMManager(el, {\n allowTouchScrolling: this.allowTouchScrolling,\n containerClass: this.containerClass,\n });\n this._createCacheCanvas();\n }\n\n /**\n * @private\n * @param {FabricObject} obj Object that was added\n */\n _onObjectAdded(obj: FabricObject) {\n this._objectsToRender = undefined;\n super._onObjectAdded(obj);\n }\n\n /**\n * @private\n * @param {FabricObject} obj Object that was removed\n */\n _onObjectRemoved(obj: FabricObject) {\n this._objectsToRender = undefined;\n // removing active object should fire \"selection:cleared\" events\n if (obj === this._activeObject) {\n this.fire('before:selection:cleared', { deselected: [obj] });\n this._discardActiveObject();\n this.fire('selection:cleared', { deselected: [obj] });\n obj.fire('deselected', {\n target: obj,\n });\n }\n if (obj === this._hoveredTarget) {\n this._hoveredTarget = undefined;\n this._hoveredTargets = [];\n }\n super._onObjectRemoved(obj);\n }\n\n _onStackOrderChanged() {\n this._objectsToRender = undefined;\n super._onStackOrderChanged();\n }\n\n /**\n * Divides objects in two groups, one to render immediately\n * and one to render as activeGroup.\n * @return {Array} objects to render immediately and pushes the other in the activeGroup.\n */\n _chooseObjectsToRender(): FabricObject[] {\n const activeObject = this._activeObject;\n return !this.preserveObjectStacking && activeObject\n ? this._objects\n .filter((object) => !object.group && object !== activeObject)\n .concat(activeObject)\n : this._objects;\n }\n\n /**\n * Renders both the top canvas and the secondary container canvas.\n */\n renderAll() {\n this.cancelRequestedRender();\n if (this.destroyed) {\n return;\n }\n if (this.contextTopDirty && !this._groupSelector && !this.isDrawingMode) {\n this.clearContext(this.contextTop);\n this.contextTopDirty = false;\n }\n if (this.hasLostContext) {\n this.renderTopLayer(this.contextTop);\n this.hasLostContext = false;\n }\n !this._objectsToRender &&\n (this._objectsToRender = this._chooseObjectsToRender());\n this.renderCanvas(this.getContext(), this._objectsToRender);\n }\n\n /**\n * text selection is rendered by the active text instance during the rendering cycle\n */\n renderTopLayer(ctx: CanvasRenderingContext2D): void {\n ctx.save();\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this.freeDrawingBrush && this.freeDrawingBrush._render();\n this.contextTopDirty = true;\n }\n // we render the top context - last object\n if (this.selection && this._groupSelector) {\n this._drawSelection(ctx);\n this.contextTopDirty = true;\n }\n ctx.restore();\n }\n\n /**\n * Method to render only the top canvas.\n * Also used to render the group selection box.\n * Does not render text selection.\n */\n renderTop() {\n const ctx = this.contextTop;\n this.clearContext(ctx);\n this.renderTopLayer(ctx);\n // todo: how do i know if the after:render is for the top or normal contex?\n this.fire('after:render', { ctx });\n }\n\n /**\n * Set the canvas tolerance value for pixel taret find.\n * Use only integer numbers.\n * @private\n */\n setTargetFindTolerance(value: number) {\n value = Math.round(value);\n this.targetFindTolerance = value;\n const retina = this.getRetinaScaling();\n const size = Math.ceil((value * 2 + 1) * retina);\n this.pixelFindCanvasEl.width = this.pixelFindCanvasEl.height = size;\n this.pixelFindContext.scale(retina, retina);\n }\n\n /**\n * Returns true if object is transparent at a certain location\n * Clarification: this is `is target transparent at location X or are controls there`\n * @TODO this seems dumb that we treat controls with transparency. we can find controls\n * programmatically without painting them, the cache canvas optimization is always valid\n * @param {FabricObject} target Object to check\n * @param {Number} x Left coordinate in viewport space\n * @param {Number} y Top coordinate in viewport space\n * @return {Boolean}\n */\n isTargetTransparent(target: FabricObject, x: number, y: number): boolean {\n const tolerance = this.targetFindTolerance;\n const ctx = this.pixelFindContext;\n this.clearContext(ctx);\n ctx.save();\n ctx.translate(-x + tolerance, -y + tolerance);\n ctx.transform(...this.viewportTransform);\n const selectionBgc = target.selectionBackgroundColor;\n target.selectionBackgroundColor = '';\n target.render(ctx);\n target.selectionBackgroundColor = selectionBgc;\n ctx.restore();\n // our canvas is square, and made around tolerance.\n // so tolerance in this case also represent the center of the canvas.\n const enhancedTolerance = Math.round(tolerance * this.getRetinaScaling());\n return isTransparent(\n ctx,\n enhancedTolerance,\n enhancedTolerance,\n enhancedTolerance,\n );\n }\n\n /**\n * takes an event and determines if selection key has been pressed\n * @private\n * @param {TPointerEvent} e Event object\n */\n _isSelectionKeyPressed(e: TPointerEvent): boolean {\n const sKey = this.selectionKey;\n if (!sKey) {\n return false;\n }\n if (Array.isArray(sKey)) {\n return !!sKey.find((key) => !!key && e[key] === true);\n } else {\n return e[sKey];\n }\n }\n\n /**\n * @private\n * @param {TPointerEvent} e Event object\n * @param {FabricObject} target\n */\n _shouldClearSelection(\n e: TPointerEvent,\n target?: FabricObject,\n ): target is undefined {\n const activeObjects = this.getActiveObjects(),\n activeObject = this._activeObject;\n\n return !!(\n !target ||\n (target &&\n activeObject &&\n activeObjects.length > 1 &&\n activeObjects.indexOf(target) === -1 &&\n activeObject !== target &&\n !this._isSelectionKeyPressed(e)) ||\n (target && !target.evented) ||\n (target && !target.selectable && activeObject && activeObject !== target)\n );\n }\n\n /**\n * This method will take in consideration a modifier key pressed and the control we are\n * about to drag, and try to guess the anchor point ( origin ) of the transormation.\n * This should be really in the realm of controls, and we should remove specific code for legacy\n * embedded actions.\n * @TODO this probably deserve discussion/rediscovery and change/refactor\n * @private\n * @deprecated\n * @param {FabricObject} target\n * @param {string} action\n * @param {boolean} altKey\n * @returns {boolean} true if the transformation should be centered\n */\n private _shouldCenterTransform(\n target: FabricObject,\n action: string,\n modifierKeyPressed: boolean,\n ) {\n if (!target) {\n return;\n }\n\n let centerTransform;\n\n if (\n action === SCALE ||\n action === SCALE_X ||\n action === SCALE_Y ||\n action === RESIZING\n ) {\n centerTransform = this.centeredScaling || target.centeredScaling;\n } else if (action === ROTATE) {\n centerTransform = this.centeredRotation || target.centeredRotation;\n }\n\n return centerTransform ? !modifierKeyPressed : modifierKeyPressed;\n }\n\n /**\n * Given the control clicked, determine the origin of the transform.\n * This is bad because controls can totally have custom names\n * should disappear before release 4.0\n * @private\n * @deprecated\n */\n _getOriginFromCorner(\n target: FabricObject,\n controlName: string,\n ): { x: TOriginX; y: TOriginY } {\n const origin = {\n x: target.originX,\n y: target.originY,\n };\n\n if (!controlName) {\n return origin;\n }\n\n // is a left control ?\n if (['ml', 'tl', 'bl'].includes(controlName)) {\n origin.x = RIGHT;\n // is a right control ?\n } else if (['mr', 'tr', 'br'].includes(controlName)) {\n origin.x = LEFT;\n }\n // is a top control ?\n if (['tl', 'mt', 'tr'].includes(controlName)) {\n origin.y = BOTTOM;\n // is a bottom control ?\n } else if (['bl', 'mb', 'br'].includes(controlName)) {\n origin.y = TOP;\n }\n return origin;\n }\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {FabricObject} target\n * @param {boolean} [alreadySelected] pass true to setup the active control\n */\n _setupCurrentTransform(\n e: TPointerEvent,\n target: FabricObject,\n alreadySelected: boolean,\n ): void {\n const pointer = target.group\n ? // transform pointer to target's containing coordinate plane\n sendPointToPlane(\n this.getScenePoint(e),\n undefined,\n target.group.calcTransformMatrix(),\n )\n : this.getScenePoint(e);\n const { key: corner = '', control } = target.getActiveControl() || {},\n actionHandler =\n alreadySelected && control\n ? control.getActionHandler(e, target, control)?.bind(control)\n : dragHandler,\n action = getActionFromCorner(alreadySelected, corner, e, target),\n altKey = e[this.centeredKey as ModifierKey],\n origin = this._shouldCenterTransform(target, action, altKey)\n ? ({ x: CENTER, y: CENTER } as const)\n : this._getOriginFromCorner(target, corner),\n /**\n * relative to target's containing coordinate plane\n * both agree on every point\n **/\n transform: Transform = {\n target: target,\n action,\n actionHandler,\n actionPerformed: false,\n corner,\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n offsetX: pointer.x - target.left,\n offsetY: pointer.y - target.top,\n originX: origin.x,\n originY: origin.y,\n ex: pointer.x,\n ey: pointer.y,\n lastX: pointer.x,\n lastY: pointer.y,\n theta: degreesToRadians(target.angle),\n width: target.width,\n height: target.height,\n shiftKey: e.shiftKey,\n altKey,\n original: {\n ...saveObjectTransform(target),\n originX: origin.x,\n originY: origin.y,\n },\n };\n\n this._currentTransform = transform;\n\n this.fire('before:transform', {\n e,\n transform,\n });\n }\n\n /**\n * Set the cursor type of the canvas element\n * @param {String} value Cursor type of the canvas element.\n * @see http://www.w3.org/TR/css3-ui/#cursor\n */\n setCursor(value: CSSStyleDeclaration['cursor']): void {\n this.upperCanvasEl.style.cursor = value;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx to draw the selection on\n */\n _drawSelection(ctx: CanvasRenderingContext2D): void {\n const { x, y, deltaX, deltaY } = this._groupSelector!,\n start = new Point(x, y).transform(this.viewportTransform),\n extent = new Point(x + deltaX, y + deltaY).transform(\n this.viewportTransform,\n ),\n strokeOffset = this.selectionLineWidth / 2;\n let minX = Math.min(start.x, extent.x),\n minY = Math.min(start.y, extent.y),\n maxX = Math.max(start.x, extent.x),\n maxY = Math.max(start.y, extent.y);\n\n if (this.selectionColor) {\n ctx.fillStyle = this.selectionColor;\n ctx.fillRect(minX, minY, maxX - minX, maxY - minY);\n }\n\n if (!this.selectionLineWidth || !this.selectionBorderColor) {\n return;\n }\n ctx.lineWidth = this.selectionLineWidth;\n ctx.strokeStyle = this.selectionBorderColor;\n\n minX += strokeOffset;\n minY += strokeOffset;\n maxX -= strokeOffset;\n maxY -= strokeOffset;\n // selection border\n // @TODO: is _setLineDash still necessary on modern canvas?\n FabricObject.prototype._setLineDash.call(\n this,\n ctx,\n this.selectionDashArray,\n );\n ctx.strokeRect(minX, minY, maxX - minX, maxY - minY);\n }\n\n /**\n * Method that determines what object we are clicking on\n * 11/09/2018 TODO: would be cool if findTarget could discern between being a full target\n * or the outside part of the corner.\n * @param {Event} e mouse event\n * @return {FabricObject | null} the target found\n */\n findTarget(e: TPointerEvent): FabricObject | undefined {\n if (this.skipTargetFind) {\n return undefined;\n }\n\n const pointer = this.getViewportPoint(e),\n activeObject = this._activeObject,\n aObjects = this.getActiveObjects();\n\n this.targets = [];\n\n if (activeObject && aObjects.length >= 1) {\n if (activeObject.findControl(pointer, isTouchEvent(e))) {\n // if we hit the corner of the active object, let's return that.\n return activeObject;\n } else if (\n aObjects.length > 1 &&\n // check pointer is over active selection and possibly perform `subTargetCheck`\n this.searchPossibleTargets([activeObject], pointer)\n ) {\n // active selection does not select sub targets like normal groups\n return activeObject;\n } else if (\n activeObject === this.searchPossibleTargets([activeObject], pointer)\n ) {\n // active object is not an active selection\n if (!this.preserveObjectStacking) {\n return activeObject;\n } else {\n const subTargets = this.targets;\n this.targets = [];\n const target = this.searchPossibleTargets(this._objects, pointer);\n if (\n e[this.altSelectionKey as ModifierKey] &&\n target &&\n target !== activeObject\n ) {\n // alt selection: select active object even though it is not the top most target\n // restore targets\n this.targets = subTargets;\n return activeObject;\n }\n return target;\n }\n }\n }\n\n return this.searchPossibleTargets(this._objects, pointer);\n }\n\n /**\n * Checks if the point is inside the object selection area including padding\n * @param {FabricObject} obj Object to test against\n * @param {Object} [pointer] point in scene coordinates\n * @return {Boolean} true if point is contained within an area of given object\n * @private\n */\n private _pointIsInObjectSelectionArea(obj: FabricObject, point: Point) {\n // getCoords will already take care of group de-nesting\n let coords = obj.getCoords();\n const viewportZoom = this.getZoom();\n const padding = obj.padding / viewportZoom;\n if (padding) {\n const [tl, tr, br, bl] = coords;\n // what is the angle of the object?\n // we could use getTotalAngle, but is way easier to look at it\n // from how coords are oriented, since if something went wrong\n // at least we are consistent.\n const angleRadians = Math.atan2(tr.y - tl.y, tr.x - tl.x),\n cosP = cos(angleRadians) * padding,\n sinP = sin(angleRadians) * padding,\n cosPSinP = cosP + sinP,\n cosPMinusSinP = cosP - sinP;\n\n coords = [\n new Point(tl.x - cosPMinusSinP, tl.y - cosPSinP),\n new Point(tr.x + cosPSinP, tr.y - cosPMinusSinP),\n new Point(br.x + cosPMinusSinP, br.y + cosPSinP),\n new Point(bl.x - cosPSinP, bl.y + cosPMinusSinP),\n ];\n // in case of padding we calculate the new coords on the fly.\n // otherwise we have to maintain 2 sets of coordinates for everything.\n // we can reiterate on storing them.\n // if this is slow, for now the semplification is large and doesn't impact\n // rendering.\n // the idea behind this is that outside target check we don't need ot know\n // where those coords are\n }\n return Intersection.isPointInPolygon(point, coords);\n }\n\n /**\n * Checks point is inside the object selection condition. Either area with padding\n * or over pixels if perPixelTargetFind is enabled\n * @param {FabricObject} obj Object to test against\n * @param {Object} [pointer] point from viewport.\n * @return {Boolean} true if point is contained within an area of given object\n * @private\n */\n _checkTarget(obj: FabricObject, pointer: Point): boolean {\n if (\n obj &&\n obj.visible &&\n obj.evented &&\n this._pointIsInObjectSelectionArea(\n obj,\n sendPointToPlane(pointer, undefined, this.viewportTransform),\n )\n ) {\n if (\n (this.perPixelTargetFind || obj.perPixelTargetFind) &&\n !(obj as unknown as IText).isEditing\n ) {\n if (!this.isTargetTransparent(obj, pointer.x, pointer.y)) {\n return true;\n }\n } else {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Internal Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted\n * @param {Array} [objects] objects array to look into\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\n * @return {FabricObject} **top most object from given `objects`** that contains pointer\n * @private\n */\n _searchPossibleTargets(\n objects: FabricObject[],\n pointer: Point,\n ): FabricObject | undefined {\n // Cache all targets where their bounding box contains point.\n let i = objects.length;\n // Do not check for currently grouped objects, since we check the parent group itself.\n // until we call this function specifically to search inside the activeGroup\n while (i--) {\n const target = objects[i];\n if (this._checkTarget(target, pointer)) {\n if (isCollection(target) && target.subTargetCheck) {\n const subTarget = this._searchPossibleTargets(\n target._objects as FabricObject[],\n pointer,\n );\n subTarget && this.targets.push(subTarget);\n }\n return target;\n }\n }\n }\n\n /**\n * Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted\n * @see {@link _searchPossibleTargets}\n * @param {FabricObject[]} [objects] objects array to look into\n * @param {Point} [pointer] coordinates from viewport to check.\n * @return {FabricObject} **top most object on screen** that contains pointer\n */\n searchPossibleTargets(\n objects: FabricObject[],\n pointer: Point,\n ): FabricObject | undefined {\n const target = this._searchPossibleTargets(objects, pointer);\n\n // if we found something in this.targets, and the group is interactive, return the innermost subTarget\n // that is still interactive\n // TODO: reverify why interactive. the target should be returned always, but selected only\n // if interactive.\n if (\n target &&\n isCollection(target) &&\n target.interactive &&\n this.targets[0]\n ) {\n /** targets[0] is the innermost nested target, but it could be inside non interactive groups and so not a selection target */\n const targets = this.targets;\n for (let i = targets.length - 1; i > 0; i--) {\n const t = targets[i];\n if (!(isCollection(t) && t.interactive)) {\n // one of the subtargets was not interactive. that is the last subtarget we can return.\n // we can't dig more deep;\n return t;\n }\n }\n return targets[0];\n }\n\n return target;\n }\n\n /**\n * @returns point existing in the same plane as the {@link HTMLCanvasElement},\n * `(0, 0)` being the top left corner of the {@link HTMLCanvasElement}.\n * This means that changes to the {@link viewportTransform} do not change the values of the point\n * and it remains unchanged from the viewer's perspective.\n *\n * @example\n * const scenePoint = sendPointToPlane(\n * this.getViewportPoint(e),\n * undefined,\n * canvas.viewportTransform\n * );\n *\n */\n getViewportPoint(e: TPointerEvent) {\n if (this._pointer) {\n return this._pointer;\n }\n return this.getPointer(e, true);\n }\n\n /**\n * @returns point existing in the scene (the same plane as the plane {@link FabricObject#getCenterPoint} exists in).\n * This means that changes to the {@link viewportTransform} do not change the values of the point,\n * however, from the viewer's perspective, the point is changed.\n *\n * @example\n * const viewportPoint = sendPointToPlane(\n * this.getScenePoint(e),\n * canvas.viewportTransform\n * );\n *\n */\n getScenePoint(e: TPointerEvent) {\n if (this._absolutePointer) {\n return this._absolutePointer;\n }\n return this.getPointer(e);\n }\n\n /**\n * Returns pointer relative to canvas.\n *\n * @deprecated This method is deprecated since v6 to protect you from misuse.\n * Use {@link getViewportPoint} or {@link getScenePoint} instead.\n *\n * @param {Event} e\n * @param {Boolean} [fromViewport] whether to return the point from the viewport or in the scene\n * @return {Point}\n */\n getPointer(e: TPointerEvent, fromViewport = false): Point {\n const upperCanvasEl = this.upperCanvasEl,\n bounds = upperCanvasEl.getBoundingClientRect();\n let pointer = getPointer(e),\n boundsWidth = bounds.width || 0,\n boundsHeight = bounds.height || 0;\n\n if (!boundsWidth || !boundsHeight) {\n if (TOP in bounds && BOTTOM in bounds) {\n boundsHeight = Math.abs(bounds.top - bounds.bottom);\n }\n if (RIGHT in bounds && LEFT in bounds) {\n boundsWidth = Math.abs(bounds.right - bounds.left);\n }\n }\n\n this.calcOffset();\n pointer.x = pointer.x - this._offset.left;\n pointer.y = pointer.y - this._offset.top;\n if (!fromViewport) {\n pointer = sendPointToPlane(pointer, undefined, this.viewportTransform);\n }\n\n const retinaScaling = this.getRetinaScaling();\n if (retinaScaling !== 1) {\n pointer.x /= retinaScaling;\n pointer.y /= retinaScaling;\n }\n\n // If bounds are not available (i.e. not visible), do not apply scale.\n const cssScale =\n boundsWidth === 0 || boundsHeight === 0\n ? new Point(1, 1)\n : new Point(\n upperCanvasEl.width / boundsWidth,\n upperCanvasEl.height / boundsHeight,\n );\n\n return pointer.multiply(cssScale);\n }\n\n /**\n * Internal use only\n * @protected\n */\n protected _setDimensionsImpl(\n dimensions: TSize,\n options?: TCanvasSizeOptions,\n ) {\n // @ts-expect-error this method exists in the subclass - should be moved or declared as abstract\n this._resetTransformEventData();\n super._setDimensionsImpl(dimensions, options);\n if (this._isCurrentlyDrawing) {\n this.freeDrawingBrush &&\n this.freeDrawingBrush._setBrushStyles(this.contextTop);\n }\n }\n\n protected _createCacheCanvas() {\n this.pixelFindCanvasEl = createCanvasElement();\n this.pixelFindContext = this.pixelFindCanvasEl.getContext('2d', {\n willReadFrequently: true,\n })!;\n this.setTargetFindTolerance(this.targetFindTolerance);\n }\n\n /**\n * Returns context of top canvas where interactions are drawn\n * @returns {CanvasRenderingContext2D}\n */\n getTopContext(): CanvasRenderingContext2D {\n return this.elements.upper.ctx;\n }\n\n /**\n * Returns context of canvas where object selection is drawn\n * @alias\n * @return {CanvasRenderingContext2D}\n */\n getSelectionContext(): CanvasRenderingContext2D {\n return this.elements.upper.ctx;\n }\n\n /**\n * Returns <canvas> element on which object selection is drawn\n * @return {HTMLCanvasElement}\n */\n getSelectionElement(): HTMLCanvasElement {\n return this.elements.upper.el;\n }\n\n /**\n * Returns currently active object\n * @return {FabricObject | null} active object\n */\n getActiveObject(): FabricObject | undefined {\n return this._activeObject;\n }\n\n /**\n * Returns an array with the current selected objects\n * @return {FabricObject[]} active objects array\n */\n getActiveObjects(): FabricObject[] {\n const active = this._activeObject;\n return isActiveSelection(active)\n ? active.getObjects()\n : active\n ? [active]\n : [];\n }\n\n /**\n * @private\n * Compares the old activeObject with the current one and fires correct events\n * @param {FabricObject[]} oldObjects old activeObject\n * @param {TPointerEvent} e mouse event triggering the selection events\n */\n _fireSelectionEvents(oldObjects: FabricObject[], e?: TPointerEvent) {\n let somethingChanged = false,\n invalidate = false;\n const objects = this.getActiveObjects(),\n added: FabricObject[] = [],\n removed: FabricObject[] = [];\n\n oldObjects.forEach((target) => {\n if (!objects.includes(target)) {\n somethingChanged = true;\n target.fire('deselected', {\n e,\n target,\n });\n removed.push(target);\n }\n });\n\n objects.forEach((target) => {\n if (!oldObjects.includes(target)) {\n somethingChanged = true;\n target.fire('selected', {\n e,\n target,\n });\n added.push(target);\n }\n });\n\n if (oldObjects.length > 0 && objects.length > 0) {\n invalidate = true;\n somethingChanged &&\n this.fire('selection:updated', {\n e,\n selected: added,\n deselected: removed,\n });\n } else if (objects.length > 0) {\n invalidate = true;\n this.fire('selection:created', {\n e,\n selected: added,\n });\n } else if (oldObjects.length > 0) {\n invalidate = true;\n this.fire('selection:cleared', {\n e,\n deselected: removed,\n });\n }\n invalidate && (this._objectsToRender = undefined);\n }\n\n /**\n * Sets given object as the only active object on canvas\n * @param {FabricObject} object Object to set as an active one\n * @param {TPointerEvent} [e] Event (passed along when firing \"object:selected\")\n * @return {Boolean} true if the object has been selected\n */\n setActiveObject(object: FabricObject, e?: TPointerEvent) {\n // we can't inline this, since _setActiveObject will change what getActiveObjects returns\n const currentActives = this.getActiveObjects();\n const selected = this._setActiveObject(object, e);\n this._fireSelectionEvents(currentActives, e);\n return selected;\n }\n\n /**\n * This is supposed to be equivalent to setActiveObject but without firing\n * any event. There is commitment to have this stay this way.\n * This is the functional part of setActiveObject.\n * @param {Object} object to set as active\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\n * @return {Boolean} true if the object has been selected\n */\n _setActiveObject(object: FabricObject, e?: TPointerEvent) {\n const prevActiveObject = this._activeObject;\n if (prevActiveObject === object) {\n return false;\n }\n // after calling this._discardActiveObject, this,_activeObject could be undefined\n if (!this._discardActiveObject(e, object) && this._activeObject) {\n // refused to deselect\n return false;\n }\n if (object.onSelect({ e })) {\n return false;\n }\n\n this._activeObject = object;\n\n if (isActiveSelection(object) && prevActiveObject !== object) {\n object.set('canvas', this);\n }\n object.setCoords();\n\n return true;\n }\n\n /**\n * This is supposed to be equivalent to discardActiveObject but without firing\n * any selection events ( can still fire object transformation events ). There is commitment to have this stay this way.\n * This is the functional part of discardActiveObject.\n * @param {Event} [e] Event (passed along when firing \"object:deselected\")\n * @param {Object} object the next object to set as active, reason why we are discarding this\n * @return {Boolean} true if the active object has been discarded\n */\n _discardActiveObject(\n e?: TPointerEvent,\n object?: FabricObject,\n ): this is { _activeObject: undefined } {\n const obj = this._activeObject;\n if (obj) {\n // onDeselect return TRUE to cancel selection;\n if (obj.onDeselect({ e, object })) {\n return false;\n }\n if (this._currentTransform && this._currentTransform.target === obj) {\n this.endCurrentTransform(e);\n }\n if (isActiveSelection(obj) && obj === this._hoveredTarget) {\n this._hoveredTarget = undefined;\n }\n this._activeObject = undefined;\n return true;\n }\n return false;\n }\n\n /**\n * Discards currently active object and fire events. If the function is called by fabric\n * as a consequence of a mouse event, the event is passed as a parameter and\n * sent to the fire function for the custom events. When used as a method the\n * e param does not have any application.\n * @param {event} e\n * @return {Boolean} true if the active object has been discarded\n */\n discardActiveObject(e?: TPointerEvent): this is { _activeObject: undefined } {\n const currentActives = this.getActiveObjects(),\n activeObject = this.getActiveObject();\n if (currentActives.length) {\n this.fire('before:selection:cleared', {\n e,\n deselected: [activeObject!],\n });\n }\n const discarded = this._discardActiveObject(e);\n this._fireSelectionEvents(currentActives, e);\n return discarded;\n }\n\n /**\n * End the current transform.\n * You don't usually need to call this method unless you are interrupting a user initiated transform\n * because of some other event ( a press of key combination, or something that block the user UX )\n * @param {Event} [e] send the mouse event that generate the finalize down, so it can be used in the event\n */\n endCurrentTransform(e?: TPointerEvent) {\n const transform = this._currentTransform;\n this._finalizeCurrentTransform(e);\n if (transform && transform.target) {\n // this could probably go inside _finalizeCurrentTransform\n transform.target.isMoving = false;\n }\n this._currentTransform = null;\n }\n\n /**\n * @private\n * @param {Event} e send the mouse event that generate the finalize down, so it can be used in the event\n */\n _finalizeCurrentTransform(e?: TPointerEvent) {\n const transform = this._currentTransform!,\n target = transform.target,\n options = {\n e,\n target,\n transform,\n action: transform.action,\n };\n\n if (target._scaling) {\n target._scaling = false;\n }\n\n target.setCoords();\n\n if (transform.actionPerformed) {\n this.fire('object:modified', options);\n target.fire(MODIFIED, options);\n }\n }\n\n /**\n * Sets viewport transformation of this canvas instance\n * @param {Array} vpt a Canvas 2D API transform matrix\n */\n setViewportTransform(vpt: TMat2D) {\n super.setViewportTransform(vpt);\n const activeObject = this._activeObject;\n if (activeObject) {\n activeObject.setCoords();\n }\n }\n\n /**\n * @override clears active selection ref and interactive canvas elements and contexts\n */\n destroy() {\n // dispose of active selection\n const activeObject = this._activeObject;\n if (isActiveSelection(activeObject)) {\n activeObject.removeAll();\n activeObject.dispose();\n }\n\n delete this._activeObject;\n\n super.destroy();\n\n // free resources\n\n // pixel find canvas\n // @ts-expect-error disposing\n this.pixelFindContext = null;\n // @ts-expect-error disposing\n this.pixelFindCanvasEl = undefined;\n }\n\n /**\n * Clears all contexts (background, main, top) of an instance\n */\n clear() {\n // discard active object and fire events\n this.discardActiveObject();\n // make sure we clear the active object in case it refused to be discarded\n this._activeObject = undefined;\n this.clearContext(this.contextTop);\n super.clear();\n }\n\n /**\n * Draws objects' controls (borders/controls)\n * @param {CanvasRenderingContext2D} ctx Context to render controls on\n */\n drawControls(ctx: CanvasRenderingContext2D) {\n const activeObject = this._activeObject;\n\n if (activeObject) {\n activeObject._renderControls(ctx);\n }\n }\n\n /**\n * @private\n */\n protected _toObject(\n instance: FabricObject,\n methodName: 'toObject' | 'toDatalessObject',\n propertiesToInclude: string[],\n ): Record {\n // If the object is part of the current selection group, it should\n // be transformed appropriately\n // i.e. it should be serialised as it would appear if the selection group\n // were to be destroyed.\n const originalProperties = this._realizeGroupTransformOnObject(instance),\n object = super._toObject(instance, methodName, propertiesToInclude);\n //Undo the damage we did by changing all of its properties\n instance.set(originalProperties);\n return object;\n }\n\n /**\n * Realizes an object's group transformation on it\n * @private\n * @param {FabricObject} [instance] the object to transform (gets mutated)\n * @returns the original values of instance which were changed\n */\n private _realizeGroupTransformOnObject(\n instance: FabricObject,\n ): Partial {\n const { group } = instance;\n if (group && isActiveSelection(group) && this._activeObject === group) {\n const layoutProps = [\n 'angle',\n 'flipX',\n 'flipY',\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n ] as (keyof typeof instance)[];\n const originalValues = pick(instance, layoutProps);\n addTransformToObject(instance, group.calcOwnMatrix());\n return originalValues;\n } else {\n return {};\n }\n }\n\n /**\n * @private\n */\n _setSVGObject(\n markup: string[],\n instance: FabricObject,\n reviver?: TSVGReviver,\n ) {\n // If the object is in a selection group, simulate what would happen to that\n // object when the group is deselected\n const originalProperties = this._realizeGroupTransformOnObject(instance);\n super._setSVGObject(markup, instance, reviver);\n instance.set(originalProperties);\n }\n}\n","import type { TPointerEvent } from '../EventTypeDefs';\nimport type { ITextBehavior } from '../shapes/IText/ITextBehavior';\nimport { removeFromArray } from '../util/internals/removeFromArray';\nimport type { Canvas } from './Canvas';\n\n/**\n * In charge of synchronizing all interactive text instances of a canvas\n */\nexport class TextEditingManager {\n private targets: ITextBehavior[] = [];\n private declare target?: ITextBehavior;\n private __disposer: VoidFunction;\n\n constructor(canvas: Canvas) {\n const cb = () => {\n const { hiddenTextarea } =\n (canvas.getActiveObject() as ITextBehavior) || {};\n hiddenTextarea && hiddenTextarea.focus();\n };\n const el = canvas.upperCanvasEl;\n el.addEventListener('click', cb);\n this.__disposer = () => el.removeEventListener('click', cb);\n }\n\n exitTextEditing() {\n this.target = undefined;\n this.targets.forEach((target) => {\n if (target.isEditing) {\n target.exitEditing();\n }\n });\n }\n\n add(target: ITextBehavior) {\n this.targets.push(target);\n }\n\n remove(target: ITextBehavior) {\n this.unregister(target);\n removeFromArray(this.targets, target);\n }\n\n register(target: ITextBehavior) {\n this.target = target;\n }\n\n unregister(target: ITextBehavior) {\n if (target === this.target) {\n this.target = undefined;\n }\n }\n\n onMouseMove(e: TPointerEvent) {\n this.target?.isEditing && this.target.updateSelectionOnMouseMove(e);\n }\n\n clear() {\n this.targets = [];\n this.target = undefined;\n }\n\n dispose() {\n this.clear();\n this.__disposer();\n // @ts-expect-error disposing\n delete this.__disposer;\n }\n}\n","import { classRegistry } from '../ClassRegistry';\nimport { NONE } from '../constants';\nimport type {\n CanvasEvents,\n DragEventData,\n ObjectEvents,\n TPointerEvent,\n TPointerEventNames,\n Transform,\n} from '../EventTypeDefs';\nimport { Point } from '../Point';\nimport type { ActiveSelection } from '../shapes/ActiveSelection';\nimport type { Group } from '../shapes/Group';\nimport type { IText } from '../shapes/IText/IText';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { isTouchEvent, stopEvent } from '../util/dom_event';\nimport { getDocumentFromElement, getWindowFromElement } from '../util/dom_misc';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { isActiveSelection } from '../util/typeAssertions';\nimport type { CanvasOptions, TCanvasOptions } from './CanvasOptions';\nimport { SelectableCanvas } from './SelectableCanvas';\nimport { TextEditingManager } from './TextEditingManager';\n\nconst addEventOptions = { passive: false } as EventListenerOptions;\n\nconst getEventPoints = (canvas: Canvas, e: TPointerEvent) => {\n const viewportPoint = canvas.getViewportPoint(e);\n const scenePoint = canvas.getScenePoint(e);\n return {\n viewportPoint,\n scenePoint,\n pointer: viewportPoint,\n absolutePointer: scenePoint,\n };\n};\n\n// just to be clear, the utils are now deprecated and those are here exactly as minifier helpers\n// because el.addEventListener can't me be minified while a const yes and we use it 47 times in this file.\n// few bytes but why give it away.\nconst addListener = (\n el: HTMLElement | Document,\n ...args: Parameters\n) => el.addEventListener(...args);\nconst removeListener = (\n el: HTMLElement | Document,\n ...args: Parameters\n) => el.removeEventListener(...args);\n\nconst syntheticEventConfig = {\n mouse: {\n in: 'over',\n out: 'out',\n targetIn: 'mouseover',\n targetOut: 'mouseout',\n canvasIn: 'mouse:over',\n canvasOut: 'mouse:out',\n },\n drag: {\n in: 'enter',\n out: 'leave',\n targetIn: 'dragenter',\n targetOut: 'dragleave',\n canvasIn: 'drag:enter',\n canvasOut: 'drag:leave',\n },\n} as const;\n\ntype TSyntheticEventContext = {\n mouse: { e: TPointerEvent };\n drag: DragEventData;\n};\n\nexport class Canvas extends SelectableCanvas implements CanvasOptions {\n /**\n * Contains the id of the touch event that owns the fabric transform\n * @type Number\n * @private\n */\n declare mainTouchId?: number;\n\n declare enablePointerEvents: boolean;\n\n /**\n * Holds a reference to a setTimeout timer for event synchronization\n * @type number\n * @private\n */\n private declare _willAddMouseDown: number;\n\n /**\n * Holds a reference to an object on the canvas that is receiving the drag over event.\n * @type FabricObject\n * @private\n */\n private declare _draggedoverTarget?: FabricObject;\n\n /**\n * Holds a reference to an object on the canvas from where the drag operation started\n * @type FabricObject\n * @private\n */\n private declare _dragSource?: FabricObject;\n\n /**\n * Holds a reference to an object on the canvas that is the current drop target\n * May differ from {@link _draggedoverTarget}\n * @todo inspect whether {@link _draggedoverTarget} and {@link _dropTarget} should be merged somehow\n * @type FabricObject\n * @private\n */\n private declare _dropTarget: FabricObject | undefined;\n\n private _isClick: boolean;\n\n textEditingManager = new TextEditingManager(this);\n\n constructor(el?: string | HTMLCanvasElement, options: TCanvasOptions = {}) {\n super(el, options);\n // bind event handlers\n (\n [\n '_onMouseDown',\n '_onTouchStart',\n '_onMouseMove',\n '_onMouseUp',\n '_onTouchEnd',\n '_onResize',\n // '_onGesture',\n // '_onDrag',\n // '_onShake',\n // '_onLongPress',\n // '_onOrientationChange',\n '_onMouseWheel',\n '_onMouseOut',\n '_onMouseEnter',\n '_onContextMenu',\n '_onDoubleClick',\n '_onDragStart',\n '_onDragEnd',\n '_onDragProgress',\n '_onDragOver',\n '_onDragEnter',\n '_onDragLeave',\n '_onDrop',\n ] as (keyof this)[]\n ).forEach((eventHandler) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n this[eventHandler] = (this[eventHandler] as Function).bind(this);\n });\n // register event handlers\n this.addOrRemove(addListener, 'add');\n }\n\n /**\n * return an event prefix pointer or mouse.\n * @private\n */\n private _getEventPrefix() {\n return this.enablePointerEvents ? 'pointer' : 'mouse';\n }\n\n addOrRemove(functor: any, _eventjsFunctor: 'add' | 'remove') {\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n functor(getWindowFromElement(canvasElement), 'resize', this._onResize);\n functor(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n functor(\n canvasElement,\n `${eventTypePrefix}move`,\n this._onMouseMove,\n addEventOptions,\n );\n functor(canvasElement, `${eventTypePrefix}out`, this._onMouseOut);\n functor(canvasElement, `${eventTypePrefix}enter`, this._onMouseEnter);\n functor(canvasElement, 'wheel', this._onMouseWheel);\n functor(canvasElement, 'contextmenu', this._onContextMenu);\n functor(canvasElement, 'dblclick', this._onDoubleClick);\n functor(canvasElement, 'dragstart', this._onDragStart);\n functor(canvasElement, 'dragend', this._onDragEnd);\n functor(canvasElement, 'dragover', this._onDragOver);\n functor(canvasElement, 'dragenter', this._onDragEnter);\n functor(canvasElement, 'dragleave', this._onDragLeave);\n functor(canvasElement, 'drop', this._onDrop);\n if (!this.enablePointerEvents) {\n functor(canvasElement, 'touchstart', this._onTouchStart, addEventOptions);\n }\n // if (typeof eventjs !== 'undefined' && eventjsFunctor in eventjs) {\n // eventjs[eventjsFunctor](canvasElement, 'gesture', this._onGesture);\n // eventjs[eventjsFunctor](canvasElement, 'drag', this._onDrag);\n // eventjs[eventjsFunctor](\n // canvasElement,\n // 'orientation',\n // this._onOrientationChange\n // );\n // eventjs[eventjsFunctor](canvasElement, 'shake', this._onShake);\n // eventjs[eventjsFunctor](canvasElement, 'longpress', this._onLongPress);\n // }\n }\n\n /**\n * Removes all event listeners\n */\n removeListeners() {\n this.addOrRemove(removeListener, 'remove');\n // if you dispose on a mouseDown, before mouse up, you need to clean document to...\n const eventTypePrefix = this._getEventPrefix();\n const doc = getDocumentFromElement(this.upperCanvasEl);\n removeListener(\n doc,\n `${eventTypePrefix}up`,\n this._onMouseUp as EventListener,\n );\n removeListener(\n doc,\n 'touchend',\n this._onTouchEnd as EventListener,\n addEventOptions,\n );\n removeListener(\n doc,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n removeListener(\n doc,\n 'touchmove',\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n }\n\n /**\n * @private\n * @param {Event} [e] Event object fired on wheel event\n */\n private _onMouseWheel(e: MouseEvent) {\n this.__onMouseWheel(e);\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n private _onMouseOut(e: TPointerEvent) {\n const target = this._hoveredTarget;\n const shared = {\n e,\n ...getEventPoints(this, e),\n };\n this.fire('mouse:out', { ...shared, target });\n this._hoveredTarget = undefined;\n target && target.fire('mouseout', { ...shared });\n this._hoveredTargets.forEach((nestedTarget) => {\n this.fire('mouse:out', { ...shared, target: nestedTarget });\n nestedTarget && nestedTarget.fire('mouseout', { ...shared });\n });\n this._hoveredTargets = [];\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseenter\n */\n private _onMouseEnter(e: TPointerEvent) {\n // This find target and consequent 'mouse:over' is used to\n // clear old instances on hovered target.\n // calling findTarget has the side effect of killing target.__corner.\n // as a short term fix we are not firing this if we are currently transforming.\n // as a long term fix we need to separate the action of finding a target with the\n // side effects we added to it.\n if (!this._currentTransform && !this.findTarget(e)) {\n this.fire('mouse:over', {\n e,\n ...getEventPoints(this, e),\n });\n this._hoveredTarget = undefined;\n this._hoveredTargets = [];\n }\n }\n\n /**\n * supports native like text dragging\n * @private\n * @param {DragEvent} e\n */\n private _onDragStart(e: DragEvent) {\n this._isClick = false;\n const activeObject = this.getActiveObject();\n if (activeObject && activeObject.onDragStart(e)) {\n this._dragSource = activeObject;\n const options = { e, target: activeObject };\n this.fire('dragstart', options);\n activeObject.fire('dragstart', options);\n addListener(\n this.upperCanvasEl,\n 'drag',\n this._onDragProgress as EventListener,\n );\n return;\n }\n stopEvent(e);\n }\n\n /**\n * First we clear top context where the effects are being rendered.\n * Then we render the effects.\n * Doing so will render the correct effect for all cases including an overlap between `source` and `target`.\n * @private\n */\n private _renderDragEffects(\n e: DragEvent,\n source?: FabricObject,\n target?: FabricObject,\n ) {\n let dirty = false;\n // clear top context\n const dropTarget = this._dropTarget;\n if (dropTarget && dropTarget !== source && dropTarget !== target) {\n dropTarget.clearContextTop();\n dirty = true;\n }\n source?.clearContextTop();\n target !== source && target?.clearContextTop();\n // render effects\n const ctx = this.contextTop;\n ctx.save();\n ctx.transform(...this.viewportTransform);\n if (source) {\n ctx.save();\n source.transform(ctx);\n source.renderDragSourceEffect(e);\n ctx.restore();\n dirty = true;\n }\n if (target) {\n ctx.save();\n target.transform(ctx);\n target.renderDropTargetEffect(e);\n ctx.restore();\n dirty = true;\n }\n ctx.restore();\n dirty && (this.contextTopDirty = true);\n }\n\n /**\n * supports native like text dragging\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#finishing_a_drag\n * @private\n * @param {DragEvent} e\n */\n private _onDragEnd(e: DragEvent) {\n const didDrop = !!e.dataTransfer && e.dataTransfer.dropEffect !== NONE,\n dropTarget = didDrop ? this._activeObject : undefined,\n options = {\n e,\n target: this._dragSource as FabricObject,\n subTargets: this.targets,\n dragSource: this._dragSource as FabricObject,\n didDrop,\n dropTarget: dropTarget as FabricObject,\n };\n removeListener(\n this.upperCanvasEl,\n 'drag',\n this._onDragProgress as EventListener,\n );\n this.fire('dragend', options);\n this._dragSource && this._dragSource.fire('dragend', options);\n delete this._dragSource;\n // we need to call mouse up synthetically because the browser won't\n this._onMouseUp(e);\n }\n\n /**\n * fire `drag` event on canvas and drag source\n * @private\n * @param {DragEvent} e\n */\n private _onDragProgress(e: DragEvent) {\n const options = {\n e,\n target: this._dragSource as FabricObject | undefined,\n dragSource: this._dragSource as FabricObject | undefined,\n dropTarget: this._draggedoverTarget as FabricObject,\n };\n this.fire('drag', options);\n this._dragSource && this._dragSource.fire('drag', options);\n }\n\n /**\n * As opposed to {@link findTarget} we want the top most object to be returned w/o the active object cutting in line.\n * Override at will\n */\n protected findDragTargets(e: DragEvent) {\n this.targets = [];\n const target = this._searchPossibleTargets(\n this._objects,\n this.getViewportPoint(e),\n );\n return {\n target,\n targets: [...this.targets],\n };\n }\n\n /**\n * prevent default to allow drop event to be fired\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#specifying_drop_targets\n * @private\n * @param {DragEvent} [e] Event object fired on Event.js shake\n */\n private _onDragOver(e: DragEvent) {\n const eventType = 'dragover';\n const { target, targets } = this.findDragTargets(e);\n const dragSource = this._dragSource as FabricObject;\n const options = {\n e,\n target,\n subTargets: targets,\n dragSource,\n canDrop: false,\n dropTarget: undefined,\n };\n let dropTarget;\n // fire on canvas\n this.fire(eventType, options);\n // make sure we fire dragenter events before dragover\n // if dragleave is needed, object will not fire dragover so we don't need to trouble ourselves with it\n this._fireEnterLeaveEvents(target, options);\n if (target) {\n if (target.canDrop(e)) {\n dropTarget = target;\n }\n target.fire(eventType, options);\n }\n // propagate the event to subtargets\n for (let i = 0; i < targets.length; i++) {\n const subTarget = targets[i];\n // accept event only if previous targets didn't (the accepting target calls `preventDefault` to inform that the event is taken)\n // TODO: verify if those should loop in inverse order then?\n // what is the order of subtargets?\n if (subTarget.canDrop(e)) {\n dropTarget = subTarget;\n }\n subTarget.fire(eventType, options);\n }\n // render drag effects now that relations between source and target is clear\n this._renderDragEffects(e, dragSource, dropTarget);\n this._dropTarget = dropTarget;\n }\n\n /**\n * fire `dragleave` on `dragover` targets\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n */\n private _onDragEnter(e: DragEvent) {\n const { target, targets } = this.findDragTargets(e);\n const options = {\n e,\n target,\n subTargets: targets,\n dragSource: this._dragSource,\n };\n this.fire('dragenter', options);\n // fire dragenter on targets\n this._fireEnterLeaveEvents(target, options);\n }\n\n /**\n * fire `dragleave` on `dragover` targets\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n */\n private _onDragLeave(e: DragEvent) {\n const options = {\n e,\n target: this._draggedoverTarget,\n subTargets: this.targets,\n dragSource: this._dragSource,\n };\n this.fire('dragleave', options);\n\n // fire dragleave on targets\n this._fireEnterLeaveEvents(undefined, options);\n this._renderDragEffects(e, this._dragSource);\n this._dropTarget = undefined;\n // clear targets\n this.targets = [];\n this._hoveredTargets = [];\n }\n\n /**\n * `drop:before` is a an event that allows you to schedule logic\n * before the `drop` event. Prefer `drop` event always, but if you need\n * to run some drop-disabling logic on an event, since there is no way\n * to handle event handlers ordering, use `drop:before`\n * @private\n * @param {Event} e\n */\n private _onDrop(e: DragEvent) {\n const { target, targets } = this.findDragTargets(e);\n const options = this._basicEventHandler('drop:before', {\n e,\n target,\n subTargets: targets,\n dragSource: this._dragSource,\n ...getEventPoints(this, e),\n });\n // will be set by the drop target\n options.didDrop = false;\n // will be set by the drop target, used in case options.target refuses the drop\n options.dropTarget = undefined;\n // fire `drop`\n this._basicEventHandler('drop', options);\n // inform canvas of the drop\n // we do this because canvas was unaware of what happened at the time the `drop` event was fired on it\n // use for side effects\n this.fire('drop:after', options);\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n private _onContextMenu(e: TPointerEvent): false {\n const target = this.findTarget(e),\n subTargets = this.targets || [];\n const options = this._basicEventHandler('contextmenu:before', {\n e,\n target,\n subTargets,\n });\n // TODO: this line is silly because the dev can subscribe to the event and prevent it themselves\n this.stopContextMenu && stopEvent(e);\n this._basicEventHandler('contextmenu', options);\n return false;\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n private _onDoubleClick(e: TPointerEvent) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'dblclick');\n this._resetTransformEventData();\n }\n\n /**\n * Return a the id of an event.\n * returns either the pointerId or the identifier or 0 for the mouse event\n * @private\n * @param {Event} evt Event object\n */\n getPointerId(evt: TouchEvent | PointerEvent): number {\n const changedTouches = (evt as TouchEvent).changedTouches;\n\n if (changedTouches) {\n return changedTouches[0] && changedTouches[0].identifier;\n }\n\n if (this.enablePointerEvents) {\n return (evt as PointerEvent).pointerId;\n }\n\n return -1;\n }\n\n /**\n * Determines if an event has the id of the event that is considered main\n * @private\n * @param {evt} event Event object\n */\n _isMainEvent(evt: TPointerEvent): boolean {\n if ((evt as PointerEvent).isPrimary === true) {\n return true;\n }\n if ((evt as PointerEvent).isPrimary === false) {\n return false;\n }\n if (evt.type === 'touchend' && (evt as TouchEvent).touches.length === 0) {\n return true;\n }\n if ((evt as TouchEvent).changedTouches) {\n return (\n (evt as TouchEvent).changedTouches[0].identifier === this.mainTouchId\n );\n }\n return true;\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchStart(e: TouchEvent) {\n e.preventDefault();\n if (this.mainTouchId === undefined) {\n this.mainTouchId = this.getPointerId(e);\n }\n this.__onMouseDown(e);\n this._resetTransformEventData();\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n const doc = getDocumentFromElement(canvasElement);\n addListener(\n doc,\n 'touchend',\n this._onTouchEnd as EventListener,\n addEventOptions,\n );\n addListener(\n doc,\n 'touchmove',\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n // Unbind mousedown to prevent double triggers from touch devices\n removeListener(\n canvasElement,\n `${eventTypePrefix}down`,\n this._onMouseDown as EventListener,\n );\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDown(e: TPointerEvent) {\n this.__onMouseDown(e);\n this._resetTransformEventData();\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n removeListener(\n canvasElement,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n const doc = getDocumentFromElement(canvasElement);\n addListener(doc, `${eventTypePrefix}up`, this._onMouseUp as EventListener);\n addListener(\n doc,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchEnd(e: TouchEvent) {\n if (e.touches.length > 0) {\n // if there are still touches stop here\n return;\n }\n this.__onMouseUp(e);\n this._resetTransformEventData();\n delete this.mainTouchId;\n const eventTypePrefix = this._getEventPrefix();\n const doc = getDocumentFromElement(this.upperCanvasEl);\n removeListener(\n doc,\n 'touchend',\n this._onTouchEnd as EventListener,\n addEventOptions,\n );\n removeListener(\n doc,\n 'touchmove',\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n if (this._willAddMouseDown) {\n clearTimeout(this._willAddMouseDown);\n }\n this._willAddMouseDown = setTimeout(() => {\n // Wait 400ms before rebinding mousedown to prevent double triggers\n // from touch devices\n addListener(\n this.upperCanvasEl,\n `${eventTypePrefix}down`,\n this._onMouseDown as EventListener,\n );\n this._willAddMouseDown = 0;\n }, 400) as unknown as number;\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUp(e: TPointerEvent) {\n this.__onMouseUp(e);\n this._resetTransformEventData();\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n if (this._isMainEvent(e)) {\n const doc = getDocumentFromElement(this.upperCanvasEl);\n removeListener(\n doc,\n `${eventTypePrefix}up`,\n this._onMouseUp as EventListener,\n );\n removeListener(\n doc,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n addListener(\n canvasElement,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n }\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMove(e: TPointerEvent) {\n const activeObject = this.getActiveObject();\n !this.allowTouchScrolling &&\n (!activeObject ||\n // a drag event sequence is started by the active object flagging itself on mousedown / mousedown:before\n // we must not prevent the event's default behavior in order for the window to start dragging\n !activeObject.shouldStartDragging(e)) &&\n e.preventDefault &&\n e.preventDefault();\n this.__onMouseMove(e);\n }\n\n /**\n * @private\n */\n _onResize() {\n this.calcOffset();\n this._resetTransformEventData();\n }\n\n /**\n * Decides whether the canvas should be redrawn in mouseup and mousedown events.\n * @private\n * @param {Object} target\n */\n _shouldRender(target: FabricObject | undefined) {\n const activeObject = this.getActiveObject();\n // if just one of them is available or if they are both but are different objects\n // this covers: switch of target, from target to no target, selection of target\n // multiSelection with key and mouse\n return (\n !!activeObject !== !!target ||\n (activeObject && target && activeObject !== target)\n );\n }\n\n /**\n * Method that defines the actions when mouse is released on canvas.\n * The method resets the currentTransform parameters, store the image corner\n * position in the image object and render the canvas on top.\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseUp(e: TPointerEvent) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'up:before');\n\n const transform = this._currentTransform;\n const isClick = this._isClick;\n const target = this._target;\n\n // if right/middle click just fire events and return\n // target undefined will make the _handleEvent search the target\n const { button } = e as MouseEvent;\n if (button) {\n ((this.fireMiddleClick && button === 1) ||\n (this.fireRightClick && button === 2)) &&\n this._handleEvent(e, 'up');\n this._resetTransformEventData();\n return;\n }\n\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this._onMouseUpInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n let shouldRender = false;\n if (transform) {\n this._finalizeCurrentTransform(e);\n shouldRender = transform.actionPerformed;\n }\n if (!isClick) {\n const targetWasActive = target === this._activeObject;\n this.handleSelection(e);\n if (!shouldRender) {\n shouldRender =\n this._shouldRender(target) ||\n (!targetWasActive && target === this._activeObject);\n }\n }\n let pointer, corner;\n if (target) {\n const found = target.findControl(\n this.getViewportPoint(e),\n isTouchEvent(e),\n );\n const { key, control } = found || {};\n corner = key;\n if (\n target.selectable &&\n target !== this._activeObject &&\n target.activeOn === 'up'\n ) {\n this.setActiveObject(target, e);\n shouldRender = true;\n } else if (control) {\n const mouseUpHandler = control.getMouseUpHandler(e, target, control);\n if (mouseUpHandler) {\n pointer = this.getScenePoint(e);\n mouseUpHandler.call(control, e, transform!, pointer.x, pointer.y);\n }\n }\n target.isMoving = false;\n }\n // if we are ending up a transform on a different control or a new object\n // fire the original mouse up from the corner that started the transform\n if (\n transform &&\n (transform.target !== target || transform.corner !== corner)\n ) {\n const originalControl =\n transform.target && transform.target.controls[transform.corner],\n originalMouseUpHandler =\n originalControl &&\n originalControl.getMouseUpHandler(\n e,\n transform.target,\n originalControl,\n );\n pointer = pointer || this.getScenePoint(e);\n originalMouseUpHandler &&\n originalMouseUpHandler.call(\n originalControl,\n e,\n transform,\n pointer.x,\n pointer.y,\n );\n }\n this._setCursorFromEvent(e, target);\n this._handleEvent(e, 'up');\n this._groupSelector = null;\n this._currentTransform = null;\n // reset the target information about which corner is selected\n target && (target.__corner = undefined);\n if (shouldRender) {\n this.requestRenderAll();\n } else if (!isClick && !(this._activeObject as IText)?.isEditing) {\n this.renderTop();\n }\n }\n\n _basicEventHandler(\n eventType: T,\n options: (CanvasEvents & ObjectEvents)[T],\n ) {\n const { target, subTargets = [] } = options as {\n target?: FabricObject;\n subTargets: FabricObject[];\n };\n this.fire(eventType, options);\n target && target.fire(eventType, options);\n for (let i = 0; i < subTargets.length; i++) {\n subTargets[i] !== target && subTargets[i].fire(eventType, options);\n }\n return options;\n }\n\n /**\n * @private\n * Handle event firing for target and subtargets\n * @param {TPointerEvent} e event from mouse\n * @param {TPointerEventNames} eventType\n */\n _handleEvent(e: TPointerEvent, eventType: T) {\n const target = this._target,\n targets = this.targets || [],\n options: CanvasEvents[`mouse:${T}`] = {\n e,\n target,\n subTargets: targets,\n ...getEventPoints(this, e),\n transform: this._currentTransform,\n ...(eventType === 'up:before' || eventType === 'up'\n ? {\n isClick: this._isClick,\n currentTarget: this.findTarget(e),\n // set by the preceding `findTarget` call\n currentSubTargets: this.targets,\n }\n : {}),\n } as CanvasEvents[`mouse:${T}`];\n this.fire(`mouse:${eventType}`, options);\n // this may be a little be more complicated of what we want to handle\n target && target.fire(`mouse${eventType}`, options);\n for (let i = 0; i < targets.length; i++) {\n targets[i] !== target && targets[i].fire(`mouse${eventType}`, options);\n }\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDownInDrawingMode(e: TPointerEvent) {\n this._isCurrentlyDrawing = true;\n if (this.getActiveObject()) {\n this.discardActiveObject(e);\n this.requestRenderAll();\n }\n // TODO: this is a scene point so it should be renamed\n const pointer = this.getScenePoint(e);\n this.freeDrawingBrush &&\n this.freeDrawingBrush.onMouseDown(pointer, { e, pointer });\n this._handleEvent(e, 'down');\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMoveInDrawingMode(e: TPointerEvent) {\n if (this._isCurrentlyDrawing) {\n const pointer = this.getScenePoint(e);\n this.freeDrawingBrush &&\n this.freeDrawingBrush.onMouseMove(pointer, {\n e,\n // this is an absolute pointer, the naming is wrong\n pointer,\n });\n }\n this.setCursor(this.freeDrawingCursor);\n this._handleEvent(e, 'move');\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUpInDrawingMode(e: TPointerEvent) {\n const pointer = this.getScenePoint(e);\n if (this.freeDrawingBrush) {\n this._isCurrentlyDrawing = !!this.freeDrawingBrush.onMouseUp({\n e: e,\n // this is an absolute pointer, the naming is wrong\n pointer,\n });\n } else {\n this._isCurrentlyDrawing = false;\n }\n this._handleEvent(e, 'up');\n }\n\n /**\n * Method that defines the actions when mouse is clicked on canvas.\n * The method inits the currentTransform parameters and renders all the\n * canvas so the current image can be placed on the top canvas and the rest\n * in on the container one.\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n __onMouseDown(e: TPointerEvent) {\n this._isClick = true;\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'down:before');\n\n let target: FabricObject | undefined = this._target;\n\n // if right/middle click just fire events\n const { button } = e as MouseEvent;\n if (button) {\n ((this.fireMiddleClick && button === 1) ||\n (this.fireRightClick && button === 2)) &&\n this._handleEvent(e, 'down');\n this._resetTransformEventData();\n return;\n }\n\n if (this.isDrawingMode) {\n this._onMouseDownInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n // ignore if some object is being transformed at this moment\n if (this._currentTransform) {\n return;\n }\n\n let shouldRender = this._shouldRender(target);\n let grouped = false;\n if (this.handleMultiSelection(e, target)) {\n // active object might have changed while grouping\n target = this._activeObject;\n grouped = true;\n shouldRender = true;\n } else if (this._shouldClearSelection(e, target)) {\n this.discardActiveObject(e);\n }\n // we start a group selector rectangle if\n // selection is enabled\n // and there is no target, or the following 3 conditions are satisfied:\n // target is not selectable ( otherwise we selected it )\n // target is not editing\n // target is not already selected ( otherwise we drag )\n if (\n this.selection &&\n (!target ||\n (!target.selectable &&\n !(target as IText).isEditing &&\n target !== this._activeObject))\n ) {\n const p = this.getScenePoint(e);\n this._groupSelector = {\n x: p.x,\n y: p.y,\n deltaY: 0,\n deltaX: 0,\n };\n }\n\n if (target) {\n const alreadySelected = target === this._activeObject;\n if (target.selectable && target.activeOn === 'down') {\n this.setActiveObject(target, e);\n }\n const handle = target.findControl(\n this.getViewportPoint(e),\n isTouchEvent(e),\n );\n if (target === this._activeObject && (handle || !grouped)) {\n this._setupCurrentTransform(e, target, alreadySelected);\n const control = handle ? handle.control : undefined,\n pointer = this.getScenePoint(e),\n mouseDownHandler =\n control && control.getMouseDownHandler(e, target, control);\n mouseDownHandler &&\n mouseDownHandler.call(\n control,\n e,\n this._currentTransform!,\n pointer.x,\n pointer.y,\n );\n }\n }\n // we clear `_objectsToRender` in case of a change in order to repopulate it at rendering\n // run before firing the `down` event to give the dev a chance to populate it themselves\n shouldRender && (this._objectsToRender = undefined);\n this._handleEvent(e, 'down');\n // we must renderAll so that we update the visuals\n shouldRender && this.requestRenderAll();\n }\n\n /**\n * reset cache form common information needed during event processing\n * @private\n */\n _resetTransformEventData() {\n this._target = undefined;\n this._pointer = undefined;\n this._absolutePointer = undefined;\n }\n\n /**\n * Cache common information needed during event processing\n * @private\n * @param {Event} e Event object fired on event\n */\n _cacheTransformEventData(e: TPointerEvent) {\n // reset in order to avoid stale caching\n this._resetTransformEventData();\n this._pointer = this.getViewportPoint(e);\n this._absolutePointer = sendPointToPlane(\n this._pointer,\n undefined,\n this.viewportTransform,\n );\n this._target = this._currentTransform\n ? this._currentTransform.target\n : this.findTarget(e);\n }\n\n /**\n * Method that defines the actions when mouse is hovering the canvas.\n * The currentTransform parameter will define whether the user is rotating/scaling/translating\n * an image or neither of them (only hovering). A group selection is also possible and would cancel\n * all any other type of action.\n * In case of an image transformation only the top canvas will be rendered.\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n __onMouseMove(e: TPointerEvent) {\n this._isClick = false;\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'move:before');\n\n if (this.isDrawingMode) {\n this._onMouseMoveInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n const groupSelector = this._groupSelector;\n\n // We initially clicked in an empty area, so we draw a box for multiple selection\n if (groupSelector) {\n const pointer = this.getScenePoint(e);\n\n groupSelector.deltaX = pointer.x - groupSelector.x;\n groupSelector.deltaY = pointer.y - groupSelector.y;\n\n this.renderTop();\n } else if (!this._currentTransform) {\n const target = this.findTarget(e);\n this._setCursorFromEvent(e, target);\n this._fireOverOutEvents(e, target);\n } else {\n this._transformObject(e);\n }\n this.textEditingManager.onMouseMove(e);\n this._handleEvent(e, 'move');\n this._resetTransformEventData();\n }\n\n /**\n * Manage the mouseout, mouseover events for the fabric object on the canvas\n * @param {Fabric.Object} target the target where the target from the mousemove event\n * @param {Event} e Event object fired on mousemove\n * @private\n */\n _fireOverOutEvents(e: TPointerEvent, target?: FabricObject) {\n const _hoveredTarget = this._hoveredTarget,\n _hoveredTargets = this._hoveredTargets,\n targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents('mouse', {\n e,\n target,\n oldTarget: _hoveredTarget,\n fireCanvas: true,\n });\n for (let i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents('mouse', {\n e,\n target: targets[i],\n oldTarget: _hoveredTargets[i],\n });\n }\n this._hoveredTarget = target;\n this._hoveredTargets = this.targets.concat();\n }\n\n /**\n * Manage the dragEnter, dragLeave events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the onDrag event\n * @param {Object} data Event object fired on dragover\n * @private\n */\n _fireEnterLeaveEvents(target: FabricObject | undefined, data: DragEventData) {\n const draggedoverTarget = this._draggedoverTarget,\n _hoveredTargets = this._hoveredTargets,\n targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents('drag', {\n ...data,\n target,\n oldTarget: draggedoverTarget,\n fireCanvas: true,\n });\n for (let i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents('drag', {\n ...data,\n target: targets[i],\n oldTarget: _hoveredTargets[i],\n });\n }\n this._draggedoverTarget = target;\n }\n\n /**\n * Manage the synthetic in/out events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the supported events\n * @param {Object} data Event object fired\n * @param {Object} config configuration for the function to work\n * @param {String} config.targetName property on the canvas where the old target is stored\n * @param {String} [config.canvasEvtOut] name of the event to fire at canvas level for out\n * @param {String} config.evtOut name of the event to fire for out\n * @param {String} [config.canvasEvtIn] name of the event to fire at canvas level for in\n * @param {String} config.evtIn name of the event to fire for in\n * @private\n */\n fireSyntheticInOutEvents(\n type: T,\n {\n target,\n oldTarget,\n fireCanvas,\n e,\n ...data\n }: TSyntheticEventContext[T] & {\n target?: FabricObject;\n oldTarget?: FabricObject;\n fireCanvas?: boolean;\n },\n ) {\n const { targetIn, targetOut, canvasIn, canvasOut } =\n syntheticEventConfig[type];\n const targetChanged = oldTarget !== target;\n\n if (oldTarget && targetChanged) {\n const outOpt: CanvasEvents[typeof canvasOut] = {\n ...data,\n e,\n target: oldTarget,\n nextTarget: target,\n ...getEventPoints(this, e),\n };\n fireCanvas && this.fire(canvasOut, outOpt);\n oldTarget.fire(targetOut, outOpt);\n }\n if (target && targetChanged) {\n const inOpt: CanvasEvents[typeof canvasIn] = {\n ...data,\n e,\n target,\n previousTarget: oldTarget,\n ...getEventPoints(this, e),\n };\n fireCanvas && this.fire(canvasIn, inOpt);\n target.fire(targetIn, inOpt);\n }\n }\n\n /**\n * Method that defines actions when an Event Mouse Wheel\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseWheel(e: TPointerEvent) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'wheel');\n this._resetTransformEventData();\n }\n\n /**\n * @private\n * @param {Event} e Event fired on mousemove\n */\n _transformObject(e: TPointerEvent) {\n const scenePoint = this.getScenePoint(e),\n transform = this._currentTransform!,\n target = transform.target,\n // transform pointer to target's containing coordinate plane\n // both pointer and object should agree on every point\n localPointer = target.group\n ? sendPointToPlane(\n scenePoint,\n undefined,\n target.group.calcTransformMatrix(),\n )\n : scenePoint;\n transform.shiftKey = e.shiftKey;\n transform.altKey = !!this.centeredKey && e[this.centeredKey];\n\n this._performTransformAction(e, transform, localPointer);\n transform.actionPerformed && this.requestRenderAll();\n }\n\n /**\n * @private\n */\n _performTransformAction(\n e: TPointerEvent,\n transform: Transform,\n pointer: Point,\n ) {\n const { action, actionHandler, target } = transform;\n\n const actionPerformed =\n !!actionHandler && actionHandler(e, transform, pointer.x, pointer.y);\n actionPerformed && target.setCoords();\n\n // this object could be created from the function in the control handlers\n if (action === 'drag' && actionPerformed) {\n transform.target.isMoving = true;\n this.setCursor(transform.target.moveCursor || this.moveCursor);\n }\n transform.actionPerformed = transform.actionPerformed || actionPerformed;\n }\n\n /**\n * Sets the cursor depending on where the canvas is being hovered.\n * Note: very buggy in Opera\n * @param {Event} e Event object\n * @param {Object} target Object that the mouse is hovering, if so.\n */\n _setCursorFromEvent(e: TPointerEvent, target?: FabricObject) {\n if (!target) {\n this.setCursor(this.defaultCursor);\n return;\n }\n let hoverCursor = target.hoverCursor || this.hoverCursor;\n const activeSelection = isActiveSelection(this._activeObject)\n ? this._activeObject\n : null,\n // only show proper corner when group selection is not active\n corner =\n (!activeSelection || target.group !== activeSelection) &&\n // here we call findTargetCorner always with undefined for the touch parameter.\n // we assume that if you are using a cursor you do not need to interact with\n // the bigger touch area.\n target.findControl(this.getViewportPoint(e));\n\n if (!corner) {\n if ((target as Group).subTargetCheck) {\n // hoverCursor should come from top-most subTarget,\n // so we walk the array backwards\n this.targets\n .concat()\n .reverse()\n .map((_target) => {\n hoverCursor = _target.hoverCursor || hoverCursor;\n });\n }\n this.setCursor(hoverCursor);\n } else {\n const control = corner.control;\n this.setCursor(control.cursorStyleHandler(e, control, target));\n }\n }\n\n /**\n * ## Handles multiple selection\n * - toggles `target` selection (selects/deselects `target` if it isn't/is selected respectively)\n * - sets the active object in case it is not set or in case there is a single active object left under active selection.\n * ---\n * - If the active object is the active selection we add/remove `target` from it\n * - If not, add the active object and `target` to the active selection and make it the active object.\n * @private\n * @param {TPointerEvent} e Event object\n * @param {FabricObject} target target of event to select/deselect\n * @returns true if grouping occurred\n */\n protected handleMultiSelection(e: TPointerEvent, target?: FabricObject) {\n const activeObject = this._activeObject;\n const isAS = isActiveSelection(activeObject);\n if (\n // check if an active object exists on canvas and if the user is pressing the `selectionKey` while canvas supports multi selection.\n !!activeObject &&\n this._isSelectionKeyPressed(e) &&\n this.selection &&\n // on top of that the user also has to hit a target that is selectable.\n !!target &&\n target.selectable &&\n // group target and active object only if they are different objects\n // else we try to find a subtarget of `ActiveSelection`\n (activeObject !== target || isAS) &&\n // make sure `activeObject` and `target` aren't ancestors of each other in case `activeObject` is not `ActiveSelection`\n // if it is then we want to remove `target` from it\n (isAS ||\n (!target.isDescendantOf(activeObject) &&\n !activeObject.isDescendantOf(target))) &&\n // target accepts selection\n !target.onSelect({ e }) &&\n // make sure we are not on top of a control\n !activeObject.getActiveControl()\n ) {\n if (isAS) {\n const prevActiveObjects = activeObject.getObjects();\n if (target === activeObject) {\n const pointer = this.getViewportPoint(e);\n target =\n // first search active objects for a target to remove\n this.searchPossibleTargets(prevActiveObjects, pointer) ||\n // if not found, search under active selection for a target to add\n // `prevActiveObjects` will be searched but we already know they will not be found\n this.searchPossibleTargets(this._objects, pointer);\n // if nothing is found bail out\n if (!target || !target.selectable) {\n return false;\n }\n }\n if (target.group === activeObject) {\n // `target` is part of active selection => remove it\n activeObject.remove(target);\n this._hoveredTarget = target;\n this._hoveredTargets = [...this.targets];\n // if after removing an object we are left with one only...\n if (activeObject.size() === 1) {\n // activate last remaining object\n // deselecting the active selection will remove the remaining object from it\n this._setActiveObject(activeObject.item(0), e);\n }\n } else {\n // `target` isn't part of active selection => add it\n activeObject.multiSelectAdd(target);\n this._hoveredTarget = activeObject;\n this._hoveredTargets = [...this.targets];\n }\n this._fireSelectionEvents(prevActiveObjects, e);\n } else {\n (activeObject as IText).exitEditing &&\n (activeObject as IText).exitEditing();\n // add the active object and the target to the active selection and set it as the active object\n const klass =\n classRegistry.getClass('ActiveSelection');\n const newActiveSelection = new klass([], {\n /**\n * it is crucial to pass the canvas ref before calling {@link ActiveSelection#multiSelectAdd}\n * since it uses {@link FabricObject#isInFrontOf} which relies on the canvas ref\n */\n canvas: this,\n });\n newActiveSelection.multiSelectAdd(activeObject, target);\n this._hoveredTarget = newActiveSelection;\n // ISSUE 4115: should we consider subTargets here?\n // this._hoveredTargets = [];\n // this._hoveredTargets = this.targets.concat();\n this._setActiveObject(newActiveSelection, e);\n this._fireSelectionEvents([activeObject], e);\n }\n return true;\n }\n return false;\n }\n\n /**\n * ## Handles selection\n * - selects objects that are contained in (and possibly intersecting) the selection bounding box\n * - sets the active object\n * ---\n * runs on mouse up after a mouse move\n */\n protected handleSelection(e: TPointerEvent) {\n if (!this.selection || !this._groupSelector) {\n return false;\n }\n const { x, y, deltaX, deltaY } = this._groupSelector,\n point1 = new Point(x, y),\n point2 = point1.add(new Point(deltaX, deltaY)),\n tl = point1.min(point2),\n br = point1.max(point2),\n size = br.subtract(tl);\n\n const collectedObjects = this.collectObjects(\n {\n left: tl.x,\n top: tl.y,\n width: size.x,\n height: size.y,\n },\n { includeIntersecting: !this.selectionFullyContained },\n ) as FabricObject[];\n\n const objects =\n // though this method runs only after mouse move the pointer could do a mouse up on the same position as mouse down\n // should it be handled as is?\n point1.eq(point2)\n ? collectedObjects[0]\n ? [collectedObjects[0]]\n : []\n : collectedObjects.length > 1\n ? collectedObjects\n .filter((object) => !object.onSelect({ e }))\n .reverse()\n : // `setActiveObject` will call `onSelect(collectedObjects[0])` in this case\n collectedObjects;\n\n // set active object\n if (objects.length === 1) {\n // set as active object\n this.setActiveObject(objects[0], e);\n } else if (objects.length > 1) {\n // add to active selection and make it the active object\n const klass =\n classRegistry.getClass('ActiveSelection');\n this.setActiveObject(new klass(objects, { canvas: this }), e);\n }\n\n // cleanup\n this._groupSelector = null;\n return true;\n }\n\n /**\n * @override clear {@link textEditingManager}\n */\n clear() {\n this.textEditingManager.clear();\n super.clear();\n }\n\n /**\n * @override clear {@link textEditingManager}\n */\n destroy() {\n this.removeListeners();\n this.textEditingManager.dispose();\n super.destroy();\n }\n}\n","export const linearDefaultCoords = {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n};\n\nexport const radialDefaultCoords = {\n ...linearDefaultCoords,\n r1: 0,\n r2: 0,\n};\n","/**\n *\n * @param value value to check if NaN\n * @param [valueIfNaN]\n * @returns `fallback` is `value is NaN\n */\nexport const ifNaN = (value: number, valueIfNaN?: number) => {\n return isNaN(value) && typeof valueIfNaN === 'number' ? valueIfNaN : value;\n};\n","import { ifNaN } from '../util/internals/ifNaN';\nimport { capValue } from '../util/misc/capValue';\n\nconst RE_PERCENT = /^(\\d+\\.\\d+)%|(\\d+)%$/;\n\nexport function isPercent(value: string | null) {\n return value && RE_PERCENT.test(value);\n}\n\n/**\n *\n * @param value\n * @param valueIfNaN\n * @returns ∈ [0, 1]\n */\nexport function parsePercent(\n value: string | number | null | undefined,\n valueIfNaN?: number,\n) {\n const parsed =\n typeof value === 'number'\n ? value\n : typeof value === 'string'\n ? parseFloat(value) / (isPercent(value) ? 100 : 1)\n : NaN;\n return capValue(0, ifNaN(parsed, valueIfNaN), 1);\n}\n","import { Color } from '../../color/Color';\nimport { parsePercent } from '../../parser/percent';\nimport { ifNaN } from '../../util/internals/ifNaN';\nimport type { ColorStop } from '../typedefs';\n\nconst RE_KEY_VALUE_PAIRS = /\\s*;\\s*/;\nconst RE_KEY_VALUE = /\\s*:\\s*/;\n\nfunction parseColorStop(el: SVGStopElement, multiplier: number) {\n let colorValue, opacity;\n const style = el.getAttribute('style');\n if (style) {\n const keyValuePairs = style.split(RE_KEY_VALUE_PAIRS);\n\n if (keyValuePairs[keyValuePairs.length - 1] === '') {\n keyValuePairs.pop();\n }\n\n for (let i = keyValuePairs.length; i--; ) {\n const [key, value] = keyValuePairs[i]\n .split(RE_KEY_VALUE)\n .map((s) => s.trim());\n if (key === 'stop-color') {\n colorValue = value;\n } else if (key === 'stop-opacity') {\n opacity = value;\n }\n }\n }\n\n const color = new Color(\n colorValue || el.getAttribute('stop-color') || 'rgb(0,0,0)',\n );\n\n return {\n offset: parsePercent(el.getAttribute('offset'), 0),\n color: color.toRgb(),\n opacity:\n ifNaN(parseFloat(opacity || el.getAttribute('stop-opacity') || ''), 1) *\n color.getAlpha() *\n multiplier,\n };\n}\n\nexport function parseColorStops(\n el: SVGGradientElement,\n opacityAttr: string | null,\n) {\n const colorStops: ColorStop[] = [],\n colorStopEls = el.getElementsByTagName('stop'),\n multiplier = parsePercent(opacityAttr, 1);\n for (let i = colorStopEls.length; i--; ) {\n colorStops.push(parseColorStop(colorStopEls[i], multiplier));\n }\n return colorStops;\n}\n","import type { GradientType, GradientUnits } from '../typedefs';\n\nexport function parseType(el: SVGGradientElement): GradientType {\n return el.nodeName === 'linearGradient' || el.nodeName === 'LINEARGRADIENT'\n ? 'linear'\n : 'radial';\n}\n\nexport function parseGradientUnits(el: SVGGradientElement): GradientUnits {\n return el.getAttribute('gradientUnits') === 'userSpaceOnUse'\n ? 'pixels'\n : 'percentage';\n}\n","import { isPercent } from '../../parser/percent';\nimport type { TSize } from '../../typedefs';\nimport type { GradientCoords, GradientType, GradientUnits } from '../typedefs';\nimport { parseGradientUnits, parseType } from './misc';\n\nfunction convertPercentUnitsToValues<\n T extends GradientType,\n K extends keyof GradientCoords,\n>(\n valuesToConvert: Record,\n { width, height, gradientUnits }: TSize & { gradientUnits: GradientUnits },\n) {\n let finalValue;\n return (Object.keys(valuesToConvert) as K[]).reduce(\n (acc, prop) => {\n const propValue = valuesToConvert[prop];\n if (propValue === 'Infinity') {\n finalValue = 1;\n } else if (propValue === '-Infinity') {\n finalValue = 0;\n } else {\n finalValue =\n typeof propValue === 'string' ? parseFloat(propValue) : propValue;\n if (typeof propValue === 'string' && isPercent(propValue)) {\n finalValue *= 0.01;\n if (gradientUnits === 'pixels') {\n // then we need to fix those percentages here in svg parsing\n if (prop === 'x1' || prop === 'x2' || prop === 'r2') {\n finalValue *= width;\n }\n if (prop === 'y1' || prop === 'y2') {\n finalValue *= height;\n }\n }\n }\n }\n acc[prop] = finalValue;\n return acc;\n },\n {} as Record,\n );\n}\n\nfunction getValue(el: SVGGradientElement, key: string) {\n return el.getAttribute(key);\n}\n\nexport function parseLinearCoords(el: SVGGradientElement) {\n return {\n x1: getValue(el, 'x1') || 0,\n y1: getValue(el, 'y1') || 0,\n x2: getValue(el, 'x2') || '100%',\n y2: getValue(el, 'y2') || 0,\n };\n}\n\nexport function parseRadialCoords(el: SVGGradientElement) {\n return {\n x1: getValue(el, 'fx') || getValue(el, 'cx') || '50%',\n y1: getValue(el, 'fy') || getValue(el, 'cy') || '50%',\n r1: 0,\n x2: getValue(el, 'cx') || '50%',\n y2: getValue(el, 'cy') || '50%',\n r2: getValue(el, 'r') || '50%',\n };\n}\n\nexport function parseCoords(el: SVGGradientElement, size: TSize) {\n return convertPercentUnitsToValues(\n parseType(el) === 'linear' ? parseLinearCoords(el) : parseRadialCoords(el),\n {\n ...size,\n gradientUnits: parseGradientUnits(el),\n },\n );\n}\n","import { Color } from '../color/Color';\nimport { iMatrix } from '../constants';\nimport { parseTransformAttribute } from '../parser/parseTransformAttribute';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { uid } from '../util/internals/uid';\nimport { pick } from '../util/misc/pick';\nimport { matrixToSVG } from '../util/misc/svgParsing';\nimport { linearDefaultCoords, radialDefaultCoords } from './constants';\nimport { parseColorStops } from './parser/parseColorStops';\nimport { parseCoords } from './parser/parseCoords';\nimport { parseType, parseGradientUnits } from './parser/misc';\nimport type {\n ColorStop,\n GradientCoords,\n GradientOptions,\n GradientType,\n GradientUnits,\n SVGOptions,\n} from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { isPath } from '../util/typeAssertions';\n\n/**\n * Gradient class\n * @class Gradient\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#gradients}\n */\nexport class Gradient<\n S,\n T extends GradientType = S extends GradientType ? S : 'linear',\n> {\n /**\n * Horizontal offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n declare offsetX: number;\n\n /**\n * Vertical offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n declare offsetY: number;\n\n /**\n * A transform matrix to apply to the gradient before painting.\n * Imported from svg gradients, is not applied with the current transform in the center.\n * Before this transform is applied, the origin point is at the top left corner of the object\n * plus the addition of offsetY and offsetX.\n * @type Number[]\n * @default null\n */\n declare gradientTransform?: TMat2D;\n\n /**\n * coordinates units for coords.\n * If `pixels`, the number of coords are in the same unit of width / height.\n * If set as `percentage` the coords are still a number, but 1 means 100% of width\n * for the X and 100% of the height for the y. It can be bigger than 1 and negative.\n * allowed values pixels or percentage.\n * @type GradientUnits\n * @default 'pixels'\n */\n declare gradientUnits: GradientUnits;\n\n /**\n * Gradient type linear or radial\n * @type GradientType\n * @default 'linear'\n */\n declare type: T;\n\n /**\n * Defines how the gradient is located in space and spread\n * @type GradientCoords\n */\n declare coords: GradientCoords;\n\n /**\n * Defines how many colors a gradient has and how they are located on the axis\n * defined by coords\n * @type GradientCoords\n */\n declare colorStops: ColorStop[];\n\n /**\n * If true, this object will not be exported during the serialization of a canvas\n * @type boolean\n */\n declare excludeFromExport?: boolean;\n\n /**\n * ID used for SVG export functionalities\n * @type number | string\n */\n declare readonly id: string | number;\n\n static type = 'Gradient';\n\n constructor(options: GradientOptions) {\n const {\n type = 'linear' as T,\n gradientUnits = 'pixels',\n coords = {},\n colorStops = [],\n offsetX = 0,\n offsetY = 0,\n gradientTransform,\n id,\n } = options || {};\n Object.assign(this, {\n type,\n gradientUnits,\n coords: {\n ...(type === 'radial' ? radialDefaultCoords : linearDefaultCoords),\n ...coords,\n },\n colorStops,\n offsetX,\n offsetY,\n gradientTransform,\n id: id ? `${id}_${uid()}` : uid(),\n });\n }\n\n /**\n * Adds another colorStop\n * @param {Record} colorStop Object with offset and color\n * @return {Gradient} thisArg\n */\n addColorStop(colorStops: Record) {\n for (const position in colorStops) {\n const color = new Color(colorStops[position]);\n this.colorStops.push({\n offset: parseFloat(position),\n color: color.toRgb(),\n opacity: color.getAlpha(),\n });\n }\n return this;\n }\n\n /**\n * Returns object representation of a gradient\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {object}\n */\n toObject(propertiesToInclude?: (keyof this | string)[]) {\n return {\n ...pick(this, propertiesToInclude as (keyof this)[]),\n type: this.type,\n coords: { ...this.coords },\n colorStops: this.colorStops.map((colorStop) => ({ ...colorStop })),\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n gradientUnits: this.gradientUnits,\n gradientTransform: this.gradientTransform\n ? [...this.gradientTransform]\n : undefined,\n };\n }\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of an gradient\n * @param {FabricObject} object Object to create a gradient for\n * @return {String} SVG representation of an gradient (linear/radial)\n */\n toSVG(\n object: FabricObject,\n {\n additionalTransform: preTransform,\n }: { additionalTransform?: string } = {},\n ) {\n const markup = [],\n transform = (\n this.gradientTransform\n ? this.gradientTransform.concat()\n : iMatrix.concat()\n ) as TMat2D,\n gradientUnits =\n this.gradientUnits === 'pixels'\n ? 'userSpaceOnUse'\n : 'objectBoundingBox';\n // colorStops must be sorted ascending, and guarded against deep mutations\n const colorStops = this.colorStops\n .map((colorStop) => ({ ...colorStop }))\n .sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let offsetX = -this.offsetX,\n offsetY = -this.offsetY;\n if (gradientUnits === 'objectBoundingBox') {\n offsetX /= object.width;\n offsetY /= object.height;\n } else {\n offsetX += object.width / 2;\n offsetY += object.height / 2;\n }\n // todo what about polygon/polyline?\n if (isPath(object) && this.gradientUnits !== 'percentage') {\n offsetX -= object.pathOffset.x;\n offsetY -= object.pathOffset.y;\n }\n transform[4] -= offsetX;\n transform[5] -= offsetY;\n\n const commonAttributes = [\n `id=\"SVGID_${this.id}\"`,\n `gradientUnits=\"${gradientUnits}\"`,\n `gradientTransform=\"${\n preTransform ? preTransform + ' ' : ''\n }${matrixToSVG(transform)}\"`,\n '',\n ].join(' ');\n\n if (this.type === 'linear') {\n const { x1, y1, x2, y2 } = this.coords;\n markup.push(\n '\\n',\n );\n } else if (this.type === 'radial') {\n const { x1, y1, x2, y2, r1, r2 } = this\n .coords as GradientCoords<'radial'>;\n const needsSwap = r1 > r2;\n // svg radial gradient has just 1 radius. the biggest.\n markup.push(\n '\\n',\n );\n if (needsSwap) {\n // svg goes from internal to external radius. if radius are inverted, swap color stops.\n colorStops.reverse(); // mutates array\n colorStops.forEach((colorStop) => {\n colorStop.offset = 1 - colorStop.offset;\n });\n }\n const minRadius = Math.min(r1, r2);\n if (minRadius > 0) {\n // i have to shift all colorStops and add new one in 0.\n const maxRadius = Math.max(r1, r2),\n percentageShift = minRadius / maxRadius;\n colorStops.forEach((colorStop) => {\n colorStop.offset += percentageShift * (1 - colorStop.offset);\n });\n }\n }\n\n colorStops.forEach(({ color, offset, opacity }) => {\n markup.push(\n '\\n',\n );\n });\n\n markup.push(\n this.type === 'linear' ? '' : '',\n '\\n',\n );\n\n return markup.join('');\n }\n /* _TO_SVG_END_ */\n\n /**\n * Returns an instance of CanvasGradient\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {CanvasGradient}\n */\n toLive(ctx: CanvasRenderingContext2D): CanvasGradient {\n const { x1, y1, x2, y2, r1, r2 } = this.coords as GradientCoords<'radial'>;\n const gradient =\n this.type === 'linear'\n ? ctx.createLinearGradient(x1, y1, x2, y2)\n : ctx.createRadialGradient(x1, y1, r1, x2, y2, r2);\n\n this.colorStops.forEach(({ color, opacity, offset }) => {\n gradient.addColorStop(\n offset,\n typeof opacity !== 'undefined'\n ? new Color(color).setAlpha(opacity).toRgba()\n : color,\n );\n });\n\n return gradient;\n }\n\n static async fromObject(\n options: GradientOptions<'linear'>,\n ): Promise>;\n static async fromObject(\n options: GradientOptions<'radial'>,\n ): Promise>;\n static async fromObject(\n options: GradientOptions<'linear'> | GradientOptions<'radial'>,\n ) {\n const { colorStops, gradientTransform } = options;\n return new this({\n ...options,\n colorStops: colorStops\n ? colorStops.map((colorStop) => ({ ...colorStop }))\n : undefined,\n gradientTransform: gradientTransform ? [...gradientTransform] : undefined,\n });\n }\n\n /* _FROM_SVG_START_ */\n /**\n * Returns {@link Gradient} instance from an SVG element\n * @static\n * @memberOf Gradient\n * @param {SVGGradientElement} el SVG gradient element\n * @param {FabricObject} instance\n * @param {String} opacity A fill-opacity or stroke-opacity attribute to multiply to each stop's opacity.\n * @param {SVGOptions} svgOptions an object containing the size of the SVG in order to parse correctly gradients\n * that uses gradientUnits as 'userSpaceOnUse' and percentages.\n * @return {Gradient} Gradient instance\n * @see http://www.w3.org/TR/SVG/pservers.html#LinearGradientElement\n * @see http://www.w3.org/TR/SVG/pservers.html#RadialGradientElement\n *\n * @example\n *\n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n * \n *\n */\n static fromElement(\n el: SVGGradientElement,\n instance: FabricObject,\n svgOptions: SVGOptions,\n ): Gradient {\n const gradientUnits = parseGradientUnits(el);\n const center = instance._findCenterFromElement();\n return new this({\n id: el.getAttribute('id') || undefined,\n type: parseType(el),\n coords: parseCoords(el, {\n width: svgOptions.viewBoxWidth || svgOptions.width,\n height: svgOptions.viewBoxHeight || svgOptions.height,\n }),\n colorStops: parseColorStops(el, svgOptions.opacity),\n gradientUnits,\n gradientTransform: parseTransformAttribute(\n el.getAttribute('gradientTransform') || '',\n ),\n ...(gradientUnits === 'pixels'\n ? {\n offsetX: instance.width / 2 - center.x,\n offsetY: instance.height / 2 - center.y,\n }\n : {\n offsetX: 0,\n offsetY: 0,\n }),\n });\n }\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Gradient, 'gradient');\nclassRegistry.setClass(Gradient, 'linear');\nclassRegistry.setClass(Gradient, 'radial');\n","import { config } from '../config';\nimport type { Abortable, TCrossOrigin, TMat2D, TSize } from '../typedefs';\nimport { ifNaN } from '../util/internals/ifNaN';\nimport { uid } from '../util/internals/uid';\nimport { loadImage } from '../util/misc/objectEnlive';\nimport { pick } from '../util/misc/pick';\nimport { toFixed } from '../util/misc/toFixed';\nimport { classRegistry } from '../ClassRegistry';\nimport type {\n PatternRepeat,\n PatternOptions,\n SerializedPatternOptions,\n} from './types';\nimport { log } from '../util/internals/console';\n\n/**\n * @see {@link http://fabricjs.com/patterns demo}\n * @see {@link http://fabricjs.com/dynamic-patterns demo}\n */\nexport class Pattern {\n static type = 'Pattern';\n\n /**\n * Legacy identifier of the class. Prefer using this.constructor.type 'Pattern'\n * or utils like isPattern, or instance of to indentify a pattern in your code.\n * Will be removed in future versiones\n * @TODO add sustainable warning message\n * @type string\n * @deprecated\n */\n get type() {\n return 'pattern';\n }\n\n set type(value) {\n log('warn', 'Setting type has no effect', value);\n }\n\n /**\n * @type PatternRepeat\n * @defaults\n */\n repeat: PatternRepeat = 'repeat';\n\n /**\n * Pattern horizontal offset from object's left/top corner\n * @type Number\n * @default\n */\n offsetX = 0;\n\n /**\n * Pattern vertical offset from object's left/top corner\n * @type Number\n * @default\n */\n offsetY = 0;\n\n /**\n * @type TCrossOrigin\n * @default\n */\n crossOrigin: TCrossOrigin = '';\n\n /**\n * transform matrix to change the pattern, imported from svgs.\n * @todo verify if using the identity matrix as default makes the rest of the code more easy\n * @type Array\n * @default\n */\n declare patternTransform?: TMat2D;\n\n /**\n * The actual pixel source of the pattern\n */\n declare source: CanvasImageSource;\n\n /**\n * If true, this object will not be exported during the serialization of a canvas\n * @type boolean\n */\n declare excludeFromExport?: boolean;\n\n /**\n * ID used for SVG export functionalities\n * @type number\n */\n declare readonly id: number;\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n * @param {option.source} [source] the pattern source, eventually empty or a drawable\n */\n constructor(options: PatternOptions) {\n this.id = uid();\n Object.assign(this, options);\n }\n\n /**\n * @returns true if {@link source} is an element\n */\n isImageSource(): this is { source: HTMLImageElement } {\n return (\n !!this.source && typeof (this.source as HTMLImageElement).src === 'string'\n );\n }\n\n /**\n * @returns true if {@link source} is a element\n */\n isCanvasSource(): this is { source: HTMLCanvasElement } {\n return !!this.source && !!(this.source as HTMLCanvasElement).toDataURL;\n }\n\n sourceToString(): string {\n return this.isImageSource()\n ? this.source.src\n : this.isCanvasSource()\n ? this.source.toDataURL()\n : '';\n }\n\n /**\n * Returns an instance of CanvasPattern\n * @param {CanvasRenderingContext2D} ctx Context to create pattern\n * @return {CanvasPattern}\n */\n toLive(ctx: CanvasRenderingContext2D): CanvasPattern | null {\n if (\n // if the image failed to load, return, and allow rest to continue loading\n !this.source ||\n // if an image\n (this.isImageSource() &&\n (!this.source.complete ||\n this.source.naturalWidth === 0 ||\n this.source.naturalHeight === 0))\n ) {\n return null;\n }\n\n return ctx.createPattern(this.source, this.repeat)!;\n }\n\n /**\n * Returns object representation of a pattern\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {object} Object representation of a pattern instance\n */\n toObject(propertiesToInclude: string[] = []): Record {\n const { repeat, crossOrigin } = this;\n return {\n ...pick(this, propertiesToInclude as (keyof this)[]),\n type: 'pattern',\n source: this.sourceToString(),\n repeat,\n crossOrigin,\n offsetX: toFixed(this.offsetX, config.NUM_FRACTION_DIGITS),\n offsetY: toFixed(this.offsetY, config.NUM_FRACTION_DIGITS),\n patternTransform: this.patternTransform\n ? [...this.patternTransform]\n : null,\n };\n }\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of a pattern\n */\n toSVG({ width, height }: TSize): string {\n const { source: patternSource, repeat, id } = this,\n patternOffsetX = ifNaN(this.offsetX / width, 0),\n patternOffsetY = ifNaN(this.offsetY / height, 0),\n patternWidth =\n repeat === 'repeat-y' || repeat === 'no-repeat'\n ? 1 + Math.abs(patternOffsetX || 0)\n : ifNaN(\n ((patternSource as HTMLImageElement).width as number) / width,\n 0,\n ),\n patternHeight =\n repeat === 'repeat-x' || repeat === 'no-repeat'\n ? 1 + Math.abs(patternOffsetY || 0)\n : ifNaN(\n ((patternSource as HTMLImageElement).height as number) / height,\n 0,\n );\n\n return [\n ``,\n ``,\n ``,\n '',\n ].join('\\n');\n }\n /* _TO_SVG_END_ */\n\n static async fromObject(\n {\n type,\n source,\n patternTransform,\n ...otherOptions\n }: SerializedPatternOptions,\n options?: Abortable,\n ): Promise {\n const img = await loadImage(source, {\n ...options,\n crossOrigin: otherOptions.crossOrigin,\n });\n return new this({\n ...otherOptions,\n patternTransform:\n patternTransform && (patternTransform.slice(0) as TMat2D),\n source: img,\n });\n }\n}\n\nclassRegistry.setClass(Pattern);\n// kept for compatibility reason\nclassRegistry.setClass(Pattern, 'pattern');\n","import { Color } from '../color/Color';\nimport type { Point } from '../Point';\nimport type { Shadow } from '../Shadow';\nimport type { Canvas } from '../canvas/Canvas';\nimport type { TBrushEventData } from './typedefs';\n\n/**\n * @see {@link http://fabricjs.com/freedrawing|Freedrawing demo}\n */\nexport abstract class BaseBrush {\n /**\n * Color of a brush\n * @type String\n * @default\n */\n color = 'rgb(0, 0, 0)';\n\n /**\n * Width of a brush, has to be a Number, no string literals\n * @type Number\n * @default\n */\n width = 1;\n\n /**\n * Shadow object representing shadow of this shape.\n * Backwards incompatibility note: This property replaces \"shadowColor\" (String), \"shadowOffsetX\" (Number),\n * \"shadowOffsetY\" (Number) and \"shadowBlur\" (Number) since v1.2.12\n * @type Shadow\n * @default\n */\n shadow: Shadow | null = null;\n\n /**\n * Line endings style of a brush (one of \"butt\", \"round\", \"square\")\n * @type String\n * @default\n */\n strokeLineCap: CanvasLineCap = 'round';\n\n /**\n * Corner style of a brush (one of \"bevel\", \"round\", \"miter\")\n * @type String\n * @default\n */\n strokeLineJoin: CanvasLineJoin = 'round';\n\n /**\n * Maximum miter length (used for strokeLineJoin = \"miter\") of a brush's\n * @type Number\n * @default\n */\n strokeMiterLimit = 10;\n\n /**\n * Stroke Dash Array.\n * @type Array\n * @default\n */\n strokeDashArray: number[] | null = null;\n\n /**\n * When `true`, the free drawing is limited to the whiteboard size. Default to false.\n * @type Boolean\n * @default false\n */\n\n limitedToCanvasSize = false;\n\n /**\n * @todo add type\n */\n declare canvas: Canvas;\n\n constructor(canvas: Canvas) {\n this.canvas = canvas;\n }\n\n abstract _render(): void;\n abstract onMouseDown(pointer: Point, ev: TBrushEventData): void;\n abstract onMouseMove(pointer: Point, ev: TBrushEventData): void;\n /**\n * @returns true if brush should continue blocking interaction\n */\n abstract onMouseUp(ev: TBrushEventData): boolean | void;\n\n /**\n * Sets brush styles\n * @private\n * @param {CanvasRenderingContext2D} ctx\n */\n _setBrushStyles(ctx: CanvasRenderingContext2D) {\n ctx.strokeStyle = this.color;\n ctx.lineWidth = this.width;\n ctx.lineCap = this.strokeLineCap;\n ctx.miterLimit = this.strokeMiterLimit;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.setLineDash(this.strokeDashArray || []);\n }\n\n /**\n * Sets the transformation on given context\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @private\n */\n protected _saveAndTransform(ctx: CanvasRenderingContext2D) {\n const v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n }\n\n protected needsFullRender() {\n const color = new Color(this.color);\n return color.getAlpha() < 1 || !!this.shadow;\n }\n\n /**\n * Sets brush shadow styles\n * @private\n */\n protected _setShadow() {\n if (!this.shadow || !this.canvas) {\n return;\n }\n\n const canvas = this.canvas,\n shadow = this.shadow,\n ctx = canvas.contextTop,\n zoom = canvas.getZoom() * canvas.getRetinaScaling();\n\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur = shadow.blur * zoom;\n ctx.shadowOffsetX = shadow.offsetX * zoom;\n ctx.shadowOffsetY = shadow.offsetY * zoom;\n }\n\n /**\n * Removes brush shadow styles\n * @private\n */\n protected _resetShadow() {\n const ctx = this.canvas.contextTop;\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n }\n\n /**\n * Check is pointer is outside canvas boundaries\n * @param {Object} pointer\n * @private\n */\n protected _isOutSideCanvas(pointer: Point) {\n return (\n pointer.x < 0 ||\n pointer.x > this.canvas.getWidth() ||\n pointer.y < 0 ||\n pointer.y > this.canvas.getHeight()\n );\n }\n}\n","import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { toFixed } from '../util/misc/toFixed';\nimport {\n getBoundsOfCurve,\n joinPath,\n makePathSimpler,\n parsePath,\n} from '../util/path';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type {\n TComplexPathData,\n TPathSegmentInfo,\n TSimplePathData,\n} from '../util/path/typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type {\n TBBox,\n TClassProperties,\n TSVGReviver,\n TOptions,\n} from '../typedefs';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\ninterface UniquePathProps {\n sourcePath?: string;\n path?: TSimplePathData;\n}\n\nexport interface SerializedPathProps\n extends SerializedObjectProps,\n UniquePathProps {}\n\nexport interface PathProps extends FabricObjectProps, UniquePathProps {}\n\nexport interface IPathBBox extends TBBox {\n left: number;\n top: number;\n pathOffset: Point;\n}\n\nexport class Path<\n Props extends TOptions = Partial,\n SProps extends SerializedPathProps = SerializedPathProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject {\n /**\n * Array of path points\n * @type Array\n * @default\n */\n declare path: TSimplePathData;\n\n declare pathOffset: Point;\n\n declare sourcePath?: string;\n\n declare segmentsInfo?: TPathSegmentInfo[];\n\n static type = 'Path';\n\n static cacheProperties = [...cacheProperties, 'path', 'fillRule'];\n\n /**\n * Constructor\n * @param {TComplexPathData} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {Partial} [options] Options object\n * @return {Path} thisArg\n */\n constructor(\n path: TComplexPathData | string,\n // todo: evaluate this spread here\n { path: _, left, top, ...options }: Partial = {},\n ) {\n super();\n Object.assign(this, Path.ownDefaults);\n this.setOptions(options);\n this._setPath(path || [], true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n /**\n * @private\n * @param {TComplexPathData | string} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {boolean} [adjustPosition] pass true to reposition the object according to the bounding box\n * @returns {Point} top left position of the bounding box, useful for complementary positioning\n */\n _setPath(path: TComplexPathData | string, adjustPosition?: boolean) {\n this.path = makePathSimpler(Array.isArray(path) ? path : parsePath(path));\n this.setBoundingBox(adjustPosition);\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = this._calcBoundsFromPath();\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _renderPathCommands(ctx: CanvasRenderingContext2D) {\n const l = -this.pathOffset.x,\n t = -this.pathOffset.y;\n\n ctx.beginPath();\n\n for (const command of this.path) {\n switch (\n command[0] // first letter\n ) {\n case 'L': // lineto, absolute\n ctx.lineTo(command[1] + l, command[2] + t);\n break;\n\n case 'M': // moveTo, absolute\n ctx.moveTo(command[1] + l, command[2] + t);\n break;\n\n case 'C': // bezierCurveTo, absolute\n ctx.bezierCurveTo(\n command[1] + l,\n command[2] + t,\n command[3] + l,\n command[4] + t,\n command[5] + l,\n command[6] + t,\n );\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n ctx.quadraticCurveTo(\n command[1] + l,\n command[2] + t,\n command[3] + l,\n command[4] + t,\n );\n break;\n\n case 'Z':\n ctx.closePath();\n break;\n }\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _render(ctx: CanvasRenderingContext2D) {\n this._renderPathCommands(ctx);\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns string representation of an instance\n * @return {string} string representation of an instance\n */\n toString() {\n return `#`;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n path: this.path.map((pathCmd) => pathCmd.slice()),\n };\n }\n\n /**\n * Returns dataless object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n const o = this.toObject(propertiesToInclude);\n if (this.sourcePath) {\n delete o.path;\n o.sourcePath = this.sourcePath;\n }\n return o;\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const path = joinPath(this.path, config.NUM_FRACTION_DIGITS);\n return [\n '\\n`,\n ];\n }\n\n /**\n * @private\n * @return the path command's translate transform attribute\n */\n _getOffsetTransform() {\n const digits = config.NUM_FRACTION_DIGITS;\n return ` translate(${toFixed(-this.pathOffset.x, digits)}, ${toFixed(\n -this.pathOffset.y,\n digits,\n )})`;\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {string} svg representation of an instance\n */\n toClipPathSVG(reviver?: TSVGReviver): string {\n const additionalTransform = this._getOffsetTransform();\n return (\n '\\t' +\n this._createBaseClipPathSVGMarkup(this._toSVG(), {\n reviver,\n additionalTransform: additionalTransform,\n })\n );\n }\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {string} svg representation of an instance\n */\n toSVG(reviver?: TSVGReviver): string {\n const additionalTransform = this._getOffsetTransform();\n return this._createBaseSVGMarkup(this._toSVG(), {\n reviver,\n additionalTransform: additionalTransform,\n });\n }\n\n /**\n * Returns number representation of an instance complexity\n * @return {number} complexity of this instance\n */\n complexity() {\n return this.path.length;\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { width, height, pathOffset } = this._calcDimensions();\n this.set({ width, height, pathOffset });\n // using pathOffset because it match the use case.\n // if pathOffset change here we need to use left + width/2 , top + height/2\n adjustPosition && this.setPositionByOrigin(pathOffset, CENTER, CENTER);\n }\n\n _calcBoundsFromPath(): TBBox {\n const bounds: XY[] = [];\n let subpathStartX = 0,\n subpathStartY = 0,\n x = 0, // current x\n y = 0; // current y\n\n for (const command of this.path) {\n // current instruction\n switch (\n command[0] // first letter\n ) {\n case 'L': // lineto, absolute\n x = command[1];\n y = command[2];\n bounds.push({ x: subpathStartX, y: subpathStartY }, { x, y });\n break;\n\n case 'M': // moveTo, absolute\n x = command[1];\n y = command[2];\n subpathStartX = x;\n subpathStartY = y;\n break;\n\n case 'C': // bezierCurveTo, absolute\n bounds.push(\n ...getBoundsOfCurve(\n x,\n y,\n command[1],\n command[2],\n command[3],\n command[4],\n command[5],\n command[6],\n ),\n );\n x = command[5];\n y = command[6];\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n bounds.push(\n ...getBoundsOfCurve(\n x,\n y,\n command[1],\n command[2],\n command[1],\n command[2],\n command[3],\n command[4],\n ),\n );\n x = command[3];\n y = command[4];\n break;\n\n case 'Z':\n x = subpathStartX;\n y = subpathStartY;\n break;\n }\n }\n return makeBoundingBoxFromPoints(bounds);\n }\n\n /**\n * @private\n */\n _calcDimensions(): IPathBBox {\n const bbox = this._calcBoundsFromPath();\n\n return {\n ...bbox,\n pathOffset: new Point(\n bbox.left + bbox.width / 2,\n bbox.top + bbox.height / 2,\n ),\n };\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `Path.fromElement`)\n * @static\n * @memberOf Path\n * @see http://www.w3.org/TR/SVG/paths.html#PathElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'd'];\n\n /**\n * Creates an instance of Path from an object\n * @static\n * @memberOf Path\n * @param {Object} object\n * @returns {Promise}\n */\n static fromObject>(object: T) {\n return this._fromObject(object, {\n extraParam: 'path',\n });\n }\n\n /**\n * Creates an instance of Path from an SVG element\n * @static\n * @memberOf Path\n * @param {HTMLElement} element to parse\n * @param {Partial} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Partial,\n cssRules?: CSSRules,\n ) {\n const { d, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(d, {\n ...parsedAttributes,\n ...options,\n // we pass undefined to instruct the constructor to position the object using the bbox\n left: undefined,\n top: undefined,\n });\n }\n}\n\nclassRegistry.setClass(Path);\nclassRegistry.setSVGClass(Path);\n\n/* _FROM_SVG_START_ */\n","import type { ModifierKey, TEvent } from '../EventTypeDefs';\nimport type { Point } from '../Point';\nimport { Shadow } from '../Shadow';\nimport { Path } from '../shapes/Path';\nimport { getSmoothPathFromPoints, joinPath } from '../util/path';\nimport type { Canvas } from '../canvas/Canvas';\nimport { BaseBrush } from './BaseBrush';\nimport type { TSimplePathData } from '../util/path/typedefs';\n\n/**\n * @private\n * @param {TSimplePathData} pathData SVG path commands\n * @returns {boolean}\n */\nfunction isEmptySVGPath(pathData: TSimplePathData): boolean {\n return joinPath(pathData) === 'M 0 0 Q 0 0 0 0 L 0 0';\n}\n\nexport class PencilBrush extends BaseBrush {\n /**\n * Discard points that are less than `decimate` pixel distant from each other\n * @type Number\n * @default 0.4\n */\n decimate = 0.4;\n\n /**\n * Draws a straight line between last recorded point to current pointer\n * Used for `shift` functionality\n *\n * @type boolean\n * @default false\n */\n drawStraightLine = false;\n\n /**\n * The event modifier key that makes the brush draw a straight line.\n * If `null` or 'none' or any other string that is not a modifier key the feature is disabled.\n * @type {ModifierKey | undefined | null}\n */\n straightLineKey: ModifierKey | undefined | null = 'shiftKey';\n\n private declare _points: Point[];\n private declare _hasStraightLine: boolean;\n private declare oldEnd?: Point;\n\n constructor(canvas: Canvas) {\n super(canvas);\n this._points = [];\n this._hasStraightLine = false;\n }\n\n needsFullRender() {\n return super.needsFullRender() || this._hasStraightLine;\n }\n\n static drawSegment(ctx: CanvasRenderingContext2D, p1: Point, p2: Point) {\n const midPoint = p1.midPointFrom(p2);\n ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n return midPoint;\n }\n\n /**\n * Invoked on mouse down\n * @param {Point} pointer\n */\n onMouseDown(pointer: Point, { e }: TEvent) {\n if (!this.canvas._isMainEvent(e)) {\n return;\n }\n this.drawStraightLine = !!this.straightLineKey && e[this.straightLineKey];\n this._prepareForDrawing(pointer);\n // capture coordinates immediately\n // this allows to draw dots (when movement never occurs)\n this._addPoint(pointer);\n this._render();\n }\n\n /**\n * Invoked on mouse move\n * @param {Point} pointer\n */\n onMouseMove(pointer: Point, { e }: TEvent) {\n if (!this.canvas._isMainEvent(e)) {\n return;\n }\n this.drawStraightLine = !!this.straightLineKey && e[this.straightLineKey];\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n if (this._addPoint(pointer) && this._points.length > 1) {\n if (this.needsFullRender()) {\n // redraw curve\n // clear top canvas\n this.canvas.clearContext(this.canvas.contextTop);\n this._render();\n } else {\n const points = this._points,\n length = points.length,\n ctx = this.canvas.contextTop;\n // draw the curve update\n this._saveAndTransform(ctx);\n if (this.oldEnd) {\n ctx.beginPath();\n ctx.moveTo(this.oldEnd.x, this.oldEnd.y);\n }\n this.oldEnd = PencilBrush.drawSegment(\n ctx,\n points[length - 2],\n points[length - 1],\n );\n ctx.stroke();\n ctx.restore();\n }\n }\n }\n\n /**\n * Invoked on mouse up\n */\n onMouseUp({ e }: TEvent) {\n if (!this.canvas._isMainEvent(e)) {\n return true;\n }\n this.drawStraightLine = false;\n this.oldEnd = undefined;\n this._finalizeAndAddPath();\n return false;\n }\n\n /**\n * @private\n * @param {Point} pointer Actual mouse position related to the canvas.\n */\n _prepareForDrawing(pointer: Point) {\n this._reset();\n this._addPoint(pointer);\n this.canvas.contextTop.moveTo(pointer.x, pointer.y);\n }\n\n /**\n * @private\n * @param {Point} point Point to be added to points array\n */\n _addPoint(point: Point) {\n if (\n this._points.length > 1 &&\n point.eq(this._points[this._points.length - 1])\n ) {\n return false;\n }\n if (this.drawStraightLine && this._points.length > 1) {\n this._hasStraightLine = true;\n this._points.pop();\n }\n this._points.push(point);\n return true;\n }\n\n /**\n * Clear points array and set contextTop canvas style.\n * @private\n */\n _reset() {\n this._points = [];\n this._setBrushStyles(this.canvas.contextTop);\n this._setShadow();\n this._hasStraightLine = false;\n }\n\n /**\n * Draw a smooth path on the topCanvas using quadraticCurveTo\n * @private\n * @param {CanvasRenderingContext2D} [ctx]\n */\n _render(ctx: CanvasRenderingContext2D = this.canvas.contextTop) {\n let p1 = this._points[0],\n p2 = this._points[1];\n this._saveAndTransform(ctx);\n ctx.beginPath();\n //if we only have 2 points in the path and they are the same\n //it means that the user only clicked the canvas without moving the mouse\n //then we should be drawing a dot. A path isn't drawn between two identical dots\n //that's why we set them apart a bit\n if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) {\n const width = this.width / 1000;\n p1.x -= width;\n p2.x += width;\n }\n ctx.moveTo(p1.x, p1.y);\n\n for (let i = 1; i < this._points.length; i++) {\n // we pick the point between pi + 1 & pi + 2 as the\n // end point and p1 as our control point.\n PencilBrush.drawSegment(ctx, p1, p2);\n p1 = this._points[i];\n p2 = this._points[i + 1];\n }\n // Draw last line as a straight line while\n // we wait for the next point to be able to calculate\n // the bezier control point\n ctx.lineTo(p1.x, p1.y);\n ctx.stroke();\n ctx.restore();\n }\n\n /**\n * Converts points to SVG path\n * @param {Point[]} points Array of points\n * @return {TSimplePathData} SVG path commands\n */\n convertPointsToSVGPath(points: Point[]): TSimplePathData {\n const correction = this.width / 1000;\n return getSmoothPathFromPoints(points, correction);\n }\n\n /**\n * Creates a Path object to add on canvas\n * @param {TSimplePathData} pathData Path data\n * @return {Path} Path to add on canvas\n */\n createPath(pathData: TSimplePathData): Path {\n const path = new Path(pathData, {\n fill: null,\n stroke: this.color,\n strokeWidth: this.width,\n strokeLineCap: this.strokeLineCap,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeLineJoin: this.strokeLineJoin,\n strokeDashArray: this.strokeDashArray,\n });\n if (this.shadow) {\n this.shadow.affectStroke = true;\n path.shadow = new Shadow(this.shadow);\n }\n\n return path;\n }\n\n /**\n * Decimate points array with the decimate value\n */\n decimatePoints(points: Point[], distance: number) {\n if (points.length <= 2) {\n return points;\n }\n let lastPoint = points[0],\n cDistance;\n const zoom = this.canvas.getZoom(),\n adjustedDistance = Math.pow(distance / zoom, 2),\n l = points.length - 1,\n newPoints = [lastPoint];\n for (let i = 1; i < l - 1; i++) {\n cDistance =\n Math.pow(lastPoint.x - points[i].x, 2) +\n Math.pow(lastPoint.y - points[i].y, 2);\n if (cDistance >= adjustedDistance) {\n lastPoint = points[i];\n newPoints.push(lastPoint);\n }\n }\n // Add the last point from the original line to the end of the array.\n // This ensures decimate doesn't delete the last point on the line, and ensures the line is > 1 point.\n newPoints.push(points[l]);\n return newPoints;\n }\n\n /**\n * On mouseup after drawing the path on contextTop canvas\n * we use the points captured to create an new Path object\n * and add it to the canvas.\n */\n _finalizeAndAddPath() {\n const ctx = this.canvas.contextTop;\n ctx.closePath();\n if (this.decimate) {\n this._points = this.decimatePoints(this._points, this.decimate);\n }\n const pathData = this.convertPointsToSVGPath(this._points);\n if (isEmptySVGPath(pathData)) {\n // do not create 0 width/height paths, as they are\n // rendered inconsistently across browsers\n // Firefox 4, for example, renders a dot,\n // whereas Chrome 10 renders nothing\n this.canvas.requestRenderAll();\n return;\n }\n\n const path = this.createPath(pathData);\n this.canvas.clearContext(this.canvas.contextTop);\n this.canvas.fire('before:path:created', { path: path });\n this.canvas.add(path);\n this.canvas.requestRenderAll();\n path.setCoords();\n this._resetShadow();\n\n // fire event 'path' created\n this.canvas.fire('path:created', { path: path });\n }\n}\n","import type { ObjectEvents } from '../EventTypeDefs';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { cos } from '../util/misc/cos';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { sin } from '../util/misc/sin';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { CSSRules } from '../parser/typedefs';\nimport { SCALE_X, SCALE_Y } from '../constants';\n\ninterface UniqueCircleProps {\n /**\n * Radius of this circle\n * @type Number\n * @default 0\n */\n radius: number;\n\n /**\n * Angle for the start of the circle, in degrees.\n * @type TDegree 0 - 359\n * @default 0\n */\n startAngle: number;\n\n /**\n * Angle for the end of the circle, in degrees\n * @type TDegree 1 - 360\n * @default 360\n */\n endAngle: number;\n\n /**\n * Orientation for the direction of the circle.\n * Setting to true will switch the arc of the circle to traverse from startAngle to endAngle in a counter-clockwise direction.\n * Note: this will only change how the circle is drawn, and does not affect rotational transformation.\n * @default false\n */\n counterClockwise: boolean;\n}\n\nexport interface SerializedCircleProps\n extends SerializedObjectProps,\n UniqueCircleProps {}\n\nexport interface CircleProps extends FabricObjectProps, UniqueCircleProps {}\n\nconst CIRCLE_PROPS = [\n 'radius',\n 'startAngle',\n 'endAngle',\n 'counterClockwise',\n] as const;\n\nexport const circleDefaultValues: Partial> = {\n radius: 0,\n startAngle: 0,\n endAngle: 360,\n counterClockwise: false,\n};\n\nexport class Circle<\n Props extends TOptions = Partial,\n SProps extends SerializedCircleProps = SerializedCircleProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements UniqueCircleProps\n{\n declare radius: number;\n declare startAngle: number;\n declare endAngle: number;\n declare counterClockwise: boolean;\n\n static type = 'Circle';\n\n static cacheProperties = [...cacheProperties, ...CIRCLE_PROPS];\n\n static ownDefaults = circleDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Circle.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Circle.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n super._set(key, value);\n\n if (key === 'radius') {\n this.setRadius(value);\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n ctx.arc(\n 0,\n 0,\n this.radius,\n degreesToRadians(this.startAngle),\n degreesToRadians(this.endAngle),\n this.counterClockwise,\n );\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusX(): number {\n return this.get('radius') * this.get(SCALE_X);\n }\n\n /**\n * Returns vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusY(): number {\n return this.get('radius') * this.get(SCALE_Y);\n }\n\n /**\n * Sets radius of an object (and updates width accordingly)\n */\n setRadius(value: number) {\n this.radius = value;\n this.set({ width: value * 2, height: value * 2 });\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([...CIRCLE_PROPS, ...propertiesToInclude]);\n }\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG(): string[] {\n const angle = (this.endAngle - this.startAngle) % 360;\n\n if (angle === 0) {\n return [\n '\\n',\n ];\n } else {\n const { radius } = this;\n const start = degreesToRadians(this.startAngle),\n end = degreesToRadians(this.endAngle),\n startX = cos(start) * radius,\n startY = sin(start) * radius,\n endX = cos(end) * radius,\n endY = sin(end) * radius,\n largeFlag = angle > 180 ? 1 : 0,\n sweepFlag = this.counterClockwise ? 0 : 1;\n return [\n `\\n',\n ];\n }\n }\n /* _TO_SVG_END_ */\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Circle.fromElement})\n * @static\n * @memberOf Circle\n * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement\n */\n static ATTRIBUTE_NAMES = ['cx', 'cy', 'r', ...SHARED_ATTRIBUTES];\n\n /**\n * Returns {@link Circle} instance from an SVG element\n * @static\n * @memberOf Circle\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Partial Circle object to default missing properties on the element.\n * @throws {Error} If value of `r` attribute is missing or invalid\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ): Promise {\n const {\n left = 0,\n top = 0,\n radius = 0,\n ...otherParsedAttributes\n } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n ) as Partial;\n\n // this probably requires to be fixed for default origins not being top/left.\n\n return new this({\n ...otherParsedAttributes,\n radius,\n left: left - radius,\n top: top - radius,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * @todo how do we declare this??\n */\n static fromObject>(object: T) {\n return super._fromObject(object);\n }\n}\n\nclassRegistry.setClass(Circle);\nclassRegistry.setSVGClass(Circle);\n","import { Color } from '../color/Color';\nimport type { Point } from '../Point';\nimport { Shadow } from '../Shadow';\nimport { Circle } from '../shapes/Circle';\nimport { Group } from '../shapes/Group';\nimport { getRandomInt } from '../util/internals/getRandomInt';\nimport type { Canvas } from '../canvas/Canvas';\nimport { BaseBrush } from './BaseBrush';\nimport type { CircleBrushPoint } from './typedefs';\nimport { CENTER } from '../constants';\n\nexport class CircleBrush extends BaseBrush {\n /**\n * Width of a brush\n * @type Number\n * @default\n */\n width = 10;\n\n declare points: CircleBrushPoint[];\n\n constructor(canvas: Canvas) {\n super(canvas);\n this.points = [];\n }\n\n /**\n * Invoked inside on mouse down and mouse move\n * @param {Point} pointer\n */\n drawDot(pointer: Point) {\n const point = this.addPoint(pointer),\n ctx = this.canvas.contextTop;\n this._saveAndTransform(ctx);\n this.dot(ctx, point);\n ctx.restore();\n }\n\n dot(ctx: CanvasRenderingContext2D, point: CircleBrushPoint) {\n ctx.fillStyle = point.fill;\n ctx.beginPath();\n ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n }\n\n /**\n * Invoked on mouse down\n */\n onMouseDown(pointer: Point) {\n this.points = [];\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n this.drawDot(pointer);\n }\n\n /**\n * Render the full state of the brush\n * @private\n */\n _render() {\n const ctx = this.canvas.contextTop,\n points = this.points;\n this._saveAndTransform(ctx);\n for (let i = 0; i < points.length; i++) {\n this.dot(ctx, points[i]);\n }\n ctx.restore();\n }\n\n /**\n * Invoked on mouse move\n * @param {Point} pointer\n */\n onMouseMove(pointer: Point) {\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n if (this.needsFullRender()) {\n this.canvas.clearContext(this.canvas.contextTop);\n this.addPoint(pointer);\n this._render();\n } else {\n this.drawDot(pointer);\n }\n }\n\n /**\n * Invoked on mouse up\n */\n onMouseUp() {\n const originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\n this.canvas.renderOnAddRemove = false;\n\n const circles: Circle[] = [];\n\n for (let i = 0; i < this.points.length; i++) {\n const point = this.points[i],\n circle = new Circle({\n radius: point.radius,\n left: point.x,\n top: point.y,\n originX: CENTER,\n originY: CENTER,\n fill: point.fill,\n });\n\n this.shadow && (circle.shadow = new Shadow(this.shadow));\n\n circles.push(circle);\n }\n const group = new Group(circles, { canvas: this.canvas });\n\n this.canvas.fire('before:path:created', { path: group });\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n }\n\n /**\n * @param {Object} pointer\n * @return {Point} Just added pointer point\n */\n addPoint({ x, y }: Point) {\n const pointerPoint: CircleBrushPoint = {\n x,\n y,\n radius: getRandomInt(Math.max(0, this.width - 20), this.width + 20) / 2,\n fill: new Color(this.color).setAlpha(getRandomInt(0, 100) / 100).toRgba(),\n };\n\n this.points.push(pointerPoint);\n\n return pointerPoint;\n }\n}\n","import type { Point } from '../Point';\nimport { Group } from '../shapes/Group';\nimport { Shadow } from '../Shadow';\nimport { Rect } from '../shapes/Rect';\nimport { getRandomInt } from '../util/internals/getRandomInt';\nimport type { Canvas } from '../canvas/Canvas';\nimport { BaseBrush } from './BaseBrush';\nimport type { SprayBrushPoint } from './typedefs';\nimport { CENTER } from '../constants';\n\n/**\n *\n * @param rects\n * @returns\n */\nfunction getUniqueRects(rects: Rect[]) {\n const uniqueRects: Record = {};\n const uniqueRectsArray: Rect[] = [];\n\n for (let i = 0, key: string; i < rects.length; i++) {\n key = `${rects[i].left}${rects[i].top}`;\n if (!uniqueRects[key]) {\n uniqueRects[key] = true;\n uniqueRectsArray.push(rects[i]);\n }\n }\n\n return uniqueRectsArray;\n}\n\nexport class SprayBrush extends BaseBrush {\n /**\n * Width of a spray\n * @type Number\n * @default\n */\n width = 10;\n\n /**\n * Density of a spray (number of dots per chunk)\n * @type Number\n * @default\n */\n density = 20;\n\n /**\n * Width of spray dots\n * @type Number\n * @default\n */\n dotWidth = 1;\n\n /**\n * Width variance of spray dots\n * @type Number\n * @default\n */\n dotWidthVariance = 1;\n\n /**\n * Whether opacity of a dot should be random\n * @type Boolean\n * @default\n */\n randomOpacity = false;\n\n /**\n * Whether overlapping dots (rectangles) should be removed (for performance reasons)\n * @type Boolean\n * @default\n */\n optimizeOverlapping = true;\n\n private declare sprayChunks: SprayBrushPoint[][];\n\n private declare sprayChunk: SprayBrushPoint[];\n\n /**\n * Constructor\n * @param {Canvas} canvas\n * @return {SprayBrush} Instance of a spray brush\n */\n constructor(canvas: Canvas) {\n super(canvas);\n this.sprayChunks = [];\n this.sprayChunk = [];\n }\n\n /**\n * Invoked on mouse down\n * @param {Point} pointer\n */\n onMouseDown(pointer: Point) {\n this.sprayChunks = [];\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n\n this.addSprayChunk(pointer);\n this.renderChunck(this.sprayChunk);\n }\n\n /**\n * Invoked on mouse move\n * @param {Point} pointer\n */\n onMouseMove(pointer: Point) {\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n this.addSprayChunk(pointer);\n this.renderChunck(this.sprayChunk);\n }\n\n /**\n * Invoked on mouse up\n */\n onMouseUp() {\n const originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\n this.canvas.renderOnAddRemove = false;\n\n const rects: Rect[] = [];\n\n for (let i = 0; i < this.sprayChunks.length; i++) {\n const sprayChunk = this.sprayChunks[i];\n for (let j = 0; j < sprayChunk.length; j++) {\n const chunck = sprayChunk[j];\n const rect = new Rect({\n width: chunck.width,\n height: chunck.width,\n left: chunck.x + 1,\n top: chunck.y + 1,\n originX: CENTER,\n originY: CENTER,\n fill: this.color,\n });\n rects.push(rect);\n }\n }\n\n const group = new Group(\n this.optimizeOverlapping ? getUniqueRects(rects) : rects,\n {\n objectCaching: true,\n subTargetCheck: false,\n interactive: false,\n },\n );\n this.shadow && group.set('shadow', new Shadow(this.shadow));\n this.canvas.fire('before:path:created', { path: group });\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n }\n\n renderChunck(sprayChunck: SprayBrushPoint[]) {\n const ctx = this.canvas.contextTop;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (let i = 0; i < sprayChunck.length; i++) {\n const point = sprayChunck[i];\n ctx.globalAlpha = point.opacity;\n ctx.fillRect(point.x, point.y, point.width, point.width);\n }\n\n ctx.restore();\n }\n\n /**\n * Render all spray chunks\n */\n _render() {\n const ctx = this.canvas.contextTop;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (let i = 0; i < this.sprayChunks.length; i++) {\n this.renderChunck(this.sprayChunks[i]);\n }\n ctx.restore();\n }\n\n /**\n * @param {Point} pointer\n */\n addSprayChunk(pointer: Point) {\n this.sprayChunk = [];\n const radius = this.width / 2;\n\n for (let i = 0; i < this.density; i++) {\n this.sprayChunk.push({\n x: getRandomInt(pointer.x - radius, pointer.x + radius),\n y: getRandomInt(pointer.y - radius, pointer.y + radius),\n width: this.dotWidthVariance\n ? getRandomInt(\n // bottom clamp width to 1\n Math.max(1, this.dotWidth - this.dotWidthVariance),\n this.dotWidth + this.dotWidthVariance,\n )\n : this.dotWidth,\n opacity: this.randomOpacity ? getRandomInt(0, 100) / 100 : 1,\n });\n }\n\n this.sprayChunks.push(this.sprayChunk);\n }\n}\n","import { Pattern } from '../Pattern';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type { Canvas } from '../canvas/Canvas';\nimport { PencilBrush } from './PencilBrush';\nimport type { TSimplePathData } from '../util/path/typedefs';\n\nexport class PatternBrush extends PencilBrush {\n declare source?: CanvasImageSource;\n\n constructor(canvas: Canvas) {\n super(canvas);\n }\n\n getPatternSrc() {\n const dotWidth = 20,\n dotDistance = 5,\n patternCanvas = createCanvasElement(),\n patternCtx = patternCanvas.getContext('2d');\n\n patternCanvas.width = patternCanvas.height = dotWidth + dotDistance;\n if (patternCtx) {\n patternCtx.fillStyle = this.color;\n patternCtx.beginPath();\n patternCtx.arc(\n dotWidth / 2,\n dotWidth / 2,\n dotWidth / 2,\n 0,\n Math.PI * 2,\n false,\n );\n patternCtx.closePath();\n patternCtx.fill();\n }\n return patternCanvas;\n }\n\n /**\n * Creates \"pattern\" instance property\n * @param {CanvasRenderingContext2D} ctx\n */\n getPattern(ctx: CanvasRenderingContext2D) {\n return ctx.createPattern(this.source || this.getPatternSrc(), 'repeat');\n }\n\n /**\n * Sets brush styles\n * @param {CanvasRenderingContext2D} ctx\n */\n _setBrushStyles(ctx: CanvasRenderingContext2D) {\n super._setBrushStyles(ctx);\n const pattern = this.getPattern(ctx);\n pattern && (ctx.strokeStyle = pattern);\n }\n\n /**\n * Creates path\n */\n createPath(pathData: TSimplePathData) {\n const path = super.createPath(pathData),\n topLeft = path._getLeftTopCoords().scalarAdd(path.strokeWidth / 2);\n\n path.stroke = new Pattern({\n source: this.source || this.getPatternSrc(),\n offsetX: -topLeft.x,\n offsetY: -topLeft.y,\n });\n return path;\n }\n}\n","import { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport { Point } from '../Point';\nimport { isFiller } from '../util/typeAssertions';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { makeBoundingBoxFromPoints } from '../util';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\n// @TODO this code is terrible and Line should be a special case of polyline.\n\nconst coordProps = ['x1', 'x2', 'y1', 'y2'] as const;\n\ninterface UniqueLineProps {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport interface SerializedLineProps\n extends SerializedObjectProps,\n UniqueLineProps {}\n\nexport class Line<\n Props extends TOptions = Partial,\n SProps extends SerializedLineProps = SerializedLineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements UniqueLineProps\n{\n /**\n * x value or first line edge\n * @type number\n * @default\n */\n declare x1: number;\n\n /**\n * y value or first line edge\n * @type number\n * @default\n */\n declare y1: number;\n\n /**\n * x value or second line edge\n * @type number\n * @default\n */\n declare x2: number;\n\n /**\n * y value or second line edge\n * @type number\n * @default\n */\n declare y2: number;\n\n static type = 'Line';\n\n static cacheProperties = [...cacheProperties, ...coordProps];\n /**\n * Constructor\n * @param {Array} [points] Array of points\n * @param {Object} [options] Options object\n * @return {Line} thisArg\n */\n constructor([x1, y1, x2, y2] = [0, 0, 0, 0], options: Partial = {}) {\n super();\n Object.assign(this, Line.ownDefaults);\n this.setOptions(options);\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\n this._setWidthHeight();\n const { left, top } = options;\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n /**\n * @private\n * @param {Object} [options] Options\n */\n _setWidthHeight() {\n const { x1, y1, x2, y2 } = this;\n this.width = Math.abs(x2 - x1);\n this.height = Math.abs(y2 - y1);\n const { left, top, width, height } = makeBoundingBoxFromPoints([\n { x: x1, y: y1 },\n { x: x2, y: y2 },\n ]);\n const position = new Point(left + width / 2, top + height / 2);\n this.setPositionByOrigin(position, CENTER, CENTER);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n super._set(key, value);\n if (coordProps.includes(key as keyof UniqueLineProps)) {\n // this doesn't make sense very much, since setting x1 when top or left\n // are already set, is just going to show a strange result since the\n // line will move way more than the developer expect.\n // in fabric5 it worked only when the line didn't have extra transformations,\n // in fabric6 too. With extra transform they behave bad in different ways.\n // This needs probably a good rework or a tutorial if you have to create a dynamic line\n this._setWidthHeight();\n }\n return this;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n\n const p = this.calcLinePoints();\n ctx.moveTo(p.x1, p.y1);\n ctx.lineTo(p.x2, p.y2);\n\n ctx.lineWidth = this.strokeWidth;\n\n // TODO: test this\n // make sure setting \"fill\" changes color of a line\n // (by copying fillStyle to strokeStyle, since line is stroked, not filled)\n const origStrokeStyle = ctx.strokeStyle;\n if (isFiller(this.stroke)) {\n ctx.strokeStyle = this.stroke.toLive(ctx)!;\n } else {\n ctx.strokeStyle = this.stroke ?? ctx.fillStyle;\n }\n this.stroke && this._renderStroke(ctx);\n ctx.strokeStyle = origStrokeStyle;\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n return new Point((this.x1 + this.x2) / 2, (this.y1 + this.y2) / 2);\n }\n\n /**\n * Returns object representation of an instance\n * @method toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n ...this.calcLinePoints(),\n };\n }\n\n /*\n * Calculate object dimensions from its properties\n * @private\n */\n _getNonTransformedDimensions(): Point {\n const dim = super._getNonTransformedDimensions();\n if (this.strokeLineCap === 'butt') {\n if (this.width === 0) {\n dim.y -= this.strokeWidth;\n }\n if (this.height === 0) {\n dim.x -= this.strokeWidth;\n }\n }\n return dim;\n }\n\n /**\n * Recalculates line points given width and height\n * Those points are simply placed around the center,\n * This is not useful outside internal render functions and svg output\n * Is not meant to be for the developer.\n * @private\n */\n calcLinePoints(): UniqueLineProps {\n const { x1: _x1, x2: _x2, y1: _y1, y2: _y2, width, height } = this;\n const xMult = _x1 <= _x2 ? -1 : 1,\n yMult = _y1 <= _y2 ? -1 : 1,\n x1 = (xMult * width) / 2,\n y1 = (yMult * height) / 2,\n x2 = (xMult * -width) / 2,\n y2 = (yMult * -height) / 2;\n\n return {\n x1,\n x2,\n y1,\n y2,\n };\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const { x1, x2, y1, y2 } = this.calcLinePoints();\n return [\n '\\n`,\n ];\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Line.fromElement})\n * @static\n * @memberOf Line\n * @see http://www.w3.org/TR/SVG/shapes.html#LineElement\n */\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(coordProps);\n\n /**\n * Returns Line instance from an SVG element\n * @static\n * @memberOf Line\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {Function} [callback] callback function invoked after parsing\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const {\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n ...parsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n return new this([x1, y1, x2, y2], parsedAttributes);\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Line instance from an object representation\n * @static\n * @memberOf Line\n * @param {Object} object Object to create an instance from\n * @returns {Promise}\n */\n static fromObject>({\n x1,\n y1,\n x2,\n y2,\n ...object\n }: T) {\n return this._fromObject(\n {\n ...object,\n points: [x1, y1, x2, y2],\n },\n {\n extraParam: 'points',\n },\n );\n }\n}\n\nclassRegistry.setClass(Line);\nclassRegistry.setSVGClass(Line);\n","import { classRegistry } from '../ClassRegistry';\nimport { FabricObject } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { TClassProperties, TOptions } from '../typedefs';\nimport type { ObjectEvents } from '../EventTypeDefs';\n\nexport const triangleDefaultValues: Partial> = {\n width: 100,\n height: 100,\n};\n\nexport class Triangle<\n Props extends TOptions = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements FabricObjectProps\n{\n static type = 'Triangle';\n\n static ownDefaults = triangleDefaultValues;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...Triangle.ownDefaults };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Triangle.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const widthBy2 = this.width / 2,\n heightBy2 = this.height / 2;\n\n ctx.beginPath();\n ctx.moveTo(-widthBy2, heightBy2);\n ctx.lineTo(0, -heightBy2);\n ctx.lineTo(widthBy2, heightBy2);\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const widthBy2 = this.width / 2,\n heightBy2 = this.height / 2,\n points = `${-widthBy2} ${heightBy2},0 ${-heightBy2},${widthBy2} ${heightBy2}`;\n return [''];\n }\n}\n\nclassRegistry.setClass(Triangle);\nclassRegistry.setSVGClass(Triangle);\n","import { SCALE_X, SCALE_Y, twoMathPi } from '../constants';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const ellipseDefaultValues: Partial> = {\n rx: 0,\n ry: 0,\n};\n\ninterface UniqueEllipseProps {\n rx: number;\n ry: number;\n}\n\nexport interface SerializedEllipseProps\n extends SerializedObjectProps,\n UniqueEllipseProps {}\n\nexport interface EllipseProps extends FabricObjectProps, UniqueEllipseProps {}\n\nconst ELLIPSE_PROPS = ['rx', 'ry'] as const;\n\nexport class Ellipse<\n Props extends TOptions = Partial,\n SProps extends SerializedEllipseProps = SerializedEllipseProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements EllipseProps\n{\n /**\n * Horizontal radius\n * @type Number\n * @default\n */\n declare rx: number;\n\n /**\n * Vertical radius\n * @type Number\n * @default\n */\n declare ry: number;\n\n static type = 'Ellipse';\n\n static cacheProperties = [...cacheProperties, ...ELLIPSE_PROPS];\n\n static ownDefaults = ellipseDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Ellipse.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Ellipse.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {Ellipse} thisArg\n */\n _set(key: string, value: any) {\n super._set(key, value);\n switch (key) {\n case 'rx':\n this.rx = value;\n this.set('width', value * 2);\n break;\n\n case 'ry':\n this.ry = value;\n this.set('height', value * 2);\n break;\n }\n return this;\n }\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRx() {\n return this.get('rx') * this.get(SCALE_X);\n }\n\n /**\n * Returns Vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRy() {\n return this.get('ry') * this.get(SCALE_Y);\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([...ELLIPSE_PROPS, ...propertiesToInclude]);\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG(): string[] {\n return [\n '\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n ctx.save();\n ctx.transform(1, 0, 0, this.ry / this.rx, 0, 0);\n ctx.arc(0, 0, this.rx, 0, twoMathPi, false);\n ctx.restore();\n this._renderPaintInOrder(ctx);\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Ellipse.fromElement})\n * @static\n * @memberOf Ellipse\n * @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'cx', 'cy', 'rx', 'ry'];\n\n /**\n * Returns {@link Ellipse} instance from an SVG element\n * @static\n * @memberOf Ellipse\n * @param {HTMLElement} element Element to parse\n * @return {Ellipse}\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const parsedAttributes = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n\n parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx;\n parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry;\n return new this(parsedAttributes);\n }\n\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Ellipse);\nclassRegistry.setSVGClass(Ellipse);\n","import type { XY } from '../Point';\n\n/**\n * Parses \"points\" attribute, returning an array of values\n * @static\n * @memberOf fabric\n * @param {String} points points attribute string\n * @return {Array} array of points\n */\nexport function parsePointsAttribute(points: string | null): XY[] {\n // points attribute is required and must not be empty\n if (!points) {\n return [];\n }\n\n // replace commas with whitespace and remove bookending whitespace\n const pointsSplit: string[] = points.replace(/,/g, ' ').trim().split(/\\s+/);\n\n const parsedPoints = [];\n\n for (let i = 0; i < pointsSplit.length; i += 2) {\n parsedPoints.push({\n x: parseFloat(pointsSplit[i]),\n y: parseFloat(pointsSplit[i + 1]),\n });\n }\n\n // odd number of points is an error\n // if (parsedPoints.length % 2 !== 0) {\n // return null;\n // }\n return parsedPoints;\n}\n","import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { parsePointsAttribute } from '../parser/parsePointsAttribute';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { calcDimensionsMatrix, transformPoint } from '../util/misc/matrix';\nimport { projectStrokeOnPoints } from '../util/misc/projectStroke';\nimport type { TProjectStrokeOnPointsOptions } from '../util/misc/projectStroke/types';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport {\n CENTER,\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const polylineDefaultValues: Partial> = {\n /**\n * @deprecated transient option soon to be removed in favor of a different design\n */\n exactBoundingBox: false,\n};\n\nexport interface SerializedPolylineProps extends SerializedObjectProps {\n points: XY[];\n}\n\nexport class Polyline<\n Props extends TOptions = Partial,\n SProps extends SerializedPolylineProps = SerializedPolylineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject {\n /**\n * Points array\n * @type Array\n * @default\n */\n declare points: XY[];\n\n /**\n * WARNING: Feature in progress\n * Calculate the exact bounding box taking in account strokeWidth on acute angles\n * this will be turned to true by default on fabric 6.0\n * maybe will be left in as an optimization since calculations may be slow\n * @deprecated transient option soon to be removed in favor of a different design\n * @type Boolean\n * @default false\n */\n declare exactBoundingBox: boolean;\n\n private declare initialized: true | undefined;\n\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polyline';\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Polyline.ownDefaults,\n };\n }\n\n /**\n * A list of properties that if changed trigger a recalculation of dimensions\n * @todo check if you really need to recalculate for all cases\n */\n static layoutProperties: (keyof Polyline)[] = [\n SKEW_X,\n SKEW_Y,\n 'strokeLineCap',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'strokeWidth',\n 'strokeUniform',\n 'points',\n ];\n\n declare pathOffset: Point;\n\n declare strokeOffset: Point;\n\n static cacheProperties = [...cacheProperties, 'points'];\n\n strokeDiff: Point;\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {Polyline} thisArg\n * @example\n * var poly = new Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n constructor(points: XY[] = [], options: Props = {} as Props) {\n super();\n Object.assign(this, Polyline.ownDefaults);\n this.setOptions(options);\n this.points = points;\n const { left, top } = options;\n this.initialized = true;\n this.setBoundingBox(true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n protected isOpen() {\n return true;\n }\n\n private _projectStrokeOnPoints(options: TProjectStrokeOnPointsOptions) {\n return projectStrokeOnPoints(this.points, options, this.isOpen());\n }\n\n /**\n * Calculate the polygon bounding box\n * @private\n */\n _calcDimensions(options?: Partial) {\n options = {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n strokeLineCap: this.strokeLineCap,\n strokeLineJoin: this.strokeLineJoin,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeUniform: this.strokeUniform,\n strokeWidth: this.strokeWidth,\n ...(options || {}),\n };\n const points = this.exactBoundingBox\n ? this._projectStrokeOnPoints(\n options as TProjectStrokeOnPointsOptions,\n ).map((projection) => projection.projectedPoint)\n : this.points;\n if (points.length === 0) {\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n pathOffset: new Point(),\n strokeOffset: new Point(),\n strokeDiff: new Point(),\n };\n }\n const bbox = makeBoundingBoxFromPoints(points),\n // Remove scale effect, since it's applied after\n matrix = calcDimensionsMatrix({ ...options, scaleX: 1, scaleY: 1 }),\n bboxNoStroke = makeBoundingBoxFromPoints(\n this.points.map((p) => transformPoint(p, matrix, true)),\n ),\n scale = new Point(this.scaleX, this.scaleY);\n let offsetX = bbox.left + bbox.width / 2,\n offsetY = bbox.top + bbox.height / 2;\n if (this.exactBoundingBox) {\n offsetX = offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));\n // Order of those assignments is important.\n // offsetY relies on offsetX being already changed by the line above\n offsetY = offsetY - offsetX * Math.tan(degreesToRadians(this.skewY));\n }\n\n return {\n ...bbox,\n pathOffset: new Point(offsetX, offsetY),\n strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top)\n .subtract(new Point(bbox.left, bbox.top))\n .multiply(scale),\n strokeDiff: new Point(bbox.width, bbox.height)\n .subtract(new Point(bboxNoStroke.width, bboxNoStroke.height))\n .multiply(scale),\n };\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = makeBoundingBoxFromPoints(this.points);\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { left, top, width, height, pathOffset, strokeOffset, strokeDiff } =\n this._calcDimensions();\n this.set({ width, height, pathOffset, strokeOffset, strokeDiff });\n adjustPosition &&\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER,\n );\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return this.exactBoundingBox;\n }\n\n /**\n * @override stroke is taken in account in size\n */\n _getNonTransformedDimensions() {\n return this.exactBoundingBox\n ? // TODO: fix this\n new Point(this.width, this.height)\n : super._getNonTransformedDimensions();\n }\n\n /**\n * @override stroke and skewing are taken into account when projecting stroke on points,\n * therefore we don't want the default calculation to account for skewing as well.\n * Though it is possible to pass `width` and `height` in `options`, doing so is very strange, use with discretion.\n *\n * @private\n */\n _getTransformedDimensions(options: any = {}) {\n if (this.exactBoundingBox) {\n let size: Point;\n /* When `strokeUniform = true`, any changes to the properties require recalculating the `width` and `height` because\n the stroke projections are affected.\n When `strokeUniform = false`, we don't need to recalculate for scale transformations, as the effect of scale on\n projections follows a linear function (e.g. scaleX of 2 just multiply width by 2)*/\n if (\n Object.keys(options).some(\n (key) =>\n this.strokeUniform ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof TProjectStrokeOnPointsOptions,\n ),\n )\n ) {\n const { width, height } = this._calcDimensions(options);\n size = new Point(options.width ?? width, options.height ?? height);\n } else {\n size = new Point(\n options.width ?? this.width,\n options.height ?? this.height,\n );\n }\n return size.multiply(\n new Point(options.scaleX || this.scaleX, options.scaleY || this.scaleY),\n );\n } else {\n return super._getTransformedDimensions(options);\n }\n }\n\n /**\n * Recalculates dimensions when changing skew and scale\n * @private\n */\n _set(key: string, value: any) {\n const changed = this.initialized && this[key as keyof this] !== value;\n const output = super._set(key, value);\n if (\n this.exactBoundingBox &&\n changed &&\n (((key === SCALE_X || key === SCALE_Y) &&\n this.strokeUniform &&\n (this.constructor as typeof Polyline).layoutProperties.includes(\n 'strokeUniform',\n )) ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof Polyline,\n ))\n ) {\n this.setDimensions();\n }\n return output;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n points: this.points.map(({ x, y }) => ({ x, y })),\n };\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const points = [],\n diffX = this.pathOffset.x,\n diffY = this.pathOffset.y,\n NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n\n for (let i = 0, len = this.points.length; i < len; i++) {\n points.push(\n toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS),\n ',',\n toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS),\n ' ',\n );\n }\n return [\n `<${\n (this.constructor as typeof Polyline).type.toLowerCase() as\n | 'polyline'\n | 'polygon'\n } `,\n 'COMMON_PARTS',\n `points=\"${points.join('')}\" />\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return;\n }\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (let i = 0; i < len; i++) {\n const point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n !this.isOpen() && ctx.closePath();\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity(): number {\n return this.points.length;\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Polyline.fromElement})\n * @static\n * @memberOf Polyline\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES];\n\n /**\n * Returns Polyline instance from an SVG element\n * @static\n * @memberOf Polyline\n * @param {HTMLElement} element Element to parser\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const points = parsePointsAttribute(element.getAttribute('points')),\n // we omit left and top to instruct the constructor to position the object using the bbox\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n { left, top, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(points, {\n ...parsedAttributes,\n ...options,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Polyline instance from an object representation\n * @static\n * @memberOf Polyline\n * @param {Object} object Object to create an instance from\n * @returns {Promise}\n */\n static fromObject>(object: T) {\n return this._fromObject(object, {\n extraParam: 'points',\n });\n }\n}\n\nclassRegistry.setClass(Polyline);\nclassRegistry.setSVGClass(Polyline);\n","import { classRegistry } from '../ClassRegistry';\nimport { Polyline, polylineDefaultValues } from './Polyline';\n\nexport class Polygon extends Polyline {\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polygon';\n\n protected isOpen() {\n return false;\n }\n}\n\nclassRegistry.setClass(Polygon);\nclassRegistry.setSVGClass(Polygon);\n","import { FILL, LEFT, STROKE, reNewline } from '../../constants';\nimport type { TClassProperties } from '../../typedefs';\nimport type { FabricText } from './Text';\n\nconst fontProperties = [\n 'fontSize',\n 'fontWeight',\n 'fontFamily',\n 'fontStyle',\n] as const;\n\nexport const textDecorationProperties = [\n 'underline',\n 'overline',\n 'linethrough',\n] as const;\n\nexport const textLayoutProperties: string[] = [\n ...fontProperties,\n 'lineHeight',\n 'text',\n 'charSpacing',\n 'textAlign',\n 'styles',\n 'path',\n 'pathStartOffset',\n 'pathSide',\n 'pathAlign',\n];\n\nexport const additionalProps = [\n ...textLayoutProperties,\n ...textDecorationProperties,\n 'textBackgroundColor',\n 'direction',\n] as const;\n\nexport type StylePropertiesType =\n | 'fill'\n | 'stroke'\n | 'strokeWidth'\n | 'fontSize'\n | 'fontFamily'\n | 'fontWeight'\n | 'fontStyle'\n | 'textBackgroundColor'\n | 'deltaY'\n | 'overline'\n | 'underline'\n | 'linethrough';\n\nexport const styleProperties: Readonly = [\n ...fontProperties,\n ...textDecorationProperties,\n STROKE,\n 'strokeWidth',\n FILL,\n 'deltaY',\n 'textBackgroundColor',\n] as const;\n\n// @TODO: Many things here are configuration related and shouldn't be on the class nor prototype\n// regexes, list of properties that are not suppose to change by instances, magic consts.\n// this will be a separated effort\nexport const textDefaultValues: Partial> = {\n _reNewline: reNewline,\n _reSpacesAndTabs: /[ \\t\\r]/g,\n _reSpaceAndTab: /[ \\t\\r]/,\n _reWords: /\\S+/g,\n fontSize: 40,\n fontWeight: 'normal',\n fontFamily: 'Times New Roman',\n underline: false,\n overline: false,\n linethrough: false,\n textAlign: LEFT,\n fontStyle: 'normal',\n lineHeight: 1.16,\n superscript: {\n size: 0.6, // fontSize factor\n baseline: -0.35, // baseline-shift factor (upwards)\n },\n subscript: {\n size: 0.6, // fontSize factor\n baseline: 0.11, // baseline-shift factor (downwards)\n },\n textBackgroundColor: '',\n stroke: null,\n shadow: null,\n path: undefined,\n pathStartOffset: 0,\n pathSide: LEFT,\n pathAlign: 'baseline',\n _fontSizeFraction: 0.222,\n offsets: {\n underline: 0.1,\n linethrough: -0.315,\n overline: -0.88,\n },\n _fontSizeMult: 1.13,\n charSpacing: 0,\n deltaY: 0,\n direction: 'ltr',\n CACHE_FONT_SIZE: 400,\n MIN_TEXT_WIDTH: 2,\n};\n\nexport const JUSTIFY = 'justify';\nexport const JUSTIFY_LEFT = 'justify-left';\nexport const JUSTIFY_RIGHT = 'justify-right';\nexport const JUSTIFY_CENTER = 'justify-center';\n","import type { ObjectEvents } from '../../EventTypeDefs';\nimport type { FabricObjectProps, SerializedObjectProps } from '../Object/types';\nimport type { TOptions } from '../../typedefs';\nimport { FabricObject } from '../Object/FabricObject';\nimport { styleProperties } from './constants';\nimport type { StylePropertiesType } from './constants';\nimport type { FabricText } from './Text';\nimport { pick } from '../../util';\nimport { pickBy } from '../../util/misc/pick';\n\nexport type CompleteTextStyleDeclaration = Pick<\n FabricText,\n StylePropertiesType\n>;\n\nexport type TextStyleDeclaration = Partial;\n\nexport type TextStyle = {\n [line: number | string]: { [char: number | string]: TextStyleDeclaration };\n};\n\nexport abstract class StyledText<\n Props extends TOptions = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject {\n declare abstract styles: TextStyle;\n protected declare abstract _textLines: string[][];\n protected declare _forceClearCache: boolean;\n static _styleProperties: Readonly = styleProperties;\n abstract get2DCursorLocation(\n selectionStart: number,\n skipWrapping?: boolean,\n ): { charIndex: number; lineIndex: number };\n\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles(lineIndex?: number): boolean {\n if (!this.styles) {\n return true;\n }\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return true;\n }\n const obj =\n typeof lineIndex === 'undefined'\n ? this.styles\n : { line: this.styles[lineIndex] };\n for (const p1 in obj) {\n for (const p2 in obj[p1]) {\n // eslint-disable-next-line no-unused-vars\n for (const p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * Returns true if object has a style property or has it ina specified line\n * This function is used to detect if a text will use a particular property or not.\n * @param {String} property to check for\n * @param {Number} lineIndex to check the style on\n * @return {Boolean}\n */\n styleHas(property: keyof TextStyleDeclaration, lineIndex?: number): boolean {\n if (!this.styles) {\n return false;\n }\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return false;\n }\n const obj =\n typeof lineIndex === 'undefined'\n ? this.styles\n : { 0: this.styles[lineIndex] };\n // eslint-disable-next-line\n for (const p1 in obj) {\n // eslint-disable-next-line\n for (const p2 in obj[p1]) {\n if (typeof obj[p1][p2][property] !== 'undefined') {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * Check if characters in a text have a value for a property\n * whose value matches the textbox's value for that property. If so,\n * the character-level property is deleted. If the character\n * has no other properties, then it is also deleted. Finally,\n * if the line containing that character has no other characters\n * then it also is deleted.\n *\n * @param {string} property The property to compare between characters and text.\n */\n cleanStyle(property: keyof TextStyleDeclaration) {\n if (!this.styles) {\n return false;\n }\n const obj = this.styles;\n let stylesCount = 0,\n letterCount,\n stylePropertyValue,\n allStyleObjectPropertiesMatch = true,\n graphemeCount = 0;\n for (const p1 in obj) {\n letterCount = 0;\n for (const p2 in obj[p1]) {\n const styleObject = obj[p1][p2] || {},\n stylePropertyHasBeenSet = styleObject[property] !== undefined;\n\n stylesCount++;\n\n if (stylePropertyHasBeenSet) {\n if (!stylePropertyValue) {\n stylePropertyValue = styleObject[property];\n } else if (styleObject[property] !== stylePropertyValue) {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (styleObject[property] === this[property as keyof this]) {\n delete styleObject[property];\n }\n } else {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (Object.keys(styleObject).length !== 0) {\n letterCount++;\n } else {\n delete obj[p1][p2];\n }\n }\n\n if (letterCount === 0) {\n delete obj[p1];\n }\n }\n // if every grapheme has the same style set then\n // delete those styles and set it on the parent\n for (let i = 0; i < this._textLines.length; i++) {\n graphemeCount += this._textLines[i].length;\n }\n if (allStyleObjectPropertiesMatch && stylesCount === graphemeCount) {\n // @ts-expect-error conspiracy theory of TS\n this[property as keyof this] = stylePropertyValue;\n this.removeStyle(property);\n }\n }\n\n /**\n * Remove a style property or properties from all individual character styles\n * in a text object. Deletes the character style object if it contains no other style\n * props. Deletes a line style object if it contains no other character styles.\n *\n * @param {String} props The property to remove from character styles.\n */\n removeStyle(property: keyof TextStyleDeclaration) {\n if (!this.styles) {\n return;\n }\n const obj = this.styles;\n let line, lineNum, charNum;\n for (lineNum in obj) {\n line = obj[lineNum];\n for (charNum in line) {\n delete line[charNum][property];\n if (Object.keys(line[charNum]).length === 0) {\n delete line[charNum];\n }\n }\n if (Object.keys(line).length === 0) {\n delete obj[lineNum];\n }\n }\n }\n\n private _extendStyles(index: number, style: TextStyleDeclaration): void {\n const { lineIndex, charIndex } = this.get2DCursorLocation(index);\n\n if (!this._getLineStyle(lineIndex)) {\n this._setLineStyle(lineIndex);\n }\n\n const newStyle = pickBy(\n {\n // first create a new object that is a merge of existing and new\n ...this._getStyleDeclaration(lineIndex, charIndex),\n ...style,\n // use the predicate to discard undefined values\n },\n (value) => value !== undefined,\n );\n\n // finally assign to the old position the new style\n this._setStyleDeclaration(lineIndex, charIndex, newStyle);\n }\n\n /**\n * Gets style of a current selection/cursor (at the start position)\n * @param {Number} startIndex Start index to get styles at\n * @param {Number} endIndex End index to get styles at, if not specified startIndex + 1\n * @param {Boolean} [complete] get full style or not\n * @return {Array} styles an array with one, zero or more Style objects\n */\n getSelectionStyles(\n startIndex: number,\n endIndex?: number,\n complete?: boolean,\n ): TextStyleDeclaration[] {\n const styles: TextStyleDeclaration[] = [];\n for (let i = startIndex; i < (endIndex || startIndex); i++) {\n styles.push(this.getStyleAtPosition(i, complete));\n }\n return styles;\n }\n\n /**\n * Gets style of a current selection/cursor position\n * @param {Number} position to get styles at\n * @param {Boolean} [complete] full style if true\n * @return {Object} style Style object at a specified index\n * @private\n */\n getStyleAtPosition(position: number, complete?: boolean) {\n const { lineIndex, charIndex } = this.get2DCursorLocation(position);\n return complete\n ? this.getCompleteStyleDeclaration(lineIndex, charIndex)\n : this._getStyleDeclaration(lineIndex, charIndex);\n }\n\n /**\n * Sets style of a current selection, if no selection exist, do not set anything.\n * @param {Object} styles Styles object\n * @param {Number} startIndex Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified startIndex + 1\n */\n setSelectionStyles(styles: object, startIndex: number, endIndex?: number) {\n for (let i = startIndex; i < (endIndex || startIndex); i++) {\n this._extendStyles(i, styles);\n }\n /* not included in _extendStyles to avoid clearing cache more than once */\n this._forceClearCache = true;\n }\n\n /**\n * Get a reference, not a clone, to the style object for a given character,\n * if no style is set for a line or char, return a new empty object.\n * This is tricky and confusing because when you get an empty object you can't\n * determine if it is a reference or a new one.\n * @TODO this should always return a reference or always a clone or undefined when necessary.\n * @protected\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {TextStyleDeclaration} a style object reference to the existing one or a new empty object when undefined\n */\n _getStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n ): TextStyleDeclaration {\n const lineStyle = this.styles && this.styles[lineIndex];\n return lineStyle ? lineStyle[charIndex] ?? {} : {};\n }\n\n /**\n * return a new object that contains all the style property for a character\n * the object returned is newly created\n * @param {Number} lineIndex of the line where the character is\n * @param {Number} charIndex position of the character on the line\n * @return {Object} style object\n */\n getCompleteStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n ): CompleteTextStyleDeclaration {\n return {\n // @ts-expect-error readonly\n ...pick(this, (this.constructor as typeof StyledText)._styleProperties),\n ...this._getStyleDeclaration(lineIndex, charIndex),\n } as CompleteTextStyleDeclaration;\n }\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n protected _setStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n style: object,\n ) {\n this.styles[lineIndex][charIndex] = style;\n }\n\n /**\n *\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n protected _deleteStyleDeclaration(lineIndex: number, charIndex: number) {\n delete this.styles[lineIndex][charIndex];\n }\n\n /**\n * @param {Number} lineIndex\n * @return {Boolean} if the line exists or not\n * @private\n */\n protected _getLineStyle(lineIndex: number): boolean {\n return !!this.styles[lineIndex];\n }\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @private\n */\n protected _setLineStyle(lineIndex: number) {\n this.styles[lineIndex] = {};\n }\n\n protected _deleteLineStyle(lineIndex: number) {\n delete this.styles[lineIndex];\n }\n}\n","import { config } from '../../config';\nimport type { TSVGReviver } from '../../typedefs';\nimport { escapeXml } from '../../util/lang_string';\nimport { colorPropToSVG, createSVGRect } from '../../util/misc/svgParsing';\nimport { hasStyleChanged } from '../../util/misc/textStyles';\nimport { toFixed } from '../../util/misc/toFixed';\nimport { FabricObjectSVGExportMixin } from '../Object/FabricObjectSVGExportMixin';\nimport { type TextStyleDeclaration } from './StyledText';\nimport { JUSTIFY } from '../Text/constants';\nimport type { FabricText } from './Text';\nimport { STROKE, FILL } from '../../constants';\n\nconst multipleSpacesRegex = / +/g;\nconst dblQuoteRegex = /\"/g;\n\nfunction createSVGInlineRect(\n color: string,\n left: number,\n top: number,\n width: number,\n height: number,\n) {\n return `\\t\\t${createSVGRect(color, { left, top, width, height })}\\n`;\n}\n\nexport class TextSVGExportMixin extends FabricObjectSVGExportMixin {\n _toSVG(this: TextSVGExportMixin & FabricText): string[] {\n const offsets = this._getSVGLeftTopOffsets(),\n textAndBg = this._getSVGTextAndBg(offsets.textTop, offsets.textLeft);\n return this._wrapSVGTextAndBg(textAndBg);\n }\n\n toSVG(this: TextSVGExportMixin & FabricText, reviver?: TSVGReviver): string {\n return this._createBaseSVGMarkup(this._toSVG(), {\n reviver,\n noStyle: true,\n withShadow: true,\n });\n }\n\n private _getSVGLeftTopOffsets(this: TextSVGExportMixin & FabricText) {\n return {\n textLeft: -this.width / 2,\n textTop: -this.height / 2,\n lineTop: this.getHeightOfLine(0),\n };\n }\n\n private _wrapSVGTextAndBg(\n this: TextSVGExportMixin & FabricText,\n {\n textBgRects,\n textSpans,\n }: {\n textSpans: string[];\n textBgRects: string[];\n },\n ) {\n const noShadow = true,\n textDecoration = this.getSvgTextDecoration(this);\n return [\n textBgRects.join(''),\n '\\t\\t',\n textSpans.join(''),\n '\\n',\n ];\n }\n\n /**\n * @private\n * @param {Number} textTopOffset Text top offset\n * @param {Number} textLeftOffset Text left offset\n * @return {Object}\n */\n private _getSVGTextAndBg(\n this: TextSVGExportMixin & FabricText,\n textTopOffset: number,\n textLeftOffset: number,\n ) {\n const textSpans: string[] = [],\n textBgRects: string[] = [];\n let height = textTopOffset,\n lineOffset;\n\n // bounding-box background\n this.backgroundColor &&\n textBgRects.push(\n ...createSVGInlineRect(\n this.backgroundColor,\n -this.width / 2,\n -this.height / 2,\n this.width,\n this.height,\n ),\n );\n\n // text and text-background\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n lineOffset = this._getLineLeftOffset(i);\n if (this.direction === 'rtl') {\n lineOffset += this.width;\n }\n if (this.textBackgroundColor || this.styleHas('textBackgroundColor', i)) {\n this._setSVGTextLineBg(\n textBgRects,\n i,\n textLeftOffset + lineOffset,\n height,\n );\n }\n this._setSVGTextLineText(\n textSpans,\n i,\n textLeftOffset + lineOffset,\n height,\n );\n height += this.getHeightOfLine(i);\n }\n\n return {\n textSpans,\n textBgRects,\n };\n }\n\n private _createTextCharSpan(\n this: TextSVGExportMixin & FabricText,\n char: string,\n styleDecl: TextStyleDeclaration,\n left: number,\n top: number,\n ) {\n const styleProps = this.getSvgSpanStyles(\n styleDecl,\n char !== char.trim() || !!char.match(multipleSpacesRegex),\n ),\n fillStyles = styleProps ? `style=\"${styleProps}\"` : '',\n dy = styleDecl.deltaY,\n dySpan = dy ? ` dy=\"${toFixed(dy, config.NUM_FRACTION_DIGITS)}\" ` : '';\n\n return `${escapeXml(char)}`;\n }\n\n private _setSVGTextLineText(\n this: TextSVGExportMixin & FabricText,\n textSpans: string[],\n lineIndex: number,\n textLeftOffset: number,\n textTopOffset: number,\n ) {\n const lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.includes(JUSTIFY),\n line = this._textLines[lineIndex];\n let actualStyle,\n nextStyle,\n charsToRender = '',\n charBox,\n style,\n boxWidth = 0,\n timeToRender;\n\n textTopOffset +=\n (lineHeight * (1 - this._fontSizeFraction)) / this.lineHeight;\n for (let i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i];\n if (boxWidth === 0) {\n textLeftOffset += charBox.kernedWidth - charBox.width;\n boxWidth += charBox.width;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle =\n actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = hasStyleChanged(actualStyle, nextStyle, true);\n }\n if (timeToRender) {\n style = this._getStyleDeclaration(lineIndex, i);\n textSpans.push(\n this._createTextCharSpan(\n charsToRender,\n style,\n textLeftOffset,\n textTopOffset,\n ),\n );\n charsToRender = '';\n actualStyle = nextStyle;\n if (this.direction === 'rtl') {\n textLeftOffset -= boxWidth;\n } else {\n textLeftOffset += boxWidth;\n }\n boxWidth = 0;\n }\n }\n }\n\n private _setSVGTextLineBg(\n this: TextSVGExportMixin & FabricText,\n textBgRects: (string | number)[],\n i: number,\n leftOffset: number,\n textTopOffset: number,\n ) {\n const line = this._textLines[i],\n heightOfLine = this.getHeightOfLine(i) / this.lineHeight;\n let boxWidth = 0,\n boxStart = 0,\n currentColor,\n lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (let j = 0; j < line.length; j++) {\n const { left, width, kernedWidth } = this.__charBounds[i][j];\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (currentColor !== lastColor) {\n lastColor &&\n textBgRects.push(\n ...createSVGInlineRect(\n lastColor,\n leftOffset + boxStart,\n textTopOffset,\n boxWidth,\n heightOfLine,\n ),\n );\n boxStart = left;\n boxWidth = width;\n lastColor = currentColor;\n } else {\n boxWidth += kernedWidth;\n }\n }\n currentColor &&\n textBgRects.push(\n ...createSVGInlineRect(\n lastColor,\n leftOffset + boxStart,\n textTopOffset,\n boxWidth,\n heightOfLine,\n ),\n );\n }\n\n /**\n * @deprecated unused\n */\n _getSVGLineTopOffset(\n this: TextSVGExportMixin & FabricText,\n lineIndex: number,\n ) {\n let lineTopOffset = 0,\n j;\n for (j = 0; j < lineIndex; j++) {\n lineTopOffset += this.getHeightOfLine(j);\n }\n const lastHeight = this.getHeightOfLine(j);\n return {\n lineTop: lineTopOffset,\n offset:\n ((this._fontSizeMult - this._fontSizeFraction) * lastHeight) /\n (this.lineHeight * this._fontSizeMult),\n };\n }\n\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles(this: TextSVGExportMixin & FabricText, skipShadow?: boolean) {\n return `${super.getSvgStyles(skipShadow)} white-space: pre;`;\n }\n\n /**\n * Returns styles-string for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @param {Boolean} useWhiteSpace a boolean to include an additional attribute in the style.\n * @return {String}\n */\n getSvgSpanStyles(\n this: TextSVGExportMixin & FabricText,\n style: TextStyleDeclaration,\n useWhiteSpace?: boolean,\n ) {\n const {\n fontFamily,\n strokeWidth,\n stroke,\n fill,\n fontSize,\n fontStyle,\n fontWeight,\n deltaY,\n } = style;\n\n const textDecoration = this.getSvgTextDecoration(style);\n\n return [\n stroke ? colorPropToSVG(STROKE, stroke) : '',\n strokeWidth ? `stroke-width: ${strokeWidth}; ` : '',\n fontFamily\n ? `font-family: ${\n !fontFamily.includes(\"'\") && !fontFamily.includes('\"')\n ? `'${fontFamily}'`\n : fontFamily\n }; `\n : '',\n fontSize ? `font-size: ${fontSize}px; ` : '',\n fontStyle ? `font-style: ${fontStyle}; ` : '',\n fontWeight ? `font-weight: ${fontWeight}; ` : '',\n textDecoration ? `text-decoration: ${textDecoration}; ` : textDecoration,\n fill ? colorPropToSVG(FILL, fill) : '',\n deltaY ? `baseline-shift: ${-deltaY}; ` : '',\n useWhiteSpace ? 'white-space: pre; ' : '',\n ].join('');\n }\n\n /**\n * Returns text-decoration property for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @return {String}\n */\n getSvgTextDecoration(\n this: TextSVGExportMixin & FabricText,\n style: TextStyleDeclaration,\n ) {\n return (['overline', 'underline', 'line-through'] as const)\n .filter(\n (decoration) =>\n style[\n decoration.replace('-', '') as\n | 'overline'\n | 'underline'\n | 'linethrough'\n ],\n )\n .join(' ');\n }\n}\n","import { cache } from '../../cache';\nimport { DEFAULT_SVG_FONT_SIZE, FILL, STROKE } from '../../constants';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport type {\n CompleteTextStyleDeclaration,\n TextStyle,\n TextStyleDeclaration,\n} from './StyledText';\nimport { StyledText } from './StyledText';\nimport { SHARED_ATTRIBUTES } from '../../parser/attributes';\nimport { parseAttributes } from '../../parser/parseAttributes';\nimport type {\n Abortable,\n TCacheCanvasDimensions,\n TClassProperties,\n TFiller,\n TOptions,\n} from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { graphemeSplit } from '../../util/lang_string';\nimport { createCanvasElement } from '../../util/misc/dom';\nimport type { TextStyleArray } from '../../util/misc/textStyles';\nimport {\n hasStyleChanged,\n stylesFromArray,\n stylesToArray,\n} from '../../util/misc/textStyles';\nimport { getPathSegmentsInfo, getPointOnPath } from '../../util/path';\nimport { cacheProperties } from '../Object/FabricObject';\nimport type { Path } from '../Path';\nimport { TextSVGExportMixin } from './TextSVGExportMixin';\nimport { applyMixins } from '../../util/applyMixins';\nimport type { FabricObjectProps, SerializedObjectProps } from '../Object/types';\nimport type { StylePropertiesType } from './constants';\nimport {\n additionalProps,\n textDefaultValues,\n textLayoutProperties,\n JUSTIFY,\n JUSTIFY_CENTER,\n JUSTIFY_LEFT,\n JUSTIFY_RIGHT,\n} from './constants';\nimport { CENTER, LEFT, RIGHT, TOP, BOTTOM } from '../../constants';\nimport { isFiller } from '../../util/typeAssertions';\nimport type { Gradient } from '../../gradient/Gradient';\nimport type { Pattern } from '../../Pattern';\nimport type { CSSRules } from '../../parser/typedefs';\n\nlet measuringContext: CanvasRenderingContext2D | null;\n\n/**\n * Return a context for measurement of text string.\n * if created it gets stored for reuse\n */\nfunction getMeasuringContext() {\n if (!measuringContext) {\n const canvas = createCanvasElement();\n canvas.width = canvas.height = 0;\n measuringContext = canvas.getContext('2d');\n }\n return measuringContext;\n}\n\nexport type TPathSide = 'left' | 'right';\n\nexport type TPathAlign = 'baseline' | 'center' | 'ascender' | 'descender';\n\nexport type TextLinesInfo = {\n lines: string[];\n graphemeLines: string[][];\n graphemeText: string[];\n _unwrappedLines: string[][];\n};\n\n/**\n * Measure and return the info of a single grapheme.\n * needs the the info of previous graphemes already filled\n * Override to customize measuring\n */\nexport type GraphemeBBox = {\n width: number;\n height: number;\n kernedWidth: number;\n left: number;\n deltaY: number;\n renderLeft?: number;\n renderTop?: number;\n angle?: number;\n};\n\n// @TODO this is not complete\ninterface UniqueTextProps {\n charSpacing: number;\n lineHeight: number;\n fontSize: number;\n fontWeight: string | number;\n fontFamily: string;\n fontStyle: string;\n pathSide: TPathSide;\n pathAlign: TPathAlign;\n underline: boolean;\n overline: boolean;\n linethrough: boolean;\n textAlign: string;\n direction: CanvasDirection;\n path?: Path;\n}\n\nexport interface SerializedTextProps\n extends SerializedObjectProps,\n UniqueTextProps {\n styles: TextStyleArray | TextStyle;\n}\n\nexport interface TextProps extends FabricObjectProps, UniqueTextProps {\n styles: TextStyle;\n}\n\n/**\n * Text class\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#text}\n */\nexport class FabricText<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends StyledText\n implements UniqueTextProps\n{\n /**\n * Properties that requires a text layout recalculation when changed\n * @type string[]\n * @protected\n */\n static textLayoutProperties: string[] = textLayoutProperties;\n\n /**\n * @private\n */\n declare _reNewline: RegExp;\n\n /**\n * Use this regular expression to filter for whitespaces that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reSpacesAndTabs: RegExp;\n\n /**\n * Use this regular expression to filter for whitespace that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reSpaceAndTab: RegExp;\n\n /**\n * Use this regular expression to filter consecutive groups of non spaces.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reWords: RegExp;\n\n declare text: string;\n\n /**\n * Font size (in pixels)\n * @type Number\n * @default\n */\n declare fontSize: number;\n\n /**\n * Font weight (e.g. bold, normal, 400, 600, 800)\n * @type {(Number|String)}\n * @default\n */\n declare fontWeight: string | number;\n\n /**\n * Font family\n * @type String\n * @default\n */\n declare fontFamily: string;\n\n /**\n * Text decoration underline.\n * @type Boolean\n * @default\n */\n declare underline: boolean;\n\n /**\n * Text decoration overline.\n * @type Boolean\n * @default\n */\n declare overline: boolean;\n\n /**\n * Text decoration linethrough.\n * @type Boolean\n * @default\n */\n declare linethrough: boolean;\n\n /**\n * Text alignment. Possible values: \"left\", \"center\", \"right\", \"justify\",\n * \"justify-left\", \"justify-center\" or \"justify-right\".\n * @type String\n * @default\n */\n declare textAlign: string;\n\n /**\n * Font style . Possible values: \"\", \"normal\", \"italic\" or \"oblique\".\n * @type String\n * @default\n */\n declare fontStyle: string;\n\n /**\n * Line height\n * @type Number\n * @default\n */\n declare lineHeight: number;\n\n /**\n * Superscript schema object (minimum overlap)\n */\n declare superscript: {\n /**\n * fontSize factor\n * @default 0.6\n */\n size: number;\n /**\n * baseline-shift factor (upwards)\n * @default -0.35\n */\n baseline: number;\n };\n\n /**\n * Subscript schema object (minimum overlap)\n */\n declare subscript: {\n /**\n * fontSize factor\n * @default 0.6\n */\n size: number;\n /**\n * baseline-shift factor (downwards)\n * @default 0.11\n */\n baseline: number;\n };\n\n /**\n * Background color of text lines\n * @type String\n * @default\n */\n declare textBackgroundColor: string;\n\n declare styles: TextStyle;\n\n /**\n * Path that the text should follow.\n * since 4.6.0 the path will be drawn automatically.\n * if you want to make the path visible, give it a stroke and strokeWidth or fill value\n * if you want it to be hidden, assign visible = false to the path.\n * This feature is in BETA, and SVG import/export is not yet supported.\n * @type Path\n * @example\n * const textPath = new Text('Text on a path', {\n * top: 150,\n * left: 150,\n * textAlign: 'center',\n * charSpacing: -50,\n * path: new Path('M 0 0 C 50 -100 150 -100 200 0', {\n * strokeWidth: 1,\n * visible: false\n * }),\n * pathSide: 'left',\n * pathStartOffset: 0\n * });\n * @default\n */\n declare path?: Path;\n\n /**\n * Offset amount for text path starting position\n * Only used when text has a path\n * @type Number\n * @default\n */\n declare pathStartOffset: number;\n\n /**\n * Which side of the path the text should be drawn on.\n * Only used when text has a path\n * @type {TPathSide} 'left|right'\n * @default\n */\n declare pathSide: TPathSide;\n\n /**\n * How text is aligned to the path. This property determines\n * the perpendicular position of each character relative to the path.\n * (one of \"baseline\", \"center\", \"ascender\", \"descender\")\n * This feature is in BETA, and its behavior may change\n * @type TPathAlign\n * @default\n */\n declare pathAlign: TPathAlign;\n\n /**\n * @private\n */\n declare _fontSizeFraction: number;\n\n /**\n * @private\n */\n declare offsets: { underline: number; linethrough: number; overline: number };\n\n /**\n * Text Line proportion to font Size (in pixels)\n * @type Number\n * @default\n */\n declare _fontSizeMult: number;\n\n /**\n * additional space between characters\n * expressed in thousands of em unit\n * @type Number\n * @default\n */\n declare charSpacing: number;\n\n /**\n * Baseline shift, styles only, keep at 0 for the main text object\n * @type {Number}\n * @default\n */\n declare deltaY: number;\n\n /**\n * WARNING: EXPERIMENTAL. NOT SUPPORTED YET\n * determine the direction of the text.\n * This has to be set manually together with textAlign and originX for proper\n * experience.\n * some interesting link for the future\n * https://www.w3.org/International/questions/qa-bidi-unicode-controls\n * @since 4.5.0\n * @type {CanvasDirection} 'ltr|rtl'\n * @default\n */\n declare direction: CanvasDirection;\n\n /**\n * contains characters bounding boxes\n * This variable is considered to be protected.\n * But for how mixins are implemented right now, we can't leave it private\n * @protected\n */\n __charBounds: GraphemeBBox[][] = [];\n\n /**\n * use this size when measuring text. To avoid IE11 rounding errors\n * @type {Number}\n * @default\n * @readonly\n * @private\n */\n declare CACHE_FONT_SIZE: number;\n\n /**\n * contains the min text width to avoid getting 0\n * @type {Number}\n * @default\n */\n declare MIN_TEXT_WIDTH: number;\n\n /**\n * contains the the text of the object, divided in lines as they are displayed\n * on screen. Wrapping will divide the text independently of line breaks\n * @type {string[]}\n * @default\n */\n declare textLines: string[];\n\n /**\n * same as textlines, but each line is an array of graphemes as split by splitByGrapheme\n * @type {string[]}\n * @default\n */\n declare _textLines: string[][];\n\n declare _unwrappedTextLines: string[][];\n declare _text: string[];\n declare cursorWidth: number;\n declare __lineHeights: number[];\n declare __lineWidths: number[];\n declare initialized?: true;\n\n static cacheProperties = [...cacheProperties, ...additionalProps];\n\n static ownDefaults = textDefaultValues;\n\n static type = 'Text';\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...FabricText.ownDefaults };\n }\n\n constructor(text: string, options?: Props) {\n super();\n Object.assign(this, FabricText.ownDefaults);\n this.setOptions(options);\n if (!this.styles) {\n this.styles = {};\n }\n this.text = text;\n this.initialized = true;\n if (this.path) {\n this.setPathInfo();\n }\n this.initDimensions();\n this.setCoords();\n }\n\n /**\n * If text has a path, it will add the extra information needed\n * for path and text calculations\n */\n setPathInfo() {\n const path = this.path;\n if (path) {\n path.segmentsInfo = getPathSegmentsInfo(path.path);\n }\n }\n\n /**\n * @private\n * Divides text into lines of text and lines of graphemes.\n */\n _splitText(): TextLinesInfo {\n const newLines = this._splitTextIntoLines(this.text);\n this.textLines = newLines.lines;\n this._textLines = newLines.graphemeLines;\n this._unwrappedTextLines = newLines._unwrappedLines;\n this._text = newLines.graphemeText;\n return newLines;\n }\n\n /**\n * Initialize or update text dimensions.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n */\n initDimensions() {\n this._splitText();\n this._clearCache();\n this.dirty = true;\n if (this.path) {\n this.width = this.path.width;\n this.height = this.path.height;\n } else {\n this.width =\n this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH;\n this.height = this.calcTextHeight();\n }\n if (this.textAlign.includes(JUSTIFY)) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n }\n\n /**\n * Enlarge space boxes and shift the others\n */\n enlargeSpaces() {\n let diffSpace,\n currentLineWidth,\n numberOfSpaces,\n accumulatedSpace,\n line,\n charBound,\n spaces;\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n if (\n this.textAlign !== JUSTIFY &&\n (i === len - 1 || this.isEndOfWrapping(i))\n ) {\n continue;\n }\n accumulatedSpace = 0;\n line = this._textLines[i];\n currentLineWidth = this.getLineWidth(i);\n if (\n currentLineWidth < this.width &&\n (spaces = this.textLines[i].match(this._reSpacesAndTabs))\n ) {\n numberOfSpaces = spaces.length;\n diffSpace = (this.width - currentLineWidth) / numberOfSpaces;\n for (let j = 0; j <= line.length; j++) {\n charBound = this.__charBounds[i][j];\n if (this._reSpaceAndTab.test(line[j])) {\n charBound.width += diffSpace;\n charBound.kernedWidth += diffSpace;\n charBound.left += accumulatedSpace;\n accumulatedSpace += diffSpace;\n } else {\n charBound.left += accumulatedSpace;\n }\n }\n }\n }\n }\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @return {Boolean}\n */\n isEndOfWrapping(lineIndex: number): boolean {\n return lineIndex === this._textLines.length - 1;\n }\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * It return always 1 for text and Itext. Textbox has its own implementation\n * @return Number\n */\n missingNewlineOffset(lineIndex: number, skipWrapping?: boolean): 0 | 1;\n missingNewlineOffset(_lineIndex: number): 1 {\n return 1;\n }\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor\n * @param {Number} selectionStart\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.\n */\n get2DCursorLocation(selectionStart: number, skipWrapping?: boolean) {\n const lines = skipWrapping ? this._unwrappedTextLines : this._textLines;\n let i: number;\n for (i = 0; i < lines.length; i++) {\n if (selectionStart <= lines[i].length) {\n return {\n lineIndex: i,\n charIndex: selectionStart,\n };\n }\n selectionStart -=\n lines[i].length + this.missingNewlineOffset(i, skipWrapping);\n }\n return {\n lineIndex: i - 1,\n charIndex:\n lines[i - 1].length < selectionStart\n ? lines[i - 1].length\n : selectionStart,\n };\n }\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of text object\n */\n toString(): string {\n return `#`;\n }\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @param {Object} dim.x width of object to be cached\n * @param {Object} dim.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions(): TCacheCanvasDimensions {\n const dims = super._getCacheCanvasDimensions();\n const fontSize = this.fontSize;\n dims.width += fontSize * dims.zoomX;\n dims.height += fontSize * dims.zoomY;\n return dims;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const path = this.path;\n path && !path.isNotVisible() && path._render(ctx);\n this._setTextStyles(ctx);\n this._renderTextLinesBackground(ctx);\n this._renderTextDecoration(ctx, 'underline');\n this._renderText(ctx);\n this._renderTextDecoration(ctx, 'overline');\n this._renderTextDecoration(ctx, 'linethrough');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderText(ctx: CanvasRenderingContext2D) {\n if (this.paintFirst === STROKE) {\n this._renderTextStroke(ctx);\n this._renderTextFill(ctx);\n } else {\n this._renderTextFill(ctx);\n this._renderTextStroke(ctx);\n }\n }\n\n /**\n * Set the font parameter of the context with the object properties or with charStyle\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [charStyle] object with font style properties\n * @param {String} [charStyle.fontFamily] Font Family\n * @param {Number} [charStyle.fontSize] Font size in pixels. ( without px suffix )\n * @param {String} [charStyle.fontWeight] Font weight\n * @param {String} [charStyle.fontStyle] Font style (italic|normal)\n */\n _setTextStyles(\n ctx: CanvasRenderingContext2D,\n charStyle?: any,\n forMeasuring?: boolean,\n ) {\n ctx.textBaseline = 'alphabetic';\n if (this.path) {\n switch (this.pathAlign) {\n case CENTER:\n ctx.textBaseline = 'middle';\n break;\n case 'ascender':\n ctx.textBaseline = TOP;\n break;\n case 'descender':\n ctx.textBaseline = BOTTOM;\n break;\n }\n }\n ctx.font = this._getFontDeclaration(charStyle, forMeasuring);\n }\n\n /**\n * calculate and return the text Width measuring each line.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {Number} Maximum width of Text object\n */\n calcTextWidth(): number {\n let maxWidth = this.getLineWidth(0);\n\n for (let i = 1, len = this._textLines.length; i < len; i++) {\n const currentLineWidth = this.getLineWidth(i);\n if (currentLineWidth > maxWidth) {\n maxWidth = currentLineWidth;\n }\n }\n return maxWidth;\n }\n\n /**\n * @private\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} line Text to render\n * @param {Number} left Left position of text\n * @param {Number} top Top position of text\n * @param {Number} lineIndex Index of a line in a text\n */\n _renderTextLine(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n line: string[],\n left: number,\n top: number,\n lineIndex: number,\n ) {\n this._renderChars(method, ctx, line, left, top, lineIndex);\n }\n\n /**\n * Renders the text background for lines, taking care of style\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextLinesBackground(ctx: CanvasRenderingContext2D) {\n if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor')) {\n return;\n }\n const originalFill = ctx.fillStyle,\n leftOffset = this._getLeftOffset();\n let lineTopOffset = this._getTopOffset();\n\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i);\n if (\n !this.textBackgroundColor &&\n !this.styleHas('textBackgroundColor', i)\n ) {\n lineTopOffset += heightOfLine;\n continue;\n }\n const jlen = this._textLines[i].length;\n const lineLeftOffset = this._getLineLeftOffset(i);\n let boxWidth = 0;\n let boxStart = 0;\n let drawStart;\n let currentColor;\n let lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (let j = 0; j < jlen; j++) {\n // at this point charbox are either standard or full with pathInfo if there is a path.\n const charBox = this.__charBounds[i][j] as Required;\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (this.path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillStyle = currentColor;\n currentColor &&\n ctx.fillRect(\n -charBox.width / 2,\n (-heightOfLine / this.lineHeight) * (1 - this._fontSizeFraction),\n charBox.width,\n heightOfLine / this.lineHeight,\n );\n ctx.restore();\n } else if (currentColor !== lastColor) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = lastColor;\n lastColor &&\n ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight,\n );\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastColor = currentColor;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n }\n if (currentColor && !this.path) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentColor;\n ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight,\n );\n }\n lineTopOffset += heightOfLine;\n }\n ctx.fillStyle = originalFill;\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * measure and return the width of a single character.\n * possibly overridden to accommodate different measure logic or\n * to hook some external lib for character measurement\n * @private\n * @param {String} _char, char to be measured\n * @param {Object} charStyle style of char to be measured\n * @param {String} [previousChar] previous char\n * @param {Object} [prevCharStyle] style of previous char\n */\n _measureChar(\n _char: string,\n charStyle: CompleteTextStyleDeclaration,\n previousChar: string | undefined,\n prevCharStyle: CompleteTextStyleDeclaration | Record,\n ) {\n const fontCache = cache.getFontCache(charStyle),\n fontDeclaration = this._getFontDeclaration(charStyle),\n couple = previousChar + _char,\n stylesAreEqual =\n previousChar &&\n fontDeclaration === this._getFontDeclaration(prevCharStyle),\n fontMultiplier = charStyle.fontSize / this.CACHE_FONT_SIZE;\n let width: number | undefined,\n coupleWidth: number | undefined,\n previousWidth: number | undefined,\n kernedWidth: number | undefined;\n\n if (previousChar && fontCache[previousChar] !== undefined) {\n previousWidth = fontCache[previousChar];\n }\n if (fontCache[_char] !== undefined) {\n kernedWidth = width = fontCache[_char];\n }\n if (stylesAreEqual && fontCache[couple] !== undefined) {\n coupleWidth = fontCache[couple];\n kernedWidth = coupleWidth - previousWidth!;\n }\n if (\n width === undefined ||\n previousWidth === undefined ||\n coupleWidth === undefined\n ) {\n const ctx = getMeasuringContext()!;\n // send a TRUE to specify measuring font size CACHE_FONT_SIZE\n this._setTextStyles(ctx, charStyle, true);\n if (width === undefined) {\n kernedWidth = width = ctx.measureText(_char).width;\n fontCache[_char] = width;\n }\n if (previousWidth === undefined && stylesAreEqual && previousChar) {\n previousWidth = ctx.measureText(previousChar).width;\n fontCache[previousChar] = previousWidth;\n }\n if (stylesAreEqual && coupleWidth === undefined) {\n // we can measure the kerning couple and subtract the width of the previous character\n coupleWidth = ctx.measureText(couple).width;\n fontCache[couple] = coupleWidth;\n // safe to use the non-null since if undefined we defined it before.\n kernedWidth = coupleWidth - previousWidth!;\n }\n }\n return {\n width: width * fontMultiplier,\n kernedWidth: kernedWidth! * fontMultiplier,\n };\n }\n\n /**\n * Computes height of character at given position\n * @param {Number} line the line index number\n * @param {Number} _char the character index number\n * @return {Number} fontSize of the character\n */\n getHeightOfChar(line: number, _char: number): number {\n return this.getValueOfPropertyAt(line, _char, 'fontSize');\n }\n\n /**\n * measure a text line measuring all characters.\n * @param {Number} lineIndex line number\n */\n measureLine(lineIndex: number) {\n const lineInfo = this._measureLine(lineIndex);\n if (this.charSpacing !== 0) {\n lineInfo.width -= this._getWidthOfCharSpacing();\n }\n if (lineInfo.width < 0) {\n lineInfo.width = 0;\n }\n return lineInfo;\n }\n\n /**\n * measure every grapheme of a line, populating __charBounds\n * @param {Number} lineIndex\n * @return {Object} object.width total width of characters\n * @return {Object} object.numOfSpaces length of chars that match this._reSpacesAndTabs\n */\n _measureLine(lineIndex: number) {\n let width = 0,\n prevGrapheme: string | undefined,\n graphemeInfo: GraphemeBBox | undefined;\n\n const reverse = this.pathSide === RIGHT,\n path = this.path,\n line = this._textLines[lineIndex],\n llength = line.length,\n lineBounds = new Array(llength);\n\n this.__charBounds[lineIndex] = lineBounds;\n for (let i = 0; i < llength; i++) {\n const grapheme = line[i];\n graphemeInfo = this._getGraphemeBox(grapheme, lineIndex, i, prevGrapheme);\n lineBounds[i] = graphemeInfo;\n width += graphemeInfo.kernedWidth;\n prevGrapheme = grapheme;\n }\n // this latest bound box represent the last character of the line\n // to simplify cursor handling in interactive mode.\n lineBounds[llength] = {\n left: graphemeInfo ? graphemeInfo.left + graphemeInfo.width : 0,\n width: 0,\n kernedWidth: 0,\n height: this.fontSize,\n deltaY: 0,\n } as GraphemeBBox;\n if (path && path.segmentsInfo) {\n let positionInPath = 0;\n const totalPathLength =\n path.segmentsInfo[path.segmentsInfo.length - 1].length;\n switch (this.textAlign) {\n case LEFT:\n positionInPath = reverse ? totalPathLength - width : 0;\n break;\n case CENTER:\n positionInPath = (totalPathLength - width) / 2;\n break;\n case RIGHT:\n positionInPath = reverse ? 0 : totalPathLength - width;\n break;\n //todo - add support for justify\n }\n positionInPath += this.pathStartOffset * (reverse ? -1 : 1);\n for (\n let i = reverse ? llength - 1 : 0;\n reverse ? i >= 0 : i < llength;\n reverse ? i-- : i++\n ) {\n graphemeInfo = lineBounds[i];\n if (positionInPath > totalPathLength) {\n positionInPath %= totalPathLength;\n } else if (positionInPath < 0) {\n positionInPath += totalPathLength;\n }\n // it would probably much faster to send all the grapheme position for a line\n // and calculate path position/angle at once.\n this._setGraphemeOnPath(positionInPath, graphemeInfo);\n positionInPath += graphemeInfo.kernedWidth;\n }\n }\n return { width: width, numOfSpaces: 0 };\n }\n\n /**\n * Calculate the angle and the left,top position of the char that follow a path.\n * It appends it to graphemeInfo to be reused later at rendering\n * @private\n * @param {Number} positionInPath to be measured\n * @param {GraphemeBBox} graphemeInfo current grapheme box information\n * @param {Object} startingPoint position of the point\n */\n _setGraphemeOnPath(positionInPath: number, graphemeInfo: GraphemeBBox) {\n const centerPosition = positionInPath + graphemeInfo.kernedWidth / 2,\n path = this.path!;\n\n // we are at currentPositionOnPath. we want to know what point on the path is.\n const info = getPointOnPath(path.path, centerPosition, path.segmentsInfo)!;\n graphemeInfo.renderLeft = info.x - path.pathOffset.x;\n graphemeInfo.renderTop = info.y - path.pathOffset.y;\n graphemeInfo.angle = info.angle + (this.pathSide === RIGHT ? Math.PI : 0);\n }\n\n /**\n *\n * @param {String} grapheme to be measured\n * @param {Number} lineIndex index of the line where the char is\n * @param {Number} charIndex position in the line\n * @param {String} [prevGrapheme] character preceding the one to be measured\n * @returns {GraphemeBBox} grapheme bbox\n */\n _getGraphemeBox(\n grapheme: string,\n lineIndex: number,\n charIndex: number,\n prevGrapheme?: string,\n skipLeft?: boolean,\n ): GraphemeBBox {\n const style = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n prevStyle = prevGrapheme\n ? this.getCompleteStyleDeclaration(lineIndex, charIndex - 1)\n : {},\n info = this._measureChar(grapheme, style, prevGrapheme, prevStyle);\n let kernedWidth = info.kernedWidth,\n width = info.width,\n charSpacing;\n\n if (this.charSpacing !== 0) {\n charSpacing = this._getWidthOfCharSpacing();\n width += charSpacing;\n kernedWidth += charSpacing;\n }\n\n const box: GraphemeBBox = {\n width,\n left: 0,\n height: style.fontSize,\n kernedWidth,\n deltaY: style.deltaY,\n };\n if (charIndex > 0 && !skipLeft) {\n const previousBox = this.__charBounds[lineIndex][charIndex - 1];\n box.left =\n previousBox.left + previousBox.width + info.kernedWidth - info.width;\n }\n return box;\n }\n\n /**\n * Calculate height of line at 'lineIndex'\n * @param {Number} lineIndex index of line to calculate\n * @return {Number}\n */\n getHeightOfLine(lineIndex: number): number {\n if (this.__lineHeights[lineIndex]) {\n return this.__lineHeights[lineIndex];\n }\n\n // char 0 is measured before the line cycle because it needs to char\n // emptylines\n let maxHeight = this.getHeightOfChar(lineIndex, 0);\n for (let i = 1, len = this._textLines[lineIndex].length; i < len; i++) {\n maxHeight = Math.max(this.getHeightOfChar(lineIndex, i), maxHeight);\n }\n\n return (this.__lineHeights[lineIndex] =\n maxHeight * this.lineHeight * this._fontSizeMult);\n }\n\n /**\n * Calculate text box height\n */\n calcTextHeight() {\n let lineHeight,\n height = 0;\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n lineHeight = this.getHeightOfLine(i);\n height += i === len - 1 ? lineHeight / this.lineHeight : lineHeight;\n }\n return height;\n }\n\n /**\n * @private\n * @return {Number} Left offset\n */\n _getLeftOffset(): number {\n return this.direction === 'ltr' ? -this.width / 2 : this.width / 2;\n }\n\n /**\n * @private\n * @return {Number} Top offset\n */\n _getTopOffset(): number {\n return -this.height / 2;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n */\n _renderTextCommon(\n ctx: CanvasRenderingContext2D,\n method: 'fillText' | 'strokeText',\n ) {\n ctx.save();\n let lineHeights = 0;\n const left = this._getLeftOffset(),\n top = this._getTopOffset();\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i),\n maxHeight = heightOfLine / this.lineHeight,\n leftOffset = this._getLineLeftOffset(i);\n this._renderTextLine(\n method,\n ctx,\n this._textLines[i],\n left + leftOffset,\n top + lineHeights + maxHeight,\n i,\n );\n lineHeights += heightOfLine;\n }\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextFill(ctx: CanvasRenderingContext2D) {\n if (!this.fill && !this.styleHas(FILL)) {\n return;\n }\n\n this._renderTextCommon(ctx, 'fillText');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextStroke(ctx: CanvasRenderingContext2D) {\n if ((!this.stroke || this.strokeWidth === 0) && this.isEmptyStyles()) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n this._setLineDash(ctx, this.strokeDashArray);\n ctx.beginPath();\n this._renderTextCommon(ctx, 'strokeText');\n ctx.closePath();\n ctx.restore();\n }\n\n /**\n * @private\n * @param {String} method fillText or strokeText.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Array} line Content of the line, splitted in an array by grapheme\n * @param {Number} left\n * @param {Number} top\n * @param {Number} lineIndex\n */\n _renderChars(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n line: Array,\n left: number,\n top: number,\n lineIndex: number,\n ) {\n const lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.includes(JUSTIFY),\n path = this.path,\n shortCut =\n !isJustify &&\n this.charSpacing === 0 &&\n this.isEmptyStyles(lineIndex) &&\n !path,\n isLtr = this.direction === 'ltr',\n sign = this.direction === 'ltr' ? 1 : -1,\n // this was changed in the PR #7674\n // currentDirection = ctx.canvas.getAttribute('dir');\n currentDirection = ctx.direction;\n\n let actualStyle,\n nextStyle,\n charsToRender = '',\n charBox,\n boxWidth = 0,\n timeToRender,\n drawingLeft;\n\n ctx.save();\n if (currentDirection !== this.direction) {\n ctx.canvas.setAttribute('dir', isLtr ? 'ltr' : 'rtl');\n ctx.direction = isLtr ? 'ltr' : 'rtl';\n ctx.textAlign = isLtr ? LEFT : RIGHT;\n }\n top -= (lineHeight * this._fontSizeFraction) / this.lineHeight;\n if (shortCut) {\n // render all the line in one pass without checking\n // drawingLeft = isLtr ? left : left - this.getLineWidth(lineIndex);\n this._renderChar(method, ctx, lineIndex, 0, line.join(''), left, top);\n ctx.restore();\n return;\n }\n for (let i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing || path;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i] as Required;\n if (boxWidth === 0) {\n left += sign * (charBox.kernedWidth - charBox.width);\n boxWidth += charBox.width;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle =\n actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = hasStyleChanged(actualStyle, nextStyle, false);\n }\n if (timeToRender) {\n if (path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n this._renderChar(\n method,\n ctx,\n lineIndex,\n i,\n charsToRender,\n -boxWidth / 2,\n 0,\n );\n ctx.restore();\n } else {\n drawingLeft = left;\n this._renderChar(\n method,\n ctx,\n lineIndex,\n i,\n charsToRender,\n drawingLeft,\n top,\n );\n }\n charsToRender = '';\n actualStyle = nextStyle;\n left += sign * boxWidth;\n boxWidth = 0;\n }\n }\n ctx.restore();\n }\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {TFiller} filler a fabric gradient instance\n * @return {CanvasPattern} a pattern to use as fill/stroke style\n */\n _applyPatternGradientTransformText(filler: TFiller) {\n const pCanvas = createCanvasElement(),\n // TODO: verify compatibility with strokeUniform\n width = this.width + this.strokeWidth,\n height = this.height + this.strokeWidth,\n pCtx = pCanvas.getContext('2d')!;\n pCanvas.width = width;\n pCanvas.height = height;\n pCtx.beginPath();\n pCtx.moveTo(0, 0);\n pCtx.lineTo(width, 0);\n pCtx.lineTo(width, height);\n pCtx.lineTo(0, height);\n pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.fillStyle = filler.toLive(pCtx)!;\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fill();\n return pCtx.createPattern(pCanvas, 'no-repeat')!;\n }\n\n handleFiller(\n ctx: CanvasRenderingContext2D,\n property: `${T}Style`,\n filler: TFiller | string,\n ): { offsetX: number; offsetY: number } {\n let offsetX: number, offsetY: number;\n if (isFiller(filler)) {\n if (\n (filler as Gradient<'linear'>).gradientUnits === 'percentage' ||\n (filler as Gradient<'linear'>).gradientTransform ||\n (filler as Pattern).patternTransform\n ) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n offsetX = -this.width / 2;\n offsetY = -this.height / 2;\n ctx.translate(offsetX, offsetY);\n ctx[property] = this._applyPatternGradientTransformText(filler);\n return { offsetX, offsetY };\n } else {\n // is a simple gradient or pattern\n ctx[property] = filler.toLive(ctx)!;\n return this._applyPatternGradientTransform(ctx, filler);\n }\n } else {\n // is a color\n ctx[property] = filler;\n }\n return { offsetX: 0, offsetY: 0 };\n }\n\n /**\n * This function prepare the canvas for a stroke style, and stroke and strokeWidth\n * need to be sent in as defined\n * @param {CanvasRenderingContext2D} ctx\n * @param {CompleteTextStyleDeclaration} style with stroke and strokeWidth defined\n * @returns\n */\n _setStrokeStyles(\n ctx: CanvasRenderingContext2D,\n {\n stroke,\n strokeWidth,\n }: Pick,\n ) {\n ctx.lineWidth = strokeWidth;\n ctx.lineCap = this.strokeLineCap;\n ctx.lineDashOffset = this.strokeDashOffset;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.miterLimit = this.strokeMiterLimit;\n return this.handleFiller(ctx, 'strokeStyle', stroke!);\n }\n\n /**\n * This function prepare the canvas for a ill style, and fill\n * need to be sent in as defined\n * @param {CanvasRenderingContext2D} ctx\n * @param {CompleteTextStyleDeclaration} style with ill defined\n * @returns\n */\n _setFillStyles(ctx: CanvasRenderingContext2D, { fill }: Pick) {\n return this.handleFiller(ctx, 'fillStyle', fill!);\n }\n\n /**\n * @private\n * @param {String} method\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {String} _char\n * @param {Number} left Left coordinate\n * @param {Number} top Top coordinate\n * @param {Number} lineHeight Height of the line\n */\n _renderChar(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n lineIndex: number,\n charIndex: number,\n _char: string,\n left: number,\n top: number,\n ) {\n const decl = this._getStyleDeclaration(lineIndex, charIndex),\n fullDecl = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n shouldFill = method === 'fillText' && fullDecl.fill,\n shouldStroke =\n method === 'strokeText' && fullDecl.stroke && fullDecl.strokeWidth;\n\n if (!shouldStroke && !shouldFill) {\n return;\n }\n ctx.save();\n\n ctx.font = this._getFontDeclaration(fullDecl);\n\n if (decl.textBackgroundColor) {\n this._removeShadow(ctx);\n }\n if (decl.deltaY) {\n top += decl.deltaY;\n }\n\n if (shouldFill) {\n const fillOffsets = this._setFillStyles(ctx, fullDecl);\n ctx.fillText(\n _char,\n left - fillOffsets.offsetX,\n top - fillOffsets.offsetY,\n );\n }\n\n if (shouldStroke) {\n const strokeOffsets = this._setStrokeStyles(ctx, fullDecl);\n ctx.strokeText(\n _char,\n left - strokeOffsets.offsetX,\n top - strokeOffsets.offsetY,\n );\n }\n\n ctx.restore();\n }\n\n /**\n * Turns the character into a 'superior figure' (i.e. 'superscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n */\n setSuperscript(start: number, end: number) {\n this._setScript(start, end, this.superscript);\n }\n\n /**\n * Turns the character into an 'inferior figure' (i.e. 'subscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n */\n setSubscript(start: number, end: number) {\n this._setScript(start, end, this.subscript);\n }\n\n /**\n * Applies 'schema' at given position\n * @private\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @param {Number} schema\n */\n protected _setScript(\n start: number,\n end: number,\n schema: {\n size: number;\n baseline: number;\n },\n ) {\n const loc = this.get2DCursorLocation(start, true),\n fontSize = this.getValueOfPropertyAt(\n loc.lineIndex,\n loc.charIndex,\n 'fontSize',\n ),\n dy = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'deltaY'),\n style = {\n fontSize: fontSize * schema.size,\n deltaY: dy + fontSize * schema.baseline,\n };\n this.setSelectionStyles(style, start, end);\n }\n\n /**\n * @private\n * @param {Number} lineIndex index text line\n * @return {Number} Line left offset\n */\n _getLineLeftOffset(lineIndex: number): number {\n const lineWidth = this.getLineWidth(lineIndex),\n lineDiff = this.width - lineWidth,\n textAlign = this.textAlign,\n direction = this.direction,\n isEndOfWrapping = this.isEndOfWrapping(lineIndex);\n let leftOffset = 0;\n if (\n textAlign === JUSTIFY ||\n (textAlign === JUSTIFY_CENTER && !isEndOfWrapping) ||\n (textAlign === JUSTIFY_RIGHT && !isEndOfWrapping) ||\n (textAlign === JUSTIFY_LEFT && !isEndOfWrapping)\n ) {\n return 0;\n }\n if (textAlign === CENTER) {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === RIGHT) {\n leftOffset = lineDiff;\n }\n if (textAlign === JUSTIFY_CENTER) {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === JUSTIFY_RIGHT) {\n leftOffset = lineDiff;\n }\n if (direction === 'rtl') {\n if (\n textAlign === RIGHT ||\n textAlign === JUSTIFY ||\n textAlign === JUSTIFY_RIGHT\n ) {\n leftOffset = 0;\n } else if (textAlign === LEFT || textAlign === JUSTIFY_LEFT) {\n leftOffset = -lineDiff;\n } else if (textAlign === CENTER || textAlign === JUSTIFY_CENTER) {\n leftOffset = -lineDiff / 2;\n }\n }\n return leftOffset;\n }\n\n /**\n * @private\n */\n _clearCache() {\n this._forceClearCache = false;\n this.__lineWidths = [];\n this.__lineHeights = [];\n this.__charBounds = [];\n }\n\n /**\n * Measure a single line given its index. Used to calculate the initial\n * text bounding box. The values are calculated and stored in __lineWidths cache.\n * @private\n * @param {Number} lineIndex line number\n * @return {Number} Line width\n */\n getLineWidth(lineIndex: number): number {\n if (this.__lineWidths[lineIndex] !== undefined) {\n return this.__lineWidths[lineIndex];\n }\n\n const { width } = this.measureLine(lineIndex);\n this.__lineWidths[lineIndex] = width;\n return width;\n }\n\n _getWidthOfCharSpacing() {\n if (this.charSpacing !== 0) {\n return (this.fontSize * this.charSpacing) / 1000;\n }\n return 0;\n }\n\n /**\n * Retrieves the value of property at given character position\n * @param {Number} lineIndex the line number\n * @param {Number} charIndex the character number\n * @param {String} property the property name\n * @returns the value of 'property'\n */\n getValueOfPropertyAt(\n lineIndex: number,\n charIndex: number,\n property: T,\n ): this[T] {\n const charStyle = this._getStyleDeclaration(lineIndex, charIndex);\n return (charStyle[property] ?? this[property]) as this[T];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextDecoration(\n ctx: CanvasRenderingContext2D,\n type: 'underline' | 'linethrough' | 'overline',\n ) {\n if (!this[type] && !this.styleHas(type)) {\n return;\n }\n let topOffset = this._getTopOffset();\n const leftOffset = this._getLeftOffset(),\n path = this.path,\n charSpacing = this._getWidthOfCharSpacing(),\n offsetY = this.offsets[type];\n\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i);\n if (!this[type] && !this.styleHas(type, i)) {\n topOffset += heightOfLine;\n continue;\n }\n const line = this._textLines[i];\n const maxHeight = heightOfLine / this.lineHeight;\n const lineLeftOffset = this._getLineLeftOffset(i);\n let boxStart = 0;\n let boxWidth = 0;\n let lastDecoration = this.getValueOfPropertyAt(i, 0, type);\n let lastFill = this.getValueOfPropertyAt(i, 0, FILL);\n let currentDecoration;\n let currentFill;\n const top = topOffset + maxHeight * (1 - this._fontSizeFraction);\n let size = this.getHeightOfChar(i, 0);\n let dy = this.getValueOfPropertyAt(i, 0, 'deltaY');\n for (let j = 0, jlen = line.length; j < jlen; j++) {\n const charBox = this.__charBounds[i][j] as Required;\n currentDecoration = this.getValueOfPropertyAt(i, j, type);\n currentFill = this.getValueOfPropertyAt(i, j, FILL);\n const currentSize = this.getHeightOfChar(i, j);\n const currentDy = this.getValueOfPropertyAt(i, j, 'deltaY');\n if (path && currentDecoration && currentFill) {\n ctx.save();\n // bug? verify lastFill is a valid fill here.\n ctx.fillStyle = lastFill as string;\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillRect(\n -charBox.kernedWidth / 2,\n offsetY * currentSize + currentDy,\n charBox.kernedWidth,\n this.fontSize / 15,\n );\n ctx.restore();\n } else if (\n (currentDecoration !== lastDecoration ||\n currentFill !== lastFill ||\n currentSize !== size ||\n currentDy !== dy) &&\n boxWidth > 0\n ) {\n let drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n if (lastDecoration && lastFill) {\n // bug? verify lastFill is a valid fill here.\n ctx.fillStyle = lastFill as string;\n ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth,\n this.fontSize / 15,\n );\n }\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastDecoration = currentDecoration;\n lastFill = currentFill;\n size = currentSize;\n dy = currentDy;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n }\n let drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentFill as string;\n currentDecoration &&\n currentFill &&\n ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth - charSpacing,\n this.fontSize / 15,\n );\n topOffset += heightOfLine;\n }\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * return font declaration string for canvas context\n * @param {Object} [styleObject] object\n * @returns {String} font declaration formatted for canvas context.\n */\n _getFontDeclaration(\n {\n fontFamily = this.fontFamily,\n fontStyle = this.fontStyle,\n fontWeight = this.fontWeight,\n fontSize = this.fontSize,\n }: Partial<\n Pick<\n TextStyleDeclaration,\n 'fontFamily' | 'fontStyle' | 'fontWeight' | 'fontSize'\n >\n > = {},\n forMeasuring?: boolean,\n ): string {\n const parsedFontFamily =\n fontFamily.includes(\"'\") ||\n fontFamily.includes('\"') ||\n fontFamily.includes(',') ||\n FabricText.genericFonts.includes(fontFamily.toLowerCase())\n ? fontFamily\n : `\"${fontFamily}\"`;\n return [\n fontStyle,\n fontWeight,\n `${forMeasuring ? this.CACHE_FONT_SIZE : fontSize}px`,\n parsedFontFamily,\n ].join(' ');\n }\n\n /**\n * Renders text instance on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n if (!this.visible) {\n return;\n }\n if (\n this.canvas &&\n this.canvas.skipOffscreen &&\n !this.group &&\n !this.isOnScreen()\n ) {\n return;\n }\n if (this._forceClearCache) {\n this.initDimensions();\n }\n super.render(ctx);\n }\n\n /**\n * Override this method to customize grapheme splitting\n * @todo the util `graphemeSplit` needs to be injectable in some way.\n * is more comfortable to inject the correct util rather than having to override text\n * in the middle of the prototype chain\n * @param {string} value\n * @returns {string[]} array of graphemes\n */\n graphemeSplit(value: string): string[] {\n return graphemeSplit(value);\n }\n\n /**\n * Returns the text as an array of lines.\n * @param {String} text text to split\n * @returns Lines in the text\n */\n _splitTextIntoLines(text: string): TextLinesInfo {\n const lines = text.split(this._reNewline),\n newLines = new Array(lines.length),\n newLine = ['\\n'];\n let newText: string[] = [];\n for (let i = 0; i < lines.length; i++) {\n newLines[i] = this.graphemeSplit(lines[i]);\n newText = newText.concat(newLines[i], newLine);\n }\n newText.pop();\n return {\n _unwrappedLines: newLines,\n lines: lines,\n graphemeText: newText,\n graphemeLines: newLines,\n };\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject([...additionalProps, ...propertiesToInclude] as K[]),\n styles: stylesToArray(this.styles, this.text),\n ...(this.path ? { path: this.path.toObject() } : {}),\n };\n }\n\n set(key: string | any, value?: any) {\n const { textLayoutProperties } = this.constructor as typeof FabricText;\n super.set(key, value);\n let needsDims = false;\n let isAddingPath = false;\n if (typeof key === 'object') {\n for (const _key in key) {\n if (_key === 'path') {\n this.setPathInfo();\n }\n needsDims = needsDims || textLayoutProperties.includes(_key);\n isAddingPath = isAddingPath || _key === 'path';\n }\n } else {\n needsDims = textLayoutProperties.includes(key);\n isAddingPath = key === 'path';\n }\n if (isAddingPath) {\n this.setPathInfo();\n }\n if (needsDims && this.initialized) {\n this.initDimensions();\n this.setCoords();\n }\n return this;\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity\n */\n complexity(): number {\n return 1;\n }\n\n /**\n * List of generic font families\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/font-family#generic-name\n */\n static genericFonts = [\n 'serif',\n 'sans-serif',\n 'monospace',\n 'cursive',\n 'fantasy',\n 'system-ui',\n 'ui-serif',\n 'ui-sans-serif',\n 'ui-monospace',\n 'ui-rounded',\n 'math',\n 'emoji',\n 'fangsong',\n ];\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link FabricText.fromElement})\n * @static\n * @memberOf Text\n * @see: http://www.w3.org/TR/SVG/text.html#TextElement\n */\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(\n 'x',\n 'y',\n 'dx',\n 'dy',\n 'font-family',\n 'font-style',\n 'font-weight',\n 'font-size',\n 'letter-spacing',\n 'text-decoration',\n 'text-anchor',\n );\n\n /**\n * Returns FabricText instance from an SVG element (not yet implemented)\n * @static\n * @memberOf Text\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const parsedAttributes = parseAttributes(\n element,\n FabricText.ATTRIBUTE_NAMES,\n cssRules,\n );\n\n const {\n textAnchor = LEFT as typeof LEFT | typeof CENTER | typeof RIGHT,\n textDecoration = '',\n dx = 0,\n dy = 0,\n top = 0,\n left = 0,\n fontSize = DEFAULT_SVG_FONT_SIZE,\n strokeWidth = 1,\n ...restOfOptions\n } = { ...options, ...parsedAttributes };\n\n const textContent = (element.textContent || '')\n .replace(/^\\s+|\\s+$|\\n+/g, '')\n .replace(/\\s+/g, ' ');\n\n // this code here is probably the usual issue for SVG center find\n // this can later looked at again and probably removed.\n\n const text = new this(textContent, {\n left: left + dx,\n top: top + dy,\n underline: textDecoration.includes('underline'),\n overline: textDecoration.includes('overline'),\n linethrough: textDecoration.includes('line-through'),\n // we initialize this as 0\n strokeWidth: 0,\n fontSize,\n ...restOfOptions,\n }),\n textHeightScaleFactor = text.getScaledHeight() / text.height,\n lineHeightDiff =\n (text.height + text.strokeWidth) * text.lineHeight - text.height,\n scaledDiff = lineHeightDiff * textHeightScaleFactor,\n textHeight = text.getScaledHeight() + scaledDiff;\n\n let offX = 0;\n /*\n Adjust positioning:\n x/y attributes in SVG correspond to the bottom-left corner of text bounding box\n fabric output by default at top, left.\n */\n if (textAnchor === CENTER) {\n offX = text.getScaledWidth() / 2;\n }\n if (textAnchor === RIGHT) {\n offX = text.getScaledWidth();\n }\n text.set({\n left: text.left - offX,\n top:\n text.top -\n (textHeight - text.fontSize * (0.07 + text._fontSizeFraction)) /\n text.lineHeight,\n strokeWidth,\n });\n return text;\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns FabricText instance from an object representation\n * @param {Object} object plain js Object to create an instance from\n * @returns {Promise}\n */\n static fromObject<\n T extends TOptions,\n S extends FabricText,\n >(object: T) {\n return this._fromObject(\n {\n ...object,\n styles: stylesFromArray(object.styles || {}, object.text),\n },\n {\n extraParam: 'text',\n },\n );\n }\n}\n\napplyMixins(FabricText, [TextSVGExportMixin]);\nclassRegistry.setClass(FabricText);\nclassRegistry.setSVGClass(FabricText);\n","import type {\n DragEventData,\n DropEventData,\n TPointerEvent,\n} from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport type { IText } from './IText';\nimport { setStyle } from '../../util/dom_style';\nimport { cloneStyles } from '../../util/internals/cloneStyles';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { CHANGED, NONE } from '../../constants';\n\n/**\n * #### Dragging IText/Textbox Lifecycle\n * - {@link start} is called from `mousedown` {@link IText#_mouseDownHandler} and determines if dragging should start by testing {@link isPointerOverSelection}\n * - if true `mousedown` {@link IText#_mouseDownHandler} is blocked to keep selection\n * - if the pointer moves, canvas fires numerous mousemove {@link Canvas#_onMouseMove} that we make sure **aren't** prevented ({@link IText#shouldStartDragging}) in order for the window to start a drag session\n * - once/if the session starts canvas calls {@link onDragStart} on the active object to determine if dragging should occur\n * - canvas fires relevant drag events that are handled by the handlers defined in this scope\n * - {@link end} is called from `mouseup` {@link IText#mouseUpHandler}, blocking IText default click behavior\n * - in case the drag session didn't occur, {@link end} handles a click, since logic to do so was blocked during `mousedown`\n */\nexport class DraggableTextDelegate {\n readonly target: IText;\n private __mouseDownInPlace = false;\n private __dragStartFired = false;\n private __isDraggingOver = false;\n private __dragStartSelection?: {\n selectionStart: number;\n selectionEnd: number;\n };\n private __dragImageDisposer?: VoidFunction;\n private _dispose?: () => void;\n\n constructor(target: IText) {\n this.target = target;\n const disposers = [\n this.target.on('dragenter', this.dragEnterHandler.bind(this)),\n this.target.on('dragover', this.dragOverHandler.bind(this)),\n this.target.on('dragleave', this.dragLeaveHandler.bind(this)),\n this.target.on('dragend', this.dragEndHandler.bind(this)),\n this.target.on('drop', this.dropHandler.bind(this)),\n ];\n this._dispose = () => {\n disposers.forEach((d) => d());\n this._dispose = undefined;\n };\n }\n\n isPointerOverSelection(e: TPointerEvent) {\n const target = this.target;\n const newSelection = target.getSelectionStartFromPointer(e);\n return (\n target.isEditing &&\n newSelection >= target.selectionStart &&\n newSelection <= target.selectionEnd &&\n target.selectionStart < target.selectionEnd\n );\n }\n\n /**\n * @public override this method to disable dragging and default to mousedown logic\n */\n start(e: TPointerEvent) {\n return (this.__mouseDownInPlace = this.isPointerOverSelection(e));\n }\n\n /**\n * @public override this method to disable dragging without discarding selection\n */\n isActive() {\n return this.__mouseDownInPlace;\n }\n\n /**\n * Ends interaction and sets cursor in case of a click\n * @returns true if was active\n */\n end(e: TPointerEvent) {\n const active = this.isActive();\n if (active && !this.__dragStartFired) {\n // mousedown has been blocked since `active` is true => cursor has not been set.\n // `__dragStartFired` is false => dragging didn't occur, pointer didn't move and is over selection.\n // meaning this is actually a click, `active` is a false positive.\n this.target.setCursorByClick(e);\n this.target.initDelayedCursor(true);\n }\n this.__mouseDownInPlace = false;\n this.__dragStartFired = false;\n this.__isDraggingOver = false;\n return active;\n }\n\n getDragStartSelection() {\n return this.__dragStartSelection;\n }\n\n /**\n * Override to customize the drag image\n * https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/setDragImage\n */\n setDragImage(\n e: DragEvent,\n {\n selectionStart,\n selectionEnd,\n }: {\n selectionStart: number;\n selectionEnd: number;\n },\n ) {\n const target = this.target;\n const canvas = target.canvas!;\n const flipFactor = new Point(target.flipX ? -1 : 1, target.flipY ? -1 : 1);\n const boundaries = target._getCursorBoundaries(selectionStart);\n const selectionPosition = new Point(\n boundaries.left + boundaries.leftOffset,\n boundaries.top + boundaries.topOffset,\n ).multiply(flipFactor);\n const pos = selectionPosition.transform(target.calcTransformMatrix());\n const pointer = canvas.getScenePoint(e);\n const diff = pointer.subtract(pos);\n const retinaScaling = target.getCanvasRetinaScaling();\n const bbox = target.getBoundingRect();\n const correction = pos.subtract(new Point(bbox.left, bbox.top));\n const vpt = canvas.viewportTransform;\n const offset = correction.add(diff).transform(vpt, true);\n // prepare instance for drag image snapshot by making all non selected text invisible\n const bgc = target.backgroundColor;\n const styles = cloneStyles(target.styles);\n target.backgroundColor = '';\n const styleOverride = {\n stroke: 'transparent',\n fill: 'transparent',\n textBackgroundColor: 'transparent',\n };\n target.setSelectionStyles(styleOverride, 0, selectionStart);\n target.setSelectionStyles(styleOverride, selectionEnd, target.text.length);\n target.dirty = true;\n const dragImage = target.toCanvasElement({\n enableRetinaScaling: canvas.enableRetinaScaling,\n viewportTransform: true,\n });\n // restore values\n target.backgroundColor = bgc;\n target.styles = styles;\n target.dirty = true;\n // position drag image offscreen\n setStyle(dragImage, {\n position: 'fixed',\n left: `${-dragImage.width}px`,\n border: NONE,\n width: `${dragImage.width / retinaScaling}px`,\n height: `${dragImage.height / retinaScaling}px`,\n });\n this.__dragImageDisposer && this.__dragImageDisposer();\n this.__dragImageDisposer = () => {\n dragImage.remove();\n };\n getDocumentFromElement(\n (e.target || this.target.hiddenTextarea)! as HTMLElement,\n ).body.appendChild(dragImage);\n e.dataTransfer?.setDragImage(dragImage, offset.x, offset.y);\n }\n\n /**\n * @returns {boolean} determines whether {@link target} should/shouldn't become a drag source\n */\n onDragStart(e: DragEvent): boolean {\n this.__dragStartFired = true;\n const target = this.target;\n const active = this.isActive();\n if (active && e.dataTransfer) {\n const selection = (this.__dragStartSelection = {\n selectionStart: target.selectionStart,\n selectionEnd: target.selectionEnd,\n });\n const value = target._text\n .slice(selection.selectionStart, selection.selectionEnd)\n .join('');\n const data = { text: target.text, value, ...selection };\n e.dataTransfer.setData('text/plain', value);\n e.dataTransfer.setData(\n 'application/fabric',\n JSON.stringify({\n value: value,\n styles: target.getSelectionStyles(\n selection.selectionStart,\n selection.selectionEnd,\n true,\n ),\n }),\n );\n e.dataTransfer.effectAllowed = 'copyMove';\n this.setDragImage(e, data);\n }\n target.abortCursorAnimation();\n return active;\n }\n\n /**\n * use {@link targetCanDrop} to respect overriding\n * @returns {boolean} determines whether {@link target} should/shouldn't become a drop target\n */\n canDrop(e: DragEvent): boolean {\n if (\n this.target.editable &&\n !this.target.getActiveControl() &&\n !e.defaultPrevented\n ) {\n if (this.isActive() && this.__dragStartSelection) {\n // drag source trying to drop over itself\n // allow dropping only outside of drag start selection\n const index = this.target.getSelectionStartFromPointer(e);\n const dragStartSelection = this.__dragStartSelection;\n return (\n index < dragStartSelection.selectionStart ||\n index > dragStartSelection.selectionEnd\n );\n }\n return true;\n }\n return false;\n }\n\n /**\n * in order to respect overriding {@link IText#canDrop} we call that instead of calling {@link canDrop} directly\n */\n protected targetCanDrop(e: DragEvent) {\n return this.target.canDrop(e);\n }\n\n dragEnterHandler({ e }: DragEventData) {\n const canDrop = this.targetCanDrop(e);\n if (!this.__isDraggingOver && canDrop) {\n this.__isDraggingOver = true;\n }\n }\n\n dragOverHandler(ev: DragEventData) {\n const { e } = ev;\n const canDrop = this.targetCanDrop(e);\n if (!this.__isDraggingOver && canDrop) {\n this.__isDraggingOver = true;\n } else if (this.__isDraggingOver && !canDrop) {\n // drop state has changed\n this.__isDraggingOver = false;\n }\n if (this.__isDraggingOver) {\n // can be dropped, inform browser\n e.preventDefault();\n // inform event subscribers\n ev.canDrop = true;\n ev.dropTarget = this.target;\n }\n }\n\n dragLeaveHandler() {\n if (this.__isDraggingOver || this.isActive()) {\n this.__isDraggingOver = false;\n }\n }\n\n /**\n * Override the `text/plain | application/fabric` types of {@link DragEvent#dataTransfer}\n * in order to change the drop value or to customize styling respectively, by listening to the `drop:before` event\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#performing_a_drop\n */\n dropHandler(ev: DropEventData) {\n const { e } = ev;\n const didDrop = e.defaultPrevented;\n this.__isDraggingOver = false;\n // inform browser that the drop has been accepted\n e.preventDefault();\n let insert = e.dataTransfer?.getData('text/plain');\n if (insert && !didDrop) {\n const target = this.target;\n const canvas = target.canvas!;\n let insertAt = target.getSelectionStartFromPointer(e);\n const { styles } = (\n e.dataTransfer!.types.includes('application/fabric')\n ? JSON.parse(e.dataTransfer!.getData('application/fabric'))\n : {}\n ) as { styles: TextStyleDeclaration[] };\n const trailing = insert[Math.max(0, insert.length - 1)];\n const selectionStartOffset = 0;\n // drag and drop in same instance\n if (this.__dragStartSelection) {\n const selectionStart = this.__dragStartSelection.selectionStart;\n const selectionEnd = this.__dragStartSelection.selectionEnd;\n if (insertAt > selectionStart && insertAt <= selectionEnd) {\n insertAt = selectionStart;\n } else if (insertAt > selectionEnd) {\n insertAt -= selectionEnd - selectionStart;\n }\n target.removeChars(selectionStart, selectionEnd);\n // prevent `dragend` from handling event\n delete this.__dragStartSelection;\n }\n // remove redundant line break\n if (\n target._reNewline.test(trailing) &&\n (target._reNewline.test(target._text[insertAt]) ||\n insertAt === target._text.length)\n ) {\n insert = insert.trimEnd();\n }\n // inform subscribers\n ev.didDrop = true;\n ev.dropTarget = target;\n // finalize\n target.insertChars(insert, styles, insertAt);\n // can this part be moved in an outside event? andrea to check.\n canvas.setActiveObject(target);\n target.enterEditing(e);\n target.selectionStart = Math.min(\n insertAt + selectionStartOffset,\n target._text.length,\n );\n target.selectionEnd = Math.min(\n target.selectionStart + insert.length,\n target._text.length,\n );\n target.hiddenTextarea!.value = target.text;\n target._updateTextarea();\n target.hiddenTextarea!.focus();\n target.fire(CHANGED, {\n index: insertAt + selectionStartOffset,\n action: 'drop',\n });\n canvas.fire('text:changed', { target });\n canvas.contextTopDirty = true;\n canvas.requestRenderAll();\n }\n }\n\n /**\n * fired only on the drag source after drop (if occurred)\n * handle changes to the drag source in case of a drop on another object or a cancellation\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#finishing_a_drag\n */\n dragEndHandler({ e }: DragEventData) {\n if (this.isActive() && this.__dragStartFired) {\n // once the drop event finishes we check if we need to change the drag source\n // if the drag source received the drop we bail out since the drop handler has already handled logic\n if (this.__dragStartSelection) {\n const target = this.target;\n const canvas = this.target.canvas!;\n const { selectionStart, selectionEnd } = this.__dragStartSelection;\n const dropEffect = e.dataTransfer?.dropEffect || NONE;\n if (dropEffect === NONE) {\n // pointer is back over selection\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n target._updateTextarea();\n target.hiddenTextarea!.focus();\n } else {\n target.clearContextTop();\n if (dropEffect === 'move') {\n target.removeChars(selectionStart, selectionEnd);\n target.selectionStart = target.selectionEnd = selectionStart;\n target.hiddenTextarea &&\n (target.hiddenTextarea.value = target.text);\n target._updateTextarea();\n target.fire(CHANGED, {\n index: selectionStart,\n action: 'dragend',\n });\n canvas.fire('text:changed', { target });\n canvas.requestRenderAll();\n }\n target.exitEditing();\n }\n }\n }\n\n this.__dragImageDisposer && this.__dragImageDisposer();\n delete this.__dragImageDisposer;\n delete this.__dragStartSelection;\n this.__isDraggingOver = false;\n }\n\n dispose() {\n this._dispose && this._dispose();\n }\n}\n","import type {\n ObjectEvents,\n TPointerEvent,\n TPointerEventInfo,\n} from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport type { FabricObject } from '../Object/FabricObject';\nimport { FabricText } from '../Text/Text';\nimport { animate } from '../../util/animation/animate';\nimport type { TOnAnimationChangeCallback } from '../../util/animation/types';\nimport type { ValueAnimation } from '../../util/animation/ValueAnimation';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\nimport type { SerializedTextProps, TextProps } from '../Text/Text';\nimport type { TOptions } from '../../typedefs';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { LEFT, MODIFIED, RIGHT, reNewline } from '../../constants';\nimport type { IText } from './IText';\n\n/**\n * extend this regex to support non english languages\n *\n * - ` ` Matches a SPACE character (char code 32).\n * - `\\n` Matches a LINE FEED character (char code 10).\n * - `\\.` Matches a \".\" character (char code 46).\n * - `,` Matches a \",\" character (char code 44).\n * - `;` Matches a \";\" character (char code 59).\n * - `!` Matches a \"!\" character (char code 33).\n * - `\\?` Matches a \"?\" character (char code 63).\n * - `\\-` Matches a \"-\" character (char code 45).\n */\n// eslint-disable-next-line no-useless-escape\nconst reNonWord = /[ \\n\\.,;!\\?\\-]/;\n\nexport type ITextEvents = ObjectEvents & {\n 'selection:changed': never;\n changed: never | { index: number; action: string };\n tripleclick: TPointerEventInfo;\n 'editing:entered': never | { e: TPointerEvent };\n 'editing:exited': never;\n};\n\nexport abstract class ITextBehavior<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ITextEvents = ITextEvents,\n> extends FabricText {\n declare abstract isEditing: boolean;\n declare abstract cursorDelay: number;\n declare abstract selectionStart: number;\n declare abstract selectionEnd: number;\n declare abstract cursorDuration: number;\n declare abstract editable: boolean;\n declare abstract editingBorderColor: string;\n\n declare abstract compositionStart: number;\n declare abstract compositionEnd: number;\n\n declare abstract hiddenTextarea: HTMLTextAreaElement | null;\n\n /**\n * Helps determining when the text is in composition, so that the cursor\n * rendering is altered.\n */\n protected declare inCompositionMode: boolean;\n\n protected declare _reSpace: RegExp;\n private declare _currentTickState?: ValueAnimation;\n private declare _currentTickCompleteState?: ValueAnimation;\n protected _currentCursorOpacity = 1;\n private declare _textBeforeEdit: string;\n protected declare __selectionStartOnMouseDown: number;\n\n protected declare selected: boolean;\n protected declare cursorOffsetCache: { left?: number; top?: number };\n protected declare _savedProps?: {\n hasControls: boolean;\n borderColor: string;\n lockMovementX: boolean;\n lockMovementY: boolean;\n selectable: boolean;\n hoverCursor: CSSStyleDeclaration['cursor'] | null;\n defaultCursor?: CSSStyleDeclaration['cursor'];\n moveCursor?: CSSStyleDeclaration['cursor'];\n };\n protected declare _selectionDirection: 'left' | 'right' | null;\n\n abstract initHiddenTextarea(): void;\n abstract _fireSelectionChanged(): void;\n abstract renderCursorOrSelection(): void;\n abstract getSelectionStartFromPointer(e: TPointerEvent): number;\n abstract _getCursorBoundaries(\n index: number,\n skipCaching?: boolean,\n ): {\n left: number;\n top: number;\n leftOffset: number;\n topOffset: number;\n };\n\n /**\n * Initializes all the interactive behavior of IText\n */\n initBehavior() {\n this._tick = this._tick.bind(this);\n this._onTickComplete = this._onTickComplete.bind(this);\n this.updateSelectionOnMouseMove =\n this.updateSelectionOnMouseMove.bind(this);\n }\n\n onDeselect(options?: { e?: TPointerEvent; object?: FabricObject }) {\n this.isEditing && this.exitEditing();\n this.selected = false;\n return super.onDeselect(options);\n }\n\n /**\n * @private\n */\n _animateCursor({\n toValue,\n duration,\n delay,\n onComplete,\n }: {\n toValue: number;\n duration: number;\n delay?: number;\n onComplete?: TOnAnimationChangeCallback;\n }) {\n return animate({\n startValue: this._currentCursorOpacity,\n endValue: toValue,\n duration,\n delay,\n onComplete,\n abort: () =>\n !this.canvas ||\n // we do not want to animate a selection, only cursor\n this.selectionStart !== this.selectionEnd,\n onChange: (value) => {\n this._currentCursorOpacity = value;\n this.renderCursorOrSelection();\n },\n });\n }\n\n /**\n * changes the cursor from visible to invisible\n */\n private _tick(delay?: number) {\n this._currentTickState = this._animateCursor({\n toValue: 0,\n duration: this.cursorDuration / 2,\n delay: Math.max(delay || 0, 100),\n onComplete: this._onTickComplete,\n });\n }\n\n /**\n * Changes the cursor from invisible to visible\n */\n private _onTickComplete() {\n this._currentTickCompleteState?.abort();\n this._currentTickCompleteState = this._animateCursor({\n toValue: 1,\n duration: this.cursorDuration,\n onComplete: this._tick,\n });\n }\n\n /**\n * Initializes delayed cursor\n */\n initDelayedCursor(restart?: boolean) {\n this.abortCursorAnimation();\n this._tick(restart ? 0 : this.cursorDelay);\n }\n\n /**\n * Aborts cursor animation, clears all timeouts and clear textarea context if necessary\n */\n abortCursorAnimation() {\n let shouldClear = false;\n [this._currentTickState, this._currentTickCompleteState].forEach(\n (cursorAnimation) => {\n if (cursorAnimation && !cursorAnimation.isDone()) {\n shouldClear = true;\n cursorAnimation.abort();\n }\n },\n );\n\n this._currentCursorOpacity = 1;\n\n // make sure we clear context even if instance is not editing\n if (shouldClear) {\n this.clearContextTop();\n }\n }\n\n /**\n * Restart tue cursor animation if either is in complete state ( between animations )\n * or if it never started before\n */\n restartCursorIfNeeded() {\n if (\n [this._currentTickState, this._currentTickCompleteState].some(\n (cursorAnimation) => !cursorAnimation || cursorAnimation.isDone(),\n )\n ) {\n this.initDelayedCursor();\n }\n }\n\n /**\n * Selects entire text\n */\n selectAll() {\n this.selectionStart = 0;\n this.selectionEnd = this._text.length;\n this._fireSelectionChanged();\n this._updateTextarea();\n return this;\n }\n\n /**\n * Returns selected text\n * @return {String}\n */\n getSelectedText(): string {\n return this._text.slice(this.selectionStart, this.selectionEnd).join('');\n }\n\n /**\n * Find new selection index representing start of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryLeft(startFrom: number): number {\n let offset = 0,\n index = startFrom - 1;\n\n // remove space before cursor first\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index--;\n }\n }\n while (/\\S/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n }\n\n /**\n * Find new selection index representing end of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryRight(startFrom: number): number {\n let offset = 0,\n index = startFrom;\n\n // remove space after cursor first\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index++;\n }\n }\n while (/\\S/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n }\n\n /**\n * Find new selection index representing start of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryLeft(startFrom: number): number {\n let offset = 0,\n index = startFrom - 1;\n\n while (!/\\n/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n }\n\n /**\n * Find new selection index representing end of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryRight(startFrom: number): number {\n let offset = 0,\n index = startFrom;\n\n while (!/\\n/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n }\n\n /**\n * Finds index corresponding to beginning or end of a word\n * @param {Number} selectionStart Index of a character\n * @param {Number} direction 1 or -1\n * @return {Number} Index of the beginning or end of a word\n */\n searchWordBoundary(selectionStart: number, direction: 1 | -1): number {\n const text = this._text;\n // if we land on a space we move the cursor backwards\n // if we are searching boundary end we move the cursor backwards ONLY if we don't land on a line break\n let index =\n selectionStart > 0 &&\n this._reSpace.test(text[selectionStart]) &&\n (direction === -1 || !reNewline.test(text[selectionStart - 1]))\n ? selectionStart - 1\n : selectionStart,\n _char = text[index];\n while (index > 0 && index < text.length && !reNonWord.test(_char)) {\n index += direction;\n _char = text[index];\n }\n if (direction === -1 && reNonWord.test(_char)) {\n index++;\n }\n return index;\n }\n\n /**\n * TODO fix: selectionStart set as 0 will be ignored?\n * Selects a word based on the index\n * @param {Number} selectionStart Index of a character\n */\n selectWord(selectionStart?: number) {\n selectionStart = selectionStart || this.selectionStart;\n // search backwards\n const newSelectionStart = this.searchWordBoundary(selectionStart, -1),\n // search forward\n newSelectionEnd = Math.max(\n newSelectionStart,\n this.searchWordBoundary(selectionStart, 1),\n );\n\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n this._fireSelectionChanged();\n this._updateTextarea();\n this.renderCursorOrSelection();\n }\n\n /**\n * TODO fix: selectionStart set as 0 will be ignored?\n * Selects a line based on the index\n * @param {Number} selectionStart Index of a character\n */\n selectLine(selectionStart?: number) {\n selectionStart = selectionStart || this.selectionStart;\n const newSelectionStart = this.findLineBoundaryLeft(selectionStart),\n newSelectionEnd = this.findLineBoundaryRight(selectionStart);\n\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n this._fireSelectionChanged();\n this._updateTextarea();\n return this;\n }\n\n /**\n * Enters editing state\n */\n enterEditing(e?: TPointerEvent) {\n if (this.isEditing || !this.editable) {\n return;\n }\n if (this.canvas) {\n this.canvas.calcOffset();\n this.canvas.textEditingManager.exitTextEditing();\n }\n\n this.isEditing = true;\n\n this.initHiddenTextarea();\n this.hiddenTextarea!.focus();\n this.hiddenTextarea!.value = this.text;\n this._updateTextarea();\n this._saveEditingProps();\n this._setEditingProps();\n this._textBeforeEdit = this.text;\n\n this._tick();\n this.fire('editing:entered', e ? { e } : undefined);\n this._fireSelectionChanged();\n if (this.canvas) {\n this.canvas.fire('text:editing:entered', {\n target: this as unknown as IText,\n e,\n });\n this.canvas.requestRenderAll();\n }\n }\n\n /**\n * called by {@link Canvas#textEditingManager}\n */\n updateSelectionOnMouseMove(e: TPointerEvent) {\n if (this.getActiveControl()) {\n return;\n }\n\n const el = this.hiddenTextarea!;\n // regain focus\n getDocumentFromElement(el).activeElement !== el && el.focus();\n\n const newSelectionStart = this.getSelectionStartFromPointer(e),\n currentStart = this.selectionStart,\n currentEnd = this.selectionEnd;\n if (\n (newSelectionStart !== this.__selectionStartOnMouseDown ||\n currentStart === currentEnd) &&\n (currentStart === newSelectionStart || currentEnd === newSelectionStart)\n ) {\n return;\n }\n if (newSelectionStart > this.__selectionStartOnMouseDown) {\n this.selectionStart = this.__selectionStartOnMouseDown;\n this.selectionEnd = newSelectionStart;\n } else {\n this.selectionStart = newSelectionStart;\n this.selectionEnd = this.__selectionStartOnMouseDown;\n }\n if (\n this.selectionStart !== currentStart ||\n this.selectionEnd !== currentEnd\n ) {\n this._fireSelectionChanged();\n this._updateTextarea();\n this.renderCursorOrSelection();\n }\n }\n\n /**\n * @private\n */\n _setEditingProps() {\n this.hoverCursor = 'text';\n\n if (this.canvas) {\n this.canvas.defaultCursor = this.canvas.moveCursor = 'text';\n }\n\n this.borderColor = this.editingBorderColor;\n this.hasControls = this.selectable = false;\n this.lockMovementX = this.lockMovementY = true;\n }\n\n /**\n * convert from textarea to grapheme indexes\n */\n fromStringToGraphemeSelection(start: number, end: number, text: string) {\n const smallerTextStart = text.slice(0, start),\n graphemeStart = this.graphemeSplit(smallerTextStart).length;\n if (start === end) {\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n }\n const smallerTextEnd = text.slice(start, end),\n graphemeEnd = this.graphemeSplit(smallerTextEnd).length;\n return {\n selectionStart: graphemeStart,\n selectionEnd: graphemeStart + graphemeEnd,\n };\n }\n\n /**\n * convert from fabric to textarea values\n */\n fromGraphemeToStringSelection(\n start: number,\n end: number,\n graphemes: string[],\n ) {\n const smallerTextStart = graphemes.slice(0, start),\n graphemeStart = smallerTextStart.join('').length;\n if (start === end) {\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n }\n const smallerTextEnd = graphemes.slice(start, end),\n graphemeEnd = smallerTextEnd.join('').length;\n return {\n selectionStart: graphemeStart,\n selectionEnd: graphemeStart + graphemeEnd,\n };\n }\n\n /**\n * @private\n */\n _updateTextarea() {\n this.cursorOffsetCache = {};\n if (!this.hiddenTextarea) {\n return;\n }\n if (!this.inCompositionMode) {\n const newSelection = this.fromGraphemeToStringSelection(\n this.selectionStart,\n this.selectionEnd,\n this._text,\n );\n this.hiddenTextarea.selectionStart = newSelection.selectionStart;\n this.hiddenTextarea.selectionEnd = newSelection.selectionEnd;\n }\n this.updateTextareaPosition();\n }\n\n /**\n * @private\n */\n updateFromTextArea() {\n if (!this.hiddenTextarea) {\n return;\n }\n this.cursorOffsetCache = {};\n const textarea = this.hiddenTextarea;\n this.text = textarea.value;\n this.set('dirty', true);\n this.initDimensions();\n this.setCoords();\n const newSelection = this.fromStringToGraphemeSelection(\n textarea.selectionStart,\n textarea.selectionEnd,\n textarea.value,\n );\n this.selectionEnd = this.selectionStart = newSelection.selectionEnd;\n if (!this.inCompositionMode) {\n this.selectionStart = newSelection.selectionStart;\n }\n this.updateTextareaPosition();\n }\n\n /**\n * @private\n */\n updateTextareaPosition() {\n if (this.selectionStart === this.selectionEnd) {\n const style = this._calcTextareaPosition();\n this.hiddenTextarea!.style.left = style.left;\n this.hiddenTextarea!.style.top = style.top;\n }\n }\n\n /**\n * @private\n * @return {Object} style contains style for hiddenTextarea\n */\n _calcTextareaPosition() {\n if (!this.canvas) {\n return { left: '1px', top: '1px' };\n }\n const desiredPosition = this.inCompositionMode\n ? this.compositionStart\n : this.selectionStart,\n boundaries = this._getCursorBoundaries(desiredPosition),\n cursorLocation = this.get2DCursorLocation(desiredPosition),\n lineIndex = cursorLocation.lineIndex,\n charIndex = cursorLocation.charIndex,\n charHeight =\n this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize') *\n this.lineHeight,\n leftOffset = boundaries.leftOffset,\n retinaScaling = this.getCanvasRetinaScaling(),\n upperCanvas = this.canvas.upperCanvasEl,\n upperCanvasWidth = upperCanvas.width / retinaScaling,\n upperCanvasHeight = upperCanvas.height / retinaScaling,\n maxWidth = upperCanvasWidth - charHeight,\n maxHeight = upperCanvasHeight - charHeight;\n\n const p = new Point(\n boundaries.left + leftOffset,\n boundaries.top + boundaries.topOffset + charHeight,\n )\n .transform(this.calcTransformMatrix())\n .transform(this.canvas.viewportTransform)\n .multiply(\n new Point(\n upperCanvas.clientWidth / upperCanvasWidth,\n upperCanvas.clientHeight / upperCanvasHeight,\n ),\n );\n\n if (p.x < 0) {\n p.x = 0;\n }\n if (p.x > maxWidth) {\n p.x = maxWidth;\n }\n if (p.y < 0) {\n p.y = 0;\n }\n if (p.y > maxHeight) {\n p.y = maxHeight;\n }\n\n // add canvas offset on document\n p.x += this.canvas._offset.left;\n p.y += this.canvas._offset.top;\n\n return {\n left: `${p.x}px`,\n top: `${p.y}px`,\n fontSize: `${charHeight}px`,\n charHeight: charHeight,\n };\n }\n\n /**\n * @private\n */\n _saveEditingProps() {\n this._savedProps = {\n hasControls: this.hasControls,\n borderColor: this.borderColor,\n lockMovementX: this.lockMovementX,\n lockMovementY: this.lockMovementY,\n hoverCursor: this.hoverCursor,\n selectable: this.selectable,\n defaultCursor: this.canvas && this.canvas.defaultCursor,\n moveCursor: this.canvas && this.canvas.moveCursor,\n };\n }\n\n /**\n * @private\n */\n _restoreEditingProps() {\n if (!this._savedProps) {\n return;\n }\n\n this.hoverCursor = this._savedProps.hoverCursor;\n this.hasControls = this._savedProps.hasControls;\n this.borderColor = this._savedProps.borderColor;\n this.selectable = this._savedProps.selectable;\n this.lockMovementX = this._savedProps.lockMovementX;\n this.lockMovementY = this._savedProps.lockMovementY;\n\n if (this.canvas) {\n this.canvas.defaultCursor =\n this._savedProps.defaultCursor || this.canvas.defaultCursor;\n this.canvas.moveCursor =\n this._savedProps.moveCursor || this.canvas.moveCursor;\n }\n\n delete this._savedProps;\n }\n\n /**\n * runs the actual logic that exits from editing state, see {@link exitEditing}\n */\n protected _exitEditing() {\n const hiddenTextarea = this.hiddenTextarea;\n this.selected = false;\n this.isEditing = false;\n\n if (hiddenTextarea) {\n hiddenTextarea.blur && hiddenTextarea.blur();\n hiddenTextarea.parentNode &&\n hiddenTextarea.parentNode.removeChild(hiddenTextarea);\n }\n this.hiddenTextarea = null;\n this.abortCursorAnimation();\n this.selectionStart !== this.selectionEnd && this.clearContextTop();\n }\n\n /**\n * Exits from editing state and fires relevant events\n */\n exitEditing() {\n const isTextChanged = this._textBeforeEdit !== this.text;\n this._exitEditing();\n this.selectionEnd = this.selectionStart;\n this._restoreEditingProps();\n if (this._forceClearCache) {\n this.initDimensions();\n this.setCoords();\n }\n this.fire('editing:exited');\n isTextChanged && this.fire(MODIFIED);\n if (this.canvas) {\n this.canvas.fire('text:editing:exited', {\n target: this as unknown as IText,\n });\n // todo: evaluate add an action to this event\n isTextChanged && this.canvas.fire('object:modified', { target: this });\n }\n return this;\n }\n\n /**\n * @private\n */\n _removeExtraneousStyles() {\n for (const prop in this.styles) {\n if (!this._textLines[prop as unknown as number]) {\n delete this.styles[prop];\n }\n }\n }\n\n /**\n * remove and reflow a style block from start to end.\n * @param {Number} start linear start position for removal (included in removal)\n * @param {Number} end linear end position for removal ( excluded from removal )\n */\n removeStyleFromTo(start: number, end: number) {\n const { lineIndex: lineStart, charIndex: charStart } =\n this.get2DCursorLocation(start, true),\n { lineIndex: lineEnd, charIndex: charEnd } = this.get2DCursorLocation(\n end,\n true,\n );\n if (lineStart !== lineEnd) {\n // step1 remove the trailing of lineStart\n if (this.styles[lineStart]) {\n for (\n let i = charStart;\n i < this._unwrappedTextLines[lineStart].length;\n i++\n ) {\n delete this.styles[lineStart][i];\n }\n }\n // step2 move the trailing of lineEnd to lineStart if needed\n if (this.styles[lineEnd]) {\n for (\n let i = charEnd;\n i < this._unwrappedTextLines[lineEnd].length;\n i++\n ) {\n const styleObj = this.styles[lineEnd][i];\n if (styleObj) {\n this.styles[lineStart] || (this.styles[lineStart] = {});\n this.styles[lineStart][charStart + i - charEnd] = styleObj;\n }\n }\n }\n // step3 detects lines will be completely removed.\n for (let i = lineStart + 1; i <= lineEnd; i++) {\n delete this.styles[i];\n }\n // step4 shift remaining lines.\n this.shiftLineStyles(lineEnd, lineStart - lineEnd);\n } else {\n // remove and shift left on the same line\n if (this.styles[lineStart]) {\n const styleObj = this.styles[lineStart];\n const diff = charEnd - charStart;\n for (let i = charStart; i < charEnd; i++) {\n delete styleObj[i];\n }\n for (const char in this.styles[lineStart]) {\n const numericChar = parseInt(char, 10);\n if (numericChar >= charEnd) {\n styleObj[numericChar - diff] = styleObj[char];\n delete styleObj[char];\n }\n }\n }\n }\n }\n\n /**\n * Shifts line styles up or down\n * @param {Number} lineIndex Index of a line\n * @param {Number} offset Can any number?\n */\n shiftLineStyles(lineIndex: number, offset: number) {\n const clonedStyles = Object.assign({}, this.styles);\n for (const line in this.styles) {\n const numericLine = parseInt(line, 10);\n if (numericLine > lineIndex) {\n this.styles[numericLine + offset] = clonedStyles[numericLine];\n if (!clonedStyles[numericLine - offset]) {\n delete this.styles[numericLine];\n }\n }\n }\n }\n\n /**\n * Handle insertion of more consecutive style lines for when one or more\n * newlines gets added to the text. Since current style needs to be shifted\n * first we shift the current style of the number lines needed, then we add\n * new lines from the last to the first.\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} qty number of lines to add\n * @param {Array} copiedStyle Array of objects styles\n */\n insertNewlineStyleObject(\n lineIndex: number,\n charIndex: number,\n qty: number,\n copiedStyle?: { [index: number]: TextStyleDeclaration },\n ) {\n const newLineStyles: { [index: number]: TextStyleDeclaration } = {};\n const originalLineLength = this._unwrappedTextLines[lineIndex].length;\n const isEndOfLine = originalLineLength === charIndex;\n\n let someStyleIsCarryingOver = false;\n qty || (qty = 1);\n this.shiftLineStyles(lineIndex, qty);\n const currentCharStyle = this.styles[lineIndex]\n ? this.styles[lineIndex][charIndex === 0 ? charIndex : charIndex - 1]\n : undefined;\n\n // we clone styles of all chars\n // after cursor onto the current line\n for (const index in this.styles[lineIndex]) {\n const numIndex = parseInt(index, 10);\n if (numIndex >= charIndex) {\n someStyleIsCarryingOver = true;\n newLineStyles[numIndex - charIndex] = this.styles[lineIndex][index];\n // remove lines from the previous line since they're on a new line now\n if (!(isEndOfLine && charIndex === 0)) {\n delete this.styles[lineIndex][index];\n }\n }\n }\n let styleCarriedOver = false;\n if (someStyleIsCarryingOver && !isEndOfLine) {\n // if is end of line, the extra style we copied\n // is probably not something we want\n this.styles[lineIndex + qty] = newLineStyles;\n styleCarriedOver = true;\n }\n if (styleCarriedOver || originalLineLength > charIndex) {\n // skip the last line of since we already prepared it.\n // or contains text without style that we don't want to style\n // just because it changed lines\n qty--;\n }\n // for the all the lines or all the other lines\n // we clone current char style onto the next (otherwise empty) line\n while (qty > 0) {\n if (copiedStyle && copiedStyle[qty - 1]) {\n this.styles[lineIndex + qty] = {\n 0: { ...copiedStyle[qty - 1] },\n };\n } else if (currentCharStyle) {\n this.styles[lineIndex + qty] = {\n 0: { ...currentCharStyle },\n };\n } else {\n delete this.styles[lineIndex + qty];\n }\n qty--;\n }\n this._forceClearCache = true;\n }\n\n /**\n * Inserts style object for a given line/char index\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} quantity number Style object to insert, if given\n * @param {Array} copiedStyle array of style objects\n */\n insertCharStyleObject(\n lineIndex: number,\n charIndex: number,\n quantity: number,\n copiedStyle?: TextStyleDeclaration[],\n ) {\n if (!this.styles) {\n this.styles = {};\n }\n const currentLineStyles = this.styles[lineIndex],\n currentLineStylesCloned = currentLineStyles\n ? { ...currentLineStyles }\n : {};\n\n quantity || (quantity = 1);\n // shift all char styles by quantity forward\n // 0,1,2,3 -> (charIndex=2) -> 0,1,3,4 -> (insert 2) -> 0,1,2,3,4\n for (const index in currentLineStylesCloned) {\n const numericIndex = parseInt(index, 10);\n if (numericIndex >= charIndex) {\n currentLineStyles[numericIndex + quantity] =\n currentLineStylesCloned[numericIndex];\n // only delete the style if there was nothing moved there\n if (!currentLineStylesCloned[numericIndex - quantity]) {\n delete currentLineStyles[numericIndex];\n }\n }\n }\n this._forceClearCache = true;\n if (copiedStyle) {\n while (quantity--) {\n if (!Object.keys(copiedStyle[quantity]).length) {\n continue;\n }\n if (!this.styles[lineIndex]) {\n this.styles[lineIndex] = {};\n }\n this.styles[lineIndex][charIndex + quantity] = {\n ...copiedStyle[quantity],\n };\n }\n return;\n }\n if (!currentLineStyles) {\n return;\n }\n const newStyle = currentLineStyles[charIndex ? charIndex - 1 : 1];\n while (newStyle && quantity--) {\n this.styles[lineIndex][charIndex + quantity] = { ...newStyle };\n }\n }\n\n /**\n * Inserts style object(s)\n * @param {Array} insertedText Characters at the location where style is inserted\n * @param {Number} start cursor index for inserting style\n * @param {Array} [copiedStyle] array of style objects to insert.\n */\n insertNewStyleBlock(\n insertedText: string[],\n start: number,\n copiedStyle?: TextStyleDeclaration[],\n ) {\n const cursorLoc = this.get2DCursorLocation(start, true),\n addedLines = [0];\n let linesLength = 0;\n // get an array of how many char per lines are being added.\n for (let i = 0; i < insertedText.length; i++) {\n if (insertedText[i] === '\\n') {\n linesLength++;\n addedLines[linesLength] = 0;\n } else {\n addedLines[linesLength]++;\n }\n }\n // for the first line copy the style from the current char position.\n if (addedLines[0] > 0) {\n this.insertCharStyleObject(\n cursorLoc.lineIndex,\n cursorLoc.charIndex,\n addedLines[0],\n copiedStyle,\n );\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[0] + 1);\n }\n linesLength &&\n this.insertNewlineStyleObject(\n cursorLoc.lineIndex,\n cursorLoc.charIndex + addedLines[0],\n linesLength,\n );\n let i;\n for (i = 1; i < linesLength; i++) {\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(\n cursorLoc.lineIndex + i,\n 0,\n addedLines[i],\n copiedStyle,\n );\n } else if (copiedStyle) {\n // this test is required in order to close #6841\n // when a pasted buffer begins with a newline then\n // this.styles[cursorLoc.lineIndex + i] and copiedStyle[0]\n // may be undefined for some reason\n if (this.styles[cursorLoc.lineIndex + i] && copiedStyle[0]) {\n this.styles[cursorLoc.lineIndex + i][0] = copiedStyle[0];\n }\n }\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[i] + 1);\n }\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(\n cursorLoc.lineIndex + i,\n 0,\n addedLines[i],\n copiedStyle,\n );\n }\n }\n\n /**\n * Removes characters from start/end\n * start/end ar per grapheme position in _text array.\n *\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n removeChars(start: number, end: number = start + 1) {\n this.removeStyleFromTo(start, end);\n this._text.splice(start, end - start);\n this.text = this._text.join('');\n this.set('dirty', true);\n this.initDimensions();\n this.setCoords();\n this._removeExtraneousStyles();\n }\n\n /**\n * insert characters at start position, before start position.\n * start equal 1 it means the text get inserted between actual grapheme 0 and 1\n * if style array is provided, it must be as the same length of text in graphemes\n * if end is provided and is bigger than start, old text is replaced.\n * start/end ar per grapheme position in _text array.\n *\n * @param {String} text text to insert\n * @param {Array} style array of style objects\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n insertChars(\n text: string,\n style: TextStyleDeclaration[] | undefined,\n start: number,\n end: number = start,\n ) {\n if (end > start) {\n this.removeStyleFromTo(start, end);\n }\n const graphemes = this.graphemeSplit(text);\n this.insertNewStyleBlock(graphemes, start, style);\n this._text = [\n ...this._text.slice(0, start),\n ...graphemes,\n ...this._text.slice(end),\n ];\n this.text = this._text.join('');\n this.set('dirty', true);\n this.initDimensions();\n this.setCoords();\n this._removeExtraneousStyles();\n }\n\n /**\n * Set the selectionStart and selectionEnd according to the new position of cursor\n * mimic the key - mouse navigation when shift is pressed.\n */\n setSelectionStartEndWithShift(\n start: number,\n end: number,\n newSelection: number,\n ) {\n if (newSelection <= start) {\n if (end === start) {\n this._selectionDirection = LEFT;\n } else if (this._selectionDirection === RIGHT) {\n this._selectionDirection = LEFT;\n this.selectionEnd = start;\n }\n this.selectionStart = newSelection;\n } else if (newSelection > start && newSelection < end) {\n if (this._selectionDirection === RIGHT) {\n this.selectionEnd = newSelection;\n } else {\n this.selectionStart = newSelection;\n }\n } else {\n // newSelection is > selection start and end\n if (end === start) {\n this._selectionDirection = RIGHT;\n } else if (this._selectionDirection === LEFT) {\n this._selectionDirection = RIGHT;\n this.selectionStart = end;\n }\n this.selectionEnd = newSelection;\n }\n }\n}\n","import { config } from '../../config';\nimport { getFabricDocument, getEnv } from '../../env';\nimport { capValue } from '../../util/misc/capValue';\nimport type { ITextEvents } from './ITextBehavior';\nimport { ITextBehavior } from './ITextBehavior';\nimport type { TKeyMapIText } from './constants';\nimport type { TOptions } from '../../typedefs';\nimport type { TextProps, SerializedTextProps } from '../Text/Text';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { CHANGED, LEFT, RIGHT } from '../../constants';\nimport type { IText } from './IText';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\n\nexport abstract class ITextKeyBehavior<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ITextEvents = ITextEvents,\n> extends ITextBehavior {\n /**\n * For functionalities on keyDown\n * Map a special key to a function of the instance/prototype\n * If you need different behavior for ESC or TAB or arrows, you have to change\n * this map setting the name of a function that you build on the IText or\n * your prototype.\n * the map change will affect all Instances unless you need for only some text Instances\n * in that case you have to clone this object and assign your Instance.\n * this.keysMap = Object.assign({}, this.keysMap);\n * The function must be in IText.prototype.myFunction And will receive event as args[0]\n */\n declare keysMap: TKeyMapIText;\n\n declare keysMapRtl: TKeyMapIText;\n\n /**\n * For functionalities on keyUp + ctrl || cmd\n */\n declare ctrlKeysMapUp: TKeyMapIText;\n\n /**\n * For functionalities on keyDown + ctrl || cmd\n */\n declare ctrlKeysMapDown: TKeyMapIText;\n\n declare hiddenTextarea: HTMLTextAreaElement | null;\n\n /**\n * DOM container to append the hiddenTextarea.\n * An alternative to attaching to the document.body.\n * Useful to reduce laggish redraw of the full document.body tree and\n * also with modals event capturing that won't let the textarea take focus.\n * @type HTMLElement\n * @default\n */\n declare hiddenTextareaContainer?: HTMLElement | null;\n\n private declare _clickHandlerInitialized: boolean;\n private declare _copyDone: boolean;\n private declare fromPaste: boolean;\n\n /**\n * Initializes hidden textarea (needed to bring up keyboard in iOS)\n */\n initHiddenTextarea() {\n const doc =\n (this.canvas && getDocumentFromElement(this.canvas.getElement())) ||\n getFabricDocument();\n const textarea = doc.createElement('textarea');\n Object.entries({\n autocapitalize: 'off',\n autocorrect: 'off',\n autocomplete: 'off',\n spellcheck: 'false',\n 'data-fabric': 'textarea',\n wrap: 'off',\n }).map(([attribute, value]) => textarea.setAttribute(attribute, value));\n const { top, left, fontSize } = this._calcTextareaPosition();\n // line-height: 1px; was removed from the style to fix this:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=870966\n textarea.style.cssText = `position: absolute; top: ${top}; left: ${left}; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: ${fontSize};`;\n\n (this.hiddenTextareaContainer || doc.body).appendChild(textarea);\n\n Object.entries({\n blur: 'blur',\n keydown: 'onKeyDown',\n keyup: 'onKeyUp',\n input: 'onInput',\n copy: 'copy',\n cut: 'copy',\n paste: 'paste',\n compositionstart: 'onCompositionStart',\n compositionupdate: 'onCompositionUpdate',\n compositionend: 'onCompositionEnd',\n } as Record).map(([eventName, handler]) =>\n textarea.addEventListener(\n eventName,\n (this[handler] as EventListener).bind(this),\n ),\n );\n this.hiddenTextarea = textarea;\n }\n\n /**\n * Override this method to customize cursor behavior on textbox blur\n */\n blur() {\n this.abortCursorAnimation();\n }\n\n /**\n * Handles keydown event\n * only used for arrows and combination of modifier keys.\n * @param {KeyboardEvent} e Event object\n */\n onKeyDown(e: KeyboardEvent) {\n if (!this.isEditing) {\n return;\n }\n const keyMap = this.direction === 'rtl' ? this.keysMapRtl : this.keysMap;\n if (e.keyCode in keyMap) {\n // @ts-expect-error legacy method calling pattern\n this[keyMap[e.keyCode]](e);\n } else if (e.keyCode in this.ctrlKeysMapDown && (e.ctrlKey || e.metaKey)) {\n // @ts-expect-error legacy method calling pattern\n this[this.ctrlKeysMapDown[e.keyCode]](e);\n } else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n if (e.keyCode >= 33 && e.keyCode <= 40) {\n // if i press an arrow key just update selection\n this.inCompositionMode = false;\n this.clearContextTop();\n this.renderCursorOrSelection();\n } else {\n this.canvas && this.canvas.requestRenderAll();\n }\n }\n\n /**\n * Handles keyup event\n * We handle KeyUp because ie11 and edge have difficulties copy/pasting\n * if a copy/cut event fired, keyup is dismissed\n * @param {KeyboardEvent} e Event object\n */\n onKeyUp(e: KeyboardEvent) {\n if (!this.isEditing || this._copyDone || this.inCompositionMode) {\n this._copyDone = false;\n return;\n }\n if (e.keyCode in this.ctrlKeysMapUp && (e.ctrlKey || e.metaKey)) {\n // @ts-expect-error legacy method calling pattern\n this[this.ctrlKeysMapUp[e.keyCode]](e);\n } else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n this.canvas && this.canvas.requestRenderAll();\n }\n\n /**\n * Handles onInput event\n * @param {Event} e Event object\n */\n onInput(this: this & { hiddenTextarea: HTMLTextAreaElement }, e: Event) {\n const fromPaste = this.fromPaste;\n this.fromPaste = false;\n e && e.stopPropagation();\n if (!this.isEditing) {\n return;\n }\n const updateAndFire = () => {\n this.updateFromTextArea();\n this.fire(CHANGED);\n if (this.canvas) {\n this.canvas.fire('text:changed', { target: this as unknown as IText });\n this.canvas.requestRenderAll();\n }\n };\n if (this.hiddenTextarea.value === '') {\n this.styles = {};\n updateAndFire();\n return;\n }\n // decisions about style changes.\n const nextText = this._splitTextIntoLines(\n this.hiddenTextarea.value,\n ).graphemeText,\n charCount = this._text.length,\n nextCharCount = nextText.length,\n selectionStart = this.selectionStart,\n selectionEnd = this.selectionEnd,\n selection = selectionStart !== selectionEnd;\n let copiedStyle: TextStyleDeclaration[] | undefined,\n removedText,\n charDiff = nextCharCount - charCount,\n removeFrom,\n removeTo;\n\n const textareaSelection = this.fromStringToGraphemeSelection(\n this.hiddenTextarea.selectionStart,\n this.hiddenTextarea.selectionEnd,\n this.hiddenTextarea.value,\n );\n const backDelete = selectionStart > textareaSelection.selectionStart;\n\n if (selection) {\n removedText = this._text.slice(selectionStart, selectionEnd);\n charDiff += selectionEnd - selectionStart;\n } else if (nextCharCount < charCount) {\n if (backDelete) {\n removedText = this._text.slice(selectionEnd + charDiff, selectionEnd);\n } else {\n removedText = this._text.slice(\n selectionStart,\n selectionStart - charDiff,\n );\n }\n }\n const insertedText = nextText.slice(\n textareaSelection.selectionEnd - charDiff,\n textareaSelection.selectionEnd,\n );\n if (removedText && removedText.length) {\n if (insertedText.length) {\n // let's copy some style before deleting.\n // we want to copy the style before the cursor OR the style at the cursor if selection\n // is bigger than 0.\n copiedStyle = this.getSelectionStyles(\n selectionStart,\n selectionStart + 1,\n false,\n );\n // now duplicate the style one for each inserted text.\n copiedStyle = insertedText.map(\n () =>\n // this return an array of references, but that is fine since we are\n // copying the style later.\n copiedStyle![0],\n );\n }\n if (selection) {\n removeFrom = selectionStart;\n removeTo = selectionEnd;\n } else if (backDelete) {\n // detect differences between forwardDelete and backDelete\n removeFrom = selectionEnd - removedText.length;\n removeTo = selectionEnd;\n } else {\n removeFrom = selectionEnd;\n removeTo = selectionEnd + removedText.length;\n }\n this.removeStyleFromTo(removeFrom, removeTo);\n }\n if (insertedText.length) {\n const { copyPasteData } = getEnv();\n if (\n fromPaste &&\n insertedText.join('') === copyPasteData.copiedText &&\n !config.disableStyleCopyPaste\n ) {\n copiedStyle = copyPasteData.copiedTextStyle;\n }\n this.insertNewStyleBlock(insertedText, selectionStart, copiedStyle);\n }\n updateAndFire();\n }\n\n /**\n * Composition start\n */\n onCompositionStart() {\n this.inCompositionMode = true;\n }\n\n /**\n * Composition end\n */\n onCompositionEnd() {\n this.inCompositionMode = false;\n }\n\n onCompositionUpdate({ target }: CompositionEvent) {\n const { selectionStart, selectionEnd } = target as HTMLTextAreaElement;\n this.compositionStart = selectionStart;\n this.compositionEnd = selectionEnd;\n this.updateTextareaPosition();\n }\n\n /**\n * Copies selected text\n */\n copy() {\n if (this.selectionStart === this.selectionEnd) {\n //do not cut-copy if no selection\n return;\n }\n const { copyPasteData } = getEnv();\n copyPasteData.copiedText = this.getSelectedText();\n if (!config.disableStyleCopyPaste) {\n copyPasteData.copiedTextStyle = this.getSelectionStyles(\n this.selectionStart,\n this.selectionEnd,\n true,\n );\n } else {\n copyPasteData.copiedTextStyle = undefined;\n }\n this._copyDone = true;\n }\n\n /**\n * Pastes text\n */\n paste() {\n this.fromPaste = true;\n }\n\n /**\n * Finds the width in pixels before the cursor on the same line\n * @private\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {Number} widthBeforeCursor width before cursor\n */\n _getWidthBeforeCursor(lineIndex: number, charIndex: number): number {\n let widthBeforeCursor = this._getLineLeftOffset(lineIndex),\n bound;\n\n if (charIndex > 0) {\n bound = this.__charBounds[lineIndex][charIndex - 1];\n widthBeforeCursor += bound.left + bound.width;\n }\n return widthBeforeCursor;\n }\n\n /**\n * Gets start offset of a selection\n * @param {KeyboardEvent} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getDownCursorOffset(e: KeyboardEvent, isRight: boolean): number {\n const selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n // if on last line, down cursor goes to end of line\n if (\n lineIndex === this._textLines.length - 1 ||\n e.metaKey ||\n e.keyCode === 34\n ) {\n // move to the end of a text\n return this._text.length - selectionProp;\n }\n const charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex + 1, widthBeforeCursor),\n textAfterCursor = this._textLines[lineIndex].slice(charIndex);\n return (\n textAfterCursor.length +\n indexOnOtherLine +\n 1 +\n this.missingNewlineOffset(lineIndex)\n );\n }\n\n /**\n * private\n * Helps finding if the offset should be counted from Start or End\n * @param {KeyboardEvent} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n _getSelectionForOffset(e: KeyboardEvent, isRight: boolean): number {\n if (e.shiftKey && this.selectionStart !== this.selectionEnd && isRight) {\n return this.selectionEnd;\n } else {\n return this.selectionStart;\n }\n }\n\n /**\n * @param {KeyboardEvent} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getUpCursorOffset(e: KeyboardEvent, isRight: boolean): number {\n const selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n if (lineIndex === 0 || e.metaKey || e.keyCode === 33) {\n // if on first line, up cursor goes to start of line\n return -selectionProp;\n }\n const charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex - 1, widthBeforeCursor),\n textBeforeCursor = this._textLines[lineIndex].slice(0, charIndex),\n missingNewlineOffset = this.missingNewlineOffset(lineIndex - 1);\n // return a negative offset\n return (\n -this._textLines[lineIndex - 1].length +\n indexOnOtherLine -\n textBeforeCursor.length +\n (1 - missingNewlineOffset)\n );\n }\n\n /**\n * for a given width it founds the matching character.\n * @private\n */\n _getIndexOnLine(lineIndex: number, width: number) {\n const line = this._textLines[lineIndex],\n lineLeftOffset = this._getLineLeftOffset(lineIndex);\n let widthOfCharsOnLine = lineLeftOffset,\n indexOnLine = 0,\n charWidth,\n foundMatch;\n\n for (let j = 0, jlen = line.length; j < jlen; j++) {\n charWidth = this.__charBounds[lineIndex][j].width;\n widthOfCharsOnLine += charWidth;\n if (widthOfCharsOnLine > width) {\n foundMatch = true;\n const leftEdge = widthOfCharsOnLine - charWidth,\n rightEdge = widthOfCharsOnLine,\n offsetFromLeftEdge = Math.abs(leftEdge - width),\n offsetFromRightEdge = Math.abs(rightEdge - width);\n\n indexOnLine = offsetFromRightEdge < offsetFromLeftEdge ? j : j - 1;\n break;\n }\n }\n\n // reached end\n if (!foundMatch) {\n indexOnLine = line.length - 1;\n }\n\n return indexOnLine;\n }\n\n /**\n * Moves cursor down\n * @param {KeyboardEvent} e Event object\n */\n moveCursorDown(e: KeyboardEvent) {\n if (\n this.selectionStart >= this._text.length &&\n this.selectionEnd >= this._text.length\n ) {\n return;\n }\n this._moveCursorUpOrDown('Down', e);\n }\n\n /**\n * Moves cursor up\n * @param {KeyboardEvent} e Event object\n */\n moveCursorUp(e: KeyboardEvent) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorUpOrDown('Up', e);\n }\n\n /**\n * Moves cursor up or down, fires the events\n * @param {String} direction 'Up' or 'Down'\n * @param {KeyboardEvent} e Event object\n */\n _moveCursorUpOrDown(direction: 'Up' | 'Down', e: KeyboardEvent) {\n const offset = this[`get${direction}CursorOffset`](\n e,\n this._selectionDirection === RIGHT,\n );\n if (e.shiftKey) {\n this.moveCursorWithShift(offset);\n } else {\n this.moveCursorWithoutShift(offset);\n }\n if (offset !== 0) {\n const max = this.text.length;\n this.selectionStart = capValue(0, this.selectionStart, max);\n this.selectionEnd = capValue(0, this.selectionEnd, max);\n // TODO fix: abort and init should be an alternative depending\n // on selectionStart/End being equal or different\n this.abortCursorAnimation();\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n }\n\n /**\n * Moves cursor with shift\n * @param {Number} offset\n */\n moveCursorWithShift(offset: number) {\n const newSelection =\n this._selectionDirection === LEFT\n ? this.selectionStart + offset\n : this.selectionEnd + offset;\n this.setSelectionStartEndWithShift(\n this.selectionStart,\n this.selectionEnd,\n newSelection,\n );\n return offset !== 0;\n }\n\n /**\n * Moves cursor up without shift\n * @param {Number} offset\n */\n moveCursorWithoutShift(offset: number) {\n if (offset < 0) {\n this.selectionStart += offset;\n this.selectionEnd = this.selectionStart;\n } else {\n this.selectionEnd += offset;\n this.selectionStart = this.selectionEnd;\n }\n return offset !== 0;\n }\n\n /**\n * Moves cursor left\n * @param {KeyboardEvent} e Event object\n */\n moveCursorLeft(e: KeyboardEvent) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorLeftOrRight('Left', e);\n }\n\n /**\n * @private\n * @return {Boolean} true if a change happened\n *\n * @todo refactor not to use method name composition\n */\n _move(\n e: KeyboardEvent,\n prop: 'selectionStart' | 'selectionEnd',\n direction: 'Left' | 'Right',\n ): boolean {\n let newValue: number | undefined;\n if (e.altKey) {\n newValue = this[`findWordBoundary${direction}`](this[prop]);\n } else if (e.metaKey || e.keyCode === 35 || e.keyCode === 36) {\n newValue = this[`findLineBoundary${direction}`](this[prop]);\n } else {\n this[prop] += direction === 'Left' ? -1 : 1;\n return true;\n }\n if (typeof newValue !== 'undefined' && this[prop] !== newValue) {\n this[prop] = newValue;\n return true;\n }\n return false;\n }\n\n /**\n * @private\n */\n _moveLeft(e: KeyboardEvent, prop: 'selectionStart' | 'selectionEnd') {\n return this._move(e, prop, 'Left');\n }\n\n /**\n * @private\n */\n _moveRight(e: KeyboardEvent, prop: 'selectionStart' | 'selectionEnd') {\n return this._move(e, prop, 'Right');\n }\n\n /**\n * Moves cursor left without keeping selection\n * @param {KeyboardEvent} e\n */\n moveCursorLeftWithoutShift(e: KeyboardEvent) {\n let change = true;\n this._selectionDirection = LEFT;\n\n // only move cursor when there is no selection,\n // otherwise we discard it, and leave cursor on same place\n if (\n this.selectionEnd === this.selectionStart &&\n this.selectionStart !== 0\n ) {\n change = this._moveLeft(e, 'selectionStart');\n }\n this.selectionEnd = this.selectionStart;\n return change;\n }\n\n /**\n * Moves cursor left while keeping selection\n * @param {KeyboardEvent} e\n */\n moveCursorLeftWithShift(e: KeyboardEvent) {\n if (\n this._selectionDirection === RIGHT &&\n this.selectionStart !== this.selectionEnd\n ) {\n return this._moveLeft(e, 'selectionEnd');\n } else if (this.selectionStart !== 0) {\n this._selectionDirection = LEFT;\n return this._moveLeft(e, 'selectionStart');\n }\n }\n\n /**\n * Moves cursor right\n * @param {KeyboardEvent} e Event object\n */\n moveCursorRight(e: KeyboardEvent) {\n if (\n this.selectionStart >= this._text.length &&\n this.selectionEnd >= this._text.length\n ) {\n return;\n }\n this._moveCursorLeftOrRight('Right', e);\n }\n\n /**\n * Moves cursor right or Left, fires event\n * @param {String} direction 'Left', 'Right'\n * @param {KeyboardEvent} e Event object\n */\n _moveCursorLeftOrRight(direction: 'Left' | 'Right', e: KeyboardEvent) {\n const actionName = `moveCursor${direction}${\n e.shiftKey ? 'WithShift' : 'WithoutShift'\n }` as const;\n this._currentCursorOpacity = 1;\n if (this[actionName](e)) {\n // TODO fix: abort and init should be an alternative depending\n // on selectionStart/End being equal or different\n this.abortCursorAnimation();\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n }\n\n /**\n * Moves cursor right while keeping selection\n * @param {KeyboardEvent} e\n */\n moveCursorRightWithShift(e: KeyboardEvent) {\n if (\n this._selectionDirection === LEFT &&\n this.selectionStart !== this.selectionEnd\n ) {\n return this._moveRight(e, 'selectionStart');\n } else if (this.selectionEnd !== this._text.length) {\n this._selectionDirection = RIGHT;\n return this._moveRight(e, 'selectionEnd');\n }\n }\n\n /**\n * Moves cursor right without keeping selection\n * @param {KeyboardEvent} e Event object\n */\n moveCursorRightWithoutShift(e: KeyboardEvent) {\n let changed = true;\n this._selectionDirection = RIGHT;\n\n if (this.selectionStart === this.selectionEnd) {\n changed = this._moveRight(e, 'selectionStart');\n this.selectionEnd = this.selectionStart;\n } else {\n this.selectionStart = this.selectionEnd;\n }\n return changed;\n }\n}\n","import type { TPointerEvent, TPointerEventInfo } from '../../EventTypeDefs';\nimport type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport { stopEvent } from '../../util/dom_event';\nimport { invertTransform } from '../../util/misc/matrix';\nimport { DraggableTextDelegate } from './DraggableTextDelegate';\nimport type { ITextEvents } from './ITextBehavior';\nimport { ITextKeyBehavior } from './ITextKeyBehavior';\nimport type { TOptions } from '../../typedefs';\nimport type { TextProps, SerializedTextProps } from '../Text/Text';\n\n/**\n * `LEFT_CLICK === 0`\n */\nconst notALeftClick = (e: Event) => !!(e as MouseEvent).button;\n\nexport abstract class ITextClickBehavior<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ITextEvents = ITextEvents,\n> extends ITextKeyBehavior {\n private declare __lastSelected: boolean;\n private declare __lastClickTime: number;\n private declare __lastLastClickTime: number;\n private declare __lastPointer: XY | Record;\n private declare __newClickTime: number;\n\n protected draggableTextDelegate: DraggableTextDelegate;\n\n initBehavior() {\n // Initializes event handlers related to cursor or selection\n this.on('mousedown', this._mouseDownHandler);\n this.on('mousedown:before', this._mouseDownHandlerBefore);\n this.on('mouseup', this.mouseUpHandler);\n this.on('mousedblclick', this.doubleClickHandler);\n this.on('tripleclick', this.tripleClickHandler);\n\n // Initializes \"dbclick\" event handler\n this.__lastClickTime = +new Date();\n // for triple click\n this.__lastLastClickTime = +new Date();\n this.__lastPointer = {};\n this.on('mousedown', this.onMouseDown);\n\n // @ts-expect-error in reality it is an IText instance\n this.draggableTextDelegate = new DraggableTextDelegate(this);\n\n super.initBehavior();\n }\n\n /**\n * If this method returns true a mouse move operation over a text selection\n * will not prevent the native mouse event allowing the browser to start a drag operation.\n * shouldStartDragging can be read 'do not prevent default for mouse move event'\n * To prevent drag and drop between objects both shouldStartDragging and onDragStart should return false\n * @returns\n */\n shouldStartDragging() {\n return this.draggableTextDelegate.isActive();\n }\n\n /**\n * @public override this method to control whether instance should/shouldn't become a drag source,\n * @see also {@link DraggableTextDelegate#isActive}\n * To prevent drag and drop between objects both shouldStartDragging and onDragStart should return false\n * @returns {boolean} should handle event\n */\n onDragStart(e: DragEvent) {\n return this.draggableTextDelegate.onDragStart(e);\n }\n\n /**\n * @public override this method to control whether instance should/shouldn't become a drop target\n */\n canDrop(e: DragEvent) {\n return this.draggableTextDelegate.canDrop(e);\n }\n\n /**\n * Default event handler to simulate triple click\n * @private\n */\n onMouseDown(options: TPointerEventInfo) {\n if (!this.canvas) {\n return;\n }\n this.__newClickTime = +new Date();\n const newPointer = options.pointer;\n if (this.isTripleClick(newPointer)) {\n this.fire('tripleclick', options);\n stopEvent(options.e);\n }\n this.__lastLastClickTime = this.__lastClickTime;\n this.__lastClickTime = this.__newClickTime;\n this.__lastPointer = newPointer;\n this.__lastSelected = this.selected && !this.getActiveControl();\n }\n\n isTripleClick(newPointer: XY) {\n return (\n this.__newClickTime - this.__lastClickTime < 500 &&\n this.__lastClickTime - this.__lastLastClickTime < 500 &&\n this.__lastPointer.x === newPointer.x &&\n this.__lastPointer.y === newPointer.y\n );\n }\n\n /**\n * Default handler for double click, select a word\n */\n doubleClickHandler(options: TPointerEventInfo) {\n if (!this.isEditing) {\n return;\n }\n this.selectWord(this.getSelectionStartFromPointer(options.e));\n }\n\n /**\n * Default handler for triple click, select a line\n */\n tripleClickHandler(options: TPointerEventInfo) {\n if (!this.isEditing) {\n return;\n }\n this.selectLine(this.getSelectionStartFromPointer(options.e));\n }\n\n /**\n * Default event handler for the basic functionalities needed on _mouseDown\n * can be overridden to do something different.\n * Scope of this implementation is: find the click position, set selectionStart\n * find selectionEnd, initialize the drawing of either cursor or selection area\n * initializing a mousedDown on a text area will cancel fabricjs knowledge of\n * current compositionMode. It will be set to false.\n */\n _mouseDownHandler({ e }: TPointerEventInfo) {\n if (\n !this.canvas ||\n !this.editable ||\n notALeftClick(e) ||\n this.getActiveControl()\n ) {\n return;\n }\n\n if (this.draggableTextDelegate.start(e)) {\n return;\n }\n\n this.canvas.textEditingManager.register(this);\n\n if (this.selected) {\n this.inCompositionMode = false;\n this.setCursorByClick(e);\n }\n\n if (this.isEditing) {\n this.__selectionStartOnMouseDown = this.selectionStart;\n if (this.selectionStart === this.selectionEnd) {\n this.abortCursorAnimation();\n }\n this.renderCursorOrSelection();\n }\n }\n\n /**\n * Default event handler for the basic functionalities needed on mousedown:before\n * can be overridden to do something different.\n * Scope of this implementation is: verify the object is already selected when mousing down\n */\n _mouseDownHandlerBefore({ e }: TPointerEventInfo) {\n if (!this.canvas || !this.editable || notALeftClick(e)) {\n return;\n }\n // we want to avoid that an object that was selected and then becomes unselectable,\n // may trigger editing mode in some way.\n this.selected = this === this.canvas._activeObject;\n }\n\n /**\n * standard handler for mouse up, overridable\n * @private\n */\n mouseUpHandler({ e, transform }: TPointerEventInfo) {\n const didDrag = this.draggableTextDelegate.end(e);\n if (this.canvas) {\n this.canvas.textEditingManager.unregister(this);\n\n const activeObject = this.canvas._activeObject;\n if (activeObject && activeObject !== this) {\n // avoid running this logic when there is an active object\n // this because is possible with shift click and fast clicks,\n // to rapidly deselect and reselect this object and trigger an enterEdit\n return;\n }\n }\n if (\n !this.editable ||\n (this.group && !this.group.interactive) ||\n (transform && transform.actionPerformed) ||\n notALeftClick(e) ||\n didDrag\n ) {\n return;\n }\n\n if (this.__lastSelected && !this.getActiveControl()) {\n this.selected = false;\n this.__lastSelected = false;\n this.enterEditing(e);\n if (this.selectionStart === this.selectionEnd) {\n this.initDelayedCursor(true);\n } else {\n this.renderCursorOrSelection();\n }\n } else {\n this.selected = true;\n }\n }\n\n /**\n * Changes cursor location in a text depending on passed pointer (x/y) object\n * @param {TPointerEvent} e Event object\n */\n setCursorByClick(e: TPointerEvent) {\n const newSelection = this.getSelectionStartFromPointer(e),\n start = this.selectionStart,\n end = this.selectionEnd;\n if (e.shiftKey) {\n this.setSelectionStartEndWithShift(start, end, newSelection);\n } else {\n this.selectionStart = newSelection;\n this.selectionEnd = newSelection;\n }\n if (this.isEditing) {\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n }\n\n /**\n * Returns index of a character corresponding to where an object was clicked\n * @param {TPointerEvent} e Event object\n * @return {Number} Index of a character\n */\n getSelectionStartFromPointer(e: TPointerEvent): number {\n const mouseOffset = this.canvas!.getScenePoint(e)\n .transform(invertTransform(this.calcTransformMatrix()))\n .add(new Point(-this._getLeftOffset(), -this._getTopOffset()));\n let height = 0,\n charIndex = 0,\n lineIndex = 0;\n\n for (let i = 0; i < this._textLines.length; i++) {\n if (height <= mouseOffset.y) {\n height += this.getHeightOfLine(i);\n lineIndex = i;\n if (i > 0) {\n charIndex +=\n this._textLines[i - 1].length + this.missingNewlineOffset(i - 1);\n }\n } else {\n break;\n }\n }\n const lineLeftOffset = Math.abs(this._getLineLeftOffset(lineIndex));\n let width = lineLeftOffset;\n const charLength = this._textLines[lineIndex].length;\n const chars = this.__charBounds[lineIndex];\n for (let j = 0; j < charLength; j++) {\n // i removed something about flipX here, check.\n const charWidth = chars[j].kernedWidth;\n const widthAfter = width + charWidth;\n if (mouseOffset.x <= widthAfter) {\n // if the pointer is closer to the end of the char we increment charIndex\n // in order to position the cursor after the char\n if (\n Math.abs(mouseOffset.x - widthAfter) <=\n Math.abs(mouseOffset.x - width)\n ) {\n charIndex++;\n }\n break;\n }\n width = widthAfter;\n charIndex++;\n }\n\n return Math.min(\n // if object is horizontally flipped, mirror cursor location from the end\n this.flipX ? charLength - charIndex : charIndex,\n this._text.length,\n );\n }\n}\n","export type TKeyMapIText = Record<\n KeyboardEvent['keyCode'],\n CursorHandlingMethods\n>;\n\nexport type CursorHandlingMethods =\n | 'moveCursorUp'\n | 'moveCursorDown'\n | 'moveCursorLeft'\n | 'moveCursorRight'\n | 'exitEditing'\n | 'copy'\n | 'cut'\n | 'selectAll';\n\nconst MOVE_CURSOR_UP: CursorHandlingMethods = 'moveCursorUp';\nconst MOVE_CURSOR_DOWN: CursorHandlingMethods = 'moveCursorDown';\nconst MOVE_CURSOR_LEFT: CursorHandlingMethods = 'moveCursorLeft';\nconst MOVE_CURSOR_RIGHT: CursorHandlingMethods = 'moveCursorRight';\nconst EXIT_EDITING: CursorHandlingMethods = 'exitEditing';\n\n// @TODO look into import { Key } from 'ts-key-enum';\n// and transition from keyCode to Key\n// also reduce string duplication\nexport const keysMap: TKeyMapIText = {\n 9: EXIT_EDITING,\n 27: EXIT_EDITING,\n 33: MOVE_CURSOR_UP,\n 34: MOVE_CURSOR_DOWN,\n 35: MOVE_CURSOR_RIGHT,\n 36: MOVE_CURSOR_LEFT,\n 37: MOVE_CURSOR_LEFT,\n 38: MOVE_CURSOR_UP,\n 39: MOVE_CURSOR_RIGHT,\n 40: MOVE_CURSOR_DOWN,\n};\n\nexport const keysMapRtl: TKeyMapIText = {\n 9: EXIT_EDITING,\n 27: EXIT_EDITING,\n 33: MOVE_CURSOR_UP,\n 34: MOVE_CURSOR_DOWN,\n 35: MOVE_CURSOR_LEFT,\n 36: MOVE_CURSOR_RIGHT,\n 37: MOVE_CURSOR_RIGHT,\n 38: MOVE_CURSOR_UP,\n 39: MOVE_CURSOR_LEFT,\n 40: MOVE_CURSOR_DOWN,\n};\n\n/**\n * For functionalities on keyUp + ctrl || cmd\n */\nexport const ctrlKeysMapUp: TKeyMapIText = {\n 67: 'copy',\n // there was a reason this wasn't deleted. for now leave it here\n 88: 'cut',\n};\n\n/**\n * For functionalities on keyDown + ctrl || cmd\n */\nexport const ctrlKeysMapDown: TKeyMapIText = {\n 65: 'selectAll',\n};\n","import { Canvas } from '../../canvas/Canvas';\nimport type { ITextEvents } from './ITextBehavior';\nimport { ITextClickBehavior } from './ITextClickBehavior';\nimport {\n ctrlKeysMapDown,\n ctrlKeysMapUp,\n keysMap,\n keysMapRtl,\n} from './constants';\nimport type { TClassProperties, TFiller, TOptions } from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport type { SerializedTextProps, TextProps } from '../Text/Text';\nimport {\n JUSTIFY,\n JUSTIFY_CENTER,\n JUSTIFY_LEFT,\n JUSTIFY_RIGHT,\n} from '../Text/constants';\nimport { CENTER, FILL, LEFT, RIGHT } from '../../constants';\nimport type { ObjectToCanvasElementOptions } from '../Object/Object';\n\ntype CursorBoundaries = {\n left: number;\n top: number;\n leftOffset: number;\n topOffset: number;\n};\n\n// Declare IText protected properties to workaround TS\nconst protectedDefaultValues = {\n _selectionDirection: null,\n _reSpace: /\\s|\\r?\\n/,\n inCompositionMode: false,\n};\n\nexport const iTextDefaultValues: Partial> = {\n selectionStart: 0,\n selectionEnd: 0,\n selectionColor: 'rgba(17,119,255,0.3)',\n isEditing: false,\n editable: true,\n editingBorderColor: 'rgba(102,153,255,0.25)',\n cursorWidth: 2,\n cursorColor: '',\n cursorDelay: 1000,\n cursorDuration: 600,\n caching: true,\n hiddenTextareaContainer: null,\n keysMap,\n keysMapRtl,\n ctrlKeysMapDown,\n ctrlKeysMapUp,\n ...protectedDefaultValues,\n};\n\n// @TODO this is not complete\ninterface UniqueITextProps {\n selectionStart: number;\n selectionEnd: number;\n}\n\nexport interface SerializedITextProps\n extends SerializedTextProps,\n UniqueITextProps {}\n\nexport interface ITextProps extends TextProps, UniqueITextProps {}\n\n/**\n * @fires changed\n * @fires selection:changed\n * @fires editing:entered\n * @fires editing:exited\n * @fires dragstart\n * @fires drag drag event firing on the drag source\n * @fires dragend\n * @fires copy\n * @fires cut\n * @fires paste\n *\n * #### Supported key combinations\n * ```\n * Move cursor: left, right, up, down\n * Select character: shift + left, shift + right\n * Select text vertically: shift + up, shift + down\n * Move cursor by word: alt + left, alt + right\n * Select words: shift + alt + left, shift + alt + right\n * Move cursor to line start/end: cmd + left, cmd + right or home, end\n * Select till start/end of line: cmd + shift + left, cmd + shift + right or shift + home, shift + end\n * Jump to start/end of text: cmd + up, cmd + down\n * Select till start/end of text: cmd + shift + up, cmd + shift + down or shift + pgUp, shift + pgDown\n * Delete character: backspace\n * Delete word: alt + backspace\n * Delete line: cmd + backspace\n * Forward delete: delete\n * Copy text: ctrl/cmd + c\n * Paste text: ctrl/cmd + v\n * Cut text: ctrl/cmd + x\n * Select entire text: ctrl/cmd + a\n * Quit editing tab or esc\n * ```\n *\n * #### Supported mouse/touch combination\n * ```\n * Position cursor: click/touch\n * Create selection: click/touch & drag\n * Create selection: click & shift + click\n * Select word: double click\n * Select line: triple click\n * ```\n */\nexport class IText<\n Props extends TOptions = Partial,\n SProps extends SerializedITextProps = SerializedITextProps,\n EventSpec extends ITextEvents = ITextEvents,\n >\n extends ITextClickBehavior\n implements UniqueITextProps\n{\n /**\n * Index where text selection starts (or where cursor is when there is no selection)\n * @type Number\n * @default\n */\n declare selectionStart: number;\n\n /**\n * Index where text selection ends\n * @type Number\n * @default\n */\n declare selectionEnd: number;\n\n declare compositionStart: number;\n\n declare compositionEnd: number;\n\n /**\n * Color of text selection\n * @type String\n * @default\n */\n declare selectionColor: string;\n\n /**\n * Indicates whether text is in editing mode\n * @type Boolean\n * @default\n */\n declare isEditing: boolean;\n\n /**\n * Indicates whether a text can be edited\n * @type Boolean\n * @default\n */\n declare editable: boolean;\n\n /**\n * Border color of text object while it's in editing mode\n * @type String\n * @default\n */\n declare editingBorderColor: string;\n\n /**\n * Width of cursor (in px)\n * @type Number\n * @default\n */\n declare cursorWidth: number;\n\n /**\n * Color of text cursor color in editing mode.\n * if not set (default) will take color from the text.\n * if set to a color value that fabric can understand, it will\n * be used instead of the color of the text at the current position.\n * @type String\n * @default\n */\n declare cursorColor: string;\n\n /**\n * Delay between cursor blink (in ms)\n * @type Number\n * @default\n */\n declare cursorDelay: number;\n\n /**\n * Duration of cursor fade in (in ms)\n * @type Number\n * @default\n */\n declare cursorDuration: number;\n\n declare compositionColor: string;\n\n /**\n * Indicates whether internal text char widths can be cached\n * @type Boolean\n * @default\n */\n declare caching: boolean;\n\n static ownDefaults = iTextDefaultValues;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...IText.ownDefaults };\n }\n\n static type = 'IText';\n\n get type() {\n const type = super.type;\n // backward compatibility\n return type === 'itext' ? 'i-text' : type;\n }\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n */\n constructor(text: string, options?: Props) {\n super(text, { ...IText.ownDefaults, ...options } as Props);\n this.initBehavior();\n }\n\n /**\n * While editing handle differently\n * @private\n * @param {string} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n if (this.isEditing && this._savedProps && key in this._savedProps) {\n // @ts-expect-error irritating TS\n this._savedProps[key] = value;\n return this;\n }\n if (key === 'canvas') {\n this.canvas instanceof Canvas &&\n this.canvas.textEditingManager.remove(this);\n value instanceof Canvas && value.textEditingManager.add(this);\n }\n return super._set(key, value);\n }\n\n /**\n * Sets selection start (left boundary of a selection)\n * @param {Number} index Index to set selection start to\n */\n setSelectionStart(index: number) {\n index = Math.max(index, 0);\n this._updateAndFire('selectionStart', index);\n }\n\n /**\n * Sets selection end (right boundary of a selection)\n * @param {Number} index Index to set selection end to\n */\n setSelectionEnd(index: number) {\n index = Math.min(index, this.text.length);\n this._updateAndFire('selectionEnd', index);\n }\n\n /**\n * @private\n * @param {String} property 'selectionStart' or 'selectionEnd'\n * @param {Number} index new position of property\n */\n protected _updateAndFire(\n property: 'selectionStart' | 'selectionEnd',\n index: number,\n ) {\n if (this[property] !== index) {\n this._fireSelectionChanged();\n this[property] = index;\n }\n this._updateTextarea();\n }\n\n /**\n * Fires the even of selection changed\n * @private\n */\n _fireSelectionChanged() {\n this.fire('selection:changed');\n this.canvas && this.canvas.fire('text:selection:changed', { target: this });\n }\n\n /**\n * Initialize text dimensions. Render all text on given context\n * or on a offscreen canvas to get the text width with measureText.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n * @private\n */\n initDimensions() {\n this.isEditing && this.initDelayedCursor();\n super.initDimensions();\n }\n\n /**\n * Gets style of a current selection/cursor (at the start position)\n * if startIndex or endIndex are not provided, selectionStart or selectionEnd will be used.\n * @param {Number} startIndex Start index to get styles at\n * @param {Number} endIndex End index to get styles at, if not specified selectionEnd or startIndex + 1\n * @param {Boolean} [complete] get full style or not\n * @return {Array} styles an array with one, zero or more Style objects\n */\n getSelectionStyles(\n startIndex: number = this.selectionStart || 0,\n endIndex: number = this.selectionEnd,\n complete?: boolean,\n ) {\n return super.getSelectionStyles(startIndex, endIndex, complete);\n }\n\n /**\n * Sets style of a current selection, if no selection exist, do not set anything.\n * @param {Object} [styles] Styles object\n * @param {Number} [startIndex] Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n */\n setSelectionStyles(\n styles: object,\n startIndex: number = this.selectionStart || 0,\n endIndex: number = this.selectionEnd,\n ) {\n return super.setSelectionStyles(styles, startIndex, endIndex);\n }\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor (or selection start)\n * @param {Number} [selectionStart] Optional index. When not given, current selectionStart is used.\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.\n */\n get2DCursorLocation(\n selectionStart = this.selectionStart,\n skipWrapping?: boolean,\n ) {\n return super.get2DCursorLocation(selectionStart, skipWrapping);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n super.render(ctx);\n // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor\n // the correct position but not at every cursor animation.\n this.cursorOffsetCache = {};\n this.renderCursorOrSelection();\n }\n\n /**\n * @override block cursor/selection logic while rendering the exported canvas\n * @todo this workaround should be replaced with a more robust solution\n */\n toCanvasElement(options?: ObjectToCanvasElementOptions): HTMLCanvasElement {\n const isEditing = this.isEditing;\n this.isEditing = false;\n const canvas = super.toCanvasElement(options);\n this.isEditing = isEditing;\n return canvas;\n }\n\n /**\n * Renders cursor or selection (depending on what exists)\n * it does on the contextTop. If contextTop is not available, do nothing.\n */\n renderCursorOrSelection() {\n if (!this.isEditing) {\n return;\n }\n const ctx = this.clearContextTop(true);\n if (!ctx) {\n return;\n }\n const boundaries = this._getCursorBoundaries();\n if (this.selectionStart === this.selectionEnd) {\n this.renderCursor(ctx, boundaries);\n } else {\n this.renderSelection(ctx, boundaries);\n }\n this.canvas!.contextTopDirty = true;\n ctx.restore();\n }\n\n /**\n * Returns cursor boundaries (left, top, leftOffset, topOffset)\n * left/top are left/top of entire text box\n * leftOffset/topOffset are offset from that left/top point of a text box\n * @private\n * @param {number} [index] index from start\n * @param {boolean} [skipCaching]\n */\n _getCursorBoundaries(\n index: number = this.selectionStart,\n skipCaching?: boolean,\n ): CursorBoundaries {\n const left = this._getLeftOffset(),\n top = this._getTopOffset(),\n offsets = this._getCursorBoundariesOffsets(index, skipCaching);\n return {\n left: left,\n top: top,\n leftOffset: offsets.left,\n topOffset: offsets.top,\n };\n }\n\n /**\n * Caches and returns cursor left/top offset relative to instance's center point\n * @private\n * @param {number} index index from start\n * @param {boolean} [skipCaching]\n */\n _getCursorBoundariesOffsets(\n index: number,\n skipCaching?: boolean,\n ): { left: number; top: number } {\n if (skipCaching) {\n return this.__getCursorBoundariesOffsets(index);\n }\n if (this.cursorOffsetCache && 'top' in this.cursorOffsetCache) {\n return this.cursorOffsetCache as { left: number; top: number };\n }\n return (this.cursorOffsetCache = this.__getCursorBoundariesOffsets(index));\n }\n\n /**\n * Calculates cursor left/top offset relative to instance's center point\n * @private\n * @param {number} index index from start\n */\n __getCursorBoundariesOffsets(index: number) {\n let topOffset = 0,\n leftOffset = 0;\n const { charIndex, lineIndex } = this.get2DCursorLocation(index);\n\n for (let i = 0; i < lineIndex; i++) {\n topOffset += this.getHeightOfLine(i);\n }\n const lineLeftOffset = this._getLineLeftOffset(lineIndex);\n const bound = this.__charBounds[lineIndex][charIndex];\n bound && (leftOffset = bound.left);\n if (\n this.charSpacing !== 0 &&\n charIndex === this._textLines[lineIndex].length\n ) {\n leftOffset -= this._getWidthOfCharSpacing();\n }\n const boundaries = {\n top: topOffset,\n left: lineLeftOffset + (leftOffset > 0 ? leftOffset : 0),\n };\n if (this.direction === 'rtl') {\n if (\n this.textAlign === RIGHT ||\n this.textAlign === JUSTIFY ||\n this.textAlign === JUSTIFY_RIGHT\n ) {\n boundaries.left *= -1;\n } else if (this.textAlign === LEFT || this.textAlign === JUSTIFY_LEFT) {\n boundaries.left = lineLeftOffset - (leftOffset > 0 ? leftOffset : 0);\n } else if (\n this.textAlign === CENTER ||\n this.textAlign === JUSTIFY_CENTER\n ) {\n boundaries.left = lineLeftOffset - (leftOffset > 0 ? leftOffset : 0);\n }\n }\n return boundaries;\n }\n\n /**\n * Renders cursor on context Top, outside the animation cycle, on request\n * Used for the drag/drop effect.\n * If contextTop is not available, do nothing.\n */\n renderCursorAt(selectionStart: number) {\n const boundaries = this._getCursorBoundaries(selectionStart, true);\n this._renderCursor(this.canvas!.contextTop, boundaries, selectionStart);\n }\n\n /**\n * Renders cursor\n * @param {Object} boundaries\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderCursor(ctx: CanvasRenderingContext2D, boundaries: CursorBoundaries) {\n this._renderCursor(ctx, boundaries, this.selectionStart);\n }\n\n _renderCursor(\n ctx: CanvasRenderingContext2D,\n boundaries: CursorBoundaries,\n selectionStart: number,\n ) {\n const cursorLocation = this.get2DCursorLocation(selectionStart),\n lineIndex = cursorLocation.lineIndex,\n charIndex =\n cursorLocation.charIndex > 0 ? cursorLocation.charIndex - 1 : 0,\n charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize'),\n multiplier = this.getObjectScaling().x * this.canvas!.getZoom(),\n cursorWidth = this.cursorWidth / multiplier,\n dy = this.getValueOfPropertyAt(lineIndex, charIndex, 'deltaY'),\n topOffset =\n boundaries.topOffset +\n ((1 - this._fontSizeFraction) * this.getHeightOfLine(lineIndex)) /\n this.lineHeight -\n charHeight * (1 - this._fontSizeFraction);\n\n if (this.inCompositionMode) {\n // TODO: investigate why there isn't a return inside the if,\n // and why can't happen at the top of the function\n this.renderSelection(ctx, boundaries);\n }\n ctx.fillStyle =\n this.cursorColor ||\n (this.getValueOfPropertyAt(lineIndex, charIndex, FILL) as string);\n ctx.globalAlpha = this._currentCursorOpacity;\n ctx.fillRect(\n boundaries.left + boundaries.leftOffset - cursorWidth / 2,\n topOffset + boundaries.top + dy,\n cursorWidth,\n charHeight,\n );\n }\n\n /**\n * Renders text selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderSelection(ctx: CanvasRenderingContext2D, boundaries: CursorBoundaries) {\n const selection = {\n selectionStart: this.inCompositionMode\n ? this.hiddenTextarea!.selectionStart\n : this.selectionStart,\n selectionEnd: this.inCompositionMode\n ? this.hiddenTextarea!.selectionEnd\n : this.selectionEnd,\n };\n this._renderSelection(ctx, selection, boundaries);\n }\n\n /**\n * Renders drag start text selection\n */\n renderDragSourceEffect() {\n const dragStartSelection =\n this.draggableTextDelegate.getDragStartSelection()!;\n this._renderSelection(\n this.canvas!.contextTop,\n dragStartSelection,\n this._getCursorBoundaries(dragStartSelection.selectionStart, true),\n );\n }\n\n renderDropTargetEffect(e: DragEvent) {\n const dragSelection = this.getSelectionStartFromPointer(e);\n this.renderCursorAt(dragSelection);\n }\n\n /**\n * Renders text selection\n * @private\n * @param {{ selectionStart: number, selectionEnd: number }} selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n _renderSelection(\n ctx: CanvasRenderingContext2D,\n selection: { selectionStart: number; selectionEnd: number },\n boundaries: CursorBoundaries,\n ) {\n const selectionStart = selection.selectionStart,\n selectionEnd = selection.selectionEnd,\n isJustify = this.textAlign.includes(JUSTIFY),\n start = this.get2DCursorLocation(selectionStart),\n end = this.get2DCursorLocation(selectionEnd),\n startLine = start.lineIndex,\n endLine = end.lineIndex,\n startChar = start.charIndex < 0 ? 0 : start.charIndex,\n endChar = end.charIndex < 0 ? 0 : end.charIndex;\n\n for (let i = startLine; i <= endLine; i++) {\n const lineOffset = this._getLineLeftOffset(i) || 0;\n let lineHeight = this.getHeightOfLine(i),\n realLineHeight = 0,\n boxStart = 0,\n boxEnd = 0;\n\n if (i === startLine) {\n boxStart = this.__charBounds[startLine][startChar].left;\n }\n if (i >= startLine && i < endLine) {\n boxEnd =\n isJustify && !this.isEndOfWrapping(i)\n ? this.width\n : this.getLineWidth(i) || 5; // WTF is this 5?\n } else if (i === endLine) {\n if (endChar === 0) {\n boxEnd = this.__charBounds[endLine][endChar].left;\n } else {\n const charSpacing = this._getWidthOfCharSpacing();\n boxEnd =\n this.__charBounds[endLine][endChar - 1].left +\n this.__charBounds[endLine][endChar - 1].width -\n charSpacing;\n }\n }\n realLineHeight = lineHeight;\n if (this.lineHeight < 1 || (i === endLine && this.lineHeight > 1)) {\n lineHeight /= this.lineHeight;\n }\n let drawStart = boundaries.left + lineOffset + boxStart,\n drawHeight = lineHeight,\n extraTop = 0;\n const drawWidth = boxEnd - boxStart;\n if (this.inCompositionMode) {\n ctx.fillStyle = this.compositionColor || 'black';\n drawHeight = 1;\n extraTop = lineHeight;\n } else {\n ctx.fillStyle = this.selectionColor;\n }\n if (this.direction === 'rtl') {\n if (\n this.textAlign === RIGHT ||\n this.textAlign === JUSTIFY ||\n this.textAlign === JUSTIFY_RIGHT\n ) {\n drawStart = this.width - drawStart - drawWidth;\n } else if (this.textAlign === LEFT || this.textAlign === JUSTIFY_LEFT) {\n drawStart = boundaries.left + lineOffset - boxEnd;\n } else if (\n this.textAlign === CENTER ||\n this.textAlign === JUSTIFY_CENTER\n ) {\n drawStart = boundaries.left + lineOffset - boxEnd;\n }\n }\n ctx.fillRect(\n drawStart,\n boundaries.top + boundaries.topOffset + extraTop,\n drawWidth,\n drawHeight,\n );\n boundaries.topOffset += realLineHeight;\n }\n }\n\n /**\n * High level function to know the height of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns fontSize of char at the current cursor\n * Unused from the library, is for the end user\n * @return {Number} Character font size\n */\n getCurrentCharFontSize(): number {\n const cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, 'fontSize');\n }\n\n /**\n * High level function to know the color of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns color (fill) of char at the current cursor\n * if the text object has a pattern or gradient for filler, it will return that.\n * Unused by the library, is for the end user\n * @return {String | TFiller} Character color (fill)\n */\n getCurrentCharColor(): string | TFiller | null {\n const cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, FILL);\n }\n\n /**\n * Returns the cursor position for the getCurrent.. functions\n * @private\n */\n _getCurrentCharIndex() {\n const cursorPosition = this.get2DCursorLocation(this.selectionStart, true),\n charIndex =\n cursorPosition.charIndex > 0 ? cursorPosition.charIndex - 1 : 0;\n return { l: cursorPosition.lineIndex, c: charIndex };\n }\n\n dispose() {\n this._exitEditing();\n this.draggableTextDelegate.dispose();\n super.dispose();\n }\n}\n\nclassRegistry.setClass(IText);\n// legacy\nclassRegistry.setClass(IText, 'i-text');\n","import type { TClassProperties, TOptions } from '../typedefs';\nimport { IText } from './IText/IText';\nimport { classRegistry } from '../ClassRegistry';\nimport { createTextboxDefaultControls } from '../controls/commonControls';\nimport { JUSTIFY } from './Text/constants';\nimport type { TextStyleDeclaration } from './Text/StyledText';\nimport type { SerializedITextProps, ITextProps } from './IText/IText';\nimport type { ITextEvents } from './IText/ITextBehavior';\nimport type { TextLinesInfo } from './Text/Text';\nimport type { Control } from '../controls/Control';\n\n// @TODO: Many things here are configuration related and shouldn't be on the class nor prototype\n// regexes, list of properties that are not suppose to change by instances, magic consts.\n// this will be a separated effort\nexport const textboxDefaultValues: Partial> = {\n minWidth: 20,\n dynamicMinWidth: 2,\n lockScalingFlip: true,\n noScaleCache: false,\n _wordJoiners: /[ \\t\\r]/,\n splitByGrapheme: false,\n};\n\nexport type GraphemeData = {\n wordsData: {\n word: string[];\n width: number;\n }[][];\n largestWordWidth: number;\n};\n\nexport type StyleMap = Record;\n\n// @TODO this is not complete\ninterface UniqueTextboxProps {\n minWidth: number;\n splitByGrapheme: boolean;\n dynamicMinWidth: number;\n _wordJoiners: RegExp;\n}\n\nexport interface SerializedTextboxProps\n extends SerializedITextProps,\n Pick {}\n\nexport interface TextboxProps extends ITextProps, UniqueTextboxProps {}\n\n/**\n * Textbox class, based on IText, allows the user to resize the text rectangle\n * and wraps lines automatically. Textboxes have their Y scaling locked, the\n * user can only change width. Height is adjusted automatically based on the\n * wrapping of lines.\n */\nexport class Textbox<\n Props extends TOptions = Partial,\n SProps extends SerializedTextboxProps = SerializedTextboxProps,\n EventSpec extends ITextEvents = ITextEvents,\n >\n extends IText\n implements UniqueTextboxProps\n{\n /**\n * Minimum width of textbox, in pixels.\n * @type Number\n * @default\n */\n declare minWidth: number;\n\n /**\n * Minimum calculated width of a textbox, in pixels.\n * fixed to 2 so that an empty textbox cannot go to 0\n * and is still selectable without text.\n * @type Number\n * @default\n */\n declare dynamicMinWidth: number;\n\n /**\n * Use this boolean property in order to split strings that have no white space concept.\n * this is a cheap way to help with chinese/japanese\n * @type Boolean\n * @since 2.6.0\n */\n declare splitByGrapheme: boolean;\n\n declare _wordJoiners: RegExp;\n\n declare _styleMap: StyleMap;\n\n declare isWrapping: boolean;\n\n static type = 'Textbox';\n\n static textLayoutProperties = [...IText.textLayoutProperties, 'width'];\n\n static ownDefaults = textboxDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Textbox.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n */\n constructor(text: string, options?: Props) {\n super(text, { ...Textbox.ownDefaults, ...options } as Props);\n }\n\n /**\n * Creates the default control object.\n * If you prefer to have on instance of controls shared among all objects\n * make this function return an empty object and add controls to the ownDefaults object\n */\n static createControls(): { controls: Record } {\n return { controls: createTextboxDefaultControls() };\n }\n\n /**\n * Unlike superclass's version of this function, Textbox does not update\n * its width.\n * @private\n * @override\n */\n initDimensions() {\n if (!this.initialized) {\n return;\n }\n this.isEditing && this.initDelayedCursor();\n this._clearCache();\n // clear dynamicMinWidth as it will be different after we re-wrap line\n this.dynamicMinWidth = 0;\n // wrap lines\n this._styleMap = this._generateStyleMap(this._splitText());\n // if after wrapping, the width is smaller than dynamicMinWidth, change the width and re-wrap\n if (this.dynamicMinWidth > this.width) {\n this._set('width', this.dynamicMinWidth);\n }\n if (this.textAlign.includes(JUSTIFY)) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n // clear cache and re-calculate height\n this.height = this.calcTextHeight();\n }\n\n /**\n * Generate an object that translates the style object so that it is\n * broken up by visual lines (new lines and automatic wrapping).\n * The original text styles object is broken up by actual lines (new lines only),\n * which is only sufficient for Text / IText\n * @private\n */\n _generateStyleMap(textInfo: TextLinesInfo): StyleMap {\n let realLineCount = 0,\n realLineCharCount = 0,\n charCount = 0;\n const map: StyleMap = {};\n\n for (let i = 0; i < textInfo.graphemeLines.length; i++) {\n if (textInfo.graphemeText[charCount] === '\\n' && i > 0) {\n realLineCharCount = 0;\n charCount++;\n realLineCount++;\n } else if (\n !this.splitByGrapheme &&\n this._reSpaceAndTab.test(textInfo.graphemeText[charCount]) &&\n i > 0\n ) {\n // this case deals with space's that are removed from end of lines when wrapping\n realLineCharCount++;\n charCount++;\n }\n\n map[i] = { line: realLineCount, offset: realLineCharCount };\n\n charCount += textInfo.graphemeLines[i].length;\n realLineCharCount += textInfo.graphemeLines[i].length;\n }\n\n return map;\n }\n\n /**\n * Returns true if object has a style property or has it on a specified line\n * @param {Number} lineIndex\n * @return {Boolean}\n */\n styleHas(property: keyof TextStyleDeclaration, lineIndex: number): boolean {\n if (this._styleMap && !this.isWrapping) {\n const map = this._styleMap[lineIndex];\n if (map) {\n lineIndex = map.line;\n }\n }\n return super.styleHas(property, lineIndex);\n }\n\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles(lineIndex: number): boolean {\n if (!this.styles) {\n return true;\n }\n let offset = 0,\n nextLineIndex = lineIndex + 1,\n nextOffset: number,\n shouldLimit = false;\n const map = this._styleMap[lineIndex],\n mapNextLine = this._styleMap[lineIndex + 1];\n if (map) {\n lineIndex = map.line;\n offset = map.offset;\n }\n if (mapNextLine) {\n nextLineIndex = mapNextLine.line;\n shouldLimit = nextLineIndex === lineIndex;\n nextOffset = mapNextLine.offset;\n }\n const obj =\n typeof lineIndex === 'undefined'\n ? this.styles\n : { line: this.styles[lineIndex] };\n for (const p1 in obj) {\n for (const p2 in obj[p1]) {\n const p2Number = parseInt(p2, 10);\n if (p2Number >= offset && (!shouldLimit || p2Number < nextOffset!)) {\n // eslint-disable-next-line no-unused-vars\n for (const p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n /**\n * @protected\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {TextStyleDeclaration} a style object reference to the existing one or a new empty object when undefined\n */\n _getStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n ): TextStyleDeclaration {\n if (this._styleMap && !this.isWrapping) {\n const map = this._styleMap[lineIndex];\n if (!map) {\n return {};\n }\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n }\n return super._getStyleDeclaration(lineIndex, charIndex);\n }\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n protected _setStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n style: object,\n ) {\n const map = this._styleMap[lineIndex];\n super._setStyleDeclaration(map.line, map.offset + charIndex, style);\n }\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n protected _deleteStyleDeclaration(lineIndex: number, charIndex: number) {\n const map = this._styleMap[lineIndex];\n super._deleteStyleDeclaration(map.line, map.offset + charIndex);\n }\n\n /**\n * probably broken need a fix\n * Returns the real style line that correspond to the wrapped lineIndex line\n * Used just to verify if the line does exist or not.\n * @param {Number} lineIndex\n * @returns {Boolean} if the line exists or not\n * @private\n */\n protected _getLineStyle(lineIndex: number): boolean {\n const map = this._styleMap[lineIndex];\n return !!this.styles[map.line];\n }\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @param {Object} style\n * @private\n */\n protected _setLineStyle(lineIndex: number) {\n const map = this._styleMap[lineIndex];\n super._setLineStyle(map.line);\n }\n\n /**\n * Wraps text using the 'width' property of Textbox. First this function\n * splits text on newlines, so we preserve newlines entered by the user.\n * Then it wraps each line using the width of the Textbox by calling\n * _wrapLine().\n * @param {Array} lines The string array of text that is split into lines\n * @param {Number} desiredWidth width you want to wrap to\n * @returns {Array} Array of lines\n */\n _wrapText(lines: string[], desiredWidth: number): string[][] {\n this.isWrapping = true;\n // extract all thewords and the widths to optimally wrap lines.\n const data = this.getGraphemeDataForRender(lines);\n const wrapped: string[][] = [];\n for (let i = 0; i < data.wordsData.length; i++) {\n wrapped.push(...this._wrapLine(i, desiredWidth, data));\n }\n this.isWrapping = false;\n return wrapped;\n }\n\n /**\n * For each line of text terminated by an hard line stop,\n * measure each word width and extract the largest word from all.\n * The returned words here are the one that at the end will be rendered.\n * @param {string[]} lines the lines we need to measure\n *\n */\n getGraphemeDataForRender(lines: string[]): GraphemeData {\n const splitByGrapheme = this.splitByGrapheme,\n infix = splitByGrapheme ? '' : ' ';\n\n let largestWordWidth = 0;\n\n const data = lines.map((line, lineIndex) => {\n let offset = 0;\n const wordsOrGraphemes = splitByGrapheme\n ? this.graphemeSplit(line)\n : this.wordSplit(line);\n\n if (wordsOrGraphemes.length === 0) {\n return [{ word: [], width: 0 }];\n }\n\n return wordsOrGraphemes.map((word: string) => {\n // if using splitByGrapheme words are already in graphemes.\n const graphemeArray = splitByGrapheme\n ? [word]\n : this.graphemeSplit(word);\n const width = this._measureWord(graphemeArray, lineIndex, offset);\n largestWordWidth = Math.max(width, largestWordWidth);\n offset += graphemeArray.length + infix.length;\n return { word: graphemeArray, width };\n });\n });\n\n return {\n wordsData: data,\n largestWordWidth,\n };\n }\n\n /**\n * Helper function to measure a string of text, given its lineIndex and charIndex offset\n * It gets called when charBounds are not available yet.\n * Override if necessary\n * Use with {@link Textbox#wordSplit}\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {String} text\n * @param {number} lineIndex\n * @param {number} charOffset\n * @returns {number}\n */\n _measureWord(word: string[], lineIndex: number, charOffset = 0): number {\n let width = 0,\n prevGrapheme;\n const skipLeft = true;\n for (let i = 0, len = word.length; i < len; i++) {\n const box = this._getGraphemeBox(\n word[i],\n lineIndex,\n i + charOffset,\n prevGrapheme,\n skipLeft,\n );\n width += box.kernedWidth;\n prevGrapheme = word[i];\n }\n return width;\n }\n\n /**\n * Override this method to customize word splitting\n * Use with {@link Textbox#_measureWord}\n * @param {string} value\n * @returns {string[]} array of words\n */\n wordSplit(value: string): string[] {\n return value.split(this._wordJoiners);\n }\n\n /**\n * Wraps a line of text using the width of the Textbox as desiredWidth\n * and leveraging the known width o words from GraphemeData\n * @private\n * @param {Number} lineIndex\n * @param {Number} desiredWidth width you want to wrap the line to\n * @param {GraphemeData} graphemeData an object containing all the lines' words width.\n * @param {Number} reservedSpace space to remove from wrapping for custom functionalities\n * @returns {Array} Array of line(s) into which the given text is wrapped\n * to.\n */\n _wrapLine(\n lineIndex: number,\n desiredWidth: number,\n { largestWordWidth, wordsData }: GraphemeData,\n reservedSpace = 0,\n ): string[][] {\n const additionalSpace = this._getWidthOfCharSpacing(),\n splitByGrapheme = this.splitByGrapheme,\n graphemeLines = [],\n infix = splitByGrapheme ? '' : ' ';\n\n let lineWidth = 0,\n line: string[] = [],\n // spaces in different languages?\n offset = 0,\n infixWidth = 0,\n lineJustStarted = true;\n\n desiredWidth -= reservedSpace;\n\n const maxWidth = Math.max(\n desiredWidth,\n largestWordWidth,\n this.dynamicMinWidth,\n );\n // layout words\n const data = wordsData[lineIndex];\n offset = 0;\n let i;\n for (i = 0; i < data.length; i++) {\n const { word, width: wordWidth } = data[i];\n offset += word.length;\n\n lineWidth += infixWidth + wordWidth - additionalSpace;\n if (lineWidth > maxWidth && !lineJustStarted) {\n graphemeLines.push(line);\n line = [];\n lineWidth = wordWidth;\n lineJustStarted = true;\n } else {\n lineWidth += additionalSpace;\n }\n\n if (!lineJustStarted && !splitByGrapheme) {\n line.push(infix);\n }\n line = line.concat(word);\n\n infixWidth = splitByGrapheme\n ? 0\n : this._measureWord([infix], lineIndex, offset);\n offset++;\n lineJustStarted = false;\n }\n\n i && graphemeLines.push(line);\n\n // TODO: this code is probably not necessary anymore.\n // it can be moved out of this function since largestWordWidth is now\n // known in advance\n if (largestWordWidth + reservedSpace > this.dynamicMinWidth) {\n this.dynamicMinWidth = largestWordWidth - additionalSpace + reservedSpace;\n }\n return graphemeLines;\n }\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @param {Number} lineIndex text to split\n * @return {Boolean}\n */\n isEndOfWrapping(lineIndex: number): boolean {\n if (!this._styleMap[lineIndex + 1]) {\n // is last line, return true;\n return true;\n }\n if (this._styleMap[lineIndex + 1].line !== this._styleMap[lineIndex].line) {\n // this is last line before a line break, return true;\n return true;\n }\n return false;\n }\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * This is important only for splitByGrapheme at the end of wrapping.\n * If we are not wrapping the offset is always 1\n * @return Number\n */\n missingNewlineOffset(lineIndex: number, skipWrapping?: boolean): 0 | 1 {\n if (this.splitByGrapheme && !skipWrapping) {\n return this.isEndOfWrapping(lineIndex) ? 1 : 0;\n }\n return 1;\n }\n\n /**\n * Gets lines of text to render in the Textbox. This function calculates\n * text wrapping on the fly every time it is called.\n * @param {String} text text to split\n * @returns {Array} Array of lines in the Textbox.\n * @override\n */\n _splitTextIntoLines(text: string) {\n const newText = super._splitTextIntoLines(text),\n graphemeLines = this._wrapText(newText.lines, this.width),\n lines = new Array(graphemeLines.length);\n for (let i = 0; i < graphemeLines.length; i++) {\n lines[i] = graphemeLines[i].join('');\n }\n newText.lines = lines;\n newText.graphemeLines = graphemeLines;\n return newText;\n }\n\n getMinWidth() {\n return Math.max(this.minWidth, this.dynamicMinWidth);\n }\n\n _removeExtraneousStyles() {\n const linesToKeep = new Map();\n for (const prop in this._styleMap) {\n const propNumber = parseInt(prop, 10);\n if (this._textLines[propNumber]) {\n const lineIndex = this._styleMap[prop].line;\n linesToKeep.set(`${lineIndex}`, true);\n }\n }\n for (const prop in this.styles) {\n if (!linesToKeep.has(prop)) {\n delete this.styles[prop];\n }\n }\n }\n\n /**\n * Returns object representation of an instance\n * @method toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([\n 'minWidth',\n 'splitByGrapheme',\n ...propertiesToInclude,\n ] as K[]) as Pick & SProps;\n }\n}\n\nclassRegistry.setClass(Textbox);\n","import { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport { sendPointToPlane } from '../../util/misc/planeChange';\nimport type { LayoutStrategyResult, StrictLayoutContext } from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { getObjectBounds } from './utils';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will adjust the bounding box to match the clip path bounding box.\n */\nexport class ClipPathLayout extends LayoutStrategy {\n static readonly type = 'clip-path';\n\n shouldPerformLayout(context: StrictLayoutContext): boolean {\n return !!context.target.clipPath && super.shouldPerformLayout(context);\n }\n\n shouldLayoutClipPath() {\n return false;\n }\n\n calcLayoutResult(\n context: StrictLayoutContext,\n objects: FabricObject[],\n ): LayoutStrategyResult | undefined {\n const { target } = context;\n const { clipPath, group } = target;\n if (!clipPath || !this.shouldPerformLayout(context)) {\n return;\n }\n // TODO: remove stroke calculation from this case\n const { width, height } = makeBoundingBoxFromPoints(\n getObjectBounds(target, clipPath as FabricObject),\n );\n const size = new Point(width, height);\n if (clipPath.absolutePositioned) {\n // we want the center point to exist in group's containing plane\n const clipPathCenter = sendPointToPlane(\n clipPath.getRelativeCenterPoint(),\n undefined,\n group ? group.calcTransformMatrix() : undefined,\n );\n return {\n center: clipPathCenter,\n size,\n };\n } else {\n // we want the center point to exist in group's containing plane, so we send it upwards\n const clipPathCenter = clipPath\n .getRelativeCenterPoint()\n .transform(target.calcOwnMatrix(), true);\n if (this.shouldPerformLayout(context)) {\n // the clip path is positioned relative to the group's center which is affected by the bbox\n // so we first calculate the bbox\n const { center = new Point(), correction = new Point() } =\n this.calcBoundingBox(objects, context) || {};\n return {\n center: center.add(clipPathCenter),\n correction: correction.subtract(clipPathCenter),\n size,\n };\n } else {\n return {\n center: target.getRelativeCenterPoint().add(clipPathCenter),\n size,\n };\n }\n }\n }\n}\n\nclassRegistry.setClass(ClipPathLayout);\n","import { Point } from '../../Point';\nimport type {\n InitializationLayoutContext,\n LayoutStrategyResult,\n StrictLayoutContext,\n} from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will keep target's initial size.\n */\nexport class FixedLayout extends LayoutStrategy {\n static readonly type = 'fixed';\n\n /**\n * @override respect target's initial size\n */\n getInitialSize(\n { target }: StrictLayoutContext & InitializationLayoutContext,\n { size }: Pick,\n ): Point {\n return new Point(target.width || size.x, target.height || size.y);\n }\n}\n\nclassRegistry.setClass(FixedLayout);\n","import { LayoutManager } from './LayoutManager';\nimport type { RegistrationContext, StrictLayoutContext } from './types';\nimport type { Group } from '../shapes/Group';\n\n/**\n * Today the LayoutManager class also takes care of subscribing event handlers\n * to update the group layout when the group is interactive and a transform is applied\n * to a child object.\n * The ActiveSelection is never interactive, but it could contain objects from\n * groups that are.\n * The standard LayoutManager would subscribe the children of the activeSelection to\n * perform layout changes to the active selection itself, what we need instead is that\n * the transformation applied to the active selection will trigger changes to the\n * original group of the children ( the one referenced under the parent property )\n * This subclass of the LayoutManager has a single duty to fill the gap of this difference.`\n */\nexport class ActiveSelectionLayoutManager extends LayoutManager {\n subscribeTargets(\n context: RegistrationContext & Partial,\n ): void {\n const activeSelection = context.target;\n const parents = context.targets.reduce((parents, target) => {\n target.parent && parents.add(target.parent);\n return parents;\n }, new Set());\n parents.forEach((parent) => {\n parent.layoutManager.subscribeTargets({\n target: parent,\n targets: [activeSelection],\n });\n });\n }\n\n /**\n * unsubscribe from parent only if all its children were deselected\n */\n unsubscribeTargets(\n context: RegistrationContext & Partial,\n ): void {\n const activeSelection = context.target;\n const selectedObjects = activeSelection.getObjects();\n const parents = context.targets.reduce((parents, target) => {\n target.parent && parents.add(target.parent);\n return parents;\n }, new Set());\n parents.forEach((parent) => {\n !selectedObjects.some((object) => object.parent === parent) &&\n parent.layoutManager.unsubscribeTargets({\n target: parent,\n targets: [activeSelection],\n });\n });\n }\n}\n","import type { ControlRenderingStyleOverride } from '../controls/controlRendering';\nimport { classRegistry } from '../ClassRegistry';\nimport type { GroupProps } from './Group';\nimport { Group } from './Group';\nimport type { FabricObject } from './Object/FabricObject';\nimport {\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n} from '../LayoutManager/constants';\nimport type { TClassProperties } from '../typedefs';\nimport { log } from '../util/internals/console';\nimport { ActiveSelectionLayoutManager } from '../LayoutManager/ActiveSelectionLayoutManager';\n\nexport type MultiSelectionStacking = 'canvas-stacking' | 'selection-order';\n\nexport interface ActiveSelectionOptions extends GroupProps {\n multiSelectionStacking: MultiSelectionStacking;\n}\n\nconst activeSelectionDefaultValues: Partial> =\n {\n multiSelectionStacking: 'canvas-stacking',\n };\n\n/**\n * Used by Canvas to manage selection.\n *\n * @example\n * class MyActiveSelection extends ActiveSelection {\n * ...\n * }\n *\n * // override the default `ActiveSelection` class\n * classRegistry.setClass(MyActiveSelection)\n */\nexport class ActiveSelection extends Group {\n static type = 'ActiveSelection';\n\n static ownDefaults: Record = activeSelectionDefaultValues;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...ActiveSelection.ownDefaults };\n }\n\n /**\n * The ActiveSelection needs to use the ActiveSelectionLayoutManager\n * or selections on interactive groups may be broken\n */\n declare layoutManager: ActiveSelectionLayoutManager;\n\n /**\n * controls how selected objects are added during a multiselection event\n * - `canvas-stacking` adds the selected object to the active selection while respecting canvas object stacking order\n * - `selection-order` adds the selected object to the top of the stack,\n * meaning that the stack is ordered by the order in which objects were selected\n * @default `canvas-stacking`\n */\n declare multiSelectionStacking: MultiSelectionStacking;\n\n constructor(\n objects: FabricObject[] = [],\n options: Partial = {},\n ) {\n super();\n Object.assign(this, ActiveSelection.ownDefaults);\n this.setOptions(options);\n const { left, top, layoutManager } = options;\n this.groupInit(objects, {\n left,\n top,\n layoutManager: layoutManager ?? new ActiveSelectionLayoutManager(),\n });\n }\n\n /**\n * @private\n */\n _shouldSetNestedCoords() {\n return true;\n }\n\n /**\n * @private\n * @override we don't want the selection monitor to be active\n */\n __objectSelectionMonitor() {\n // noop\n }\n\n /**\n * Adds objects with respect to {@link multiSelectionStacking}\n * @param targets object to add to selection\n */\n multiSelectAdd(...targets: FabricObject[]) {\n if (this.multiSelectionStacking === 'selection-order') {\n this.add(...targets);\n } else {\n // respect object stacking as it is on canvas\n // perf enhancement for large ActiveSelection: consider a binary search of `isInFrontOf`\n targets.forEach((target) => {\n const index = this._objects.findIndex((obj) => obj.isInFrontOf(target));\n const insertAt =\n index === -1\n ? // `target` is in front of all other objects\n this.size()\n : index;\n this.insertAt(insertAt, target);\n });\n }\n }\n\n /**\n * @override block ancestors/descendants of selected objects from being selected to prevent a circular object tree\n */\n canEnterGroup(object: FabricObject) {\n if (\n this.getObjects().some(\n (o) => o.isDescendantOf(object) || object.isDescendantOf(o),\n )\n ) {\n // prevent circular object tree\n log(\n 'error',\n 'ActiveSelection: circular object trees are not supported, this call has no effect',\n );\n return false;\n }\n\n return super.canEnterGroup(object);\n }\n\n /**\n * Change an object so that it can be part of an active selection.\n * this method is called by multiselectAdd from canvas code.\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n // This condition check that the object has currently a group, and the group\n // is also its parent, meaning that is not in an active selection, but is\n // in a normal group.\n if (object.parent && object.parent === object.group) {\n // Disconnect the object from the group functionalities, but keep the ref parent intact\n // for later re-enter\n object.parent._exitGroup(object);\n // in this case the object is probably inside an active selection.\n } else if (object.group && object.parent !== object.group) {\n // in this case group.remove will also clear the old parent reference.\n object.group.remove(object);\n }\n // enter the active selection from a render perspective\n // the object will be in the objects array of both the ActiveSelection and the Group\n // but referenced in the group's _activeObjects so that it won't be rendered twice.\n this._enterGroup(object, removeParentTransform);\n }\n\n /**\n * we want objects to retain their canvas ref when exiting instance\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n this._exitGroup(object, removeParentTransform);\n // return to parent\n object.parent && object.parent._enterGroup(object, true);\n }\n\n /**\n * @private\n * @param {'added'|'removed'} type\n * @param {FabricObject[]} targets\n */\n _onAfterObjectsChange(type: 'added' | 'removed', targets: FabricObject[]) {\n super._onAfterObjectsChange(type, targets);\n const groups = new Set();\n targets.forEach((object) => {\n const { parent } = object;\n parent && groups.add(parent);\n });\n if (type === LAYOUT_TYPE_REMOVED) {\n // invalidate groups' layout and mark as dirty\n groups.forEach((group) => {\n group._onAfterObjectsChange(LAYOUT_TYPE_ADDED, targets);\n });\n } else {\n // mark groups as dirty\n groups.forEach((group) => {\n group._set('dirty', true);\n });\n }\n }\n\n /**\n * @override remove all objects\n */\n onDeselect() {\n this.removeAll();\n return false;\n }\n\n /**\n * Returns string representation of a group\n * @return {String}\n */\n toString() {\n return `#`;\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * @return {Boolean}\n */\n shouldCache() {\n return false;\n }\n\n /**\n * Check if this group or its parent group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache() {\n return false;\n }\n\n /**\n * Renders controls and borders for the object\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [styleOverride] properties to override the object style\n * @param {Object} [childrenOverride] properties to override the children overrides\n */\n _renderControls(\n ctx: CanvasRenderingContext2D,\n styleOverride?: ControlRenderingStyleOverride,\n childrenOverride?: ControlRenderingStyleOverride,\n ) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n const options = {\n hasControls: false,\n ...childrenOverride,\n forActiveSelection: true,\n };\n for (let i = 0; i < this._objects.length; i++) {\n this._objects[i]._renderControls(ctx, options);\n }\n super._renderControls(ctx, styleOverride);\n ctx.restore();\n }\n}\n\nclassRegistry.setClass(ActiveSelection);\nclassRegistry.setClass(ActiveSelection, 'activeSelection');\n","/**\n * Canvas 2D filter backend.\n */\nimport type { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TPipelineResources } from './typedefs';\n\nexport class Canvas2dFilterBackend {\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: TPipelineResources = {};\n\n /**\n * Apply a set of filters against a source image and draw the filtered output\n * to the provided destination canvas.\n *\n * @param {EnhancedFilter} filters The filter to apply.\n * @param {HTMLImageElement|HTMLCanvasElement} sourceElement The source to be filtered.\n * @param {Number} sourceWidth The width of the source input.\n * @param {Number} sourceHeight The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n */\n applyFilters(\n filters: BaseFilter>[],\n sourceElement: CanvasImageSource,\n sourceWidth: number,\n sourceHeight: number,\n targetCanvas: HTMLCanvasElement,\n ): T2DPipelineState | void {\n const ctx = targetCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.drawImage(sourceElement, 0, 0, sourceWidth, sourceHeight);\n const imageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n const originalImageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n const pipelineState: T2DPipelineState = {\n sourceWidth,\n sourceHeight,\n imageData,\n originalEl: sourceElement,\n originalImageData,\n canvasEl: targetCanvas,\n ctx,\n filterBackend: this,\n };\n filters.forEach((filter) => {\n filter.applyTo(pipelineState);\n });\n const { imageData: imageDataPostFilter } = pipelineState;\n if (\n imageDataPostFilter.width !== sourceWidth ||\n imageDataPostFilter.height !== sourceHeight\n ) {\n targetCanvas.width = imageDataPostFilter.width;\n targetCanvas.height = imageDataPostFilter.height;\n }\n ctx.putImageData(imageDataPostFilter, 0, 0);\n return pipelineState;\n }\n}\n","import { config } from '../config';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type {\n TWebGLPipelineState,\n TProgramCache,\n TTextureCache,\n TPipelineResources,\n} from './typedefs';\nimport type { BaseFilter } from './BaseFilter';\n\nexport class WebGLFilterBackend {\n declare tileSize: number;\n\n /**\n * Define ...\n **/\n aPosition: Float32Array = new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]);\n\n /**\n * If GLPut data is the fastest operation, or if forced, this buffer will be used\n * to transfer the data back in the 2d logic\n **/\n declare imageBuffer?: ArrayBuffer;\n\n declare canvas: HTMLCanvasElement;\n\n /**\n * The Webgl context that will execute the operations for filtering\n **/\n declare gl: WebGLRenderingContext;\n\n /**\n * Keyed map for shader cache\n **/\n declare programCache: TProgramCache;\n\n /**\n * Keyed map for texture cache\n **/\n declare textureCache: TTextureCache;\n\n /**\n * Contains GPU info for debug\n **/\n declare gpuInfo: any;\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: TPipelineResources = {};\n\n constructor({ tileSize = config.textureSize } = {}) {\n this.tileSize = tileSize;\n this.setupGLContext(tileSize, tileSize);\n this.captureGPUInfo();\n }\n\n /**\n * Setup a WebGL context suitable for filtering, and bind any needed event handlers.\n */\n setupGLContext(width: number, height: number): void {\n this.dispose();\n this.createWebGLCanvas(width, height);\n }\n\n /**\n * Create a canvas element and associated WebGL context and attaches them as\n * class properties to the GLFilterBackend class.\n */\n createWebGLCanvas(width: number, height: number): void {\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n const glOptions = {\n alpha: true,\n premultipliedAlpha: false,\n depth: false,\n stencil: false,\n antialias: false,\n },\n gl = canvas.getContext('webgl', glOptions) as WebGLRenderingContext;\n\n if (!gl) {\n return;\n }\n gl.clearColor(0, 0, 0, 0);\n // this canvas can fire webglcontextlost and webglcontextrestored\n this.canvas = canvas;\n this.gl = gl;\n }\n\n /**\n * Attempts to apply the requested filters to the source provided, drawing the filtered output\n * to the provided target canvas.\n *\n * @param {Array} filters The filters to apply.\n * @param {TexImageSource} source The source to be filtered.\n * @param {Number} width The width of the source input.\n * @param {Number} height The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n * @param {String|undefined} cacheKey A key used to cache resources related to the source. If\n * omitted, caching will be skipped.\n */\n applyFilters(\n filters: BaseFilter>[],\n source: TexImageSource,\n width: number,\n height: number,\n targetCanvas: HTMLCanvasElement,\n cacheKey?: string,\n ): TWebGLPipelineState | undefined {\n const gl = this.gl;\n const ctx = targetCanvas.getContext('2d');\n if (!gl || !ctx) {\n return;\n }\n let cachedTexture;\n if (cacheKey) {\n cachedTexture = this.getCachedTexture(cacheKey, source);\n }\n const pipelineState: TWebGLPipelineState = {\n originalWidth:\n (source as HTMLImageElement).width ||\n // @ts-expect-error is this a bug? should this be naturalWidth? or is this the pipeline state?\n (source as HTMLImageElement).originalWidth ||\n 0,\n originalHeight:\n (source as HTMLImageElement).height ||\n // @ts-expect-error is this a bug? should this be naturalHeight? or is this the pipeline state?\n (source as HTMLImageElement).originalHeight ||\n 0,\n sourceWidth: width,\n sourceHeight: height,\n destinationWidth: width,\n destinationHeight: height,\n context: gl,\n sourceTexture: this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined,\n ),\n targetTexture: this.createTexture(gl, width, height),\n originalTexture:\n cachedTexture ||\n this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined,\n )!,\n passes: filters.length,\n webgl: true,\n aPosition: this.aPosition,\n programCache: this.programCache,\n pass: 0,\n filterBackend: this,\n targetCanvas: targetCanvas,\n };\n const tempFbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, tempFbo);\n filters.forEach((filter: any) => {\n filter && filter.applyTo(pipelineState);\n });\n resizeCanvasIfNeeded(pipelineState);\n this.copyGLTo2D(gl, pipelineState);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.deleteTexture(pipelineState.sourceTexture);\n gl.deleteTexture(pipelineState.targetTexture);\n gl.deleteFramebuffer(tempFbo);\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n return pipelineState;\n }\n\n /**\n * Detach event listeners, remove references, and clean up caches.\n */\n dispose() {\n if (this.canvas) {\n // we are disposing, we don't care about the fact\n // that the canvas shouldn't be null.\n // @ts-expect-error disposing\n this.canvas = null;\n // @ts-expect-error disposing\n this.gl = null;\n }\n this.clearWebGLCaches();\n }\n\n /**\n * Wipe out WebGL-related caches.\n */\n clearWebGLCaches() {\n this.programCache = {};\n this.textureCache = {};\n }\n\n /**\n * Create a WebGL texture object.\n *\n * Accepts specific dimensions to initialize the texture to or a source image.\n *\n * @param {WebGLRenderingContext} gl The GL context to use for creating the texture.\n * @param {number} width The width to initialize the texture at.\n * @param {number} height The height to initialize the texture.\n * @param {TexImageSource} textureImageSource A source for the texture data.\n * @param {number} filter gl.NEAREST default or gl.LINEAR filters for the texture.\n * This filter is very useful for LUTs filters. If you need interpolation use gl.LINEAR\n * @returns {WebGLTexture}\n */\n createTexture(\n gl: WebGLRenderingContext,\n width: number,\n height: number,\n textureImageSource?: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR'],\n ) {\n const {\n NEAREST,\n TEXTURE_2D,\n RGBA,\n UNSIGNED_BYTE,\n CLAMP_TO_EDGE,\n TEXTURE_MAG_FILTER,\n TEXTURE_MIN_FILTER,\n TEXTURE_WRAP_S,\n TEXTURE_WRAP_T,\n } = gl;\n const texture = gl.createTexture();\n gl.bindTexture(TEXTURE_2D, texture);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE);\n if (textureImageSource) {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n RGBA,\n UNSIGNED_BYTE,\n textureImageSource,\n );\n } else {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n width,\n height,\n 0,\n RGBA,\n UNSIGNED_BYTE,\n null,\n );\n }\n return texture;\n }\n\n /**\n * Can be optionally used to get a texture from the cache array\n *\n * If an existing texture is not found, a new texture is created and cached.\n *\n * @param {String} uniqueId A cache key to use to find an existing texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source to use to create the\n * texture cache entry if one does not already exist.\n */\n getCachedTexture(\n uniqueId: string,\n textureImageSource: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR'],\n ): WebGLTexture | null {\n const { textureCache } = this;\n if (textureCache[uniqueId]) {\n return textureCache[uniqueId];\n } else {\n const texture = this.createTexture(\n this.gl,\n (textureImageSource as HTMLImageElement).width,\n (textureImageSource as HTMLImageElement).height,\n textureImageSource,\n filter,\n );\n if (texture) {\n textureCache[uniqueId] = texture;\n }\n return texture;\n }\n }\n\n /**\n * Clear out cached resources related to a source image that has been\n * filtered previously.\n *\n * @param {String} cacheKey The cache key provided when the source image was filtered.\n */\n evictCachesForKey(cacheKey: string) {\n if (this.textureCache[cacheKey]) {\n this.gl.deleteTexture(this.textureCache[cacheKey]);\n delete this.textureCache[cacheKey];\n }\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas.\n *\n * The WebGL canvas is assumed to be upside down, with the top-left pixel of the\n * desired output image appearing in the bottom-left corner of the WebGL canvas.\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2D(gl: WebGLRenderingContext, pipelineState: TWebGLPipelineState) {\n const glCanvas = gl.canvas,\n targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.translate(0, targetCanvas.height); // move it down again\n ctx.scale(1, -1); // vertical flip\n // where is my image on the big glcanvas?\n const sourceY = glCanvas.height - targetCanvas.height;\n ctx.drawImage(\n glCanvas,\n 0,\n sourceY,\n targetCanvas.width,\n targetCanvas.height,\n 0,\n 0,\n targetCanvas.width,\n targetCanvas.height,\n );\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas using 2d canvas' putImageData\n * API. Measurably faster than using ctx.drawImage in Firefox (version 54 on OSX Sierra).\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2DPutImageData(\n this: Required,\n gl: WebGLRenderingContext,\n pipelineState: TWebGLPipelineState,\n ) {\n const targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d'),\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight,\n numBytes = dWidth * dHeight * 4;\n if (!ctx) {\n return;\n }\n const u8 = new Uint8Array(this.imageBuffer, 0, numBytes);\n const u8Clamped = new Uint8ClampedArray(this.imageBuffer, 0, numBytes);\n\n gl.readPixels(0, 0, dWidth, dHeight, gl.RGBA, gl.UNSIGNED_BYTE, u8);\n const imgData = new ImageData(u8Clamped, dWidth, dHeight);\n ctx.putImageData(imgData, 0, 0);\n }\n\n /**\n * Attempt to extract GPU information strings from a WebGL context.\n *\n * Useful information when debugging or blacklisting specific GPUs.\n *\n * @returns {Object} A GPU info object with renderer and vendor strings.\n */\n captureGPUInfo() {\n if (this.gpuInfo) {\n return this.gpuInfo;\n }\n const gl = this.gl,\n gpuInfo = { renderer: '', vendor: '' };\n if (!gl) {\n return gpuInfo;\n }\n const ext = gl.getExtension('WEBGL_debug_renderer_info');\n if (ext) {\n const renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);\n const vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);\n if (renderer) {\n gpuInfo.renderer = renderer.toLowerCase();\n }\n if (vendor) {\n gpuInfo.vendor = vendor.toLowerCase();\n }\n }\n this.gpuInfo = gpuInfo;\n return gpuInfo;\n }\n}\n\nfunction resizeCanvasIfNeeded(pipelineState: TWebGLPipelineState): void {\n const targetCanvas = pipelineState.targetCanvas,\n width = targetCanvas.width,\n height = targetCanvas.height,\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight;\n\n if (width !== dWidth || height !== dHeight) {\n targetCanvas.width = dWidth;\n targetCanvas.height = dHeight;\n }\n}\n","import { config } from '../config';\nimport { getEnv } from '../env';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { Canvas2dFilterBackend } from './Canvas2dFilterBackend';\nimport { WebGLFilterBackend } from './WebGLFilterBackend';\n\nexport type FilterBackend = WebGLFilterBackend | Canvas2dFilterBackend;\n\nlet filterBackend: FilterBackend;\n\n/**\n * Verifies if it is possible to initialize webgl or fallback on a canvas2d filtering backend\n */\nexport function initFilterBackend(): FilterBackend {\n const { WebGLProbe } = getEnv();\n WebGLProbe.queryWebGL(createCanvasElement());\n if (config.enableGLFiltering && WebGLProbe.isSupported(config.textureSize)) {\n return new WebGLFilterBackend({ tileSize: config.textureSize });\n } else {\n return new Canvas2dFilterBackend();\n }\n}\n\n/**\n * Get the current fabricJS filter backend or initialize one if not available yet\n * @param [strict] pass `true` to create the backend if it wasn't created yet (default behavior),\n * pass `false` to get the backend ref without mutating it\n */\nexport function getFilterBackend(strict = true): FilterBackend {\n if (!filterBackend && strict) {\n filterBackend = initFilterBackend();\n }\n return filterBackend;\n}\n\nexport function setFilterBackend(backend: FilterBackend) {\n filterBackend = backend;\n}\n","import { getFabricDocument, getEnv } from '../env';\nimport type { BaseFilter } from '../filters/BaseFilter';\nimport { getFilterBackend } from '../filters/FilterBackend';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type {\n TClassProperties,\n TCrossOrigin,\n TSize,\n Abortable,\n TOptions,\n} from '../typedefs';\nimport { uid } from '../util/internals/uid';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { findScaleToCover, findScaleToFit } from '../util/misc/findScaleTo';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\nimport {\n enlivenObjectEnlivables,\n enlivenObjects,\n loadImage,\n} from '../util/misc/objectEnlive';\nimport { parsePreserveAspectRatioAttribute } from '../util/misc/svgParsing';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { WebGLFilterBackend } from '../filters/WebGLFilterBackend';\nimport { FILL, NONE } from '../constants';\nimport { getDocumentFromElement } from '../util/dom_misc';\nimport type { CSSRules } from '../parser/typedefs';\nimport type { Resize } from '../filters/Resize';\nimport type { TCachedFabricObject } from './Object/Object';\nimport { log } from '../util/internals/console';\n\n// @todo Would be nice to have filtering code not imported directly.\n\nexport type ImageSource =\n | HTMLImageElement\n | HTMLVideoElement\n | HTMLCanvasElement;\n\ninterface UniqueImageProps {\n srcFromAttribute: boolean;\n minimumScaleTrigger: number;\n cropX: number;\n cropY: number;\n imageSmoothing: boolean;\n filters: BaseFilter>[];\n resizeFilter?: Resize;\n}\n\nexport const imageDefaultValues: Partial> = {\n strokeWidth: 0,\n srcFromAttribute: false,\n minimumScaleTrigger: 0.5,\n cropX: 0,\n cropY: 0,\n imageSmoothing: true,\n};\n\nexport interface SerializedImageProps extends SerializedObjectProps {\n src: string;\n crossOrigin: TCrossOrigin;\n filters: any[];\n resizeFilter?: any;\n cropX: number;\n cropY: number;\n}\n\nexport interface ImageProps extends FabricObjectProps, UniqueImageProps {}\n\nconst IMAGE_PROPS = ['cropX', 'cropY'] as const;\n\n/**\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#images}\n */\nexport class FabricImage<\n Props extends TOptions = Partial,\n SProps extends SerializedImageProps = SerializedImageProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements ImageProps\n{\n /**\n * When calling {@link FabricImage.getSrc}, return value from element src with `element.getAttribute('src')`.\n * This allows for relative urls as image src.\n * @since 2.7.0\n * @type Boolean\n * @default false\n */\n declare srcFromAttribute: boolean;\n\n /**\n * private\n * contains last value of scaleX to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n protected _lastScaleX = 1;\n\n /**\n * private\n * contains last value of scaleY to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n protected _lastScaleY = 1;\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n protected _filterScalingX = 1;\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n protected _filterScalingY = 1;\n\n /**\n * minimum scale factor under which any resizeFilter is triggered to resize the image\n * 0 will disable the automatic resize. 1 will trigger automatically always.\n * number bigger than 1 are not implemented yet.\n * @type Number\n */\n declare minimumScaleTrigger: number;\n\n /**\n * key used to retrieve the texture representing this image\n * @since 2.0.0\n * @type String\n * @default\n */\n declare cacheKey: string;\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n declare cropX: number;\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n declare cropY: number;\n\n /**\n * Indicates whether this canvas will use image smoothing when painting this image.\n * Also influence if the cacheCanvas for this image uses imageSmoothing\n * @since 4.0.0-beta.11\n * @type Boolean\n * @default\n */\n declare imageSmoothing: boolean;\n\n declare preserveAspectRatio: string;\n\n protected declare src: string;\n\n declare filters: BaseFilter>[];\n declare resizeFilter: Resize;\n\n declare _element: ImageSource;\n declare _filteredEl?: HTMLCanvasElement;\n declare _originalElement: ImageSource;\n\n static type = 'Image';\n\n static cacheProperties = [...cacheProperties, ...IMAGE_PROPS];\n\n static ownDefaults = imageDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...FabricImage.ownDefaults,\n };\n }\n /**\n * Constructor\n * Image can be initialized with any canvas drawable or a string.\n * The string should be a url and will be loaded as an image.\n * Canvas and Image element work out of the box, while videos require extra code to work.\n * Please check video element events for seeking.\n * @param {ImageSource | string} element Image element\n * @param {Object} [options] Options object\n */\n constructor(elementId: string, options?: Props);\n constructor(element: ImageSource, options?: Props);\n constructor(arg0: ImageSource | string, options?: Props) {\n super();\n this.filters = [];\n Object.assign(this, FabricImage.ownDefaults);\n this.setOptions(options);\n this.cacheKey = `texture${uid()}`;\n this.setElement(\n typeof arg0 === 'string'\n ? ((\n (this.canvas && getDocumentFromElement(this.canvas.getElement())) ||\n getFabricDocument()\n ).getElementById(arg0) as ImageSource)\n : arg0,\n options,\n );\n }\n\n /**\n * Returns image element which this instance if based on\n */\n getElement() {\n return this._element;\n }\n\n /**\n * Sets image element for this instance to a specified one.\n * If filters defined they are applied to new image.\n * You might need to call `canvas.renderAll` and `object.setCoords` after replacing, to render new image and update controls area.\n * @param {HTMLImageElement} element\n * @param {Partial} [size] Options object\n */\n setElement(element: ImageSource, size: Partial = {}) {\n this.removeTexture(this.cacheKey);\n this.removeTexture(`${this.cacheKey}_filtered`);\n this._element = element;\n this._originalElement = element;\n this._setWidthHeight(size);\n element.classList.add(FabricImage.CSS_CANVAS);\n if (this.filters.length !== 0) {\n this.applyFilters();\n }\n // resizeFilters work on the already filtered copy.\n // we need to apply resizeFilters AFTER normal filters.\n // applyResizeFilters is run more often than normal filters\n // and is triggered by user interactions rather than dev code\n if (this.resizeFilter) {\n this.applyResizeFilters();\n }\n }\n\n /**\n * Delete a single texture if in webgl mode\n */\n removeTexture(key: string) {\n const backend = getFilterBackend(false);\n if (backend instanceof WebGLFilterBackend) {\n backend.evictCachesForKey(key);\n }\n }\n\n /**\n * Delete textures, reference to elements and eventually JSDOM cleanup\n */\n dispose() {\n super.dispose();\n this.removeTexture(this.cacheKey);\n this.removeTexture(`${this.cacheKey}_filtered`);\n this._cacheContext = null;\n (\n ['_originalElement', '_element', '_filteredEl', '_cacheCanvas'] as const\n ).forEach((elementKey) => {\n const el = this[elementKey];\n el && getEnv().dispose(el);\n // @ts-expect-error disposing\n this[elementKey] = undefined;\n });\n }\n\n /**\n * Get the crossOrigin value (of the corresponding image element)\n */\n getCrossOrigin(): string | null {\n return (\n this._originalElement &&\n ((this._originalElement as any).crossOrigin || null)\n );\n }\n\n /**\n * Returns original size of an image\n */\n getOriginalSize() {\n const element = this.getElement() as any;\n if (!element) {\n return {\n width: 0,\n height: 0,\n };\n }\n return {\n width: element.naturalWidth || element.width,\n height: element.naturalHeight || element.height,\n };\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _stroke(ctx: CanvasRenderingContext2D) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n const w = this.width / 2,\n h = this.height / 2;\n ctx.beginPath();\n ctx.moveTo(-w, -h);\n ctx.lineTo(w, -h);\n ctx.lineTo(w, h);\n ctx.lineTo(-w, h);\n ctx.lineTo(-w, -h);\n ctx.closePath();\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n const filters: Record[] = [];\n this.filters.forEach((filterObj) => {\n filterObj && filters.push(filterObj.toObject());\n });\n return {\n ...super.toObject([...IMAGE_PROPS, ...propertiesToInclude]),\n src: this.getSrc(),\n crossOrigin: this.getCrossOrigin(),\n filters,\n ...(this.resizeFilter\n ? { resizeFilter: this.resizeFilter.toObject() }\n : {}),\n };\n }\n\n /**\n * Returns true if an image has crop applied, inspecting values of cropX,cropY,width,height.\n * @return {Boolean}\n */\n hasCrop() {\n return (\n !!this.cropX ||\n !!this.cropY ||\n this.width < this._element.width ||\n this.height < this._element.height\n );\n }\n\n /**\n * Returns svg representation of an instance\n * @return {string[]} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const imageMarkup: string[] = [],\n element = this._element,\n x = -this.width / 2,\n y = -this.height / 2;\n let svgString: string[] = [],\n strokeSvg: string[] = [],\n clipPath = '',\n imageRendering = '';\n if (!element) {\n return [];\n }\n if (this.hasCrop()) {\n const clipPathId = uid();\n svgString.push(\n '\\n',\n '\\t\\n',\n '\\n',\n );\n clipPath = ' clip-path=\"url(#imageCrop_' + clipPathId + ')\" ';\n }\n if (!this.imageSmoothing) {\n imageRendering = ' image-rendering=\"optimizeSpeed\"';\n }\n imageMarkup.push(\n '\\t element with actual transformation, then offsetting object to the top/left\n // so that object's center aligns with container's left/top\n }\" width=\"${\n element.width || (element as HTMLImageElement).naturalWidth\n }\" height=\"${\n element.height || (element as HTMLImageElement).naturalHeight\n }\"${imageRendering}${clipPath}>\\n`,\n );\n\n if (this.stroke || this.strokeDashArray) {\n const origFill = this.fill;\n this.fill = null;\n strokeSvg = [\n `\\t\\n`,\n ];\n this.fill = origFill;\n }\n if (this.paintFirst !== FILL) {\n svgString = svgString.concat(strokeSvg, imageMarkup);\n } else {\n svgString = svgString.concat(imageMarkup, strokeSvg);\n }\n return svgString;\n }\n\n /**\n * Returns source of an image\n * @param {Boolean} filtered indicates if the src is needed for svg\n * @return {String} Source of an image\n */\n getSrc(filtered?: boolean): string {\n const element = filtered ? this._element : this._originalElement;\n if (element) {\n if ((element as HTMLCanvasElement).toDataURL) {\n return (element as HTMLCanvasElement).toDataURL();\n }\n\n if (this.srcFromAttribute) {\n return element.getAttribute('src') || '';\n } else {\n return (element as HTMLImageElement).src;\n }\n } else {\n return this.src || '';\n }\n }\n\n /**\n * Alias for getSrc\n * @param filtered\n * @deprecated\n */\n getSvgSrc(filtered?: boolean) {\n return this.getSrc(filtered);\n }\n\n /**\n * Loads and sets source of an image\\\n * **IMPORTANT**: It is recommended to abort loading tasks before calling this method to prevent race conditions and unnecessary networking\n * @param {String} src Source string (URL)\n * @param {LoadImageOptions} [options] Options object\n */\n setSrc(src: string, { crossOrigin, signal }: LoadImageOptions = {}) {\n return loadImage(src, { crossOrigin, signal }).then((img) => {\n typeof crossOrigin !== 'undefined' && this.set({ crossOrigin });\n this.setElement(img);\n });\n }\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of an instance\n */\n toString() {\n return `#`;\n }\n\n applyResizeFilters() {\n const filter = this.resizeFilter,\n minimumScale = this.minimumScaleTrigger,\n objectScale = this.getTotalObjectScaling(),\n scaleX = objectScale.x,\n scaleY = objectScale.y,\n elementToFilter = this._filteredEl || this._originalElement;\n if (this.group) {\n this.set('dirty', true);\n }\n if (!filter || (scaleX > minimumScale && scaleY > minimumScale)) {\n this._element = elementToFilter;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n this._lastScaleX = scaleX;\n this._lastScaleY = scaleY;\n return;\n }\n const canvasEl = createCanvasElement(),\n sourceWidth = elementToFilter.width,\n sourceHeight = elementToFilter.height;\n canvasEl.width = sourceWidth;\n canvasEl.height = sourceHeight;\n this._element = canvasEl;\n this._lastScaleX = filter.scaleX = scaleX;\n this._lastScaleY = filter.scaleY = scaleY;\n getFilterBackend().applyFilters(\n [filter],\n elementToFilter,\n sourceWidth,\n sourceHeight,\n this._element,\n );\n this._filterScalingX = canvasEl.width / this._originalElement.width;\n this._filterScalingY = canvasEl.height / this._originalElement.height;\n }\n\n /**\n * Applies filters assigned to this image (from \"filters\" array) or from filter param\n * @method applyFilters\n * @param {Array} filters to be applied\n * @param {Boolean} forResizing specify if the filter operation is a resize operation\n */\n applyFilters(\n filters: BaseFilter>[] = this.filters || [],\n ) {\n filters = filters.filter((filter) => filter && !filter.isNeutralState());\n this.set('dirty', true);\n\n // needs to clear out or WEBGL will not resize correctly\n this.removeTexture(`${this.cacheKey}_filtered`);\n\n if (filters.length === 0) {\n this._element = this._originalElement;\n // this is unsafe and needs to be rethinkend\n this._filteredEl = undefined;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n return;\n }\n\n const imgElement = this._originalElement,\n sourceWidth =\n (imgElement as HTMLImageElement).naturalWidth || imgElement.width,\n sourceHeight =\n (imgElement as HTMLImageElement).naturalHeight || imgElement.height;\n\n if (this._element === this._originalElement) {\n // if the _element a reference to _originalElement\n // we need to create a new element to host the filtered pixels\n const canvasEl = createCanvasElement();\n canvasEl.width = sourceWidth;\n canvasEl.height = sourceHeight;\n this._element = canvasEl;\n this._filteredEl = canvasEl;\n } else if (this._filteredEl) {\n // if the _element is it own element,\n // and we also have a _filteredEl, then we clean up _filteredEl\n // and we assign it to _element.\n // in this way we invalidate the eventual old resize filtered element\n this._element = this._filteredEl;\n this._filteredEl\n .getContext('2d')!\n .clearRect(0, 0, sourceWidth, sourceHeight);\n // we also need to resize again at next renderAll, so remove saved _lastScaleX/Y\n this._lastScaleX = 1;\n this._lastScaleY = 1;\n }\n getFilterBackend().applyFilters(\n filters,\n this._originalElement,\n sourceWidth,\n sourceHeight,\n this._element as HTMLCanvasElement,\n );\n if (\n this._originalElement.width !== this._element.width ||\n this._originalElement.height !== this._element.height\n ) {\n this._filterScalingX = this._element.width / this._originalElement.width;\n this._filterScalingY =\n this._element.height / this._originalElement.height;\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.imageSmoothingEnabled = this.imageSmoothing;\n if (this.isMoving !== true && this.resizeFilter && this._needsResize()) {\n this.applyResizeFilters();\n }\n this._stroke(ctx);\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Paint the cached copy of the object on the target context.\n * it will set the imageSmoothing for the draw operation\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas(\n this: TCachedFabricObject,\n ctx: CanvasRenderingContext2D,\n ) {\n ctx.imageSmoothingEnabled = this.imageSmoothing;\n super.drawCacheOnCanvas(ctx);\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * This is the special image version where we would like to avoid caching where possible.\n * Essentially images do not benefit from caching. They may require caching, and in that\n * case we do it. Also caching an image usually ends in a loss of details.\n * A full performance audit should be done.\n * @return {Boolean}\n */\n shouldCache() {\n return this.needsItsOwnCache();\n }\n\n _renderFill(ctx: CanvasRenderingContext2D) {\n const elementToDraw = this._element;\n if (!elementToDraw) {\n return;\n }\n const scaleX = this._filterScalingX,\n scaleY = this._filterScalingY,\n w = this.width,\n h = this.height,\n // crop values cannot be lesser than 0.\n cropX = Math.max(this.cropX, 0),\n cropY = Math.max(this.cropY, 0),\n elWidth =\n (elementToDraw as HTMLImageElement).naturalWidth || elementToDraw.width,\n elHeight =\n (elementToDraw as HTMLImageElement).naturalHeight ||\n elementToDraw.height,\n sX = cropX * scaleX,\n sY = cropY * scaleY,\n // the width height cannot exceed element width/height, starting from the crop offset.\n sW = Math.min(w * scaleX, elWidth - sX),\n sH = Math.min(h * scaleY, elHeight - sY),\n x = -w / 2,\n y = -h / 2,\n maxDestW = Math.min(w, elWidth / scaleX - cropX),\n maxDestH = Math.min(h, elHeight / scaleY - cropY);\n\n elementToDraw &&\n ctx.drawImage(elementToDraw, sX, sY, sW, sH, x, y, maxDestW, maxDestH);\n }\n\n /**\n * needed to check if image needs resize\n * @private\n */\n _needsResize() {\n const scale = this.getTotalObjectScaling();\n return scale.x !== this._lastScaleX || scale.y !== this._lastScaleY;\n }\n\n /**\n * @private\n * @deprecated unused\n */\n _resetWidthHeight() {\n this.set(this.getOriginalSize());\n }\n\n /**\n * @private\n * Set the width and the height of the image object, using the element or the\n * options.\n */\n _setWidthHeight({ width, height }: Partial = {}) {\n const size = this.getOriginalSize();\n this.width = width || size.width;\n this.height = height || size.height;\n }\n\n /**\n * Calculate offset for center and scale factor for the image in order to respect\n * the preserveAspectRatio attribute\n * @private\n */\n parsePreserveAspectRatioAttribute() {\n const pAR = parsePreserveAspectRatioAttribute(\n this.preserveAspectRatio || '',\n ),\n pWidth = this.width,\n pHeight = this.height,\n parsedAttributes = { width: pWidth, height: pHeight };\n let rWidth = this._element.width,\n rHeight = this._element.height,\n scaleX = 1,\n scaleY = 1,\n offsetLeft = 0,\n offsetTop = 0,\n cropX = 0,\n cropY = 0,\n offset;\n\n if (pAR && (pAR.alignX !== NONE || pAR.alignY !== NONE)) {\n if (pAR.meetOrSlice === 'meet') {\n scaleX = scaleY = findScaleToFit(this._element, parsedAttributes);\n offset = (pWidth - rWidth * scaleX) / 2;\n if (pAR.alignX === 'Min') {\n offsetLeft = -offset;\n }\n if (pAR.alignX === 'Max') {\n offsetLeft = offset;\n }\n offset = (pHeight - rHeight * scaleY) / 2;\n if (pAR.alignY === 'Min') {\n offsetTop = -offset;\n }\n if (pAR.alignY === 'Max') {\n offsetTop = offset;\n }\n }\n if (pAR.meetOrSlice === 'slice') {\n scaleX = scaleY = findScaleToCover(this._element, parsedAttributes);\n offset = rWidth - pWidth / scaleX;\n if (pAR.alignX === 'Mid') {\n cropX = offset / 2;\n }\n if (pAR.alignX === 'Max') {\n cropX = offset;\n }\n offset = rHeight - pHeight / scaleY;\n if (pAR.alignY === 'Mid') {\n cropY = offset / 2;\n }\n if (pAR.alignY === 'Max') {\n cropY = offset;\n }\n rWidth = pWidth / scaleX;\n rHeight = pHeight / scaleY;\n }\n } else {\n scaleX = pWidth / rWidth;\n scaleY = pHeight / rHeight;\n }\n return {\n width: rWidth,\n height: rHeight,\n scaleX,\n scaleY,\n offsetLeft,\n offsetTop,\n cropX,\n cropY,\n };\n }\n\n /**\n * Default CSS class name for canvas\n * @static\n * @type String\n * @default\n */\n static CSS_CANVAS = 'canvas-img';\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link FabricImage.fromElement})\n * @static\n * @see {@link http://www.w3.org/TR/SVG/struct.html#ImageElement}\n */\n static ATTRIBUTE_NAMES = [\n ...SHARED_ATTRIBUTES,\n 'x',\n 'y',\n 'width',\n 'height',\n 'preserveAspectRatio',\n 'xlink:href',\n 'crossOrigin',\n 'image-rendering',\n ];\n\n /**\n * Creates an instance of FabricImage from its object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {object} [options] Options object\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static fromObject>(\n { filters: f, resizeFilter: rf, src, crossOrigin, type, ...object }: T,\n options?: Abortable,\n ) {\n return Promise.all([\n loadImage(src!, { ...options, crossOrigin }),\n f && enlivenObjects>(f, options),\n // TODO: redundant - handled by enlivenObjectEnlivables\n rf && enlivenObjects>([rf], options),\n enlivenObjectEnlivables(object, options),\n ]).then(([el, filters = [], [resizeFilter] = [], hydratedProps = {}]) => {\n return new this(el, {\n ...object,\n // TODO: this creates a difference between image creation and restoring from JSON\n src,\n filters,\n resizeFilter,\n ...hydratedProps,\n });\n });\n }\n\n /**\n * Creates an instance of Image from an URL string\n * @static\n * @param {String} url URL to create an image from\n * @param {LoadImageOptions} [options] Options object\n * @returns {Promise}\n */\n static fromURL>(\n url: string,\n { crossOrigin = null, signal }: LoadImageOptions = {},\n imageOptions?: T,\n ): Promise {\n return loadImage(url, { crossOrigin, signal }).then(\n (img) => new this(img, imageOptions),\n );\n }\n\n /**\n * Returns {@link FabricImage} instance from an SVG element\n * @static\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @param {Function} callback Callback to execute when Image object is created\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable = {},\n cssRules?: CSSRules,\n ) {\n const parsedAttributes = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return this.fromURL(\n parsedAttributes['xlink:href'],\n options,\n parsedAttributes,\n ).catch((err) => {\n log('log', 'Unable to parse Image', err);\n return null;\n });\n }\n}\n\nclassRegistry.setClass(FabricImage);\nclassRegistry.setSVGClass(FabricImage);\n","import { svgNS } from './constants';\nimport {\n parsePreserveAspectRatioAttribute,\n parseUnit,\n} from '../util/misc/svgParsing';\nimport { svgViewBoxElementsRegEx, reViewBoxAttrValue } from './constants';\nimport { NONE } from '../constants';\n\nexport type ParsedViewboxTransform = Partial<{\n width: number;\n height: number;\n minX: number;\n minY: number;\n viewBoxWidth: number;\n viewBoxHeight: number;\n}>;\n\n/**\n * Add a element that envelop all child elements and makes the viewbox transformMatrix descend on all elements\n */\nexport function applyViewboxTransform(\n element: Element,\n): ParsedViewboxTransform {\n if (!svgViewBoxElementsRegEx.test(element.nodeName)) {\n return {};\n }\n const viewBoxAttr: string | null = element.getAttribute('viewBox');\n let scaleX = 1;\n let scaleY = 1;\n let minX = 0;\n let minY = 0;\n let matrix;\n let el;\n const widthAttr = element.getAttribute('width');\n const heightAttr = element.getAttribute('height');\n const x = element.getAttribute('x') || 0;\n const y = element.getAttribute('y') || 0;\n const goodViewbox = viewBoxAttr && reViewBoxAttrValue.test(viewBoxAttr);\n const missingViewBox = !goodViewbox;\n const missingDimAttr =\n !widthAttr || !heightAttr || widthAttr === '100%' || heightAttr === '100%';\n\n let translateMatrix = '';\n let widthDiff = 0;\n let heightDiff = 0;\n\n if (missingViewBox) {\n if (\n (x || y) &&\n element.parentNode &&\n element.parentNode.nodeName !== '#document'\n ) {\n translateMatrix =\n ' translate(' + parseUnit(x || '0') + ' ' + parseUnit(y || '0') + ') ';\n matrix = (element.getAttribute('transform') || '') + translateMatrix;\n element.setAttribute('transform', matrix);\n element.removeAttribute('x');\n element.removeAttribute('y');\n }\n }\n\n if (missingViewBox && missingDimAttr) {\n return {\n width: 0,\n height: 0,\n };\n }\n\n const parsedDim: ParsedViewboxTransform = {\n width: 0,\n height: 0,\n };\n\n if (missingViewBox) {\n parsedDim.width = parseUnit(widthAttr!);\n parsedDim.height = parseUnit(heightAttr!);\n // set a transform for elements that have x y and are inner(only) SVGs\n return parsedDim;\n }\n\n const pasedViewBox = viewBoxAttr.match(reViewBoxAttrValue)!;\n minX = -parseFloat(pasedViewBox[1]);\n minY = -parseFloat(pasedViewBox[2]);\n const viewBoxWidth = parseFloat(pasedViewBox[3]);\n const viewBoxHeight = parseFloat(pasedViewBox[4]);\n parsedDim.minX = minX;\n parsedDim.minY = minY;\n parsedDim.viewBoxWidth = viewBoxWidth;\n parsedDim.viewBoxHeight = viewBoxHeight;\n if (!missingDimAttr) {\n parsedDim.width = parseUnit(widthAttr);\n parsedDim.height = parseUnit(heightAttr);\n scaleX = parsedDim.width / viewBoxWidth;\n scaleY = parsedDim.height / viewBoxHeight;\n } else {\n parsedDim.width = viewBoxWidth;\n parsedDim.height = viewBoxHeight;\n }\n\n // default is to preserve aspect ratio\n const preserveAspectRatio = parsePreserveAspectRatioAttribute(\n element.getAttribute('preserveAspectRatio') || '',\n );\n if (preserveAspectRatio.alignX !== NONE) {\n //translate all container for the effect of Mid, Min, Max\n if (preserveAspectRatio.meetOrSlice === 'meet') {\n scaleY = scaleX = scaleX > scaleY ? scaleY : scaleX;\n // calculate additional translation to move the viewbox\n }\n if (preserveAspectRatio.meetOrSlice === 'slice') {\n scaleY = scaleX = scaleX > scaleY ? scaleX : scaleY;\n // calculate additional translation to move the viewbox\n }\n widthDiff = parsedDim.width - viewBoxWidth * scaleX;\n heightDiff = parsedDim.height - viewBoxHeight * scaleX;\n if (preserveAspectRatio.alignX === 'Mid') {\n widthDiff /= 2;\n }\n if (preserveAspectRatio.alignY === 'Mid') {\n heightDiff /= 2;\n }\n if (preserveAspectRatio.alignX === 'Min') {\n widthDiff = 0;\n }\n if (preserveAspectRatio.alignY === 'Min') {\n heightDiff = 0;\n }\n }\n\n if (\n scaleX === 1 &&\n scaleY === 1 &&\n minX === 0 &&\n minY === 0 &&\n x === 0 &&\n y === 0\n ) {\n return parsedDim;\n }\n if ((x || y) && element.parentNode!.nodeName !== '#document') {\n translateMatrix =\n ' translate(' + parseUnit(x || '0') + ' ' + parseUnit(y || '0') + ') ';\n }\n\n matrix =\n translateMatrix +\n ' matrix(' +\n scaleX +\n ' 0' +\n ' 0 ' +\n scaleY +\n ' ' +\n (minX * scaleX + widthDiff) +\n ' ' +\n (minY * scaleY + heightDiff) +\n ') ';\n // seems unused.\n // parsedDim.viewboxTransform = parseTransformAttribute(matrix);\n if (element.nodeName === 'svg') {\n el = element.ownerDocument.createElementNS(svgNS, 'g');\n // element.firstChild != null\n while (element.firstChild) {\n el.appendChild(element.firstChild);\n }\n element.appendChild(el);\n } else {\n el = element;\n el.removeAttribute('x');\n el.removeAttribute('y');\n matrix = el.getAttribute('transform') + matrix;\n }\n el.setAttribute('transform', matrix);\n return parsedDim;\n}\n","export const getTagName = (node: Element) => node.tagName.replace('svg:', '');\n","import { svgInvalidAncestors } from './constants';\nimport { getSvgRegex } from './getSvgRegex';\nimport { getTagName } from './getTagName';\n\nconst svgInvalidAncestorsRegEx = getSvgRegex(svgInvalidAncestors);\n\nexport function hasInvalidAncestor(element: Element) {\n let _element: Element | null = element;\n while (_element && (_element = _element.parentElement)) {\n if (\n _element &&\n _element.nodeName &&\n svgInvalidAncestorsRegEx.test(getTagName(_element)) &&\n !_element.getAttribute('instantiated_by_use')\n ) {\n return true;\n }\n }\n return false;\n}\n","export function getMultipleNodes(\n doc: Document,\n nodeNames: string[],\n): Element[] {\n let nodeName,\n nodeArray: Element[] = [],\n nodeList,\n i,\n len;\n for (i = 0, len = nodeNames.length; i < len; i++) {\n nodeName = nodeNames[i];\n nodeList = doc.getElementsByTagNameNS(\n 'http://www.w3.org/2000/svg',\n nodeName,\n );\n nodeArray = nodeArray.concat(Array.from(nodeList));\n }\n return nodeArray;\n}\n","import { svgNS } from './constants';\nimport { getMultipleNodes } from './getMultipleNodes';\nimport { applyViewboxTransform } from './applyViewboxTransform';\nimport { parseStyleString } from './parseStyleString';\n\nexport function parseUseDirectives(doc: Document) {\n const nodelist = getMultipleNodes(doc, ['use', 'svg:use']);\n const skipAttributes = ['x', 'y', 'xlink:href', 'href', 'transform'];\n\n for (const useElement of nodelist) {\n const useAttributes: NamedNodeMap = useElement.attributes;\n\n const useAttrMap: Record = {};\n for (const attr of useAttributes) {\n attr.value && (useAttrMap[attr.name] = attr.value);\n }\n\n const xlink = (useAttrMap['xlink:href'] || useAttrMap.href || '').slice(1);\n\n if (xlink === '') {\n return;\n }\n const referencedElement = doc.getElementById(xlink);\n if (referencedElement === null) {\n // if we can't find the target of the xlink, consider this use tag bad, similar to no xlink\n return;\n }\n let clonedOriginal = referencedElement.cloneNode(true) as Element;\n\n const originalAttributes: NamedNodeMap = clonedOriginal.attributes;\n\n const originalAttrMap: Record = {};\n for (const attr of originalAttributes) {\n attr.value && (originalAttrMap[attr.name] = attr.value);\n }\n\n // Transform attribute needs to be merged in a particular way\n const { x = 0, y = 0, transform = '' } = useAttrMap;\n const currentTrans = `${transform} ${\n originalAttrMap.transform || ''\n } translate(${x}, ${y})`;\n\n applyViewboxTransform(clonedOriginal);\n\n if (/^svg$/i.test(clonedOriginal.nodeName)) {\n // if is an SVG, create a group and apply all the attributes on top of it\n const el3 = clonedOriginal.ownerDocument.createElementNS(svgNS, 'g');\n Object.entries(originalAttrMap).forEach(([name, value]) =>\n el3.setAttributeNS(svgNS, name, value),\n );\n el3.append(...clonedOriginal.childNodes);\n clonedOriginal = el3;\n }\n\n for (const attr of useAttributes) {\n if (!attr) {\n continue;\n }\n const { name, value } = attr;\n if (skipAttributes.includes(name)) {\n continue;\n }\n\n if (name === 'style') {\n // when use has a style, merge the two styles, with the ref being priority (not use)\n // priority is by feature. an attribute for fill on the original element\n // will overwrite the fill in style or attribute for tha use\n const styleRecord: Record = {};\n parseStyleString(value!, styleRecord);\n // cleanup styleRecord from attributes of original\n Object.entries(originalAttrMap).forEach(([name, value]) => {\n styleRecord[name] = value;\n });\n // now we can put in the style of the original that will overwrite the original attributes\n parseStyleString(originalAttrMap.style || '', styleRecord);\n const mergedStyles = Object.entries(styleRecord)\n .map((entry) => entry.join(':'))\n .join(';');\n clonedOriginal.setAttribute(name, mergedStyles);\n } else {\n // set the attribute from use element only if the original does not have it already\n !originalAttrMap[name] && clonedOriginal.setAttribute(name, value!);\n }\n }\n\n clonedOriginal.setAttribute('transform', currentTrans);\n clonedOriginal.setAttribute('instantiated_by_use', '1');\n clonedOriginal.removeAttribute('id');\n useElement.parentNode!.replaceChild(clonedOriginal, useElement);\n }\n}\n","const gradientsAttrs = [\n 'gradientTransform',\n 'x1',\n 'x2',\n 'y1',\n 'y2',\n 'gradientUnits',\n 'cx',\n 'cy',\n 'r',\n 'fx',\n 'fy',\n];\nconst xlinkAttr = 'xlink:href';\n\nexport function recursivelyParseGradientsXlink(\n doc: Document,\n gradient: Element,\n) {\n const xLink = gradient.getAttribute(xlinkAttr)?.slice(1) || '',\n referencedGradient = doc.getElementById(xLink);\n if (referencedGradient && referencedGradient.getAttribute(xlinkAttr)) {\n recursivelyParseGradientsXlink(doc, referencedGradient as Element);\n }\n if (referencedGradient) {\n gradientsAttrs.forEach((attr) => {\n const value = referencedGradient.getAttribute(attr);\n if (!gradient.hasAttribute(attr) && value) {\n gradient.setAttribute(attr, value);\n }\n });\n if (!gradient.children.length) {\n const referenceClone = referencedGradient.cloneNode(true);\n while (referenceClone.firstChild) {\n gradient.appendChild(referenceClone.firstChild);\n }\n }\n }\n gradient.removeAttribute(xlinkAttr);\n}\n","import { getMultipleNodes } from './getMultipleNodes';\nimport { recursivelyParseGradientsXlink } from './recursivelyParseGradientsXlink';\n\nconst tagArray = [\n 'linearGradient',\n 'radialGradient',\n 'svg:linearGradient',\n 'svg:radialGradient',\n];\n\n/**\n * Parses an SVG document, returning all of the gradient declarations found in it\n * @param {SVGDocument} doc SVG document to parse\n * @return {Object} Gradient definitions; key corresponds to element id, value -- to gradient definition element\n */\nexport function getGradientDefs(\n doc: Document,\n): Record {\n const elList = getMultipleNodes(doc, tagArray);\n const gradientDefs: Record = {};\n let j = elList.length;\n while (j--) {\n const el = elList[j];\n if (el.getAttribute('xlink:href')) {\n recursivelyParseGradientsXlink(doc, el);\n }\n const id = el.getAttribute('id');\n if (id) {\n gradientDefs[id] = el as SVGGradientElement;\n }\n }\n return gradientDefs;\n}\n","import type { CSSRules } from './typedefs';\n\n/**\n * Returns CSS rules for a given SVG document\n * @param {HTMLElement} doc SVG document to parse\n * @return {Object} CSS rules of this document\n */\nexport function getCSSRules(doc: Document) {\n const styles = doc.getElementsByTagName('style');\n let i;\n let len;\n const allRules: CSSRules = {};\n\n // very crude parsing of style contents\n for (i = 0, len = styles.length; i < len; i++) {\n const styleContents = (styles[i].textContent || '').replace(\n // remove comments\n /\\/\\*[\\s\\S]*?\\*\\//g,\n '',\n );\n\n if (styleContents.trim() === '') {\n continue;\n }\n // recovers all the rule in this form `body { style code... }`\n // rules = styleContents.match(/[^{]*\\{[\\s\\S]*?\\}/g);\n styleContents\n .split('}')\n // remove empty rules and remove everything if we didn't split in at least 2 pieces\n .filter((rule, index, array) => array.length > 1 && rule.trim())\n // at this point we have hopefully an array of rules `body { style code... `\n .forEach((rule) => {\n // if there is more than one opening bracket and the rule starts with '@', it is likely\n // a nested at-rule like @media, @supports, @scope, etc. Ignore these as the code below\n // can not handle it.\n if (\n (rule.match(/{/g) || []).length > 1 &&\n rule.trim().startsWith('@')\n ) {\n return;\n }\n\n const match = rule.split('{'),\n ruleObj: Record = {},\n declaration = match[1].trim(),\n propertyValuePairs = declaration.split(';').filter(function (pair) {\n return pair.trim();\n });\n\n for (i = 0, len = propertyValuePairs.length; i < len; i++) {\n const pair = propertyValuePairs[i].split(':'),\n property = pair[0].trim(),\n value = pair[1].trim();\n ruleObj[property] = value;\n }\n rule = match[0].trim();\n rule.split(',').forEach((_rule) => {\n _rule = _rule.replace(/^svg/i, '').trim();\n if (_rule === '') {\n return;\n }\n allRules[_rule] = {\n ...(allRules[_rule] || {}),\n ...ruleObj,\n };\n });\n });\n }\n return allRules;\n}\n","import { Gradient } from '../gradient/Gradient';\nimport { Group } from '../shapes/Group';\nimport { FabricImage } from '../shapes/Image';\nimport { classRegistry } from '../ClassRegistry';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n qrDecompose,\n} from '../util/misc/matrix';\nimport { removeTransformMatrixForSvgParsing } from '../util/transform_matrix_removal';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { Point } from '../Point';\nimport { CENTER, FILL, STROKE } from '../constants';\nimport { getGradientDefs } from './getGradientDefs';\nimport { getCSSRules } from './getCSSRules';\nimport type { LoadImageOptions } from '../util';\nimport type { CSSRules, TSvgReviverCallback } from './typedefs';\nimport type { ParsedViewboxTransform } from './applyViewboxTransform';\nimport type { SVGOptions } from '../gradient';\nimport { getTagName } from './getTagName';\nimport { parseTransformAttribute } from './parseTransformAttribute';\n\nconst findTag = (el: Element) =>\n classRegistry.getSVGClass(getTagName(el).toLowerCase());\n\ntype StorageType = {\n fill: SVGGradientElement;\n stroke: SVGGradientElement;\n clipPath: Element[];\n};\n\ntype NotParsedFabricObject = FabricObject & {\n fill: string;\n stroke: string;\n clipPath?: string;\n clipRule?: CanvasFillRule;\n};\n\nexport class ElementsParser {\n declare elements: Element[];\n declare options: LoadImageOptions & ParsedViewboxTransform;\n declare reviver?: TSvgReviverCallback;\n declare regexUrl: RegExp;\n declare doc: Document;\n declare clipPaths: Record;\n declare gradientDefs: Record;\n declare cssRules: CSSRules;\n\n constructor(\n elements: Element[],\n options: LoadImageOptions & ParsedViewboxTransform,\n reviver: TSvgReviverCallback | undefined,\n doc: Document,\n clipPaths: Record,\n ) {\n this.elements = elements;\n this.options = options;\n this.reviver = reviver;\n this.regexUrl = /^url\\(['\"]?#([^'\"]+)['\"]?\\)/g;\n this.doc = doc;\n this.clipPaths = clipPaths;\n this.gradientDefs = getGradientDefs(doc);\n this.cssRules = getCSSRules(doc);\n }\n\n parse(): Promise> {\n return Promise.all(\n this.elements.map((element) => this.createObject(element)),\n );\n }\n\n async createObject(el: Element): Promise {\n const klass = findTag(el);\n if (klass) {\n const obj: NotParsedFabricObject = await klass.fromElement(\n el,\n this.options,\n this.cssRules,\n );\n this.resolveGradient(obj, el, FILL);\n this.resolveGradient(obj, el, STROKE);\n if (obj instanceof FabricImage && obj._originalElement) {\n removeTransformMatrixForSvgParsing(\n obj,\n obj.parsePreserveAspectRatioAttribute(),\n );\n } else {\n removeTransformMatrixForSvgParsing(obj);\n }\n await this.resolveClipPath(obj, el);\n this.reviver && this.reviver(el, obj);\n return obj;\n }\n return null;\n }\n\n extractPropertyDefinition(\n obj: NotParsedFabricObject,\n property: 'fill' | 'stroke' | 'clipPath',\n storage: Record,\n ): StorageType[typeof property] | undefined {\n const value = obj[property]!,\n regex = this.regexUrl;\n if (!regex.test(value)) {\n return undefined;\n }\n // verify: can we remove the 'g' flag? and remove lastIndex changes?\n regex.lastIndex = 0;\n // we passed the regex test, so we know is not null;\n const id = regex.exec(value)![1];\n regex.lastIndex = 0;\n // @todo fix this\n return storage[id];\n }\n\n resolveGradient(\n obj: NotParsedFabricObject,\n el: Element,\n property: 'fill' | 'stroke',\n ) {\n const gradientDef = this.extractPropertyDefinition(\n obj,\n property,\n this.gradientDefs,\n ) as SVGGradientElement;\n if (gradientDef) {\n const opacityAttr = el.getAttribute(property + '-opacity');\n const gradient = Gradient.fromElement(gradientDef, obj, {\n ...this.options,\n opacity: opacityAttr,\n } as SVGOptions);\n obj.set(property, gradient);\n }\n }\n\n // TODO: resolveClipPath could be run once per clippath with minor work per object.\n // is a refactor that i m not sure is worth on this code\n async resolveClipPath(obj: NotParsedFabricObject, usingElement: Element) {\n const clipPathElements = this.extractPropertyDefinition(\n obj,\n 'clipPath',\n this.clipPaths,\n ) as Element[];\n if (clipPathElements) {\n const objTransformInv = invertTransform(obj.calcTransformMatrix());\n const clipPathTag = clipPathElements[0].parentElement!;\n let clipPathOwner = usingElement;\n while (\n clipPathOwner.parentElement &&\n clipPathOwner.getAttribute('clip-path') !== obj.clipPath\n ) {\n clipPathOwner = clipPathOwner.parentElement;\n }\n // move the clipPath tag as sibling to the real element that is using it\n clipPathOwner.parentElement!.appendChild(clipPathTag!);\n\n // this multiplication order could be opposite.\n // but i don't have an svg to test it\n // at the first SVG that has a transform on both places and is misplaced\n // try to invert this multiplication order\n const finalTransform = parseTransformAttribute(\n `${clipPathOwner.getAttribute('transform') || ''} ${\n clipPathTag.getAttribute('originalTransform') || ''\n }`,\n );\n\n clipPathTag.setAttribute(\n 'transform',\n `matrix(${finalTransform.join(',')})`,\n );\n\n const container = await Promise.all(\n clipPathElements.map((clipPathElement) => {\n return findTag(clipPathElement)\n .fromElement(clipPathElement, this.options, this.cssRules)\n .then((enlivedClippath: NotParsedFabricObject) => {\n removeTransformMatrixForSvgParsing(enlivedClippath);\n enlivedClippath.fillRule = enlivedClippath.clipRule!;\n delete enlivedClippath.clipRule;\n return enlivedClippath;\n });\n }),\n );\n const clipPath =\n container.length === 1 ? container[0] : new Group(container);\n const gTransform = multiplyTransformMatrices(\n objTransformInv,\n clipPath.calcTransformMatrix(),\n );\n if (clipPath.clipPath) {\n await this.resolveClipPath(clipPath, clipPathOwner);\n }\n const { scaleX, scaleY, angle, skewX, translateX, translateY } =\n qrDecompose(gTransform);\n clipPath.set({\n flipX: false,\n flipY: false,\n });\n clipPath.set({\n scaleX,\n scaleY,\n angle,\n skewX,\n skewY: 0,\n });\n clipPath.setPositionByOrigin(\n new Point(translateX, translateY),\n CENTER,\n CENTER,\n );\n obj.clipPath = clipPath;\n } else {\n // if clip-path does not resolve to any element, delete the property.\n delete obj.clipPath;\n return;\n }\n }\n}\n","import { applyViewboxTransform } from './applyViewboxTransform';\nimport { svgValidTagNamesRegEx } from './constants';\nimport { hasInvalidAncestor } from './hasInvalidAncestor';\nimport { parseUseDirectives } from './parseUseDirectives';\nimport type { SVGParsingOutput, TSvgReviverCallback } from './typedefs';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\nimport { ElementsParser } from './elements_parser';\nimport { log, SignalAbortedError } from '../util/internals/console';\nimport { getTagName } from './getTagName';\n\nconst isValidSvgTag = (el: Element) =>\n svgValidTagNamesRegEx.test(getTagName(el));\n\nexport const createEmptyResponse = (): SVGParsingOutput => ({\n objects: [],\n elements: [],\n options: {},\n allElements: [],\n});\n\n/**\n * Parses an SVG document, converts it to an array of corresponding fabric.* instances and passes them to a callback\n * @static\n * @function\n * @memberOf fabric\n * @param {HTMLElement} doc SVG document to parse\n * @param {TSvgParsedCallback} callback Invoked when the parsing is done, with null if parsing wasn't possible with the list of svg nodes.\n * @param {TSvgReviverCallback} [reviver] Extra callback for further parsing of SVG elements, called after each fabric object has been created.\n * Takes as input the original svg element and the generated `FabricObject` as arguments. Used to inspect extra properties not parsed by fabric,\n * or extra custom manipulation\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin setting to use for external resources\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @return {SVGParsingOutput}\n * {@link SVGParsingOutput} also receives `allElements` array as the last argument. This is the full list of svg nodes available in the document.\n * You may want to use it if you are trying to regroup the objects as they were originally grouped in the SVG. ( This was the reason why it was added )\n */\nexport async function parseSVGDocument(\n doc: Document,\n reviver?: TSvgReviverCallback,\n { crossOrigin, signal }: LoadImageOptions = {},\n): Promise {\n if (signal && signal.aborted) {\n log('log', new SignalAbortedError('parseSVGDocument'));\n // this is an unhappy path, we dont care about speed\n return createEmptyResponse();\n }\n const documentElement = doc.documentElement;\n parseUseDirectives(doc);\n\n const descendants = Array.from(documentElement.getElementsByTagName('*')),\n options = {\n ...applyViewboxTransform(documentElement),\n crossOrigin,\n signal,\n };\n\n const elements = descendants.filter((el) => {\n applyViewboxTransform(el);\n return isValidSvgTag(el) && !hasInvalidAncestor(el); // http://www.w3.org/TR/SVG/struct.html#DefsElement\n });\n if (!elements || (elements && !elements.length)) {\n return {\n ...createEmptyResponse(),\n options,\n allElements: descendants,\n };\n }\n const localClipPaths: Record = {};\n descendants\n .filter((el) => getTagName(el) === 'clipPath')\n .forEach((el) => {\n el.setAttribute('originalTransform', el.getAttribute('transform') || '');\n const id = el.getAttribute('id')!;\n localClipPaths[id] = Array.from(el.getElementsByTagName('*')).filter(\n (el) => isValidSvgTag(el),\n );\n });\n\n // Precedence of rules: style > class > attribute\n const elementParser = new ElementsParser(\n elements,\n options,\n reviver,\n doc,\n localClipPaths,\n );\n\n const instances = await elementParser.parse();\n\n return {\n objects: instances,\n elements,\n options,\n allElements: descendants,\n };\n}\n","import { getFabricWindow } from '../env';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\nimport { parseSVGDocument } from './parseSVGDocument';\nimport type { SVGParsingOutput, TSvgReviverCallback } from './typedefs';\n\n/**\n * Takes string corresponding to an SVG document, and parses it into a set of fabric objects\n * @memberOf fabric\n * @param {String} string representing the svg\n * @param {TSvgParsedCallback} callback Invoked when the parsing is done, with null if parsing wasn't possible with the list of svg nodes.\n * {@link TSvgParsedCallback} also receives `allElements` array as the last argument. This is the full list of svg nodes available in the document.\n * You may want to use it if you are trying to regroup the objects as they were originally grouped in the SVG. ( This was the reason why it was added )\n * @param {TSvgReviverCallback} [reviver] Extra callback for further parsing of SVG elements, called after each fabric object has been created.\n * Takes as input the original svg element and the generated `FabricObject` as arguments. Used to inspect extra properties not parsed by fabric,\n * or extra custom manipulation\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin setting to use for external resources\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n */\nexport function loadSVGFromString(\n string: string,\n reviver?: TSvgReviverCallback,\n options?: LoadImageOptions,\n): Promise {\n const parser = new (getFabricWindow().DOMParser)(),\n // should we use `image/svg+xml` here?\n doc = parser.parseFromString(string.trim(), 'text/xml');\n return parseSVGDocument(doc, reviver, options);\n}\n","import { request } from '../util/internals/dom_request';\nimport { parseSVGDocument, createEmptyResponse } from './parseSVGDocument';\nimport type { SVGParsingOutput, TSvgReviverCallback } from './typedefs';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\n\n/**\n * Takes url corresponding to an SVG document, and parses it into a set of fabric objects.\n * Note that SVG is fetched via XMLHttpRequest, so it needs to conform to SOP (Same Origin Policy)\n * @memberOf fabric\n * @param {string} url where the SVG is\n * @param {TSvgParsedCallback} callback Invoked when the parsing is done, with null if parsing wasn't possible with the list of svg nodes.\n * {@link TSvgParsedCallback} also receives `allElements` array as the last argument. This is the full list of svg nodes available in the document.\n * You may want to use it if you are trying to regroup the objects as they were originally grouped in the SVG. ( This was the reason why it was added )\n * @param {TSvgReviverCallback} [reviver] Extra callback for further parsing of SVG elements, called after each fabric object has been created.\n * Takes as input the original svg element and the generated `FabricObject` as arguments. Used to inspect extra properties not parsed by fabric,\n * or extra custom manipulation\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin setting to use for external resources\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n */\nexport function loadSVGFromURL(\n url: string,\n reviver?: TSvgReviverCallback,\n options: LoadImageOptions = {},\n): Promise {\n // need to handle error properly\n return new Promise((resolve, reject) => {\n const onComplete = (r: XMLHttpRequest) => {\n const xml = r.responseXML;\n if (xml) {\n resolve(xml);\n }\n reject();\n };\n\n request(url.replace(/^\\n\\s*/, '').trim(), {\n onComplete,\n signal: options.signal,\n });\n })\n .then((parsedDoc) => parseSVGDocument(parsedDoc, reviver, options))\n .catch(() => {\n // this is an unhappy path, we dont care about speed\n return createEmptyResponse();\n });\n}\n","import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Polyline } from '../shapes/Polyline';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { MODIFY_POLY } from '../constants';\n\nconst ACTION_NAME: TModificationEvents = MODIFY_POLY;\n\ntype TTransformAnchor = Transform & { pointIndex: number };\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nexport const createPolyPositionHandler = (pointIndex: number) => {\n return function (dim: Point, finalMatrix: TMat2D, polyObject: Polyline) {\n const { points, pathOffset } = polyObject;\n return new Point(points[pointIndex])\n .subtract(pathOffset)\n .transform(\n multiplyTransformMatrices(\n polyObject.getViewportTransform(),\n polyObject.calcTransformMatrix(),\n ),\n );\n };\n};\n\n/**\n * This function defines what the control does.\n * It'll be called on every mouse move after a control has been clicked and is being dragged.\n * The function receives as argument the mouse event, the current transform object\n * and the current position in canvas coordinate `transform.target` is a reference to the\n * current object being transformed.\n */\nexport const polyActionHandler = (\n eventData: TPointerEvent,\n transform: TTransformAnchor,\n x: number,\n y: number,\n) => {\n const { target, pointIndex } = transform;\n const poly = target as Polyline;\n const mouseLocalPosition = sendPointToPlane(\n new Point(x, y),\n undefined,\n poly.calcOwnMatrix(),\n );\n\n poly.points[pointIndex] = mouseLocalPosition.add(poly.pathOffset);\n poly.setDimensions();\n\n return true;\n};\n\n/**\n * Keep the polygon in the same position when we change its `width`/`height`/`top`/`left`.\n */\nexport const factoryPolyActionHandler = (\n pointIndex: number,\n fn: TransformActionHandler,\n) => {\n return function (\n eventData: TPointerEvent,\n transform: Transform,\n x: number,\n y: number,\n ) {\n const poly = transform.target as Polyline,\n anchorPoint = new Point(\n poly.points[(pointIndex > 0 ? pointIndex : poly.points.length) - 1],\n ),\n anchorPointInParentPlane = anchorPoint\n .subtract(poly.pathOffset)\n .transform(poly.calcOwnMatrix()),\n actionPerformed = fn(eventData, { ...transform, pointIndex }, x, y);\n\n const newAnchorPointInParentPlane = anchorPoint\n .subtract(poly.pathOffset)\n .transform(poly.calcOwnMatrix());\n\n const diff = newAnchorPointInParentPlane.subtract(anchorPointInParentPlane);\n poly.left -= diff.x;\n poly.top -= diff.y;\n\n return actionPerformed;\n };\n};\n\nexport const createPolyActionHandler = (pointIndex: number) =>\n wrapWithFireEvent(\n ACTION_NAME,\n factoryPolyActionHandler(pointIndex, polyActionHandler),\n );\n\nexport function createPolyControls(\n poly: Polyline,\n options?: Partial,\n): Record;\nexport function createPolyControls(\n numOfControls: number,\n options?: Partial,\n): Record;\nexport function createPolyControls(\n arg0: number | Polyline,\n options: Partial = {},\n) {\n const controls = {} as Record;\n for (\n let idx = 0;\n idx < (typeof arg0 === 'number' ? arg0 : arg0.points.length);\n idx++\n ) {\n controls[`p${idx}`] = new Control({\n actionName: ACTION_NAME,\n positionHandler: createPolyPositionHandler(idx),\n actionHandler: createPolyActionHandler(idx),\n ...options,\n });\n }\n return controls;\n}\n","import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Path } from '../shapes/Path';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n} from '../EventTypeDefs';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport type { TSimpleParseCommandType } from '../util/path/typedefs';\nimport type { ControlRenderingStyleOverride } from './controlRendering';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo } from './util';\n\nconst ACTION_NAME: TModificationEvents = 'modifyPath' as const;\n\ntype TTransformAnchor = Transform;\n\nexport type PathPointControlStyle = {\n controlFill?: string;\n controlStroke?: string;\n connectionDashArray?: number[];\n};\n\nconst calcPathPointPosition = (\n pathObject: Path,\n commandIndex: number,\n pointIndex: number,\n) => {\n const { path, pathOffset } = pathObject;\n const command = path[commandIndex];\n return new Point(\n (command[pointIndex] as number) - pathOffset.x,\n (command[pointIndex + 1] as number) - pathOffset.y,\n ).transform(\n multiplyTransformMatrices(\n pathObject.getViewportTransform(),\n pathObject.calcTransformMatrix(),\n ),\n );\n};\n\nconst movePathPoint = (\n pathObject: Path,\n x: number,\n y: number,\n commandIndex: number,\n pointIndex: number,\n) => {\n const { path, pathOffset } = pathObject;\n\n const anchorCommand =\n path[(commandIndex > 0 ? commandIndex : path.length) - 1];\n const anchorPoint = new Point(\n anchorCommand[pointIndex] as number,\n anchorCommand[pointIndex + 1] as number,\n );\n\n const anchorPointInParentPlane = anchorPoint\n .subtract(pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const mouseLocalPosition = sendPointToPlane(\n new Point(x, y),\n undefined,\n pathObject.calcOwnMatrix(),\n );\n\n path[commandIndex][pointIndex] = mouseLocalPosition.x + pathOffset.x;\n path[commandIndex][pointIndex + 1] = mouseLocalPosition.y + pathOffset.y;\n pathObject.setDimensions();\n\n const newAnchorPointInParentPlane = anchorPoint\n .subtract(pathObject.pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const diff = newAnchorPointInParentPlane.subtract(anchorPointInParentPlane);\n pathObject.left -= diff.x;\n pathObject.top -= diff.y;\n pathObject.set('dirty', true);\n return true;\n};\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nfunction pathPositionHandler(\n this: PathPointControl,\n dim: Point,\n finalMatrix: TMat2D,\n pathObject: Path,\n) {\n const { commandIndex, pointIndex } = this;\n return calcPathPointPosition(pathObject, commandIndex, pointIndex);\n}\n\n/**\n * This function defines what the control does.\n * It'll be called on every mouse move after a control has been clicked and is being dragged.\n * The function receives as argument the mouse event, the current transform object\n * and the current position in canvas coordinate `transform.target` is a reference to the\n * current object being transformed.\n */\nfunction pathActionHandler(\n this: PathPointControl,\n eventData: TPointerEvent,\n transform: TTransformAnchor,\n x: number,\n y: number,\n) {\n const { target } = transform;\n const { commandIndex, pointIndex } = this;\n const actionPerformed = movePathPoint(\n target as Path,\n x,\n y,\n commandIndex,\n pointIndex,\n );\n if (actionPerformed) {\n fireEvent(this.actionName as TModificationEvents, {\n ...commonEventInfo(eventData, transform, x, y),\n commandIndex,\n pointIndex,\n });\n }\n return actionPerformed;\n}\n\nconst indexFromPrevCommand = (previousCommandType: TSimpleParseCommandType) =>\n previousCommandType === 'C' ? 5 : previousCommandType === 'Q' ? 3 : 1;\n\nclass PathPointControl extends Control {\n declare commandIndex: number;\n declare pointIndex: number;\n declare controlFill: string;\n declare controlStroke: string;\n constructor(options?: Partial) {\n super(options);\n }\n\n render(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path,\n ) {\n const overrides: ControlRenderingStyleOverride = {\n ...styleOverride,\n cornerColor: this.controlFill,\n cornerStrokeColor: this.controlStroke,\n transparentCorners: !this.controlFill,\n };\n super.render(ctx, left, top, overrides, fabricObject);\n }\n}\n\nclass PathControlPointControl extends PathPointControl {\n declare connectionDashArray?: number[];\n declare connectToCommandIndex: number;\n declare connectToPointIndex: number;\n constructor(options?: Partial) {\n super(options);\n }\n\n render(\n this: PathControlPointControl,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path,\n ) {\n const { path } = fabricObject;\n const {\n commandIndex,\n pointIndex,\n connectToCommandIndex,\n connectToPointIndex,\n } = this;\n ctx.save();\n ctx.strokeStyle = this.controlStroke;\n if (this.connectionDashArray) {\n ctx.setLineDash(this.connectionDashArray);\n }\n const [commandType] = path[commandIndex];\n const point = calcPathPointPosition(\n fabricObject,\n connectToCommandIndex,\n connectToPointIndex,\n );\n\n if (commandType === 'Q') {\n // one control point connects to 2 points\n const point2 = calcPathPointPosition(\n fabricObject,\n commandIndex,\n pointIndex + 2,\n );\n ctx.moveTo(point2.x, point2.y);\n ctx.lineTo(left, top);\n } else {\n ctx.moveTo(left, top);\n }\n ctx.lineTo(point.x, point.y);\n ctx.stroke();\n ctx.restore();\n\n super.render(ctx, left, top, styleOverride, fabricObject);\n }\n}\n\nconst createControl = (\n commandIndexPos: number,\n pointIndexPos: number,\n isControlPoint: boolean,\n options: Partial & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n },\n connectToCommandIndex?: number,\n connectToPointIndex?: number,\n) =>\n new (isControlPoint ? PathControlPointControl : PathPointControl)({\n commandIndex: commandIndexPos,\n pointIndex: pointIndexPos,\n actionName: ACTION_NAME,\n positionHandler: pathPositionHandler,\n actionHandler: pathActionHandler,\n connectToCommandIndex,\n connectToPointIndex,\n ...options,\n ...(isControlPoint ? options.controlPointStyle : options.pointStyle),\n } as Partial);\n\nexport function createPathControls(\n path: Path,\n options: Partial & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n } = {},\n): Record {\n const controls = {} as Record;\n let previousCommandType: TSimpleParseCommandType = 'M';\n path.path.forEach((command, commandIndex) => {\n const commandType = command[0];\n\n if (commandType !== 'Z') {\n controls[`c_${commandIndex}_${commandType}`] = createControl(\n commandIndex,\n command.length - 2,\n false,\n options,\n );\n }\n switch (commandType) {\n case 'C':\n controls[`c_${commandIndex}_C_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex - 1,\n indexFromPrevCommand(previousCommandType),\n );\n controls[`c_${commandIndex}_C_CP_2`] = createControl(\n commandIndex,\n 3,\n true,\n options,\n commandIndex,\n 5,\n );\n break;\n case 'Q':\n controls[`c_${commandIndex}_Q_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex,\n 3,\n );\n break;\n }\n previousCommandType = commandType;\n });\n return controls;\n}\n","import { getFabricWindow } from '../env';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { WebGLFilterBackend } from './WebGLFilterBackend';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\n\nexport const isWebGLPipelineState = (\n options: TWebGLPipelineState | T2DPipelineState,\n): options is TWebGLPipelineState => {\n return (options as TWebGLPipelineState).webgl !== undefined;\n};\n\n/**\n * Pick a method to copy data from GL context to 2d canvas. In some browsers using\n * drawImage should be faster, but is also bugged for a small combination of old hardware\n * and drivers.\n * putImageData is faster than drawImage for that specific operation.\n */\nexport const isPutImageFaster = (width: number, height: number): boolean => {\n const targetCanvas = createCanvasElement();\n const sourceCanvas = createCanvasElement();\n const gl = sourceCanvas.getContext('webgl')!;\n // eslint-disable-next-line no-undef\n const imageBuffer = new ArrayBuffer(width * height * 4);\n\n const testContext = {\n imageBuffer: imageBuffer,\n } as unknown as Required;\n const testPipelineState = {\n destinationWidth: width,\n destinationHeight: height,\n targetCanvas: targetCanvas,\n } as unknown as TWebGLPipelineState;\n let startTime;\n targetCanvas.width = width;\n targetCanvas.height = height;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2D.call(\n testContext,\n gl,\n testPipelineState,\n );\n const drawImageTime = getFabricWindow().performance.now() - startTime;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2DPutImageData.call(\n testContext,\n gl,\n testPipelineState,\n );\n const putImageDataTime = getFabricWindow().performance.now() - startTime;\n\n return drawImageTime > putImageDataTime;\n};\n","export const highPsourceCode = `precision highp float`;\n\nexport const identityFragmentShader = `\n ${highPsourceCode};\n varying vec2 vTexCoord;\n uniform sampler2D uTexture;\n void main() {\n gl_FragColor = texture2D(uTexture, vTexCoord);\n }`;\n\nexport const vertexSource = `\n attribute vec2 aPosition;\n varying vec2 vTexCoord;\n void main() {\n vTexCoord = aPosition;\n gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n }`;\n","import { getEnv } from '../env';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type {\n T2DPipelineState,\n TWebGLAttributeLocationMap,\n TWebGLPipelineState,\n TWebGLProgramCacheItem,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport {\n highPsourceCode,\n identityFragmentShader,\n vertexSource,\n} from './shaders/baseFilter';\nimport type { Abortable } from '../typedefs';\nimport { FabricError } from '../util/internals/console';\n\nconst regex = new RegExp(highPsourceCode, 'g');\n\nexport class BaseFilter<\n Name extends string,\n OwnProps extends Record = object,\n> {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n get type(): Name {\n return (this.constructor as typeof BaseFilter).type as Name;\n }\n\n /**\n * The class type. Used to identify which class this is.\n * This is used for serialization purposes and internally it can be used\n * to identify classes. As a developer you could use `instance of Class`\n * but to avoid importing all the code and blocking tree shaking we try\n * to avoid doing that.\n */\n static type = 'BaseFilter';\n\n /**\n * Contains the uniform locations for the fragment shader.\n * uStepW and uStepH are handled by the BaseFilter, each filter class\n * needs to specify all the one that are needed\n */\n static uniformLocations: string[] = [];\n\n declare static defaults: Record;\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor({\n type,\n ...options\n }: { type?: never } & Partial & Record = {}) {\n Object.assign(\n this,\n (this.constructor as typeof BaseFilter).defaults,\n options,\n );\n }\n\n protected getFragmentSource(): string {\n return identityFragmentShader;\n }\n\n getVertexSource(): string {\n return vertexSource;\n }\n\n /**\n * Compile this filter's shader program.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context to use for shader compilation.\n * @param {String} fragmentSource fragmentShader source for compilation\n * @param {String} vertexSource vertexShader source for compilation\n */\n createProgram(\n gl: WebGLRenderingContext,\n fragmentSource: string = this.getFragmentSource(),\n vertexSource: string = this.getVertexSource(),\n ) {\n const {\n WebGLProbe: { GLPrecision = 'highp' },\n } = getEnv();\n if (GLPrecision !== 'highp') {\n fragmentSource = fragmentSource.replace(\n regex,\n highPsourceCode.replace('highp', GLPrecision),\n );\n }\n const vertexShader = gl.createShader(gl.VERTEX_SHADER);\n const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n const program = gl.createProgram();\n\n if (!vertexShader || !fragmentShader || !program) {\n throw new FabricError(\n 'Vertex, fragment shader or program creation error',\n );\n }\n gl.shaderSource(vertexShader, vertexSource);\n gl.compileShader(vertexShader);\n if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n throw new FabricError(\n `Vertex shader compile error for ${this.type}: ${gl.getShaderInfoLog(\n vertexShader,\n )}`,\n );\n }\n\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n throw new FabricError(\n `Fragment shader compile error for ${this.type}: ${gl.getShaderInfoLog(\n fragmentShader,\n )}`,\n );\n }\n\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n throw new FabricError(\n `Shader link error for \"${this.type}\" ${gl.getProgramInfoLog(program)}`,\n );\n }\n\n const uniformLocations = this.getUniformLocations(gl, program) || {};\n uniformLocations.uStepW = gl.getUniformLocation(program, 'uStepW');\n uniformLocations.uStepH = gl.getUniformLocation(program, 'uStepH');\n\n return {\n program,\n attributeLocations: this.getAttributeLocations(gl, program),\n uniformLocations,\n };\n }\n\n /**\n * Return a map of attribute names to WebGLAttributeLocation objects.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take attribute locations.\n * @returns {Object} A map of attribute names to attribute locations.\n */\n getAttributeLocations(\n gl: WebGLRenderingContext,\n program: WebGLProgram,\n ): TWebGLAttributeLocationMap {\n return {\n aPosition: gl.getAttribLocation(program, 'aPosition'),\n };\n }\n\n /**\n * Return a map of uniform names to WebGLUniformLocation objects.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take uniform locations.\n * @returns {Object} A map of uniform names to uniform locations.\n */\n getUniformLocations(\n gl: WebGLRenderingContext,\n program: WebGLProgram,\n ): TWebGLUniformLocationMap {\n const locations = (this.constructor as unknown as typeof BaseFilter)\n .uniformLocations;\n\n const uniformLocations: Record = {};\n for (let i = 0; i < locations.length; i++) {\n uniformLocations[locations[i]] = gl.getUniformLocation(\n program,\n locations[i],\n );\n }\n return uniformLocations;\n }\n\n /**\n * Send attribute data from this filter to its shader program on the GPU.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {Object} attributeLocations A map of shader attribute names to their locations.\n */\n sendAttributeData(\n gl: WebGLRenderingContext,\n attributeLocations: Record,\n aPositionData: Float32Array,\n ) {\n const attributeLocation = attributeLocations.aPosition;\n const buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.enableVertexAttribArray(attributeLocation);\n gl.vertexAttribPointer(attributeLocation, 2, gl.FLOAT, false, 0, 0);\n gl.bufferData(gl.ARRAY_BUFFER, aPositionData, gl.STATIC_DRAW);\n }\n\n _setupFrameBuffer(options: TWebGLPipelineState) {\n const gl = options.context;\n if (options.passes > 1) {\n const width = options.destinationWidth;\n const height = options.destinationHeight;\n if (options.sourceWidth !== width || options.sourceHeight !== height) {\n gl.deleteTexture(options.targetTexture);\n options.targetTexture = options.filterBackend.createTexture(\n gl,\n width,\n height,\n );\n }\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n options.targetTexture,\n 0,\n );\n } else {\n // draw last filter on canvas and not to framebuffer.\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.finish();\n }\n }\n\n _swapTextures(options: TWebGLPipelineState) {\n options.passes--;\n options.pass++;\n const temp = options.targetTexture;\n options.targetTexture = options.sourceTexture;\n options.sourceTexture = temp;\n }\n\n /**\n * Generic isNeutral implementation for one parameter based filters.\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * Other filters may need their own version ( ColorMatrix, HueRotation, gamma, ComposedFilter )\n * @param {Object} options\n **/\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isNeutralState(options?: any): boolean {\n return false;\n }\n\n /**\n * Apply this filter to the input image data provided.\n *\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n this._setupFrameBuffer(options);\n this.applyToWebGL(options);\n this._swapTextures(options);\n } else {\n this.applyTo2d(options);\n }\n }\n\n applyTo2d(_options: T2DPipelineState): void {\n // override by subclass\n }\n\n /**\n * Returns a string that represent the current selected shader code for the filter.\n * Used to force recompilation when parameters change or to retrieve the shader from cache\n * @type string\n **/\n getCacheKey(): string {\n return this.type;\n }\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n * @return {WebGLProgram} the compiled program shader\n */\n retrieveShader(options: TWebGLPipelineState): TWebGLProgramCacheItem {\n const key = this.getCacheKey();\n if (!options.programCache[key]) {\n options.programCache[key] = this.createProgram(options.context);\n }\n return options.programCache[key];\n }\n\n /**\n * Apply this filter using webgl.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.originalTexture The texture of the original input image.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyToWebGL(options: TWebGLPipelineState) {\n const gl = options.context;\n const shader = this.retrieveShader(options);\n if (options.pass === 0 && options.originalTexture) {\n gl.bindTexture(gl.TEXTURE_2D, options.originalTexture);\n } else {\n gl.bindTexture(gl.TEXTURE_2D, options.sourceTexture);\n }\n gl.useProgram(shader.program);\n this.sendAttributeData(gl, shader.attributeLocations, options.aPosition);\n\n gl.uniform1f(shader.uniformLocations.uStepW, 1 / options.sourceWidth);\n gl.uniform1f(shader.uniformLocations.uStepH, 1 / options.sourceHeight);\n\n this.sendUniformData(gl, shader.uniformLocations);\n gl.viewport(0, 0, options.destinationWidth, options.destinationHeight);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n bindAdditionalTexture(\n gl: WebGLRenderingContext,\n texture: WebGLTexture,\n textureUnit: number,\n ) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n // reset active texture to 0 as usual\n gl.activeTexture(gl.TEXTURE0);\n }\n\n unbindAdditionalTexture(gl: WebGLRenderingContext, textureUnit: number) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.activeTexture(gl.TEXTURE0);\n }\n\n /**\n * Send uniform data from this filter to its shader program on the GPU.\n *\n * Intended to be overridden by subclasses.\n *\n * @param {WebGLRenderingContext} _gl The canvas context used to compile the shader program.\n * @param {Object} _uniformLocations A map of shader uniform names to their locations.\n */\n sendUniformData(\n _gl: WebGLRenderingContext,\n _uniformLocations: TWebGLUniformLocationMap,\n ): void {\n // override by subclass\n }\n\n /**\n * If needed by a 2d filter, this functions can create an helper canvas to be used\n * remember that options.targetCanvas is available for use till end of chain.\n */\n createHelpLayer(options: T2DPipelineState) {\n if (!options.helpLayer) {\n const helpLayer = createCanvasElement();\n helpLayer.width = options.sourceWidth;\n helpLayer.height = options.sourceHeight;\n options.helpLayer = helpLayer;\n }\n }\n\n /**\n * Returns object representation of an instance\n * It will automatically export the default values of a filter,\n * stored in the static defaults property.\n * @return {Object} Object representation of an instance\n */\n toObject(): { type: Name } & OwnProps {\n const defaultKeys = Object.keys(\n (this.constructor as typeof BaseFilter).defaults || {},\n ) as (keyof OwnProps)[];\n\n return {\n type: this.type,\n ...defaultKeys.reduce((acc, key) => {\n acc[key] = this[\n key as keyof this\n ] as unknown as (typeof acc)[typeof key];\n return acc;\n }, {} as OwnProps),\n };\n }\n\n /**\n * Returns a JSON representation of an instance\n * @return {Object} JSON\n */\n toJSON() {\n // delegate, not alias\n return this.toObject();\n }\n\n static async fromObject(\n { type, ...filterOptions }: Record,\n _options: Abortable,\n ): Promise> {\n return new this(filterOptions);\n }\n}\n","export const blendColorFragmentSource = {\n multiply: 'gl_FragColor.rgb *= uColor.rgb;\\n',\n screen:\n 'gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);\\n',\n add: 'gl_FragColor.rgb += uColor.rgb;\\n',\n difference: 'gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);\\n',\n subtract: 'gl_FragColor.rgb -= uColor.rgb;\\n',\n lighten: 'gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);\\n',\n darken: 'gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);\\n',\n exclusion:\n 'gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);\\n',\n overlay: `\n if (uColor.r < 0.5) {\n gl_FragColor.r *= 2.0 * uColor.r;\n } else {\n gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);\n }\n if (uColor.g < 0.5) {\n gl_FragColor.g *= 2.0 * uColor.g;\n } else {\n gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);\n }\n if (uColor.b < 0.5) {\n gl_FragColor.b *= 2.0 * uColor.b;\n } else {\n gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);\n }\n `,\n tint: `\n gl_FragColor.rgb *= (1.0 - uColor.a);\n gl_FragColor.rgb += uColor.rgb;\n `,\n} as const;\n","import { Color } from '../color/Color';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { blendColorFragmentSource } from './shaders/blendColor';\n\nexport type TBlendMode =\n | 'multiply'\n | 'add'\n | 'difference'\n | 'screen'\n | 'subtract'\n | 'darken'\n | 'lighten'\n | 'overlay'\n | 'exclusion'\n | 'tint';\n\ntype BlendColorOwnProps = {\n color: string;\n mode: TBlendMode;\n alpha: number;\n};\n\nexport const blendColorDefaultValues: BlendColorOwnProps = {\n color: '#F95C63',\n mode: 'multiply',\n alpha: 1,\n};\n\n/**\n * Color Blend filter class\n * @example\n * const filter = new BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * const filter = new BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply'\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class BlendColor extends BaseFilter<'BlendColor', BlendColorOwnProps> {\n /**\n * Color to make the blend operation with. default to a reddish color since black or white\n * gives always strong result.\n * @type String\n * @default\n **/\n declare color: BlendColorOwnProps['color'];\n\n /**\n * Blend mode for the filter: one of multiply, add, difference, screen, subtract,\n * darken, lighten, overlay, exclusion, tint.\n * @type String\n * @default\n **/\n declare mode: BlendColorOwnProps['mode'];\n /**\n * alpha value. represent the strength of the blend color operation.\n * @type Number\n * @default\n **/\n declare alpha: BlendColorOwnProps['alpha'];\n\n static defaults = blendColorDefaultValues;\n\n static type = 'BlendColor';\n\n static uniformLocations = ['uColor'];\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n protected getFragmentSource(): string {\n return `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec4 uColor;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n gl_FragColor = color;\n if (color.a > 0.0) {\n ${blendColorFragmentSource[this.mode]}\n }\n }\n `;\n }\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const source = new Color(this.color).getSource();\n const tr = source[0] * this.alpha;\n const tg = source[1] * this.alpha;\n const tb = source[2] * this.alpha;\n const alpha1 = 1 - this.alpha;\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = (r * tr) / 255;\n data[i + 1] = (g * tg) / 255;\n data[i + 2] = (b * tb) / 255;\n break;\n case 'screen':\n data[i] = 255 - ((255 - r) * (255 - tr)) / 255;\n data[i + 1] = 255 - ((255 - g) * (255 - tg)) / 255;\n data[i + 2] = 255 - ((255 - b) * (255 - tb)) / 255;\n break;\n case 'add':\n data[i] = r + tr;\n data[i + 1] = g + tg;\n data[i + 2] = b + tb;\n break;\n case 'difference':\n data[i] = Math.abs(r - tr);\n data[i + 1] = Math.abs(g - tg);\n data[i + 2] = Math.abs(b - tb);\n break;\n case 'subtract':\n data[i] = r - tr;\n data[i + 1] = g - tg;\n data[i + 2] = b - tb;\n break;\n case 'darken':\n data[i] = Math.min(r, tr);\n data[i + 1] = Math.min(g, tg);\n data[i + 2] = Math.min(b, tb);\n break;\n case 'lighten':\n data[i] = Math.max(r, tr);\n data[i + 1] = Math.max(g, tg);\n data[i + 2] = Math.max(b, tb);\n break;\n case 'overlay':\n data[i] =\n tr < 128\n ? (2 * r * tr) / 255\n : 255 - (2 * (255 - r) * (255 - tr)) / 255;\n data[i + 1] =\n tg < 128\n ? (2 * g * tg) / 255\n : 255 - (2 * (255 - g) * (255 - tg)) / 255;\n data[i + 2] =\n tb < 128\n ? (2 * b * tb) / 255\n : 255 - (2 * (255 - b) * (255 - tb)) / 255;\n break;\n case 'exclusion':\n data[i] = tr + r - (2 * tr * r) / 255;\n data[i + 1] = tg + g - (2 * tg * g) / 255;\n data[i + 2] = tb + b - (2 * tb * b) / 255;\n break;\n case 'tint':\n data[i] = tr + r * alpha1;\n data[i + 1] = tg + g * alpha1;\n data[i + 2] = tb + b * alpha1;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const source = new Color(this.color).getSource();\n source[0] = (this.alpha * source[0]) / 255;\n source[1] = (this.alpha * source[1]) / 255;\n source[2] = (this.alpha * source[2]) / 255;\n source[3] = this.alpha;\n gl.uniform4fv(uniformLocations.uColor, source);\n }\n}\n\nclassRegistry.setClass(BlendColor);\n","import type { TBlendImageMode } from '../BlendImage';\n\nexport const fragmentSource: Record = {\n multiply: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform sampler2D uImage;\n uniform vec4 uColor;\n varying vec2 vTexCoord;\n varying vec2 vTexCoord2;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n vec4 color2 = texture2D(uImage, vTexCoord2);\n color.rgba *= color2.rgba;\n gl_FragColor = color;\n }\n `,\n mask: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform sampler2D uImage;\n uniform vec4 uColor;\n varying vec2 vTexCoord;\n varying vec2 vTexCoord2;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n vec4 color2 = texture2D(uImage, vTexCoord2);\n color.a = color2.a;\n gl_FragColor = color;\n }\n `,\n} as const;\n\nexport const vertexSource = `\n attribute vec2 aPosition;\n varying vec2 vTexCoord;\n varying vec2 vTexCoord2;\n uniform mat3 uTransformMatrix;\n void main() {\n vTexCoord = aPosition;\n vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\n gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n }\n ` as const;\n","import { FabricImage } from '../shapes/Image';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { BaseFilter } from './BaseFilter';\nimport type {\n T2DPipelineState,\n TWebGLPipelineState,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport type { WebGLFilterBackend } from './WebGLFilterBackend';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource, vertexSource } from './shaders/blendImage';\n\nexport type TBlendImageMode = 'multiply' | 'mask';\n\ntype BlendImageOwnProps = {\n mode: TBlendImageMode;\n alpha: number;\n};\n\nexport const blendImageDefaultValues: BlendImageOwnProps = {\n mode: 'multiply',\n alpha: 1,\n};\n\n/**\n * Image Blend filter class\n * @example\n * const filter = new filters.BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * const filter = new BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply'\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class BlendImage extends BaseFilter<'BlendImage', BlendImageOwnProps> {\n /**\n * Image to make the blend operation with.\n **/\n declare image: FabricImage;\n\n /**\n * Blend mode for the filter: either 'multiply' or 'mask'. 'multiply' will\n * multiply the values of each channel (R, G, B, and A) of the filter image by\n * their corresponding values in the base image. 'mask' will only look at the\n * alpha channel of the filter image, and apply those values to the base\n * image's alpha channel.\n * @type String\n * @default\n **/\n declare mode: BlendImageOwnProps['mode'];\n\n /**\n * alpha value. represent the strength of the blend image operation.\n * not implemented.\n **/\n declare alpha: BlendImageOwnProps['alpha'];\n\n static type = 'BlendImage';\n\n static defaults = blendImageDefaultValues;\n\n static uniformLocations = ['uTransformMatrix', 'uImage'];\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n getFragmentSource(): string {\n return fragmentSource[this.mode];\n }\n\n getVertexSource(): string {\n return vertexSource;\n }\n\n applyToWebGL(options: TWebGLPipelineState) {\n const gl = options.context,\n texture = this.createTexture(options.filterBackend, this.image);\n this.bindAdditionalTexture(gl, texture!, gl.TEXTURE1);\n super.applyToWebGL(options);\n this.unbindAdditionalTexture(gl, gl.TEXTURE1);\n }\n\n createTexture(backend: WebGLFilterBackend, image: FabricImage) {\n return backend.getCachedTexture(image.cacheKey, image.getElement());\n }\n\n /**\n * Calculate a transformMatrix to adapt the image to blend over\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n calculateMatrix() {\n const image = this.image,\n { width, height } = image.getElement();\n return [\n 1 / image.scaleX,\n 0,\n 0,\n 0,\n 1 / image.scaleY,\n 0,\n -image.left / width,\n -image.top / height,\n 1,\n ];\n }\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({\n imageData: { data, width, height },\n filterBackend: { resources },\n }: T2DPipelineState) {\n const image = this.image;\n if (!resources.blendImage) {\n resources.blendImage = createCanvasElement();\n }\n const canvas1 = resources.blendImage;\n const context = canvas1.getContext('2d')!;\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas1.width = width;\n canvas1.height = height;\n } else {\n context.clearRect(0, 0, width, height);\n }\n context.setTransform(\n image.scaleX,\n 0,\n 0,\n image.scaleY,\n image.left,\n image.top,\n );\n context.drawImage(image.getElement(), 0, 0, width, height);\n const blendData = context.getImageData(0, 0, width, height).data;\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n const a = data[i + 3];\n\n const tr = blendData[i];\n const tg = blendData[i + 1];\n const tb = blendData[i + 2];\n const ta = blendData[i + 3];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = (r * tr) / 255;\n data[i + 1] = (g * tg) / 255;\n data[i + 2] = (b * tb) / 255;\n data[i + 3] = (a * ta) / 255;\n break;\n case 'mask':\n data[i + 3] = ta;\n break;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const matrix = this.calculateMatrix();\n gl.uniform1i(uniformLocations.uImage, 1); // texture unit 1.\n gl.uniformMatrix3fv(uniformLocations.uTransformMatrix, false, matrix);\n }\n\n /**\n * Returns object representation of an instance\n * TODO: Handle the possibility of missing image better.\n * As of now a BlendImage filter without image can't be used with fromObject\n * @return {Object} Object representation of an instance\n */\n toObject(): {\n type: 'BlendImage';\n image: ReturnType;\n } & BlendImageOwnProps {\n return {\n ...super.toObject(),\n image: this.image && this.image.toObject(),\n };\n }\n\n /**\n * Create filter instance from an object representation\n * @static\n * @param {object} object Object to create an instance from\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting image loading, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static async fromObject(\n { type, image, ...filterOptions }: Record,\n options: { signal: AbortSignal },\n ): Promise> {\n return FabricImage.fromObject(image, options).then(\n (enlivedImage) =>\n new this({ ...filterOptions, image: enlivedImage }) as BlendImage,\n );\n }\n}\n\nclassRegistry.setClass(BlendImage);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec2 uDelta;\n varying vec2 vTexCoord;\n const float nSamples = 15.0;\n vec3 v3offset = vec3(12.9898, 78.233, 151.7182);\n float random(vec3 scale) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\n }\n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n float offset = random(v3offset);\n for (float t = -nSamples; t <= nSamples; t++) {\n float percent = (t + offset - 0.5) / nSamples;\n float weight = 1.0 - abs(percent);\n color += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;\n total += weight;\n }\n gl_FragColor = color / total;\n }\n ` as const;\n","import { createCanvasElement } from '../util/misc/dom';\nimport { BaseFilter } from './BaseFilter';\nimport type {\n TWebGLPipelineState,\n T2DPipelineState,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/blur';\n\ntype BlurOwnProps = {\n blur: number;\n};\n\nexport const blurDefaultValues: BlurOwnProps = {\n blur: 0,\n};\n\n/**\n * Blur filter class\n * @example\n * const filter = new Blur({\n * blur: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class Blur extends BaseFilter<'Blur', BlurOwnProps> {\n /**\n * blur value, in percentage of image dimensions.\n * specific to keep the image blur constant at different resolutions\n * range between 0 and 1.\n * @type Number\n * @default\n */\n declare blur: BlurOwnProps['blur'];\n\n declare horizontal: boolean;\n declare aspectRatio: number;\n\n static type = 'Blur';\n\n static defaults = blurDefaultValues;\n\n static uniformLocations = ['uDelta'];\n\n getFragmentSource(): string {\n return fragmentSource;\n }\n\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n // this aspectRatio is used to give the same blur to vertical and horizontal\n this.aspectRatio = options.sourceWidth / options.sourceHeight;\n options.passes++;\n this._setupFrameBuffer(options);\n this.horizontal = true;\n this.applyToWebGL(options);\n this._swapTextures(options);\n this._setupFrameBuffer(options);\n this.horizontal = false;\n this.applyToWebGL(options);\n this._swapTextures(options);\n } else {\n this.applyTo2d(options);\n }\n }\n\n applyTo2d(options: T2DPipelineState) {\n options.imageData = this.simpleBlur(options);\n }\n\n simpleBlur({\n ctx,\n imageData,\n filterBackend: { resources },\n }: T2DPipelineState) {\n const { width, height } = imageData;\n if (!resources.blurLayer1) {\n resources.blurLayer1 = createCanvasElement();\n resources.blurLayer2 = createCanvasElement();\n }\n const canvas1 = resources.blurLayer1!;\n const canvas2 = resources.blurLayer2!;\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas2.width = canvas1.width = width;\n canvas2.height = canvas1.height = height;\n }\n const ctx1 = canvas1.getContext('2d')!,\n ctx2 = canvas2.getContext('2d')!,\n nSamples = 15,\n blur = this.blur * 0.06 * 0.5;\n let random, percent, j, i;\n\n // load first canvas\n ctx1.putImageData(imageData, 0, 0);\n ctx2.clearRect(0, 0, width, height);\n\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * width + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, j, random);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * height + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, random, j);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n ctx.drawImage(canvas1, 0, 0);\n const newImageData = ctx.getImageData(0, 0, canvas1.width, canvas1.height);\n ctx1.globalAlpha = 1;\n ctx1.clearRect(0, 0, canvas1.width, canvas1.height);\n return newImageData;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const delta = this.chooseRightDelta();\n gl.uniform2fv(uniformLocations.uDelta, delta);\n }\n\n isNeutralState() {\n return this.blur === 0;\n }\n\n /**\n * choose right value of image percentage to blur with\n * @returns {Array} a numeric array with delta values\n */\n chooseRightDelta() {\n let blurScale = 1;\n const delta = [0, 0];\n if (this.horizontal) {\n if (this.aspectRatio > 1) {\n // image is wide, i want to shrink radius horizontal\n blurScale = 1 / this.aspectRatio;\n }\n } else {\n if (this.aspectRatio < 1) {\n // image is tall, i want to shrink radius vertical\n blurScale = this.aspectRatio;\n }\n }\n const blur = blurScale * this.blur * 0.12;\n if (this.horizontal) {\n delta[0] = blur;\n } else {\n delta[1] = blur;\n }\n return delta;\n }\n}\n\nclassRegistry.setClass(Blur);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uBrightness;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n color.rgb += uBrightness;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/brightness';\n\ntype BrightnessOwnProps = {\n brightness: number;\n};\n\nexport const brightnessDefaultValues: BrightnessOwnProps = {\n brightness: 0,\n};\n\n/**\n * Brightness filter class\n * @example\n * const filter = new Brightness({\n * brightness: 0.05\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Brightness extends BaseFilter<'Brightness', BrightnessOwnProps> {\n /**\n * Brightness value, from -1 to 1.\n * translated to -255 to 255 for 2d\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Number} brightness\n * @default\n */\n declare brightness: BrightnessOwnProps['brightness'];\n\n static type = 'Brightness';\n\n static defaults = brightnessDefaultValues;\n\n static uniformLocations = ['uBrightness'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const brightness = Math.round(this.brightness * 255);\n for (let i = 0; i < data.length; i += 4) {\n data[i] = data[i] + brightness;\n data[i + 1] = data[i + 1] + brightness;\n data[i + 2] = data[i + 2] + brightness;\n }\n }\n\n isNeutralState() {\n return this.brightness === 0;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uBrightness, this.brightness);\n }\n}\n\nclassRegistry.setClass(Brightness);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n varying vec2 vTexCoord;\n uniform mat4 uColorMatrix;\n uniform vec4 uConstants;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n color *= uColorMatrix;\n color += uConstants;\n gl_FragColor = color;\n }`;\n","import { BaseFilter } from './BaseFilter';\nimport type {\n T2DPipelineState,\n TMatColorMatrix,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/colorMatrix';\n\ntype ColorMatrixOwnProps = {\n matrix: TMatColorMatrix;\n colorsOnly: boolean;\n};\n\nexport const colorMatrixDefaultValues: ColorMatrixOwnProps = {\n matrix: [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],\n colorsOnly: true,\n};\n\n/**\n * Color Matrix filter class\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @see {@Link http://phoboslab.org/log/2013/11/fast-image-filters-with-webgl demo}\n * @example Kodachrome filter\n * const filter = new ColorMatrix({\n * matrix: [\n 1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,\n -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,\n -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,\n 0, 0, 0, 1, 0\n ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class ColorMatrix<\n Name extends string = 'ColorMatrix',\n OwnProps extends object = ColorMatrixOwnProps,\n> extends BaseFilter {\n /**\n * Colormatrix for pixels.\n * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning\n * outside the -1, 1 range.\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Array} matrix array of 20 numbers.\n * @default\n */\n declare matrix: ColorMatrixOwnProps['matrix'];\n\n /**\n * Lock the colormatrix on the color part, skipping alpha, mainly for non webgl scenario\n * to save some calculation\n * @type Boolean\n * @default true\n */\n declare colorsOnly: ColorMatrixOwnProps['colorsOnly'];\n\n static type = 'ColorMatrix';\n\n static defaults = colorMatrixDefaultValues;\n\n static uniformLocations = ['uColorMatrix', 'uConstants'];\n\n getFragmentSource(): string {\n return fragmentSource;\n }\n\n /**\n * Apply the ColorMatrix operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d(options: T2DPipelineState) {\n const imageData = options.imageData,\n data = imageData.data,\n m = this.matrix,\n colorsOnly = this.colorsOnly;\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n if (colorsOnly) {\n data[i] = r * m[0] + g * m[1] + b * m[2] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + m[9] * 255;\n data[i + 2] = r * m[10] + g * m[11] + b * m[12] + m[14] * 255;\n } else {\n const a = data[i + 3];\n data[i] = r * m[0] + g * m[1] + b * m[2] + a * m[3] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + a * m[8] + m[9] * 255;\n data[i + 2] =\n r * m[10] + g * m[11] + b * m[12] + a * m[13] + m[14] * 255;\n data[i + 3] =\n r * m[15] + g * m[16] + b * m[17] + a * m[18] + m[19] * 255;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const m = this.matrix,\n matrix = [\n m[0],\n m[1],\n m[2],\n m[3],\n m[5],\n m[6],\n m[7],\n m[8],\n m[10],\n m[11],\n m[12],\n m[13],\n m[15],\n m[16],\n m[17],\n m[18],\n ],\n constants = [m[4], m[9], m[14], m[19]];\n gl.uniformMatrix4fv(uniformLocations.uColorMatrix, false, matrix);\n gl.uniform4fv(uniformLocations.uConstants, constants);\n }\n\n toObject() {\n return {\n ...super.toObject(),\n matrix: [...this.matrix] as TMatColorMatrix,\n };\n }\n}\n\nclassRegistry.setClass(ColorMatrix);\n","import { ColorMatrix } from './ColorMatrix';\nimport { classRegistry } from '../ClassRegistry';\nimport type { TMatColorMatrix } from './typedefs';\n\ntype FixedFiltersOwnProps = {\n colorsOnly: boolean;\n};\n\nexport function createColorMatrixFilter(key: string, matrix: TMatColorMatrix) {\n const newClass = class extends ColorMatrix {\n static type = key;\n\n static defaults = {\n colorsOnly: false,\n matrix,\n };\n\n //@ts-expect-error TS wants matrix to be exported.\n toObject(): { type: string } & FixedFiltersOwnProps {\n return { type: this.type, colorsOnly: this.colorsOnly };\n }\n };\n classRegistry.setClass(newClass, key);\n return newClass as typeof ColorMatrix;\n}\n\nexport const Brownie = createColorMatrixFilter(\n 'Brownie',\n [\n 0.5997, 0.34553, -0.27082, 0, 0.186, -0.0377, 0.86095, 0.15059, 0, -0.1449,\n 0.24113, -0.07441, 0.44972, 0, -0.02965, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Vintage = createColorMatrixFilter(\n 'Vintage',\n [\n 0.62793, 0.32021, -0.03965, 0, 0.03784, 0.02578, 0.64411, 0.03259, 0,\n 0.02926, 0.0466, -0.08512, 0.52416, 0, 0.02023, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Kodachrome = createColorMatrixFilter(\n 'Kodachrome',\n [\n 1.12855, -0.39673, -0.03992, 0, 0.24991, -0.16404, 1.08352, -0.05498, 0,\n 0.09698, -0.16786, -0.56034, 1.60148, 0, 0.13972, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Technicolor = createColorMatrixFilter(\n 'Technicolor',\n [\n 1.91252, -0.85453, -0.09155, 0, 0.04624, -0.30878, 1.76589, -0.10601, 0,\n -0.27589, -0.2311, -0.75018, 1.84759, 0, 0.12137, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Polaroid = createColorMatrixFilter(\n 'Polaroid',\n [\n 1.438, -0.062, -0.062, 0, 0, -0.122, 1.378, -0.122, 0, 0, -0.016, -0.016,\n 1.483, 0, 0, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Sepia = createColorMatrixFilter(\n 'Sepia',\n [\n 0.393, 0.769, 0.189, 0, 0, 0.349, 0.686, 0.168, 0, 0, 0.272, 0.534, 0.131,\n 0, 0, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const BlackWhite = createColorMatrixFilter(\n 'BlackWhite',\n [\n 1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 0, 0, 0,\n 1, 0,\n ],\n);\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLPipelineState } from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport { classRegistry } from '../ClassRegistry';\n\ntype ComposedOwnProps = {\n subFilters: BaseFilter[];\n};\n\n/**\n * A container class that knows how to apply a sequence of filters to an input image.\n */\nexport class Composed extends BaseFilter<'Composed', ComposedOwnProps> {\n /**\n * A non sparse array of filters to apply\n */\n declare subFilters: ComposedOwnProps['subFilters'];\n\n static type = 'Composed';\n\n constructor(\n options: { subFilters?: BaseFilter[] } & Record<\n string,\n any\n > = {},\n ) {\n super(options);\n this.subFilters = options.subFilters || [];\n }\n\n /**\n * Apply this container's filters to the input image provided.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be applied.\n */\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n options.passes += this.subFilters.length - 1;\n }\n this.subFilters.forEach((filter) => {\n filter.applyTo(options);\n });\n }\n\n /**\n * Serialize this filter into JSON.\n * @returns {Object} A JSON representation of this filter.\n */\n //@ts-expect-error TS doesn't like this toObject\n toObject(): {\n type: 'Composed';\n subFilters: ReturnType['toObject']>[];\n } {\n return {\n type: this.type,\n subFilters: this.subFilters.map((filter) => filter.toObject()),\n };\n }\n\n isNeutralState() {\n return !this.subFilters.some((filter) => !filter.isNeutralState());\n }\n\n /**\n * Deserialize a JSON definition of a ComposedFilter into a concrete instance.\n * @static\n * @param {oject} object Object to create an instance from\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting `BlendImage` filter loading, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static fromObject(\n object: Record,\n options: { signal: AbortSignal },\n ): Promise {\n return Promise.all(\n ((object.subFilters || []) as BaseFilter[]).map(\n (filter) =>\n classRegistry\n .getClass(filter.type)\n .fromObject(filter, options),\n ),\n ).then(\n (enlivedFilters) => new this({ subFilters: enlivedFilters }) as Composed,\n );\n }\n}\n\nclassRegistry.setClass(Composed);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uContrast;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\n color.rgb = contrastF * (color.rgb - 0.5) + 0.5;\n gl_FragColor = color;\n }`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/constrast';\n\ntype ContrastOwnProps = {\n contrast: number;\n};\n\nexport const contrastDefaultValues: ContrastOwnProps = {\n contrast: 0,\n};\n\n/**\n * Contrast filter class\n * @example\n * const filter = new Contrast({\n * contrast: 0.25\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Contrast extends BaseFilter<'Contrast', ContrastOwnProps> {\n /**\n * contrast value, range from -1 to 1.\n * @param {Number} contrast\n * @default 0\n */\n declare contrast: ContrastOwnProps['contrast'];\n\n static type = 'Contrast';\n\n static defaults = contrastDefaultValues;\n\n static uniformLocations = ['uContrast'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n isNeutralState() {\n return this.contrast === 0;\n }\n\n /**\n * Apply the Contrast operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const contrast = Math.floor(this.contrast * 255),\n contrastF = (259 * (contrast + 255)) / (255 * (259 - contrast));\n\n for (let i = 0; i < data.length; i += 4) {\n data[i] = contrastF * (data[i] - 128) + 128;\n data[i + 1] = contrastF * (data[i + 1] - 128) + 128;\n data[i + 2] = contrastF * (data[i + 2] - 128) + 128;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uContrast, this.contrast);\n }\n}\n\nclassRegistry.setClass(Contrast);\n","export const fragmentSource = {\n Convolute_3_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[9];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 3.0; h+=1.0) {\n for (float w = 0.0; w < 3.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_3_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[9];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 3.0; h+=1.0) {\n for (float w = 0.0; w < 3.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n Convolute_5_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[25];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 5.0; h+=1.0) {\n for (float w = 0.0; w < 5.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_5_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[25];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 5.0; h+=1.0) {\n for (float w = 0.0; w < 5.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n Convolute_7_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[49];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 7.0; h+=1.0) {\n for (float w = 0.0; w < 7.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_7_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[49];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 7.0; h+=1.0) {\n for (float w = 0.0; w < 7.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n Convolute_9_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[81];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 9.0; h+=1.0) {\n for (float w = 0.0; w < 9.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_9_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[81];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 9.0; h+=1.0) {\n for (float w = 0.0; w < 9.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n};\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/convolute';\n\nexport type ConvoluteOwnProps = {\n opaque: boolean;\n matrix: number[];\n};\n\nexport const convoluteDefaultValues: ConvoluteOwnProps = {\n opaque: false,\n matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0],\n};\n\n/**\n * Adapted from html5rocks article\n * @example Sharpen filter\n * const filter = new Convolute({\n * matrix: [ 0, -1, 0,\n * -1, 5, -1,\n * 0, -1, 0 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Blur filter\n * const filter = new Convolute({\n * matrix: [ 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter\n * const filter = new Convolute({\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter with opaqueness\n * const filter = new Convolute({\n * opaque: true,\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class Convolute extends BaseFilter<'Convolute', ConvoluteOwnProps> {\n /*\n * Opaque value (true/false)\n */\n declare opaque: ConvoluteOwnProps['opaque'];\n\n /*\n * matrix for the filter, max 9x9\n */\n declare matrix: ConvoluteOwnProps['matrix'];\n\n static type = 'Convolute';\n\n static defaults = convoluteDefaultValues;\n\n static uniformLocations = ['uMatrix', 'uOpaque', 'uHalfSize', 'uSize'];\n\n getCacheKey() {\n return `${this.type}_${Math.sqrt(this.matrix.length)}_${\n this.opaque ? 1 : 0\n }` as keyof typeof fragmentSource;\n }\n\n getFragmentSource() {\n return fragmentSource[this.getCacheKey()];\n }\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d(options: T2DPipelineState) {\n const imageData = options.imageData,\n data = imageData.data,\n weights = this.matrix,\n side = Math.round(Math.sqrt(weights.length)),\n halfSide = Math.floor(side / 2),\n sw = imageData.width,\n sh = imageData.height,\n output = options.ctx.createImageData(sw, sh),\n dst = output.data,\n // go through the destination image pixels\n alphaFac = this.opaque ? 1 : 0;\n let r, g, b, a, dstOff, scx, scy, srcOff, wt, x, y, cx, cy;\n\n for (y = 0; y < sh; y++) {\n for (x = 0; x < sw; x++) {\n dstOff = (y * sw + x) * 4;\n // calculate the weighed sum of the source image pixels that\n // fall under the convolution matrix\n r = 0;\n g = 0;\n b = 0;\n a = 0;\n\n for (cy = 0; cy < side; cy++) {\n for (cx = 0; cx < side; cx++) {\n scy = y + cy - halfSide;\n scx = x + cx - halfSide;\n\n // eslint-disable-next-line max-depth\n if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {\n continue;\n }\n\n srcOff = (scy * sw + scx) * 4;\n wt = weights[cy * side + cx];\n\n r += data[srcOff] * wt;\n g += data[srcOff + 1] * wt;\n b += data[srcOff + 2] * wt;\n // eslint-disable-next-line max-depth\n if (!alphaFac) {\n a += data[srcOff + 3] * wt;\n }\n }\n }\n dst[dstOff] = r;\n dst[dstOff + 1] = g;\n dst[dstOff + 2] = b;\n if (!alphaFac) {\n dst[dstOff + 3] = a;\n } else {\n dst[dstOff + 3] = data[dstOff + 3];\n }\n }\n }\n options.imageData = output;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1fv(uniformLocations.uMatrix, this.matrix);\n }\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject() {\n return {\n ...super.toObject(),\n opaque: this.opaque,\n matrix: [...this.matrix],\n };\n }\n}\n\nclassRegistry.setClass(Convolute);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec3 uGamma;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n vec3 correction = (1.0 / uGamma);\n color.r = pow(color.r, correction.r);\n color.g = pow(color.g, correction.g);\n color.b = pow(color.b, correction.b);\n gl_FragColor = color;\n gl_FragColor.rgb *= color.a;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/gamma';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\n\nconst GAMMA = 'Gamma' as const;\n\nexport type GammaInput = [number, number, number];\n\nexport type GammaOwnProps = {\n gamma: GammaInput;\n};\n\nexport const gammaDefaultValues: GammaOwnProps = {\n gamma: [1, 1, 1],\n};\n\n/**\n * Gamma filter class\n * @example\n * const filter = new Gamma({\n * gamma: [1, 0.5, 2.1]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Gamma extends BaseFilter {\n /**\n * Gamma array value, from 0.01 to 2.2.\n * @param {Array} gamma\n * @default\n */\n declare gamma: GammaOwnProps['gamma'];\n declare rgbValues?: {\n r: Uint8Array;\n g: Uint8Array;\n b: Uint8Array;\n };\n\n static type = GAMMA;\n\n static defaults = gammaDefaultValues;\n\n static uniformLocations = ['uGamma'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n constructor(options: { gamma?: GammaInput } = {}) {\n super(options);\n this.gamma =\n options.gamma ||\n ((\n this.constructor as typeof Gamma\n ).defaults.gamma.concat() as GammaInput);\n }\n\n /**\n * Apply the Gamma operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const gamma = this.gamma,\n rInv = 1 / gamma[0],\n gInv = 1 / gamma[1],\n bInv = 1 / gamma[2];\n\n if (!this.rgbValues) {\n this.rgbValues = {\n r: new Uint8Array(256),\n g: new Uint8Array(256),\n b: new Uint8Array(256),\n };\n }\n\n // This is an optimization - pre-compute a look-up table for each color channel\n // instead of performing these pow calls for each pixel in the image.\n const rgb = this.rgbValues;\n for (let i = 0; i < 256; i++) {\n rgb.r[i] = Math.pow(i / 255, rInv) * 255;\n rgb.g[i] = Math.pow(i / 255, gInv) * 255;\n rgb.b[i] = Math.pow(i / 255, bInv) * 255;\n }\n for (let i = 0; i < data.length; i += 4) {\n data[i] = rgb.r[data[i]];\n data[i + 1] = rgb.g[data[i + 1]];\n data[i + 2] = rgb.b[data[i + 2]];\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform3fv(uniformLocations.uGamma, this.gamma);\n }\n\n isNeutralState() {\n const { gamma } = this;\n return gamma[0] === 1 && gamma[1] === 1 && gamma[2] === 1;\n }\n\n toObject(): { type: typeof GAMMA; gamma: GammaInput } {\n return {\n type: GAMMA,\n gamma: this.gamma.concat() as GammaInput,\n };\n }\n}\n\nclassRegistry.setClass(Gamma);\n","import type { TGrayscaleMode } from '../Grayscale';\n\nexport const fragmentSource: Record = {\n average: `\n precision highp float;\n uniform sampler2D uTexture;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float average = (color.r + color.b + color.g) / 3.0;\n gl_FragColor = vec4(average, average, average, color.a);\n }\n `,\n lightness: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform int uMode;\n varying vec2 vTexCoord;\n void main() {\n vec4 col = texture2D(uTexture, vTexCoord);\n float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\n gl_FragColor = vec4(average, average, average, col.a);\n }\n `,\n luminosity: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform int uMode;\n varying vec2 vTexCoord;\n void main() {\n vec4 col = texture2D(uTexture, vTexCoord);\n float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\n gl_FragColor = vec4(average, average, average, col.a);\n }\n `,\n};\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/grayscale';\n\nexport type TGrayscaleMode = 'average' | 'lightness' | 'luminosity';\n\ntype GrayscaleOwnProps = {\n mode: TGrayscaleMode;\n};\n\nexport const grayscaleDefaultValues: GrayscaleOwnProps = {\n mode: 'average',\n};\n\n/**\n * Grayscale image filter class\n * @example\n * const filter = new Grayscale();\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Grayscale extends BaseFilter<'Grayscale', GrayscaleOwnProps> {\n declare mode: TGrayscaleMode;\n\n static type = 'Grayscale';\n\n static defaults = grayscaleDefaultValues;\n\n static uniformLocations = ['uMode'];\n\n /**\n * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n for (let i = 0, value: number; i < data.length; i += 4) {\n switch (this.mode) {\n case 'average':\n value = (data[i] + data[i + 1] + data[i + 2]) / 3;\n break;\n case 'lightness':\n value =\n (Math.min(data[i], data[i + 1], data[i + 2]) +\n Math.max(data[i], data[i + 1], data[i + 2])) /\n 2;\n break;\n case 'luminosity':\n value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];\n break;\n }\n\n data[i] = value;\n data[i + 1] = value;\n data[i + 2] = value;\n }\n }\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n getFragmentSource() {\n return fragmentSource[this.mode];\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const mode = 1;\n gl.uniform1i(uniformLocations.uMode, mode);\n }\n\n /**\n * Grayscale filter isNeutralState implementation\n * The filter is never neutral\n * on the image\n **/\n isNeutralState() {\n return false;\n }\n}\n\nclassRegistry.setClass(Grayscale);\n","import { cos } from '../util/misc/cos';\nimport { sin } from '../util/misc/sin';\nimport { ColorMatrix } from './ColorMatrix';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\n\nexport type HueRotationOwnProps = {\n rotation: number;\n};\n\nexport const hueRotationDefaultValues: HueRotationOwnProps = {\n rotation: 0,\n};\n\n/**\n * HueRotation filter class\n * @example\n * const filter = new HueRotation({\n * rotation: -0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class HueRotation extends ColorMatrix<\n 'HueRotation',\n HueRotationOwnProps\n> {\n /**\n * HueRotation value, from -1 to 1.\n */\n declare rotation: HueRotationOwnProps['rotation'];\n\n static type = 'HueRotation';\n\n static defaults = hueRotationDefaultValues;\n\n calculateMatrix() {\n const rad = this.rotation * Math.PI,\n cosine = cos(rad),\n sine = sin(rad),\n aThird = 1 / 3,\n aThirdSqtSin = Math.sqrt(aThird) * sine,\n OneMinusCos = 1 - cosine;\n this.matrix = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n this.matrix[0] = cosine + OneMinusCos / 3;\n this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[6] = cosine + aThird * OneMinusCos;\n this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[12] = cosine + aThird * OneMinusCos;\n }\n\n isNeutralState() {\n return this.rotation === 0;\n }\n\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n this.calculateMatrix();\n super.applyTo(options);\n }\n\n //@ts-expect-error TS and classes with different methods\n toObject(): { type: 'HueRotation'; rotation: number } {\n return {\n type: this.type,\n rotation: this.rotation,\n };\n }\n}\n\nclassRegistry.setClass(HueRotation);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform int uInvert;\n uniform int uAlpha;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n if (uInvert == 1) {\n if (uAlpha == 1) {\n gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,1.0 -color.a);\n } else {\n gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\n }\n } else {\n gl_FragColor = color;\n }\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/invert';\n\nexport type InvertOwnProps = {\n alpha: boolean;\n invert: boolean;\n};\n\nexport const invertDefaultValues: InvertOwnProps = {\n alpha: false,\n invert: true,\n};\n\n/**\n * @example\n * const filter = new Invert();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\nexport class Invert extends BaseFilter<'Invert', InvertOwnProps> {\n /**\n * Invert also alpha.\n * @param {Boolean} alpha\n * @default\n **/\n declare alpha: InvertOwnProps['alpha'];\n\n /**\n * Filter invert. if false, does nothing\n * @param {Boolean} invert\n * @default\n */\n declare invert: InvertOwnProps['invert'];\n\n static type = 'Invert';\n\n static defaults = invertDefaultValues;\n\n static uniformLocations = ['uInvert', 'uAlpha'];\n\n /**\n * Apply the Invert operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n for (let i = 0; i < data.length; i += 4) {\n data[i] = 255 - data[i];\n data[i + 1] = 255 - data[i + 1];\n data[i + 2] = 255 - data[i + 2];\n\n if (this.alpha) {\n data[i + 3] = 255 - data[i + 3];\n }\n }\n }\n\n protected getFragmentSource(): string {\n return fragmentSource;\n }\n\n /**\n * Invert filter isNeutralState implementation\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * @param {Object} options\n **/\n isNeutralState() {\n return !this.invert;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1i(uniformLocations.uInvert, Number(this.invert));\n gl.uniform1i(uniformLocations.uAlpha, Number(this.alpha));\n }\n}\n\nclassRegistry.setClass(Invert);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uStepH;\n uniform float uNoise;\n uniform float uSeed;\n varying vec2 vTexCoord;\n float rand(vec2 co, float seed, float vScale) {\n return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\n }\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/noise';\n\nexport type NoiseOwnProps = {\n noise: number;\n};\n\nexport const noiseDefaultValues: NoiseOwnProps = {\n noise: 0,\n};\n\n/**\n * Noise filter class\n * @example\n * const filter = new Noise({\n * noise: 700\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class Noise extends BaseFilter<'Noise', NoiseOwnProps> {\n /**\n * Noise value, from\n * @param {Number} noise\n * @default\n */\n declare noise: NoiseOwnProps['noise'];\n\n static type = 'Noise';\n\n static defaults = noiseDefaultValues;\n\n static uniformLocations = ['uNoise', 'uSeed'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const noise = this.noise;\n for (let i = 0; i < data.length; i += 4) {\n const rand = (0.5 - Math.random()) * noise;\n data[i] += rand;\n data[i + 1] += rand;\n data[i + 2] += rand;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uNoise, this.noise / 255);\n gl.uniform1f(uniformLocations.uSeed, Math.random());\n }\n\n isNeutralState() {\n return this.noise === 0;\n }\n}\n\nclassRegistry.setClass(Noise);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uBlocksize;\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n float blockW = uBlocksize * uStepW;\n float blockH = uBlocksize * uStepH;\n int posX = int(vTexCoord.x / blockW);\n int posY = int(vTexCoord.y / blockH);\n float fposX = float(posX);\n float fposY = float(posY);\n vec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\n vec4 color = texture2D(uTexture, squareCoords);\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/pixelate';\n\nexport type PixelateOwnProps = {\n blocksize: number;\n};\n\nexport const pixelateDefaultValues: PixelateOwnProps = {\n blocksize: 4,\n};\n\n/**\n * Pixelate filter class\n * @example\n * const filter = new Pixelate({\n * blocksize: 8\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Pixelate extends BaseFilter<'Pixelate', PixelateOwnProps> {\n declare blocksize: PixelateOwnProps['blocksize'];\n\n static type = 'Pixelate';\n\n static defaults = pixelateDefaultValues;\n\n static uniformLocations = ['uBlocksize'];\n\n /**\n * Apply the Pixelate operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data, width, height } }: T2DPipelineState) {\n for (let i = 0; i < height; i += this.blocksize) {\n for (let j = 0; j < width; j += this.blocksize) {\n const index = i * 4 * width + j * 4;\n const r = data[index];\n const g = data[index + 1];\n const b = data[index + 2];\n const a = data[index + 3];\n\n for (let _i = i; _i < Math.min(i + this.blocksize, height); _i++) {\n for (let _j = j; _j < Math.min(j + this.blocksize, width); _j++) {\n const index = _i * 4 * width + _j * 4;\n data[index] = r;\n data[index + 1] = g;\n data[index + 2] = b;\n data[index + 3] = a;\n }\n }\n }\n }\n }\n\n /**\n * Indicate when the filter is not gonna apply changes to the image\n **/\n isNeutralState() {\n return this.blocksize === 1;\n }\n\n protected getFragmentSource(): string {\n return fragmentSource;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uBlocksize, this.blocksize);\n }\n}\n\nclassRegistry.setClass(Pixelate);\n","export const fragmentShader = `\nprecision highp float;\nuniform sampler2D uTexture;\nuniform vec4 uLow;\nuniform vec4 uHigh;\nvarying vec2 vTexCoord;\nvoid main() {\n gl_FragColor = texture2D(uTexture, vTexCoord);\n if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\n gl_FragColor.a = 0.0;\n }\n}\n`;\n","import { classRegistry } from '../ClassRegistry';\nimport { Color } from '../color/Color';\nimport { BaseFilter } from './BaseFilter';\nimport { fragmentShader } from './shaders/removeColor';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\n\nexport type RemoveColorOwnProps = {\n color: string;\n distance: number;\n useAlpha: boolean;\n};\n\nexport const removeColorDefaultValues: RemoveColorOwnProps = {\n color: '#FFFFFF',\n distance: 0.02,\n useAlpha: false,\n};\n\n/**\n * Remove white filter class\n * @example\n * const filter = new RemoveColor({\n * threshold: 0.2,\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class RemoveColor extends BaseFilter<\n 'RemoveColor',\n RemoveColorOwnProps\n> {\n /**\n * Color to remove, in any format understood by {@link Color}.\n * @param {String} type\n * @default\n */\n declare color: RemoveColorOwnProps['color'];\n\n /**\n * distance to actual color, as value up or down from each r,g,b\n * between 0 and 1\n **/\n declare distance: RemoveColorOwnProps['distance'];\n\n /**\n * For color to remove inside distance, use alpha channel for a smoother deletion\n * NOT IMPLEMENTED YET\n **/\n declare useAlpha: RemoveColorOwnProps['useAlpha'];\n\n static type = 'RemoveColor';\n\n static defaults = removeColorDefaultValues;\n\n static uniformLocations = ['uLow', 'uHigh'];\n\n getFragmentSource() {\n return fragmentShader;\n }\n\n /**\n * Applies filter to canvas element\n * @param {Object} canvasEl Canvas element to apply filter to\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const distance = this.distance * 255,\n source = new Color(this.color).getSource(),\n lowC = [source[0] - distance, source[1] - distance, source[2] - distance],\n highC = [\n source[0] + distance,\n source[1] + distance,\n source[2] + distance,\n ];\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n\n if (\n r > lowC[0] &&\n g > lowC[1] &&\n b > lowC[2] &&\n r < highC[0] &&\n g < highC[1] &&\n b < highC[2]\n ) {\n data[i + 3] = 0;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const source = new Color(this.color).getSource(),\n distance = this.distance,\n lowC = [\n 0 + source[0] / 255 - distance,\n 0 + source[1] / 255 - distance,\n 0 + source[2] / 255 - distance,\n 1,\n ],\n highC = [\n source[0] / 255 + distance,\n source[1] / 255 + distance,\n source[2] / 255 + distance,\n 1,\n ];\n gl.uniform4fv(uniformLocations.uLow, lowC);\n gl.uniform4fv(uniformLocations.uHigh, highC);\n }\n}\n\nclassRegistry.setClass(RemoveColor);\n","import { BaseFilter } from './BaseFilter';\nimport type {\n T2DPipelineState,\n TWebGLPipelineState,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport { classRegistry } from '../ClassRegistry';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type { XY } from '../Point';\n\nexport type TResizeType = 'bilinear' | 'hermite' | 'sliceHack' | 'lanczos';\n\nexport type ResizeOwnProps = {\n resizeType: TResizeType;\n scaleX: number;\n scaleY: number;\n lanczosLobes: number;\n};\n\nexport const resizeDefaultValues: ResizeOwnProps = {\n resizeType: 'hermite',\n scaleX: 1,\n scaleY: 1,\n lanczosLobes: 3,\n};\n\ntype ResizeDuring2DResize = Resize & {\n rcpScaleX: number;\n rcpScaleY: number;\n};\n\ntype ResizeDuringWEBGLResize = Resize & {\n rcpScaleX: number;\n rcpScaleY: number;\n horizontal: boolean;\n width: number;\n height: number;\n taps: number[];\n tempScale: number;\n dH: number;\n dW: number;\n};\n\n/**\n * Resize image filter class\n * @example\n * const filter = new Resize();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\nexport class Resize extends BaseFilter<'Resize', ResizeOwnProps> {\n /**\n * Resize type\n * for webgl resizeType is just lanczos, for canvas2d can be:\n * bilinear, hermite, sliceHack, lanczos.\n * @default\n */\n declare resizeType: ResizeOwnProps['resizeType'];\n\n /**\n * Scale factor for resizing, x axis\n * @param {Number} scaleX\n * @default\n */\n declare scaleX: ResizeOwnProps['scaleX'];\n\n /**\n * Scale factor for resizing, y axis\n * @param {Number} scaleY\n * @default\n */\n declare scaleY: ResizeOwnProps['scaleY'];\n\n /**\n * LanczosLobes parameter for lanczos filter, valid for resizeType lanczos\n * @param {Number} lanczosLobes\n * @default\n */\n declare lanczosLobes: ResizeOwnProps['lanczosLobes'];\n\n static type = 'Resize';\n\n static defaults = resizeDefaultValues;\n\n static uniformLocations = ['uDelta', 'uTaps'];\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n this: ResizeDuringWEBGLResize,\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform2fv(\n uniformLocations.uDelta,\n this.horizontal ? [1 / this.width, 0] : [0, 1 / this.height],\n );\n gl.uniform1fv(uniformLocations.uTaps, this.taps);\n }\n\n getFilterWindow(this: ResizeDuringWEBGLResize) {\n const scale = this.tempScale;\n return Math.ceil(this.lanczosLobes / scale);\n }\n\n getCacheKey(this: ResizeDuringWEBGLResize): string {\n const filterWindow = this.getFilterWindow();\n return `${this.type}_${filterWindow}`;\n }\n\n getFragmentSource(this: ResizeDuringWEBGLResize): string {\n const filterWindow = this.getFilterWindow();\n return this.generateShader(filterWindow);\n }\n\n getTaps(this: ResizeDuringWEBGLResize) {\n const lobeFunction = this.lanczosCreate(this.lanczosLobes),\n scale = this.tempScale,\n filterWindow = this.getFilterWindow(),\n taps = new Array(filterWindow);\n for (let i = 1; i <= filterWindow; i++) {\n taps[i - 1] = lobeFunction(i * scale);\n }\n return taps;\n }\n\n /**\n * Generate vertex and shader sources from the necessary steps numbers\n * @param {Number} filterWindow\n */\n generateShader(filterWindow: number) {\n const offsets = new Array(filterWindow);\n for (let i = 1; i <= filterWindow; i++) {\n offsets[i - 1] = `${i}.0 * uDelta`;\n }\n return `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec2 uDelta;\n varying vec2 vTexCoord;\n uniform float uTaps[${filterWindow}];\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float sum = 1.0;\n ${offsets\n .map(\n (offset, i) => `\n color += texture2D(uTexture, vTexCoord + ${offset}) * uTaps[${i}] + texture2D(uTexture, vTexCoord - ${offset}) * uTaps[${i}];\n sum += 2.0 * uTaps[${i}];\n `,\n )\n .join('\\n')}\n gl_FragColor = color / sum;\n }\n `;\n }\n\n applyToForWebgl(this: ResizeDuringWEBGLResize, options: TWebGLPipelineState) {\n options.passes++;\n this.width = options.sourceWidth;\n this.horizontal = true;\n this.dW = Math.round(this.width * this.scaleX);\n this.dH = options.sourceHeight;\n this.tempScale = this.dW / this.width;\n this.taps = this.getTaps();\n options.destinationWidth = this.dW;\n super.applyTo(options);\n options.sourceWidth = options.destinationWidth;\n\n this.height = options.sourceHeight;\n this.horizontal = false;\n this.dH = Math.round(this.height * this.scaleY);\n this.tempScale = this.dH / this.height;\n this.taps = this.getTaps();\n options.destinationHeight = this.dH;\n super.applyTo(options);\n options.sourceHeight = options.destinationHeight;\n }\n\n /**\n * Apply the resize filter to the image\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n (this as unknown as ResizeDuringWEBGLResize).applyToForWebgl(options);\n } else {\n (this as unknown as ResizeDuring2DResize).applyTo2d(options);\n }\n }\n\n isNeutralState() {\n return this.scaleX === 1 && this.scaleY === 1;\n }\n\n lanczosCreate(lobes: number) {\n return (x: number) => {\n if (x >= lobes || x <= -lobes) {\n return 0.0;\n }\n if (x < 1.1920929e-7 && x > -1.1920929e-7) {\n return 1.0;\n }\n x *= Math.PI;\n const xx = x / lobes;\n return ((Math.sin(x) / x) * Math.sin(xx)) / xx;\n };\n }\n\n applyTo2d(this: ResizeDuring2DResize, options: T2DPipelineState) {\n const imageData = options.imageData,\n scaleX = this.scaleX,\n scaleY = this.scaleY;\n\n this.rcpScaleX = 1 / scaleX;\n this.rcpScaleY = 1 / scaleY;\n\n const oW = imageData.width;\n const oH = imageData.height;\n const dW = Math.round(oW * scaleX);\n const dH = Math.round(oH * scaleY);\n let newData: ImageData;\n\n if (this.resizeType === 'sliceHack') {\n newData = this.sliceByTwo(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'hermite') {\n newData = this.hermiteFastResize(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'bilinear') {\n newData = this.bilinearFiltering(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'lanczos') {\n newData = this.lanczosResize(options, oW, oH, dW, dH);\n } else {\n // this should never trigger, is here just for safety net.\n newData = new ImageData(dW, dH);\n }\n options.imageData = newData;\n }\n\n /**\n * Filter sliceByTwo\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n sliceByTwo(\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ) {\n const imageData = options.imageData;\n const mult = 0.5;\n let doneW = false;\n let doneH = false;\n let stepW = oW * mult;\n let stepH = oH * mult;\n const resources = options.filterBackend.resources;\n let sX = 0;\n let sY = 0;\n const dX = oW;\n let dY = 0;\n if (!resources.sliceByTwo) {\n resources.sliceByTwo = createCanvasElement();\n }\n const tmpCanvas = resources.sliceByTwo;\n if (tmpCanvas.width < oW * 1.5 || tmpCanvas.height < oH) {\n tmpCanvas.width = oW * 1.5;\n tmpCanvas.height = oH;\n }\n const ctx = tmpCanvas.getContext('2d')!;\n ctx.clearRect(0, 0, oW * 1.5, oH);\n ctx.putImageData(imageData, 0, 0);\n\n dW = Math.floor(dW);\n dH = Math.floor(dH);\n\n while (!doneW || !doneH) {\n oW = stepW;\n oH = stepH;\n if (dW < Math.floor(stepW * mult)) {\n stepW = Math.floor(stepW * mult);\n } else {\n stepW = dW;\n doneW = true;\n }\n if (dH < Math.floor(stepH * mult)) {\n stepH = Math.floor(stepH * mult);\n } else {\n stepH = dH;\n doneH = true;\n }\n ctx.drawImage(tmpCanvas, sX, sY, oW, oH, dX, dY, stepW, stepH);\n sX = dX;\n sY = dY;\n dY += stepH;\n }\n return ctx.getImageData(sX, sY, dW, dH);\n }\n\n /**\n * Filter lanczosResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n lanczosResize(\n this: ResizeDuring2DResize,\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ): ImageData {\n function process(u: number): ImageData {\n let v, i, weight, idx, a, red, green, blue, alpha, fX, fY;\n center.x = (u + 0.5) * ratioX;\n icenter.x = Math.floor(center.x);\n for (v = 0; v < dH; v++) {\n center.y = (v + 0.5) * ratioY;\n icenter.y = Math.floor(center.y);\n a = 0;\n red = 0;\n green = 0;\n blue = 0;\n alpha = 0;\n for (i = icenter.x - range2X; i <= icenter.x + range2X; i++) {\n if (i < 0 || i >= oW) {\n continue;\n }\n fX = Math.floor(1000 * Math.abs(i - center.x));\n if (!cacheLanc[fX]) {\n cacheLanc[fX] = {};\n }\n for (let j = icenter.y - range2Y; j <= icenter.y + range2Y; j++) {\n if (j < 0 || j >= oH) {\n continue;\n }\n fY = Math.floor(1000 * Math.abs(j - center.y));\n if (!cacheLanc[fX][fY]) {\n cacheLanc[fX][fY] = lanczos(\n Math.sqrt(\n Math.pow(fX * rcpRatioX, 2) + Math.pow(fY * rcpRatioY, 2),\n ) / 1000,\n );\n }\n weight = cacheLanc[fX][fY];\n if (weight > 0) {\n idx = (j * oW + i) * 4;\n a += weight;\n red += weight * srcData[idx];\n green += weight * srcData[idx + 1];\n blue += weight * srcData[idx + 2];\n alpha += weight * srcData[idx + 3];\n }\n }\n }\n idx = (v * dW + u) * 4;\n destData[idx] = red / a;\n destData[idx + 1] = green / a;\n destData[idx + 2] = blue / a;\n destData[idx + 3] = alpha / a;\n }\n\n if (++u < dW) {\n return process(u);\n } else {\n return destImg;\n }\n }\n\n const srcData = options.imageData.data,\n destImg = options.ctx.createImageData(dW, dH),\n destData = destImg.data,\n lanczos = this.lanczosCreate(this.lanczosLobes),\n ratioX = this.rcpScaleX,\n ratioY = this.rcpScaleY,\n rcpRatioX = 2 / this.rcpScaleX,\n rcpRatioY = 2 / this.rcpScaleY,\n range2X = Math.ceil((ratioX * this.lanczosLobes) / 2),\n range2Y = Math.ceil((ratioY * this.lanczosLobes) / 2),\n cacheLanc: Record> = {},\n center: XY = { x: 0, y: 0 },\n icenter: XY = { x: 0, y: 0 };\n\n return process(0);\n }\n\n /**\n * bilinearFiltering\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n bilinearFiltering(\n this: ResizeDuring2DResize,\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ) {\n let a;\n let b;\n let c;\n let d;\n let x;\n let y;\n let i;\n let j;\n let xDiff;\n let yDiff;\n let chnl;\n let color;\n let offset = 0;\n let origPix;\n const ratioX = this.rcpScaleX;\n const ratioY = this.rcpScaleY;\n const w4 = 4 * (oW - 1);\n const img = options.imageData;\n const pixels = img.data;\n const destImage = options.ctx.createImageData(dW, dH);\n const destPixels = destImage.data;\n for (i = 0; i < dH; i++) {\n for (j = 0; j < dW; j++) {\n x = Math.floor(ratioX * j);\n y = Math.floor(ratioY * i);\n xDiff = ratioX * j - x;\n yDiff = ratioY * i - y;\n origPix = 4 * (y * oW + x);\n\n for (chnl = 0; chnl < 4; chnl++) {\n a = pixels[origPix + chnl];\n b = pixels[origPix + 4 + chnl];\n c = pixels[origPix + w4 + chnl];\n d = pixels[origPix + w4 + 4 + chnl];\n color =\n a * (1 - xDiff) * (1 - yDiff) +\n b * xDiff * (1 - yDiff) +\n c * yDiff * (1 - xDiff) +\n d * xDiff * yDiff;\n destPixels[offset++] = color;\n }\n }\n }\n return destImage;\n }\n\n /**\n * hermiteFastResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n hermiteFastResize(\n this: ResizeDuring2DResize,\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ) {\n const ratioW = this.rcpScaleX,\n ratioH = this.rcpScaleY,\n ratioWHalf = Math.ceil(ratioW / 2),\n ratioHHalf = Math.ceil(ratioH / 2),\n img = options.imageData,\n data = img.data,\n img2 = options.ctx.createImageData(dW, dH),\n data2 = img2.data;\n for (let j = 0; j < dH; j++) {\n for (let i = 0; i < dW; i++) {\n const x2 = (i + j * dW) * 4;\n let weight = 0;\n let weights = 0;\n let weightsAlpha = 0;\n let gxR = 0;\n let gxG = 0;\n let gxB = 0;\n let gxA = 0;\n const centerY = (j + 0.5) * ratioH;\n for (let yy = Math.floor(j * ratioH); yy < (j + 1) * ratioH; yy++) {\n const dy = Math.abs(centerY - (yy + 0.5)) / ratioHHalf,\n centerX = (i + 0.5) * ratioW,\n w0 = dy * dy;\n for (let xx = Math.floor(i * ratioW); xx < (i + 1) * ratioW; xx++) {\n let dx = Math.abs(centerX - (xx + 0.5)) / ratioWHalf;\n const w = Math.sqrt(w0 + dx * dx);\n /* eslint-disable max-depth */\n if (w > 1 && w < -1) {\n continue;\n }\n //hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n if (weight > 0) {\n dx = 4 * (xx + yy * oW);\n //alpha\n gxA += weight * data[dx + 3];\n weightsAlpha += weight;\n //colors\n if (data[dx + 3] < 255) {\n weight = (weight * data[dx + 3]) / 250;\n }\n gxR += weight * data[dx];\n gxG += weight * data[dx + 1];\n gxB += weight * data[dx + 2];\n weights += weight;\n }\n /* eslint-enable max-depth */\n }\n }\n data2[x2] = gxR / weights;\n data2[x2 + 1] = gxG / weights;\n data2[x2 + 2] = gxB / weights;\n data2[x2 + 3] = gxA / weightsAlpha;\n }\n }\n return img2;\n }\n}\n\nclassRegistry.setClass(Resize);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uSaturation;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float rgMax = max(color.r, color.g);\n float rgbMax = max(rgMax, color.b);\n color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\n color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\n color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/saturation';\n\nexport type SaturationOwnProps = {\n saturation: number;\n};\n\nexport const saturationDefaultValues: SaturationOwnProps = {\n saturation: 0,\n};\n\n/**\n * Saturate filter class\n * @example\n * const filter = new Saturation({\n * saturation: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Saturation extends BaseFilter<'Saturation', SaturationOwnProps> {\n /**\n * Saturation value, from -1 to 1.\n * Increases/decreases the color saturation.\n * A value of 0 has no effect.\n *\n * @param {Number} saturation\n * @default\n */\n declare saturation: SaturationOwnProps['saturation'];\n\n static type = 'Saturation';\n\n static defaults = saturationDefaultValues;\n\n static uniformLocations = ['uSaturation'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Saturation operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const adjust = -this.saturation;\n for (let i = 0; i < data.length; i += 4) {\n const max = Math.max(data[i], data[i + 1], data[i + 2]);\n data[i] += max !== data[i] ? (max - data[i]) * adjust : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * adjust : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * adjust : 0;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uSaturation, -this.saturation);\n }\n\n isNeutralState() {\n return this.saturation === 0;\n }\n}\n\nclassRegistry.setClass(Saturation);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uVibrance;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float max = max(color.r, max(color.g, color.b));\n float avg = (color.r + color.g + color.b) / 3.0;\n float amt = (abs(max - avg) * 2.0) * uVibrance;\n color.r += max != color.r ? (max - color.r) * amt : 0.00;\n color.g += max != color.g ? (max - color.g) * amt : 0.00;\n color.b += max != color.b ? (max - color.b) * amt : 0.00;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/vibrance';\n\nexport type VibranceOwnProps = {\n vibrance: number;\n};\n\nexport const vibranceDefaultValues: VibranceOwnProps = {\n vibrance: 0,\n};\n\n/**\n * Vibrance filter class\n * @example\n * const filter = new Vibrance({\n * vibrance: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Vibrance extends BaseFilter<'Vibrance', VibranceOwnProps> {\n /**\n * Vibrance value, from -1 to 1.\n * Increases/decreases the saturation of more muted colors with less effect on saturated colors.\n * A value of 0 has no effect.\n *\n * @param {Number} vibrance\n * @default\n */\n declare vibrance: VibranceOwnProps['vibrance'];\n\n static type = 'Vibrance';\n\n static defaults = vibranceDefaultValues;\n\n static uniformLocations = ['uVibrance'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Vibrance operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const adjust = -this.vibrance;\n for (let i = 0; i < data.length; i += 4) {\n const max = Math.max(data[i], data[i + 1], data[i + 2]);\n const avg = (data[i] + data[i + 1] + data[i + 2]) / 3;\n const amt = ((Math.abs(max - avg) * 2) / 255) * adjust;\n data[i] += max !== data[i] ? (max - data[i]) * amt : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * amt : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * amt : 0;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {TWebGLUniformLocationMap} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uVibrance, -this.vibrance);\n }\n\n isNeutralState() {\n return this.vibrance === 0;\n }\n}\n\nclassRegistry.setClass(Vibrance);\n"],"names":["BaseConfiguration","constructor","_defineProperty","window","devicePixelRatio","Configuration","config","configure","arguments","length","undefined","Object","assign","addFonts","paths","fontPaths","_objectSpread","removeFonts","fontFamilys","forEach","fontFamily","clearFonts","restoreDefaults","keys","defaults","reduce","acc","key","log","severity","_len","optionalParams","Array","_key","console","FabricError","Error","message","options","concat","SignalAbortedError","context","GLProbe","WebGLProbe","testPrecision","gl","precision","fragmentSource","fragmentShader","createShader","FRAGMENT_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","queryWebGL","canvas","getContext","maxTextureSize","getParameter","MAX_TEXTURE_SIZE","GLPrecision","find","getExtension","loseContext","isSupported","textureSize","copyPasteData","getEnv","document","isTouchSupported","navigator","maxTouchPoints","dispose","env","setEnv","value","getBrowserEnv","getFabricDocument","getFabricWindow","getDevicePixelRatio","_config$devicePixelRa","Math","max","Cache","getFontCache","_ref","fontStyle","fontWeight","toLowerCase","charWidthsCache","fontCache","cacheKey","clearFontCache","limitDimsByArea","ar","perfLimitSizeTotal","roughWidth","sqrt","floor","cache","VERSION","version","noop","halfPI","PI","twoMathPi","PiBy180","iMatrix","freeze","DEFAULT_SVG_FONT_SIZE","ALIASING_LIMIT","kRect","CENTER","LEFT","TOP","BOTTOM","RIGHT","NONE","reNewline","MOVING","SCALING","ROTATING","ROTATE","SKEWING","RESIZING","MODIFY_POLY","MODIFY_PATH","CHANGED","SCALE","SCALE_X","SCALE_Y","SKEW_X","SKEW_Y","FILL","STROKE","MODIFIED","JSON","SVG","ClassRegistry","Map","has","classType","getClass","get","setClass","classConstructor","set","type","getSVGClass","SVGTagName","setSVGClass","classRegistry","AnimationRegistry","remove","index","indexOf","splice","cancelAll","animations","animation","abort","cancelByCanvas","filter","_animation$target","target","cancelByTarget","runningAnimations","Observable","on","arg0","handler","__eventListeners","entries","eventName","off","push","once","disposers","_ref2","d","disposer","onceHandler","args","call","_removeEventListener","eventListener","_ref3","fire","_this$__eventListener","listenersForEvent","i","removeFromArray","array","idx","cos","angle","angleSlice","abs","sin","sign","Point","y","x","add","that","addEquals","scalarAdd","scalar","scalarAddEquals","subtract","subtractEquals","scalarSubtract","scalarSubtractEquals","multiply","scalarMultiply","scalarMultiplyEquals","divide","scalarDivide","scalarDivideEquals","eq","lt","lte","gt","gte","lerp","t","min","distanceFrom","dx","dy","midPointFrom","toString","setXY","setX","setY","setFromPoint","swap","clone","rotate","radians","origin","ZERO","sinus","cosinus","p","rotated","transform","ignoreOffset","isCollection","fabricObject","isArray","_objects","createCollectionMixin","Base","Collection","_onObjectAdded","object","_onObjectRemoved","_onStackOrderChanged","objects","size","insertAt","_len2","_key2","removed","_len3","_key3","forEachObject","callback","getObjects","_len4","types","_key4","o","isType","item","isEmpty","contains","deep","includes","some","obj","complexity","memo","current","sendObjectToBack","unshift","bringObjectToFront","sendObjectBackwards","intersecting","newIdx","findNewLowerIndex","bringObjectForward","findNewUpperIndex","moveObjectTo","isOverlapping","collectObjects","left","top","width","height","includeIntersecting","tl","br","selectable","visible","intersectsWithRect","isContainedWithinRect","containsPoint","CommonMethods","_setOptions","prop","_setObject","_set","toggle","property","requestAnimFrame","requestAnimationFrame","cancelAnimFrame","handle","cancelAnimationFrame","id","uid","createCanvasElement","element","createElement","createImage","copyCanvasElement","_newCanvas$getContext","newCanvas","drawImage","toDataURL","canvasEl","format","quality","isHTMLCanvas","degreesToRadians","degrees","radiansToDegrees","isIdentityMatrix","mat","every","transformPoint","invertTransform","a","r","multiplyTransformMatrices","b","is2x2","multiplyTransformMatrixArray","matrices","reduceRight","product","curr","calcPlaneRotation","atan2","qrDecompose","denom","pow","scaleX","scaleY","skewX","skewY","translateX","translateY","createTranslateMatrix","createRotateMatrix","angleRadiant","cosValue","sinValue","createScaleMatrix","angleToSkew","tan","createSkewXMatrix","skewValue","createSkewYMatrix","calcDimensionsMatrix","flipX","flipY","matrix","composeMatrix","scaleMatrix","loadImage","url","signal","crossOrigin","Promise","resolve","reject","aborted","img","err","src","addEventListener","done","onload","onerror","removeEventListener","enlivenObjects","reviver","instances","all","map","fromObject","then","fabricInstance","catch","error","instance","finally","enlivenObjectEnlivables","serializedObject","promises","values","enlived","pick","source","pickBy","predicate","ColorNameMap","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","reRGBa","reHSLa","reHex","hue2rgb","q","rgb2Hsl","g","maxValue","minValue","h","s","l","round","fromAlphaToFloat","parseFloat","endsWith","hexify","toUpperCase","padStart","greyAverage","avg","Color","color","setSource","_source","_tryParsingColor","sourceFromHex","sourceFromRgb","sourceFromHsl","isUnrecognised","getSource","toRgb","toRgba","join","toHsl","toHsla","toHex","fullHex","toHexa","slice","getAlpha","setAlpha","alpha","toGrayscale","toBlackWhite","threshold","average","bOrW","overlayWith","otherColor","otherAlpha","otherSource","R","G","B","fromRgb","fromRgba","match","parsedValue","fromHsl","fromHsla","match1degrees","parseAngletoDegrees","fromHex","isShortNotation","expandedValue","split","hex","hexCouple","parseInt","lowercase","numeric","toFixed","number","fractionDigits","Number","getSvgAttributes","commonAttributes","parseUnit","fontSize","unit","exec","dpi","DPI","parseAlign","align","parsePreserveAspectRatioAttribute","attribute","firstPart","secondPart","trim","alignX","alignY","meetOrSlice","matrixToSVG","NUM_FRACTION_DIGITS","colorPropToSVG","inlineStyle","colorValue","opacityValue","toLive","opacity","createSVGRect","svgColor","w","isFiller","filler","isSerializableFiller","toObject","isPattern","offsetX","isTextObject","_renderText","isPath","_renderPathCommands","isActiveSelection","getScrollLeftTop","doc","getDocumentFromElement","elementLoop","docElement","documentElement","body","scrollLeft","scrollTop","parentNode","host","nodeType","style","position","el","ownerDocument","getWindowFromElement","_el$ownerDocument","defaultView","setCanvasDimensions","ctx","retinaScaling","setAttribute","scale","setCSSDimensions","getElementOffset","_getWindowFromElement","offset","elemStyle","getComputedStyle","borderLeftWidth","borderTopWidth","paddingLeft","paddingTop","box","docElem","getBoundingClientRect","scrollLeftTop","clientLeft","clientTop","makeElementUnselectable","onselectstart","userSelect","StaticCanvasDOMManager","createLowerCanvas","lower","getElementById","hasAttribute","_originalCanvasStyle","cssText","classList","cleanupDOM","removeAttribute","setDimensions","calcOffset","staticCanvasDefaults","backgroundVpt","backgroundColor","overlayVpt","overlayColor","includeDefaultValues","svgViewportTransformation","renderOnAddRemove","skipOffscreen","enableRetinaScaling","imageSmoothingEnabled","controlsAboveOverlay","allowTouchScrolling","viewportTransform","StaticCanvas","lowerCanvasEl","_this$elements$lower","elements","contextContainer","_this$elements$lower2","getDefaults","ownDefaults","initElements","_setDimensionsImpl","skipControlsDrawing","calcViewportBoundaries","requestRenderAll","setCoords","getRetinaScaling","_offset","getWidth","getHeight","setWidth","setHeight","dimensions","cssOnly","backstoreOnly","hasLostContext","getZoom","setViewportTransform","vpt","zoomToPoint","point","before","newPoint","after","setZoom","absolutePan","relativePan","getElement","clearContext","clearRect","clear","backgroundImage","overlayImage","renderAll","cancelRequestedRender","destroyed","renderCanvas","renderAndReset","nextRenderHandle","disposed","iVpt","vptCoords","tr","bl","drawControls","_ctx","v","path","clipPath","patternQuality","_renderBackground","save","_renderObjects","restore","shouldCache","_transformDone","renderCache","forClipping","drawClipPathOnCanvas","_renderOverlay","__cleanupTask","globalCompositeOperation","zoomX","zoomY","_cacheCanvas","cacheTranslationX","cacheTranslationY","len","render","_renderBackgroundOrOverlay","fill","needsVpt","isAFiller","beginPath","moveTo","lineTo","closePath","fillStyle","offsetY","m","gradientTransform","patternTransform","getCenter","getCenterPoint","centerObjectH","_centerObject","centerObjectV","centerObject","viewportCenterObject","getVpCenter","viewportCenterObjectH","viewportCenterObjectV","center","toDatalessJSON","propertiesToInclude","toDatalessObject","_toObjectMethod","toJSON","methodName","clipPathData","excludeFromExport","_toObject","__serializeBgOverlay","originalValue","data","bgImage","bgColor","background","overlay","toSVG","markup","_setSVGPreamble","_setSVGHeader","clipPathId","_setSVGBgOverlayColor","_setSVGBgOverlayImage","_setSVGObjects","suppressPreamble","encoding","optViewBox","viewBox","createSVGFontFacesMarkup","createSVGRefElementsMarkup","createSVGClipPathMarkup","toClipPathSVG","shouldTransform","additionalTransform","fontList","styles","styleRow","fontListMarkup","_setSVGObject","bgOrOverlay","repeat","finalWidth","finalHeight","shouldInvert","loadFromJSON","json","serialized","parse","enlivedMap","properties","cloneWithoutData","multiplier","finalMultiplier","toCanvasElement","scaledWidth","scaledHeight","zoom","originalWidth","originalHeight","originalSkipControlsDrawing","newZoom","vp","newVp","originalRetina","objectsToRender","task","destroy","kill","touchEvents","getTouchInfo","event","touchProp","changedTouches","getPointer","scroll","_evt","clientX","clientY","isTouchEvent","pointerType","stopEvent","e","preventDefault","stopPropagation","makeBoundingBoxFromPoints","points","removeTransformFromObject","inverted","finalTransform","calcOwnMatrix","applyTransformToObject","addTransformToObject","_qrDecompose","otherOptions","_objectWithoutProperties","_excluded","setPositionByOrigin","resetObjectTransform","saveObjectTransform","sizeAfterTransform","dimX","dimY","bbox","calcPlaneChangeMatrix","from","to","sendPointToPlane","sendVectorToPlane","sendObjectToPlane","fireEvent","_target$canvas","originOffset","bottom","right","resolveOrigin","originValue","NOT_ALLOWED_CURSOR","getActionFromCorner","alreadySelected","corner","control","controls","getActionName","isTransformCentered","originX","originY","invertOrigin","isLocked","lockingKey","commonEventInfo","eventData","pointer","findCornerQuadrant","getTotalAngle","cornerAngle","normalizePoint","getRelativeCenterPoint","translateToGivenOrigin","p2","getLocalPoint","padding","localPoint","dragHandler","newLeft","newTop","moveX","moveY","FabricObjectSVGExportMixin","getSvgStyles","skipShadow","fillRule","strokeWidth","strokeDashArray","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","visibility","getSvgFilter","stroke","shadow","getSvgCommons","getSvgTransform","full","calcTransformMatrix","svgTransform","_toSVG","_reviver","_createBaseSVGMarkup","_createBaseClipPathSVGMarkup","objectMarkup","commonPieces","noStyle","withShadow","styleInfo","shadowInfo","vectorEffect","strokeUniform","absoluteClipPath","absolutePositioned","clipPathMarkup","addPaintOrder","paintFirst","getSvgRegex","arr","RegExp","reNum","String","raw","_templateObject","_taggedTemplateLiteral","svgNS","reFontDeclaration","svgValidTagNames","svgViewBoxElements","svgInvalidAncestors","svgValidParents","attributesMap","cx","cy","display","fSize","cPath","svgValidTagNamesRegEx","svgViewBoxElementsRegEx","svgValidParentsRegEx","reViewBoxAttrValue","unitVectorX","zero","rotateVector","vector","createVector","magnitude","calcAngleBetweenVectors","crossProduct","dotProduct","calcVectorRotation","getUnitVector","getOrthonormalVector","counterClockwise","isBetweenVectors","AxB","AxT","BxT","shadowOffsetRegex","reOffsetsAndBlur","shadowDefaultValues","blur","affectStroke","nonScaling","Shadow","parseShadow","shadowStr","replace","BLUR_BOX","fBoxX","fBoxY","capValue","stateProperties","cacheProperties","fabricObjectDefaultValues","minScaleLimit","objectCaching","centeredRotation","centeredScaling","dirty","interactiveObjectDefaultValues","noScaleCache","lockMovementX","lockMovementY","lockRotation","lockScalingX","lockScalingY","lockSkewingX","lockSkewingY","lockScalingFlip","cornerSize","touchCornerSize","transparentCorners","cornerColor","cornerStrokeColor","cornerStyle","cornerDashArray","hasControls","borderColor","borderDashArray","borderOpacityWhenMoving","borderScaleFactor","hasBorders","selectionBackgroundColor","evented","perPixelTargetFind","activeOn","hoverCursor","moveCursor","normalize","c","asin","elastic","defaultEasing","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","normA","normS","normP","easeOutElastic","normC","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeOutBounce","easeInBounce","easeInOutBounce","easeInQuad","easeOutQuad","easeInOutQuad","defaultAbort","AnimationBase","startValue","byValue","duration","delay","easing","onStart","onChange","onComplete","tick","bind","_onStart","_onChange","_onComplete","_abort","endValue","calculate","state","_state","isDone","start","firstTick","timestamp","startTime","Date","register","setTimeout","durationMs","boundDurationMs","durationProgress","valueProgress","unregister","ValueAnimation","timeElapsed","ArrayAnimation","defaultColorEasing","wrapColorCallback","rgba","ColorAnimation","startColor","endColor","isArrayAnimation","animate","animateColor","Intersection","status","append","isPointContained","T","A","infinite","AB","AT","isPointInPolygon","other","hits","inter","intersectSegmentSegment","intersectLineLine","a1","a2","b1","b2","aInfinite","bInfinite","a2xa1x","a2ya1y","b2xb1x","b2yb1y","a1xb1x","a1yb1y","uaT","ubT","uB","ua","ub","segmentsCoincide","intersectSegmentLine","s1","s2","l1","l2","intersectLinePolygon","result","intersectSegmentPolygon","intersectPolygonPolygon","points1","points2","coincidences","intersectPolygonRectangle","r1","r2","topRight","bottomLeft","ObjectGeometry","getX","getXY","getY","getRelativeX","setRelativeX","getRelativeY","setRelativeY","relativePosition","getRelativeXY","group","setRelativeXY","isStrokeAccountedForInDimensions","getCoords","aCoords","calcACoords","coords","intersection","intersectsWithObject","isContainedWithinObject","getBoundingRect","isOnScreen","isPartiallyOnScreen","allPointsAreOutside","getScaledWidth","_getTransformedDimensions","getScaledHeight","scaleToWidth","boundingRectFactor","scaleToHeight","getCanvasRetinaScaling","_this$canvas","getViewportTransform","_this$canvas2","rotateMatrix","tMatrix","finalMatrix","dim","transformMatrixKey","skipGroup","prefix","matrixCache","ownMatrixCache","_getNonTransformedDimensions","_calculateCurrentDimensions","dimOptions","preScalingStrokeValue","postScalingStrokeValue","noSkew","finalDimensions","fromOriginX","fromOriginY","toOriginX","toOriginY","translateToCenterPoint","translateToOriginPoint","relCenter","getPointByOrigin","pos","_getLeftTopCoords","FabricObject","name","setOptions","_createCacheCanvas","_cacheContext","_updateCacheCanvas","_limitCacheSize","dims","maxCacheSideLimit","minCacheSideLimit","limX","limY","capped","_getCacheCanvasDimensions","objectScale","getTotalObjectScaling","neededX","neededY","minCacheSize","dimensionsChanged","zoomChanged","drawingWidth","drawingHeight","shouldRedraw","additionalWidth","additionalHeight","shouldResizeCanvas","canvasWidth","canvasHeight","sizeGrowing","sizeShrinking","getHeightOfLine","ceil","setTransform","translate","needFullTransform","contextTop","getObjectScaling","retina","getObjectOpacity","_constrainScale","isChanged","parent","isNotVisible","_setupCompositeOperation","drawSelectionBackground","_setOpacity","_setShadow","drawCacheOnCanvas","_removeCacheCanvas","drawObject","isCacheDirty","hasStroke","hasFill","needsItsOwnCache","ownCaching","isOnACache","willDrawShadow","drawClipPathOnCache","originalFill","originalStroke","_setClippingProperties","_render","_drawClipPath","skipCanvas","fillRect","_removeShadow","globalAlpha","_setStrokeStyles","decl","lineWidth","lineCap","lineDashOffset","lineJoin","miterLimit","gradientUnits","_applyPatternForTransformedGradient","strokeStyle","_applyPatternGradientTransform","_setFillStyles","_setLineDash","dashArray","setLineDash","sx","sy","multX","multY","scaling","shadowColor","shadowBlur","browserShadowBlurConstant","shadowOffsetX","shadowOffsetY","_renderPaintInOrder","_renderStroke","_renderFill","_pCtx$createPattern","pCanvas","pCtx","createPattern","_findCenterFromElement","objectForm","cloneAsImage","ImageClass","origParams","originalGroup","originalShadow","canvasProvider","withoutTransform","withoutShadow","boundingRect","shadowOffset","originalCanvas","setOnGroup","animatable","_animate","propIsColor","colorProperties","animationOptions","isDescendantOf","getAncestors","ancestors","findCommonAncestors","fork","otherFork","common","otherAncestors","ancestor","j","hasCommonAncestors","commonAncestors","isInFrontOf","ancestorData","firstCommonAncestor","headOfFork","pop","headOfOtherFork","thisIndex","otherIndex","propertiesToSerialize","customProperties","toFixedBound","val","_removeDefaultValues","hasStaticDefaultValues","baseValues","getPrototypeOf","baseValue","_fromObject","serializedObjectOptions","_ref4","extraParam","_excluded2","enlivedObjectOptions","wrapWithFireEvent","actionHandler","extraEventInfo","actionPerformed","wrapWithFixedAnchor","centerPoint","constraint","changeObjectWidth","strokePadding","oldWidth","newWidth","changeWidth","renderCircleControl","styleOverride","xSize","sizeX","ySize","sizeY","myLeft","myTop","arc","renderSquareControl","xSizeBy2","ySizeBy2","strokeRect","Control","shouldActivate","controlKey","_fabricObject$canvas","getActiveObject","isControlVisible","getActionHandler","getMouseDownHandler","mouseDownHandler","getMouseUpHandler","mouseUpHandler","cursorStyleHandler","cursorStyle","actionName","getVisibility","_fabricObject$_contro","_fabricObject$_contro2","_controlsVisibility","setVisibility","positionHandler","currentControl","calcCornerCoords","objectCornerSize","centerX","centerY","isTouch","touchSizeX","touchSizeY","rotationStyleHandler","rotateObjectWithSnapping","ex","ey","theta","pivotPoint","lastAngle","curAngle","snapAngle","snapThreshold","rightAngleLocked","leftAngleLocked","hasRotated","rotationWithSnapping","scaleIsProportional","uniformIsToggled","uniScaleKey","uniformScaling","scalingIsForbidden","by","scaleProportionally","lockX","lockY","scaleMap","scaleCursorStyleHandler","n","scaleObject","forbidScaling","signX","signY","gestureScale","distance","original","originalDistance","oldScaleX","oldScaleY","scaleObjectFromCorner","scaleObjectX","scaleObjectY","scalingEqually","scalingX","scalingY","AXIS_KEYS","counterAxis","skew","lockSkewing","flip","skewMap","skewCursorStyleHandler","skewObject","axis","skewingSide","skewKey","skewingBefore","skewingStart","shearingStart","shearing","skewing","atan","changed","dimBefore","dimAfter","compensationFactor","skewHandler","originKey","lockSkewingKey","flipKey","counterOriginKey","counterFlipKey","counterOriginFactor","skewingDirection","finalHandler","skewHandlerX","skewHandlerY","isAltAction","altActionKey","scaleOrSkewActionName","isAlternative","scaleSkewCursorStyleHandler","scalingXOrSkewingY","scalingYOrSkewingX","createObjectDefaultControls","ml","mr","mb","mt","mtr","withConnection","createResizeControls","createTextboxDefaultControls","InteractiveFabricObject","createControls","targetCanvas","_currentTransform","action","startsWith","getActiveControl","__corner","coord","oCoords","findControl","forTouch","cornerEntries","touchCorner","calcOCoords","rMatrix","positionMatrix","startMatrix","transformOptions","forEachControl","_calcCornerCoords","fn","_activeObject","wh","strokeBorders","_drawBorders","drawControlsConnectingLines","_renderControls","styleOptions","shouldDrawBorders","shouldDrawControls","isMoving","drawBorders","forActiveSelection","shouldStroke","setControlVisible","setControlsVisibility","clearContextTop","restoreManually","onDeselect","_options","onSelect","shouldStartDragging","_e","onDragStart","canDrop","renderDragSourceEffect","renderDropTargetEffect","applyMixins","derivedCtor","constructors","baseCtor","getOwnPropertyNames","prototype","defineProperty","getOwnPropertyDescriptor","create","isTransparent","tolerance","getImageData","alphaChannel","rotatePoint","findIndexRight","StrokeProjectionsBase","strokeProjectionMagnitude","strokeUniformScalar","createSideVector","projectOrthogonally","applySkew","calcOrthogonalProjection","isSkewed","scaleUnitVector","unitVector","zeroVector","StrokeLineJoinProjections","getOrthogonalRotationFactor","vector1","vector2","C","AC","bisector","orthogonalProjection","correctSide","projectBevel","projections","projectMiter","hypotUnitScalar","miterVector","projectRoundNoSkew","startCircle","endCircle","radiusOnAxisX","radiusOnAxisY","projectRoundWithSkew","circleRadius","newY","furthestY","newX","furthestX","projectRound","isStraightLine","newOrigin","proj0","proj1","comparisonVector","isProj0Start","projectPoints","project","originPoint","projectedPoint","StrokeLineCapProjections","projectButt","projection","projectSquare","strokePointingOut","projectedA","projectStrokeOnPoints","openPath","reduced","cloneStyles","newObj","keyInner","capitalize","string","firstLetterOnly","charAt","escapeXml","graphemeSplit","textstring","graphemes","chr","getWholeChar","str","code","charCodeAt","isNaN","next","prev","hasStyleChanged","prevStyle","thisStyle","forTextSpans","textBackgroundColor","deltaY","overline","underline","linethrough","stylesToArray","text","textLines","stylesArray","charIndex","chars","end","stylesFromArray","stylesObject","styleIndex","SHARED_ATTRIBUTES","selectorMatches","selector","nodeName","classNames","getAttribute","azAz","matcher","splitClassNames","doesSomeParentMatch","selectors","parentMatching","parentElement","elementMatchesRule","firstMatching","getGlobalStylesForElement","cssRules","rule","normalizeAttr","attr","_attributesMap","regex","cleanupSvgAttribute","attributeValue","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","transforms","transformList","_templateObject7","reTransformList","reTransform","reTransformAll","parseTransformAttribute","test","matchAll","transformMatch","matchedParams","operation","rawArgs","arg1","arg2","arg3","arg4","arg5","arg","normalizeValue","parentAttributes","parsed","ouputValue","transformMatrix","fillIndex","strokeIndex","parseFontDeclaration","oStyle","lineHeight","parseStyleObject","parseStyleString","chunk","parseStyleAttribute","colorAttributesMap","setStrokeFillOpacity","attributes","colorAttr","parseAttributes","parentFontSize","ownAttributes","normalizedStyle","normalizedAttr","normalizedValue","font","mergedAttrs","rectDefaultValues","rx","ry","RECT_PROPS","Rect","_initRxRy","isRounded","bezierCurveTo","fromElement","_parseAttributes","ATTRIBUTE_NAMES","restOfparsedAttributes","Boolean","LAYOUT_TYPE_INITIALIZATION","LAYOUT_TYPE_ADDED","LAYOUT_TYPE_REMOVED","LAYOUT_TYPE_IMPERATIVE","LAYOUT_TYPE_OBJECT_MODIFIED","LAYOUT_TYPE_OBJECT_MODIFYING","getObjectBounds","destinationGroup","currentGroup","objectCenter","accountForStroke","strokeUniformVector","scalingStrokeWidth","sizeVector","LayoutStrategy","calcLayoutResult","shouldPerformLayout","calcBoundingBox","prevStrategy","strategy","shouldLayoutClipPath","getInitialSize","overrides","bboxSize","bboxLeftTop","bboxCenter","actualSize","relativeCorrection","FitContentLayout","LAYOUT_MANAGER","LayoutManager","_subscriptions","performLayout","strictContext","bubbles","_prevLayoutStrategy","onBeforeLayout","layoutResult","getLayoutResult","commitLayout","onAfterLayout","attachHandlers","trigger","subscribe","unsubscribe","_context","delete","unsubscribeTargets","targets","subscribeTargets","tricklingContext","layoutManager","prevCenter","nextCenter","correction","layoutObjects","_context$x","_context$y","layoutObject","_","bubblingContext","NoopLayoutManager","groupDefaultValues","subTargetCheck","interactive","Group","groupInit","_options$layoutManage","__objectSelectionTracker","__objectSelectionMonitor","__objectSelectionDisposer","enterGroup","canEnterGroup","_filterObjectsBeforeEnteringGroup","allowedObjects","_onAfterObjectsChange","removeParentTransform","exitGroup","_shouldSetNestedCoords","removeAll","_activeObjects","selected","activeObjects","_watchObject","watch","_enterGroup","activeObject","_exitGroup","ownCache","preserveObjectStacking","triggerLayout","__serializeObjects","method","_includeDefaultValues","originalDefaults","_createSVGBgRect","fillStroke","commons","svgString","bg","abortable","hydratedOptions","layoutClass","strategyClass","groupSVGElements","findScaleToFit","destination","findScaleToCover","commaWsp","reArcCommandPoints","rePathCommand","repeatedCommands","M","segmentToBezier","theta1","theta2","cosTh","sinTh","cx1","cy1","mT","fromX","fromY","costh1","sinth1","costh2","sinth2","toX","toY","cp1X","cp1Y","cp2X","cp2Y","arcToSegments","large","sweep","rotateX","root","sinTheta","px","py","rx2","ry2","py2","px2","pl","_rx","_ry","mTheta","calcVectorAngle","dtheta","segments","mDelta","th3","ux","uy","vx","vy","ta","tb","CB1","CB2","CB3","CB4","getBoundsOfCurve","begx","begy","cp1x","cp1y","cp2x","cp2y","endx","endy","argsString","cachesBoundsOfCurve","boundsOfCurveCache","tvalues","bounds","b2ac","sqrtb2ac","t1","t2","jlen","iterator","getPointOnCubicBezierIterator","fromArcToBeziers","fx","fy","rot","tx","ty","segsNorm","makePathSimpler","x1","y1","destinationPath","previous","controlX","controlY","parsedCommand","converted","calcLineLength","x2","y2","pct","c1","c2","c3","c4","QB1","QB2","QB3","getTangentCubicIterator","p1x","p1y","p2x","p2y","p3x","p3y","p4x","p4y","qb1","qb2","qb3","tangentX","tangentY","getPointOnQuadraticBezierIterator","getTangentQuadraticIterator","invT","pathIterator","tempP","tmpLen","perc","findPercentageForDistance","segInfo","nextLen","nextStep","lastPerc","angleFinder","getPathSegmentsInfo","totalLength","tempInfo","info","basicInfo","command","destX","destY","getPointOnPath","infos","segPercent","segment","rePathCmdAll","regExpArcCommandPoints","reMyNum","commandLengths","parsePath","pathString","_pathString$match","chain","matchStr","commandLetter","commandLength","paramArr","lastIndex","out","newCommand","transformedCommand","getSmoothPathFromPoints","p1","multSignX","multSignY","manyPoints","midPoint","transformPath","pathOffset","pathSegment","newSegment","getRegularPolygonPath","numVertexes","radius","interiorAngle","rotationAdjustment","rad","joinPath","pathData","setStyle","elementStyle","setProperty","mergeClipPaths","_b$group","getRandomInt","random","request","xhr","XMLHttpRequest","removeListener","ontimeout","onreadystatechange","readyState","open","send","_assignTransformMatrixProps","removeTransformMatrixForSvgParsing","preserveAspectRatioOptions","cropX","cropY","offsetLeft","offsetTop","CanvasDOMManager","containerClass","upperCanvasEl","createUpperCanvas","upper","applyCanvasStyle","container","createContainerElement","replaceChild","className","removeChild","canvasDefaults","centeredKey","selection","selectionKey","selectionColor","selectionDashArray","selectionBorderColor","selectionLineWidth","selectionFullyContained","defaultCursor","freeDrawingCursor","notAllowedCursor","targetFindTolerance","skipTargetFind","stopContextMenu","fireRightClick","fireMiddleClick","enablePointerEvents","SelectableCanvas","_this$elements$upper","_this$elements$upper2","wrapperEl","_objectsToRender","deselected","_discardActiveObject","_hoveredTarget","_hoveredTargets","_chooseObjectsToRender","contextTopDirty","_groupSelector","isDrawingMode","renderTopLayer","_isCurrentlyDrawing","freeDrawingBrush","_drawSelection","renderTop","setTargetFindTolerance","pixelFindCanvasEl","pixelFindContext","isTargetTransparent","selectionBgc","enhancedTolerance","_isSelectionKeyPressed","sKey","_shouldClearSelection","getActiveObjects","_shouldCenterTransform","modifierKeyPressed","centerTransform","_getOriginFromCorner","controlName","_setupCurrentTransform","_control$getActionHan","getScenePoint","altKey","lastX","lastY","shiftKey","setCursor","cursor","deltaX","extent","strokeOffset","minX","minY","maxX","maxY","findTarget","getViewportPoint","aObjects","searchPossibleTargets","subTargets","altSelectionKey","_pointIsInObjectSelectionArea","viewportZoom","angleRadians","cosP","sinP","cosPSinP","cosPMinusSinP","_checkTarget","isEditing","_searchPossibleTargets","subTarget","_pointer","_absolutePointer","fromViewport","boundsWidth","boundsHeight","cssScale","_resetTransformEventData","_setBrushStyles","willReadFrequently","getTopContext","getSelectionContext","getSelectionElement","active","_fireSelectionEvents","oldObjects","somethingChanged","invalidate","added","setActiveObject","currentActives","_setActiveObject","prevActiveObject","endCurrentTransform","discardActiveObject","discarded","_finalizeCurrentTransform","_scaling","originalProperties","_realizeGroupTransformOnObject","layoutProps","originalValues","TextEditingManager","cb","hiddenTextarea","focus","__disposer","exitTextEditing","exitEditing","onMouseMove","_this$target","updateSelectionOnMouseMove","addEventOptions","passive","getEventPoints","viewportPoint","scenePoint","absolutePointer","addListener","syntheticEventConfig","mouse","in","targetIn","targetOut","canvasIn","canvasOut","drag","Canvas","eventHandler","addOrRemove","_getEventPrefix","functor","_eventjsFunctor","canvasElement","eventTypePrefix","_onResize","_onMouseDown","_onMouseMove","_onMouseOut","_onMouseEnter","_onMouseWheel","_onContextMenu","_onDoubleClick","_onDragStart","_onDragEnd","_onDragOver","_onDragEnter","_onDragLeave","_onDrop","_onTouchStart","removeListeners","_onMouseUp","_onTouchEnd","__onMouseWheel","shared","nestedTarget","_isClick","_dragSource","_onDragProgress","_renderDragEffects","dropTarget","_dropTarget","didDrop","dataTransfer","dropEffect","dragSource","_draggedoverTarget","findDragTargets","eventType","_fireEnterLeaveEvents","_basicEventHandler","_cacheTransformEventData","_handleEvent","getPointerId","evt","identifier","pointerId","_isMainEvent","isPrimary","touches","mainTouchId","__onMouseDown","__onMouseUp","_willAddMouseDown","clearTimeout","__onMouseMove","_shouldRender","_this$_activeObject","isClick","_target","button","_onMouseUpInDrawingMode","shouldRender","targetWasActive","handleSelection","found","originalControl","originalMouseUpHandler","_setCursorFromEvent","currentTarget","currentSubTargets","_onMouseDownInDrawingMode","onMouseDown","_onMouseMoveInDrawingMode","onMouseUp","grouped","handleMultiSelection","groupSelector","_fireOverOutEvents","_transformObject","textEditingManager","fireSyntheticInOutEvents","oldTarget","fireCanvas","draggedoverTarget","targetChanged","outOpt","nextTarget","inOpt","previousTarget","localPointer","_performTransformAction","activeSelection","reverse","isAS","prevActiveObjects","multiSelectAdd","klass","newActiveSelection","point1","point2","collectedObjects","linearDefaultCoords","radialDefaultCoords","ifNaN","valueIfNaN","RE_PERCENT","isPercent","parsePercent","NaN","RE_KEY_VALUE_PAIRS","RE_KEY_VALUE","parseColorStop","keyValuePairs","parseColorStops","opacityAttr","colorStops","colorStopEls","getElementsByTagName","parseType","parseGradientUnits","convertPercentUnitsToValues","valuesToConvert","finalValue","propValue","getValue","parseLinearCoords","parseRadialCoords","parseCoords","Gradient","addColorStop","colorStop","preTransform","sort","needsSwap","minRadius","maxRadius","percentageShift","gradient","createLinearGradient","createRadialGradient","svgOptions","viewBoxWidth","viewBoxHeight","Pattern","isImageSource","isCanvasSource","sourceToString","complete","naturalWidth","naturalHeight","patternSource","patternOffsetX","patternOffsetY","patternWidth","patternHeight","BaseBrush","_saveAndTransform","needsFullRender","_resetShadow","_isOutSideCanvas","Path","_setPath","adjustPosition","setBoundingBox","_calcBoundsFromPath","quadraticCurveTo","pathCmd","sourcePath","_getOffsetTransform","digits","_calcDimensions","subpathStartX","subpathStartY","parsedAttributes","isEmptySVGPath","PencilBrush","_points","_hasStraightLine","drawSegment","drawStraightLine","straightLineKey","_prepareForDrawing","_addPoint","limitedToCanvasSize","oldEnd","_finalizeAndAddPath","_reset","convertPointsToSVGPath","createPath","decimatePoints","lastPoint","cDistance","adjustedDistance","newPoints","decimate","CIRCLE_PROPS","circleDefaultValues","startAngle","endAngle","Circle","setRadius","getRadiusX","getRadiusY","startX","startY","endX","endY","largeFlag","sweepFlag","otherParsedAttributes","CircleBrush","drawDot","addPoint","dot","originalRenderOnAddRemove","circles","circle","pointerPoint","getUniqueRects","rects","uniqueRects","uniqueRectsArray","SprayBrush","sprayChunks","sprayChunk","addSprayChunk","renderChunck","chunck","rect","optimizeOverlapping","sprayChunck","density","dotWidthVariance","dotWidth","randomOpacity","PatternBrush","getPatternSrc","dotDistance","patternCanvas","patternCtx","getPattern","pattern","topLeft","coordProps","Line","_setWidthHeight","calcLinePoints","origStrokeStyle","_this$stroke","_x1","_x2","_y1","_y2","xMult","yMult","triangleDefaultValues","Triangle","widthBy2","heightBy2","ellipseDefaultValues","ELLIPSE_PROPS","Ellipse","getRx","getRy","parsePointsAttribute","pointsSplit","parsedPoints","polylineDefaultValues","exactBoundingBox","Polyline","initialized","isOpen","_projectStrokeOnPoints","strokeDiff","bboxNoStroke","layoutProperties","_options$width","_options$height","_options$width2","_options$height2","output","diffX","diffY","Polygon","fontProperties","textDecorationProperties","textLayoutProperties","additionalProps","styleProperties","textDefaultValues","_reNewline","_reSpacesAndTabs","_reSpaceAndTab","_reWords","textAlign","superscript","baseline","subscript","pathStartOffset","pathSide","pathAlign","_fontSizeFraction","offsets","_fontSizeMult","charSpacing","direction","CACHE_FONT_SIZE","MIN_TEXT_WIDTH","JUSTIFY","JUSTIFY_LEFT","JUSTIFY_RIGHT","JUSTIFY_CENTER","StyledText","isEmptyStyles","lineIndex","line","p3","styleHas","cleanStyle","stylesCount","letterCount","stylePropertyValue","allStyleObjectPropertiesMatch","graphemeCount","styleObject","stylePropertyHasBeenSet","_textLines","removeStyle","lineNum","charNum","_extendStyles","get2DCursorLocation","_getLineStyle","_setLineStyle","newStyle","_getStyleDeclaration","_setStyleDeclaration","getSelectionStyles","startIndex","endIndex","getStyleAtPosition","getCompleteStyleDeclaration","setSelectionStyles","_forceClearCache","_lineStyle$charIndex","lineStyle","_styleProperties","_deleteStyleDeclaration","_deleteLineStyle","multipleSpacesRegex","dblQuoteRegex","createSVGInlineRect","TextSVGExportMixin","_getSVGLeftTopOffsets","textAndBg","_getSVGTextAndBg","textTop","textLeft","_wrapSVGTextAndBg","lineTop","textBgRects","textSpans","noShadow","textDecoration","getSvgTextDecoration","textTopOffset","textLeftOffset","lineOffset","_getLineLeftOffset","_setSVGTextLineBg","_setSVGTextLineText","_createTextCharSpan","char","styleDecl","styleProps","getSvgSpanStyles","fillStyles","dySpan","isJustify","actualStyle","nextStyle","charsToRender","charBox","boxWidth","timeToRender","__charBounds","kernedWidth","leftOffset","heightOfLine","boxStart","currentColor","lastColor","getValueOfPropertyAt","_getSVGLineTopOffset","lineTopOffset","lastHeight","useWhiteSpace","decoration","measuringContext","getMeasuringContext","FabricText","setPathInfo","initDimensions","segmentsInfo","_splitText","newLines","_splitTextIntoLines","lines","graphemeLines","_unwrappedTextLines","_unwrappedLines","_text","graphemeText","_clearCache","calcTextWidth","cursorWidth","calcTextHeight","enlargeSpaces","diffSpace","currentLineWidth","numberOfSpaces","accumulatedSpace","charBound","spaces","isEndOfWrapping","getLineWidth","missingNewlineOffset","_lineIndex","selectionStart","skipWrapping","_setTextStyles","_renderTextLinesBackground","_renderTextDecoration","_renderTextStroke","_renderTextFill","charStyle","forMeasuring","textBaseline","_getFontDeclaration","maxWidth","_renderTextLine","_renderChars","_getLeftOffset","_getTopOffset","lineLeftOffset","drawStart","renderLeft","_measureChar","_char","previousChar","prevCharStyle","fontDeclaration","couple","stylesAreEqual","fontMultiplier","coupleWidth","previousWidth","measureText","getHeightOfChar","measureLine","lineInfo","_measureLine","_getWidthOfCharSpacing","prevGrapheme","graphemeInfo","llength","lineBounds","grapheme","_getGraphemeBox","positionInPath","totalPathLength","_setGraphemeOnPath","numOfSpaces","centerPosition","skipLeft","previousBox","__lineHeights","maxHeight","_renderTextCommon","lineHeights","shortCut","isLtr","currentDirection","drawingLeft","_renderChar","_applyPatternGradientTransformText","handleFiller","fullDecl","shouldFill","fillOffsets","fillText","strokeOffsets","strokeText","setSuperscript","_setScript","setSubscript","schema","loc","lineDiff","__lineWidths","_charStyle$property","topOffset","lastDecoration","lastFill","currentDecoration","currentFill","currentSize","currentDy","parsedFontFamily","genericFonts","newLine","newText","needsDims","isAddingPath","_options$parsedAttrib","textAnchor","restOfOptions","textContent","textHeightScaleFactor","lineHeightDiff","scaledDiff","textHeight","offX","DraggableTextDelegate","dragEnterHandler","dragOverHandler","dragLeaveHandler","dragEndHandler","dropHandler","_dispose","isPointerOverSelection","newSelection","getSelectionStartFromPointer","selectionEnd","__mouseDownInPlace","isActive","__dragStartFired","setCursorByClick","initDelayedCursor","__isDraggingOver","getDragStartSelection","__dragStartSelection","setDragImage","_e$dataTransfer","flipFactor","boundaries","_getCursorBoundaries","selectionPosition","diff","bgc","dragImage","border","__dragImageDisposer","appendChild","setData","stringify","effectAllowed","abortCursorAnimation","editable","defaultPrevented","dragStartSelection","targetCanDrop","ev","_e$dataTransfer2","insert","getData","trailing","selectionStartOffset","removeChars","trimEnd","insertChars","enterEditing","_updateTextarea","_e$dataTransfer3","reNonWord","ITextBehavior","initBehavior","_tick","_onTickComplete","_animateCursor","toValue","_currentCursorOpacity","renderCursorOrSelection","_currentTickState","cursorDuration","_this$_currentTickCom","_currentTickCompleteState","restart","cursorDelay","shouldClear","cursorAnimation","restartCursorIfNeeded","selectAll","_fireSelectionChanged","getSelectedText","findWordBoundaryLeft","startFrom","_reSpace","findWordBoundaryRight","findLineBoundaryLeft","findLineBoundaryRight","searchWordBoundary","selectWord","newSelectionStart","newSelectionEnd","selectLine","initHiddenTextarea","_saveEditingProps","_setEditingProps","_textBeforeEdit","activeElement","currentStart","currentEnd","__selectionStartOnMouseDown","editingBorderColor","fromStringToGraphemeSelection","smallerTextStart","graphemeStart","smallerTextEnd","graphemeEnd","fromGraphemeToStringSelection","cursorOffsetCache","inCompositionMode","updateTextareaPosition","updateFromTextArea","textarea","_calcTextareaPosition","desiredPosition","compositionStart","cursorLocation","charHeight","upperCanvas","upperCanvasWidth","upperCanvasHeight","clientWidth","clientHeight","_savedProps","_restoreEditingProps","_exitEditing","isTextChanged","_removeExtraneousStyles","removeStyleFromTo","lineStart","charStart","lineEnd","charEnd","styleObj","shiftLineStyles","numericChar","clonedStyles","numericLine","insertNewlineStyleObject","qty","copiedStyle","newLineStyles","originalLineLength","isEndOfLine","someStyleIsCarryingOver","currentCharStyle","numIndex","styleCarriedOver","insertCharStyleObject","quantity","currentLineStyles","currentLineStylesCloned","numericIndex","insertNewStyleBlock","insertedText","cursorLoc","addedLines","linesLength","setSelectionStartEndWithShift","_selectionDirection","ITextKeyBehavior","autocapitalize","autocorrect","autocomplete","spellcheck","wrap","hiddenTextareaContainer","keydown","keyup","input","copy","cut","paste","compositionstart","compositionupdate","compositionend","onKeyDown","keyMap","keysMapRtl","keysMap","keyCode","ctrlKeysMapDown","ctrlKey","metaKey","stopImmediatePropagation","onKeyUp","_copyDone","ctrlKeysMapUp","onInput","fromPaste","updateAndFire","nextText","charCount","nextCharCount","removedText","charDiff","removeFrom","removeTo","textareaSelection","backDelete","copiedText","disableStyleCopyPaste","copiedTextStyle","onCompositionStart","onCompositionEnd","onCompositionUpdate","compositionEnd","_getWidthBeforeCursor","widthBeforeCursor","bound","getDownCursorOffset","isRight","selectionProp","_getSelectionForOffset","indexOnOtherLine","_getIndexOnLine","textAfterCursor","getUpCursorOffset","textBeforeCursor","widthOfCharsOnLine","indexOnLine","charWidth","foundMatch","leftEdge","rightEdge","offsetFromLeftEdge","offsetFromRightEdge","moveCursorDown","_moveCursorUpOrDown","moveCursorUp","moveCursorWithShift","moveCursorWithoutShift","moveCursorLeft","_moveCursorLeftOrRight","_move","newValue","_moveLeft","_moveRight","moveCursorLeftWithoutShift","change","moveCursorLeftWithShift","moveCursorRight","moveCursorRightWithShift","moveCursorRightWithoutShift","notALeftClick","ITextClickBehavior","_mouseDownHandler","_mouseDownHandlerBefore","doubleClickHandler","tripleClickHandler","__lastClickTime","__lastLastClickTime","__lastPointer","draggableTextDelegate","__newClickTime","newPointer","isTripleClick","__lastSelected","didDrag","mouseOffset","charLength","widthAfter","MOVE_CURSOR_UP","MOVE_CURSOR_DOWN","MOVE_CURSOR_LEFT","MOVE_CURSOR_RIGHT","EXIT_EDITING","protectedDefaultValues","iTextDefaultValues","cursorColor","caching","IText","setSelectionStart","_updateAndFire","setSelectionEnd","renderCursor","renderSelection","skipCaching","_getCursorBoundariesOffsets","__getCursorBoundariesOffsets","renderCursorAt","_renderCursor","_renderSelection","dragSelection","startLine","endLine","startChar","endChar","realLineHeight","boxEnd","drawHeight","extraTop","drawWidth","compositionColor","getCurrentCharFontSize","cp","_getCurrentCharIndex","getCurrentCharColor","cursorPosition","textboxDefaultValues","minWidth","dynamicMinWidth","_wordJoiners","splitByGrapheme","Textbox","_styleMap","_generateStyleMap","textInfo","realLineCount","realLineCharCount","isWrapping","nextLineIndex","nextOffset","shouldLimit","mapNextLine","p2Number","_wrapText","desiredWidth","getGraphemeDataForRender","wrapped","wordsData","_wrapLine","infix","largestWordWidth","wordsOrGraphemes","wordSplit","word","graphemeArray","_measureWord","charOffset","reservedSpace","additionalSpace","infixWidth","lineJustStarted","wordWidth","getMinWidth","linesToKeep","propNumber","ClipPathLayout","clipPathCenter","FixedLayout","ActiveSelectionLayoutManager","parents","Set","selectedObjects","activeSelectionDefaultValues","multiSelectionStacking","ActiveSelection","findIndex","groups","childrenOverride","Canvas2dFilterBackend","applyFilters","filters","sourceElement","sourceWidth","sourceHeight","imageData","originalImageData","pipelineState","originalEl","filterBackend","applyTo","imageDataPostFilter","putImageData","WebGLFilterBackend","tileSize","Float32Array","setupGLContext","captureGPUInfo","createWebGLCanvas","glOptions","premultipliedAlpha","depth","stencil","antialias","clearColor","cachedTexture","getCachedTexture","destinationWidth","destinationHeight","sourceTexture","createTexture","targetTexture","originalTexture","passes","webgl","aPosition","programCache","pass","tempFbo","createFramebuffer","bindFramebuffer","FRAMEBUFFER","resizeCanvasIfNeeded","copyGLTo2D","bindTexture","TEXTURE_2D","deleteTexture","deleteFramebuffer","clearWebGLCaches","textureCache","textureImageSource","NEAREST","RGBA","UNSIGNED_BYTE","CLAMP_TO_EDGE","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","texture","texParameteri","texImage2D","uniqueId","evictCachesForKey","glCanvas","sourceY","copyGLTo2DPutImageData","dWidth","dHeight","numBytes","u8","Uint8Array","imageBuffer","u8Clamped","Uint8ClampedArray","readPixels","imgData","ImageData","gpuInfo","renderer","vendor","ext","UNMASKED_RENDERER_WEBGL","UNMASKED_VENDOR_WEBGL","initFilterBackend","enableGLFiltering","getFilterBackend","strict","setFilterBackend","backend","imageDefaultValues","srcFromAttribute","minimumScaleTrigger","imageSmoothing","IMAGE_PROPS","FabricImage","setElement","_element","removeTexture","_originalElement","CSS_CANVAS","resizeFilter","applyResizeFilters","elementKey","getCrossOrigin","getOriginalSize","_stroke","filterObj","getSrc","hasCrop","imageMarkup","strokeSvg","imageRendering","getSvgSrc","origFill","filtered","setSrc","minimumScale","elementToFilter","_filteredEl","_filterScalingX","_filterScalingY","_lastScaleX","_lastScaleY","isNeutralState","imgElement","_needsResize","elementToDraw","elWidth","elHeight","sX","sY","sW","sH","maxDestW","maxDestH","_resetWidthHeight","pAR","preserveAspectRatio","pWidth","pHeight","rWidth","rHeight","f","rf","hydratedProps","fromURL","imageOptions","applyViewboxTransform","viewBoxAttr","widthAttr","heightAttr","goodViewbox","missingViewBox","missingDimAttr","translateMatrix","widthDiff","heightDiff","parsedDim","pasedViewBox","createElementNS","firstChild","getTagName","node","tagName","svgInvalidAncestorsRegEx","hasInvalidAncestor","getMultipleNodes","nodeNames","nodeArray","nodeList","getElementsByTagNameNS","parseUseDirectives","nodelist","skipAttributes","useElement","useAttributes","useAttrMap","xlink","href","referencedElement","clonedOriginal","cloneNode","originalAttributes","originalAttrMap","currentTrans","el3","setAttributeNS","childNodes","styleRecord","mergedStyles","entry","gradientsAttrs","xlinkAttr","recursivelyParseGradientsXlink","_gradient$getAttribut","xLink","referencedGradient","children","referenceClone","tagArray","getGradientDefs","elList","gradientDefs","getCSSRules","allRules","styleContents","ruleObj","declaration","propertyValuePairs","pair","_rule","findTag","ElementsParser","clipPaths","regexUrl","createObject","resolveGradient","resolveClipPath","extractPropertyDefinition","storage","gradientDef","usingElement","clipPathElements","objTransformInv","clipPathTag","clipPathOwner","clipPathElement","enlivedClippath","clipRule","gTransform","isValidSvgTag","createEmptyResponse","allElements","parseSVGDocument","descendants","localClipPaths","elementParser","loadSVGFromString","parser","DOMParser","parseFromString","loadSVGFromURL","xml","responseXML","parsedDoc","ACTION_NAME","createPolyPositionHandler","pointIndex","polyObject","polyActionHandler","poly","mouseLocalPosition","factoryPolyActionHandler","anchorPoint","anchorPointInParentPlane","newAnchorPointInParentPlane","createPolyActionHandler","createPolyControls","calcPathPointPosition","pathObject","commandIndex","movePathPoint","anchorCommand","pathPositionHandler","pathActionHandler","indexFromPrevCommand","previousCommandType","PathPointControl","controlFill","controlStroke","PathControlPointControl","connectToCommandIndex","connectToPointIndex","connectionDashArray","commandType","createControl","commandIndexPos","pointIndexPos","isControlPoint","controlPointStyle","pointStyle","createPathControls","isWebGLPipelineState","isPutImageFaster","sourceCanvas","ArrayBuffer","testContext","testPipelineState","performance","now","drawImageTime","putImageDataTime","highPsourceCode","identityFragmentShader","vertexSource","BaseFilter","getFragmentSource","getVertexSource","createProgram","vertexShader","VERTEX_SHADER","program","getShaderInfoLog","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","uniformLocations","getUniformLocations","uStepW","getUniformLocation","uStepH","attributeLocations","getAttributeLocations","getAttribLocation","locations","sendAttributeData","aPositionData","attributeLocation","buffer","createBuffer","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bufferData","STATIC_DRAW","_setupFrameBuffer","framebufferTexture2D","COLOR_ATTACHMENT0","finish","_swapTextures","temp","applyToWebGL","applyTo2d","getCacheKey","retrieveShader","shader","useProgram","uniform1f","sendUniformData","viewport","drawArrays","TRIANGLE_STRIP","bindAdditionalTexture","textureUnit","activeTexture","TEXTURE0","unbindAdditionalTexture","_gl","_uniformLocations","createHelpLayer","helpLayer","defaultKeys","filterOptions","blendColorFragmentSource","screen","difference","lighten","darken","exclusion","tint","blendColorDefaultValues","mode","BlendColor","tg","alpha1","uniform4fv","uColor","mask","blendImageDefaultValues","BlendImage","image","TEXTURE1","calculateMatrix","resources","blendImage","canvas1","blendData","uniform1i","uImage","uniformMatrix3fv","uTransformMatrix","enlivedImage","blurDefaultValues","Blur","aspectRatio","horizontal","simpleBlur","blurLayer1","blurLayer2","canvas2","ctx1","ctx2","nSamples","percent","newImageData","delta","chooseRightDelta","uniform2fv","uDelta","blurScale","brightnessDefaultValues","brightness","Brightness","uBrightness","colorMatrixDefaultValues","colorsOnly","ColorMatrix","constants","uniformMatrix4fv","uColorMatrix","uConstants","createColorMatrixFilter","_Class","newClass","Brownie","Vintage","Kodachrome","Technicolor","Polaroid","Sepia","BlackWhite","Composed","subFilters","enlivedFilters","contrastDefaultValues","contrast","Contrast","contrastF","uContrast","Convolute_3_1","Convolute_3_0","Convolute_5_1","Convolute_5_0","Convolute_7_1","Convolute_7_0","Convolute_9_1","Convolute_9_0","convoluteDefaultValues","opaque","Convolute","weights","side","halfSide","sw","sh","createImageData","dst","alphaFac","dstOff","scx","scy","srcOff","wt","uniform1fv","uMatrix","GAMMA","gammaDefaultValues","gamma","Gamma","rInv","gInv","bInv","rgbValues","rgb","uniform3fv","uGamma","lightness","luminosity","grayscaleDefaultValues","Grayscale","uMode","hueRotationDefaultValues","rotation","HueRotation","cosine","sine","aThird","aThirdSqtSin","OneMinusCos","invertDefaultValues","invert","Invert","uInvert","uAlpha","noiseDefaultValues","noise","Noise","rand","uNoise","uSeed","pixelateDefaultValues","blocksize","Pixelate","_i","_j","uBlocksize","removeColorDefaultValues","useAlpha","RemoveColor","lowC","highC","uLow","uHigh","resizeDefaultValues","resizeType","lanczosLobes","Resize","uTaps","taps","getFilterWindow","tempScale","filterWindow","generateShader","getTaps","lobeFunction","lanczosCreate","applyToForWebgl","dW","dH","lobes","xx","rcpScaleX","rcpScaleY","oW","oH","newData","sliceByTwo","hermiteFastResize","bilinearFiltering","lanczosResize","mult","doneW","doneH","stepW","stepH","dX","dY","tmpCanvas","process","u","weight","fX","fY","ratioX","icenter","ratioY","range2X","cacheLanc","range2Y","lanczos","rcpRatioX","rcpRatioY","srcData","destData","destImg","xDiff","yDiff","chnl","origPix","w4","pixels","destImage","destPixels","ratioW","ratioH","ratioWHalf","ratioHHalf","img2","data2","weightsAlpha","gxR","gxG","gxB","gxA","yy","w0","saturationDefaultValues","saturation","Saturation","adjust","uSaturation","vibranceDefaultValues","vibrance","Vibrance","amt","uVibrance"],"mappings":"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EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,IAAI,EAAE,SAAS;AACfC,EAAAA,WAAW,EAAE,SAAS;AACtBC,EAAAA,SAAS,EAAE,SAAS;AACpBxL,EAAAA,GAAG,EAAE,SAAS;AACdyL,EAAAA,IAAI,EAAE,SAAS;AACfC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,MAAM,EAAE,SAAS;AACjBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,MAAM,EAAE,SAAS;AACjBC,EAAAA,KAAK,EAAE,SAAS;AAChBC,EAAAA,KAAK,EAAE,MAAM;AACbC,EAAAA,UAAU,EAAE,SAAS;AACrBC,EAAAA,MAAM,EAAE,MAAM;AACdC,EAAAA,WAAW,EAAE,SAAA;AACf,CAAC;;ACzJD;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,MAAM,GAAGA,MACpB,kJAAkJ,CAAA;;AAEpJ;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,MAAM,GAAGA,MACpB,kKAAkK,CAAA;;AAEpK;AACA;AACA;AACO,MAAMC,KAAK,GAAGA,MAAM,2CAA2C;;AC/GtE;AACA;AACA;AACA;AACA;AACA;AACO,MAA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"} \ No newline at end of file +{"version":3,"file":"index.mjs","sources":["../src/config.ts","../src/util/internals/console.ts","../src/filters/GLProbes/GLProbe.ts","../src/filters/GLProbes/WebGLProbe.ts","../src/env/browser.ts","../src/env/index.ts","../src/cache.ts","../src/constants.ts","../src/ClassRegistry.ts","../src/util/animation/AnimationRegistry.ts","../src/Observable.ts","../src/util/internals/removeFromArray.ts","../src/util/misc/cos.ts","../src/util/misc/sin.ts","../src/Point.ts","../src/Collection.ts","../src/CommonMethods.ts","../src/util/animation/AnimationFrameProvider.ts","../src/util/internals/uid.ts","../src/util/misc/dom.ts","../src/util/misc/radiansDegreesConversion.ts","../src/util/misc/matrix.ts","../src/util/misc/objectEnlive.ts","../src/util/misc/pick.ts","../src/color/color_map.ts","../src/color/constants.ts","../src/color/util.ts","../src/color/Color.ts","../src/util/misc/toFixed.ts","../src/util/misc/svgParsing.ts","../src/util/typeAssertions.ts","../src/util/dom_misc.ts","../src/canvas/DOMManagers/util.ts","../src/canvas/DOMManagers/StaticCanvasDOMManager.ts","../src/canvas/StaticCanvasOptions.ts","../src/canvas/StaticCanvas.ts","../src/util/dom_event.ts","../src/util/misc/boundingBoxFromPoints.ts","../src/util/misc/objectTransforms.ts","../src/util/misc/planeChange.ts","../src/controls/fireEvent.ts","../src/util/misc/resolveOrigin.ts","../src/controls/util.ts","../src/controls/drag.ts","../src/shapes/Object/FabricObjectSVGExportMixin.ts","../src/parser/getSvgRegex.ts","../src/parser/constants.ts","../src/util/misc/vectors.ts","../src/Shadow.ts","../src/util/misc/capValue.ts","../src/shapes/Object/defaultValues.ts","../src/util/animation/easing.ts","../src/util/animation/AnimationBase.ts","../src/util/animation/ValueAnimation.ts","../src/util/animation/ArrayAnimation.ts","../src/util/animation/ColorAnimation.ts","../src/util/animation/animate.ts","../src/Intersection.ts","../src/shapes/Object/ObjectGeometry.ts","../src/shapes/Object/Object.ts","../src/controls/wrapWithFireEvent.ts","../src/controls/wrapWithFixedAnchor.ts","../src/controls/changeWidth.ts","../src/controls/controlRendering.ts","../src/controls/Control.ts","../src/controls/rotate.ts","../src/controls/scale.ts","../src/controls/skew.ts","../src/controls/scaleSkew.ts","../src/controls/commonControls.ts","../src/shapes/Object/InteractiveObject.ts","../src/util/applyMixins.ts","../src/shapes/Object/FabricObject.ts","../src/util/misc/isTransparent.ts","../src/util/misc/rotatePoint.ts","../src/util/internals/findRight.ts","../src/util/misc/projectStroke/StrokeProjectionsBase.ts","../src/util/misc/projectStroke/StrokeLineJoinProjections.ts","../src/util/misc/projectStroke/StrokeLineCapProjections.ts","../src/util/misc/projectStroke/index.ts","../src/util/internals/cloneStyles.ts","../src/util/lang_string.ts","../src/util/misc/textStyles.ts","../src/parser/attributes.ts","../src/parser/selectorMatches.ts","../src/parser/doesSomeParentMatch.ts","../src/parser/elementMatchesRule.ts","../src/parser/getGlobalStylesForElement.ts","../src/parser/normalizeAttr.ts","../src/util/internals/cleanupSvgAttribute.ts","../src/parser/parseTransformAttribute.ts","../src/parser/normalizeValue.ts","../src/parser/parseFontDeclaration.ts","../src/parser/parseStyleObject.ts","../src/parser/parseStyleString.ts","../src/parser/parseStyleAttribute.ts","../src/parser/setStrokeFillOpacity.ts","../src/parser/parseAttributes.ts","../src/shapes/Rect.ts","../src/LayoutManager/constants.ts","../src/LayoutManager/LayoutStrategies/utils.ts","../src/LayoutManager/LayoutStrategies/LayoutStrategy.ts","../src/LayoutManager/LayoutStrategies/FitContentLayout.ts","../src/LayoutManager/LayoutManager.ts","../src/shapes/Group.ts","../src/util/misc/groupSVGElements.ts","../src/util/misc/findScaleTo.ts","../src/util/path/regex.ts","../src/util/path/index.ts","../src/util/dom_style.ts","../src/util/misc/mergeClipPaths.ts","../src/util/internals/getRandomInt.ts","../src/util/internals/dom_request.ts","../src/util/transform_matrix_removal.ts","../src/canvas/DOMManagers/CanvasDOMManager.ts","../src/canvas/CanvasOptions.ts","../src/canvas/SelectableCanvas.ts","../src/canvas/TextEditingManager.ts","../src/canvas/Canvas.ts","../src/gradient/constants.ts","../src/util/internals/ifNaN.ts","../src/parser/percent.ts","../src/gradient/parser/parseColorStops.ts","../src/gradient/parser/misc.ts","../src/gradient/parser/parseCoords.ts","../src/gradient/Gradient.ts","../src/Pattern/Pattern.ts","../src/brushes/BaseBrush.ts","../src/shapes/Path.ts","../src/brushes/PencilBrush.ts","../src/shapes/Circle.ts","../src/brushes/CircleBrush.ts","../src/brushes/SprayBrush.ts","../src/brushes/PatternBrush.ts","../src/shapes/Line.ts","../src/shapes/Triangle.ts","../src/shapes/Ellipse.ts","../src/parser/parsePointsAttribute.ts","../src/shapes/Polyline.ts","../src/shapes/Polygon.ts","../src/shapes/Text/constants.ts","../src/shapes/Text/StyledText.ts","../src/shapes/Text/TextSVGExportMixin.ts","../src/shapes/Text/Text.ts","../src/shapes/IText/DraggableTextDelegate.ts","../src/shapes/IText/ITextBehavior.ts","../src/shapes/IText/ITextKeyBehavior.ts","../src/shapes/IText/ITextClickBehavior.ts","../src/shapes/IText/constants.ts","../src/shapes/IText/IText.ts","../src/shapes/Textbox.ts","../src/LayoutManager/LayoutStrategies/ClipPathLayout.ts","../src/LayoutManager/LayoutStrategies/FixedLayout.ts","../src/LayoutManager/ActiveSelectionLayoutManager.ts","../src/shapes/ActiveSelection.ts","../src/filters/Canvas2dFilterBackend.ts","../src/filters/WebGLFilterBackend.ts","../src/filters/FilterBackend.ts","../src/shapes/Image.ts","../src/parser/applyViewboxTransform.ts","../src/parser/getTagName.ts","../src/parser/hasInvalidAncestor.ts","../src/parser/getMultipleNodes.ts","../src/parser/parseUseDirectives.ts","../src/parser/recursivelyParseGradientsXlink.ts","../src/parser/getGradientDefs.ts","../src/parser/getCSSRules.ts","../src/parser/elements_parser.ts","../src/parser/parseSVGDocument.ts","../src/parser/loadSVGFromString.ts","../src/parser/loadSVGFromURL.ts","../src/controls/polyControl.ts","../src/controls/pathControl.ts","../src/filters/utils.ts","../src/filters/shaders/baseFilter.ts","../src/filters/BaseFilter.ts","../src/filters/shaders/blendColor.ts","../src/filters/BlendColor.ts","../src/filters/shaders/blendImage.ts","../src/filters/BlendImage.ts","../src/filters/shaders/blur.ts","../src/filters/Blur.ts","../src/filters/shaders/brightness.ts","../src/filters/Brightness.ts","../src/filters/shaders/colorMatrix.ts","../src/filters/ColorMatrix.ts","../src/filters/ColorMatrixFilters.ts","../src/filters/Composed.ts","../src/filters/shaders/constrast.ts","../src/filters/Contrast.ts","../src/filters/shaders/convolute.ts","../src/filters/Convolute.ts","../src/filters/shaders/gamma.ts","../src/filters/Gamma.ts","../src/filters/shaders/grayscale.ts","../src/filters/Grayscale.ts","../src/filters/HueRotation.ts","../src/filters/shaders/invert.ts","../src/filters/Invert.ts","../src/filters/shaders/noise.ts","../src/filters/Noise.ts","../src/filters/shaders/pixelate.ts","../src/filters/Pixelate.ts","../src/filters/shaders/removeColor.ts","../src/filters/RemoveColor.ts","../src/filters/Resize.ts","../src/filters/shaders/saturation.ts","../src/filters/Saturation.ts","../src/filters/shaders/vibrance.ts","../src/filters/Vibrance.ts"],"sourcesContent":["export type TConfiguration = Partial;\n\nclass BaseConfiguration {\n /**\n * Browser-specific constant to adjust CanvasRenderingContext2D.shadowBlur value,\n * which is unitless and not rendered equally across browsers.\n *\n * Values that work quite well (as of October 2017) are:\n * - Chrome: 1.5\n * - Edge: 1.75\n * - Firefox: 0.9\n * - Safari: 0.95\n *\n * @since 2.0.0\n * @type Number\n * @default 1\n */\n browserShadowBlurConstant = 1;\n\n /**\n * Pixel per Inch as a default value set to 96. Can be changed for more realistic conversion.\n */\n DPI = 96;\n\n /**\n * Device Pixel Ratio\n * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\n */\n devicePixelRatio =\n typeof window !== 'undefined' ? window.devicePixelRatio : 1; // eslint-disable-line no-restricted-globals\n\n /**\n * Pixel limit for cache canvases. 1Mpx , 4Mpx should be fine.\n * @since 1.7.14\n * @type Number\n * @default\n */\n perfLimitSizeTotal = 2097152;\n\n /**\n * Pixel limit for cache canvases width or height. IE fixes the maximum at 5000\n * @since 1.7.14\n * @type Number\n * @default\n */\n maxCacheSideLimit = 4096;\n\n /**\n * Lowest pixel limit for cache canvases, set at 256PX\n * @since 1.7.14\n * @type Number\n * @default\n */\n minCacheSideLimit = 256;\n\n /**\n * When 'true', style information is not retained when copy/pasting text, making\n * pasted text use destination style.\n * Defaults to 'false'.\n * @type Boolean\n * @default\n * @deprecated\n */\n disableStyleCopyPaste = false;\n\n /**\n * Enable webgl for filtering picture is available\n * A filtering backend will be initialized, this will both take memory and\n * time since a default 2048x2048 canvas will be created for the gl context\n * @since 2.0.0\n * @type Boolean\n * @default\n */\n enableGLFiltering = true;\n\n /**\n * if webgl is enabled and available, textureSize will determine the size\n * of the canvas backend\n *\n * In order to support old hardware set to `2048` to avoid OOM\n *\n * @since 2.0.0\n * @type Number\n * @default\n */\n textureSize = 4096;\n\n /**\n * Skip performance testing of setupGLContext and force the use of putImageData that seems to be the one that works best on\n * Chrome + old hardware. if your users are experiencing empty images after filtering you may try to force this to true\n * this has to be set before instantiating the filtering backend ( before filtering the first image )\n * @type Boolean\n * @default false\n */\n forceGLPutImageData = false;\n\n /**\n * If disabled boundsOfCurveCache is not used. For apps that make heavy usage of pencil drawing probably disabling it is better\n * With the standard behaviour of fabric to translate all curves in absolute commands and by not subtracting the starting point from\n * the curve is very hard to hit any cache.\n * Enable only if you know why it could be useful.\n * Candidate for removal/simplification\n * @default false\n */\n cachesBoundsOfCurve = false;\n\n /**\n * Map of font files\n * Map of font files\n */\n fontPaths: Record = {};\n\n /**\n * Defines the number of fraction digits to use when serializing object values.\n * Used in exporting methods (`toObject`, `toJSON`, `toSVG`)\n * You can use it to increase/decrease precision of such values like left, top, scaleX, scaleY, etc.\n */\n NUM_FRACTION_DIGITS = 4;\n}\n\nexport class Configuration extends BaseConfiguration {\n constructor(config?: TConfiguration) {\n super();\n this.configure(config);\n }\n\n configure(config: TConfiguration = {}) {\n Object.assign(this, config);\n }\n\n /**\n * Map of font files\n */\n addFonts(\n paths: Record = {},\n ) {\n this.fontPaths = {\n ...this.fontPaths,\n ...paths,\n };\n }\n\n removeFonts(fontFamilys: string[] = []) {\n fontFamilys.forEach((fontFamily) => {\n delete this.fontPaths[fontFamily];\n });\n }\n\n clearFonts() {\n this.fontPaths = {};\n }\n\n restoreDefaults(keys?: (keyof T)[]) {\n const defaults = new BaseConfiguration() as T;\n const config =\n keys?.reduce((acc, key) => {\n acc[key] = defaults[key];\n return acc;\n }, {} as T) || defaults;\n this.configure(config);\n }\n}\n\nexport const config = new Configuration();\n","export const log = (\n severity: 'log' | 'warn' | 'error',\n ...optionalParams: any[]\n) =>\n // eslint-disable-next-line no-restricted-syntax\n console[severity]('fabric', ...optionalParams);\n\nexport class FabricError extends Error {\n constructor(message?: string, options?: ErrorOptions) {\n super(`fabric: ${message}`, options);\n }\n}\n\nexport class SignalAbortedError extends FabricError {\n constructor(context: string) {\n super(`${context} 'options.signal' is in 'aborted' state`);\n }\n}\n","export type GLPrecision = 'lowp' | 'mediump' | 'highp';\n\nexport abstract class GLProbe {\n declare GLPrecision: GLPrecision | undefined;\n abstract queryWebGL(canvas: HTMLCanvasElement): void;\n abstract isSupported(textureSize: number): boolean;\n}\n","import { log } from '../../util/internals/console';\nimport { GLProbe } from './GLProbe';\nimport type { GLPrecision } from './GLProbe';\n\n/**\n * Lazy initialize WebGL constants\n */\nexport class WebGLProbe extends GLProbe {\n declare maxTextureSize?: number;\n\n /**\n * Tests if webgl supports certain precision\n * @param {WebGL} Canvas WebGL context to test on\n * @param {GLPrecision} Precision to test can be any of following\n * @returns {Boolean} Whether the user's browser WebGL supports given precision.\n */\n private testPrecision(\n gl: WebGLRenderingContext,\n precision: GLPrecision,\n ): boolean {\n const fragmentSource = `precision ${precision} float;\\nvoid main(){}`;\n const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n if (!fragmentShader) {\n return false;\n }\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n return !!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS);\n }\n\n /**\n * query browser for WebGL\n */\n queryWebGL(canvas: HTMLCanvasElement) {\n const gl = canvas.getContext('webgl');\n if (gl) {\n this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n this.GLPrecision = (['highp', 'mediump', 'lowp'] as const).find(\n (precision) => this.testPrecision(gl, precision),\n );\n gl.getExtension('WEBGL_lose_context')!.loseContext();\n log('log', `WebGL: max texture size ${this.maxTextureSize}`);\n }\n }\n\n isSupported(textureSize: number) {\n return !!this.maxTextureSize && this.maxTextureSize >= textureSize;\n }\n}\n","/* eslint-disable no-restricted-globals */\nimport { WebGLProbe } from '../filters/GLProbes/WebGLProbe';\nimport type { TCopyPasteData, TFabricEnv } from './types';\n\nconst copyPasteData: TCopyPasteData = {};\n\nexport const getEnv = (): TFabricEnv => {\n return {\n document,\n window,\n isTouchSupported:\n 'ontouchstart' in window ||\n 'ontouchstart' in document ||\n (window && window.navigator && window.navigator.maxTouchPoints > 0),\n WebGLProbe: new WebGLProbe(),\n dispose() {\n // noop\n },\n copyPasteData,\n };\n};\n","/**\n * This file is consumed by fabric.\n * The `./node` and `./browser` files define the env variable that is used by this module.\n * The `./browser` module is defined to be the default env and doesn't set the env at all.\n * This is done in order to support isomorphic usage for browser and node applications\n * since window and document aren't defined at time of import in SSR, we can't set env so we avoid it by deferring to the default env.\n */\n\nimport { config } from '../config';\nimport { getEnv as getBrowserEnv } from './browser';\nimport type { TFabricEnv } from './types';\nimport type { DOMWindow } from 'jsdom';\n\nlet env: TFabricEnv;\n\n/**\n * Sets the environment variables used by fabric.\\\n * This is exposed for special cases, such as configuring a test environment, and should be used with care.\n *\n * **CAUTION**: Must be called before using the package.\n *\n * @example\n * Passing `window` and `document` objects to fabric (in case they are mocked or something)\n * import { getEnv, setEnv } from 'fabric';\n * // we want fabric to use the `window` and `document` objects exposed by the environment we are running in.\n * setEnv({ ...getEnv(), window, document });\n * // done with setup, using fabric is now safe\n */\nexport const setEnv = (value: TFabricEnv) => {\n env = value;\n};\n\n/**\n * In order to support SSR we **MUST** access the browser env only after the window has loaded\n */\nexport const getEnv = () => env || (env = getBrowserEnv());\n\nexport const getFabricDocument = (): Document => getEnv().document;\n\nexport const getFabricWindow = (): (Window & typeof globalThis) | DOMWindow =>\n getEnv().window;\n\n/**\n * @returns the config value if defined, fallbacks to the environment value\n */\nexport const getDevicePixelRatio = () =>\n Math.max(config.devicePixelRatio ?? getFabricWindow().devicePixelRatio, 1);\n","import { config } from './config';\nimport type { TRectBounds } from './typedefs';\n\nexport class Cache {\n /**\n * Cache of widths of chars in text rendering.\n */\n charWidthsCache: Record<\n /** fontFamily */ string,\n Record<\n /** fontStyleCacheKey */ string,\n Record\n >\n > = {};\n\n /**\n * @return {Object} reference to cache\n */\n getFontCache({\n fontFamily,\n fontStyle,\n fontWeight,\n }: {\n fontFamily: string;\n fontStyle: string;\n fontWeight: string | number;\n }) {\n fontFamily = fontFamily.toLowerCase();\n if (!this.charWidthsCache[fontFamily]) {\n this.charWidthsCache[fontFamily] = {};\n }\n const fontCache = this.charWidthsCache[fontFamily];\n const cacheKey = `${fontStyle.toLowerCase()}_${(\n fontWeight + ''\n ).toLowerCase()}`;\n if (!fontCache[cacheKey]) {\n fontCache[cacheKey] = {};\n }\n return fontCache[cacheKey];\n }\n\n /**\n * Clear char widths cache for the given font family or all the cache if no\n * fontFamily is specified.\n * Use it if you know you are loading fonts in a lazy way and you are not waiting\n * for custom fonts to load properly when adding text objects to the canvas.\n * If a text object is added when its own font is not loaded yet, you will get wrong\n * measurement and so wrong bounding boxes.\n * After the font cache is cleared, either change the textObject text content or call\n * initDimensions() to trigger a recalculation\n * @param {String} [fontFamily] font family to clear\n */\n clearFontCache(fontFamily?: string) {\n fontFamily = (fontFamily || '').toLowerCase();\n if (!fontFamily) {\n this.charWidthsCache = {};\n } else if (this.charWidthsCache[fontFamily]) {\n delete this.charWidthsCache[fontFamily];\n }\n }\n\n /**\n * Given current aspect ratio, determines the max width and height that can\n * respect the total allowed area for the cache.\n * @param {number} ar aspect ratio\n * @return {number[]} Limited dimensions X and Y\n */\n limitDimsByArea(ar: number) {\n const { perfLimitSizeTotal } = config;\n const roughWidth = Math.sqrt(perfLimitSizeTotal * ar);\n // we are not returning a point on purpose, to avoid circular dependencies\n // this is an internal utility\n return [\n Math.floor(roughWidth),\n Math.floor(perfLimitSizeTotal / roughWidth),\n ];\n }\n\n /**\n * This object keeps the results of the boundsOfCurve calculation mapped by the joined arguments necessary to calculate it.\n * It does speed up calculation, if you parse and add always the same paths, but in case of heavy usage of freedrawing\n * you do not get any speed benefit and you get a big object in memory.\n * The object was a private variable before, while now is appended to the lib so that you have access to it and you\n * can eventually clear it.\n * It was an internal variable, is accessible since version 2.3.4\n */\n boundsOfCurveCache: Record = {};\n}\n\nexport const cache = new Cache();\n","import type { TMat2D } from './typedefs';\n// use this syntax so babel plugin see this import here\nimport { version } from '../package.json';\n\nexport const VERSION = version;\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop() {}\n\nexport const halfPI = Math.PI / 2;\nexport const twoMathPi = Math.PI * 2;\nexport const PiBy180 = Math.PI / 180;\n\nexport const iMatrix = Object.freeze([1, 0, 0, 1, 0, 0]) as TMat2D;\nexport const DEFAULT_SVG_FONT_SIZE = 16;\nexport const ALIASING_LIMIT = 2;\n\n/* \"magic number\" for bezier approximations of arcs (http://itc.ktu.lt/itc354/Riskus354.pdf) */\nexport const kRect = 1 - 0.5522847498;\n\nexport const CENTER = 'center';\nexport const LEFT = 'left';\nexport const TOP = 'top';\nexport const BOTTOM = 'bottom';\nexport const RIGHT = 'right';\nexport const NONE = 'none';\n\nexport const reNewline = /\\r?\\n/;\n\nexport const MOVING = 'moving';\nexport const SCALING = 'scaling';\nexport const ROTATING = 'rotating';\nexport const ROTATE = 'rotate';\nexport const SKEWING = 'skewing';\nexport const RESIZING = 'resizing';\nexport const MODIFY_POLY = 'modifyPoly';\nexport const MODIFY_PATH = 'modifyPath';\nexport const CHANGED = 'changed';\nexport const SCALE = 'scale';\nexport const SCALE_X = 'scaleX';\nexport const SCALE_Y = 'scaleY';\nexport const SKEW_X = 'skewX';\nexport const SKEW_Y = 'skewY';\nexport const FILL = 'fill';\nexport const STROKE = 'stroke';\nexport const MODIFIED = 'modified';\n","import { FabricError } from './util/internals/console';\n\n/*\n * This Map connects the objects type value with their\n * class implementation. It used from any object to understand which are\n * the classes to enlive when requesting a object.type = 'path' for example.\n * Objects uses it for clipPath, Canvas uses it for everything.\n * This is necessary for generic code to run and enlive instances from serialized representation.\n * You can customize which classes get enlived from SVG parsing using this classRegistry.\n * The Registry start empty and gets filled in depending which files you import.\n * If you want to be able to parse arbitrary SVGs or JSON representation of canvases, coming from\n * different sources you will need to import all fabric because you may need all classes.\n */\n\nexport const JSON = 'json';\nexport const SVG = 'svg';\n\nexport class ClassRegistry {\n declare [JSON]: Map;\n declare [SVG]: Map;\n\n constructor() {\n this[JSON] = new Map();\n this[SVG] = new Map();\n }\n\n has(classType: string): boolean {\n return this[JSON].has(classType);\n }\n\n getClass(classType: string): T {\n const constructor = this[JSON].get(classType);\n if (!constructor) {\n throw new FabricError(`No class registered for ${classType}`);\n }\n return constructor;\n }\n\n setClass(classConstructor: any, classType?: string) {\n if (classType) {\n this[JSON].set(classType, classConstructor);\n } else {\n this[JSON].set(classConstructor.type, classConstructor);\n // legacy\n // @TODO: needs to be removed in fabric 7 or 8\n this[JSON].set(classConstructor.type.toLowerCase(), classConstructor);\n }\n }\n\n getSVGClass(SVGTagName: string): any {\n return this[SVG].get(SVGTagName);\n }\n\n setSVGClass(classConstructor: any, SVGTagName?: string) {\n this[SVG].set(\n SVGTagName ?? classConstructor.type.toLowerCase(),\n classConstructor,\n );\n }\n}\n\nexport const classRegistry = new ClassRegistry();\n","import type { StaticCanvas } from '../../canvas/StaticCanvas';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport type { AnimationBase } from './AnimationBase';\n\n/**\n * Array holding all running animations\n */\nclass AnimationRegistry extends Array {\n /**\n * Remove a single animation using an animation context\n * @param {AnimationBase} context\n */\n remove(context: AnimationBase) {\n const index = this.indexOf(context);\n index > -1 && this.splice(index, 1);\n }\n\n /**\n * Cancel all running animations on the next frame\n */\n cancelAll() {\n const animations = this.splice(0);\n animations.forEach((animation) => animation.abort());\n return animations;\n }\n\n /**\n * Cancel all running animations attached to a canvas on the next frame\n * @param {StaticCanvas} canvas\n */\n cancelByCanvas(canvas: StaticCanvas) {\n if (!canvas) {\n return [];\n }\n const animations = this.filter(\n (animation) =>\n animation.target === canvas ||\n (typeof animation.target === 'object' &&\n (animation.target as FabricObject)?.canvas === canvas),\n );\n animations.forEach((animation) => animation.abort());\n return animations;\n }\n\n /**\n * Cancel all running animations for target on the next frame\n * @param target\n */\n cancelByTarget(target: AnimationBase['target']) {\n if (!target) {\n return [];\n }\n const animations = this.filter((animation) => animation.target === target);\n animations.forEach((animation) => animation.abort());\n return animations;\n }\n}\n\nexport const runningAnimations = new AnimationRegistry();\n","export type TEventCallback = (options: T) => any;\n\ntype EventRegistryObject = {\n [K in keyof E]?: TEventCallback;\n};\n\n/**\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#events}\n * @see {@link http://fabricjs.com/events|Events demo}\n */\nexport class Observable {\n private __eventListeners: Record =\n {} as Record;\n\n /**\n * Observes specified event\n * @alias on\n * @param {string} eventName Event name (eg. 'after:render')\n * @param {EventRegistryObject} handlers key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function that receives a notification when an event of the specified type occurs\n * @return {Function} disposer\n */\n on(\n eventName: K,\n handler: TEventCallback,\n ): VoidFunction;\n on(handlers: EventRegistryObject): VoidFunction;\n on(\n arg0: K | EventRegistryObject,\n handler?: TEventCallback,\n ): VoidFunction {\n if (!this.__eventListeners) {\n this.__eventListeners = {} as Record;\n }\n if (typeof arg0 === 'object') {\n // one object with key/value pairs was passed\n Object.entries(arg0).forEach(([eventName, handler]) => {\n this.on(eventName as K, handler as TEventCallback);\n });\n return () => this.off(arg0);\n } else if (handler) {\n const eventName = arg0;\n if (!this.__eventListeners[eventName]) {\n this.__eventListeners[eventName] = [];\n }\n this.__eventListeners[eventName].push(handler);\n return () => this.off(eventName, handler);\n } else {\n // noop\n return () => false;\n }\n }\n\n /**\n * Observes specified event **once**\n * @alias once\n * @param {string} eventName Event name (eg. 'after:render')\n * @param {EventRegistryObject} handlers key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function that receives a notification when an event of the specified type occurs\n * @return {Function} disposer\n */\n once(\n eventName: K,\n handler: TEventCallback,\n ): VoidFunction;\n once(handlers: EventRegistryObject): VoidFunction;\n once(\n arg0: K | EventRegistryObject,\n handler?: TEventCallback,\n ): VoidFunction {\n if (typeof arg0 === 'object') {\n // one object with key/value pairs was passed\n const disposers: VoidFunction[] = [];\n Object.entries(arg0).forEach(([eventName, handler]) => {\n disposers.push(this.once(eventName as K, handler as TEventCallback));\n });\n return () => disposers.forEach((d) => d());\n } else if (handler) {\n const disposer = this.on(\n arg0,\n function onceHandler(this: Observable, ...args) {\n handler.call(this, ...args);\n disposer();\n },\n );\n return disposer;\n } else {\n // noop\n return () => false;\n }\n }\n\n /**\n * @private\n * @param {string} eventName\n * @param {Function} [handler]\n */\n private _removeEventListener(\n eventName: K,\n handler?: TEventCallback,\n ) {\n if (!this.__eventListeners[eventName]) {\n return;\n }\n\n if (handler) {\n const eventListener = this.__eventListeners[eventName];\n const index = eventListener.indexOf(handler);\n index > -1 && eventListener.splice(index, 1);\n } else {\n this.__eventListeners[eventName] = [];\n }\n }\n\n /**\n * Unsubscribe all event listeners for eventname.\n * Do not use this pattern. You could kill internal fabricJS events.\n * We know we should have protected events for internal flows, but we don't have yet\n * @deprecated\n * @param {string} eventName event name (eg. 'after:render')\n */\n off(eventName: K): void;\n /**\n * unsubscribe an event listener\n * @param {string} eventName event name (eg. 'after:render')\n * @param {TEventCallback} handler event listener to unsubscribe\n */\n off(eventName: K, handler: TEventCallback): void;\n /**\n * unsubscribe event listeners\n * @param handlers handlers key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n */\n off(handlers: EventRegistryObject): void;\n /**\n * unsubscribe all event listeners\n */\n off(): void;\n off(\n arg0?: K | EventRegistryObject,\n handler?: TEventCallback,\n ) {\n if (!this.__eventListeners) {\n return;\n }\n\n // remove all key/value pairs (event name -> event handler)\n if (typeof arg0 === 'undefined') {\n for (const eventName in this.__eventListeners) {\n this._removeEventListener(eventName);\n }\n }\n // one object with key/value pairs was passed\n else if (typeof arg0 === 'object') {\n Object.entries(arg0).forEach(([eventName, handler]) => {\n this._removeEventListener(eventName as K, handler as TEventCallback);\n });\n } else {\n this._removeEventListener(arg0, handler);\n }\n }\n\n /**\n * Fires event with an optional options object\n * @param {String} eventName Event name to fire\n * @param {Object} [options] Options object\n */\n fire(eventName: K, options?: EventSpec[K]) {\n if (!this.__eventListeners) {\n return;\n }\n\n const listenersForEvent = this.__eventListeners[eventName]?.concat();\n if (listenersForEvent) {\n for (let i = 0; i < listenersForEvent.length; i++) {\n listenersForEvent[i].call(this, options || {});\n }\n }\n }\n}\n","/**\n * Removes value from an array.\n * Presence of value (and its position in an array) is determined via `Array.prototype.indexOf`\n * @param {Array} array\n * @param {*} value\n * @return {Array} original array\n */\nexport const removeFromArray = (array: T[], value: T): T[] => {\n const idx = array.indexOf(value);\n if (idx !== -1) {\n array.splice(idx, 1);\n }\n return array;\n};\n","import type { TRadian } from '../../typedefs';\nimport { halfPI } from '../../constants';\n\n/**\n * Calculate the cos of an angle, avoiding returning floats for known results\n * This function is here just to avoid getting 0.999999999999999 when dealing\n * with numbers that are really 1 or 0.\n * @param {TRadian} angle the angle\n * @return {Number} the cosin value for angle.\n */\nexport const cos = (angle: TRadian): number => {\n if (angle === 0) {\n return 1;\n }\n const angleSlice = Math.abs(angle) / halfPI;\n switch (angleSlice) {\n case 1:\n case 3:\n return 0;\n case 2:\n return -1;\n }\n return Math.cos(angle);\n};\n","import type { TRadian } from '../../typedefs';\nimport { halfPI } from '../../constants';\n\n/**\n * Calculate the cos of an angle, avoiding returning floats for known results\n * This function is here just to avoid getting 0.999999999999999 when dealing\n * with numbers that are really 1 or 0.\n * @param {TRadian} angle the angle\n * @return {Number} the sin value for angle.\n */\nexport const sin = (angle: TRadian): number => {\n if (angle === 0) {\n return 0;\n }\n const angleSlice = angle / halfPI;\n const value = Math.sign(angle);\n switch (angleSlice) {\n case 1:\n return value;\n case 2:\n return 0;\n case 3:\n return -value;\n }\n return Math.sin(angle);\n};\n","import type { TMat2D, TRadian } from './typedefs';\nimport { cos } from './util/misc/cos';\nimport { sin } from './util/misc/sin';\n\nexport interface XY {\n x: number;\n y: number;\n}\n\n/**\n * Adaptation of work of Kevin Lindsey(kevin@kevlindev.com)\n */\nexport class Point implements XY {\n declare x: number;\n\n declare y: number;\n\n constructor();\n constructor(x: number, y: number);\n constructor(point?: XY);\n constructor(arg0: number | XY = 0, y = 0) {\n if (typeof arg0 === 'object') {\n this.x = arg0.x;\n this.y = arg0.y;\n } else {\n this.x = arg0;\n this.y = y;\n }\n }\n\n /**\n * Adds another point to this one and returns another one\n * @param {XY} that\n * @return {Point} new Point instance with added values\n */\n add(that: XY): Point {\n return new Point(this.x + that.x, this.y + that.y);\n }\n\n /**\n * Adds another point to this one\n * @param {XY} that\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n addEquals(that: XY): Point {\n this.x += that.x;\n this.y += that.y;\n return this;\n }\n\n /**\n * Adds value to this point and returns a new one\n * @param {Number} scalar\n * @return {Point} new Point with added value\n */\n scalarAdd(scalar: number): Point {\n return new Point(this.x + scalar, this.y + scalar);\n }\n\n /**\n * Adds value to this point\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarAddEquals(scalar: number): Point {\n this.x += scalar;\n this.y += scalar;\n return this;\n }\n\n /**\n * Subtracts another point from this point and returns a new one\n * @param {XY} that\n * @return {Point} new Point object with subtracted values\n */\n subtract(that: XY): Point {\n return new Point(this.x - that.x, this.y - that.y);\n }\n\n /**\n * Subtracts another point from this point\n * @param {XY} that\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n subtractEquals(that: XY): Point {\n this.x -= that.x;\n this.y -= that.y;\n return this;\n }\n\n /**\n * Subtracts value from this point and returns a new one\n * @param {Number} scalar\n * @return {Point}\n */\n scalarSubtract(scalar: number): Point {\n return new Point(this.x - scalar, this.y - scalar);\n }\n\n /**\n * Subtracts value from this point\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarSubtractEquals(scalar: number): Point {\n this.x -= scalar;\n this.y -= scalar;\n return this;\n }\n\n /**\n * Multiplies this point by another value and returns a new one\n * @param {XY} that\n * @return {Point}\n */\n multiply(that: XY): Point {\n return new Point(this.x * that.x, this.y * that.y);\n }\n\n /**\n * Multiplies this point by a value and returns a new one\n * @param {Number} scalar\n * @return {Point}\n */\n scalarMultiply(scalar: number): Point {\n return new Point(this.x * scalar, this.y * scalar);\n }\n\n /**\n * Multiplies this point by a value\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarMultiplyEquals(scalar: number): Point {\n this.x *= scalar;\n this.y *= scalar;\n return this;\n }\n\n /**\n * Divides this point by another and returns a new one\n * @param {XY} that\n * @return {Point}\n */\n divide(that: XY): Point {\n return new Point(this.x / that.x, this.y / that.y);\n }\n\n /**\n * Divides this point by a value and returns a new one\n * @param {Number} scalar\n * @return {Point}\n */\n scalarDivide(scalar: number): Point {\n return new Point(this.x / scalar, this.y / scalar);\n }\n\n /**\n * Divides this point by a value\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarDivideEquals(scalar: number): Point {\n this.x /= scalar;\n this.y /= scalar;\n return this;\n }\n\n /**\n * Returns true if this point is equal to another one\n * @param {XY} that\n * @return {Boolean}\n */\n eq(that: XY): boolean {\n return this.x === that.x && this.y === that.y;\n }\n\n /**\n * Returns true if this point is less than another one\n * @param {XY} that\n * @return {Boolean}\n */\n lt(that: XY): boolean {\n return this.x < that.x && this.y < that.y;\n }\n\n /**\n * Returns true if this point is less than or equal to another one\n * @param {XY} that\n * @return {Boolean}\n */\n lte(that: XY): boolean {\n return this.x <= that.x && this.y <= that.y;\n }\n\n /**\n\n * Returns true if this point is greater another one\n * @param {XY} that\n * @return {Boolean}\n */\n gt(that: XY): boolean {\n return this.x > that.x && this.y > that.y;\n }\n\n /**\n * Returns true if this point is greater than or equal to another one\n * @param {XY} that\n * @return {Boolean}\n */\n gte(that: XY): boolean {\n return this.x >= that.x && this.y >= that.y;\n }\n\n /**\n * Returns new point which is the result of linear interpolation with this one and another one\n * @param {XY} that\n * @param {Number} t , position of interpolation, between 0 and 1 default 0.5\n * @return {Point}\n */\n lerp(that: XY, t = 0.5): Point {\n t = Math.max(Math.min(1, t), 0);\n return new Point(\n this.x + (that.x - this.x) * t,\n this.y + (that.y - this.y) * t,\n );\n }\n\n /**\n * Returns distance from this point and another one\n * @param {XY} that\n * @return {Number}\n */\n distanceFrom(that: XY): number {\n const dx = this.x - that.x,\n dy = this.y - that.y;\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n /**\n * Returns the point between this point and another one\n * @param {XY} that\n * @return {Point}\n */\n midPointFrom(that: XY): Point {\n return this.lerp(that);\n }\n\n /**\n * Returns a new point which is the min of this and another one\n * @param {XY} that\n * @return {Point}\n */\n min(that: XY): Point {\n return new Point(Math.min(this.x, that.x), Math.min(this.y, that.y));\n }\n\n /**\n * Returns a new point which is the max of this and another one\n * @param {XY} that\n * @return {Point}\n */\n max(that: XY): Point {\n return new Point(Math.max(this.x, that.x), Math.max(this.y, that.y));\n }\n\n /**\n * Returns string representation of this point\n * @return {String}\n */\n toString(): string {\n return `${this.x},${this.y}`;\n }\n\n /**\n * Sets x/y of this point\n * @param {Number} x\n * @param {Number} y\n * @chainable\n */\n setXY(x: number, y: number) {\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * Sets x of this point\n * @param {Number} x\n * @chainable\n */\n setX(x: number) {\n this.x = x;\n return this;\n }\n\n /**\n * Sets y of this point\n * @param {Number} y\n * @chainable\n */\n setY(y: number) {\n this.y = y;\n return this;\n }\n\n /**\n * Sets x/y of this point from another point\n * @param {XY} that\n * @chainable\n */\n setFromPoint(that: XY) {\n this.x = that.x;\n this.y = that.y;\n return this;\n }\n\n /**\n * Swaps x/y of this point and another point\n * @param {XY} that\n */\n swap(that: XY) {\n const x = this.x,\n y = this.y;\n this.x = that.x;\n this.y = that.y;\n that.x = x;\n that.y = y;\n }\n\n /**\n * return a cloned instance of the point\n * @return {Point}\n */\n clone(): Point {\n return new Point(this.x, this.y);\n }\n\n /**\n * Rotates `point` around `origin` with `radians`\n * @static\n * @memberOf fabric.util\n * @param {XY} origin The origin of the rotation\n * @param {TRadian} radians The radians of the angle for the rotation\n * @return {Point} The new rotated point\n */\n rotate(radians: TRadian, origin: XY = ZERO): Point {\n // TODO benchmark and verify the add and subtract how much cost\n // and then in case early return if no origin is passed\n const sinus = sin(radians),\n cosinus = cos(radians);\n const p = this.subtract(origin);\n const rotated = new Point(\n p.x * cosinus - p.y * sinus,\n p.x * sinus + p.y * cosinus,\n );\n return rotated.add(origin);\n }\n\n /**\n * Apply transform t to point p\n * @static\n * @memberOf fabric.util\n * @param {TMat2D} t The transform\n * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied\n * @return {Point} The transformed point\n */\n transform(t: TMat2D, ignoreOffset = false): Point {\n return new Point(\n t[0] * this.x + t[2] * this.y + (ignoreOffset ? 0 : t[4]),\n t[1] * this.x + t[3] * this.y + (ignoreOffset ? 0 : t[5]),\n );\n }\n}\n\nexport const ZERO = new Point(0, 0);\n","import type { Constructor, TBBox } from './typedefs';\nimport { removeFromArray } from './util/internals/removeFromArray';\nimport { Point } from './Point';\nimport type { ActiveSelection } from './shapes/ActiveSelection';\nimport type { Group } from './shapes/Group';\nimport type { InteractiveFabricObject } from './shapes/Object/InteractiveObject';\nimport type { FabricObject } from './shapes/Object/FabricObject';\n\nexport const isCollection = (\n fabricObject?: FabricObject,\n): fabricObject is Group | ActiveSelection => {\n return !!fabricObject && Array.isArray((fabricObject as Group)._objects);\n};\n\nexport function createCollectionMixin(Base: TBase) {\n class Collection extends Base {\n /**\n * @type {FabricObject[]}\n * @TODO needs to end up in the constructor too\n */\n _objects: FabricObject[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectAdded(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectRemoved(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onStackOrderChanged(object: FabricObject) {\n // subclasses should override this method\n }\n\n /**\n * Adds objects to collection\n * Objects should be instances of (or inherit from) FabricObject\n * @param {...FabricObject[]} objects to add\n * @returns {number} new array length\n */\n add(...objects: FabricObject[]): number {\n const size = this._objects.push(...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return size;\n }\n\n /**\n * Inserts an object into collection at specified index\n * @param {number} index Index to insert object at\n * @param {...FabricObject[]} objects Object(s) to insert\n * @returns {number} new array length\n */\n insertAt(index: number, ...objects: FabricObject[]) {\n this._objects.splice(index, 0, ...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return this._objects.length;\n }\n\n /**\n * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n * @private\n * @param {...FabricObject[]} objects objects to remove\n * @returns {FabricObject[]} removed objects\n */\n remove(...objects: FabricObject[]) {\n const array = this._objects,\n removed: FabricObject[] = [];\n objects.forEach((object) => {\n const index = array.indexOf(object);\n // only call onObjectRemoved if an object was actually removed\n if (index !== -1) {\n array.splice(index, 1);\n removed.push(object);\n this._onObjectRemoved(object);\n }\n });\n return removed;\n }\n\n /**\n * Executes given function for each object in this group\n * A simple shortcut for getObjects().forEach, before es6 was more complicated,\n * now is just a shortcut.\n * @param {Function} callback\n * Callback invoked with current object as first argument,\n * index - as second and an array of all objects - as third.\n */\n forEachObject(\n callback: (\n object: FabricObject,\n index: number,\n array: FabricObject[],\n ) => any,\n ) {\n this.getObjects().forEach((object, index, objects) =>\n callback(object, index, objects),\n );\n }\n\n /**\n * Returns an array of children objects of this instance\n * @param {...String} [types] When specified, only objects of these types are returned\n * @return {Array}\n */\n getObjects(...types: string[]) {\n if (types.length === 0) {\n return [...this._objects];\n }\n return this._objects.filter((o) => o.isType(...types));\n }\n\n /**\n * Returns object at specified index\n * @param {Number} index\n * @return {Object} object at index\n */\n item(index: number) {\n return this._objects[index];\n }\n\n /**\n * Returns true if collection contains no objects\n * @return {Boolean} true if collection is empty\n */\n isEmpty() {\n return this._objects.length === 0;\n }\n\n /**\n * Returns a size of a collection (i.e: length of an array containing its objects)\n * @return {Number} Collection size\n */\n size() {\n return this._objects.length;\n }\n\n /**\n * Returns true if collection contains an object.\\\n * **Prefer using {@link FabricObject#isDescendantOf} for performance reasons**\n * instead of `a.contains(b)` use `b.isDescendantOf(a)`\n * @param {Object} object Object to check against\n * @param {Boolean} [deep=false] `true` to check all descendants, `false` to check only `_objects`\n * @return {Boolean} `true` if collection contains an object\n */\n contains(object: FabricObject, deep?: boolean): boolean {\n if (this._objects.includes(object)) {\n return true;\n } else if (deep) {\n return this._objects.some(\n (obj) =>\n obj instanceof Collection &&\n (obj as unknown as Collection).contains(object, true),\n );\n }\n return false;\n }\n\n /**\n * Returns number representation of a collection complexity\n * @return {Number} complexity\n */\n complexity() {\n return this._objects.reduce((memo, current) => {\n memo += current.complexity ? current.complexity() : 0;\n return memo;\n }, 0);\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the bottom of the stack of drawn objects\n * @param {fabric.Object} object Object to send to back\n * @returns {boolean} true if change occurred\n */\n sendObjectToBack(object: FabricObject) {\n if (!object || object === this._objects[0]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.unshift(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the top of the stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @returns {boolean} true if change occurred\n */\n bringObjectToFront(object: FabricObject) {\n if (!object || object === this._objects[this._objects.length - 1]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.push(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or a selection down in stack of drawn objects\n * An optional parameter, `intersecting` allows to move the object in behind\n * the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @returns {boolean} true if change occurred\n */\n sendObjectBackwards(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== 0) {\n // if object is not on the bottom of stack\n const newIdx = this.findNewLowerIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object or a selection up in stack of drawn objects\n * An optional parameter, intersecting allows to move the object in front\n * of the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @returns {boolean} true if change occurred\n */\n bringObjectForward(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== this._objects.length - 1) {\n // if object is not on top of stack (last item in an array)\n const newIdx = this.findNewUpperIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @param {number} index Position to move to\n * @returns {boolean} true if change occurred\n */\n moveObjectTo(object: FabricObject, index: number) {\n if (object === this._objects[index]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.splice(index, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n findNewLowerIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean,\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse down the stack looking for the nearest intersecting object\n for (let i = idx - 1; i >= 0; --i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx - 1;\n }\n\n return newIdx;\n }\n\n findNewUpperIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean,\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse up the stack looking for the nearest intersecting object\n for (let i = idx + 1; i < this._objects.length; ++i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx + 1;\n }\n\n return newIdx;\n }\n\n /**\n * Given a bounding box, return all the objects of the collection that are contained in the bounding box.\n * If `includeIntersecting` is true, return also the objects that intersect the bounding box as well.\n * This is meant to work with selection. Is not a generic method.\n * @param {TBBox} bbox a bounding box in scene coordinates\n * @param {{ includeIntersecting?: boolean }} options an object with includeIntersecting\n * @returns array of objects contained in the bounding box, ordered from top to bottom stacking wise\n */\n collectObjects(\n { left, top, width, height }: TBBox,\n { includeIntersecting = true }: { includeIntersecting?: boolean } = {},\n ) {\n const objects: InteractiveFabricObject[] = [],\n tl = new Point(left, top),\n br = tl.add(new Point(width, height));\n\n // we iterate reverse order to collect top first in case of click.\n for (let i = this._objects.length - 1; i >= 0; i--) {\n const object = this._objects[i] as unknown as InteractiveFabricObject;\n if (\n object.selectable &&\n object.visible &&\n ((includeIntersecting && object.intersectsWithRect(tl, br)) ||\n object.isContainedWithinRect(tl, br) ||\n (includeIntersecting && object.containsPoint(tl)) ||\n (includeIntersecting && object.containsPoint(br)))\n ) {\n objects.push(object);\n }\n }\n\n return objects;\n }\n }\n\n // https://github.com/microsoft/TypeScript/issues/32080\n return Collection as typeof Collection & TBase;\n}\n","import { Observable } from './Observable';\n\nexport class CommonMethods extends Observable {\n /**\n * Sets object's properties from options, for initialization only\n * @protected\n * @param {Object} [options] Options object\n */\n protected _setOptions(options: any = {}) {\n for (const prop in options) {\n this.set(prop, options[prop]);\n }\n }\n\n /**\n * @private\n */\n _setObject(obj: Record) {\n for (const prop in obj) {\n this._set(prop, obj[prop]);\n }\n }\n\n /**\n * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\n * @param {String|Object} key Property name or object (if object, iterate over the object properties)\n * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\n */\n set(key: string | Record, value?: any) {\n if (typeof key === 'object') {\n this._setObject(key);\n } else {\n this._set(key, value);\n }\n return this;\n }\n\n _set(key: string, value: any) {\n this[key as keyof this] = value;\n }\n\n /**\n * Toggles specified property from `true` to `false` or from `false` to `true`\n * @param {String} property Property to toggle\n */\n toggle(property: string) {\n const value = this.get(property);\n if (typeof value === 'boolean') {\n this.set(property, !value);\n }\n return this;\n }\n\n /**\n * Basic getter\n * @param {String} property Property name\n * @return {*} value of a property\n */\n get(property: string): any {\n return this[property as keyof this];\n }\n}\n","import { getFabricWindow } from '../../env';\n\nexport function requestAnimFrame(callback: FrameRequestCallback): number {\n return getFabricWindow().requestAnimationFrame(callback);\n}\n\nexport function cancelAnimFrame(handle: number): void {\n return getFabricWindow().cancelAnimationFrame(handle);\n}\n","let id = 0;\n\nexport const uid = () => id++;\n","import { getFabricDocument } from '../../env';\nimport type { ImageFormat, TSize } from '../../typedefs';\nimport { FabricError } from '../internals/console';\n/**\n * Creates canvas element\n * @return {CanvasElement} initialized canvas element\n */\nexport const createCanvasElement = (): HTMLCanvasElement => {\n const element = getFabricDocument().createElement('canvas');\n if (!element || typeof element.getContext === 'undefined') {\n throw new FabricError('Failed to create `canvas` element');\n }\n return element;\n};\n\n/**\n * Creates image element (works on client and node)\n * @return {HTMLImageElement} HTML image element\n */\nexport const createImage = (): HTMLImageElement =>\n getFabricDocument().createElement('img');\n\n/**\n * Creates a canvas element that is a copy of another and is also painted\n * @param {CanvasElement} canvas to copy size and content of\n * @return {CanvasElement} initialized canvas element\n */\nexport const copyCanvasElement = (\n canvas: HTMLCanvasElement,\n): HTMLCanvasElement => {\n const newCanvas = createCanvasElementFor(canvas);\n newCanvas.getContext('2d')?.drawImage(canvas, 0, 0);\n return newCanvas;\n};\n\nexport const createCanvasElementFor = (\n canvas: HTMLCanvasElement | ImageData | HTMLImageElement | TSize,\n): HTMLCanvasElement => {\n const newCanvas = createCanvasElement();\n newCanvas.width = canvas.width;\n newCanvas.height = canvas.height;\n return newCanvas;\n};\n\n/**\n * since 2.6.0 moved from canvas instance to utility.\n * possibly useless\n * @param {CanvasElement} canvasEl to copy size and content of\n * @param {String} format 'jpeg' or 'png', in some browsers 'webp' is ok too\n * @param {Number} quality <= 1 and > 0\n * @return {String} data url\n */\nexport const toDataURL = (\n canvasEl: HTMLCanvasElement,\n format: ImageFormat,\n quality: number,\n) => canvasEl.toDataURL(`image/${format}`, quality);\n\nexport const isHTMLCanvas = (\n canvas?: HTMLCanvasElement | string,\n): canvas is HTMLCanvasElement => {\n return !!canvas && (canvas as HTMLCanvasElement).getContext !== undefined;\n};\n","import type { TRadian, TDegree } from '../../typedefs';\nimport { PiBy180 } from '../../constants';\n\n/**\n * Transforms degrees to radians.\n * @param {TDegree} degrees value in degrees\n * @return {TRadian} value in radians\n */\nexport const degreesToRadians = (degrees: TDegree): TRadian =>\n (degrees * PiBy180) as TRadian;\n\n/**\n * Transforms radians to degrees.\n * @param {TRadian} radians value in radians\n * @return {TDegree} value in degrees\n */\nexport const radiansToDegrees = (radians: TRadian): TDegree =>\n (radians / PiBy180) as TDegree;\n","import { iMatrix } from '../../constants';\nimport type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport type { TDegree, TRadian, TMat2D } from '../../typedefs';\nimport { cos } from './cos';\nimport { degreesToRadians, radiansToDegrees } from './radiansDegreesConversion';\nimport { sin } from './sin';\n\nexport type TRotateMatrixArgs = {\n angle?: TDegree;\n};\n\nexport type TTranslateMatrixArgs = {\n translateX?: number;\n translateY?: number;\n};\n\nexport type TScaleMatrixArgs = {\n scaleX?: number;\n scaleY?: number;\n flipX?: boolean;\n flipY?: boolean;\n skewX?: TDegree;\n skewY?: TDegree;\n};\n\nexport type TComposeMatrixArgs = TTranslateMatrixArgs &\n TRotateMatrixArgs &\n TScaleMatrixArgs;\n\nexport type TQrDecomposeOut = Required<\n Omit\n>;\n\nexport const isIdentityMatrix = (mat: TMat2D) =>\n mat.every((value, index) => value === iMatrix[index]);\n\n/**\n * Apply transform t to point p\n * @deprecated use {@link Point#transform}\n * @param {Point | XY} p The point to transform\n * @param {Array} t The transform\n * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied\n * @return {Point} The transformed point\n */\nexport const transformPoint = (\n p: XY,\n t: TMat2D,\n ignoreOffset?: boolean,\n): Point => new Point(p).transform(t, ignoreOffset);\n\n/**\n * Invert transformation t\n * @param {Array} t The transform\n * @return {Array} The inverted transform\n */\nexport const invertTransform = (t: TMat2D): TMat2D => {\n const a = 1 / (t[0] * t[3] - t[1] * t[2]),\n r = [a * t[3], -a * t[1], -a * t[2], a * t[0], 0, 0] as TMat2D,\n { x, y } = new Point(t[4], t[5]).transform(r, true);\n r[4] = -x;\n r[5] = -y;\n return r;\n};\n\n/**\n * Multiply matrix A by matrix B to nest transformations\n * @param {TMat2D} a First transformMatrix\n * @param {TMat2D} b Second transformMatrix\n * @param {Boolean} is2x2 flag to multiply matrices as 2x2 matrices\n * @return {TMat2D} The product of the two transform matrices\n */\nexport const multiplyTransformMatrices = (\n a: TMat2D,\n b: TMat2D,\n is2x2?: boolean,\n): TMat2D =>\n [\n a[0] * b[0] + a[2] * b[1],\n a[1] * b[0] + a[3] * b[1],\n a[0] * b[2] + a[2] * b[3],\n a[1] * b[2] + a[3] * b[3],\n is2x2 ? 0 : a[0] * b[4] + a[2] * b[5] + a[4],\n is2x2 ? 0 : a[1] * b[4] + a[3] * b[5] + a[5],\n ] as TMat2D;\n\n/**\n * Multiplies {@link matrices} such that a matrix defines the plane for the rest of the matrices **after** it\n *\n * `multiplyTransformMatrixArray([A, B, C, D])` is equivalent to `A(B(C(D)))`\n *\n * @param matrices an array of matrices\n * @param [is2x2] flag to multiply matrices as 2x2 matrices\n * @returns the multiplication product\n */\nexport const multiplyTransformMatrixArray = (\n matrices: (TMat2D | undefined | null | false)[],\n is2x2?: boolean,\n) =>\n matrices.reduceRight(\n (product: TMat2D, curr) =>\n curr && product\n ? multiplyTransformMatrices(curr, product, is2x2)\n : curr || product,\n undefined as unknown as TMat2D,\n ) || iMatrix.concat();\n\nexport const calcPlaneRotation = ([a, b]: TMat2D) =>\n Math.atan2(b, a) as TRadian;\n\n/**\n * Decomposes standard 2x3 matrix into transform components\n * @param {TMat2D} a transformMatrix\n * @return {Object} Components of transform\n */\nexport const qrDecompose = (a: TMat2D): TQrDecomposeOut => {\n const angle = calcPlaneRotation(a),\n denom = Math.pow(a[0], 2) + Math.pow(a[1], 2),\n scaleX = Math.sqrt(denom),\n scaleY = (a[0] * a[3] - a[2] * a[1]) / scaleX,\n skewX = Math.atan2(a[0] * a[2] + a[1] * a[3], denom);\n return {\n angle: radiansToDegrees(angle),\n scaleX,\n scaleY,\n skewX: radiansToDegrees(skewX),\n skewY: 0 as TDegree,\n translateX: a[4] || 0,\n translateY: a[5] || 0,\n };\n};\n\n/**\n * Generate a translation matrix\n *\n * A translation matrix in the form of\n * [ 1 0 x ]\n * [ 0 1 y ]\n * [ 0 0 1 ]\n *\n * See @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#translate for more details\n *\n * @param {number} x translation on X axis\n * @param {number} [y] translation on Y axis\n * @returns {TMat2D} matrix\n */\nexport const createTranslateMatrix = (x: number, y = 0): TMat2D => [\n 1,\n 0,\n 0,\n 1,\n x,\n y,\n];\n\n/**\n * Generate a rotation matrix around around a point (x,y), defaulting to (0,0)\n *\n * A matrix in the form of\n * [cos(a) -sin(a) -x*cos(a)+y*sin(a)+x]\n * [sin(a) cos(a) -x*sin(a)-y*cos(a)+y]\n * [0 0 1 ]\n *\n *\n * @param {TDegree} angle rotation in degrees\n * @param {XY} [pivotPoint] pivot point to rotate around\n * @returns {TMat2D} matrix\n */\nexport function createRotateMatrix(\n { angle = 0 }: TRotateMatrixArgs = {},\n { x = 0, y = 0 }: Partial = {},\n): TMat2D {\n const angleRadiant = degreesToRadians(angle),\n cosValue = cos(angleRadiant),\n sinValue = sin(angleRadiant);\n return [\n cosValue,\n sinValue,\n -sinValue,\n cosValue,\n x ? x - (cosValue * x - sinValue * y) : 0,\n y ? y - (sinValue * x + cosValue * y) : 0,\n ];\n}\n\n/**\n * Generate a scale matrix around the point (0,0)\n *\n * A matrix in the form of\n * [x 0 0]\n * [0 y 0]\n * [0 0 1]\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#scale\n *\n * @param {number} x scale on X axis\n * @param {number} [y] scale on Y axis\n * @returns {TMat2D} matrix\n */\nexport const createScaleMatrix = (x: number, y: number = x): TMat2D => [\n x,\n 0,\n 0,\n y,\n 0,\n 0,\n];\n\nexport const angleToSkew = (angle: TDegree) =>\n Math.tan(degreesToRadians(angle));\n\nexport const skewToAngle = (value: TRadian) =>\n radiansToDegrees(Math.atan(value));\n\n/**\n * Generate a skew matrix for the X axis\n *\n * A matrix in the form of\n * [1 x 0]\n * [0 1 0]\n * [0 0 1]\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#skewx\n *\n * @param {TDegree} skewValue translation on X axis\n * @returns {TMat2D} matrix\n */\nexport const createSkewXMatrix = (skewValue: TDegree): TMat2D => [\n 1,\n 0,\n angleToSkew(skewValue),\n 1,\n 0,\n 0,\n];\n\n/**\n * Generate a skew matrix for the Y axis\n *\n * A matrix in the form of\n * [1 0 0]\n * [y 1 0]\n * [0 0 1]\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#skewy\n *\n * @param {TDegree} skewValue translation on Y axis\n * @returns {TMat2D} matrix\n */\nexport const createSkewYMatrix = (skewValue: TDegree): TMat2D => [\n 1,\n angleToSkew(skewValue),\n 0,\n 1,\n 0,\n 0,\n];\n\n/**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet.\n * is called DimensionsTransformMatrix because those properties are the one that influence\n * the size of the resulting box of the object.\n * @param {Object} options\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewY]\n * @return {Number[]} transform matrix\n */\nexport const calcDimensionsMatrix = ({\n scaleX = 1,\n scaleY = 1,\n flipX = false,\n flipY = false,\n skewX = 0 as TDegree,\n skewY = 0 as TDegree,\n}: TScaleMatrixArgs) => {\n let matrix = createScaleMatrix(\n flipX ? -scaleX : scaleX,\n flipY ? -scaleY : scaleY,\n );\n if (skewX) {\n matrix = multiplyTransformMatrices(matrix, createSkewXMatrix(skewX), true);\n }\n if (skewY) {\n matrix = multiplyTransformMatrices(matrix, createSkewYMatrix(skewY), true);\n }\n return matrix;\n};\n\n/**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet\n * Before changing this function look at: src/benchmarks/calcTransformMatrix.mjs\n * @param {Object} options\n * @param {Number} [options.angle]\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewY]\n * @param {Number} [options.translateX]\n * @param {Number} [options.translateY]\n * @return {Number[]} transform matrix\n */\nexport const composeMatrix = (options: TComposeMatrixArgs): TMat2D => {\n const { translateX = 0, translateY = 0, angle = 0 as TDegree } = options;\n let matrix = createTranslateMatrix(translateX, translateY);\n if (angle) {\n matrix = multiplyTransformMatrices(matrix, createRotateMatrix({ angle }));\n }\n const scaleMatrix = calcDimensionsMatrix(options);\n if (!isIdentityMatrix(scaleMatrix)) {\n matrix = multiplyTransformMatrices(matrix, scaleMatrix);\n }\n return matrix;\n};\n","import { noop } from '../../constants';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport type {\n Abortable,\n Constructor,\n TCrossOrigin,\n TFiller,\n} from '../../typedefs';\nimport { createImage } from './dom';\nimport { classRegistry } from '../../ClassRegistry';\nimport type { BaseFilter } from '../../filters/BaseFilter';\nimport type { FabricObject as BaseFabricObject } from '../../shapes/Object/Object';\nimport { FabricError, SignalAbortedError } from '../internals/console';\nimport type { Shadow } from '../../Shadow';\n\nexport type LoadImageOptions = Abortable & {\n /**\n * cors value for the image loading, default to anonymous\n */\n crossOrigin?: TCrossOrigin;\n};\n\n/**\n * Loads image element from given url and resolve it, or catch.\n * @param {String} url URL representing an image\n * @param {LoadImageOptions} [options] image loading options\n * @returns {Promise} the loaded image.\n */\nexport const loadImage = (\n url: string,\n { signal, crossOrigin = null }: LoadImageOptions = {},\n) =>\n new Promise(function (resolve, reject) {\n if (signal && signal.aborted) {\n return reject(new SignalAbortedError('loadImage'));\n }\n const img = createImage();\n let abort: EventListenerOrEventListenerObject;\n if (signal) {\n abort = function (err: Event) {\n img.src = '';\n reject(err);\n };\n signal.addEventListener('abort', abort, { once: true });\n }\n const done = function () {\n img.onload = img.onerror = null;\n abort && signal?.removeEventListener('abort', abort);\n resolve(img);\n };\n if (!url) {\n done();\n return;\n }\n img.onload = done;\n img.onerror = function () {\n abort && signal?.removeEventListener('abort', abort);\n reject(new FabricError(`Error loading ${img.src}`));\n };\n crossOrigin && (img.crossOrigin = crossOrigin);\n img.src = url;\n });\n\nexport type EnlivenObjectOptions = Abortable & {\n /**\n * Method for further parsing of object elements,\n * called after each fabric object created.\n */\n reviver?: <\n T extends\n | BaseFabricObject\n | FabricObject\n | BaseFilter\n | Shadow\n | TFiller,\n >(\n serializedObj: Record,\n instance: T,\n ) => void;\n};\n\n/**\n * @TODO type this correctly.\n * Creates corresponding fabric instances from their object representations\n * @param {Object[]} objects Objects to enliven\n * @param {EnlivenObjectOptions} [options]\n * @param {(serializedObj: object, instance: FabricObject) => any} [options.reviver] Method for further parsing of object elements,\n * called after each fabric object created.\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\nexport const enlivenObjects = <\n T extends\n | BaseFabricObject\n | FabricObject\n | BaseFilter\n | Shadow\n | TFiller,\n>(\n objects: any[],\n { signal, reviver = noop }: EnlivenObjectOptions = {},\n) =>\n new Promise((resolve, reject) => {\n const instances: T[] = [];\n signal && signal.addEventListener('abort', reject, { once: true });\n Promise.all(\n objects.map((obj) =>\n classRegistry\n .getClass<\n Constructor & {\n fromObject(options: any, context: Abortable): Promise;\n }\n >(obj.type)\n .fromObject(obj, { signal })\n .then((fabricInstance) => {\n reviver(obj, fabricInstance);\n instances.push(fabricInstance);\n return fabricInstance;\n }),\n ),\n )\n .then(resolve)\n .catch((error) => {\n // cleanup\n instances.forEach((instance) => {\n (instance as FabricObject).dispose &&\n (instance as FabricObject).dispose();\n });\n reject(error);\n })\n .finally(() => {\n signal && signal.removeEventListener('abort', reject);\n });\n });\n\n/**\n * Creates corresponding fabric instances residing in an object, e.g. `clipPath`\n * @param {Object} object with properties to enlive ( fill, stroke, clipPath, path )\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise>} the input object with enlived values\n */\nexport const enlivenObjectEnlivables = <\n R = Record,\n>(\n serializedObject: any,\n { signal }: Abortable = {},\n) =>\n new Promise((resolve, reject) => {\n const instances: (FabricObject | TFiller | Shadow)[] = [];\n signal && signal.addEventListener('abort', reject, { once: true });\n // enlive every possible property\n const promises = Object.values(serializedObject).map((value: any) => {\n if (!value) {\n return value;\n }\n /**\n * clipPath or shadow or gradient or text on a path or a pattern,\n * or the backgroundImage or overlayImage of canvas\n * If we have a type and there is a classe registered for it, we enlive it.\n * If there is no class registered for it we return the value as is\n * */\n if (value.type && classRegistry.has(value.type)) {\n return enlivenObjects([value], {\n signal,\n }).then(([enlived]) => {\n instances.push(enlived);\n return enlived;\n });\n }\n return value;\n });\n const keys = Object.keys(serializedObject);\n Promise.all(promises)\n .then((enlived) => {\n return enlived.reduce((acc, instance, index) => {\n acc[keys[index]] = instance;\n return acc;\n }, {});\n })\n .then(resolve)\n .catch((error) => {\n // cleanup\n instances.forEach((instance: any) => {\n instance.dispose && instance.dispose();\n });\n reject(error);\n })\n .finally(() => {\n signal && signal.removeEventListener('abort', reject);\n });\n });\n","/**\n * Populates an object with properties of another object\n * @param {Object} source Source object\n * @param {string[]} properties Properties names to include\n * @returns object populated with the picked keys\n */\nexport const pick = >(\n source: T,\n keys: (keyof T)[] = [],\n) => {\n return keys.reduce((o, key) => {\n if (key in source) {\n o[key] = source[key];\n }\n return o;\n }, {} as Partial);\n};\n\nexport const pickBy = >(\n source: T,\n predicate: (value: T[K], key: K, collection: T) => boolean,\n) => {\n return (Object.keys(source) as (keyof T)[]).reduce((o, key) => {\n if (predicate(source[key], key, source)) {\n o[key] = source[key];\n }\n return o;\n }, {} as Partial);\n};\n","/**\n * Map of the 148 color names with HEX code\n * @see: https://www.w3.org/TR/css3-color/#svg-color\n */\nexport const ColorNameMap = {\n aliceblue: '#F0F8FF',\n antiquewhite: '#FAEBD7',\n aqua: '#0FF',\n aquamarine: '#7FFFD4',\n azure: '#F0FFFF',\n beige: '#F5F5DC',\n bisque: '#FFE4C4',\n black: '#000',\n blanchedalmond: '#FFEBCD',\n blue: '#00F',\n blueviolet: '#8A2BE2',\n brown: '#A52A2A',\n burlywood: '#DEB887',\n cadetblue: '#5F9EA0',\n chartreuse: '#7FFF00',\n chocolate: '#D2691E',\n coral: '#FF7F50',\n cornflowerblue: '#6495ED',\n cornsilk: '#FFF8DC',\n crimson: '#DC143C',\n cyan: '#0FF',\n darkblue: '#00008B',\n darkcyan: '#008B8B',\n darkgoldenrod: '#B8860B',\n darkgray: '#A9A9A9',\n darkgrey: '#A9A9A9',\n darkgreen: '#006400',\n darkkhaki: '#BDB76B',\n darkmagenta: '#8B008B',\n darkolivegreen: '#556B2F',\n darkorange: '#FF8C00',\n darkorchid: '#9932CC',\n darkred: '#8B0000',\n darksalmon: '#E9967A',\n darkseagreen: '#8FBC8F',\n darkslateblue: '#483D8B',\n darkslategray: '#2F4F4F',\n darkslategrey: '#2F4F4F',\n darkturquoise: '#00CED1',\n darkviolet: '#9400D3',\n deeppink: '#FF1493',\n deepskyblue: '#00BFFF',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1E90FF',\n firebrick: '#B22222',\n floralwhite: '#FFFAF0',\n forestgreen: '#228B22',\n fuchsia: '#F0F',\n gainsboro: '#DCDCDC',\n ghostwhite: '#F8F8FF',\n gold: '#FFD700',\n goldenrod: '#DAA520',\n gray: '#808080',\n grey: '#808080',\n green: '#008000',\n greenyellow: '#ADFF2F',\n honeydew: '#F0FFF0',\n hotpink: '#FF69B4',\n indianred: '#CD5C5C',\n indigo: '#4B0082',\n ivory: '#FFFFF0',\n khaki: '#F0E68C',\n lavender: '#E6E6FA',\n lavenderblush: '#FFF0F5',\n lawngreen: '#7CFC00',\n lemonchiffon: '#FFFACD',\n lightblue: '#ADD8E6',\n lightcoral: '#F08080',\n lightcyan: '#E0FFFF',\n lightgoldenrodyellow: '#FAFAD2',\n lightgray: '#D3D3D3',\n lightgrey: '#D3D3D3',\n lightgreen: '#90EE90',\n lightpink: '#FFB6C1',\n lightsalmon: '#FFA07A',\n lightseagreen: '#20B2AA',\n lightskyblue: '#87CEFA',\n lightslategray: '#789',\n lightslategrey: '#789',\n lightsteelblue: '#B0C4DE',\n lightyellow: '#FFFFE0',\n lime: '#0F0',\n limegreen: '#32CD32',\n linen: '#FAF0E6',\n magenta: '#F0F',\n maroon: '#800000',\n mediumaquamarine: '#66CDAA',\n mediumblue: '#0000CD',\n mediumorchid: '#BA55D3',\n mediumpurple: '#9370DB',\n mediumseagreen: '#3CB371',\n mediumslateblue: '#7B68EE',\n mediumspringgreen: '#00FA9A',\n mediumturquoise: '#48D1CC',\n mediumvioletred: '#C71585',\n midnightblue: '#191970',\n mintcream: '#F5FFFA',\n mistyrose: '#FFE4E1',\n moccasin: '#FFE4B5',\n navajowhite: '#FFDEAD',\n navy: '#000080',\n oldlace: '#FDF5E6',\n olive: '#808000',\n olivedrab: '#6B8E23',\n orange: '#FFA500',\n orangered: '#FF4500',\n orchid: '#DA70D6',\n palegoldenrod: '#EEE8AA',\n palegreen: '#98FB98',\n paleturquoise: '#AFEEEE',\n palevioletred: '#DB7093',\n papayawhip: '#FFEFD5',\n peachpuff: '#FFDAB9',\n peru: '#CD853F',\n pink: '#FFC0CB',\n plum: '#DDA0DD',\n powderblue: '#B0E0E6',\n purple: '#800080',\n rebeccapurple: '#639',\n red: '#F00',\n rosybrown: '#BC8F8F',\n royalblue: '#4169E1',\n saddlebrown: '#8B4513',\n salmon: '#FA8072',\n sandybrown: '#F4A460',\n seagreen: '#2E8B57',\n seashell: '#FFF5EE',\n sienna: '#A0522D',\n silver: '#C0C0C0',\n skyblue: '#87CEEB',\n slateblue: '#6A5ACD',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#FFFAFA',\n springgreen: '#00FF7F',\n steelblue: '#4682B4',\n tan: '#D2B48C',\n teal: '#008080',\n thistle: '#D8BFD8',\n tomato: '#FF6347',\n turquoise: '#40E0D0',\n violet: '#EE82EE',\n wheat: '#F5DEB3',\n white: '#FFF',\n whitesmoke: '#F5F5F5',\n yellow: '#FF0',\n yellowgreen: '#9ACD32',\n};\n","/**\n * Regex matching color in RGB or RGBA formats (ex: `rgb(0, 0, 0)`, `rgba(255, 100, 10, 0.5)`, `rgba( 255 , 100 , 10 , 0.5 )`, `rgb(1,1,1)`, `rgba(100%, 60%, 10%, 0.5)`)\n * Also matching rgba(r g b / a) as per new specs\n * https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/rgb\n * Formal syntax at the time of writing:\n * =\n * rgb( [ | none ]{3} [ / [ | none ] ]? ) |\n * rgb( [ | none ]{3} [ / [ | none ] ]? )\n * = | \n *\n * For learners this is how you can read this regex\n * Regular expression for matching an rgba or rgb CSS color value\n *\n * /^ # Beginning of the string\n * rgba? # \"rgb\" or \"rgba\"\n * \\(\\s* # Opening parenthesis and optional whitespace\n * (\\d{0,3} # 0 to three digits R channel\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for the first color component\n * %? # Optional percent sign after the first color component\n * \\s* # Optional whitespace\n * [\\s|,] # Separator between color components can be a space or comma\n * \\s* # Optional whitespace\n * (\\d{0,3} # 0 to three digits G channel\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for the second color component\n * %? # Optional percent sign after the second color component\n * \\s* # Optional whitespace\n * [\\s|,] # Separator between color components can be a space or comma\n * \\s* # Optional whitespace\n * (\\d{0,3} # 0 to three digits B channel\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for the third color component\n * %? # Optional percent sign after the third color component\n * \\s* # Optional whitespace\n * (?: # Beginning of non-capturing group for alpha value\n * \\s* # Optional whitespace\n * [,/] # Comma or slash separator for alpha value\n * \\s* # Optional whitespace\n * (\\d{0,3} # Zero to three digits\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for alpha value\n * %? # Optional percent sign after alpha value\n * \\s* # Optional whitespace\n * )? # End of non-capturing group for alpha value (optional)\n * \\) # Closing parenthesis\n * $ # End of the string\n *\n * The alpha channel can be in the format 0.4 .7 or 1 or 73%\n *\n * WARNING this regex doesn't fail on off spec colors. it matches everything that could be a color.\n * So the spec does not allow for `rgba(30 , 45% 35, 49%)` but this will work anyways for us\n */\nexport const reRGBa = () =>\n /^rgba?\\(\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*(?:\\s*[,/]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*)?\\)$/i;\n\n/**\n * Regex matching color in HSL or HSLA formats (ex: hsl(0, 0, 0), rgba(255, 100, 10, 0.5), rgba( 255 , 100 , 10 , 0.5 ), rgb(1,1,1), rgba(100%, 60%, 10%, 0.5))\n * Also matching rgba(r g b / a) as per new specs\n * https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/hsl\n * Formal syntax at the time of writing:\n * =\n * hsl( [ | none ] [ | none ] [ | none ] [ / [ | none ] ]? )\n *\n * =\n * |\n * \n *\n * =\n * |\n * \n *\n * For learners this is how you can read this regex\n * Regular expression for matching an hsla or hsl CSS color value\n *\n * /^hsla?\\( // Matches the beginning of the string and the opening parenthesis of \"hsl\" or \"hsla\"\n * \\s* // Matches any whitespace characters (space, tab, etc.) zero or more times\n * (\\d{0,3} // Hue: 0 to three digits - start capture in a group\n * (?:\\.\\d+)? // Hue: Optional (non capture group) decimal with one or more digits.\n * (?:deg|turn|rad)? // Hue: Optionally include suffix deg or turn or rad\n * ) // Hue: End capture group\n * \\s* // Matches any whitespace characters zero or more times\n * [\\s|,] // Matches a space, tab or comma\n * \\s* // Matches any whitespace characters zero or more times\n * (\\d{0,3} // Saturation: 0 to three digits - start capture in a group\n * (?:\\.\\d+)? // Saturation: Optional decimal with one or more digits in a non-capturing group\n * %?) // Saturation: match optional % character and end capture group\n * \\s* // Matches any whitespace characters zero or more times\n * [\\s|,] // Matches a space, tab or comma\n * \\s* // Matches any whitespace characters zero or more times\n * (\\d{0,3} // Lightness: 0 to three digits - start capture in a group\n * (?:\\.\\d+)? // Lightness: Optional decimal with one or more digits in a non-capturing group\n * %?) // Lightness: match % character and end capture group\n * \\s* // Matches any whitespace characters zero or more times\n * (?: // Alpha: Begins a non-capturing group for the alpha value\n * \\s* // Matches any whitespace characters zero or more times\n * [,/] // Matches a comma or forward slash\n * \\s* // Matches any whitespace characters zero or more times\n * (\\d*(?:\\.\\d+)?%?) // Matches zero or more digits, optionally followed by a decimal point and one or more digits, followed by an optional percentage sign and captures it in a group\n * \\s* // Matches any whitespace characters zero or more times\n * )? // Makes the alpha value group optional\n * \\) // Matches the closing parenthesis\n * $/i // Matches the end of the string and sets the regular expression to case-insensitive mode\n *\n * WARNING this regex doesn't fail on off spec colors. It matches everything that could be a color.\n * So the spec does not allow `hsl(30 , 45% 35, 49%)` but this will work anyways for us.\n */\nexport const reHSLa = () =>\n /^hsla?\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?(?:deg|turn|rad)?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*(?:\\s*[,/]\\s*(\\d*(?:\\.\\d+)?%?)\\s*)?\\)$/i;\n\n/**\n * Regex matching color in HEX format (ex: #FF5544CC, #FF5555, 010155, aff)\n */\nexport const reHex = () => /^#?(([0-9a-f]){3,4}|([0-9a-f]{2}){3,4})$/i;\n","import type { TRGBAColorSource } from './typedefs';\n\n/**\n * @param {Number} p\n * @param {Number} q\n * @param {Number} t\n * @return {Number}\n */\nexport const hue2rgb = (p: number, q: number, t: number): number => {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n};\n\n/**\n * Adapted from {@link https://gist.github.com/mjackson/5311256 https://gist.github.com/mjackson}\n * @param {Number} r Red color value\n * @param {Number} g Green color value\n * @param {Number} b Blue color value\n * @param {Number} a Alpha color value pass through\n * @return {TRGBColorSource} Hsl color\n */\nexport const rgb2Hsl = (\n r: number,\n g: number,\n b: number,\n a: number,\n): TRGBAColorSource => {\n r /= 255;\n g /= 255;\n b /= 255;\n const maxValue = Math.max(r, g, b),\n minValue = Math.min(r, g, b);\n\n let h!: number, s: number;\n const l = (maxValue + minValue) / 2;\n\n if (maxValue === minValue) {\n h = s = 0; // achromatic\n } else {\n const d = maxValue - minValue;\n s = l > 0.5 ? d / (2 - maxValue - minValue) : d / (maxValue + minValue);\n switch (maxValue) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return [Math.round(h * 360), Math.round(s * 100), Math.round(l * 100), a];\n};\n\nexport const fromAlphaToFloat = (value = '1') =>\n parseFloat(value) / (value.endsWith('%') ? 100 : 1);\n\n/**\n * Convert a value in the inclusive range [0, 255] to hex\n */\nexport const hexify = (value: number) =>\n Math.min(Math.round(value), 255).toString(16).toUpperCase().padStart(2, '0');\n\n/**\n * Calculate the grey average value for rgb and pass through alpha\n */\nexport const greyAverage = ([\n r,\n g,\n b,\n a = 1,\n]: TRGBAColorSource): TRGBAColorSource => {\n const avg = Math.round(r * 0.3 + g * 0.59 + b * 0.11);\n return [avg, avg, avg, a];\n};\n","import { radiansToDegrees } from '../util/misc/radiansDegreesConversion';\nimport { ColorNameMap } from './color_map';\nimport { reHSLa, reHex, reRGBa } from './constants';\nimport type { TRGBAColorSource, TColorArg } from './typedefs';\nimport {\n hue2rgb,\n hexify,\n rgb2Hsl,\n fromAlphaToFloat,\n greyAverage,\n} from './util';\n\n/**\n * @class Color common color operations\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2/#colors colors}\n */\nexport class Color {\n private declare _source: TRGBAColorSource;\n isUnrecognised = false;\n\n /**\n *\n * @param {string} [color] optional in hex or rgb(a) or hsl format or from known color list\n */\n constructor(color?: TColorArg) {\n if (!color) {\n // we default to black as canvas does\n this.setSource([0, 0, 0, 1]);\n } else if (color instanceof Color) {\n this.setSource([...color._source]);\n } else if (Array.isArray(color)) {\n const [r, g, b, a = 1] = color;\n this.setSource([r, g, b, a]);\n } else {\n this.setSource(this._tryParsingColor(color));\n }\n }\n\n /**\n * @private\n * @param {string} [color] Color value to parse\n * @returns {TRGBAColorSource}\n */\n protected _tryParsingColor(color: string) {\n if (color in ColorNameMap) {\n color = ColorNameMap[color as keyof typeof ColorNameMap];\n }\n return color === 'transparent'\n ? ([255, 255, 255, 0] as TRGBAColorSource)\n : Color.sourceFromHex(color) ||\n Color.sourceFromRgb(color) ||\n Color.sourceFromHsl(color) ||\n // color is not recognized\n // we default to black as canvas does\n // eslint-disable-next-line no-constant-binary-expression\n ((this.isUnrecognised = true) && ([0, 0, 0, 1] as TRGBAColorSource));\n }\n\n /**\n * Returns source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n * @return {TRGBAColorSource}\n */\n getSource() {\n return this._source;\n }\n\n /**\n * Sets source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n * @param {TRGBAColorSource} source\n */\n setSource(source: TRGBAColorSource) {\n this._source = source;\n }\n\n /**\n * Returns color representation in RGB format\n * @return {String} ex: rgb(0-255,0-255,0-255)\n */\n toRgb() {\n const [r, g, b] = this.getSource();\n return `rgb(${r},${g},${b})`;\n }\n\n /**\n * Returns color representation in RGBA format\n * @return {String} ex: rgba(0-255,0-255,0-255,0-1)\n */\n toRgba() {\n return `rgba(${this.getSource().join(',')})`;\n }\n\n /**\n * Returns color representation in HSL format\n * @return {String} ex: hsl(0-360,0%-100%,0%-100%)\n */\n toHsl() {\n const [h, s, l] = rgb2Hsl(...this.getSource());\n return `hsl(${h},${s}%,${l}%)`;\n }\n\n /**\n * Returns color representation in HSLA format\n * @return {String} ex: hsla(0-360,0%-100%,0%-100%,0-1)\n */\n toHsla() {\n const [h, s, l, a] = rgb2Hsl(...this.getSource());\n return `hsla(${h},${s}%,${l}%,${a})`;\n }\n\n /**\n * Returns color representation in HEX format\n * @return {String} ex: FF5555\n */\n toHex() {\n const fullHex = this.toHexa();\n return fullHex.slice(0, 6);\n }\n\n /**\n * Returns color representation in HEXA format\n * @return {String} ex: FF5555CC\n */\n toHexa() {\n const [r, g, b, a] = this.getSource();\n return `${hexify(r)}${hexify(g)}${hexify(b)}${hexify(Math.round(a * 255))}`;\n }\n\n /**\n * Gets value of alpha channel for this color\n * @return {Number} 0-1\n */\n getAlpha() {\n return this.getSource()[3];\n }\n\n /**\n * Sets value of alpha channel for this color\n * @param {Number} alpha Alpha value 0-1\n * @return {Color} thisArg\n */\n setAlpha(alpha: number) {\n this._source[3] = alpha;\n return this;\n }\n\n /**\n * Transforms color to its grayscale representation\n * @return {Color} thisArg\n */\n toGrayscale() {\n this.setSource(greyAverage(this.getSource()));\n return this;\n }\n\n /**\n * Transforms color to its black and white representation\n * @param {Number} threshold\n * @return {Color} thisArg\n */\n toBlackWhite(threshold: number) {\n const [average, , , a] = greyAverage(this.getSource()),\n bOrW = average < (threshold || 127) ? 0 : 255;\n this.setSource([bOrW, bOrW, bOrW, a]);\n return this;\n }\n\n /**\n * Overlays color with another color\n * @param {String|Color} otherColor\n * @return {Color} thisArg\n */\n overlayWith(otherColor: string | Color) {\n if (!(otherColor instanceof Color)) {\n otherColor = new Color(otherColor);\n }\n\n const source = this.getSource(),\n otherAlpha = 0.5,\n otherSource = otherColor.getSource(),\n [R, G, B] = source.map((value, index) =>\n Math.round(value * (1 - otherAlpha) + otherSource[index] * otherAlpha),\n );\n\n this.setSource([R, G, B, source[3]]);\n return this;\n }\n\n /**\n * Returns new color object, when given a color in RGB format\n * @memberOf Color\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255)\n * @return {Color}\n */\n static fromRgb(color: string): Color {\n return Color.fromRgba(color);\n }\n\n /**\n * Returns new color object, when given a color in RGBA format\n * @static\n * @function\n * @memberOf Color\n * @param {String} color\n * @return {Color}\n */\n static fromRgba(color: string): Color {\n return new Color(Color.sourceFromRgb(color));\n }\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in RGB or RGBA format\n * @memberOf Color\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255), rgb(0%-100%,0%-100%,0%-100%)\n * @return {TRGBAColorSource | undefined} source\n */\n static sourceFromRgb(color: string): TRGBAColorSource | undefined {\n const match = color.match(reRGBa());\n if (match) {\n const [r, g, b] = match.slice(1, 4).map((value) => {\n const parsedValue = parseFloat(value);\n return value.endsWith('%')\n ? Math.round(parsedValue * 2.55)\n : parsedValue;\n });\n return [r, g, b, fromAlphaToFloat(match[4])];\n }\n }\n\n /**\n * Returns new color object, when given a color in HSL format\n * @param {String} color Color value ex: hsl(0-260,0%-100%,0%-100%)\n * @memberOf Color\n * @return {Color}\n */\n static fromHsl(color: string): Color {\n return Color.fromHsla(color);\n }\n\n /**\n * Returns new color object, when given a color in HSLA format\n * @static\n * @function\n * @memberOf Color\n * @param {String} color\n * @return {Color}\n */\n static fromHsla(color: string): Color {\n return new Color(Color.sourceFromHsl(color));\n }\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HSL or HSLA format.\n * Adapted from https://github.com/mjijackson\n * @memberOf Color\n * @param {String} color Color value ex: hsl(0-360,0%-100%,0%-100%) or hsla(0-360,0%-100%,0%-100%, 0-1)\n * @return {TRGBAColorSource | undefined} source\n * @see http://http://www.w3.org/TR/css3-color/#hsl-color\n */\n static sourceFromHsl(color: string): TRGBAColorSource | undefined {\n const match = color.match(reHSLa());\n if (!match) {\n return;\n }\n const match1degrees = Color.parseAngletoDegrees(match[1]);\n\n const h = (((match1degrees % 360) + 360) % 360) / 360,\n s = parseFloat(match[2]) / 100,\n l = parseFloat(match[3]) / 100;\n let r: number, g: number, b: number;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const q = l <= 0.5 ? l * (s + 1) : l + s - l * s,\n p = l * 2 - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n fromAlphaToFloat(match[4]),\n ];\n }\n\n /**\n * Returns new color object, when given a color in HEX format\n * @static\n * @memberOf Color\n * @param {String} color Color value ex: FF5555\n * @return {Color}\n */\n static fromHex(color: string): Color {\n return new Color(Color.sourceFromHex(color));\n }\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HEX format\n * @static\n * @memberOf Color\n * @param {String} color ex: FF5555 or FF5544CC (RGBa)\n * @return {TRGBAColorSource | undefined} source\n */\n static sourceFromHex(color: string): TRGBAColorSource | undefined {\n if (color.match(reHex())) {\n const value = color.slice(color.indexOf('#') + 1),\n isShortNotation = value.length <= 4;\n let expandedValue: string[];\n if (isShortNotation) {\n expandedValue = value.split('').map((hex) => hex + hex);\n } else {\n expandedValue = value.match(/.{2}/g)!;\n }\n const [r, g, b, a = 255] = expandedValue.map((hexCouple) =>\n parseInt(hexCouple, 16),\n );\n return [r, g, b, a / 255];\n }\n }\n\n /**\n * Converts a string that could be any angle notation (50deg, 0.5turn, 2rad)\n * into degrees without the 'deg' suffix\n * @static\n * @memberOf Color\n * @param {String} value ex: 0deg, 0.5turn, 2rad\n * @return {Number} number in degrees or NaN if inputs are invalid\n */\n static parseAngletoDegrees(value: string): number {\n const lowercase = value.toLowerCase();\n const numeric = parseFloat(lowercase);\n\n if (lowercase.includes('rad')) {\n return radiansToDegrees(numeric);\n }\n\n if (lowercase.includes('turn')) {\n return numeric * 360;\n }\n\n // Value is probably just a number already in degrees eg '50'\n return numeric;\n }\n}\n","/**\n * A wrapper around Number#toFixed, which contrary to native method returns number, not string.\n * @param {number|string} number number to operate on\n * @param {number} fractionDigits number of fraction digits to \"leave\"\n * @return {number}\n */\nexport const toFixed = (number: number | string, fractionDigits: number) =>\n parseFloat(Number(number).toFixed(fractionDigits));\n","import { Color } from '../../color/Color';\nimport { config } from '../../config';\nimport { DEFAULT_SVG_FONT_SIZE, FILL, NONE } from '../../constants';\nimport type {\n TBBox,\n TMat2D,\n SVGElementName,\n SupportedSVGUnit,\n} from '../../typedefs';\nimport { toFixed } from './toFixed';\n\n/**\n * Returns array of attributes for given svg that fabric parses\n * @param {SVGElementName} type Type of svg element (eg. 'circle')\n * @return {Array} string names of supported attributes\n */\nexport const getSvgAttributes = (type: SVGElementName) => {\n const commonAttributes = ['instantiated_by_use', 'style', 'id', 'class'];\n switch (type) {\n case 'linearGradient':\n return commonAttributes.concat([\n 'x1',\n 'y1',\n 'x2',\n 'y2',\n 'gradientUnits',\n 'gradientTransform',\n ]);\n case 'radialGradient':\n return commonAttributes.concat([\n 'gradientUnits',\n 'gradientTransform',\n 'cx',\n 'cy',\n 'r',\n 'fx',\n 'fy',\n 'fr',\n ]);\n case 'stop':\n return commonAttributes.concat(['offset', 'stop-color', 'stop-opacity']);\n }\n return commonAttributes;\n};\n\n/**\n * Converts from attribute value to pixel value if applicable.\n * Returns converted pixels or original value not converted.\n * @param {string} value number to operate on\n * @param {number} fontSize\n * @return {number}\n */\nexport const parseUnit = (value: string, fontSize = DEFAULT_SVG_FONT_SIZE) => {\n const unit = /\\D{0,2}$/.exec(value),\n number = parseFloat(value);\n const dpi = config.DPI;\n switch (unit?.[0] as SupportedSVGUnit) {\n case 'mm':\n return (number * dpi) / 25.4;\n\n case 'cm':\n return (number * dpi) / 2.54;\n\n case 'in':\n return number * dpi;\n\n case 'pt':\n return (number * dpi) / 72; // or * 4 / 3\n\n case 'pc':\n return ((number * dpi) / 72) * 12; // or * 16\n\n case 'em':\n return number * fontSize;\n\n default:\n return number;\n }\n};\n\nexport type MeetOrSlice = 'meet' | 'slice';\n\nexport type MinMidMax = 'Min' | 'Mid' | 'Max' | 'none';\n\nexport type TPreserveArParsed = {\n meetOrSlice: MeetOrSlice;\n alignX: MinMidMax;\n alignY: MinMidMax;\n};\n\n// align can be either none or undefined or a combination of mid/max\nconst parseAlign = (align: string): MinMidMax[] => {\n //divide align in alignX and alignY\n if (align && align !== NONE) {\n return [align.slice(1, 4) as MinMidMax, align.slice(5, 8) as MinMidMax];\n } else if (align === NONE) {\n return [align, align];\n }\n return ['Mid', 'Mid'];\n};\n\n/**\n * Parse preserveAspectRatio attribute from element\n * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio\n * @param {string} attribute to be parsed\n * @return {Object} an object containing align and meetOrSlice attribute\n */\nexport const parsePreserveAspectRatioAttribute = (\n attribute: string,\n): TPreserveArParsed => {\n const [firstPart, secondPart] = attribute.trim().split(' ') as [\n MinMidMax,\n MeetOrSlice | undefined,\n ];\n const [alignX, alignY] = parseAlign(firstPart);\n return {\n meetOrSlice: secondPart || 'meet',\n alignX,\n alignY,\n };\n};\n\n/**\n * given an array of 6 number returns something like `\"matrix(...numbers)\"`\n * @param {TMat2D} transform an array with 6 numbers\n * @return {String} transform matrix for svg\n */\nexport const matrixToSVG = (transform: TMat2D) =>\n 'matrix(' +\n transform\n .map((value) => toFixed(value, config.NUM_FRACTION_DIGITS))\n .join(' ') +\n ')';\n\n/**\n * Adobe Illustrator (at least CS5) is unable to render rgba()-based fill values\n * we work around it by \"moving\" alpha channel into opacity attribute and setting fill's alpha to 1\n * @param prop\n * @param value\n * @param {boolean} inlineStyle The default is inline style, the separator used is \":\", The other is \"=\"\n * @returns\n */\nexport const colorPropToSVG = (\n prop: string,\n value?: any,\n inlineStyle = true,\n) => {\n let colorValue;\n let opacityValue;\n if (!value) {\n colorValue = 'none';\n } else if (value.toLive) {\n colorValue = `url(#SVGID_${value.id})`;\n } else {\n const color = new Color(value),\n opacity = color.getAlpha();\n\n colorValue = color.toRgb();\n if (opacity !== 1) {\n opacityValue = opacity.toString();\n }\n }\n if (inlineStyle) {\n return `${prop}: ${colorValue}; ${\n opacityValue ? `${prop}-opacity: ${opacityValue}; ` : ''\n }`;\n } else {\n return `${prop}=\"${colorValue}\" ${\n opacityValue ? `${prop}-opacity=\"${opacityValue}\" ` : ''\n }`;\n }\n};\n\nexport const createSVGRect = (\n color: string,\n { left, top, width, height }: TBBox,\n precision = config.NUM_FRACTION_DIGITS,\n) => {\n const svgColor = colorPropToSVG(FILL, color, false);\n const [x, y, w, h] = [left, top, width, height].map((value) =>\n toFixed(value, precision),\n );\n return ``;\n};\n","import type { FabricObject } from '../shapes/Object/Object';\nimport type { TFiller } from '../typedefs';\nimport type { FabricText } from '../shapes/Text/Text';\nimport type { Pattern } from '../Pattern';\nimport type { Path } from '../shapes/Path';\nimport type { ActiveSelection } from '../shapes/ActiveSelection';\n\nexport const isFiller = (\n filler: TFiller | string | null,\n): filler is TFiller => {\n return !!filler && (filler as TFiller).toLive !== undefined;\n};\n\nexport const isSerializableFiller = (\n filler: TFiller | string | null,\n): filler is TFiller => {\n return !!filler && typeof (filler as TFiller).toObject === 'function';\n};\n\nexport const isPattern = (filler: TFiller): filler is Pattern => {\n return (\n !!filler && (filler as Pattern).offsetX !== undefined && 'source' in filler\n );\n};\n\nexport const isTextObject = (\n fabricObject?: FabricObject,\n): fabricObject is FabricText => {\n return (\n !!fabricObject &&\n typeof (fabricObject as FabricText)._renderText === 'function'\n );\n};\n\nexport const isPath = (fabricObject?: FabricObject): fabricObject is Path => {\n // we could use instanceof but that would mean pulling in Text code for a simple check\n // @todo discuss what to do and how to do\n return (\n !!fabricObject &&\n typeof (fabricObject as Path)._renderPathCommands === 'function'\n );\n};\n\nexport const isActiveSelection = (\n fabricObject?: FabricObject,\n): fabricObject is ActiveSelection =>\n !!fabricObject && 'multiSelectionStacking' in fabricObject;\n","/**\n * Returns element scroll offsets\n * @param {HTMLElement} element Element to operate on\n * @return {Object} Object with left/top values\n */\nexport function getScrollLeftTop(element: HTMLElement | null) {\n const doc = element && getDocumentFromElement(element);\n let left = 0,\n top = 0;\n if (!element || !doc) {\n return { left, top };\n }\n let elementLoop: HTMLElement | Document | ShadowRoot = element;\n const docElement = doc.documentElement,\n body = doc.body || {\n scrollLeft: 0,\n scrollTop: 0,\n };\n // While loop checks (and then sets element to) .parentNode OR .host\n // to account for ShadowDOM. We still want to traverse up out of ShadowDOM,\n // but the .parentNode of a root ShadowDOM node will always be null, instead\n // it should be accessed through .host. See http://stackoverflow.com/a/24765528/4383938\n while (\n elementLoop &&\n (elementLoop.parentNode || (elementLoop as unknown as ShadowRoot).host)\n ) {\n elementLoop = (elementLoop.parentNode ||\n (elementLoop as unknown as ShadowRoot).host) as\n | HTMLElement\n | Document\n | ShadowRoot;\n if (elementLoop === doc) {\n left = body.scrollLeft || docElement.scrollLeft || 0;\n top = body.scrollTop || docElement.scrollTop || 0;\n } else {\n left += (elementLoop as HTMLElement).scrollLeft || 0;\n top += (elementLoop as HTMLElement).scrollTop || 0;\n }\n\n if (\n elementLoop.nodeType === 1 &&\n (elementLoop as HTMLElement).style.position === 'fixed'\n ) {\n break;\n }\n }\n\n return { left, top };\n}\n\nexport const getDocumentFromElement = (el: HTMLElement) =>\n el.ownerDocument || null;\n\nexport const getWindowFromElement = (el: HTMLElement) =>\n el.ownerDocument?.defaultView || null;\n","import { NONE } from '../../constants';\nimport type { TSize } from '../../typedefs';\nimport {\n getDocumentFromElement,\n getWindowFromElement,\n getScrollLeftTop,\n} from '../../util/dom_misc';\n\nexport const setCanvasDimensions = (\n el: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D,\n { width, height }: 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\nexport type CSSDimensions = {\n width: number | string;\n height: number | string;\n};\n\nexport const setCSSDimensions = (\n el: HTMLElement,\n { width, height }: Partial,\n) => {\n width && (el.style.width = typeof width === 'number' ? `${width}px` : width);\n height &&\n (el.style.height = typeof height === 'number' ? `${height}px` : height);\n};\n\n/**\n * Returns offset for a given element\n * @param {HTMLElement} element Element to get offset for\n * @return {Object} Object with \"left\" and \"top\" properties\n */\nexport function getElementOffset(element: HTMLElement) {\n const doc = element && getDocumentFromElement(element),\n offset = { left: 0, top: 0 };\n\n if (!doc) {\n return offset;\n }\n const elemStyle: CSSStyleDeclaration =\n getWindowFromElement(element)?.getComputedStyle(element, null) ||\n ({} as CSSStyleDeclaration);\n offset.left += parseInt(elemStyle.borderLeftWidth, 10) || 0;\n offset.top += parseInt(elemStyle.borderTopWidth, 10) || 0;\n offset.left += parseInt(elemStyle.paddingLeft, 10) || 0;\n offset.top += parseInt(elemStyle.paddingTop, 10) || 0;\n\n let box = { left: 0, top: 0 };\n\n const docElem = doc.documentElement;\n if (typeof element.getBoundingClientRect !== 'undefined') {\n box = element.getBoundingClientRect();\n }\n\n const scrollLeftTop = getScrollLeftTop(element);\n\n return {\n left:\n box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,\n top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top,\n };\n}\n\n/**\n * Makes element unselectable\n * @param {HTMLElement} element Element to make unselectable\n * @return {HTMLElement} Element that was passed in\n */\nexport function makeElementUnselectable(element: HTMLElement) {\n if (typeof element.onselectstart !== 'undefined') {\n element.onselectstart = () => false;\n }\n element.style.userSelect = NONE;\n return element;\n}\n","import { getEnv, getFabricDocument } from '../../env';\nimport type { TSize } from '../../typedefs';\nimport type { CSSDimensions } from './util';\nimport { setCSSDimensions, getElementOffset } from './util';\nimport { createCanvasElement, isHTMLCanvas } from '../../util/misc/dom';\nimport { setCanvasDimensions } from './util';\nimport { FabricError } from '../../util/internals/console';\n\nexport type CanvasItem = {\n el: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n};\n\nexport class StaticCanvasDOMManager {\n /**\n * Keeps a copy of the canvas style before setting retina scaling and other potions\n * in order to return it to original state on dispose\n * @type string\n */\n private _originalCanvasStyle?: string;\n\n lower: CanvasItem;\n\n constructor(arg0?: string | HTMLCanvasElement) {\n const el = this.createLowerCanvas(arg0);\n this.lower = { el, ctx: el.getContext('2d')! };\n }\n\n protected createLowerCanvas(arg0?: HTMLCanvasElement | string) {\n // canvasEl === 'HTMLCanvasElement' does not work on jsdom/node\n const el = isHTMLCanvas(arg0)\n ? arg0\n : (arg0 &&\n (getFabricDocument().getElementById(arg0) as HTMLCanvasElement)) ||\n createCanvasElement();\n if (el.hasAttribute('data-fabric')) {\n throw new FabricError(\n 'Trying to initialize a canvas that has already been initialized. Did you forget to dispose the canvas?',\n );\n }\n this._originalCanvasStyle = el.style.cssText;\n el.setAttribute('data-fabric', 'main');\n el.classList.add('lower-canvas');\n return el;\n }\n\n cleanupDOM({ width, height }: TSize) {\n const { el } = this.lower;\n // restore canvas style and attributes\n el.classList.remove('lower-canvas');\n el.removeAttribute('data-fabric');\n // restore canvas size to original size in case retina scaling was applied\n el.setAttribute('width', `${width}`);\n el.setAttribute('height', `${height}`);\n el.style.cssText = this._originalCanvasStyle || '';\n this._originalCanvasStyle = undefined;\n }\n\n setDimensions(size: TSize, retinaScaling: number) {\n const { el, ctx } = this.lower;\n setCanvasDimensions(el, ctx, size, retinaScaling);\n }\n\n setCSSDimensions(size: Partial) {\n setCSSDimensions(this.lower.el, size);\n }\n\n /**\n * Calculates canvas element offset relative to the document\n */\n calcOffset() {\n return getElementOffset(this.lower.el);\n }\n\n dispose() {\n getEnv().dispose(this.lower.el);\n // @ts-expect-error disposing\n delete this.lower;\n }\n}\n","import { iMatrix } from '../constants';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TFiller, TMat2D, TOptions } from '../typedefs';\n\ninterface CanvasDrawableOptions {\n /**\n * if set to false background image is not affected by viewport transform\n * @since 1.6.3\n * @type Boolean\n * @todo we should really find a different way to do this\n * @default\n */\n backgroundVpt: boolean;\n\n /**\n * Background color of canvas instance.\n * @type {(String|TFiller)}\n * @default\n */\n backgroundColor: TFiller | string;\n\n /**\n * Background image of canvas instance.\n * since 2.4.0 image caching is active, please when putting an image as background, add to the\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n * vale. As an alternative you can disable image objectCaching\n * @type FabricObject\n * @default\n */\n backgroundImage?: FabricObject;\n\n /**\n * if set to false overlay image is not affected by viewport transform\n * @since 1.6.3\n * @type Boolean\n * @todo we should really find a different way to do this\n * @default\n */\n overlayVpt: boolean;\n\n /**\n * Overlay color of canvas instance.\n * @since 1.3.9\n * @type {(String|TFiller)}\n * @default\n */\n overlayColor: TFiller | string;\n\n /**\n * Overlay image of canvas instance.\n * since 2.4.0 image caching is active, please when putting an image as overlay, add to the\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n * vale. As an alternative you can disable image objectCaching\n * @type FabricObject\n * @default\n */\n overlayImage?: FabricObject;\n}\n\ninterface CanvasRenderingOptions {\n /**\n * Indicates whether {@link StaticCanvas#add}, {@link StaticCanvas#insertAt} and {@link StaticCanvas#remove},\n * {@link StaticCanvas#moveTo}, {@link StaticCanvas#clear} and many more, should also re-render canvas.\n * Disabling this option will not give a performance boost when adding/removing a lot of objects to/from canvas at once\n * since the renders are queued and executed one per frame.\n * Disabling is suggested anyway and managing the renders of the app manually is not a big effort ( canvas.requestRenderAll() )\n * Left default to true to do not break documentation and old app, fiddles.\n * @type Boolean\n * @default\n */\n renderOnAddRemove: boolean;\n\n /**\n * Based on vptCoords and object.aCoords, skip rendering of objects that\n * are not included in current viewport.\n * May greatly help in applications with crowded canvas and use of zoom/pan\n * If One of the corner of the bounding box of the object is on the canvas\n * the objects get rendered.\n * @type Boolean\n * @default true\n */\n skipOffscreen: boolean;\n\n /**\n * When true, canvas is scaled by devicePixelRatio for better rendering on retina screens\n * @type Boolean\n * @default\n */\n enableRetinaScaling: boolean;\n\n /**\n * Indicates whether this canvas will use image smoothing, this is on by default in browsers\n * @type Boolean\n * @default\n */\n imageSmoothingEnabled: boolean;\n\n /**\n * a fabricObject that, without stroke define a clipping area with their shape. filled in black\n * the clipPath object gets used when the canvas has rendered, and the context is placed in the\n * top left corner of the canvas.\n * clipPath will clip away controls, if you do not want this to happen use controlsAboveOverlay = true\n * @type FabricObject\n */\n clipPath?: FabricObject;\n}\n\nexport interface CanvasExportOptions {\n /**\n * Indicates whether toObject/toDatalessObject should include default values\n * if set to false, takes precedence over the object value.\n * @type Boolean\n * @default\n */\n includeDefaultValues: boolean;\n\n /**\n * When true, getSvgTransform() will apply the StaticCanvas.viewportTransform to the SVG transformation. When true,\n * a zoomed canvas will then produce zoomed SVG output.\n * @type Boolean\n * @default\n */\n svgViewportTransformation: boolean;\n}\n\nexport interface StaticCanvasOptions\n extends CanvasDrawableOptions,\n CanvasRenderingOptions,\n CanvasExportOptions {\n /**\n * Width in virtual/logical pixels of the canvas.\n * The canvas can be larger than width if retina scaling is active\n * @type number\n */\n width: number;\n\n /**\n * Height in virtual/logical pixels of the canvas.\n * The canvas can be taller than width if retina scaling is active\n * @type height\n */\n height: number;\n\n /**\n * Indicates whether object controls (borders/controls) are rendered above overlay image\n * @type Boolean\n * @default\n *\n * @todo move to Canvas\n */\n controlsAboveOverlay: boolean;\n\n /**\n * Indicates whether the browser can be scrolled when using a touchscreen and dragging on the canvas\n * It gives PRIORITY to DOM scrolling, it doesn't make it always possible.\n * If is true, when using a touch event on the canvas, the canvas will scroll if scroll is possible.\n * If we are in drawing mode or if we are selecting an object the canvas preventDefault and so it won't scroll\n * @type Boolean\n * @default\n *\n * @todo move to Canvas\n */\n allowTouchScrolling: boolean;\n\n /**\n * The transformation (a Canvas 2D API transform matrix) which focuses the viewport\n * @type Array\n * @example Default transform\n * canvas.viewportTransform = [1, 0, 0, 1, 0, 0];\n * @example Scale by 70% and translate toward bottom-right by 50, without skewing\n * canvas.viewportTransform = [0.7, 0, 0, 0.7, 50, 50];\n * @default\n */\n viewportTransform: TMat2D;\n}\n\nexport const staticCanvasDefaults: TOptions = {\n backgroundVpt: true,\n backgroundColor: '',\n overlayVpt: true,\n overlayColor: '',\n\n includeDefaultValues: true,\n svgViewportTransformation: true,\n\n renderOnAddRemove: true,\n skipOffscreen: true,\n enableRetinaScaling: true,\n imageSmoothingEnabled: true,\n\n /**\n * @todo move to Canvas\n */\n controlsAboveOverlay: false,\n /**\n * @todo move to Canvas\n */\n allowTouchScrolling: false,\n\n viewportTransform: [...iMatrix],\n};\n","import { config } from '../config';\nimport { CENTER, VERSION } from '../constants';\nimport type { CanvasEvents, StaticCanvasEvents } from '../EventTypeDefs';\nimport type { Gradient } from '../gradient/Gradient';\nimport { createCollectionMixin, isCollection } from '../Collection';\nimport { CommonMethods } from '../CommonMethods';\nimport type { Pattern } from '../Pattern';\nimport { Point } from '../Point';\nimport type { TCachedFabricObject } from '../shapes/Object/Object';\nimport type {\n Abortable,\n Constructor,\n TCornerPoint,\n TDataUrlOptions,\n TFiller,\n TMat2D,\n TSize,\n TSVGReviver,\n TToCanvasElementOptions,\n TValidToObjectMethod,\n TOptions,\n} from '../typedefs';\nimport {\n cancelAnimFrame,\n requestAnimFrame,\n} from '../util/animation/AnimationFrameProvider';\nimport { runningAnimations } from '../util/animation/AnimationRegistry';\nimport { uid } from '../util/internals/uid';\nimport { createCanvasElementFor, toDataURL } from '../util/misc/dom';\nimport { invertTransform, transformPoint } from '../util/misc/matrix';\nimport type { EnlivenObjectOptions } from '../util/misc/objectEnlive';\nimport {\n enlivenObjectEnlivables,\n enlivenObjects,\n} from '../util/misc/objectEnlive';\nimport { pick } from '../util/misc/pick';\nimport { matrixToSVG } from '../util/misc/svgParsing';\nimport { toFixed } from '../util/misc/toFixed';\nimport { isFiller, isPattern, isTextObject } from '../util/typeAssertions';\nimport { StaticCanvasDOMManager } from './DOMManagers/StaticCanvasDOMManager';\nimport type { CSSDimensions } from './DOMManagers/util';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { StaticCanvasOptions } from './StaticCanvasOptions';\nimport { staticCanvasDefaults } from './StaticCanvasOptions';\nimport { log, FabricError } from '../util/internals/console';\nimport { getDevicePixelRatio } from '../env';\n\n/**\n * Having both options in TCanvasSizeOptions set to true transform the call in a calcOffset\n * Better try to restrict with types to avoid confusion.\n */\nexport type TCanvasSizeOptions =\n | {\n backstoreOnly?: true;\n cssOnly?: false;\n }\n | {\n backstoreOnly?: false;\n cssOnly?: true;\n };\n\nexport type TSVGExportOptions = {\n suppressPreamble?: boolean;\n viewBox?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n encoding?: 'UTF-8'; // test Encoding type and see what happens\n width?: string;\n height?: string;\n reviver?: TSVGReviver;\n};\n\n/**\n * Static canvas class\n * @see {@link http://fabricjs.com/static_canvas|StaticCanvas demo}\n * @fires before:render\n * @fires after:render\n * @fires canvas:cleared\n * @fires object:added\n * @fires object:removed\n */\n// TODO: fix `EventSpec` inheritance https://github.com/microsoft/TypeScript/issues/26154#issuecomment-1366616260\nexport class StaticCanvas<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n EventSpec extends StaticCanvasEvents = StaticCanvasEvents,\n >\n extends createCollectionMixin(CommonMethods)\n implements StaticCanvasOptions\n{\n declare width: number;\n declare height: number;\n\n // background\n declare backgroundVpt: boolean;\n declare backgroundColor: TFiller | string;\n declare backgroundImage?: FabricObject;\n // overlay\n declare overlayVpt: boolean;\n declare overlayColor: TFiller | string;\n declare overlayImage?: FabricObject;\n\n declare clipPath?: FabricObject;\n\n declare includeDefaultValues: boolean;\n\n // rendering config\n declare renderOnAddRemove: boolean;\n declare skipOffscreen: boolean;\n declare enableRetinaScaling: boolean;\n declare imageSmoothingEnabled: boolean;\n\n /**\n * @todo move to Canvas\n */\n declare controlsAboveOverlay: boolean;\n\n /**\n * @todo move to Canvas\n */\n declare allowTouchScrolling: boolean;\n\n declare viewportTransform: TMat2D;\n\n /**\n * The viewport bounding box in scene plane coordinates, see {@link calcViewportBoundaries}\n */\n declare vptCoords: TCornerPoint;\n\n /**\n * A reference to the canvas actual HTMLCanvasElement.\n * Can be use to read the raw pixels, but never write or manipulate\n * @type HTMLCanvasElement\n */\n get lowerCanvasEl() {\n return this.elements.lower?.el;\n }\n\n get contextContainer() {\n return this.elements.lower?.ctx;\n }\n\n /**\n * If true the Canvas is in the process or has been disposed/destroyed.\n * No more rendering operation will be executed on this canvas.\n * @type boolean\n */\n declare destroyed?: boolean;\n\n /**\n * Started the process of disposing but not done yet.\n * WIll likely complete the render cycle already scheduled but stopping adding more.\n * @type boolean\n */\n declare disposed?: boolean;\n\n declare _offset: { left: number; top: number };\n protected declare hasLostContext: boolean;\n protected declare nextRenderHandle: number;\n\n declare elements: StaticCanvasDOMManager;\n\n /**\n * When true control drawing is skipped.\n * This boolean is used to avoid toDataURL to export controls.\n * Usage of this boolean to build up other flows and features is not supported\n * @type Boolean\n * @default false\n */\n protected declare skipControlsDrawing: boolean;\n\n static ownDefaults = staticCanvasDefaults;\n\n // reference to\n protected declare __cleanupTask?: {\n (): void;\n kill: (reason?: any) => void;\n };\n\n static getDefaults(): Record {\n return StaticCanvas.ownDefaults;\n }\n\n constructor(\n el?: string | HTMLCanvasElement,\n options: TOptions = {},\n ) {\n super();\n Object.assign(\n this,\n (this.constructor as typeof StaticCanvas).getDefaults(),\n );\n this.set(options);\n this.initElements(el);\n this._setDimensionsImpl({\n width: this.width || this.elements.lower.el.width || 0,\n height: this.height || this.elements.lower.el.height || 0,\n });\n this.skipControlsDrawing = false;\n this.viewportTransform = [...this.viewportTransform];\n this.calcViewportBoundaries();\n }\n\n protected initElements(el?: string | HTMLCanvasElement) {\n this.elements = new StaticCanvasDOMManager(el);\n }\n\n add(...objects: FabricObject[]) {\n const size = super.add(...objects);\n objects.length > 0 && this.renderOnAddRemove && this.requestRenderAll();\n return size;\n }\n\n insertAt(index: number, ...objects: FabricObject[]) {\n const size = super.insertAt(index, ...objects);\n objects.length > 0 && this.renderOnAddRemove && this.requestRenderAll();\n return size;\n }\n\n remove(...objects: FabricObject[]) {\n const removed = super.remove(...objects);\n removed.length > 0 && this.renderOnAddRemove && this.requestRenderAll();\n return removed;\n }\n\n _onObjectAdded(obj: FabricObject) {\n if (obj.canvas && (obj.canvas as StaticCanvas) !== this) {\n log(\n 'warn',\n 'Canvas is trying to add an object that belongs to a different canvas.\\n' +\n 'Resulting to default behavior: removing object from previous canvas and adding to new canvas',\n );\n obj.canvas.remove(obj);\n }\n obj._set('canvas', this);\n obj.setCoords();\n this.fire('object:added', { target: obj });\n obj.fire('added', { target: this });\n }\n\n _onObjectRemoved(obj: FabricObject) {\n obj._set('canvas', undefined);\n this.fire('object:removed', { target: obj });\n obj.fire('removed', { target: this });\n }\n\n _onStackOrderChanged() {\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * @private\n * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\n * @return {Number} retinaScaling if applied, otherwise 1;\n */\n getRetinaScaling() {\n return this.enableRetinaScaling ? getDevicePixelRatio() : 1;\n }\n\n /**\n * Calculates canvas element offset relative to the document\n * This method is also attached as \"resize\" event handler of window\n */\n calcOffset() {\n return (this._offset = this.elements.calcOffset());\n }\n\n /**\n * Returns canvas width (in px)\n * @return {Number}\n */\n getWidth(): number {\n return this.width;\n }\n\n /**\n * Returns canvas height (in px)\n * @return {Number}\n */\n getHeight(): number {\n return this.height;\n }\n\n /**\n * Sets width of this canvas instance\n * @param {Number|String} value Value to set width to\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @deprecated will be removed in 7.0\n */\n setWidth(\n value: TSize['width'],\n options?: { backstoreOnly?: true; cssOnly?: false },\n ): void;\n setWidth(\n value: CSSDimensions['width'],\n options?: { cssOnly?: true; backstoreOnly?: false },\n ): void;\n setWidth(value: number, options?: never) {\n return this.setDimensions({ width: value }, options);\n }\n\n /**s\n * Sets height of this canvas instance\n * @param {Number|String} value Value to set height to\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @deprecated will be removed in 7.0\n */\n setHeight(\n value: TSize['height'],\n options?: { backstoreOnly?: true; cssOnly?: false },\n ): void;\n setHeight(\n value: CSSDimensions['height'],\n options?: { cssOnly?: true; backstoreOnly?: false },\n ): void;\n setHeight(value: CSSDimensions['height'], options?: never) {\n return this.setDimensions({ height: value }, options);\n }\n\n /**\n * Internal use only\n * @protected\n */\n protected _setDimensionsImpl(\n dimensions: Partial,\n { cssOnly = false, backstoreOnly = false }: TCanvasSizeOptions = {},\n ) {\n if (!cssOnly) {\n const size = {\n width: this.width,\n height: this.height,\n ...(dimensions as Partial),\n };\n this.elements.setDimensions(size, this.getRetinaScaling());\n this.hasLostContext = true;\n this.width = size.width;\n this.height = size.height;\n }\n if (!backstoreOnly) {\n this.elements.setCSSDimensions(dimensions);\n }\n\n this.calcOffset();\n }\n\n /**\n * Sets dimensions (width, height) of this canvas instance. when options.cssOnly flag active you should also supply the unit of measure (px/%/em)\n * @param {Object} dimensions Object with width/height properties\n * @param {Number|String} [dimensions.width] Width of canvas element\n * @param {Number|String} [dimensions.height] Height of canvas element\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n */\n setDimensions(\n dimensions: Partial,\n options?: { cssOnly?: true; backstoreOnly?: false },\n ): void;\n setDimensions(\n dimensions: Partial,\n options?: { backstoreOnly?: true; cssOnly?: false },\n ): void;\n setDimensions(dimensions: Partial, options?: never): void;\n setDimensions(\n dimensions: Partial,\n options?: TCanvasSizeOptions,\n ) {\n this._setDimensionsImpl(dimensions, options);\n if (!options || !options.cssOnly) {\n this.requestRenderAll();\n }\n }\n\n /**\n * Returns canvas zoom level\n * @return {Number}\n */\n getZoom() {\n return this.viewportTransform[0];\n }\n\n /**\n * Sets viewport transformation of this canvas instance\n * @param {Array} vpt a Canvas 2D API transform matrix\n */\n setViewportTransform(vpt: TMat2D) {\n this.viewportTransform = vpt;\n this.calcViewportBoundaries();\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * Sets zoom level of this canvas instance, the zoom centered around point\n * meaning that following zoom to point with the same point will have the visual\n * effect of the zoom originating from that point. The point won't move.\n * It has nothing to do with canvas center or visual center of the viewport.\n * @param {Point} point to zoom with respect to\n * @param {Number} value to set zoom to, less than 1 zooms out\n */\n zoomToPoint(point: Point, value: number) {\n // TODO: just change the scale, preserve other transformations\n const before = point,\n vpt: TMat2D = [...this.viewportTransform];\n const newPoint = transformPoint(point, invertTransform(vpt));\n vpt[0] = value;\n vpt[3] = value;\n const after = transformPoint(newPoint, vpt);\n vpt[4] += before.x - after.x;\n vpt[5] += before.y - after.y;\n this.setViewportTransform(vpt);\n }\n\n /**\n * Sets zoom level of this canvas instance\n * @param {Number} value to set zoom to, less than 1 zooms out\n */\n setZoom(value: number) {\n this.zoomToPoint(new Point(0, 0), value);\n }\n\n /**\n * Pan viewport so as to place point at top left corner of canvas\n * @param {Point} point to move to\n */\n absolutePan(point: Point) {\n const vpt: TMat2D = [...this.viewportTransform];\n vpt[4] = -point.x;\n vpt[5] = -point.y;\n return this.setViewportTransform(vpt);\n }\n\n /**\n * Pans viewpoint relatively\n * @param {Point} point (position vector) to move by\n */\n relativePan(point: Point) {\n return this.absolutePan(\n new Point(\n -point.x - this.viewportTransform[4],\n -point.y - this.viewportTransform[5],\n ),\n );\n }\n\n /**\n * Returns <canvas> element corresponding to this instance\n * @return {HTMLCanvasElement}\n */\n getElement(): HTMLCanvasElement {\n return this.elements.lower.el;\n }\n\n /**\n * Clears specified context of canvas element\n * @param {CanvasRenderingContext2D} ctx Context to clear\n */\n clearContext(ctx: CanvasRenderingContext2D) {\n ctx.clearRect(0, 0, this.width, this.height);\n }\n\n /**\n * Returns context of canvas where objects are drawn\n * @return {CanvasRenderingContext2D}\n */\n getContext(): CanvasRenderingContext2D {\n return this.elements.lower.ctx;\n }\n\n /**\n * Clears all contexts (background, main, top) of an instance\n */\n clear() {\n this.remove(...this.getObjects());\n this.backgroundImage = undefined;\n this.overlayImage = undefined;\n this.backgroundColor = '';\n this.overlayColor = '';\n this.clearContext(this.getContext());\n this.fire('canvas:cleared');\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * Renders the canvas\n */\n renderAll() {\n this.cancelRequestedRender();\n if (this.destroyed) {\n return;\n }\n this.renderCanvas(this.getContext(), this._objects);\n }\n\n /**\n * Function created to be instance bound at initialization\n * used in requestAnimationFrame rendering\n * Let the fabricJS call it. If you call it manually you could have more\n * animationFrame stacking on to of each other\n * for an imperative rendering, use canvas.renderAll\n * @private\n */\n renderAndReset() {\n this.nextRenderHandle = 0;\n this.renderAll();\n }\n\n /**\n * Append a renderAll request to next animation frame.\n * unless one is already in progress, in that case nothing is done\n * a boolean flag will avoid appending more.\n */\n requestRenderAll() {\n if (!this.nextRenderHandle && !this.disposed && !this.destroyed) {\n this.nextRenderHandle = requestAnimFrame(() => this.renderAndReset());\n }\n }\n\n /**\n * Calculate the position of the 4 corner of canvas with current viewportTransform.\n * helps to determinate when an object is in the current rendering viewport\n */\n calcViewportBoundaries(): TCornerPoint {\n const width = this.width,\n height = this.height,\n iVpt = invertTransform(this.viewportTransform),\n a = transformPoint({ x: 0, y: 0 }, iVpt),\n b = transformPoint({ x: width, y: height }, iVpt),\n // we don't support vpt flipping\n // but the code is robust enough to mostly work with flipping\n min = a.min(b),\n max = a.max(b);\n return (this.vptCoords = {\n tl: min,\n tr: new Point(max.x, min.y),\n bl: new Point(min.x, max.y),\n br: max,\n });\n }\n\n cancelRequestedRender() {\n if (this.nextRenderHandle) {\n cancelAnimFrame(this.nextRenderHandle);\n this.nextRenderHandle = 0;\n }\n }\n\n drawControls(_ctx: CanvasRenderingContext2D) {\n // Static canvas has no controls\n }\n\n /**\n * Renders background, objects, overlay and controls.\n * @param {CanvasRenderingContext2D} ctx\n * @param {Array} objects to render\n */\n renderCanvas(ctx: CanvasRenderingContext2D, objects: FabricObject[]) {\n if (this.destroyed) {\n return;\n }\n\n const v = this.viewportTransform,\n path = this.clipPath;\n this.calcViewportBoundaries();\n this.clearContext(ctx);\n ctx.imageSmoothingEnabled = this.imageSmoothingEnabled;\n // @ts-expect-error node-canvas stuff\n ctx.patternQuality = 'best';\n this.fire('before:render', { ctx });\n this._renderBackground(ctx);\n\n ctx.save();\n //apply viewport transform once for all rendering process\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n this._renderObjects(ctx, objects);\n ctx.restore();\n if (!this.controlsAboveOverlay && !this.skipControlsDrawing) {\n this.drawControls(ctx);\n }\n if (path) {\n path._set('canvas', this);\n // needed to setup a couple of variables\n // todo migrate to the newer one\n path.shouldCache();\n path._transformDone = true;\n (path as TCachedFabricObject).renderCache({ forClipping: true });\n this.drawClipPathOnCanvas(ctx, path as TCachedFabricObject);\n }\n this._renderOverlay(ctx);\n if (this.controlsAboveOverlay && !this.skipControlsDrawing) {\n this.drawControls(ctx);\n }\n this.fire('after:render', { ctx });\n\n if (this.__cleanupTask) {\n this.__cleanupTask();\n this.__cleanupTask = undefined;\n }\n }\n\n /**\n * Paint the cached clipPath on the lowerCanvasEl\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawClipPathOnCanvas(\n ctx: CanvasRenderingContext2D,\n clipPath: TCachedFabricObject,\n ) {\n const v = this.viewportTransform;\n ctx.save();\n ctx.transform(...v);\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4;\n ctx.globalCompositeOperation = 'destination-in';\n clipPath.transform(ctx);\n ctx.scale(1 / clipPath.zoomX, 1 / clipPath.zoomY);\n ctx.drawImage(\n clipPath._cacheCanvas,\n -clipPath.cacheTranslationX,\n -clipPath.cacheTranslationY,\n );\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Array} objects to render\n */\n _renderObjects(ctx: CanvasRenderingContext2D, objects: FabricObject[]) {\n for (let i = 0, len = objects.length; i < len; ++i) {\n objects[i] && objects[i].render(ctx);\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {string} property 'background' or 'overlay'\n */\n _renderBackgroundOrOverlay(\n ctx: CanvasRenderingContext2D,\n property: 'background' | 'overlay',\n ) {\n const fill = this[`${property}Color`],\n object = this[`${property}Image`],\n v = this.viewportTransform,\n needsVpt = this[`${property}Vpt`];\n if (!fill && !object) {\n return;\n }\n const isAFiller = isFiller(fill);\n if (fill) {\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.width, 0);\n ctx.lineTo(this.width, this.height);\n ctx.lineTo(0, this.height);\n ctx.closePath();\n ctx.fillStyle = isAFiller ? fill.toLive(ctx /* this */)! : fill;\n if (needsVpt) {\n ctx.transform(...v);\n }\n if (isAFiller) {\n ctx.transform(1, 0, 0, 1, fill.offsetX || 0, fill.offsetY || 0);\n const m = ((fill as Gradient<'linear'>).gradientTransform ||\n (fill as Pattern).patternTransform) as TMat2D;\n m && ctx.transform(...m);\n }\n ctx.fill();\n ctx.restore();\n }\n if (object) {\n ctx.save();\n const { skipOffscreen } = this;\n // if the object doesn't move with the viewport,\n // the offscreen concept does not apply;\n this.skipOffscreen = needsVpt;\n if (needsVpt) {\n ctx.transform(...v);\n }\n object.render(ctx);\n this.skipOffscreen = skipOffscreen;\n ctx.restore();\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground(ctx: CanvasRenderingContext2D) {\n this._renderBackgroundOrOverlay(ctx, 'background');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderOverlay(ctx: CanvasRenderingContext2D) {\n this._renderBackgroundOrOverlay(ctx, 'overlay');\n }\n\n /**\n * Returns coordinates of a center of canvas.\n * Returned value is an object with top and left properties\n * @return {Object} object with \"top\" and \"left\" number values\n * @deprecated migrate to `getCenterPoint`\n */\n getCenter() {\n return {\n top: this.height / 2,\n left: this.width / 2,\n };\n }\n\n /**\n * Returns coordinates of a center of canvas.\n * @return {Point}\n */\n getCenterPoint() {\n return new Point(this.width / 2, this.height / 2);\n }\n\n /**\n * Centers object horizontally in the canvas\n */\n centerObjectH(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(this.getCenterPoint().x, object.getCenterPoint().y),\n );\n }\n\n /**\n * Centers object vertically in the canvas\n * @param {FabricObject} object Object to center vertically\n */\n centerObjectV(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(object.getCenterPoint().x, this.getCenterPoint().y),\n );\n }\n\n /**\n * Centers object vertically and horizontally in the canvas\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n centerObject(object: FabricObject) {\n return this._centerObject(object, this.getCenterPoint());\n }\n\n /**\n * Centers object vertically and horizontally in the viewport\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n viewportCenterObject(object: FabricObject) {\n return this._centerObject(object, this.getVpCenter());\n }\n\n /**\n * Centers object horizontally in the viewport, object.top is unchanged\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n viewportCenterObjectH(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(this.getVpCenter().x, object.getCenterPoint().y),\n );\n }\n\n /**\n * Centers object Vertically in the viewport, object.top is unchanged\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n viewportCenterObjectV(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(object.getCenterPoint().x, this.getVpCenter().y),\n );\n }\n\n /**\n * Calculate the point in canvas that correspond to the center of actual viewport.\n * @return {Point} vpCenter, viewport center\n */\n getVpCenter(): Point {\n return transformPoint(\n this.getCenterPoint(),\n invertTransform(this.viewportTransform),\n );\n }\n\n /**\n * @private\n * @param {FabricObject} object Object to center\n * @param {Point} center Center point\n */\n _centerObject(object: FabricObject, center: Point) {\n object.setXY(center, CENTER, CENTER);\n object.setCoords();\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * Returns dataless JSON representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {String} json string\n */\n toDatalessJSON(propertiesToInclude?: string[]) {\n return this.toDatalessObject(propertiesToInclude);\n }\n\n /**\n * Returns object representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject(propertiesToInclude?: string[]) {\n return this._toObjectMethod('toObject', propertiesToInclude);\n }\n\n /**\n * Returns Object representation of canvas\n * this alias is provided because if you call JSON.stringify on an instance,\n * the toJSON object will be invoked if it exists.\n * Having a toJSON method means you can do JSON.stringify(myCanvas)\n * @return {Object} JSON compatible object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n * @see {@link http://jsfiddle.net/fabricjs/pec86/|jsFiddle demo}\n * @example JSON without additional properties\n * var json = canvas.toJSON();\n * @example JSON with additional properties included\n * var json = canvas.toJSON(['lockMovementX', 'lockMovementY', 'lockRotation', 'lockScalingX', 'lockScalingY']);\n * @example JSON without default values\n * var json = canvas.toJSON();\n */\n toJSON() {\n return this.toObject();\n }\n\n /**\n * Returns dataless object representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject(propertiesToInclude?: string[]) {\n return this._toObjectMethod('toDatalessObject', propertiesToInclude);\n }\n\n /**\n * @private\n */\n _toObjectMethod(\n methodName: TValidToObjectMethod,\n propertiesToInclude?: string[],\n ) {\n const clipPath = this.clipPath;\n const clipPathData =\n clipPath && !clipPath.excludeFromExport\n ? this._toObject(clipPath, methodName, propertiesToInclude)\n : null;\n return {\n version: VERSION,\n ...pick(this, propertiesToInclude as (keyof this)[]),\n objects: this._objects\n .filter((object) => !object.excludeFromExport)\n .map((instance) =>\n this._toObject(instance, methodName, propertiesToInclude),\n ),\n ...this.__serializeBgOverlay(methodName, propertiesToInclude),\n ...(clipPathData ? { clipPath: clipPathData } : null),\n };\n }\n\n /**\n * @private\n */\n protected _toObject(\n instance: FabricObject,\n methodName: TValidToObjectMethod,\n propertiesToInclude?: string[],\n ) {\n let originalValue;\n\n if (!this.includeDefaultValues) {\n originalValue = instance.includeDefaultValues;\n instance.includeDefaultValues = false;\n }\n\n const object = instance[methodName](propertiesToInclude);\n if (!this.includeDefaultValues) {\n instance.includeDefaultValues = !!originalValue;\n }\n return object;\n }\n\n /**\n * @private\n */\n __serializeBgOverlay(\n methodName: TValidToObjectMethod,\n propertiesToInclude?: string[],\n ) {\n const data: any = {},\n bgImage = this.backgroundImage,\n overlayImage = this.overlayImage,\n bgColor = this.backgroundColor,\n overlayColor = this.overlayColor;\n\n if (isFiller(bgColor)) {\n if (!bgColor.excludeFromExport) {\n data.background = bgColor.toObject(propertiesToInclude);\n }\n } else if (bgColor) {\n data.background = bgColor;\n }\n\n if (isFiller(overlayColor)) {\n if (!overlayColor.excludeFromExport) {\n data.overlay = overlayColor.toObject(propertiesToInclude);\n }\n } else if (overlayColor) {\n data.overlay = overlayColor;\n }\n\n if (bgImage && !bgImage.excludeFromExport) {\n data.backgroundImage = this._toObject(\n bgImage,\n methodName,\n propertiesToInclude,\n );\n }\n if (overlayImage && !overlayImage.excludeFromExport) {\n data.overlayImage = this._toObject(\n overlayImage,\n methodName,\n propertiesToInclude,\n );\n }\n\n return data;\n }\n\n /* _TO_SVG_START_ */\n\n declare svgViewportTransformation: boolean;\n\n /**\n * Returns SVG representation of canvas\n * @function\n * @param {Object} [options] Options object for SVG output\n * @param {Boolean} [options.suppressPreamble=false] If true xml tag is not included\n * @param {Object} [options.viewBox] SVG viewbox object\n * @param {Number} [options.viewBox.x] x-coordinate of viewbox\n * @param {Number} [options.viewBox.y] y-coordinate of viewbox\n * @param {Number} [options.viewBox.width] Width of viewbox\n * @param {Number} [options.viewBox.height] Height of viewbox\n * @param {String} [options.encoding=UTF-8] Encoding of SVG output\n * @param {String} [options.width] desired width of svg with or without units\n * @param {String} [options.height] desired height of svg with or without units\n * @param {Function} [reviver] Method for further parsing of svg elements, called after each fabric object converted into svg representation.\n * @return {String} SVG string\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n * @see {@link http://jsfiddle.net/fabricjs/jQ3ZZ/|jsFiddle demo}\n * @example Normal SVG output\n * var svg = canvas.toSVG();\n * @example SVG output without preamble (without <?xml ../>)\n * var svg = canvas.toSVG({suppressPreamble: true});\n * @example SVG output with viewBox attribute\n * var svg = canvas.toSVG({\n * viewBox: {\n * x: 100,\n * y: 100,\n * width: 200,\n * height: 300\n * }\n * });\n * @example SVG output with different encoding (default: UTF-8)\n * var svg = canvas.toSVG({encoding: 'ISO-8859-1'});\n * @example Modify SVG output with reviver function\n * var svg = canvas.toSVG(null, function(svg) {\n * return svg.replace('stroke-dasharray: ; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; ', '');\n * });\n */\n toSVG(options: TSVGExportOptions = {}, reviver?: TSVGReviver) {\n options.reviver = reviver;\n const markup: string[] = [];\n\n this._setSVGPreamble(markup, options);\n this._setSVGHeader(markup, options);\n if (this.clipPath) {\n markup.push(`\\n`);\n }\n this._setSVGBgOverlayColor(markup, 'background');\n this._setSVGBgOverlayImage(markup, 'backgroundImage', reviver);\n this._setSVGObjects(markup, reviver);\n if (this.clipPath) {\n markup.push('\\n');\n }\n this._setSVGBgOverlayColor(markup, 'overlay');\n this._setSVGBgOverlayImage(markup, 'overlayImage', reviver);\n\n markup.push('');\n\n return markup.join('');\n }\n\n /**\n * @private\n */\n _setSVGPreamble(markup: string[], options: TSVGExportOptions): void {\n if (options.suppressPreamble) {\n return;\n }\n markup.push(\n '\\n',\n '\\n',\n );\n }\n\n /**\n * @private\n */\n _setSVGHeader(markup: string[], options: TSVGExportOptions): void {\n const width = options.width || `${this.width}`,\n height = options.height || `${this.height}`,\n NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS,\n optViewBox = options.viewBox;\n let viewBox: string;\n if (optViewBox) {\n viewBox = `viewBox=\"${optViewBox.x} ${optViewBox.y} ${optViewBox.width} ${optViewBox.height}\" `;\n } else if (this.svgViewportTransformation) {\n const vpt = this.viewportTransform;\n viewBox = `viewBox=\"${toFixed(\n -vpt[4] / vpt[0],\n NUM_FRACTION_DIGITS,\n )} ${toFixed(-vpt[5] / vpt[3], NUM_FRACTION_DIGITS)} ${toFixed(\n this.width / vpt[0],\n NUM_FRACTION_DIGITS,\n )} ${toFixed(this.height / vpt[3], NUM_FRACTION_DIGITS)}\" `;\n } else {\n viewBox = `viewBox=\"0 0 ${this.width} ${this.height}\" `;\n }\n\n markup.push(\n '\\n',\n 'Created with Fabric.js ',\n VERSION,\n '\\n',\n '\\n',\n this.createSVGFontFacesMarkup(),\n this.createSVGRefElementsMarkup(),\n this.createSVGClipPathMarkup(options),\n '\\n',\n );\n }\n\n createSVGClipPathMarkup(options: TSVGExportOptions): string {\n const clipPath = this.clipPath;\n if (clipPath) {\n clipPath.clipPathId = `CLIPPATH_${uid()}`;\n return `\\n${clipPath.toClipPathSVG(\n options.reviver,\n )}\\n`;\n }\n return '';\n }\n\n /**\n * Creates markup containing SVG referenced elements like patterns, gradients etc.\n * @return {String}\n */\n createSVGRefElementsMarkup(): string {\n return (['background', 'overlay'] as const)\n .map((prop) => {\n const fill = this[`${prop}Color`];\n if (isFiller(fill)) {\n const shouldTransform = this[`${prop}Vpt`],\n vpt = this.viewportTransform,\n object = {\n // otherwise circular dependency\n isType: () => false,\n width: this.width / (shouldTransform ? vpt[0] : 1),\n height: this.height / (shouldTransform ? vpt[3] : 1),\n };\n return fill.toSVG(object as FabricObject, {\n additionalTransform: shouldTransform ? matrixToSVG(vpt) : '',\n });\n }\n })\n .join('');\n }\n\n /**\n * Creates markup containing SVG font faces,\n * font URLs for font faces must be collected by developers\n * and are not extracted from the DOM by fabricjs\n * @param {Array} objects Array of fabric objects\n * @return {String}\n */\n createSVGFontFacesMarkup(): string {\n const objects: FabricObject[] = [],\n fontList: Record = {},\n fontPaths = config.fontPaths;\n\n this._objects.forEach(function add(object) {\n objects.push(object);\n if (isCollection(object)) {\n object._objects.forEach(add);\n }\n });\n\n objects.forEach((obj) => {\n if (!isTextObject(obj)) {\n return;\n }\n const { styles, fontFamily } = obj;\n if (fontList[fontFamily] || !fontPaths[fontFamily]) {\n return;\n }\n fontList[fontFamily] = true;\n if (!styles) {\n return;\n }\n Object.values(styles).forEach((styleRow) => {\n Object.values(styleRow).forEach(({ fontFamily = '' }) => {\n if (!fontList[fontFamily] && fontPaths[fontFamily]) {\n fontList[fontFamily] = true;\n }\n });\n });\n });\n\n const fontListMarkup = Object.keys(fontList)\n .map(\n (fontFamily) =>\n `\\t\\t@font-face {\\n\\t\\t\\tfont-family: '${fontFamily}';\\n\\t\\t\\tsrc: url('${fontPaths[fontFamily]}');\\n\\t\\t}\\n`,\n )\n .join('');\n\n if (fontListMarkup) {\n return `\\t\\n`;\n }\n return '';\n }\n\n /**\n * @private\n */\n _setSVGObjects(markup: string[], reviver?: TSVGReviver) {\n this.forEachObject((fabricObject) => {\n if (fabricObject.excludeFromExport) {\n return;\n }\n this._setSVGObject(markup, fabricObject, reviver);\n });\n }\n\n /**\n * This is its own function because the Canvas ( non static ) requires extra code here\n * @private\n */\n _setSVGObject(\n markup: string[],\n instance: FabricObject,\n reviver?: TSVGReviver,\n ) {\n markup.push(instance.toSVG(reviver));\n }\n\n /**\n * @private\n */\n _setSVGBgOverlayImage(\n markup: string[],\n property: 'overlayImage' | 'backgroundImage',\n reviver?: TSVGReviver,\n ) {\n const bgOrOverlay = this[property];\n if (bgOrOverlay && !bgOrOverlay.excludeFromExport && bgOrOverlay.toSVG) {\n markup.push(bgOrOverlay.toSVG(reviver));\n }\n }\n\n /**\n * @TODO this seems to handle patterns but fail at gradients.\n * @private\n */\n _setSVGBgOverlayColor(markup: string[], property: 'background' | 'overlay') {\n const filler = this[`${property}Color`];\n if (!filler) {\n return;\n }\n if (isFiller(filler)) {\n const repeat = (filler as Pattern).repeat || '',\n finalWidth = this.width,\n finalHeight = this.height,\n shouldInvert = this[`${property}Vpt`],\n additionalTransform = shouldInvert\n ? matrixToSVG(invertTransform(this.viewportTransform))\n : '';\n markup.push(\n `\\n`,\n );\n } else {\n markup.push(\n '\\n',\n );\n }\n }\n /* _TO_SVG_END_ */\n\n /**\n * Populates canvas with data from the specified JSON.\n * JSON format must conform to the one of {@link fabric.Canvas#toJSON}\n *\n * **IMPORTANT**: It is recommended to abort loading tasks before calling this method to prevent race conditions and unnecessary networking\n *\n * @param {String|Object} json JSON string or object\n * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created.\n * @param {Object} [options] options\n * @param {AbortSignal} [options.signal] see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @return {Promise} instance\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#deserialization}\n * @see {@link http://jsfiddle.net/fabricjs/fmgXt/|jsFiddle demo}\n * @example loadFromJSON\n * canvas.loadFromJSON(json).then((canvas) => canvas.requestRenderAll());\n * @example loadFromJSON with reviver\n * canvas.loadFromJSON(json, function(o, object) {\n * // `o` = json object\n * // `object` = fabric.Object instance\n * // ... do some stuff ...\n * }).then((canvas) => {\n * ... canvas is restored, add your code.\n * });\n *\n */\n loadFromJSON(\n json: string | Record,\n reviver?: EnlivenObjectOptions['reviver'],\n { signal }: Abortable = {},\n ): Promise {\n if (!json) {\n return Promise.reject(new FabricError('`json` is undefined'));\n }\n\n // parse json if it wasn't already\n const serialized = typeof json === 'string' ? JSON.parse(json) : json;\n const {\n objects = [],\n backgroundImage,\n background,\n overlayImage,\n overlay,\n clipPath,\n } = serialized;\n const renderOnAddRemove = this.renderOnAddRemove;\n this.renderOnAddRemove = false;\n\n return Promise.all([\n enlivenObjects(objects, {\n reviver,\n signal,\n }),\n enlivenObjectEnlivables(\n {\n backgroundImage,\n backgroundColor: background,\n overlayImage,\n overlayColor: overlay,\n clipPath,\n },\n { signal },\n ),\n ]).then(([enlived, enlivedMap]) => {\n this.clear();\n this.add(...enlived);\n this.set(serialized);\n this.set(enlivedMap);\n this.renderOnAddRemove = renderOnAddRemove;\n return this;\n });\n }\n\n /**\n * Clones canvas instance\n * @param {string[]} [properties] Array of properties to include in the cloned canvas and children\n */\n clone(properties: string[]) {\n const data = this.toObject(properties);\n const canvas = this.cloneWithoutData();\n return canvas.loadFromJSON(data);\n }\n\n /**\n * Clones canvas instance without cloning existing data.\n * This essentially copies canvas dimensions since loadFromJSON does not affect canvas size.\n */\n cloneWithoutData() {\n const el = createCanvasElementFor(this);\n return new (this.constructor as Constructor)(el);\n }\n\n /**\n * Exports canvas element to a dataurl image. Note that when multiplier is used, cropping is scaled appropriately\n * @param {Object} [options] Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by, to have consistent\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 2.0.0\n * @param {(object: fabric.Object) => boolean} [options.filter] Function to filter objects.\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n * @see {@link https://jsfiddle.net/xsjua1rd/ demo}\n * @example Generate jpeg dataURL with lower quality\n * var dataURL = canvas.toDataURL({\n * format: 'jpeg',\n * quality: 0.8\n * });\n * @example Generate cropped png dataURL (clipping of canvas)\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * left: 100,\n * top: 100,\n * width: 200,\n * height: 200\n * });\n * @example Generate double scaled png dataURL\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * multiplier: 2\n * });\n * @example Generate dataURL with objects that overlap a specified object\n * var myObject;\n * var dataURL = canvas.toDataURL({\n * filter: (object) => object.isContainedWithinObject(myObject) || object.intersectsWithObject(myObject)\n * });\n */\n toDataURL(options = {} as TDataUrlOptions): string {\n const {\n format = 'png',\n quality = 1,\n multiplier = 1,\n enableRetinaScaling = false,\n } = options;\n const finalMultiplier =\n multiplier * (enableRetinaScaling ? this.getRetinaScaling() : 1);\n\n return toDataURL(\n this.toCanvasElement(finalMultiplier, options),\n format,\n quality,\n );\n }\n\n /**\n * Create a new HTMLCanvas element painted with the current canvas content.\n * No need to resize the actual one or repaint it.\n * Will transfer object ownership to a new canvas, paint it, and set everything back.\n * This is an intermediary step used to get to a dataUrl but also it is useful to\n * create quick image copies of a canvas without passing for the dataUrl string\n * @param {Number} [multiplier] a zoom factor.\n * @param {Object} [options] Cropping informations\n * @param {Number} [options.left] Cropping left offset.\n * @param {Number} [options.top] Cropping top offset.\n * @param {Number} [options.width] Cropping width.\n * @param {Number} [options.height] Cropping height.\n * @param {(object: fabric.Object) => boolean} [options.filter] Function to filter objects.\n */\n toCanvasElement(\n multiplier = 1,\n { width, height, left, top, filter } = {} as TToCanvasElementOptions,\n ): HTMLCanvasElement {\n const scaledWidth = (width || this.width) * multiplier,\n scaledHeight = (height || this.height) * multiplier,\n zoom = this.getZoom(),\n originalWidth = this.width,\n originalHeight = this.height,\n originalSkipControlsDrawing = this.skipControlsDrawing,\n newZoom = zoom * multiplier,\n vp = this.viewportTransform,\n translateX = (vp[4] - (left || 0)) * multiplier,\n translateY = (vp[5] - (top || 0)) * multiplier,\n newVp = [newZoom, 0, 0, newZoom, translateX, translateY] as TMat2D,\n originalRetina = this.enableRetinaScaling,\n canvasEl = createCanvasElementFor({\n width: scaledWidth,\n height: scaledHeight,\n }),\n objectsToRender = filter\n ? this._objects.filter((obj) => filter(obj))\n : this._objects;\n this.enableRetinaScaling = false;\n this.viewportTransform = newVp;\n this.width = scaledWidth;\n this.height = scaledHeight;\n this.skipControlsDrawing = true;\n this.calcViewportBoundaries();\n this.renderCanvas(canvasEl.getContext('2d')!, objectsToRender);\n this.viewportTransform = vp;\n this.width = originalWidth;\n this.height = originalHeight;\n this.calcViewportBoundaries();\n this.enableRetinaScaling = originalRetina;\n this.skipControlsDrawing = originalSkipControlsDrawing;\n return canvasEl;\n }\n\n /**\n * Waits until rendering has settled to destroy the canvas\n * @returns {Promise} a promise resolving to `true` once the canvas has been destroyed or to `false` if the canvas has was already destroyed\n * @throws if aborted by a consequent call\n */\n dispose() {\n !this.disposed &&\n this.elements.cleanupDOM({ width: this.width, height: this.height });\n runningAnimations.cancelByCanvas(this);\n this.disposed = true;\n return new Promise((resolve, reject) => {\n const task = () => {\n this.destroy();\n resolve(true);\n };\n task.kill = reject;\n if (this.__cleanupTask) {\n this.__cleanupTask.kill('aborted');\n }\n\n if (this.destroyed) {\n resolve(false);\n } else if (this.nextRenderHandle) {\n this.__cleanupTask = task;\n } else {\n task();\n }\n });\n }\n\n /**\n * Clears the canvas element, disposes objects and frees resources.\n *\n * Invoked as part of the **async** operation of {@link dispose}.\n *\n * **CAUTION**:\n *\n * This method is **UNSAFE**.\n * You may encounter a race condition using it if there's a requested render.\n * Call this method only if you are sure rendering has settled.\n * Consider using {@link dispose} as it is **SAFE**\n *\n * @private\n */\n destroy() {\n this.destroyed = true;\n this.cancelRequestedRender();\n this.forEachObject((object) => object.dispose());\n this._objects = [];\n if (this.backgroundImage) {\n this.backgroundImage.dispose();\n }\n this.backgroundImage = undefined;\n if (this.overlayImage) {\n this.overlayImage.dispose();\n }\n this.overlayImage = undefined;\n this.elements.dispose();\n }\n\n /**\n * Returns a string representation of an instance\n * @return {String} string representation of an instance\n */\n toString() {\n return `#`;\n }\n}\n","import type { TPointerEvent } from '../EventTypeDefs';\nimport { Point } from '../Point';\nimport { getScrollLeftTop } from './dom_misc';\n\nconst touchEvents = ['touchstart', 'touchmove', 'touchend'];\n\nfunction getTouchInfo(event: TouchEvent | MouseEvent): MouseEvent | Touch {\n const touchProp = (event as TouchEvent).changedTouches;\n if (touchProp && touchProp[0]) {\n return touchProp[0];\n }\n return event as MouseEvent;\n}\n\nexport const getPointer = (event: TPointerEvent): Point => {\n const element = event.target as HTMLElement,\n scroll = getScrollLeftTop(element),\n _evt = getTouchInfo(event);\n return new Point(_evt.clientX + scroll.left, _evt.clientY + scroll.top);\n};\n\nexport const isTouchEvent = (event: TPointerEvent) =>\n touchEvents.includes(event.type) ||\n (event as PointerEvent).pointerType === 'touch';\n\nexport const stopEvent = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n};\n","import type { XY } from '../../Point';\nimport type { TBBox } from '../../typedefs';\n\n/**\n * Calculates bounding box (left, top, width, height) from given `points`\n * @param {XY[]} points\n * @return {Object} Object with left, top, width, height properties\n */\nexport const makeBoundingBoxFromPoints = (points: XY[]): TBBox => {\n let left = 0,\n top = 0,\n width = 0,\n height = 0;\n\n for (let i = 0, len = points.length; i < len; i++) {\n const { x, y } = points[i];\n if (x > width || !i) width = x;\n if (x < left || !i) left = x;\n if (y > height || !i) height = y;\n if (y < top || !i) top = y;\n }\n\n return {\n left,\n top,\n width: width - left,\n height: height - top,\n };\n};\n","import { Point } from '../../Point';\nimport { CENTER } from '../../constants';\nimport type { FabricObject } from '../../shapes/Object/Object';\nimport type { TMat2D } from '../../typedefs';\nimport { makeBoundingBoxFromPoints } from './boundingBoxFromPoints';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n qrDecompose,\n} from './matrix';\n\n/**\n * given an object and a transform, apply the inverse transform to the object,\n * this is equivalent to remove from that object that transformation, so that\n * added in a space with the removed transform, the object will be the same as before.\n * Removing from an object a transform that scale by 2 is like scaling it by 1/2.\n * Removing from an object a transform that rotate by 30deg is like rotating by 30deg\n * in the opposite direction.\n * This util is used to add objects inside transformed groups or nested groups.\n * @param {FabricObject} object the object you want to transform\n * @param {TMat2D} transform the destination transform\n */\nexport const removeTransformFromObject = (\n object: FabricObject,\n transform: TMat2D,\n) => {\n const inverted = invertTransform(transform),\n finalTransform = multiplyTransformMatrices(\n inverted,\n object.calcOwnMatrix(),\n );\n applyTransformToObject(object, finalTransform);\n};\n\n/**\n * given an object and a transform, apply the transform to the object.\n * this is equivalent to change the space where the object is drawn.\n * Adding to an object a transform that scale by 2 is like scaling it by 2.\n * This is used when removing an object from an active selection for example.\n * @param {FabricObject} object the object you want to transform\n * @param {Array} transform the destination transform\n */\nexport const addTransformToObject = (object: FabricObject, transform: TMat2D) =>\n applyTransformToObject(\n object,\n multiplyTransformMatrices(transform, object.calcOwnMatrix()),\n );\n\n/**\n * discard an object transform state and apply the one from the matrix.\n * @param {FabricObject} object the object you want to transform\n * @param {Array} transform the destination transform\n */\nexport const applyTransformToObject = (\n object: FabricObject,\n transform: TMat2D,\n) => {\n const { translateX, translateY, scaleX, scaleY, ...otherOptions } =\n qrDecompose(transform),\n center = new Point(translateX, translateY);\n object.flipX = false;\n object.flipY = false;\n Object.assign(object, otherOptions);\n object.set({ scaleX, scaleY });\n object.setPositionByOrigin(center, CENTER, CENTER);\n};\n/**\n * reset an object transform state to neutral. Top and left are not accounted for\n * @param {FabricObject} target object to transform\n */\nexport const resetObjectTransform = (target: FabricObject) => {\n target.scaleX = 1;\n target.scaleY = 1;\n target.skewX = 0;\n target.skewY = 0;\n target.flipX = false;\n target.flipY = false;\n target.rotate(0);\n};\n\n/**\n * Extract Object transform values\n * @param {FabricObject} target object to read from\n * @return {Object} Components of transform\n */\nexport const saveObjectTransform = (target: FabricObject) => ({\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n angle: target.angle,\n left: target.left,\n flipX: target.flipX,\n flipY: target.flipY,\n top: target.top,\n});\n\n/**\n * given a width and height, return the size of the bounding box\n * that can contains the box with width/height with applied transform.\n * Use to calculate the boxes around objects for controls.\n * @param {Number} width\n * @param {Number} height\n * @param {TMat2D} t\n * @returns {Point} size\n */\nexport const sizeAfterTransform = (\n width: number,\n height: number,\n t: TMat2D,\n) => {\n const dimX = width / 2,\n dimY = height / 2,\n points = [\n new Point(-dimX, -dimY),\n new Point(dimX, -dimY),\n new Point(-dimX, dimY),\n new Point(dimX, dimY),\n ].map((p) => p.transform(t)),\n bbox = makeBoundingBoxFromPoints(points);\n return new Point(bbox.width, bbox.height);\n};\n","import { iMatrix } from '../../constants';\nimport type { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/Object';\nimport type { TMat2D } from '../../typedefs';\nimport { invertTransform, multiplyTransformMatrices } from './matrix';\nimport { applyTransformToObject } from './objectTransforms';\n\n/**\n * We are actually looking for the transformation from the destination plane to the source plane (change of basis matrix)\\\n * The object will exist on the destination plane and we want it to seem unchanged by it so we invert the destination matrix (`to`) and then apply the source matrix (`from`)\n * @param [from]\n * @param [to]\n * @returns\n */\nexport const calcPlaneChangeMatrix = (\n from: TMat2D = iMatrix,\n to: TMat2D = iMatrix,\n) => multiplyTransformMatrices(invertTransform(to), from);\n\n/**\n * Sends a point from the source coordinate plane to the destination coordinate plane.\\\n * From the canvas/viewer's perspective the point remains unchanged.\n *\n * @example Send point from canvas plane to group plane\n * var obj = new Rect({ left: 20, top: 20, width: 60, height: 60, strokeWidth: 0 });\n * var group = new Group([obj], { strokeWidth: 0 });\n * var sentPoint1 = sendPointToPlane(new Point(50, 50), undefined, group.calcTransformMatrix());\n * var sentPoint2 = sendPointToPlane(new Point(50, 50), iMatrix, group.calcTransformMatrix());\n * console.log(sentPoint1, sentPoint2) // both points print (0,0) which is the center of group\n *\n * @param {Point} point\n * @param {TMat2D} [from] plane matrix containing object. Passing `undefined` is equivalent to passing the identity matrix, which means `point` exists in the canvas coordinate plane.\n * @param {TMat2D} [to] destination plane matrix to contain object. Passing `undefined` means `point` should be sent to the canvas coordinate plane.\n * @returns {Point} transformed point\n */\nexport const sendPointToPlane = (\n point: Point,\n from: TMat2D = iMatrix,\n to: TMat2D = iMatrix,\n): Point => point.transform(calcPlaneChangeMatrix(from, to));\n\n/**\n * See {@link sendPointToPlane}\n */\nexport const sendVectorToPlane = (\n point: Point,\n from: TMat2D = iMatrix,\n to: TMat2D = iMatrix,\n): Point => point.transform(calcPlaneChangeMatrix(from, to), true);\n\n/**\n *\n * A util that abstracts applying transform to objects.\\\n * Sends `object` to the destination coordinate plane by applying the relevant transformations.\\\n * Changes the space/plane where `object` is drawn.\\\n * From the canvas/viewer's perspective `object` remains unchanged.\n *\n * @example Move clip path from one object to another while preserving it's appearance as viewed by canvas/viewer\n * let obj, obj2;\n * let clipPath = new Circle({ radius: 50 });\n * obj.clipPath = clipPath;\n * // render\n * sendObjectToPlane(clipPath, obj.calcTransformMatrix(), obj2.calcTransformMatrix());\n * obj.clipPath = undefined;\n * obj2.clipPath = clipPath;\n * // render, clipPath now clips obj2 but seems unchanged from the eyes of the viewer\n *\n * @example Clip an object's clip path with an existing object\n * let obj, existingObj;\n * let clipPath = new Circle({ radius: 50 });\n * obj.clipPath = clipPath;\n * let transformTo = multiplyTransformMatrices(obj.calcTransformMatrix(), clipPath.calcTransformMatrix());\n * sendObjectToPlane(existingObj, existingObj.group?.calcTransformMatrix(), transformTo);\n * clipPath.clipPath = existingObj;\n *\n * @param {FabricObject} object\n * @param {Matrix} [from] plane matrix containing object. Passing `undefined` is equivalent to passing the identity matrix, which means `object` is a direct child of canvas.\n * @param {Matrix} [to] destination plane matrix to contain object. Passing `undefined` means `object` should be sent to the canvas coordinate plane.\n * @returns {Matrix} the transform matrix that was applied to `object`\n */\nexport const sendObjectToPlane = (\n object: FabricObject,\n from?: TMat2D,\n to?: TMat2D,\n): TMat2D => {\n const t = calcPlaneChangeMatrix(from, to);\n applyTransformToObject(\n object,\n multiplyTransformMatrices(t, object.calcOwnMatrix()),\n );\n return t;\n};\n","import type {\n ObjectModificationEvents,\n TModificationEvents,\n} from '../EventTypeDefs';\n\nexport const fireEvent = (\n eventName: TModificationEvents,\n options: ObjectModificationEvents[typeof eventName],\n) => {\n const {\n transform: { target },\n } = options;\n target.canvas?.fire(`object:${eventName}`, {\n ...options,\n target,\n });\n target.fire(eventName, options);\n};\n","import type { TOriginX, TOriginY } from '../../typedefs';\n\nconst originOffset = {\n left: -0.5,\n top: -0.5,\n center: 0,\n bottom: 0.5,\n right: 0.5,\n};\n/**\n * Resolves origin value relative to center\n * @private\n * @param {TOriginX | TOriginY} originValue originX / originY\n * @returns number\n */\n\nexport const resolveOrigin = (\n originValue: TOriginX | TOriginY | number,\n): number =>\n typeof originValue === 'string'\n ? originOffset[originValue]\n : originValue - 0.5;\n","import type {\n TPointerEvent,\n Transform,\n TransformAction,\n BasicTransformEvent,\n} from '../EventTypeDefs';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { Point } from '../Point';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TOriginX, TOriginY } from '../typedefs';\nimport {\n degreesToRadians,\n radiansToDegrees,\n} from '../util/misc/radiansDegreesConversion';\nimport type { Control } from './Control';\nimport { CENTER } from '../constants';\n\nexport const NOT_ALLOWED_CURSOR = 'not-allowed';\n\n/**\n * @param {Boolean} alreadySelected true if target is already selected\n * @param {String} corner a string representing the corner ml, mr, tl ...\n * @param {Event} e Event object\n * @param {FabricObject} [target] inserted back to help overriding. Unused\n */\nexport const getActionFromCorner = (\n alreadySelected: boolean,\n corner: string | undefined,\n e: TPointerEvent,\n target: FabricObject,\n) => {\n if (!corner || !alreadySelected) {\n return 'drag';\n }\n const control = target.controls[corner];\n return control.getActionName(e, control, target);\n};\n\n/**\n * Checks if transform is centered\n * @param {Object} transform transform data\n * @return {Boolean} true if transform is centered\n */\nexport function isTransformCentered(transform: Transform) {\n return (\n resolveOrigin(transform.originX) === resolveOrigin(CENTER) &&\n resolveOrigin(transform.originY) === resolveOrigin(CENTER)\n );\n}\n\nexport function invertOrigin(origin: TOriginX | TOriginY) {\n return -resolveOrigin(origin) + 0.5;\n}\n\nexport const isLocked = (\n target: FabricObject,\n lockingKey:\n | 'lockMovementX'\n | 'lockMovementY'\n | 'lockRotation'\n | 'lockScalingX'\n | 'lockScalingY'\n | 'lockSkewingX'\n | 'lockSkewingY'\n | 'lockScalingFlip',\n) => target[lockingKey];\n\nexport const commonEventInfo: TransformAction<\n Transform,\n BasicTransformEvent\n> = (eventData, transform, x, y) => {\n return {\n e: eventData,\n transform,\n pointer: new Point(x, y),\n };\n};\n\n/**\n * Combine control position and object angle to find the control direction compared\n * to the object center.\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n * @param {Control} control the control class\n * @return {Number} 0 - 7 a quadrant number\n */\nexport function findCornerQuadrant(\n fabricObject: FabricObject,\n control: Control,\n): number {\n // angle is relative to canvas plane\n const angle = fabricObject.getTotalAngle(),\n cornerAngle =\n angle + radiansToDegrees(Math.atan2(control.y, control.x)) + 360;\n return Math.round((cornerAngle % 360) / 45);\n}\n\n/**\n * @returns the normalized point (rotated relative to center) in local coordinates\n */\nfunction normalizePoint(\n target: FabricObject,\n point: Point,\n originX: TOriginX,\n originY: TOriginY,\n): Point {\n const center = target.getRelativeCenterPoint(),\n p =\n typeof originX !== 'undefined' && typeof originY !== 'undefined'\n ? target.translateToGivenOrigin(\n center,\n CENTER,\n CENTER,\n originX,\n originY,\n )\n : new Point(target.left, target.top),\n p2 = target.angle\n ? point.rotate(-degreesToRadians(target.angle), center)\n : point;\n return p2.subtract(p);\n}\n\n/**\n * Transforms a point to the offset from the given origin\n * @param {Object} transform\n * @param {String} originX\n * @param {String} originY\n * @param {number} x\n * @param {number} y\n * @return {Fabric.Point} the normalized point\n */\nexport function getLocalPoint(\n { target, corner }: Transform,\n originX: TOriginX,\n originY: TOriginY,\n x: number,\n y: number,\n) {\n const control = target.controls[corner],\n zoom = target.canvas?.getZoom() || 1,\n padding = target.padding / zoom,\n localPoint = normalizePoint(target, new Point(x, y), originX, originY);\n if (localPoint.x >= padding) {\n localPoint.x -= padding;\n }\n if (localPoint.x <= -padding) {\n localPoint.x += padding;\n }\n if (localPoint.y >= padding) {\n localPoint.y -= padding;\n }\n if (localPoint.y <= padding) {\n localPoint.y += padding;\n }\n localPoint.x -= control.offsetX;\n localPoint.y -= control.offsetY;\n return localPoint;\n}\n","import type { TransformActionHandler } from '../EventTypeDefs';\nimport { LEFT, TOP, MOVING } from '../constants';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo, isLocked } from './util';\n\n/**\n * Action handler\n * @private\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if the translation occurred\n */\nexport const dragHandler: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target, offsetX, offsetY } = transform,\n newLeft = x - offsetX,\n newTop = y - offsetY,\n moveX = !isLocked(target, 'lockMovementX') && target.left !== newLeft,\n moveY = !isLocked(target, 'lockMovementY') && target.top !== newTop;\n moveX && target.set(LEFT, newLeft);\n moveY && target.set(TOP, newTop);\n if (moveX || moveY) {\n fireEvent(MOVING, commonEventInfo(eventData, transform, x, y));\n }\n return moveX || moveY;\n};\n","import type { TSVGReviver } from '../../typedefs';\nimport { uid } from '../../util/internals/uid';\nimport { colorPropToSVG, matrixToSVG } from '../../util/misc/svgParsing';\nimport { FILL, NONE, STROKE } from '../../constants';\nimport type { FabricObject } from './FabricObject';\nimport { isFiller } from '../../util/typeAssertions';\n\nexport class FabricObjectSVGExportMixin {\n /**\n * When an object is being exported as SVG as a clippath, a reference inside the SVG is needed.\n * This reference is a UID in the fabric namespace and is temporary stored here.\n * @type {String}\n */\n declare clipPathId?: string;\n\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles(\n this: FabricObjectSVGExportMixin & FabricObject,\n skipShadow?: boolean,\n ) {\n const fillRule = this.fillRule ? this.fillRule : 'nonzero',\n strokeWidth = this.strokeWidth ? this.strokeWidth : '0',\n strokeDashArray = this.strokeDashArray\n ? this.strokeDashArray.join(' ')\n : NONE,\n strokeDashOffset = this.strokeDashOffset ? this.strokeDashOffset : '0',\n strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt',\n strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter',\n strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4',\n opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1',\n visibility = this.visible ? '' : ' visibility: hidden;',\n filter = skipShadow ? '' : this.getSvgFilter(),\n fill = colorPropToSVG(FILL, this.fill),\n stroke = colorPropToSVG(STROKE, this.stroke);\n\n return [\n stroke,\n 'stroke-width: ',\n strokeWidth,\n '; ',\n 'stroke-dasharray: ',\n strokeDashArray,\n '; ',\n 'stroke-linecap: ',\n strokeLineCap,\n '; ',\n 'stroke-dashoffset: ',\n strokeDashOffset,\n '; ',\n 'stroke-linejoin: ',\n strokeLineJoin,\n '; ',\n 'stroke-miterlimit: ',\n strokeMiterLimit,\n '; ',\n fill,\n 'fill-rule: ',\n fillRule,\n '; ',\n 'opacity: ',\n opacity,\n ';',\n filter,\n visibility,\n ].join('');\n }\n\n /**\n * Returns filter for svg shadow\n * @return {String}\n */\n getSvgFilter(this: FabricObjectSVGExportMixin & FabricObject) {\n return this.shadow ? `filter: url(#SVGID_${this.shadow.id});` : '';\n }\n\n /**\n * Returns id attribute for svg output\n * @return {String}\n */\n getSvgCommons(\n this: FabricObjectSVGExportMixin & FabricObject & { id?: string },\n ) {\n return [\n this.id ? `id=\"${this.id}\" ` : '',\n this.clipPath\n ? `clip-path=\"url(#${\n (this.clipPath as FabricObjectSVGExportMixin & FabricObject)\n .clipPathId\n })\" `\n : '',\n ].join('');\n }\n\n /**\n * Returns transform-string for svg-export\n * @param {Boolean} use the full transform or the single object one.\n * @return {String}\n */\n getSvgTransform(\n this: FabricObjectSVGExportMixin & FabricObject,\n full?: boolean,\n additionalTransform = '',\n ) {\n const transform = full ? this.calcTransformMatrix() : this.calcOwnMatrix(),\n svgTransform = `transform=\"${matrixToSVG(transform)}`;\n return `${svgTransform}${additionalTransform}\" `;\n }\n\n /**\n * Returns svg representation of an instance\n * This function is implemented in each subclass\n * This is just because typescript otherwise cryies all the time\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG(_reviver?: TSVGReviver): string[] {\n return [''];\n }\n\n /**\n * Returns svg representation of an instance\n * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG(\n this: FabricObjectSVGExportMixin & FabricObject,\n reviver?: TSVGReviver,\n ) {\n return this._createBaseSVGMarkup(this._toSVG(reviver), {\n reviver,\n });\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG(\n this: FabricObjectSVGExportMixin & FabricObject,\n reviver?: TSVGReviver,\n ) {\n return (\n '\\t' +\n this._createBaseClipPathSVGMarkup(this._toSVG(reviver), {\n reviver,\n })\n );\n }\n\n /**\n * @private\n */\n _createBaseClipPathSVGMarkup(\n this: FabricObjectSVGExportMixin & FabricObject,\n objectMarkup: string[],\n {\n reviver,\n additionalTransform = '',\n }: { reviver?: TSVGReviver; additionalTransform?: string } = {},\n ) {\n const commonPieces = [\n this.getSvgTransform(true, additionalTransform),\n this.getSvgCommons(),\n ].join(''),\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS');\n objectMarkup[index] = commonPieces;\n return reviver ? reviver(objectMarkup.join('')) : objectMarkup.join('');\n }\n\n /**\n * @private\n */\n _createBaseSVGMarkup(\n this: FabricObjectSVGExportMixin & FabricObject,\n objectMarkup: string[],\n {\n noStyle,\n reviver,\n withShadow,\n additionalTransform,\n }: {\n noStyle?: boolean;\n reviver?: TSVGReviver;\n withShadow?: boolean;\n additionalTransform?: string;\n } = {},\n ): string {\n const styleInfo = noStyle ? '' : `style=\"${this.getSvgStyles()}\" `,\n shadowInfo = withShadow ? `style=\"${this.getSvgFilter()}\" ` : '',\n clipPath = this.clipPath as FabricObjectSVGExportMixin & FabricObject,\n vectorEffect = this.strokeUniform\n ? 'vector-effect=\"non-scaling-stroke\" '\n : '',\n absoluteClipPath = clipPath && clipPath.absolutePositioned,\n stroke = this.stroke,\n fill = this.fill,\n shadow = this.shadow,\n markup = [],\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS');\n let clipPathMarkup;\n if (clipPath) {\n clipPath.clipPathId = `CLIPPATH_${uid()}`;\n clipPathMarkup = `\\n${clipPath.toClipPathSVG(reviver)}\\n`;\n }\n if (absoluteClipPath) {\n markup.push('\\n');\n }\n markup.push(\n '\\n',\n );\n const commonPieces = [\n styleInfo,\n vectorEffect,\n noStyle ? '' : this.addPaintOrder(),\n ' ',\n additionalTransform ? `transform=\"${additionalTransform}\" ` : '',\n ].join('');\n objectMarkup[index] = commonPieces;\n if (isFiller(fill)) {\n markup.push(fill.toSVG(this));\n }\n if (isFiller(stroke)) {\n markup.push(stroke.toSVG(this));\n }\n if (shadow) {\n markup.push(shadow.toSVG(this));\n }\n if (clipPath) {\n markup.push(clipPathMarkup);\n }\n markup.push(objectMarkup.join(''));\n markup.push('\\n');\n absoluteClipPath && markup.push('\\n');\n return reviver ? reviver(markup.join('')) : markup.join('');\n }\n\n addPaintOrder(this: FabricObjectSVGExportMixin & FabricObject) {\n return this.paintFirst !== FILL ? ` paint-order=\"${this.paintFirst}\" ` : '';\n }\n}\n","export function getSvgRegex(arr: string[]) {\n return new RegExp('^(' + arr.join('|') + ')\\\\b', 'i');\n}\n","import { getSvgRegex } from './getSvgRegex';\nimport { LEFT, TOP } from '../constants';\n\nexport const reNum = String.raw`(?:[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?)`;\n\nexport const svgNS = 'http://www.w3.org/2000/svg';\n\nexport const reFontDeclaration = new RegExp(\n '(normal|italic)?\\\\s*(normal|small-caps)?\\\\s*' +\n '(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\\\s*(' +\n reNum +\n '(?:px|cm|mm|em|pt|pc|in)*)(?:\\\\/(normal|' +\n reNum +\n '))?\\\\s+(.*)',\n);\n\nexport const svgValidTagNames = [\n 'path',\n 'circle',\n 'polygon',\n 'polyline',\n 'ellipse',\n 'rect',\n 'line',\n 'image',\n 'text',\n ],\n svgViewBoxElements = ['symbol', 'image', 'marker', 'pattern', 'view', 'svg'],\n svgInvalidAncestors = [\n 'pattern',\n 'defs',\n 'symbol',\n 'metadata',\n 'clipPath',\n 'mask',\n 'desc',\n ],\n svgValidParents = ['symbol', 'g', 'a', 'svg', 'clipPath', 'defs'],\n attributesMap = {\n cx: LEFT,\n x: LEFT,\n r: 'radius',\n cy: TOP,\n y: TOP,\n display: 'visible',\n visibility: 'visible',\n transform: 'transformMatrix',\n 'fill-opacity': 'fillOpacity',\n 'fill-rule': 'fillRule',\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-style': 'fontStyle',\n 'font-weight': 'fontWeight',\n 'letter-spacing': 'charSpacing',\n 'paint-order': 'paintFirst',\n 'stroke-dasharray': 'strokeDashArray',\n 'stroke-dashoffset': 'strokeDashOffset',\n 'stroke-linecap': 'strokeLineCap',\n 'stroke-linejoin': 'strokeLineJoin',\n 'stroke-miterlimit': 'strokeMiterLimit',\n 'stroke-opacity': 'strokeOpacity',\n 'stroke-width': 'strokeWidth',\n 'text-decoration': 'textDecoration',\n 'text-anchor': 'textAnchor',\n opacity: 'opacity',\n 'clip-path': 'clipPath',\n 'clip-rule': 'clipRule',\n 'vector-effect': 'strokeUniform',\n 'image-rendering': 'imageSmoothing',\n },\n fSize = 'font-size',\n cPath = 'clip-path';\n\nexport const svgValidTagNamesRegEx = getSvgRegex(svgValidTagNames);\n\nexport const svgViewBoxElementsRegEx = getSvgRegex(svgViewBoxElements);\n\nexport const svgValidParentsRegEx = getSvgRegex(svgValidParents);\n\n// http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute\n// matches, e.g.: +14.56e-12, etc.\nexport const reViewBoxAttrValue = new RegExp(\n '^' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*,?' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*,?' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*,?' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*' +\n '$',\n);\n","import type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport type { TRadian } from '../../typedefs';\n\nconst unitVectorX = new Point(1, 0);\nconst zero = new Point();\n\n/**\n * Rotates `vector` with `radians`\n * @param {Point} vector The vector to rotate (x and y)\n * @param {Number} radians The radians of the angle for the rotation\n * @return {Point} The new rotated point\n */\nexport const rotateVector = (vector: Point, radians: TRadian) =>\n vector.rotate(radians);\n\n/**\n * Creates a vector from points represented as a point\n *\n * @param {Point} from\n * @param {Point} to\n * @returns {Point} vector\n */\nexport const createVector = (from: XY, to: XY): Point =>\n new Point(to).subtract(from);\n\n/**\n * return the magnitude of a vector\n * @return {number}\n */\nexport const magnitude = (point: Point) => point.distanceFrom(zero);\n\n/**\n * Calculates the angle between 2 vectors\n * @param {Point} a\n * @param {Point} b\n * @returns the angle in radians from `a` to `b`\n */\nexport const calcAngleBetweenVectors = (a: Point, b: Point): TRadian =>\n Math.atan2(crossProduct(a, b), dotProduct(a, b)) as TRadian;\n\n/**\n * Calculates the angle between the x axis and the vector\n * @param {Point} v\n * @returns the angle in radians of `v`\n */\nexport const calcVectorRotation = (v: Point) =>\n calcAngleBetweenVectors(unitVectorX, v);\n\n/**\n * @param {Point} v\n * @returns {Point} vector representing the unit vector pointing to the direction of `v`\n */\nexport const getUnitVector = (v: Point): Point =>\n v.eq(zero) ? v : v.scalarDivide(magnitude(v));\n\n/**\n * @param {Point} v\n * @param {Boolean} [counterClockwise] the direction of the orthogonal vector, defaults to `true`\n * @returns {Point} the unit orthogonal vector\n */\nexport const getOrthonormalVector = (\n v: Point,\n counterClockwise = true,\n): Point =>\n getUnitVector(new Point(-v.y, v.x).scalarMultiply(counterClockwise ? 1 : -1));\n\n/**\n * Cross product of two vectors in 2D\n * @param {Point} a\n * @param {Point} b\n * @returns {number} the magnitude of Z vector\n */\nexport const crossProduct = (a: Point, b: Point): number =>\n a.x * b.y - a.y * b.x;\n\n/**\n * Dot product of two vectors in 2D\n * @param {Point} a\n * @param {Point} b\n * @returns {number}\n */\nexport const dotProduct = (a: Point, b: Point): number => a.x * b.x + a.y * b.y;\n\n/**\n * Checks if the vector is between two others. It is considered\n * to be inside when the vector to be tested is between the\n * initial vector and the final vector (included) in a counterclockwise direction.\n * @param {Point} t vector to be tested\n * @param {Point} a initial vector\n * @param {Point} b final vector\n * @returns {boolean} true if the vector is among the others\n */\nexport const isBetweenVectors = (t: Point, a: Point, b: Point): boolean => {\n if (t.eq(a) || t.eq(b)) return true;\n const AxB = crossProduct(a, b),\n AxT = crossProduct(a, t),\n BxT = crossProduct(b, t);\n return AxB >= 0 ? AxT >= 0 && BxT <= 0 : !(AxT <= 0 && BxT >= 0);\n};\n","import { classRegistry } from './ClassRegistry';\nimport { Color } from './color/Color';\nimport { config } from './config';\nimport { reNum } from './parser/constants';\nimport { Point } from './Point';\nimport type { FabricObject } from './shapes/Object/FabricObject';\nimport type { TClassProperties } from './typedefs';\nimport { uid } from './util/internals/uid';\nimport { pickBy } from './util/misc/pick';\nimport { degreesToRadians } from './util/misc/radiansDegreesConversion';\nimport { toFixed } from './util/misc/toFixed';\nimport { rotateVector } from './util/misc/vectors';\n\n/**\n * Regex matching shadow offsetX, offsetY and blur (ex: \"2px 2px 10px rgba(0,0,0,0.2)\", \"rgb(0,255,0) 2px 2px\")\n * - (?:\\s|^): This part captures either a whitespace character (\\s) or the beginning of a line (^). It's non-capturing (due to (?:...)), meaning it doesn't create a capturing group.\n * - (-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?: This captures the first component of the shadow, which is the horizontal offset. Breaking it down:\n * - (-?\\d+): Captures an optional minus sign followed by one or more digits (integer part of the number).\n * - (?:\\.\\d*)?: Optionally captures a decimal point followed by zero or more digits (decimal part of the number).\n * - (?:px)?: Optionally captures the \"px\" unit.\n * - (?:\\s?|$): Captures either an optional whitespace or the end of the line. This whole part is wrapped in a non-capturing group and marked as optional with ?.\n * - (-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?: Similar to the previous step, this captures the vertical offset.\n\n(\\d+(?:\\.\\d*)?(?:px)?)?: This captures the blur radius. It's similar to the horizontal offset but without the optional minus sign.\n\n(?:\\s+(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?){0,1}: This captures an optional part for the color. It allows for whitespace followed by a component with an optional minus sign, digits, decimal point, and \"px\" unit.\n\n(?:$|\\s): This captures either the end of the line or a whitespace character. It ensures that the match ends either at the end of the string or with a whitespace character.\n */\n// eslint-disable-next-line max-len\n\nconst shadowOffsetRegex = '(-?\\\\d+(?:\\\\.\\\\d*)?(?:px)?(?:\\\\s?|$))?';\n\nconst reOffsetsAndBlur = new RegExp(\n '(?:\\\\s|^)' +\n shadowOffsetRegex +\n shadowOffsetRegex +\n '(' +\n reNum +\n '?(?:px)?)?(?:\\\\s?|$)(?:$|\\\\s)',\n);\n\nexport const shadowDefaultValues: Partial> = {\n color: 'rgb(0,0,0)',\n blur: 0,\n offsetX: 0,\n offsetY: 0,\n affectStroke: false,\n includeDefaultValues: true,\n nonScaling: false,\n};\n\nexport type SerializedShadowOptions = {\n color: string;\n blur: number;\n offsetX: number;\n offsetY: number;\n affectStroke: boolean;\n nonScaling: boolean;\n type: string;\n};\n\nexport class Shadow {\n /**\n * Shadow color\n * @type String\n * @default\n */\n declare color: string;\n\n /**\n * Shadow blur\n * @type Number\n */\n declare blur: number;\n\n /**\n * Shadow horizontal offset\n * @type Number\n * @default\n */\n declare offsetX: number;\n\n /**\n * Shadow vertical offset\n * @type Number\n * @default\n */\n declare offsetY: number;\n\n /**\n * Whether the shadow should affect stroke operations\n * @type Boolean\n * @default\n */\n declare affectStroke: boolean;\n\n /**\n * Indicates whether toObject should include default values\n * @type Boolean\n * @default\n */\n declare includeDefaultValues: boolean;\n\n /**\n * When `false`, the shadow will scale with the object.\n * When `true`, the shadow's offsetX, offsetY, and blur will not be affected by the object's scale.\n * default to false\n * @type Boolean\n * @default\n */\n declare nonScaling: boolean;\n\n declare id: number;\n\n static ownDefaults = shadowDefaultValues;\n\n static type = 'shadow';\n\n /**\n * @see {@link http://fabricjs.com/shadows|Shadow demo}\n * @param {Object|String} [options] Options object with any of color, blur, offsetX, offsetY properties or string (e.g. \"rgba(0,0,0,0.2) 2px 2px 10px\")\n */\n constructor(options: Partial>);\n constructor(svgAttribute: string);\n constructor(arg0: string | Partial>) {\n const options: Partial> =\n typeof arg0 === 'string' ? Shadow.parseShadow(arg0) : arg0;\n Object.assign(this, Shadow.ownDefaults, options);\n this.id = uid();\n }\n\n /**\n * @param {String} value Shadow value to parse\n * @return {Object} Shadow object with color, offsetX, offsetY and blur\n */\n static parseShadow(value: string) {\n const shadowStr = value.trim(),\n [, offsetX = 0, offsetY = 0, blur = 0] = (\n reOffsetsAndBlur.exec(shadowStr) || []\n ).map((value) => parseFloat(value) || 0),\n color = (shadowStr.replace(reOffsetsAndBlur, '') || 'rgb(0,0,0)').trim();\n\n return {\n color,\n offsetX,\n offsetY,\n blur,\n };\n }\n\n /**\n * Returns a string representation of an instance\n * @see http://www.w3.org/TR/css-text-decor-3/#text-shadow\n * @return {String} Returns CSS3 text-shadow declaration\n */\n toString() {\n return [this.offsetX, this.offsetY, this.blur, this.color].join('px ');\n }\n\n /**\n * Returns SVG representation of a shadow\n * @param {FabricObject} object\n * @return {String} SVG representation of a shadow\n */\n toSVG(object: FabricObject) {\n const offset = rotateVector(\n new Point(this.offsetX, this.offsetY),\n degreesToRadians(-object.angle),\n ),\n BLUR_BOX = 20,\n color = new Color(this.color);\n let fBoxX = 40,\n fBoxY = 40;\n\n if (object.width && object.height) {\n //http://www.w3.org/TR/SVG/filters.html#FilterEffectsRegion\n // we add some extra space to filter box to contain the blur ( 20 )\n fBoxX =\n toFixed(\n (Math.abs(offset.x) + this.blur) / object.width,\n config.NUM_FRACTION_DIGITS,\n ) *\n 100 +\n BLUR_BOX;\n fBoxY =\n toFixed(\n (Math.abs(offset.y) + this.blur) / object.height,\n config.NUM_FRACTION_DIGITS,\n ) *\n 100 +\n BLUR_BOX;\n }\n if (object.flipX) {\n offset.x *= -1;\n }\n if (object.flipY) {\n offset.y *= -1;\n }\n\n return `\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\t\\n\\t\\t\\n\\t\\n\\n`;\n }\n\n /**\n * Returns object representation of a shadow\n * @return {Object} Object representation of a shadow instance\n */\n toObject() {\n const data: SerializedShadowOptions = {\n color: this.color,\n blur: this.blur,\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n affectStroke: this.affectStroke,\n nonScaling: this.nonScaling,\n type: (this.constructor as typeof Shadow).type,\n };\n const defaults = Shadow.ownDefaults as SerializedShadowOptions;\n return !this.includeDefaultValues\n ? pickBy(data, (value, key) => value !== defaults[key])\n : data;\n }\n\n static async fromObject(options: Partial>) {\n return new this(options);\n }\n}\n\nclassRegistry.setClass(Shadow, 'shadow');\n","export const capValue = (min: number, value: number, max: number) =>\n Math.max(min, Math.min(value, max));\n","import {\n TOP,\n LEFT,\n SCALE_Y,\n SCALE_X,\n SKEW_X,\n SKEW_Y,\n FILL,\n STROKE,\n} from '../../constants';\nimport type { TClassProperties } from '../../typedefs';\nimport type { InteractiveFabricObject } from './InteractiveObject';\nimport type { FabricObject } from './Object';\n\nexport const stateProperties = [\n TOP,\n LEFT,\n SCALE_X,\n SCALE_Y,\n 'flipX',\n 'flipY',\n 'originX',\n 'originY',\n 'angle',\n 'opacity',\n 'globalCompositeOperation',\n 'shadow',\n 'visible',\n SKEW_X,\n SKEW_Y,\n];\n\nexport const cacheProperties = [\n FILL,\n STROKE,\n 'strokeWidth',\n 'strokeDashArray',\n 'width',\n 'height',\n 'paintFirst',\n 'strokeUniform',\n 'strokeLineCap',\n 'strokeDashOffset',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'backgroundColor',\n 'clipPath',\n];\n\nexport const fabricObjectDefaultValues: Partial<\n TClassProperties\n> = {\n // see composeMatrix() to see order of transforms. First defaults listed based on this\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n angle: 0,\n flipX: false,\n flipY: false,\n scaleX: 1,\n scaleY: 1,\n minScaleLimit: 0,\n skewX: 0,\n skewY: 0,\n originX: LEFT,\n originY: TOP,\n strokeWidth: 1,\n strokeUniform: false,\n padding: 0,\n opacity: 1,\n paintFirst: FILL,\n fill: 'rgb(0,0,0)',\n fillRule: 'nonzero',\n stroke: null,\n strokeDashArray: null,\n strokeDashOffset: 0,\n strokeLineCap: 'butt',\n strokeLineJoin: 'miter',\n strokeMiterLimit: 4,\n globalCompositeOperation: 'source-over',\n backgroundColor: '',\n shadow: null,\n visible: true,\n includeDefaultValues: true,\n excludeFromExport: false,\n objectCaching: true,\n clipPath: undefined,\n inverted: false,\n absolutePositioned: false,\n centeredRotation: true,\n centeredScaling: false,\n dirty: true,\n} as const;\n\nexport const interactiveObjectDefaultValues: Partial<\n TClassProperties\n> = {\n noScaleCache: true,\n lockMovementX: false,\n lockMovementY: false,\n lockRotation: false,\n lockScalingX: false,\n lockScalingY: false,\n lockSkewingX: false,\n lockSkewingY: false,\n lockScalingFlip: false,\n cornerSize: 13,\n touchCornerSize: 24,\n transparentCorners: true,\n cornerColor: 'rgb(178,204,255)',\n cornerStrokeColor: '',\n cornerStyle: 'rect',\n cornerDashArray: null,\n hasControls: true,\n borderColor: 'rgb(178,204,255)',\n borderDashArray: null,\n borderOpacityWhenMoving: 0.4,\n borderScaleFactor: 1,\n hasBorders: true,\n selectionBackgroundColor: '',\n selectable: true,\n evented: true,\n perPixelTargetFind: false,\n activeOn: 'down',\n hoverCursor: null,\n moveCursor: null,\n};\n","/**\n * Easing functions\n * @see {@link http://gizma.com/easing/ Easing Equations by Robert Penner}\n */\n\nimport { twoMathPi, halfPI } from '../../constants';\nimport type { TEasingFunction } from './types';\n\nconst normalize = (a: number, c: number, p: number, s: number) => {\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n //handle the 0/0 case:\n if (c === 0 && a === 0) {\n s = (p / twoMathPi) * Math.asin(1);\n } else {\n s = (p / twoMathPi) * Math.asin(c / a);\n }\n }\n return { a, c, p, s };\n};\n\nconst elastic = (\n a: number,\n s: number,\n p: number,\n t: number,\n d: number,\n): number =>\n a * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t * d - s) * twoMathPi) / p);\n\n/**\n * Default sinusoidal easing\n */\nexport const defaultEasing: TEasingFunction = (t, b, c, d) =>\n -c * Math.cos((t / d) * halfPI) + c + b;\n\n/**\n * Cubic easing in\n */\nexport const easeInCubic: TEasingFunction = (t, b, c, d) =>\n c * (t / d) ** 3 + b;\n\n/**\n * Cubic easing out\n */\nexport const easeOutCubic: TEasingFunction = (t, b, c, d) =>\n c * ((t / d - 1) ** 3 + 1) + b;\n\n/**\n * Cubic easing in and out\n */\nexport const easeInOutCubic: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 3 + b;\n }\n return (c / 2) * ((t - 2) ** 3 + 2) + b;\n};\n\n/**\n * Quartic easing in\n */\nexport const easeInQuart: TEasingFunction = (t, b, c, d) =>\n c * (t /= d) * t ** 3 + b;\n\n/**\n * Quartic easing out\n */\nexport const easeOutQuart: TEasingFunction = (t, b, c, d) =>\n -c * ((t = t / d - 1) * t ** 3 - 1) + b;\n\n/**\n * Quartic easing in and out\n */\nexport const easeInOutQuart: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 4 + b;\n }\n return (-c / 2) * ((t -= 2) * t ** 3 - 2) + b;\n};\n\n/**\n * Quintic easing in\n */\nexport const easeInQuint: TEasingFunction = (t, b, c, d) =>\n c * (t / d) ** 5 + b;\n\n/**\n * Quintic easing out\n */\nexport const easeOutQuint: TEasingFunction = (t, b, c, d) =>\n c * ((t / d - 1) ** 5 + 1) + b;\n\n/**\n * Quintic easing in and out\n */\nexport const easeInOutQuint: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 5 + b;\n }\n return (c / 2) * ((t - 2) ** 5 + 2) + b;\n};\n\n/**\n * Sinusoidal easing in\n */\nexport const easeInSine: TEasingFunction = (t, b, c, d) =>\n -c * Math.cos((t / d) * halfPI) + c + b;\n\n/**\n * Sinusoidal easing out\n */\nexport const easeOutSine: TEasingFunction = (t, b, c, d) =>\n c * Math.sin((t / d) * halfPI) + b;\n\n/**\n * Sinusoidal easing in and out\n */\nexport const easeInOutSine: TEasingFunction = (t, b, c, d) =>\n (-c / 2) * (Math.cos((Math.PI * t) / d) - 1) + b;\n\n/**\n * Exponential easing in\n */\nexport const easeInExpo: TEasingFunction = (t, b, c, d) =>\n t === 0 ? b : c * 2 ** (10 * (t / d - 1)) + b;\n\n/**\n * Exponential easing out\n */\nexport const easeOutExpo: TEasingFunction = (t, b, c, d) =>\n t === d ? b + c : c * -(2 ** ((-10 * t) / d) + 1) + b;\n\n/**\n * Exponential easing in and out\n */\nexport const easeInOutExpo: TEasingFunction = (t, b, c, d) => {\n if (t === 0) {\n return b;\n }\n if (t === d) {\n return b + c;\n }\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * 2 ** (10 * (t - 1)) + b;\n }\n return (c / 2) * -(2 ** (-10 * --t) + 2) + b;\n};\n\n/**\n * Circular easing in\n */\nexport const easeInCirc: TEasingFunction = (t, b, c, d) =>\n -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n\n/**\n * Circular easing out\n */\nexport const easeOutCirc: TEasingFunction = (t, b, c, d) =>\n c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n\n/**\n * Circular easing in and out\n */\nexport const easeInOutCirc: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (-c / 2) * (Math.sqrt(1 - t ** 2) - 1) + b;\n }\n return (c / 2) * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n};\n\n/**\n * Elastic easing in\n */\nexport const easeInElastic: TEasingFunction = (t, b, c, d) => {\n const s = 1.70158,\n a = c;\n let p = 0;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n const { a: normA, s: normS, p: normP } = normalize(a, c, p, s);\n return -elastic(normA, normS, normP, t, d) + b;\n};\n\n/**\n * Elastic easing out\n */\nexport const easeOutElastic: TEasingFunction = (t, b, c, d) => {\n const s = 1.70158,\n a = c;\n let p = 0;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);\n return (\n normA * 2 ** (-10 * t) * Math.sin(((t * d - normS) * twoMathPi) / normP) +\n normC +\n b\n );\n};\n\n/**\n * Elastic easing in and out\n */\nexport const easeInOutElastic: TEasingFunction = (t, b, c, d) => {\n const s = 1.70158,\n a = c;\n let p = 0;\n if (t === 0) {\n return b;\n }\n t /= d / 2;\n if (t === 2) {\n return b + c;\n }\n if (!p) {\n p = d * (0.3 * 1.5);\n }\n const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);\n if (t < 1) {\n return -0.5 * elastic(normA, normS, normP, t, d) + b;\n }\n return (\n normA *\n Math.pow(2, -10 * (t -= 1)) *\n Math.sin(((t * d - normS) * twoMathPi) / normP) *\n 0.5 +\n normC +\n b\n );\n};\n\n/**\n * Backwards easing in\n */\nexport const easeInBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>\n c * (t /= d) * t * ((s + 1) * t - s) + b;\n\n/**\n * Backwards easing out\n */\nexport const easeOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>\n c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n\n/**\n * Backwards easing in and out\n */\nexport const easeInOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n }\n return (c / 2) * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n};\n\n/**\n * Bouncing easing out\n */\nexport const easeOutBounce: TEasingFunction = (t, b, c, d) => {\n if ((t /= d) < 1 / 2.75) {\n return c * (7.5625 * t * t) + b;\n } else if (t < 2 / 2.75) {\n return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;\n } else if (t < 2.5 / 2.75) {\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;\n } else {\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;\n }\n};\n\n/**\n * Bouncing easing in\n */\nexport const easeInBounce: TEasingFunction = (t, b, c, d) =>\n c - easeOutBounce(d - t, 0, c, d) + b;\n\n/**\n * Bouncing easing in and out\n */\nexport const easeInOutBounce: TEasingFunction = (t, b, c, d) =>\n t < d / 2\n ? easeInBounce(t * 2, 0, c, d) * 0.5 + b\n : easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n\n/**\n * Quadratic easing in\n */\nexport const easeInQuad: TEasingFunction = (t, b, c, d) => c * (t /= d) * t + b;\n\n/**\n * Quadratic easing out\n */\nexport const easeOutQuad: TEasingFunction = (t, b, c, d) =>\n -c * (t /= d) * (t - 2) + b;\n\n/**\n * Quadratic easing in and out\n */\nexport const easeInOutQuad: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 2 + b;\n }\n return (-c / 2) * (--t * (t - 2) - 1) + b;\n};\n","import { noop } from '../../constants';\nimport { requestAnimFrame } from './AnimationFrameProvider';\nimport { runningAnimations } from './AnimationRegistry';\nimport { defaultEasing } from './easing';\nimport type {\n AnimationState,\n TAbortCallback,\n TBaseAnimationOptions,\n TEasingFunction,\n TOnAnimationChangeCallback,\n} from './types';\n\nconst defaultAbort = () => false;\n\nexport abstract class AnimationBase<\n T extends number | number[] = number | number[],\n> {\n declare readonly startValue: T;\n declare readonly endValue: T;\n declare readonly duration: number;\n declare readonly delay: number;\n\n protected declare readonly byValue: T;\n protected declare readonly easing: TEasingFunction;\n\n private declare readonly _onStart: VoidFunction;\n private declare readonly _onChange: TOnAnimationChangeCallback;\n private declare readonly _onComplete: TOnAnimationChangeCallback;\n private declare readonly _abort: TAbortCallback;\n\n /**\n * Used to register the animation to a target object\n * so that it can be cancelled within the object context\n */\n declare readonly target?: unknown;\n\n private _state: AnimationState = 'pending';\n /**\n * Time %, or the ratio of `timeElapsed / duration`\n * @see tick\n */\n durationProgress = 0;\n /**\n * Value %, or the ratio of `(currentValue - startValue) / (endValue - startValue)`\n */\n valueProgress = 0;\n /**\n * Current value\n */\n declare value: T;\n /**\n * Animation start time ms\n */\n private declare startTime: number;\n\n constructor({\n startValue,\n byValue,\n duration = 500,\n delay = 0,\n easing = defaultEasing,\n onStart = noop,\n onChange = noop,\n onComplete = noop,\n abort = defaultAbort,\n target,\n }: TBaseAnimationOptions) {\n this.tick = this.tick.bind(this);\n\n this.duration = duration;\n this.delay = delay;\n this.easing = easing;\n this._onStart = onStart;\n this._onChange = onChange;\n this._onComplete = onComplete;\n this._abort = abort;\n this.target = target;\n\n this.startValue = startValue;\n this.byValue = byValue;\n this.value = this.startValue;\n this.endValue = Object.freeze(this.calculate(this.duration).value);\n }\n\n get state() {\n return this._state;\n }\n\n isDone() {\n return this._state === 'aborted' || this._state === 'completed';\n }\n\n /**\n * Calculate the current value based on the easing parameters\n * @param timeElapsed in ms\n * @protected\n */\n protected abstract calculate(timeElapsed: number): {\n value: T;\n valueProgress: number;\n };\n\n start() {\n const firstTick: FrameRequestCallback = (timestamp) => {\n if (this._state !== 'pending') return;\n this.startTime = timestamp || +new Date();\n this._state = 'running';\n this._onStart();\n this.tick(this.startTime);\n };\n\n this.register();\n\n // setTimeout(cb, 0) will run cb on the next frame, causing a delay\n // we don't want that\n if (this.delay > 0) {\n setTimeout(() => requestAnimFrame(firstTick), this.delay);\n } else {\n requestAnimFrame(firstTick);\n }\n }\n\n private tick(t: number) {\n const durationMs = (t || +new Date()) - this.startTime;\n const boundDurationMs = Math.min(durationMs, this.duration);\n this.durationProgress = boundDurationMs / this.duration;\n const { value, valueProgress } = this.calculate(boundDurationMs);\n this.value = Object.freeze(value);\n this.valueProgress = valueProgress;\n\n if (this._state === 'aborted') {\n return;\n } else if (\n this._abort(this.value, this.valueProgress, this.durationProgress)\n ) {\n this._state = 'aborted';\n this.unregister();\n } else if (durationMs >= this.duration) {\n this.durationProgress = this.valueProgress = 1;\n this._onChange(this.endValue, this.valueProgress, this.durationProgress);\n this._state = 'completed';\n this._onComplete(\n this.endValue,\n this.valueProgress,\n this.durationProgress,\n );\n this.unregister();\n } else {\n this._onChange(this.value, this.valueProgress, this.durationProgress);\n requestAnimFrame(this.tick);\n }\n }\n\n private register() {\n runningAnimations.push(this as unknown as AnimationBase);\n }\n\n private unregister() {\n runningAnimations.remove(this as unknown as AnimationBase);\n }\n\n abort() {\n this._state = 'aborted';\n this.unregister();\n }\n}\n","import { AnimationBase } from './AnimationBase';\nimport type { ValueAnimationOptions } from './types';\n\nexport class ValueAnimation extends AnimationBase {\n constructor({\n startValue = 0,\n endValue = 100,\n ...otherOptions\n }: ValueAnimationOptions) {\n super({\n ...otherOptions,\n startValue,\n byValue: endValue - startValue,\n });\n }\n\n protected calculate(timeElapsed: number) {\n const value = this.easing(\n timeElapsed,\n this.startValue,\n this.byValue,\n this.duration,\n );\n return {\n value,\n valueProgress: Math.abs((value - this.startValue) / this.byValue),\n };\n }\n}\n","import { AnimationBase } from './AnimationBase';\nimport type { ArrayAnimationOptions } from './types';\n\nexport class ArrayAnimation extends AnimationBase {\n constructor({\n startValue = [0],\n endValue = [100],\n ...options\n }: ArrayAnimationOptions) {\n super({\n ...options,\n startValue,\n byValue: endValue.map((value, i) => value - startValue[i]),\n });\n }\n protected calculate(timeElapsed: number) {\n const values = this.startValue.map((value, i) =>\n this.easing(timeElapsed, value, this.byValue[i], this.duration, i),\n );\n return {\n value: values,\n valueProgress: Math.abs(\n (values[0] - this.startValue[0]) / this.byValue[0],\n ),\n };\n }\n}\n","import { Color } from '../../color/Color';\nimport type { TRGBAColorSource } from '../../color/typedefs';\nimport { halfPI } from '../../constants';\nimport { capValue } from '../misc/capValue';\nimport { AnimationBase } from './AnimationBase';\nimport type {\n ColorAnimationOptions,\n TEasingFunction,\n TOnAnimationChangeCallback,\n} from './types';\n\nconst defaultColorEasing: TEasingFunction = (\n timeElapsed,\n startValue,\n byValue,\n duration,\n) => {\n const durationProgress = 1 - Math.cos((timeElapsed / duration) * halfPI);\n return startValue + byValue * durationProgress;\n};\n\nconst wrapColorCallback = (\n callback?: TOnAnimationChangeCallback,\n) =>\n callback &&\n ((rgba: TRGBAColorSource, valueProgress: number, durationProgress: number) =>\n callback(new Color(rgba).toRgba(), valueProgress, durationProgress));\n\nexport class ColorAnimation extends AnimationBase {\n constructor({\n startValue,\n endValue,\n easing = defaultColorEasing,\n onChange,\n onComplete,\n abort,\n ...options\n }: ColorAnimationOptions) {\n const startColor = new Color(startValue).getSource();\n const endColor = new Color(endValue).getSource();\n super({\n ...options,\n startValue: startColor,\n byValue: endColor.map(\n (value, i) => value - startColor[i],\n ) as TRGBAColorSource,\n easing,\n onChange: wrapColorCallback(onChange),\n onComplete: wrapColorCallback(onComplete),\n abort: wrapColorCallback(abort),\n });\n }\n protected calculate(timeElapsed: number) {\n const [r, g, b, a] = this.startValue.map((value, i) =>\n this.easing(timeElapsed, value, this.byValue[i], this.duration, i),\n ) as TRGBAColorSource;\n const value = [\n ...[r, g, b].map(Math.round),\n capValue(0, a, 1),\n ] as TRGBAColorSource;\n return {\n value,\n valueProgress:\n // to correctly calculate the change ratio we must find a changed value\n value\n .map((p, i) =>\n this.byValue[i] !== 0\n ? Math.abs((p - this.startValue[i]) / this.byValue[i])\n : 0,\n )\n .find((p) => p !== 0) || 0,\n };\n }\n}\n","import { ValueAnimation } from './ValueAnimation';\nimport { ArrayAnimation } from './ArrayAnimation';\nimport { ColorAnimation } from './ColorAnimation';\nimport type {\n ValueAnimationOptions,\n ArrayAnimationOptions,\n ColorAnimationOptions,\n} from './types';\nimport type { TColorArg } from '../../color/typedefs';\n\nexport type TAnimation =\n T extends TColorArg\n ? ColorAnimation\n : T extends number[]\n ? ArrayAnimation\n : ValueAnimation;\n\nconst isArrayAnimation = (\n options: ArrayAnimationOptions | ValueAnimationOptions,\n): options is ArrayAnimationOptions => {\n return Array.isArray(options.startValue) || Array.isArray(options.endValue);\n};\n\n/**\n * Changes value(s) from startValue to endValue within a certain period of time,\n * invoking callbacks as the value(s) change.\n *\n * @example\n * animate({\n * startValue: 1,\n * endValue: 0,\n * onChange: (v) => {\n * obj.set('opacity', v);\n * // since we are running in a requested frame we should call `renderAll` and not `requestRenderAll`\n * canvas.renderAll();\n * }\n * });\n *\n * @example Using lists:\n * animate({\n * startValue: [1, 2, 3],\n * endValue: [2, 4, 6],\n * onChange: ([x, y, zoom]) => {\n * canvas.zoomToPoint(new Point(x, y), zoom);\n * canvas.renderAll();\n * }\n * });\n *\n */\nexport function animate(options: ArrayAnimationOptions): ArrayAnimation;\nexport function animate(options: ValueAnimationOptions): ValueAnimation;\nexport function animate<\n T extends ValueAnimationOptions | ArrayAnimationOptions,\n>(\n options: T,\n): T extends ArrayAnimationOptions ? ArrayAnimation : ValueAnimation;\nexport function animate<\n T extends ValueAnimationOptions | ArrayAnimationOptions,\n R extends T extends ArrayAnimationOptions ? ArrayAnimation : ValueAnimation,\n>(options: T): R {\n const animation = (\n isArrayAnimation(options)\n ? new ArrayAnimation(options)\n : new ValueAnimation(options)\n ) as R;\n animation.start();\n return animation;\n}\n\nexport function animateColor(options: ColorAnimationOptions) {\n const animation = new ColorAnimation(options);\n animation.start();\n return animation;\n}\n","import { Point } from './Point';\nimport { createVector } from './util/misc/vectors';\n\n/* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n\nexport type IntersectionType = 'Intersection' | 'Coincident' | 'Parallel';\n\nexport class Intersection {\n declare points: Point[];\n\n declare status?: IntersectionType;\n\n constructor(status?: IntersectionType) {\n this.status = status;\n this.points = [];\n }\n\n /**\n * Used to verify if a point is alredy in the collection\n * @param {Point} point\n * @returns {boolean}\n */\n private includes(point: Point): boolean {\n return this.points.some((p) => p.eq(point));\n }\n\n /**\n * Appends points of intersection\n * @param {...Point[]} points\n * @return {Intersection} thisArg\n * @chainable\n */\n private append(...points: Point[]): Intersection {\n this.points = this.points.concat(\n points.filter((point) => {\n return !this.includes(point);\n }),\n );\n return this;\n }\n\n /**\n * check if point T is on the segment or line defined between A and B\n *\n * @param {Point} T the point we are checking for\n * @param {Point} A one extremity of the segment\n * @param {Point} B the other extremity of the segment\n * @param [infinite] if true checks if `T` is on the line defined by `A` and `B`\n * @returns true if `T` is contained\n */\n static isPointContained(T: Point, A: Point, B: Point, infinite = false) {\n if (A.eq(B)) {\n // Edge case: the segment is a point, we check for coincidence,\n // infinite param has no meaning because there are infinite lines to consider\n return T.eq(A);\n } else if (A.x === B.x) {\n // Edge case: horizontal line.\n // we first check if T.x has the same value, and then if T.y is contained between A.y and B.y\n return (\n T.x === A.x &&\n (infinite || (T.y >= Math.min(A.y, B.y) && T.y <= Math.max(A.y, B.y)))\n );\n } else if (A.y === B.y) {\n // Edge case: vertical line.\n // we first check if T.y has the same value, and then if T.x is contained between A.x and B.x\n return (\n T.y === A.y &&\n (infinite || (T.x >= Math.min(A.x, B.x) && T.x <= Math.max(A.x, B.x)))\n );\n } else {\n // Generic case: sloped line.\n // we check that AT has the same slope as AB\n // for the segment case we need both the vectors to have the same direction and for AT to be lte AB in size\n // for the infinite case we check the absolute value of the slope, since direction is meaningless\n const AB = createVector(A, B);\n const AT = createVector(A, T);\n const s = AT.divide(AB);\n return infinite\n ? Math.abs(s.x) === Math.abs(s.y)\n : s.x === s.y && s.x >= 0 && s.x <= 1;\n }\n }\n\n /**\n * Use the ray casting algorithm to determine if {@link point} is in the polygon defined by {@link points}\n * @see https://en.wikipedia.org/wiki/Point_in_polygon\n * @param point\n * @param points polygon points\n * @returns\n */\n static isPointInPolygon(point: Point, points: Point[]) {\n const other = new Point(point).setX(\n Math.min(point.x - 1, ...points.map((p) => p.x)),\n );\n let hits = 0;\n for (let index = 0; index < points.length; index++) {\n const inter = this.intersectSegmentSegment(\n // polygon side\n points[index],\n points[(index + 1) % points.length],\n // ray\n point,\n other,\n );\n if (inter.includes(point)) {\n // point is on the polygon side\n return true;\n }\n hits += Number(inter.status === 'Intersection');\n }\n return hits % 2 === 1;\n }\n\n /**\n * Checks if a line intersects another\n * @see {@link https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection line intersection}\n * @see {@link https://en.wikipedia.org/wiki/Cramer%27s_rule Cramer's rule}\n * @static\n * @param {Point} a1\n * @param {Point} a2\n * @param {Point} b1\n * @param {Point} b2\n * @param {boolean} [aInfinite=true] check segment intersection by passing `false`\n * @param {boolean} [bInfinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLineLine(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point,\n aInfinite = true,\n bInfinite = true,\n ): Intersection {\n const a2xa1x = a2.x - a1.x,\n a2ya1y = a2.y - a1.y,\n b2xb1x = b2.x - b1.x,\n b2yb1y = b2.y - b1.y,\n a1xb1x = a1.x - b1.x,\n a1yb1y = a1.y - b1.y,\n uaT = b2xb1x * a1yb1y - b2yb1y * a1xb1x,\n ubT = a2xa1x * a1yb1y - a2ya1y * a1xb1x,\n uB = b2yb1y * a2xa1x - b2xb1x * a2ya1y;\n if (uB !== 0) {\n const ua = uaT / uB,\n ub = ubT / uB;\n if (\n (aInfinite || (0 <= ua && ua <= 1)) &&\n (bInfinite || (0 <= ub && ub <= 1))\n ) {\n return new Intersection('Intersection').append(\n new Point(a1.x + ua * a2xa1x, a1.y + ua * a2ya1y),\n );\n } else {\n return new Intersection();\n }\n } else {\n if (uaT === 0 || ubT === 0) {\n const segmentsCoincide =\n aInfinite ||\n bInfinite ||\n Intersection.isPointContained(a1, b1, b2) ||\n Intersection.isPointContained(a2, b1, b2) ||\n Intersection.isPointContained(b1, a1, a2) ||\n Intersection.isPointContained(b2, a1, a2);\n return new Intersection(segmentsCoincide ? 'Coincident' : undefined);\n } else {\n return new Intersection('Parallel');\n }\n }\n }\n\n /**\n * Checks if a segment intersects a line\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} s1 boundary point of segment\n * @param {Point} s2 other boundary point of segment\n * @param {Point} l1 point on line\n * @param {Point} l2 other point on line\n * @return {Intersection}\n */\n static intersectSegmentLine(\n s1: Point,\n s2: Point,\n l1: Point,\n l2: Point,\n ): Intersection {\n return Intersection.intersectLineLine(s1, s2, l1, l2, false, true);\n }\n\n /**\n * Checks if a segment intersects another\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point} b1 boundary point of segment\n * @param {Point} b2 other boundary point of segment\n * @return {Intersection}\n */\n static intersectSegmentSegment(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point,\n ): Intersection {\n return Intersection.intersectLineLine(a1, a2, b1, b2, false, false);\n }\n\n /**\n * Checks if line intersects polygon\n *\n * @todo account for stroke\n *\n * @static\n * @see {@link intersectSegmentPolygon} for segment intersection\n * @param {Point} a1 point on line\n * @param {Point} a2 other point on line\n * @param {Point[]} points polygon points\n * @param {boolean} [infinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLinePolygon(\n a1: Point,\n a2: Point,\n points: Point[],\n infinite = true,\n ): Intersection {\n const result = new Intersection();\n const length = points.length;\n\n for (let i = 0, b1, b2, inter; i < length; i++) {\n b1 = points[i];\n b2 = points[(i + 1) % length];\n inter = Intersection.intersectLineLine(a1, a2, b1, b2, infinite, false);\n if (inter.status === 'Coincident') {\n return inter;\n }\n result.append(...inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if segment intersects polygon\n * @static\n * @see {@link intersectLinePolygon} for line intersection\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point[]} points polygon points\n * @return {Intersection}\n */\n static intersectSegmentPolygon(\n a1: Point,\n a2: Point,\n points: Point[],\n ): Intersection {\n return Intersection.intersectLinePolygon(a1, a2, points, false);\n }\n\n /**\n * Checks if polygon intersects another polygon\n *\n * @todo account for stroke\n *\n * @static\n * @param {Point[]} points1\n * @param {Point[]} points2\n * @return {Intersection}\n */\n static intersectPolygonPolygon(\n points1: Point[],\n points2: Point[],\n ): Intersection {\n const result = new Intersection(),\n length = points1.length;\n const coincidences: Intersection[] = [];\n\n for (let i = 0; i < length; i++) {\n const a1 = points1[i],\n a2 = points1[(i + 1) % length],\n inter = Intersection.intersectSegmentPolygon(a1, a2, points2);\n if (inter.status === 'Coincident') {\n coincidences.push(inter);\n result.append(a1, a2);\n } else {\n result.append(...inter.points);\n }\n }\n\n if (coincidences.length > 0 && coincidences.length === points1.length) {\n return new Intersection('Coincident');\n } else if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if polygon intersects rectangle\n * @static\n * @see {@link intersectPolygonPolygon} for polygon intersection\n * @param {Point[]} points polygon points\n * @param {Point} r1 top left point of rect\n * @param {Point} r2 bottom right point of rect\n * @return {Intersection}\n */\n static intersectPolygonRectangle(\n points: Point[],\n r1: Point,\n r2: Point,\n ): Intersection {\n const min = r1.min(r2),\n max = r1.max(r2),\n topRight = new Point(max.x, min.y),\n bottomLeft = new Point(min.x, max.y);\n\n return Intersection.intersectPolygonPolygon(points, [\n min,\n topRight,\n max,\n bottomLeft,\n ]);\n }\n}\n","import type {\n TBBox,\n TCornerPoint,\n TDegree,\n TMat2D,\n TOriginX,\n TOriginY,\n} from '../../typedefs';\nimport { SCALE_X, SCALE_Y, iMatrix } from '../../constants';\nimport { Intersection } from '../../Intersection';\nimport { Point } from '../../Point';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport {\n createRotateMatrix,\n createTranslateMatrix,\n composeMatrix,\n invertTransform,\n multiplyTransformMatrices,\n transformPoint,\n calcPlaneRotation,\n} from '../../util/misc/matrix';\nimport { radiansToDegrees } from '../../util/misc/radiansDegreesConversion';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { StaticCanvas } from '../../canvas/StaticCanvas';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport type { ControlProps } from './types/ControlProps';\nimport { resolveOrigin } from '../../util/misc/resolveOrigin';\nimport type { Group } from '../Group';\nimport { calcDimensionsMatrix } from '../../util/misc/matrix';\nimport { sizeAfterTransform } from '../../util/misc/objectTransforms';\nimport { degreesToRadians } from '../../util/misc/radiansDegreesConversion';\nimport { CommonMethods } from '../../CommonMethods';\nimport type { BaseProps } from './types/BaseProps';\nimport type { FillStrokeProps } from './types/FillStrokeProps';\nimport { CENTER, LEFT, TOP } from '../../constants';\n\ntype TMatrixCache = {\n key: number[];\n value: TMat2D;\n};\n\ntype TACoords = TCornerPoint;\n\nexport class ObjectGeometry\n extends CommonMethods\n implements\n Pick,\n BaseProps,\n Pick\n{\n // #region Geometry\n\n declare padding: number;\n\n /**\n * Describe object's corner position in scene coordinates.\n * The coordinates are derived from the following:\n * left, top, width, height, scaleX, scaleY, skewX, skewY, angle, strokeWidth.\n * The coordinates do not depend on viewport changes.\n * The coordinates get updated with {@link setCoords}.\n * You can calculate them without updating with {@link calcACoords()}\n */\n declare aCoords: TACoords;\n\n /**\n * storage cache for object transform matrix\n */\n declare ownMatrixCache?: TMatrixCache;\n\n /**\n * storage cache for object full transform matrix\n */\n declare matrixCache?: TMatrixCache;\n\n /**\n * A Reference of the Canvas where the object is actually added\n * @type StaticCanvas | Canvas;\n * @default undefined\n * @private\n */\n declare canvas?: StaticCanvas | Canvas;\n\n /**\n * @returns {number} x position according to object's {@link originX} property in canvas coordinate plane\n */\n getX(): number {\n return this.getXY().x;\n }\n\n /**\n * @param {number} value x position according to object's {@link originX} property in canvas coordinate plane\n */\n setX(value: number) {\n this.setXY(this.getXY().setX(value));\n }\n\n /**\n * @returns {number} y position according to object's {@link originY} property in canvas coordinate plane\n */\n getY(): number {\n return this.getXY().y;\n }\n\n /**\n * @param {number} value y position according to object's {@link originY} property in canvas coordinate plane\n */\n setY(value: number) {\n this.setXY(this.getXY().setY(value));\n }\n\n /**\n * @returns {number} x position according to object's {@link originX} property in parent's coordinate plane\\\n * if parent is canvas then this property is identical to {@link getX}\n */\n getRelativeX(): number {\n return this.left;\n }\n\n /**\n * @param {number} value x position according to object's {@link originX} property in parent's coordinate plane\\\n * if parent is canvas then this method is identical to {@link setX}\n */\n setRelativeX(value: number) {\n this.left = value;\n }\n\n /**\n * @returns {number} y position according to object's {@link originY} property in parent's coordinate plane\\\n * if parent is canvas then this property is identical to {@link getY}\n */\n getRelativeY(): number {\n return this.top;\n }\n\n /**\n * @param {number} value y position according to object's {@link originY} property in parent's coordinate plane\\\n * if parent is canvas then this property is identical to {@link setY}\n */\n setRelativeY(value: number) {\n this.top = value;\n }\n\n /**\n * @returns {Point} x position according to object's {@link originX} {@link originY} properties in canvas coordinate plane\n */\n getXY(): Point {\n const relativePosition = this.getRelativeXY();\n return this.group\n ? transformPoint(relativePosition, this.group.calcTransformMatrix())\n : relativePosition;\n }\n\n /**\n * Set an object position to a particular point, the point is intended in absolute ( canvas ) coordinate.\n * You can specify {@link originX} and {@link originY} values,\n * that otherwise are the object's current values.\n * @example Set object's bottom left corner to point (5,5) on canvas\n * object.setXY(new Point(5, 5), 'left', 'bottom').\n * @param {Point} point position in scene coordinate plane\n * @param {TOriginX} [originX] Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} [originY] Vertical origin: 'top', 'center' or 'bottom'\n */\n setXY(point: Point, originX?: TOriginX, originY?: TOriginY) {\n if (this.group) {\n point = transformPoint(\n point,\n invertTransform(this.group.calcTransformMatrix()),\n );\n }\n this.setRelativeXY(point, originX, originY);\n }\n\n /**\n * @returns {Point} x,y position according to object's {@link originX} {@link originY} properties in parent's coordinate plane\n */\n getRelativeXY(): Point {\n return new Point(this.left, this.top);\n }\n\n /**\n * As {@link setXY}, but in current parent's coordinate plane (the current group if any or the canvas)\n * @param {Point} point position according to object's {@link originX} {@link originY} properties in parent's coordinate plane\n * @param {TOriginX} [originX] Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} [originY] Vertical origin: 'top', 'center' or 'bottom'\n */\n setRelativeXY(\n point: Point,\n originX: TOriginX = this.originX,\n originY: TOriginY = this.originY,\n ) {\n this.setPositionByOrigin(point, originX, originY);\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return false;\n }\n\n /**\n * @return {Point[]} [tl, tr, br, bl] in the scene plane\n */\n getCoords(): Point[] {\n const { tl, tr, br, bl } =\n this.aCoords || (this.aCoords = this.calcACoords());\n const coords = [tl, tr, br, bl];\n if (this.group) {\n const t = this.group.calcTransformMatrix();\n return coords.map((p) => transformPoint(p, t));\n }\n return coords;\n }\n\n /**\n * Checks if object intersects with the scene rect formed by {@link tl} and {@link br}\n */\n intersectsWithRect(tl: Point, br: Point): boolean {\n const intersection = Intersection.intersectPolygonRectangle(\n this.getCoords(),\n tl,\n br,\n );\n return intersection.status === 'Intersection';\n }\n\n /**\n * Checks if object intersects with another object\n * @param {Object} other Object to test\n * @return {Boolean} true if object intersects with another object\n */\n intersectsWithObject(other: ObjectGeometry): boolean {\n const intersection = Intersection.intersectPolygonPolygon(\n this.getCoords(),\n other.getCoords(),\n );\n\n return (\n intersection.status === 'Intersection' ||\n intersection.status === 'Coincident' ||\n other.isContainedWithinObject(this) ||\n this.isContainedWithinObject(other)\n );\n }\n\n /**\n * Checks if object is fully contained within area of another object\n * @param {Object} other Object to test\n * @return {Boolean} true if object is fully contained within area of another object\n */\n isContainedWithinObject(other: ObjectGeometry): boolean {\n const points = this.getCoords();\n return points.every((point) => other.containsPoint(point));\n }\n\n /**\n * Checks if object is fully contained within the scene rect formed by {@link tl} and {@link br}\n */\n isContainedWithinRect(tl: Point, br: Point): boolean {\n const { left, top, width, height } = this.getBoundingRect();\n return (\n left >= tl.x &&\n left + width <= br.x &&\n top >= tl.y &&\n top + height <= br.y\n );\n }\n\n isOverlapping(other: T): boolean {\n return (\n this.intersectsWithObject(other) ||\n this.isContainedWithinObject(other) ||\n other.isContainedWithinObject(this)\n );\n }\n\n /**\n * Checks if point is inside the object\n * @param {Point} point Point to check against\n * @return {Boolean} true if point is inside the object\n */\n containsPoint(point: Point): boolean {\n return Intersection.isPointInPolygon(point, this.getCoords());\n }\n\n /**\n * Checks if object is contained within the canvas with current viewportTransform\n * the check is done stopping at first point that appears on screen\n * @return {Boolean} true if object is fully or partially contained within canvas\n */\n isOnScreen(): boolean {\n if (!this.canvas) {\n return false;\n }\n const { tl, br } = this.canvas.vptCoords;\n const points = this.getCoords();\n // if some point is on screen, the object is on screen.\n if (\n points.some(\n (point) =>\n point.x <= br.x &&\n point.x >= tl.x &&\n point.y <= br.y &&\n point.y >= tl.y,\n )\n ) {\n return true;\n }\n // no points on screen, check intersection with absolute coordinates\n if (this.intersectsWithRect(tl, br)) {\n return true;\n }\n // check if the object is so big that it contains the entire viewport\n return this.containsPoint(tl.midPointFrom(br));\n }\n\n /**\n * Checks if object is partially contained within the canvas with current viewportTransform\n * @return {Boolean} true if object is partially contained within canvas\n */\n isPartiallyOnScreen(): boolean {\n if (!this.canvas) {\n return false;\n }\n const { tl, br } = this.canvas.vptCoords;\n if (this.intersectsWithRect(tl, br)) {\n return true;\n }\n const allPointsAreOutside = this.getCoords().every(\n (point) =>\n (point.x >= br.x || point.x <= tl.x) &&\n (point.y >= br.y || point.y <= tl.y),\n );\n // check if the object is so big that it contains the entire viewport\n return allPointsAreOutside && this.containsPoint(tl.midPointFrom(br));\n }\n\n /**\n * Returns coordinates of object's bounding rectangle (left, top, width, height)\n * the box is intended as aligned to axis of canvas.\n * @return {Object} Object with left, top, width, height properties\n */\n getBoundingRect(): TBBox {\n return makeBoundingBoxFromPoints(this.getCoords());\n }\n\n /**\n * Returns width of an object's bounding box counting transformations\n * @todo shouldn't this account for group transform and return the actual size in canvas coordinate plane?\n * @return {Number} width value\n */\n getScaledWidth(): number {\n return this._getTransformedDimensions().x;\n }\n\n /**\n * Returns height of an object bounding box counting transformations\n * @todo shouldn't this account for group transform and return the actual size in canvas coordinate plane?\n * @return {Number} height value\n */\n getScaledHeight(): number {\n return this._getTransformedDimensions().y;\n }\n\n /**\n * Scales an object (equally by x and y)\n * @param {Number} value Scale factor\n * @return {void}\n */\n scale(value: number): void {\n this._set(SCALE_X, value);\n this._set(SCALE_Y, value);\n this.setCoords();\n }\n\n /**\n * Scales an object to a given width, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New width value\n * @return {void}\n */\n scaleToWidth(value: number) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n const boundingRectFactor =\n this.getBoundingRect().width / this.getScaledWidth();\n return this.scale(value / this.width / boundingRectFactor);\n }\n\n /**\n * Scales an object to a given height, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New height value\n * @return {void}\n */\n scaleToHeight(value: number) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n const boundingRectFactor =\n this.getBoundingRect().height / this.getScaledHeight();\n return this.scale(value / this.height / boundingRectFactor);\n }\n\n getCanvasRetinaScaling() {\n return this.canvas?.getRetinaScaling() || 1;\n }\n\n /**\n * Returns the object angle relative to canvas counting also the group property\n * @returns {TDegree}\n */\n getTotalAngle(): TDegree {\n return this.group\n ? radiansToDegrees(calcPlaneRotation(this.calcTransformMatrix()))\n : this.angle;\n }\n\n /**\n * Retrieves viewportTransform from Object's canvas if available\n * @return {TMat2D}\n */\n getViewportTransform(): TMat2D {\n return this.canvas?.viewportTransform || (iMatrix.concat() as TMat2D);\n }\n\n /**\n * Calculates the coordinates of the 4 corner of the bbox, in absolute coordinates.\n * those never change with zoom or viewport changes.\n * @return {TCornerPoint}\n */\n calcACoords(): TCornerPoint {\n const rotateMatrix = createRotateMatrix({ angle: this.angle }),\n { x, y } = this.getRelativeCenterPoint(),\n tMatrix = createTranslateMatrix(x, y),\n finalMatrix = multiplyTransformMatrices(tMatrix, rotateMatrix),\n dim = this._getTransformedDimensions(),\n w = dim.x / 2,\n h = dim.y / 2;\n return {\n // corners\n tl: transformPoint({ x: -w, y: -h }, finalMatrix),\n tr: transformPoint({ x: w, y: -h }, finalMatrix),\n bl: transformPoint({ x: -w, y: h }, finalMatrix),\n br: transformPoint({ x: w, y: h }, finalMatrix),\n };\n }\n\n /**\n * Sets corner and controls position coordinates based on current angle, width and height, left and top.\n * aCoords are used to quickly find an object on the canvas.\n * See {@link https://github.com/fabricjs/fabric.js/wiki/When-to-call-setCoords} and {@link http://fabricjs.com/fabric-gotchas}\n */\n setCoords(): void {\n this.aCoords = this.calcACoords();\n }\n\n transformMatrixKey(skipGroup = false): number[] {\n let prefix: number[] = [];\n if (!skipGroup && this.group) {\n prefix = this.group.transformMatrixKey(skipGroup);\n }\n prefix.push(\n this.top,\n this.left,\n this.width,\n this.height,\n this.scaleX,\n this.scaleY,\n this.angle,\n this.strokeWidth,\n this.skewX,\n this.skewY,\n +this.flipX,\n +this.flipY,\n resolveOrigin(this.originX),\n resolveOrigin(this.originY),\n );\n\n return prefix;\n }\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties.\n * @param {Boolean} [skipGroup] return transform matrix for object not counting parent transformations\n * There are some situation in which this is useful to avoid the fake rotation.\n * @return {TMat2D} transform matrix for the object\n */\n calcTransformMatrix(skipGroup = false): TMat2D {\n let matrix = this.calcOwnMatrix();\n if (skipGroup || !this.group) {\n return matrix;\n }\n const key = this.transformMatrixKey(skipGroup),\n cache = this.matrixCache;\n if (cache && cache.key.every((x, i) => x === key[i])) {\n return cache.value;\n }\n if (this.group) {\n matrix = multiplyTransformMatrices(\n this.group.calcTransformMatrix(false),\n matrix,\n );\n }\n this.matrixCache = {\n key,\n value: matrix,\n };\n return matrix;\n }\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties, this matrix does not include the group transformation\n * @return {TMat2D} transform matrix for the object\n */\n calcOwnMatrix(): TMat2D {\n const key = this.transformMatrixKey(true),\n cache = this.ownMatrixCache;\n if (cache && cache.key === key) {\n return cache.value;\n }\n const center = this.getRelativeCenterPoint(),\n options = {\n angle: this.angle,\n translateX: center.x,\n translateY: center.y,\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n flipX: this.flipX,\n flipY: this.flipY,\n },\n value = composeMatrix(options);\n this.ownMatrixCache = {\n key,\n value,\n };\n return value;\n }\n\n /**\n * Calculate object dimensions from its properties\n * @private\n * @returns {Point} dimensions\n */\n _getNonTransformedDimensions(): Point {\n return new Point(this.width, this.height).scalarAdd(this.strokeWidth);\n }\n\n /**\n * Calculate object dimensions for controls box, including padding and canvas zoom.\n * and active selection\n * @private\n * @param {object} [options] transform options\n * @returns {Point} dimensions\n */\n _calculateCurrentDimensions(options?: any): Point {\n return this._getTransformedDimensions(options)\n .transform(this.getViewportTransform(), true)\n .scalarAdd(2 * this.padding);\n }\n\n // #region Origin\n\n declare top: number;\n declare left: number;\n declare width: number;\n declare height: number;\n declare flipX: boolean;\n declare flipY: boolean;\n declare scaleX: number;\n declare scaleY: number;\n declare skewX: number;\n declare skewY: number;\n /**\n * @deprecated please use 'center' as value in new projects\n * */\n declare originX: TOriginX;\n /**\n * @deprecated please use 'center' as value in new projects\n * */\n declare originY: TOriginY;\n declare angle: TDegree;\n declare strokeWidth: number;\n declare strokeUniform: boolean;\n\n /**\n * Object containing this object.\n * can influence its size and position\n */\n declare group?: Group;\n\n /**\n * Calculate object bounding box dimensions from its properties scale, skew.\n * This bounding box is aligned with object angle and not with canvas axis or screen.\n * @param {Object} [options]\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewY]\n * @private\n * @returns {Point} dimensions\n */\n _getTransformedDimensions(options: any = {}): Point {\n const dimOptions = {\n // if scaleX or scaleY are negative numbers,\n // this will return dimensions that are negative.\n // and this will break assumptions around the codebase\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n width: this.width,\n height: this.height,\n strokeWidth: this.strokeWidth,\n ...options,\n };\n // stroke is applied before/after transformations are applied according to `strokeUniform`\n const strokeWidth = dimOptions.strokeWidth;\n let preScalingStrokeValue = strokeWidth,\n postScalingStrokeValue = 0;\n\n if (this.strokeUniform) {\n preScalingStrokeValue = 0;\n postScalingStrokeValue = strokeWidth;\n }\n const dimX = dimOptions.width + preScalingStrokeValue,\n dimY = dimOptions.height + preScalingStrokeValue,\n noSkew = dimOptions.skewX === 0 && dimOptions.skewY === 0;\n let finalDimensions;\n if (noSkew) {\n finalDimensions = new Point(\n dimX * dimOptions.scaleX,\n dimY * dimOptions.scaleY,\n );\n } else {\n finalDimensions = sizeAfterTransform(\n dimX,\n dimY,\n calcDimensionsMatrix(dimOptions),\n );\n }\n\n return finalDimensions.scalarAdd(postScalingStrokeValue);\n }\n\n /**\n * Translates the coordinates from a set of origin to another (based on the object's dimensions)\n * @param {Point} point The point which corresponds to the originX and originY params\n * @param {TOriginX} fromOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} fromOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @param {TOriginX} toOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} toOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n translateToGivenOrigin(\n point: Point,\n fromOriginX: TOriginX,\n fromOriginY: TOriginY,\n toOriginX: TOriginX,\n toOriginY: TOriginY,\n ): Point {\n let x = point.x,\n y = point.y;\n const offsetX = resolveOrigin(toOriginX) - resolveOrigin(fromOriginX),\n offsetY = resolveOrigin(toOriginY) - resolveOrigin(fromOriginY);\n\n if (offsetX || offsetY) {\n const dim = this._getTransformedDimensions();\n x += offsetX * dim.x;\n y += offsetY * dim.y;\n }\n\n return new Point(x, y);\n }\n\n /**\n * Translates the coordinates from origin to center coordinates (based on the object's dimensions)\n * @param {Point} point The point which corresponds to the originX and originY params\n * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n translateToCenterPoint(\n point: Point,\n originX: TOriginX,\n originY: TOriginY,\n ): Point {\n if (originX === CENTER && originY === CENTER) {\n return point;\n }\n const p = this.translateToGivenOrigin(\n point,\n originX,\n originY,\n CENTER,\n CENTER,\n );\n if (this.angle) {\n return p.rotate(degreesToRadians(this.angle), point);\n }\n return p;\n }\n\n /**\n * Translates the coordinates from center to origin coordinates (based on the object's dimensions)\n * @param {Point} center The point which corresponds to center of the object\n * @param {OriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {OriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n translateToOriginPoint(\n center: Point,\n originX: TOriginX,\n originY: TOriginY,\n ): Point {\n const p = this.translateToGivenOrigin(\n center,\n CENTER,\n CENTER,\n originX,\n originY,\n );\n if (this.angle) {\n return p.rotate(degreesToRadians(this.angle), center);\n }\n return p;\n }\n\n /**\n * Returns the center coordinates of the object relative to canvas\n * @return {Point}\n */\n getCenterPoint(): Point {\n const relCenter = this.getRelativeCenterPoint();\n return this.group\n ? transformPoint(relCenter, this.group.calcTransformMatrix())\n : relCenter;\n }\n\n /**\n * Returns the center coordinates of the object relative to it's parent\n * @return {Point}\n */\n getRelativeCenterPoint(): Point {\n return this.translateToCenterPoint(\n new Point(this.left, this.top),\n this.originX,\n this.originY,\n );\n }\n\n /**\n * Returns the position of the object as if it has a different origin.\n * Take an object that has left, top set to 100, 100 with origin 'left', 'top'.\n * Return the values of left top ( wrapped in a point ) that you would need to keep\n * the same position if origin where different.\n * Alternatively you can use this to also find which point in the parent plane is a specific origin\n * ( where is the bottom right corner of my object? )\n * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n getPointByOrigin(originX: TOriginX, originY: TOriginY): Point {\n return this.translateToOriginPoint(\n this.getRelativeCenterPoint(),\n originX,\n originY,\n );\n }\n\n /**\n * Sets the position of the object taking into consideration the object's origin\n * @param {Point} pos The new position of the object\n * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {void}\n */\n setPositionByOrigin(pos: Point, originX: TOriginX, originY: TOriginY) {\n const center = this.translateToCenterPoint(pos, originX, originY),\n position = this.translateToOriginPoint(\n center,\n this.originX,\n this.originY,\n );\n this.set({ left: position.x, top: position.y });\n }\n\n /**\n * @private\n */\n _getLeftTopCoords() {\n return this.translateToOriginPoint(\n this.getRelativeCenterPoint(),\n LEFT,\n TOP,\n );\n }\n}\n","import { cache } from '../../cache';\nimport { config } from '../../config';\nimport {\n ALIASING_LIMIT,\n CENTER,\n iMatrix,\n LEFT,\n SCALE_X,\n SCALE_Y,\n STROKE,\n FILL,\n TOP,\n VERSION,\n} from '../../constants';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport { Shadow } from '../../Shadow';\nimport type {\n TDegree,\n TFiller,\n TSize,\n TCacheCanvasDimensions,\n Abortable,\n TOptions,\n ImageFormat,\n} from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { runningAnimations } from '../../util/animation/AnimationRegistry';\nimport { capValue } from '../../util/misc/capValue';\nimport {\n createCanvasElement,\n createCanvasElementFor,\n toDataURL,\n} from '../../util/misc/dom';\nimport { invertTransform, qrDecompose } from '../../util/misc/matrix';\nimport { enlivenObjectEnlivables } from '../../util/misc/objectEnlive';\nimport {\n resetObjectTransform,\n saveObjectTransform,\n} from '../../util/misc/objectTransforms';\nimport { sendObjectToPlane } from '../../util/misc/planeChange';\nimport { pick, pickBy } from '../../util/misc/pick';\nimport { toFixed } from '../../util/misc/toFixed';\nimport type { Group } from '../Group';\nimport { StaticCanvas } from '../../canvas/StaticCanvas';\nimport {\n isFiller,\n isSerializableFiller,\n isTextObject,\n} from '../../util/typeAssertions';\nimport type { FabricImage } from '../Image';\nimport {\n cacheProperties,\n fabricObjectDefaultValues,\n stateProperties,\n} from './defaultValues';\nimport type { Gradient } from '../../gradient/Gradient';\nimport type { Pattern } from '../../Pattern';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { SerializedObjectProps } from './types/SerializedObjectProps';\nimport type { ObjectProps } from './types/ObjectProps';\nimport { getDevicePixelRatio, getEnv } from '../../env';\nimport { log } from '../../util/internals/console';\nimport type { TColorArg } from '../../color/typedefs';\nimport type { TAnimation } from '../../util/animation/animate';\nimport { animate, animateColor } from '../../util/animation/animate';\nimport type {\n AnimationOptions,\n ArrayAnimationOptions,\n ColorAnimationOptions,\n ValueAnimationOptions,\n} from '../../util/animation/types';\nimport { ObjectGeometry } from './ObjectGeometry';\n\ntype TAncestor = FabricObject;\ntype TCollection = Group;\n\nexport type Ancestors =\n | [FabricObject | Group]\n | [FabricObject | Group, ...Group[]]\n | Group[];\n\nexport type AncestryComparison = {\n /**\n * common ancestors of `this` and`other`(may include`this` | `other`)\n */\n common: Ancestors;\n /**\n * ancestors that are of `this` only\n */\n fork: Ancestors;\n /**\n * ancestors that are of `other` only\n */\n otherFork: Ancestors;\n};\n\nexport type TCachedFabricObject = T &\n Required<\n Pick<\n T,\n | 'zoomX'\n | 'zoomY'\n | '_cacheCanvas'\n | '_cacheContext'\n | 'cacheTranslationX'\n | 'cacheTranslationY'\n >\n > & {\n _cacheContext: CanvasRenderingContext2D;\n };\n\nexport type ObjectToCanvasElementOptions = {\n format?: ImageFormat;\n /** Multiplier to scale by */\n multiplier?: number;\n /** Cropping left offset. Introduced in v1.2.14 */\n left?: number;\n /** Cropping top offset. Introduced in v1.2.14 */\n top?: number;\n /** Cropping width. Introduced in v1.2.14 */\n width?: number;\n /** Cropping height. Introduced in v1.2.14 */\n height?: number;\n /** Enable retina scaling for clone image. Introduce in 1.6.4 */\n enableRetinaScaling?: boolean;\n /** Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4 */\n withoutTransform?: boolean;\n /** Remove current object shadow. Introduced in 2.4.2 */\n withoutShadow?: boolean;\n /** Account for canvas viewport transform */\n viewportTransform?: boolean;\n /** Function to create the output canvas to export onto */\n canvasProvider?: (el?: HTMLCanvasElement) => T;\n};\n\ntype toDataURLOptions = ObjectToCanvasElementOptions & {\n quality?: number;\n};\n\nexport type DrawContext =\n | {\n parentClipPaths: FabricObject[];\n width: number;\n height: number;\n cacheTranslationX: number;\n cacheTranslationY: number;\n zoomX: number;\n zoomY: number;\n }\n | Record;\n\n/**\n * Root object class from which all 2d shape classes inherit from\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#objects}\n *\n * @fires added\n * @fires removed\n *\n * @fires selected\n * @fires deselected\n *\n * @fires rotating\n * @fires scaling\n * @fires moving\n * @fires skewing\n * @fires modified\n *\n * @fires mousedown\n * @fires mouseup\n * @fires mouseover\n * @fires mouseout\n * @fires mousewheel\n * @fires mousedblclick\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop\n */\nexport class FabricObject<\n Props extends TOptions = Partial,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends ObjectGeometry\n implements ObjectProps\n{\n declare minScaleLimit: number;\n\n declare opacity: number;\n\n declare paintFirst: 'fill' | 'stroke';\n declare fill: string | TFiller | null;\n declare fillRule: CanvasFillRule;\n declare stroke: string | TFiller | null;\n declare strokeDashArray: number[] | null;\n declare strokeDashOffset: number;\n declare strokeLineCap: CanvasLineCap;\n declare strokeLineJoin: CanvasLineJoin;\n declare strokeMiterLimit: number;\n\n declare globalCompositeOperation: GlobalCompositeOperation;\n declare backgroundColor: string;\n\n declare shadow: Shadow | null;\n\n declare visible: boolean;\n\n declare includeDefaultValues: boolean;\n declare excludeFromExport: boolean;\n\n declare objectCaching: boolean;\n\n declare clipPath?: FabricObject;\n declare inverted: boolean;\n declare absolutePositioned: boolean;\n declare centeredRotation: boolean;\n declare centeredScaling: boolean;\n\n /**\n * This list of properties is used to check if the state of an object is changed.\n * This state change now is only used for children of groups to understand if a group\n * needs its cache regenerated during a .set call\n * @type Array\n */\n static stateProperties: string[] = stateProperties;\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * Those properties are checked by\n * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n * and refreshed at the next render\n * @type Array\n */\n static cacheProperties: string[] = cacheProperties;\n\n /**\n * When set to `true`, object's cache will be rerendered next render call.\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n declare dirty: boolean;\n\n /**\n * Quick access for the _cacheCanvas rendering context\n * This is part of the objectCaching feature\n * since 1.7.0\n * @type boolean\n * @default undefined\n * @private\n */\n _cacheContext: CanvasRenderingContext2D | null = null;\n\n /**\n * A reference to the HTMLCanvasElement that is used to contain the cache of the object\n * this canvas element is resized and cleared as needed\n * Is marked private, you can read it, don't use it since it is handled by fabric\n * since 1.7.0\n * @type HTMLCanvasElement\n * @default undefined\n * @private\n */\n declare _cacheCanvas?: HTMLCanvasElement;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, X axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare zoomX?: number;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, Y axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare zoomY?: number;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, Y axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare cacheTranslationX?: number;\n\n /**\n * translation of the cacheCanvas away from the center, for subpixel accuracy and crispness\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare cacheTranslationY?: number;\n\n /**\n * A reference to the parent of the object, usually a Group\n * @type number\n * @default undefined\n * @private\n */\n declare group?: Group;\n\n /**\n * Indicate if the object is sitting on a cache dedicated to it\n * or is part of a larger cache for many object ( a group for example)\n * @type number\n * @default undefined\n * @private\n */\n declare ownCaching?: boolean;\n\n /**\n * Private. indicates if the object inside a group is on a transformed context or not\n * or is part of a larger cache for many object ( a group for example)\n * @type boolean\n * @default undefined\n * @private\n */\n declare _transformDone?: boolean;\n\n static ownDefaults = fabricObjectDefaultValues;\n\n static getDefaults(): Record {\n return FabricObject.ownDefaults;\n }\n\n /**\n * The class type.\n * This is used for serialization and deserialization purposes and internally it can be used\n * to identify classes.\n * When we transform a class in a plain JS object we need a way to recognize which class it was,\n * and the type is the way we do that. It has no other purposes and you should not give one.\n * Hard to reach on instances and please do not use to drive instance's logic (this.constructor.type).\n * To idenfity a class use instanceof class ( instanceof Rect ).\n * We do not do that in fabricJS code because we want to try to have code splitting possible.\n */\n static type = 'FabricObject';\n\n /**\n * Legacy identifier of the class. Prefer using utils like isType or instanceOf\n * Will be removed in fabric 7 or 8.\n * The setter exists to avoid type errors in old code and possibly current deserialization code.\n * DO NOT build new code around this type value\n * @TODO add sustainable warning message\n * @type string\n * @deprecated\n */\n get type() {\n const name = (this.constructor as typeof FabricObject).type;\n if (name === 'FabricObject') {\n return 'object';\n }\n return name.toLowerCase();\n }\n\n set type(value) {\n log('warn', 'Setting type has no effect', value);\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, FabricObject.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * Create a the canvas used to keep the cached copy of the object\n * @private\n */\n _createCacheCanvas() {\n this._cacheCanvas = createCanvasElement();\n this._cacheContext = this._cacheCanvas.getContext('2d');\n this._updateCacheCanvas();\n // if canvas gets created, is empty, so dirty.\n this.dirty = true;\n }\n\n /**\n * Limit the cache dimensions so that X * Y do not cross config.perfLimitSizeTotal\n * and each side do not cross fabric.cacheSideLimit\n * those numbers are configurable so that you can get as much detail as you want\n * making bargain with performances.\n * @param {Object} dims\n * @param {Object} dims.width width of canvas\n * @param {Object} dims.height height of canvas\n * @param {Object} dims.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @param {Object} dims.zoomY zoomY zoom value to unscale the canvas before drawing cache\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _limitCacheSize(\n dims: TSize & { zoomX: number; zoomY: number; capped: boolean } & any,\n ) {\n const width = dims.width,\n height = dims.height,\n max = config.maxCacheSideLimit,\n min = config.minCacheSideLimit;\n if (\n width <= max &&\n height <= max &&\n width * height <= config.perfLimitSizeTotal\n ) {\n if (width < min) {\n dims.width = min;\n }\n if (height < min) {\n dims.height = min;\n }\n return dims;\n }\n const ar = width / height,\n [limX, limY] = cache.limitDimsByArea(ar),\n x = capValue(min, limX, max),\n y = capValue(min, limY, max);\n if (width > x) {\n dims.zoomX /= width / x;\n dims.width = x;\n dims.capped = true;\n }\n if (height > y) {\n dims.zoomY /= height / y;\n dims.height = y;\n dims.capped = true;\n }\n return dims;\n }\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @return {Object}.x width of object to be cached\n * @return {Object}.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions(): TCacheCanvasDimensions {\n const objectScale = this.getTotalObjectScaling(),\n // calculate dimensions without skewing\n dim = this._getTransformedDimensions({ skewX: 0, skewY: 0 }),\n neededX = (dim.x * objectScale.x) / this.scaleX,\n neededY = (dim.y * objectScale.y) / this.scaleY;\n return {\n // for sure this ALIASING_LIMIT is slightly creating problem\n // in situation in which the cache canvas gets an upper limit\n // also objectScale contains already scaleX and scaleY\n width: neededX + ALIASING_LIMIT,\n height: neededY + ALIASING_LIMIT,\n zoomX: objectScale.x,\n zoomY: objectScale.y,\n x: neededX,\n y: neededY,\n };\n }\n\n /**\n * Update width and height of the canvas for cache\n * returns true or false if canvas needed resize.\n * @private\n * @return {Boolean} true if the canvas has been resized\n */\n _updateCacheCanvas() {\n const canvas = this._cacheCanvas!,\n context = this._cacheContext,\n dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n minCacheSize = config.minCacheSideLimit,\n width = dims.width,\n height = dims.height,\n zoomX = dims.zoomX,\n zoomY = dims.zoomY,\n dimensionsChanged = width !== canvas.width || height !== canvas.height,\n zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY;\n\n if (!canvas || !context) {\n return false;\n }\n\n let drawingWidth,\n drawingHeight,\n shouldRedraw = dimensionsChanged || zoomChanged,\n additionalWidth = 0,\n additionalHeight = 0,\n shouldResizeCanvas = false;\n\n if (dimensionsChanged) {\n const canvasWidth = (this._cacheCanvas as HTMLCanvasElement).width,\n canvasHeight = (this._cacheCanvas as HTMLCanvasElement).height,\n sizeGrowing = width > canvasWidth || height > canvasHeight,\n sizeShrinking =\n (width < canvasWidth * 0.9 || height < canvasHeight * 0.9) &&\n canvasWidth > minCacheSize &&\n canvasHeight > minCacheSize;\n shouldResizeCanvas = sizeGrowing || sizeShrinking;\n if (\n sizeGrowing &&\n !dims.capped &&\n (width > minCacheSize || height > minCacheSize)\n ) {\n additionalWidth = width * 0.1;\n additionalHeight = height * 0.1;\n }\n }\n if (isTextObject(this) && this.path) {\n shouldRedraw = true;\n shouldResizeCanvas = true;\n // IMHO in those lines we are using zoomX and zoomY not the this version.\n additionalWidth += this.getHeightOfLine(0) * this.zoomX!;\n additionalHeight += this.getHeightOfLine(0) * this.zoomY!;\n }\n if (shouldRedraw) {\n if (shouldResizeCanvas) {\n canvas.width = Math.ceil(width + additionalWidth);\n canvas.height = Math.ceil(height + additionalHeight);\n } else {\n context.setTransform(1, 0, 0, 1, 0, 0);\n context.clearRect(0, 0, canvas.width, canvas.height);\n }\n drawingWidth = dims.x / 2;\n drawingHeight = dims.y / 2;\n this.cacheTranslationX =\n Math.round(canvas.width / 2 - drawingWidth) + drawingWidth;\n this.cacheTranslationY =\n Math.round(canvas.height / 2 - drawingHeight) + drawingHeight;\n context.translate(this.cacheTranslationX, this.cacheTranslationY);\n context.scale(zoomX, zoomY);\n this.zoomX = zoomX;\n this.zoomY = zoomY;\n return true;\n }\n return false;\n }\n\n /**\n * Sets object's properties from options, for class constructor only.\n * Needs to be overridden for different defaults.\n * @protected\n * @param {Object} [options] Options object\n */\n protected setOptions(options: Record = {}) {\n this._setOptions(options);\n }\n\n /**\n * Transforms context when rendering an object\n * @param {CanvasRenderingContext2D} ctx Context\n */\n transform(ctx: CanvasRenderingContext2D) {\n const needFullTransform =\n (this.group && !this.group._transformDone) ||\n (this.group && this.canvas && ctx === (this.canvas as Canvas).contextTop);\n const m = this.calcTransformMatrix(!needFullTransform);\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n\n /**\n * Return the object scale factor counting also the group scaling\n * @return {Point}\n */\n getObjectScaling() {\n // if the object is a top level one, on the canvas, we go for simple aritmetic\n // otherwise the complex method with angles will return approximations and decimals\n // and will likely kill the cache when not needed\n // https://github.com/fabricjs/fabric.js/issues/7157\n if (!this.group) {\n return new Point(Math.abs(this.scaleX), Math.abs(this.scaleY));\n }\n // if we are inside a group total zoom calculation is complex, we defer to generic matrices\n const options = qrDecompose(this.calcTransformMatrix());\n return new Point(Math.abs(options.scaleX), Math.abs(options.scaleY));\n }\n\n /**\n * Return the object scale factor counting also the group scaling, zoom and retina\n * @return {Object} object with scaleX and scaleY properties\n */\n getTotalObjectScaling() {\n const scale = this.getObjectScaling();\n if (this.canvas) {\n const zoom = this.canvas.getZoom();\n const retina = this.getCanvasRetinaScaling();\n return scale.scalarMultiply(zoom * retina);\n }\n return scale;\n }\n\n /**\n * Return the object opacity counting also the group property\n * @return {Number}\n */\n getObjectOpacity() {\n let opacity = this.opacity;\n if (this.group) {\n opacity *= this.group.getObjectOpacity();\n }\n return opacity;\n }\n\n /**\n * Makes sure the scale is valid and modifies it if necessary\n * @todo: this is a control action issue, not a geometry one\n * @private\n * @param {Number} value, unconstrained\n * @return {Number} constrained value;\n */\n _constrainScale(value: number): number {\n if (Math.abs(value) < this.minScaleLimit) {\n if (value < 0) {\n return -this.minScaleLimit;\n } else {\n return this.minScaleLimit;\n }\n } else if (value === 0) {\n return 0.0001;\n }\n return value;\n }\n\n /**\n * Handles setting values on the instance and handling internal side effects\n * @protected\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n if (key === SCALE_X || key === SCALE_Y) {\n value = this._constrainScale(value);\n }\n if (key === SCALE_X && value < 0) {\n this.flipX = !this.flipX;\n value *= -1;\n } else if (key === 'scaleY' && value < 0) {\n this.flipY = !this.flipY;\n value *= -1;\n // i don't like this automatic initialization here\n } else if (key === 'shadow' && value && !(value instanceof Shadow)) {\n value = new Shadow(value);\n }\n\n const isChanged = this[key as keyof this] !== value;\n this[key as keyof this] = value;\n\n // invalidate caches\n if (\n isChanged &&\n (this.constructor as typeof FabricObject).cacheProperties.includes(key)\n ) {\n this.dirty = true;\n }\n // a dirty child makes the parent dirty.\n // but a non dirty child does not make the parent not dirty.\n // the parent could be dirty for some other reason.\n this.parent &&\n (this.dirty ||\n (isChanged &&\n (this.constructor as typeof FabricObject).stateProperties.includes(\n key,\n ))) &&\n this.parent._set('dirty', true);\n\n return this;\n }\n\n /*\n * @private\n * return if the object would be visible in rendering\n * @memberOf FabricObject.prototype\n * @return {Boolean}\n */\n isNotVisible() {\n return (\n this.opacity === 0 ||\n (!this.width && !this.height && this.strokeWidth === 0) ||\n !this.visible\n );\n }\n\n /**\n * Renders an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n // do not render if width/height are zeros or object is not visible\n if (this.isNotVisible()) {\n return;\n }\n if (\n this.canvas &&\n this.canvas.skipOffscreen &&\n !this.group &&\n !this.isOnScreen()\n ) {\n return;\n }\n ctx.save();\n this._setupCompositeOperation(ctx);\n this.drawSelectionBackground(ctx);\n this.transform(ctx);\n this._setOpacity(ctx);\n this._setShadow(ctx);\n if (this.shouldCache()) {\n (this as TCachedFabricObject).renderCache();\n (this as TCachedFabricObject).drawCacheOnCanvas(ctx);\n } else {\n this._removeCacheCanvas();\n this.drawObject(ctx, false, {});\n this.dirty = false;\n }\n ctx.restore();\n }\n\n drawSelectionBackground(_ctx: CanvasRenderingContext2D) {\n /* no op */\n }\n\n renderCache(this: TCachedFabricObject, options?: any) {\n options = options || {};\n if (!this._cacheCanvas || !this._cacheContext) {\n this._createCacheCanvas();\n }\n if (this.isCacheDirty() && this._cacheContext) {\n const { zoomX, zoomY, cacheTranslationX, cacheTranslationY } = this;\n const { width, height } = this._cacheCanvas;\n this.drawObject(this._cacheContext, options.forClipping, {\n zoomX,\n zoomY,\n cacheTranslationX,\n cacheTranslationY,\n width,\n height,\n parentClipPaths: [],\n });\n this.dirty = false;\n }\n }\n\n /**\n * Remove cacheCanvas and its dimensions from the objects\n */\n _removeCacheCanvas() {\n this._cacheCanvas = undefined;\n this._cacheContext = null;\n }\n\n /**\n * return true if the object will draw a stroke\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when stroke happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the stroke is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasStroke() {\n return (\n this.stroke && this.stroke !== 'transparent' && this.strokeWidth !== 0\n );\n }\n\n /**\n * return true if the object will draw a fill\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when fill happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the fill is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasFill() {\n return this.fill && this.fill !== 'transparent';\n }\n\n /**\n * When set to `true`, force the object to have its own cache, even if it is inside a group\n * it may be needed when your object behave in a particular way on the cache and always needs\n * its own isolated canvas to render correctly.\n * Created to be overridden\n * since 1.7.12\n * @returns Boolean\n */\n needsItsOwnCache() {\n if (\n this.paintFirst === STROKE &&\n this.hasFill() &&\n this.hasStroke() &&\n !!this.shadow\n ) {\n return true;\n }\n if (this.clipPath) {\n return true;\n }\n return false;\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * Read as: cache if is needed, or if the feature is enabled but we are not already caching.\n * @return {Boolean}\n */\n shouldCache() {\n this.ownCaching =\n this.needsItsOwnCache() ||\n (this.objectCaching && (!this.parent || !this.parent.isOnACache()));\n return this.ownCaching;\n }\n\n /**\n * Check if this object will cast a shadow with an offset.\n * used by Group.shouldCache to know if child has a shadow recursively\n * @return {Boolean}\n * @deprecated\n */\n willDrawShadow() {\n return (\n !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0)\n );\n }\n\n /**\n * Execute the drawing operation for an object clipPath\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {FabricObject} clipPath\n */\n drawClipPathOnCache(\n ctx: CanvasRenderingContext2D,\n clipPath: FabricObject,\n canvasWithClipPath: HTMLCanvasElement,\n ) {\n ctx.save();\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4\n if (clipPath.inverted) {\n ctx.globalCompositeOperation = 'destination-out';\n } else {\n ctx.globalCompositeOperation = 'destination-in';\n }\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n //ctx.scale(1 / 2, 1 / 2);\n ctx.drawImage(canvasWithClipPath, 0, 0);\n ctx.restore();\n }\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {boolean} forClipping apply clipping styles\n * @param {DrawContext} context additional context for rendering\n */\n drawObject(\n ctx: CanvasRenderingContext2D,\n forClipping: boolean | undefined,\n context: DrawContext,\n ) {\n const originalFill = this.fill,\n originalStroke = this.stroke;\n if (forClipping) {\n this.fill = 'black';\n this.stroke = '';\n this._setClippingProperties(ctx);\n } else {\n this._renderBackground(ctx);\n }\n this._render(ctx);\n this._drawClipPath(ctx, this.clipPath, context);\n this.fill = originalFill;\n this.stroke = originalStroke;\n }\n\n private createClipPathLayer(\n this: TCachedFabricObject,\n clipPath: FabricObject,\n context: DrawContext,\n ) {\n const canvas = createCanvasElementFor(context as TSize);\n const ctx = canvas.getContext('2d')!;\n ctx.translate(context.cacheTranslationX, context.cacheTranslationY);\n ctx.scale(context.zoomX, context.zoomY);\n clipPath._cacheCanvas = canvas;\n context.parentClipPaths.forEach((prevClipPath) => {\n prevClipPath.transform(ctx);\n });\n context.parentClipPaths.push(clipPath);\n if (clipPath.absolutePositioned) {\n const m = invertTransform(this.calcTransformMatrix());\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n clipPath.transform(ctx);\n clipPath.drawObject(ctx, true, context);\n return canvas;\n }\n\n /**\n * Prepare clipPath state and cache and draw it on instance's cache\n * @param {CanvasRenderingContext2D} ctx\n * @param {FabricObject} clipPath\n */\n _drawClipPath(\n ctx: CanvasRenderingContext2D,\n clipPath: FabricObject | undefined,\n context: DrawContext,\n ) {\n if (!clipPath) {\n return;\n }\n // needed to setup _transformDone\n // TODO find a better solution?\n clipPath._transformDone = true;\n const canvas = (this as TCachedFabricObject).createClipPathLayer(\n clipPath,\n context,\n );\n this.drawClipPathOnCache(ctx, clipPath, canvas);\n }\n\n /**\n * Paint the cached copy of the object on the target context.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas(this: TCachedFabricObject, ctx: CanvasRenderingContext2D) {\n ctx.scale(1 / this.zoomX, 1 / this.zoomY);\n ctx.drawImage(\n this._cacheCanvas,\n -this.cacheTranslationX,\n -this.cacheTranslationY,\n );\n }\n\n /**\n * Check if cache is dirty\n * @param {Boolean} skipCanvas skip canvas checks because this object is painted\n * on parent canvas.\n */\n isCacheDirty(skipCanvas = false) {\n if (this.isNotVisible()) {\n return false;\n }\n const canvas = this._cacheCanvas;\n const ctx = this._cacheContext;\n if (canvas && ctx && !skipCanvas && this._updateCacheCanvas()) {\n // in this case the context is already cleared.\n return true;\n } else {\n if (this.dirty || (this.clipPath && this.clipPath.absolutePositioned)) {\n if (canvas && ctx && !skipCanvas) {\n ctx.save();\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n }\n return true;\n }\n }\n return false;\n }\n\n /**\n * Draws a background for the object big as its untransformed dimensions\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground(ctx: CanvasRenderingContext2D) {\n if (!this.backgroundColor) {\n return;\n }\n const dim = this._getNonTransformedDimensions();\n ctx.fillStyle = this.backgroundColor;\n\n ctx.fillRect(-dim.x / 2, -dim.y / 2, dim.x, dim.y);\n // if there is background color no other shadows\n // should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setOpacity(ctx: CanvasRenderingContext2D) {\n if (this.group && !this.group._transformDone) {\n ctx.globalAlpha = this.getObjectOpacity();\n } else {\n ctx.globalAlpha *= this.opacity;\n }\n }\n\n _setStrokeStyles(\n ctx: CanvasRenderingContext2D,\n decl: Pick<\n this,\n | 'stroke'\n | 'strokeWidth'\n | 'strokeLineCap'\n | 'strokeDashOffset'\n | 'strokeLineJoin'\n | 'strokeMiterLimit'\n >,\n ) {\n const stroke = decl.stroke;\n if (stroke) {\n ctx.lineWidth = decl.strokeWidth;\n ctx.lineCap = decl.strokeLineCap;\n ctx.lineDashOffset = decl.strokeDashOffset;\n ctx.lineJoin = decl.strokeLineJoin;\n ctx.miterLimit = decl.strokeMiterLimit;\n if (isFiller(stroke)) {\n if (\n (stroke as Gradient<'linear'>).gradientUnits === 'percentage' ||\n (stroke as Gradient<'linear'>).gradientTransform ||\n (stroke as Pattern).patternTransform\n ) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n this._applyPatternForTransformedGradient(ctx, stroke);\n } else {\n // is a simple gradient or pattern\n ctx.strokeStyle = stroke.toLive(ctx)!;\n this._applyPatternGradientTransform(ctx, stroke);\n }\n } else {\n // is a color\n ctx.strokeStyle = decl.stroke as string;\n }\n }\n }\n\n _setFillStyles(ctx: CanvasRenderingContext2D, { fill }: Pick) {\n if (fill) {\n if (isFiller(fill)) {\n ctx.fillStyle = fill.toLive(ctx)!;\n this._applyPatternGradientTransform(ctx, fill);\n } else {\n ctx.fillStyle = fill;\n }\n }\n }\n\n _setClippingProperties(ctx: CanvasRenderingContext2D) {\n ctx.globalAlpha = 1;\n ctx.strokeStyle = 'transparent';\n ctx.fillStyle = '#000000';\n }\n\n /**\n * @private\n * Sets line dash\n * @param {CanvasRenderingContext2D} ctx Context to set the dash line on\n * @param {Array} dashArray array representing dashes\n */\n _setLineDash(ctx: CanvasRenderingContext2D, dashArray?: number[] | null) {\n if (!dashArray || dashArray.length === 0) {\n return;\n }\n // Spec requires the concatenation of two copies of the dash array when the number of elements is odd\n if (1 & dashArray.length) {\n dashArray.push(...dashArray);\n }\n ctx.setLineDash(dashArray);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setShadow(ctx: CanvasRenderingContext2D) {\n if (!this.shadow) {\n return;\n }\n\n const shadow = this.shadow,\n canvas = this.canvas,\n retinaScaling = this.getCanvasRetinaScaling(),\n [sx, , , sy] = canvas?.viewportTransform || iMatrix,\n multX = sx * retinaScaling,\n multY = sy * retinaScaling,\n scaling = shadow.nonScaling ? new Point(1, 1) : this.getObjectScaling();\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur =\n (shadow.blur *\n config.browserShadowBlurConstant *\n (multX + multY) *\n (scaling.x + scaling.y)) /\n 4;\n ctx.shadowOffsetX = shadow.offsetX * multX * scaling.x;\n ctx.shadowOffsetY = shadow.offsetY * multY * scaling.y;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _removeShadow(ctx: CanvasRenderingContext2D) {\n if (!this.shadow) {\n return;\n }\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {TFiller} filler {@link Pattern} or {@link Gradient}\n */\n _applyPatternGradientTransform(\n ctx: CanvasRenderingContext2D,\n filler: TFiller,\n ) {\n if (!isFiller(filler)) {\n return { offsetX: 0, offsetY: 0 };\n }\n const t =\n (filler as Gradient<'linear'>).gradientTransform ||\n (filler as Pattern).patternTransform;\n const offsetX = -this.width / 2 + filler.offsetX || 0,\n offsetY = -this.height / 2 + filler.offsetY || 0;\n\n if ((filler as Gradient<'linear'>).gradientUnits === 'percentage') {\n ctx.transform(this.width, 0, 0, this.height, offsetX, offsetY);\n } else {\n ctx.transform(1, 0, 0, 1, offsetX, offsetY);\n }\n if (t) {\n ctx.transform(t[0], t[1], t[2], t[3], t[4], t[5]);\n }\n return { offsetX: offsetX, offsetY: offsetY };\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderPaintInOrder(ctx: CanvasRenderingContext2D) {\n if (this.paintFirst === STROKE) {\n this._renderStroke(ctx);\n this._renderFill(ctx);\n } else {\n this._renderFill(ctx);\n this._renderStroke(ctx);\n }\n }\n\n /**\n * @private\n * function that actually render something on the context.\n * empty here to allow Obects to work on tests to benchmark fabric functionalites\n * not related to rendering\n * @param {CanvasRenderingContext2D} _ctx Context to render on\n */\n _render(_ctx: CanvasRenderingContext2D) {\n // placeholder to be overridden\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderFill(ctx: CanvasRenderingContext2D) {\n if (!this.fill) {\n return;\n }\n\n ctx.save();\n this._setFillStyles(ctx, this);\n if (this.fillRule === 'evenodd') {\n ctx.fill('evenodd');\n } else {\n ctx.fill();\n }\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderStroke(ctx: CanvasRenderingContext2D) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n if (this.strokeUniform) {\n const scaling = this.getObjectScaling();\n ctx.scale(1 / scaling.x, 1 / scaling.y);\n }\n this._setLineDash(ctx, this.strokeDashArray);\n this._setStrokeStyles(ctx, this);\n ctx.stroke();\n ctx.restore();\n }\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Gradient} filler\n */\n _applyPatternForTransformedGradient(\n ctx: CanvasRenderingContext2D,\n filler: TFiller,\n ) {\n const dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n retinaScaling = this.getCanvasRetinaScaling(),\n width = dims.x / this.scaleX / retinaScaling,\n height = dims.y / this.scaleY / retinaScaling,\n pCanvas = createCanvasElementFor({\n // in case width and height are less than 1px, we have to round up.\n // since the pattern is no-repeat, this is fine\n width: Math.ceil(width),\n height: Math.ceil(height),\n });\n\n const pCtx = pCanvas.getContext('2d');\n if (!pCtx) {\n return;\n }\n pCtx.beginPath();\n pCtx.moveTo(0, 0);\n pCtx.lineTo(width, 0);\n pCtx.lineTo(width, height);\n pCtx.lineTo(0, height);\n pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.scale(\n dims.zoomX / this.scaleX / retinaScaling,\n dims.zoomY / this.scaleY / retinaScaling,\n );\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fillStyle = filler.toLive(ctx)!;\n pCtx.fill();\n ctx.translate(\n -this.width / 2 - this.strokeWidth / 2,\n -this.height / 2 - this.strokeWidth / 2,\n );\n ctx.scale(\n (retinaScaling * this.scaleX) / dims.zoomX,\n (retinaScaling * this.scaleY) / dims.zoomY,\n );\n ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat') ?? '';\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement() {\n return new Point(this.left + this.width / 2, this.top + this.height / 2);\n }\n\n /**\n * Clones an instance.\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @returns {Promise}\n */\n clone(propertiesToInclude?: string[]): Promise {\n const objectForm = this.toObject(propertiesToInclude);\n return (this.constructor as typeof FabricObject).fromObject(\n objectForm,\n ) as unknown as Promise;\n }\n\n /**\n * Creates an instance of Image out of an object\n * makes use of toCanvasElement.\n * Once this method was based on toDataUrl and loadImage, so it also had a quality\n * and format option. toCanvasElement is faster and produce no loss of quality.\n * If you need to get a real Jpeg or Png from an object, using toDataURL is the right way to do it.\n * toCanvasElement and then toBlob from the obtained canvas is also a good option.\n * @todo fix the export type, it could not be Image but the type that getClass return for 'image'.\n * @param {ObjectToCanvasElementOptions} [options] for clone as image, passed to toDataURL\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {FabricImage} Object cloned as image.\n */\n cloneAsImage(options: ObjectToCanvasElementOptions): FabricImage {\n const canvasEl = this.toCanvasElement(options);\n // TODO: how to import Image w/o an import cycle?\n const ImageClass = classRegistry.getClass('image');\n return new ImageClass(canvasEl);\n }\n\n /**\n * Converts an object into a HTMLCanvas element\n * @param {ObjectToCanvasElementOptions} options Options object\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @param {Boolean} [options.viewportTransform] Account for canvas viewport transform\n * @param {(el?: HTMLCanvasElement) => StaticCanvas} [options.canvasProvider] Create the output canvas\n * @return {HTMLCanvasElement} Returns DOM element with the FabricObject\n */\n toCanvasElement(options: ObjectToCanvasElementOptions = {}) {\n const origParams = saveObjectTransform(this),\n originalGroup = this.group,\n originalShadow = this.shadow,\n abs = Math.abs,\n retinaScaling = options.enableRetinaScaling ? getDevicePixelRatio() : 1,\n multiplier = (options.multiplier || 1) * retinaScaling,\n canvasProvider: (el: HTMLCanvasElement) => StaticCanvas =\n options.canvasProvider ||\n ((el: HTMLCanvasElement) =>\n new StaticCanvas(el, {\n enableRetinaScaling: false,\n renderOnAddRemove: false,\n skipOffscreen: false,\n }));\n delete this.group;\n if (options.withoutTransform) {\n resetObjectTransform(this);\n }\n if (options.withoutShadow) {\n this.shadow = null;\n }\n if (options.viewportTransform) {\n sendObjectToPlane(this, this.getViewportTransform());\n }\n\n this.setCoords();\n const el = createCanvasElement(),\n boundingRect = this.getBoundingRect(),\n shadow = this.shadow,\n shadowOffset = new Point();\n\n if (shadow) {\n const shadowBlur = shadow.blur;\n const scaling = shadow.nonScaling\n ? new Point(1, 1)\n : this.getObjectScaling();\n // consider non scaling shadow.\n shadowOffset.x =\n 2 * Math.round(abs(shadow.offsetX) + shadowBlur) * abs(scaling.x);\n shadowOffset.y =\n 2 * Math.round(abs(shadow.offsetY) + shadowBlur) * abs(scaling.y);\n }\n const width = boundingRect.width + shadowOffset.x,\n height = boundingRect.height + shadowOffset.y;\n // if the current width/height is not an integer\n // we need to make it so.\n el.width = Math.ceil(width);\n el.height = Math.ceil(height);\n const canvas = canvasProvider(el);\n if (options.format === 'jpeg') {\n canvas.backgroundColor = '#fff';\n }\n this.setPositionByOrigin(\n new Point(canvas.width / 2, canvas.height / 2),\n CENTER,\n CENTER,\n );\n const originalCanvas = this.canvas;\n // static canvas and canvas have both an array of InteractiveObjects\n // @ts-expect-error this needs to be fixed somehow, or ignored globally\n canvas._objects = [this];\n this.set('canvas', canvas);\n this.setCoords();\n const canvasEl = canvas.toCanvasElement(multiplier || 1, options);\n this.set('canvas', originalCanvas);\n this.shadow = originalShadow;\n if (originalGroup) {\n this.group = originalGroup;\n }\n this.set(origParams);\n this.setCoords();\n // canvas.dispose will call image.dispose that will nullify the elements\n // since this canvas is a simple element for the process, we remove references\n // to objects in this way in order to avoid object trashing.\n canvas._objects = [];\n // since render has settled it is safe to destroy canvas\n canvas.destroy();\n return canvasEl;\n }\n\n /**\n * Converts an object into a data-url-like string\n * @param {Object} options Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n */\n toDataURL(options: toDataURLOptions = {}) {\n return toDataURL(\n this.toCanvasElement(options),\n options.format || 'png',\n options.quality || 1,\n );\n }\n\n /**\n * Returns true if any of the specified types is identical to the type of an instance\n * @param {String} type Type to check against\n * @return {Boolean}\n */\n isType(...types: string[]) {\n return (\n types.includes((this.constructor as typeof FabricObject).type) ||\n types.includes(this.type)\n );\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance (is 1 unless subclassed)\n */\n complexity() {\n return 1;\n }\n\n /**\n * Returns a JSON representation of an instance\n * @return {Object} JSON\n */\n toJSON() {\n // delegate, not alias\n return this.toObject();\n }\n\n /**\n * Sets \"angle\" of an instance with centered rotation\n * @param {TDegree} angle Angle value (in degrees)\n */\n rotate(angle: TDegree) {\n const { centeredRotation, originX, originY } = this;\n\n if (centeredRotation) {\n const { x, y } = this.getRelativeCenterPoint();\n this.originX = CENTER;\n this.originY = CENTER;\n this.left = x;\n this.top = y;\n }\n\n this.set('angle', angle);\n\n if (centeredRotation) {\n const { x, y } = this.translateToOriginPoint(\n this.getRelativeCenterPoint(),\n originX,\n originY,\n );\n this.left = x;\n this.top = y;\n this.originX = originX;\n this.originY = originY;\n }\n }\n\n /**\n * This callback function is called by the parent group of an object every\n * time a non-delegated property changes on the group. It is passed the key\n * and value as parameters. Not adding in this function's signature to avoid\n * Travis build error about unused variables.\n */\n setOnGroup() {\n // implemented by sub-classes, as needed.\n }\n\n /**\n * Sets canvas globalCompositeOperation for specific object\n * custom composition operation for the particular object can be specified using globalCompositeOperation property\n * @param {CanvasRenderingContext2D} ctx Rendering canvas context\n */\n _setupCompositeOperation(ctx: CanvasRenderingContext2D) {\n if (this.globalCompositeOperation) {\n ctx.globalCompositeOperation = this.globalCompositeOperation;\n }\n }\n\n /**\n * cancel instance's running animations\n * override if necessary to dispose artifacts such as `clipPath`\n */\n dispose() {\n runningAnimations.cancelByTarget(this);\n this.off();\n this._set('canvas', undefined);\n // clear caches\n this._cacheCanvas && getEnv().dispose(this._cacheCanvas);\n this._cacheCanvas = undefined;\n this._cacheContext = null;\n }\n\n // #region Animation methods\n /**\n * List of properties to consider for animating colors.\n * @type String[]\n */\n static colorProperties: string[] = [FILL, STROKE, 'backgroundColor'];\n\n /**\n * Animates object's properties\n * @param {Record} animatable map of keys and end values\n * @param {Partial>} options\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#animation}\n * @return {Record>} map of animation contexts\n *\n * As object — multiple properties\n *\n * object.animate({ left: ..., top: ... });\n * object.animate({ left: ..., top: ... }, { duration: ... });\n */\n animate(\n animatable: Record,\n options?: Partial>,\n ): Record> {\n return Object.entries(animatable).reduce(\n (acc, [key, endValue]) => {\n acc[key] = this._animate(key, endValue, options);\n return acc;\n },\n {} as Record>,\n );\n }\n\n /**\n * @private\n * @param {String} key Property to animate\n * @param {String} to Value to animate to\n * @param {Object} [options] Options object\n */\n _animate(\n key: string,\n endValue: T,\n options: Partial> = {},\n ): TAnimation {\n const path = key.split('.');\n const propIsColor = (\n this.constructor as typeof FabricObject\n ).colorProperties.includes(path[path.length - 1]);\n const { abort, startValue, onChange, onComplete } = options;\n const animationOptions = {\n ...options,\n target: this,\n // path.reduce... is the current value in case start value isn't provided\n startValue:\n startValue ?? path.reduce((deep: any, key) => deep[key], this),\n endValue,\n abort: abort?.bind(this),\n onChange: (\n value: number | number[] | string,\n valueProgress: number,\n durationProgress: number,\n ) => {\n path.reduce((deep: Record, key, index) => {\n if (index === path.length - 1) {\n deep[key] = value;\n }\n return deep[key];\n }, this);\n onChange &&\n // @ts-expect-error generic callback arg0 is wrong\n onChange(value, valueProgress, durationProgress);\n },\n onComplete: (\n value: number | number[] | string,\n valueProgress: number,\n durationProgress: number,\n ) => {\n this.setCoords();\n onComplete &&\n // @ts-expect-error generic callback arg0 is wrong\n onComplete(value, valueProgress, durationProgress);\n },\n } as AnimationOptions;\n\n return (\n propIsColor\n ? animateColor(animationOptions as ColorAnimationOptions)\n : animate(\n animationOptions as ValueAnimationOptions | ArrayAnimationOptions,\n )\n ) as TAnimation;\n }\n\n // #region Object stacking methods\n\n /**\n * A reference to the parent of the object\n * Used to keep the original parent ref when the object has been added to an ActiveSelection, hence loosing the `group` ref\n */\n declare parent?: Group;\n\n /**\n * Checks if object is descendant of target\n * Should be used instead of {@link Group.contains} or {@link StaticCanvas.contains} for performance reasons\n * @param {TAncestor} target\n * @returns {boolean}\n */\n isDescendantOf(target: TAncestor): boolean {\n const { parent, group } = this;\n return (\n parent === target ||\n group === target ||\n // walk up\n (!!parent && parent.isDescendantOf(target)) ||\n (!!group && group !== parent && group.isDescendantOf(target))\n );\n }\n\n /**\n * @returns {Ancestors} ancestors (excluding `ActiveSelection`) from bottom to top\n */\n getAncestors(): Ancestors {\n const ancestors: TAncestor[] = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let parent: TAncestor | undefined = this;\n do {\n parent = parent.parent;\n parent && ancestors.push(parent);\n } while (parent);\n return ancestors as Ancestors;\n }\n\n /**\n * Compare ancestors\n *\n * @param {StackedObject} other\n * @returns {AncestryComparison} an object that represent the ancestry situation.\n */\n findCommonAncestors(other: T): AncestryComparison {\n if (this === other) {\n return {\n fork: [],\n otherFork: [],\n common: [this, ...this.getAncestors()],\n } as AncestryComparison;\n }\n const ancestors = this.getAncestors();\n const otherAncestors = other.getAncestors();\n // if `this` has no ancestors and `this` is top ancestor of `other` we must handle the following case\n if (\n ancestors.length === 0 &&\n otherAncestors.length > 0 &&\n this === otherAncestors[otherAncestors.length - 1]\n ) {\n return {\n fork: [],\n otherFork: [\n other,\n ...otherAncestors.slice(0, otherAncestors.length - 1),\n ],\n common: [this],\n } as AncestryComparison;\n }\n // compare ancestors\n for (let i = 0, ancestor; i < ancestors.length; i++) {\n ancestor = ancestors[i];\n if (ancestor === other) {\n return {\n fork: [this, ...ancestors.slice(0, i)],\n otherFork: [],\n common: ancestors.slice(i),\n } as AncestryComparison;\n }\n for (let j = 0; j < otherAncestors.length; j++) {\n if (this === otherAncestors[j]) {\n return {\n fork: [],\n otherFork: [other, ...otherAncestors.slice(0, j)],\n common: [this, ...ancestors],\n } as AncestryComparison;\n }\n if (ancestor === otherAncestors[j]) {\n return {\n fork: [this, ...ancestors.slice(0, i)],\n otherFork: [other, ...otherAncestors.slice(0, j)],\n common: ancestors.slice(i),\n } as AncestryComparison;\n }\n }\n }\n // nothing shared\n return {\n fork: [this, ...ancestors],\n otherFork: [other, ...otherAncestors],\n common: [],\n } as AncestryComparison;\n }\n\n /**\n *\n * @param {StackedObject} other\n * @returns {boolean}\n */\n hasCommonAncestors(other: T): boolean {\n const commonAncestors = this.findCommonAncestors(other);\n return commonAncestors && !!commonAncestors.common.length;\n }\n\n /**\n *\n * @param {FabricObject} other object to compare against\n * @returns {boolean | undefined} if objects do not share a common ancestor or they are strictly equal it is impossible to determine which is in front of the other; in such cases the function returns `undefined`\n */\n isInFrontOf(other: T): boolean | undefined {\n if (this === other) {\n return undefined;\n }\n const ancestorData = this.findCommonAncestors(other);\n\n if (ancestorData.fork.includes(other as any)) {\n return true;\n }\n if (ancestorData.otherFork.includes(this as any)) {\n return false;\n }\n // if there isn't a common ancestor, we take the canvas.\n // if there is no canvas, there is nothing to compare\n const firstCommonAncestor = ancestorData.common[0] || this.canvas;\n if (!firstCommonAncestor) {\n return undefined;\n }\n const headOfFork = ancestorData.fork.pop(),\n headOfOtherFork = ancestorData.otherFork.pop(),\n thisIndex = (firstCommonAncestor as TCollection)._objects.indexOf(\n headOfFork as any,\n ),\n otherIndex = (firstCommonAncestor as TCollection)._objects.indexOf(\n headOfOtherFork as any,\n );\n return thisIndex > -1 && thisIndex > otherIndex;\n }\n\n // #region Serialization\n /**\n * Define a list of custom properties that will be serialized when\n * instance.toObject() gets called\n */\n static customProperties: string[] = [];\n\n /**\n * Returns an object representation of an instance\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject(propertiesToInclude: any[] = []): any {\n const propertiesToSerialize = propertiesToInclude.concat(\n FabricObject.customProperties,\n (this.constructor as typeof FabricObject).customProperties || [],\n );\n let clipPathData: Partial | undefined;\n const NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n const {\n clipPath,\n fill,\n stroke,\n shadow,\n strokeDashArray,\n left,\n top,\n originX,\n originY,\n width,\n height,\n strokeWidth,\n strokeLineCap,\n strokeDashOffset,\n strokeLineJoin,\n strokeUniform,\n strokeMiterLimit,\n scaleX,\n scaleY,\n angle,\n flipX,\n flipY,\n opacity,\n visible,\n backgroundColor,\n fillRule,\n paintFirst,\n globalCompositeOperation,\n skewX,\n skewY,\n } = this;\n if (clipPath && !clipPath.excludeFromExport) {\n clipPathData = clipPath.toObject(\n propertiesToSerialize.concat('inverted', 'absolutePositioned'),\n );\n }\n const toFixedBound = (val: number) => toFixed(val, NUM_FRACTION_DIGITS);\n const object = {\n ...pick(this, propertiesToSerialize as (keyof this)[]),\n type: (this.constructor as typeof FabricObject).type,\n version: VERSION,\n originX,\n originY,\n left: toFixedBound(left),\n top: toFixedBound(top),\n width: toFixedBound(width),\n height: toFixedBound(height),\n fill: isSerializableFiller(fill) ? fill.toObject() : fill,\n stroke: isSerializableFiller(stroke) ? stroke.toObject() : stroke,\n strokeWidth: toFixedBound(strokeWidth),\n strokeDashArray: strokeDashArray\n ? strokeDashArray.concat()\n : strokeDashArray,\n strokeLineCap,\n strokeDashOffset,\n strokeLineJoin,\n strokeUniform,\n strokeMiterLimit: toFixedBound(strokeMiterLimit),\n scaleX: toFixedBound(scaleX),\n scaleY: toFixedBound(scaleY),\n angle: toFixedBound(angle),\n flipX,\n flipY,\n opacity: toFixedBound(opacity),\n shadow: shadow ? shadow.toObject() : shadow,\n visible,\n backgroundColor,\n fillRule,\n paintFirst,\n globalCompositeOperation,\n skewX: toFixedBound(skewX),\n skewY: toFixedBound(skewY),\n ...(clipPathData ? { clipPath: clipPathData } : null),\n };\n\n return !this.includeDefaultValues\n ? this._removeDefaultValues(object)\n : object;\n }\n\n /**\n * Returns (dataless) object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toDatalessObject(propertiesToInclude?: any[]): any {\n // will be overwritten by subclasses\n return this.toObject(propertiesToInclude);\n }\n\n /**\n * @private\n * @param {Object} object\n */\n _removeDefaultValues(object: T): Partial {\n // getDefaults() ( get from static ownDefaults ) should win over prototype since anyway they get assigned to instance\n // ownDefault vs prototype is swappable only if you change all the fabric objects consistently.\n const defaults = (this.constructor as typeof FabricObject).getDefaults();\n const hasStaticDefaultValues = Object.keys(defaults).length > 0;\n const baseValues = hasStaticDefaultValues\n ? defaults\n : Object.getPrototypeOf(this);\n\n return pickBy(object, (value, key) => {\n if (key === LEFT || key === TOP || key === 'type') {\n return true;\n }\n const baseValue = baseValues[key];\n return (\n value !== baseValue &&\n // basically a check for [] === []\n !(\n Array.isArray(value) &&\n Array.isArray(baseValue) &&\n value.length === 0 &&\n baseValue.length === 0\n )\n );\n });\n }\n\n /**\n * Returns a string representation of an instance\n * @return {String}\n */\n toString() {\n return `#<${(this.constructor as typeof FabricObject).type}>`;\n }\n\n /**\n *\n * @param {Function} klass\n * @param {object} object\n * @param {object} [options]\n * @param {string} [options.extraParam] property to pass as first argument to the constructor\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static _fromObject(\n { type, ...serializedObjectOptions }: Record,\n { extraParam, ...options }: Abortable & { extraParam?: string } = {},\n ): Promise {\n return enlivenObjectEnlivables(serializedObjectOptions, options).then(\n (enlivedObjectOptions) => {\n // from the resulting enlived options, extract options.extraParam to arg0\n // to avoid accidental overrides later\n if (extraParam) {\n delete enlivedObjectOptions[extraParam];\n return new this(\n serializedObjectOptions[extraParam],\n // @ts-expect-error different signature\n enlivedObjectOptions,\n );\n } else {\n return new this(enlivedObjectOptions);\n }\n },\n ) as Promise;\n }\n\n /**\n *\n * @param {object} object\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static fromObject>(\n object: T,\n options?: Abortable,\n ) {\n return this._fromObject(object, options);\n }\n}\n\nclassRegistry.setClass(FabricObject);\nclassRegistry.setClass(FabricObject, 'object');\n","import type {\n TModificationEvents,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo } from './util';\n\n/**\n * Wrap an action handler with firing an event if the action is performed\n * @param {TModificationEvents} eventName the event we want to fire\n * @param {TransformActionHandler} actionHandler the function to wrap\n * @param {object} extraEventInfo extra information to pas to the event handler\n * @return {TransformActionHandler} a function with an action handler signature\n */\nexport const wrapWithFireEvent = <\n T extends Transform,\n P extends object = Record,\n>(\n eventName: TModificationEvents,\n actionHandler: TransformActionHandler,\n extraEventInfo?: P,\n) => {\n return ((eventData, transform, x, y) => {\n const actionPerformed = actionHandler(eventData, transform, x, y);\n if (actionPerformed) {\n fireEvent(eventName, {\n ...commonEventInfo(eventData, transform, x, y),\n ...extraEventInfo,\n });\n }\n return actionPerformed;\n }) as TransformActionHandler;\n};\n","import type { Transform, TransformActionHandler } from '../EventTypeDefs';\n\n/**\n * Wrap an action handler with saving/restoring object position on the transform.\n * this is the code that permits to objects to keep their position while transforming.\n * @param {Function} actionHandler the function to wrap\n * @return {Function} a function with an action handler signature\n */\nexport function wrapWithFixedAnchor(\n actionHandler: TransformActionHandler,\n) {\n return ((eventData, transform, x, y) => {\n const { target, originX, originY } = transform,\n centerPoint = target.getRelativeCenterPoint(),\n constraint = target.translateToOriginPoint(centerPoint, originX, originY),\n actionPerformed = actionHandler(eventData, transform, x, y);\n // flipping requires to change the transform origin, so we read from the mutated transform\n // instead of leveraging the one destructured before\n target.setPositionByOrigin(\n constraint,\n transform.originX,\n transform.originY,\n );\n return actionPerformed;\n }) as TransformActionHandler;\n}\n","import type { TransformActionHandler } from '../EventTypeDefs';\nimport { CENTER, LEFT, RESIZING, RIGHT } from '../constants';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { getLocalPoint, isTransformCentered } from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\n\n/**\n * Action handler to change object's width\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const changeObjectWidth: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const localPoint = getLocalPoint(\n transform,\n transform.originX,\n transform.originY,\n x,\n y,\n );\n // make sure the control changes width ONLY from it's side of target\n if (\n resolveOrigin(transform.originX) === resolveOrigin(CENTER) ||\n (resolveOrigin(transform.originX) === resolveOrigin(RIGHT) &&\n localPoint.x < 0) ||\n (resolveOrigin(transform.originX) === resolveOrigin(LEFT) &&\n localPoint.x > 0)\n ) {\n const { target } = transform,\n strokePadding =\n target.strokeWidth / (target.strokeUniform ? target.scaleX : 1),\n multiplier = isTransformCentered(transform) ? 2 : 1,\n oldWidth = target.width,\n newWidth =\n Math.abs((localPoint.x * multiplier) / target.scaleX) - strokePadding;\n target.set('width', Math.max(newWidth, 1));\n // check against actual target width in case `newWidth` was rejected\n return oldWidth !== target.width;\n }\n return false;\n};\n\nexport const changeWidth = wrapWithFireEvent(\n RESIZING,\n wrapWithFixedAnchor(changeObjectWidth),\n);\n","import { FILL, STROKE, twoMathPi } from '../constants';\nimport type { InteractiveFabricObject } from '../shapes/Object/InteractiveObject';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport type { Control } from './Control';\n\nexport type ControlRenderingStyleOverride = Partial<\n Pick<\n InteractiveFabricObject,\n | 'cornerStyle'\n | 'cornerSize'\n | 'cornerColor'\n | 'cornerStrokeColor'\n | 'cornerDashArray'\n | 'transparentCorners'\n >\n>;\n\nexport type ControlRenderer<\n O extends InteractiveFabricObject = InteractiveFabricObject,\n> = (\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: O,\n) => void;\n\n/**\n * Render a round control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for FabricObject controls style\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n */\nexport function renderCircleControl(\n this: Control,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: InteractiveFabricObject,\n) {\n styleOverride = styleOverride || {};\n const xSize =\n this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners =\n typeof styleOverride.transparentCorners !== 'undefined'\n ? styleOverride.transparentCorners\n : fabricObject.transparentCorners,\n methodName = transparentCorners ? STROKE : FILL,\n stroke =\n !transparentCorners &&\n (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor);\n let myLeft = left,\n myTop = top,\n size;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor || '';\n ctx.strokeStyle =\n styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor || '';\n // TODO: use proper ellipse code.\n if (xSize > ySize) {\n size = xSize;\n ctx.scale(1.0, ySize / xSize);\n myTop = (top * xSize) / ySize;\n } else if (ySize > xSize) {\n size = ySize;\n ctx.scale(xSize / ySize, 1.0);\n myLeft = (left * ySize) / xSize;\n } else {\n size = xSize;\n }\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.arc(myLeft, myTop, size / 2, 0, twoMathPi, false);\n ctx[methodName]();\n if (stroke) {\n ctx.stroke();\n }\n ctx.restore();\n}\n\n/**\n * Render a square control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for FabricObject controls style\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n */\nexport function renderSquareControl(\n this: Control,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: InteractiveFabricObject,\n) {\n styleOverride = styleOverride || {};\n const xSize =\n this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners =\n typeof styleOverride.transparentCorners !== 'undefined'\n ? styleOverride.transparentCorners\n : fabricObject.transparentCorners,\n methodName = transparentCorners ? STROKE : FILL,\n stroke =\n !transparentCorners &&\n (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor),\n xSizeBy2 = xSize / 2,\n ySizeBy2 = ySize / 2;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor || '';\n ctx.strokeStyle =\n styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor || '';\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.translate(left, top);\n // angle is relative to canvas plane\n const angle = fabricObject.getTotalAngle();\n ctx.rotate(degreesToRadians(angle));\n // this does not work, and fixed with ( && ) does not make sense.\n // to have real transparent corners we need the controls on upperCanvas\n // transparentCorners || ctx.clearRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n ctx[`${methodName}Rect`](-xSizeBy2, -ySizeBy2, xSize, ySize);\n if (stroke) {\n ctx.strokeRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n }\n ctx.restore();\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type {\n ControlActionHandler,\n TPointerEvent,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { Intersection } from '../Intersection';\nimport { Point } from '../Point';\nimport { SCALE } from '../constants';\nimport type { InteractiveFabricObject } from '../shapes/Object/InteractiveObject';\nimport type { TCornerPoint, TDegree, TMat2D } from '../typedefs';\nimport {\n createRotateMatrix,\n createScaleMatrix,\n createTranslateMatrix,\n multiplyTransformMatrixArray,\n} from '../util/misc/matrix';\nimport type { ControlRenderingStyleOverride } from './controlRendering';\nimport { renderCircleControl, renderSquareControl } from './controlRendering';\n\nexport class Control {\n /**\n * keep track of control visibility.\n * mainly for backward compatibility.\n * if you do not want to see a control, you can remove it\n * from the control set.\n * @type {Boolean}\n * @default true\n */\n visible = true;\n\n /**\n * Name of the action that the control will likely execute.\n * This is optional. FabricJS uses to identify what the user is doing for some\n * extra optimizations. If you are writing a custom control and you want to know\n * somewhere else in the code what is going on, you can use this string here.\n * you can also provide a custom getActionName if your control run multiple actions\n * depending on some external state.\n * default to scale since is the most common, used on 4 corners by default\n * @type {String}\n * @default 'scale'\n */\n actionName = SCALE;\n\n /**\n * Drawing angle of the control.\n * NOT used for now, but name marked as needed for internal logic\n * example: to reuse the same drawing function for different rotated controls\n * @type {Number}\n * @default 0\n */\n angle = 0;\n\n /**\n * Relative position of the control. X\n * 0,0 is the center of the Object, while -0.5 (left) or 0.5 (right) are the extremities\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n x = 0;\n\n /**\n * Relative position of the control. Y\n * 0,0 is the center of the Object, while -0.5 (top) or 0.5 (bottom) are the extremities\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n y = 0;\n\n /**\n * Horizontal offset of the control from the defined position. In pixels\n * Positive offset moves the control to the right, negative to the left.\n * It used when you want to have position of control that does not scale with\n * the bounding box. Example: rotation control is placed at x:0, y: 0.5 on\n * the boundind box, with an offset of 30 pixels vertically. Those 30 pixels will\n * stay 30 pixels no matter how the object is big. Another example is having 2\n * controls in the corner, that stay in the same position when the object scale.\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n offsetX = 0;\n\n /**\n * Vertical offset of the control from the defined position. In pixels\n * Positive offset moves the control to the bottom, negative to the top.\n * @type {Number}\n * @default 0\n */\n offsetY = 0;\n\n /**\n * Sets the length of the control. If null, defaults to object's cornerSize.\n * Expects both sizeX and sizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n sizeX = 0;\n\n /**\n * Sets the height of the control. If null, defaults to object's cornerSize.\n * Expects both sizeX and sizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n sizeY = 0;\n\n /**\n * Sets the length of the touch area of the control. If null, defaults to object's touchCornerSize.\n * Expects both touchSizeX and touchSizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n touchSizeX = 0;\n\n /**\n * Sets the height of the touch area of the control. If null, defaults to object's touchCornerSize.\n * Expects both touchSizeX and touchSizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n touchSizeY = 0;\n\n /**\n * Css cursor style to display when the control is hovered.\n * if the method `cursorStyleHandler` is provided, this property is ignored.\n * @type {String}\n * @default 'crosshair'\n */\n cursorStyle = 'crosshair';\n\n /**\n * If controls has an offsetY or offsetX, draw a line that connects\n * the control to the bounding box\n * @type {Boolean}\n * @default false\n */\n withConnection = false;\n\n constructor(options?: Partial) {\n Object.assign(this, options);\n }\n\n /**\n * The control actionHandler, provide one to handle action ( control being moved )\n * @param {Event} eventData the native mouse event\n * @param {Transform} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n declare actionHandler: TransformActionHandler;\n\n /**\n * The control handler for mouse down, provide one to handle mouse down on control\n * @param {Event} eventData the native mouse event\n * @param {Transform} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n declare mouseDownHandler?: ControlActionHandler;\n\n /**\n * The control mouseUpHandler, provide one to handle an effect on mouse up.\n * @param {Event} eventData the native mouse event\n * @param {Transform} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n declare mouseUpHandler?: ControlActionHandler;\n\n shouldActivate(\n controlKey: string,\n fabricObject: InteractiveFabricObject,\n pointer: Point,\n { tl, tr, br, bl }: TCornerPoint,\n ) {\n // TODO: locking logic can be handled here instead of in the control handler logic\n return (\n fabricObject.canvas?.getActiveObject() === fabricObject &&\n fabricObject.isControlVisible(controlKey) &&\n Intersection.isPointInPolygon(pointer, [tl, tr, br, bl])\n );\n }\n\n /**\n * Returns control actionHandler\n * @param {Event} eventData the native mouse event\n * @param {FabricObject} fabricObject on which the control is displayed\n * @param {Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getActionHandler(\n eventData: TPointerEvent,\n fabricObject: InteractiveFabricObject,\n control: Control,\n ): TransformActionHandler | undefined {\n return this.actionHandler;\n }\n\n /**\n * Returns control mouseDown handler\n * @param {Event} eventData the native mouse event\n * @param {FabricObject} fabricObject on which the control is displayed\n * @param {Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getMouseDownHandler(\n eventData: TPointerEvent,\n fabricObject: InteractiveFabricObject,\n control: Control,\n ): ControlActionHandler | undefined {\n return this.mouseDownHandler;\n }\n\n /**\n * Returns control mouseUp handler.\n * During actions the fabricObject or the control can be of different obj\n * @param {Event} eventData the native mouse event\n * @param {FabricObject} fabricObject on which the control is displayed\n * @param {Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getMouseUpHandler(\n eventData: TPointerEvent,\n fabricObject: InteractiveFabricObject,\n control: Control,\n ): ControlActionHandler | undefined {\n return this.mouseUpHandler;\n }\n\n /**\n * Returns control cursorStyle for css using cursorStyle. If you need a more elaborate\n * function you can pass one in the constructor\n * the cursorStyle property\n * @param {Event} eventData the native mouse event\n * @param {Control} control the current control ( likely this)\n * @param {FabricObject} object on which the control is displayed\n * @return {String}\n */\n cursorStyleHandler(\n eventData: TPointerEvent,\n control: Control,\n fabricObject: InteractiveFabricObject,\n ) {\n return control.cursorStyle;\n }\n\n /**\n * Returns the action name. The basic implementation just return the actionName property.\n * @param {Event} eventData the native mouse event\n * @param {Control} control the current control ( likely this)\n * @param {FabricObject} object on which the control is displayed\n * @return {String}\n */\n getActionName(\n eventData: TPointerEvent,\n control: Control,\n fabricObject: InteractiveFabricObject,\n ) {\n return control.actionName;\n }\n\n /**\n * Returns controls visibility\n * @param {FabricObject} object on which the control is displayed\n * @param {String} controlKey key where the control is memorized on the\n * @return {Boolean}\n */\n getVisibility(fabricObject: InteractiveFabricObject, controlKey: string) {\n return fabricObject._controlsVisibility?.[controlKey] ?? this.visible;\n }\n\n /**\n * Sets controls visibility\n * @param {Boolean} visibility for the object\n * @return {Void}\n */\n setVisibility(\n visibility: boolean,\n name: string,\n fabricObject: InteractiveFabricObject,\n ) {\n this.visible = visibility;\n }\n\n positionHandler(\n dim: Point,\n finalMatrix: TMat2D,\n fabricObject: InteractiveFabricObject,\n currentControl: Control,\n ) {\n return new Point(\n this.x * dim.x + this.offsetX,\n this.y * dim.y + this.offsetY,\n ).transform(finalMatrix);\n }\n\n /**\n * Returns the coords for this control based on object values.\n * @param {Number} objectAngle angle from the fabric object holding the control\n * @param {Number} objectCornerSize cornerSize from the fabric object holding the control (or touchCornerSize if\n * isTouch is true)\n * @param {Number} centerX x coordinate where the control center should be\n * @param {Number} centerY y coordinate where the control center should be\n * @param {boolean} isTouch true if touch corner, false if normal corner\n */\n calcCornerCoords(\n angle: TDegree,\n objectCornerSize: number,\n centerX: number,\n centerY: number,\n isTouch: boolean,\n fabricObject: InteractiveFabricObject,\n ) {\n const t = multiplyTransformMatrixArray([\n createTranslateMatrix(centerX, centerY),\n createRotateMatrix({ angle }),\n createScaleMatrix(\n (isTouch ? this.touchSizeX : this.sizeX) || objectCornerSize,\n (isTouch ? this.touchSizeY : this.sizeY) || objectCornerSize,\n ),\n ]);\n return {\n tl: new Point(-0.5, -0.5).transform(t),\n tr: new Point(0.5, -0.5).transform(t),\n br: new Point(0.5, 0.5).transform(t),\n bl: new Point(-0.5, 0.5).transform(t),\n };\n }\n\n /**\n * Render function for the control.\n * When this function runs the context is unscaled. unrotate. Just retina scaled.\n * all the functions will have to translate to the point left,top before starting Drawing\n * if they want to draw a control where the position is detected.\n * left and top are the result of the positionHandler function\n * @param {RenderingContext2D} ctx the context where the control will be drawn\n * @param {Number} left position of the canvas where we are about to render the control.\n * @param {Number} top position of the canvas where we are about to render the control.\n * @param {Object} styleOverride\n * @param {FabricObject} fabricObject the object where the control is about to be rendered\n */\n render(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: InteractiveFabricObject,\n ) {\n styleOverride = styleOverride || {};\n switch (styleOverride.cornerStyle || fabricObject.cornerStyle) {\n case 'circle':\n renderCircleControl.call(\n this,\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n );\n break;\n default:\n renderSquareControl.call(\n this,\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n );\n }\n }\n}\n","import type {\n ControlCursorCallback,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { ROTATING } from '../constants';\nimport { radiansToDegrees } from '../util/misc/radiansDegreesConversion';\nimport { isLocked, NOT_ALLOWED_CURSOR } from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\n\n/**\n * Find the correct style for the control that is used for rotation.\n * this function is very simple and it just take care of not-allowed or standard cursor\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const rotationStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n if (fabricObject.lockRotation) {\n return NOT_ALLOWED_CURSOR;\n }\n return control.cursorStyle;\n};\n\n/**\n * Action handler for rotation and snapping, without anchor point.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n * @private\n */\nconst rotateObjectWithSnapping: TransformActionHandler = (\n eventData,\n { target, ex, ey, theta, originX, originY },\n x,\n y,\n) => {\n const pivotPoint = target.translateToOriginPoint(\n target.getRelativeCenterPoint(),\n originX,\n originY,\n );\n\n if (isLocked(target, 'lockRotation')) {\n return false;\n }\n\n const lastAngle = Math.atan2(ey - pivotPoint.y, ex - pivotPoint.x),\n curAngle = Math.atan2(y - pivotPoint.y, x - pivotPoint.x);\n let angle = radiansToDegrees(curAngle - lastAngle + theta);\n\n if (target.snapAngle && target.snapAngle > 0) {\n const snapAngle = target.snapAngle,\n snapThreshold = target.snapThreshold || snapAngle,\n rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle,\n leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle;\n\n if (Math.abs(angle - leftAngleLocked) < snapThreshold) {\n angle = leftAngleLocked;\n } else if (Math.abs(angle - rightAngleLocked) < snapThreshold) {\n angle = rightAngleLocked;\n }\n }\n\n // normalize angle to positive value\n if (angle < 0) {\n angle = 360 + angle;\n }\n angle %= 360;\n\n const hasRotated = target.angle !== angle;\n // TODO: why aren't we using set?\n target.angle = angle;\n return hasRotated;\n};\n\nexport const rotationWithSnapping = wrapWithFireEvent(\n ROTATING,\n wrapWithFixedAnchor(rotateObjectWithSnapping),\n);\n","import type {\n ControlCursorCallback,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TAxis } from '../typedefs';\nimport type { Canvas } from '../canvas/Canvas';\nimport {\n findCornerQuadrant,\n getLocalPoint,\n invertOrigin,\n isLocked,\n isTransformCentered,\n NOT_ALLOWED_CURSOR,\n} from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\nimport { SCALE_X, SCALE_Y, SCALING } from '../constants';\n\ntype ScaleTransform = Transform & {\n gestureScale?: number;\n signX?: number;\n signY?: number;\n};\n\ntype ScaleBy = TAxis | 'equally' | '' | undefined;\n\n/**\n * Inspect event and fabricObject properties to understand if the scaling action\n * @param {Event} eventData from the user action\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @return {Boolean} true if scale is proportional\n */\nexport function scaleIsProportional(\n eventData: TPointerEvent,\n fabricObject: FabricObject,\n): boolean {\n const canvas = fabricObject.canvas as Canvas,\n uniformIsToggled = eventData[canvas.uniScaleKey!];\n return (\n (canvas.uniformScaling && !uniformIsToggled) ||\n (!canvas.uniformScaling && uniformIsToggled)\n );\n}\n\n/**\n * Inspect fabricObject to understand if the current scaling action is allowed\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @param {String} by 'x' or 'y' or ''\n * @param {Boolean} scaleProportionally true if we are trying to scale proportionally\n * @return {Boolean} true if scaling is not allowed at current conditions\n */\nexport function scalingIsForbidden(\n fabricObject: FabricObject,\n by: ScaleBy,\n scaleProportionally: boolean,\n) {\n const lockX = isLocked(fabricObject, 'lockScalingX'),\n lockY = isLocked(fabricObject, 'lockScalingY');\n if (lockX && lockY) {\n return true;\n }\n if (!by && (lockX || lockY) && scaleProportionally) {\n return true;\n }\n if (lockX && by === 'x') {\n return true;\n }\n if (lockY && by === 'y') {\n return true;\n }\n // code crashes because of a division by 0 if a 0 sized object is scaled\n // forbid to prevent scaling to happen. ISSUE-9475\n const { width, height, strokeWidth } = fabricObject;\n if (width === 0 && strokeWidth === 0 && by !== 'y') {\n return true;\n }\n if (height === 0 && strokeWidth === 0 && by !== 'x') {\n return true;\n }\n return false;\n}\n\nconst scaleMap = ['e', 'se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'];\n\n/**\n * return the correct cursor style for the scale action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const scaleCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n const scaleProportionally = scaleIsProportional(eventData, fabricObject),\n by =\n control.x !== 0 && control.y === 0\n ? 'x'\n : control.x === 0 && control.y !== 0\n ? 'y'\n : '';\n if (scalingIsForbidden(fabricObject, by, scaleProportionally)) {\n return NOT_ALLOWED_CURSOR;\n }\n const n = findCornerQuadrant(fabricObject, control);\n return `${scaleMap[n]}-resize`;\n};\n\n/**\n * Basic scaling logic, reused with different constrain for scaling X,Y, freely or equally.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @param {Object} options additional information for scaling\n * @param {String} options.by 'x', 'y', 'equally' or '' to indicate type of scaling\n * @return {Boolean} true if some change happened\n * @private\n */\nfunction scaleObject(\n eventData: TPointerEvent,\n transform: ScaleTransform,\n x: number,\n y: number,\n options: { by?: ScaleBy } = {},\n) {\n const target = transform.target,\n by = options.by,\n scaleProportionally = scaleIsProportional(eventData, target),\n forbidScaling = scalingIsForbidden(target, by, scaleProportionally);\n let newPoint, scaleX, scaleY, dim, signX, signY;\n\n if (forbidScaling) {\n return false;\n }\n if (transform.gestureScale) {\n scaleX = transform.scaleX * transform.gestureScale;\n scaleY = transform.scaleY * transform.gestureScale;\n } else {\n newPoint = getLocalPoint(\n transform,\n transform.originX,\n transform.originY,\n x,\n y,\n );\n // use of sign: We use sign to detect change of direction of an action. sign usually change when\n // we cross the origin point with the mouse. So a scale flip for example. There is an issue when scaling\n // by center and scaling using one middle control ( default: mr, mt, ml, mb), the mouse movement can easily\n // cross many time the origin point and flip the object. so we need a way to filter out the noise.\n // This ternary here should be ok to filter out X scaling when we want Y only and vice versa.\n signX = by !== 'y' ? Math.sign(newPoint.x || transform.signX || 1) : 1;\n signY = by !== 'x' ? Math.sign(newPoint.y || transform.signY || 1) : 1;\n if (!transform.signX) {\n transform.signX = signX;\n }\n if (!transform.signY) {\n transform.signY = signY;\n }\n\n if (\n isLocked(target, 'lockScalingFlip') &&\n (transform.signX !== signX || transform.signY !== signY)\n ) {\n return false;\n }\n\n dim = target._getTransformedDimensions();\n // missing detection of flip and logic to switch the origin\n if (scaleProportionally && !by) {\n // uniform scaling\n const distance = Math.abs(newPoint.x) + Math.abs(newPoint.y),\n { original } = transform,\n originalDistance =\n Math.abs((dim.x * original.scaleX) / target.scaleX) +\n Math.abs((dim.y * original.scaleY) / target.scaleY),\n scale = distance / originalDistance;\n scaleX = original.scaleX * scale;\n scaleY = original.scaleY * scale;\n } else {\n scaleX = Math.abs((newPoint.x * target.scaleX) / dim.x);\n scaleY = Math.abs((newPoint.y * target.scaleY) / dim.y);\n }\n // if we are scaling by center, we need to double the scale\n if (isTransformCentered(transform)) {\n scaleX *= 2;\n scaleY *= 2;\n }\n if (transform.signX !== signX && by !== 'y') {\n transform.originX = invertOrigin(transform.originX);\n scaleX *= -1;\n transform.signX = signX;\n }\n if (transform.signY !== signY && by !== 'x') {\n transform.originY = invertOrigin(transform.originY);\n scaleY *= -1;\n transform.signY = signY;\n }\n }\n // minScale is taken care of in the setter.\n const oldScaleX = target.scaleX,\n oldScaleY = target.scaleY;\n if (!by) {\n !isLocked(target, 'lockScalingX') && target.set(SCALE_X, scaleX);\n !isLocked(target, 'lockScalingY') && target.set(SCALE_Y, scaleY);\n } else {\n // forbidden cases already handled on top here.\n by === 'x' && target.set(SCALE_X, scaleX);\n by === 'y' && target.set(SCALE_Y, scaleY);\n }\n return oldScaleX !== target.scaleX || oldScaleY !== target.scaleY;\n}\n\n/**\n * Generic scaling logic, to scale from corners either equally or freely.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scaleObjectFromCorner: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y);\n};\n\n/**\n * Scaling logic for the X axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'x' });\n};\n\n/**\n * Scaling logic for the Y axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'y' });\n};\n\nexport const scalingEqually = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectFromCorner),\n);\n\nexport const scalingX = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectX),\n);\n\nexport const scalingY = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectY),\n);\n","import type {\n ControlCursorCallback,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { Point } from '../Point';\nimport type { TAxis, TAxisKey } from '../typedefs';\nimport {\n degreesToRadians,\n radiansToDegrees,\n} from '../util/misc/radiansDegreesConversion';\nimport {\n findCornerQuadrant,\n getLocalPoint,\n isLocked,\n NOT_ALLOWED_CURSOR,\n} from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\nimport {\n CENTER,\n SCALE_X,\n SCALE_Y,\n SKEWING,\n SKEW_X,\n SKEW_Y,\n} from '../constants';\n\nexport type SkewTransform = Transform & { skewingSide: -1 | 1 };\n\nconst AXIS_KEYS: Record<\n TAxis,\n {\n counterAxis: TAxis;\n scale: TAxisKey<'scale'>;\n skew: TAxisKey<'skew'>;\n lockSkewing: TAxisKey<'lockSkewing'>;\n origin: TAxisKey<'origin'>;\n flip: TAxisKey<'flip'>;\n }\n> = {\n x: {\n counterAxis: 'y',\n scale: SCALE_X,\n skew: SKEW_X,\n lockSkewing: 'lockSkewingX',\n origin: 'originX',\n flip: 'flipX',\n },\n y: {\n counterAxis: 'x',\n scale: SCALE_Y,\n skew: SKEW_Y,\n lockSkewing: 'lockSkewingY',\n origin: 'originY',\n flip: 'flipY',\n },\n};\n\nconst skewMap = ['ns', 'nesw', 'ew', 'nwse'];\n\n/**\n * return the correct cursor style for the skew action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const skewCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n if (control.x !== 0 && isLocked(fabricObject, 'lockSkewingY')) {\n return NOT_ALLOWED_CURSOR;\n }\n if (control.y !== 0 && isLocked(fabricObject, 'lockSkewingX')) {\n return NOT_ALLOWED_CURSOR;\n }\n const n = findCornerQuadrant(fabricObject, control) % 4;\n return `${skewMap[n]}-resize`;\n};\n\n/**\n * Since skewing is applied before scaling, calculations are done in a scaleless plane\n * @see https://github.com/fabricjs/fabric.js/pull/8380\n */\nfunction skewObject(\n axis: TAxis,\n { target, ex, ey, skewingSide, ...transform }: SkewTransform,\n pointer: Point,\n) {\n const { skew: skewKey } = AXIS_KEYS[axis],\n offset = pointer\n .subtract(new Point(ex, ey))\n .divide(new Point(target.scaleX, target.scaleY))[axis],\n skewingBefore = target[skewKey],\n skewingStart = transform[skewKey],\n shearingStart = Math.tan(degreesToRadians(skewingStart)),\n // let a, b be the size of target\n // let a' be the value of a after applying skewing\n // then:\n // a' = a + b * skewA => skewA = (a' - a) / b\n // the value b is tricky since skewY is applied before skewX\n b =\n axis === 'y'\n ? target._getTransformedDimensions({\n scaleX: 1,\n scaleY: 1,\n // since skewY is applied before skewX, b (=width) is not affected by skewX\n skewX: 0,\n }).x\n : target._getTransformedDimensions({\n scaleX: 1,\n scaleY: 1,\n }).y;\n\n const shearing =\n (2 * offset * skewingSide) /\n // we max out fractions to safeguard from asymptotic behavior\n Math.max(b, 1) +\n // add starting state\n shearingStart;\n\n const skewing = radiansToDegrees(Math.atan(shearing));\n\n target.set(skewKey, skewing);\n const changed = skewingBefore !== target[skewKey];\n\n if (changed && axis === 'y') {\n // we don't want skewing to affect scaleX\n // so we factor it by the inverse skewing diff to make it seem unchanged to the viewer\n const { skewX, scaleX } = target,\n dimBefore = target._getTransformedDimensions({ skewY: skewingBefore }),\n dimAfter = target._getTransformedDimensions(),\n compensationFactor = skewX !== 0 ? dimBefore.x / dimAfter.x : 1;\n compensationFactor !== 1 &&\n target.set(SCALE_X, compensationFactor * scaleX);\n }\n\n return changed;\n}\n\n/**\n * Wrapped Action handler for skewing on a given axis, takes care of the\n * skew direction and determines the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nfunction skewHandler(\n axis: TAxis,\n eventData: TPointerEvent,\n transform: Transform,\n x: number,\n y: number,\n) {\n const { target } = transform,\n {\n counterAxis,\n origin: originKey,\n lockSkewing: lockSkewingKey,\n skew: skewKey,\n flip: flipKey,\n } = AXIS_KEYS[axis];\n if (isLocked(target, lockSkewingKey)) {\n return false;\n }\n\n const { origin: counterOriginKey, flip: counterFlipKey } =\n AXIS_KEYS[counterAxis],\n counterOriginFactor =\n resolveOrigin(transform[counterOriginKey]) *\n (target[counterFlipKey] ? -1 : 1),\n // if the counter origin is top/left (= -0.5) then we are skewing x/y values on the bottom/right side of target respectively.\n // if the counter origin is bottom/right (= 0.5) then we are skewing x/y values on the top/left side of target respectively.\n // skewing direction on the top/left side of target is OPPOSITE to the direction of the movement of the pointer,\n // so we factor skewing direction by this value.\n skewingSide = (-Math.sign(counterOriginFactor) *\n (target[flipKey] ? -1 : 1)) as 1 | -1,\n skewingDirection =\n ((target[skewKey] === 0 &&\n // in case skewing equals 0 we use the pointer offset from target center to determine the direction of skewing\n getLocalPoint(transform, CENTER, CENTER, x, y)[axis] > 0) ||\n // in case target has skewing we use that as the direction\n target[skewKey] > 0\n ? 1\n : -1) * skewingSide,\n // anchor to the opposite side of the skewing direction\n // normalize value from [-1, 1] to origin value [0, 1]\n origin = -skewingDirection * 0.5 + 0.5;\n\n const finalHandler = wrapWithFireEvent(\n SKEWING,\n wrapWithFixedAnchor((eventData, transform, x, y) =>\n skewObject(axis, transform, new Point(x, y)),\n ),\n );\n\n return finalHandler(\n eventData,\n {\n ...transform,\n [originKey]: origin,\n skewingSide,\n },\n x,\n y,\n );\n}\n\n/**\n * Wrapped Action handler for skewing on the X axis, takes care of the\n * skew direction and determines the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const skewHandlerX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return skewHandler('x', eventData, transform, x, y);\n};\n\n/**\n * Wrapped Action handler for skewing on the Y axis, takes care of the\n * skew direction and determines the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const skewHandlerY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return skewHandler('y', eventData, transform, x, y);\n};\n","import type {\n ControlCallback,\n ControlCursorCallback,\n TPointerEvent,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { SCALE_X, SCALE_Y, SKEW_X, SKEW_Y } from '../constants';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TAxisKey } from '../typedefs';\nimport { scaleCursorStyleHandler, scalingX, scalingY } from './scale';\nimport { skewCursorStyleHandler, skewHandlerX, skewHandlerY } from './skew';\n\nfunction isAltAction(eventData: TPointerEvent, target: FabricObject) {\n return eventData[target.canvas!.altActionKey!];\n}\n\n/**\n * Inspect event, control and fabricObject to return the correct action name\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} an action name\n */\nexport const scaleOrSkewActionName: ControlCallback<\n TAxisKey<'skew' | 'scale'> | ''\n> = (eventData, control, fabricObject) => {\n const isAlternative = isAltAction(eventData, fabricObject);\n if (control.x === 0) {\n // then is scaleY or skewX\n return isAlternative ? SKEW_X : SCALE_Y;\n }\n if (control.y === 0) {\n // then is scaleY or skewX\n return isAlternative ? SKEW_Y : SCALE_X;\n }\n return '';\n};\n\n/**\n * Combine skew and scale style handlers to cover fabric standard use case\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const scaleSkewCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n return isAltAction(eventData, fabricObject)\n ? skewCursorStyleHandler(eventData, control, fabricObject)\n : scaleCursorStyleHandler(eventData, control, fabricObject);\n};\n/**\n * Composed action handler to either scale X or skew Y\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scalingXOrSkewingY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return isAltAction(eventData, transform.target)\n ? skewHandlerY(eventData, transform, x, y)\n : scalingX(eventData, transform, x, y);\n};\n\n/**\n * Composed action handler to either scale Y or skew X\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scalingYOrSkewingX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return isAltAction(eventData, transform.target)\n ? skewHandlerX(eventData, transform, x, y)\n : scalingY(eventData, transform, x, y);\n};\n","import { RESIZING, ROTATE } from '../constants';\nimport { changeWidth } from './changeWidth';\nimport { Control } from './Control';\nimport { rotationStyleHandler, rotationWithSnapping } from './rotate';\nimport { scaleCursorStyleHandler, scalingEqually } from './scale';\nimport {\n scaleOrSkewActionName,\n scaleSkewCursorStyleHandler,\n scalingXOrSkewingY,\n scalingYOrSkewingX,\n} from './scaleSkew';\n\n// use this function if you want to generate new controls for every instance\nexport const createObjectDefaultControls = () => ({\n ml: new Control({\n x: -0.5,\n y: 0,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingXOrSkewingY,\n getActionName: scaleOrSkewActionName,\n }),\n\n mr: new Control({\n x: 0.5,\n y: 0,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingXOrSkewingY,\n getActionName: scaleOrSkewActionName,\n }),\n\n mb: new Control({\n x: 0,\n y: 0.5,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingYOrSkewingX,\n getActionName: scaleOrSkewActionName,\n }),\n\n mt: new Control({\n x: 0,\n y: -0.5,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingYOrSkewingX,\n getActionName: scaleOrSkewActionName,\n }),\n\n tl: new Control({\n x: -0.5,\n y: -0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n tr: new Control({\n x: 0.5,\n y: -0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n bl: new Control({\n x: -0.5,\n y: 0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n br: new Control({\n x: 0.5,\n y: 0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n mtr: new Control({\n x: 0,\n y: -0.5,\n actionHandler: rotationWithSnapping,\n cursorStyleHandler: rotationStyleHandler,\n offsetY: -40,\n withConnection: true,\n actionName: ROTATE,\n }),\n});\n\nexport const createResizeControls = () => ({\n mr: new Control({\n x: 0.5,\n y: 0,\n actionHandler: changeWidth,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionName: RESIZING,\n }),\n ml: new Control({\n x: -0.5,\n y: 0,\n actionHandler: changeWidth,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionName: RESIZING,\n }),\n});\n\nexport const createTextboxDefaultControls = () => ({\n ...createObjectDefaultControls(),\n ...createResizeControls(),\n});\n","import { Point, ZERO } from '../../Point';\nimport type { TCornerPoint, TDegree } from '../../typedefs';\nimport { FabricObject } from './Object';\nimport { degreesToRadians } from '../../util/misc/radiansDegreesConversion';\nimport type { TQrDecomposeOut } from '../../util/misc/matrix';\nimport {\n calcDimensionsMatrix,\n createRotateMatrix,\n createTranslateMatrix,\n multiplyTransformMatrices,\n qrDecompose,\n} from '../../util/misc/matrix';\nimport type { Control } from '../../controls/Control';\nimport { sizeAfterTransform } from '../../util/misc/objectTransforms';\nimport type { ObjectEvents, TPointerEvent } from '../../EventTypeDefs';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { ControlRenderingStyleOverride } from '../../controls/controlRendering';\nimport type { FabricObjectProps } from './types/FabricObjectProps';\nimport type { TFabricObjectProps, SerializedObjectProps } from './types';\nimport { createObjectDefaultControls } from '../../controls/commonControls';\nimport { interactiveObjectDefaultValues } from './defaultValues';\nimport { SCALE } from '../../constants';\n\nexport type TOCoord = Point & {\n corner: TCornerPoint;\n touchCorner: TCornerPoint;\n};\n\nexport type TControlSet = Record;\n\nexport type TBorderRenderingStyleOverride = Partial<\n Pick\n>;\n\nexport type TStyleOverride = ControlRenderingStyleOverride &\n TBorderRenderingStyleOverride &\n Partial<\n Pick & {\n forActiveSelection: boolean;\n }\n >;\n\nexport class InteractiveFabricObject<\n Props extends TFabricObjectProps = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements FabricObjectProps\n{\n declare noScaleCache: boolean;\n\n declare snapAngle?: TDegree;\n declare snapThreshold?: TDegree;\n\n declare lockMovementX: boolean;\n declare lockMovementY: boolean;\n declare lockRotation: boolean;\n declare lockScalingX: boolean;\n declare lockScalingY: boolean;\n declare lockSkewingX: boolean;\n declare lockSkewingY: boolean;\n declare lockScalingFlip: boolean;\n\n declare cornerSize: number;\n declare touchCornerSize: number;\n declare transparentCorners: boolean;\n declare cornerColor: string;\n declare cornerStrokeColor: string;\n declare cornerStyle: 'rect' | 'circle';\n declare cornerDashArray: number[] | null;\n declare hasControls: boolean;\n\n declare borderColor: string;\n declare borderDashArray: number[] | null;\n declare borderOpacityWhenMoving: number;\n declare borderScaleFactor: number;\n declare hasBorders: boolean;\n declare selectionBackgroundColor: string;\n\n declare selectable: boolean;\n declare evented: boolean;\n declare perPixelTargetFind: boolean;\n declare activeOn: 'down' | 'up';\n\n declare hoverCursor: CSSStyleDeclaration['cursor'] | null;\n declare moveCursor: CSSStyleDeclaration['cursor'] | null;\n\n /**\n * The object's controls' position in viewport coordinates\n * Calculated by {@link Control#positionHandler} and {@link Control#calcCornerCoords}, depending on {@link padding}.\n * `corner/touchCorner` describe the 4 points forming the interactive area of the corner.\n * Used to draw and locate controls.\n */\n declare oCoords: Record;\n\n /**\n * keeps the value of the last hovered corner during mouse move.\n * 0 is no corner, or 'mt', 'ml', 'mtr' etc..\n * It should be private, but there is no harm in using it as\n * a read-only property.\n * this isn't cleaned automatically. Non selected objects may have wrong values\n * @type [string]\n */\n declare __corner?: string;\n\n /**\n * a map of control visibility for this object.\n * this was left when controls were introduced to not break the api too much\n * this takes priority over the generic control visibility\n */\n declare _controlsVisibility: Record;\n\n /**\n * holds the controls for the object.\n * controls are added by default_controls.js\n */\n declare controls: TControlSet;\n\n /**\n * internal boolean to signal the code that the object is\n * part of the move action.\n */\n declare isMoving?: boolean;\n\n /**\n * A boolean used from the gesture module to keep tracking of a scaling\n * action when there is no scaling transform in place.\n * This is an edge case and is used twice in all codebase.\n * Probably added to keep track of some performance issues\n * @TODO use git blame to investigate why it was added\n * DON'T USE IT. WE WILL TRY TO REMOVE IT\n */\n declare _scaling?: boolean;\n\n declare canvas?: Canvas;\n\n static ownDefaults = interactiveObjectDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...InteractiveFabricObject.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(\n this,\n (this.constructor as typeof InteractiveFabricObject).createControls(),\n InteractiveFabricObject.ownDefaults,\n );\n this.setOptions(options);\n }\n\n /**\n * Creates the default control object.\n * If you prefer to have on instance of controls shared among all objects\n * make this function return an empty object and add controls to the ownDefaults\n * @param {Object} [options] Options object\n */\n static createControls(): { controls: Record } {\n return { controls: createObjectDefaultControls() };\n }\n\n /**\n * Update width and height of the canvas for cache\n * returns true or false if canvas needed resize.\n * @private\n * @return {Boolean} true if the canvas has been resized\n */\n _updateCacheCanvas() {\n const targetCanvas = this.canvas;\n if (this.noScaleCache && targetCanvas && targetCanvas._currentTransform) {\n const transform = targetCanvas._currentTransform,\n target = transform.target,\n action = transform.action;\n if (\n this === (target as unknown as this) &&\n action &&\n action.startsWith(SCALE)\n ) {\n return false;\n }\n }\n return super._updateCacheCanvas();\n }\n\n getActiveControl() {\n const key = this.__corner;\n return key\n ? {\n key,\n control: this.controls[key],\n coord: this.oCoords[key],\n }\n : undefined;\n }\n\n /**\n * Determines which corner is under the mouse cursor, represented by `pointer`.\n * This function is return a corner only if the object is the active one.\n * This is done to avoid selecting corner of non active object and activating transformations\n * rather than drag action. The default behavior of fabricJS is that if you want to transform\n * an object, first you select it to show the control set\n * @private\n * @param {Object} pointer The pointer indicating the mouse position\n * @param {boolean} forTouch indicates if we are looking for interaction area with a touch action\n * @return {String|Boolean} corner code (tl, tr, bl, br, etc.), or 0 if nothing is found.\n */\n findControl(\n pointer: Point,\n forTouch = false,\n ): { key: string; control: Control; coord: TOCoord } | undefined {\n if (!this.hasControls || !this.canvas) {\n return undefined;\n }\n\n this.__corner = undefined;\n const cornerEntries = Object.entries(this.oCoords);\n for (let i = cornerEntries.length - 1; i >= 0; i--) {\n const [key, corner] = cornerEntries[i];\n const control = this.controls[key];\n\n if (\n control.shouldActivate(\n key,\n this,\n pointer,\n forTouch ? corner.touchCorner : corner.corner,\n )\n ) {\n // this.canvas.contextTop.fillRect(pointer.x - 1, pointer.y - 1, 2, 2);\n this.__corner = key;\n\n return { key, control, coord: this.oCoords[key] };\n }\n }\n\n return undefined;\n }\n\n /**\n * Calculates the coordinates of the center of each control plus the corners of the control itself\n * This basically just delegates to each control positionHandler\n * WARNING: changing what is passed to positionHandler is a breaking change, since position handler\n * is a public api and should be done just if extremely necessary\n * @return {Record}\n */\n calcOCoords(): Record {\n const vpt = this.getViewportTransform(),\n center = this.getCenterPoint(),\n tMatrix = createTranslateMatrix(center.x, center.y),\n rMatrix = createRotateMatrix({\n angle: this.getTotalAngle() - (!!this.group && this.flipX ? 180 : 0),\n }),\n positionMatrix = multiplyTransformMatrices(tMatrix, rMatrix),\n startMatrix = multiplyTransformMatrices(vpt, positionMatrix),\n finalMatrix = multiplyTransformMatrices(startMatrix, [\n 1 / vpt[0],\n 0,\n 0,\n 1 / vpt[3],\n 0,\n 0,\n ]),\n transformOptions = this.group\n ? qrDecompose(this.calcTransformMatrix())\n : undefined;\n // decomposing could bring negative scaling and `_calculateCurrentDimensions` can't take it\n if (transformOptions) {\n transformOptions.scaleX = Math.abs(transformOptions.scaleX);\n transformOptions.scaleY = Math.abs(transformOptions.scaleY);\n }\n const dim = this._calculateCurrentDimensions(transformOptions),\n coords: Record = {};\n\n this.forEachControl((control, key) => {\n const position = control.positionHandler(dim, finalMatrix, this, control);\n // coords[key] are sometimes used as points. Those are points to which we add\n // the property corner and touchCorner from `_calcCornerCoords`.\n // don't remove this assign for an object spread.\n coords[key] = Object.assign(\n position,\n this._calcCornerCoords(control, position),\n );\n });\n\n // debug code\n /*\n const canvas = this.canvas;\n setTimeout(function () {\n if (!canvas) return;\n canvas.contextTop.clearRect(0, 0, 700, 700);\n canvas.contextTop.fillStyle = 'green';\n Object.keys(coords).forEach(function(key) {\n const control = coords[key];\n canvas.contextTop.fillRect(control.x, control.y, 3, 3);\n });\n } 50);\n */\n return coords;\n }\n\n /**\n * Sets the coordinates that determine the interaction area of each control\n * note: if we would switch to ROUND corner area, all of this would disappear.\n * everything would resolve to a single point and a pythagorean theorem for the distance\n * @todo evaluate simplification of code switching to circle interaction area at runtime\n * @private\n */\n private _calcCornerCoords(control: Control, position: Point) {\n const angle = this.getTotalAngle();\n const corner = control.calcCornerCoords(\n angle,\n this.cornerSize,\n position.x,\n position.y,\n false,\n this,\n );\n const touchCorner = control.calcCornerCoords(\n angle,\n this.touchCornerSize,\n position.x,\n position.y,\n true,\n this,\n );\n return { corner, touchCorner };\n }\n\n /**\n * @override set controls' coordinates as well\n * See {@link https://github.com/fabricjs/fabric.js/wiki/When-to-call-setCoords} and {@link http://fabricjs.com/fabric-gotchas}\n * @return {void}\n */\n setCoords(): void {\n super.setCoords();\n this.canvas && (this.oCoords = this.calcOCoords());\n }\n\n /**\n * Calls a function for each control. The function gets called,\n * with the control, the control's key and the object that is calling the iterator\n * @param {Function} fn function to iterate over the controls over\n */\n forEachControl(\n fn: (\n control: Control,\n key: string,\n fabricObject: InteractiveFabricObject,\n ) => any,\n ) {\n for (const i in this.controls) {\n fn(this.controls[i], i, this);\n }\n }\n\n /**\n * Draws a colored layer behind the object, inside its selection borders.\n * Requires public options: padding, selectionBackgroundColor\n * this function is called when the context is transformed\n * has checks to be skipped when the object is on a staticCanvas\n * @todo evaluate if make this disappear in favor of a pre-render hook for objects\n * this was added by Andrea Bogazzi to make possible some feature for work reasons\n * it seemed a good option, now is an edge case\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n */\n drawSelectionBackground(ctx: CanvasRenderingContext2D): void {\n if (\n !this.selectionBackgroundColor ||\n (this.canvas && (this.canvas._activeObject as unknown as this) !== this)\n ) {\n return;\n }\n ctx.save();\n const center = this.getRelativeCenterPoint(),\n wh = this._calculateCurrentDimensions(),\n vpt = this.getViewportTransform();\n ctx.translate(center.x, center.y);\n ctx.scale(1 / vpt[0], 1 / vpt[3]);\n ctx.rotate(degreesToRadians(this.angle));\n ctx.fillStyle = this.selectionBackgroundColor;\n ctx.fillRect(-wh.x / 2, -wh.y / 2, wh.x, wh.y);\n ctx.restore();\n }\n\n /**\n * @public override this function in order to customize the drawing of the control box, e.g. rounded corners, different border style.\n * @param {CanvasRenderingContext2D} ctx ctx is rotated and translated so that (0,0) is at object's center\n * @param {Point} size the control box size used\n */\n strokeBorders(ctx: CanvasRenderingContext2D, size: Point): void {\n ctx.strokeRect(-size.x / 2, -size.y / 2, size.x, size.y);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Point} size\n * @param {TStyleOverride} styleOverride object to override the object style\n */\n _drawBorders(\n ctx: CanvasRenderingContext2D,\n size: Point,\n styleOverride: TStyleOverride = {},\n ): void {\n const options = {\n hasControls: this.hasControls,\n borderColor: this.borderColor,\n borderDashArray: this.borderDashArray,\n ...styleOverride,\n };\n ctx.save();\n ctx.strokeStyle = options.borderColor;\n this._setLineDash(ctx, options.borderDashArray);\n this.strokeBorders(ctx, size);\n options.hasControls && this.drawControlsConnectingLines(ctx, size);\n ctx.restore();\n }\n\n /**\n * Renders controls and borders for the object\n * the context here is not transformed\n * @todo move to interactivity\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {TStyleOverride} [styleOverride] properties to override the object style\n */\n _renderControls(\n ctx: CanvasRenderingContext2D,\n styleOverride: TStyleOverride = {},\n ) {\n const { hasBorders, hasControls } = this;\n const styleOptions = {\n hasBorders,\n hasControls,\n ...styleOverride,\n };\n const vpt = this.getViewportTransform(),\n shouldDrawBorders = styleOptions.hasBorders,\n shouldDrawControls = styleOptions.hasControls;\n const matrix = multiplyTransformMatrices(vpt, this.calcTransformMatrix());\n const options = qrDecompose(matrix);\n ctx.save();\n ctx.translate(options.translateX, options.translateY);\n ctx.lineWidth = 1 * this.borderScaleFactor;\n // since interactive groups have been introduced, an object could be inside a group and needing controls\n // the following equality check `this.group === this.parent` covers:\n // object without a group ( undefined === undefined )\n // object inside a group\n // excludes object inside a group but multi selected since group and parent will differ in value\n if (this.group === this.parent) {\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n }\n if (this.flipX) {\n options.angle -= 180;\n }\n ctx.rotate(degreesToRadians(this.group ? options.angle : this.angle));\n shouldDrawBorders && this.drawBorders(ctx, options, styleOverride);\n shouldDrawControls && this.drawControls(ctx, styleOverride);\n ctx.restore();\n }\n\n /**\n * Draws borders of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {object} options object representing current object parameters\n * @param {TStyleOverride} [styleOverride] object to override the object style\n */\n drawBorders(\n ctx: CanvasRenderingContext2D,\n options: TQrDecomposeOut,\n styleOverride: TStyleOverride,\n ): void {\n let size;\n if ((styleOverride && styleOverride.forActiveSelection) || this.group) {\n const bbox = sizeAfterTransform(\n this.width,\n this.height,\n calcDimensionsMatrix(options),\n ),\n stroke = !this.isStrokeAccountedForInDimensions()\n ? (this.strokeUniform\n ? new Point().scalarAdd(this.canvas ? this.canvas.getZoom() : 1)\n : // this is extremely confusing. options comes from the upper function\n // and is the qrDecompose of a matrix that takes in account zoom too\n new Point(options.scaleX, options.scaleY)\n ).scalarMultiply(this.strokeWidth)\n : ZERO;\n size = bbox\n .add(stroke)\n .scalarAdd(this.borderScaleFactor)\n .scalarAdd(this.padding * 2);\n } else {\n size = this._calculateCurrentDimensions().scalarAdd(\n this.borderScaleFactor,\n );\n }\n this._drawBorders(ctx, size, styleOverride);\n }\n\n /**\n * Draws lines from a borders of an object's bounding box to controls that have `withConnection` property set.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Point} size object size x = width, y = height\n */\n drawControlsConnectingLines(\n ctx: CanvasRenderingContext2D,\n size: Point,\n ): void {\n let shouldStroke = false;\n\n ctx.beginPath();\n this.forEachControl((control, key) => {\n // in this moment, the ctx is centered on the object.\n // width and height of the above function are the size of the bbox.\n if (control.withConnection && control.getVisibility(this, key)) {\n // reset movement for each control\n shouldStroke = true;\n ctx.moveTo(control.x * size.x, control.y * size.y);\n ctx.lineTo(\n control.x * size.x + control.offsetX,\n control.y * size.y + control.offsetY,\n );\n }\n });\n shouldStroke && ctx.stroke();\n }\n\n /**\n * Draws corners of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: cornerSize, padding\n * Be aware that since fabric 6.0 this function does not call setCoords anymore.\n * setCoords needs to be called manually if the object of which we are rendering controls\n * is outside the standard selection and transform process.\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {ControlRenderingStyleOverride} styleOverride object to override the object style\n */\n drawControls(\n ctx: CanvasRenderingContext2D,\n styleOverride: ControlRenderingStyleOverride = {},\n ) {\n ctx.save();\n const retinaScaling = this.getCanvasRetinaScaling();\n const { cornerStrokeColor, cornerDashArray, cornerColor } = this;\n const options = {\n cornerStrokeColor,\n cornerDashArray,\n cornerColor,\n ...styleOverride,\n };\n ctx.setTransform(retinaScaling, 0, 0, retinaScaling, 0, 0);\n ctx.strokeStyle = ctx.fillStyle = options.cornerColor;\n if (!this.transparentCorners) {\n ctx.strokeStyle = options.cornerStrokeColor;\n }\n this._setLineDash(ctx, options.cornerDashArray);\n this.forEachControl((control, key) => {\n if (control.getVisibility(this, key)) {\n const p = this.oCoords[key];\n control.render(ctx, p.x, p.y, options, this);\n }\n });\n ctx.restore();\n }\n\n /**\n * Returns true if the specified control is visible, false otherwise.\n * @param {string} controlKey The key of the control. Possible values are usually 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr',\n * but since the control api allow for any control name, can be any string.\n * @returns {boolean} true if the specified control is visible, false otherwise\n */\n isControlVisible(controlKey: string): boolean {\n return (\n this.controls[controlKey] &&\n this.controls[controlKey].getVisibility(this, controlKey)\n );\n }\n\n /**\n * Sets the visibility of the specified control.\n * please do not use.\n * @param {String} controlKey The key of the control. Possible values are 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr'.\n * but since the control api allow for any control name, can be any string.\n * @param {Boolean} visible true to set the specified control visible, false otherwise\n * @todo discuss this overlap of priority here with the team. Andrea Bogazzi for details\n */\n setControlVisible(controlKey: string, visible: boolean) {\n if (!this._controlsVisibility) {\n this._controlsVisibility = {};\n }\n this._controlsVisibility[controlKey] = visible;\n }\n\n /**\n * Sets the visibility state of object controls, this is just a bulk option for setControlVisible;\n * @param {Record} [options] with an optional key per control\n * example: {Boolean} [options.bl] true to enable the bottom-left control, false to disable it\n */\n setControlsVisibility(options: Record = {}) {\n Object.entries(options).forEach(([controlKey, visibility]) =>\n this.setControlVisible(controlKey, visibility),\n );\n }\n\n /**\n * Clears the canvas.contextTop in a specific area that corresponds to the object's bounding box\n * that is in the canvas.contextContainer.\n * This function is used to clear pieces of contextTop where we render ephemeral effects on top of the object.\n * Example: blinking cursor text selection, drag effects.\n * @todo discuss swapping restoreManually with a renderCallback, but think of async issues\n * @param {Boolean} [restoreManually] When true won't restore the context after clear, in order to draw something else.\n * @return {CanvasRenderingContext2D|undefined} canvas.contextTop that is either still transformed\n * with the object transformMatrix, or restored to neutral transform\n */\n clearContextTop(\n restoreManually?: boolean,\n ): CanvasRenderingContext2D | undefined {\n if (!this.canvas) {\n return;\n }\n const ctx = this.canvas.contextTop;\n if (!ctx) {\n return;\n }\n const v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n this.transform(ctx);\n // we add 4 pixel, to be sure to do not leave any pixel out\n const width = this.width + 4,\n height = this.height + 4;\n ctx.clearRect(-width / 2, -height / 2, width, height);\n\n restoreManually || ctx.restore();\n return ctx;\n }\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to deselect this object. If the function returns true, the process is cancelled\n * @param {Object} [_options] options sent from the upper functions\n * @param {TPointerEvent} [options.e] event if the process is generated by an event\n * @param {FabricObject} [options.object] next object we are setting as active, and reason why\n * this is being deselected\n */\n onDeselect(_options?: {\n e?: TPointerEvent;\n object?: InteractiveFabricObject;\n }): boolean {\n // implemented by sub-classes, as needed.\n return false;\n }\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to select this object. If the function returns true, the process is cancelled\n * @param {Object} [_options] options sent from the upper functions\n * @param {Event} [_options.e] event if the process is generated by an event\n */\n onSelect(_options?: { e?: TPointerEvent }): boolean {\n // implemented by sub-classes, as needed.\n return false;\n }\n\n /**\n * Override to customize Drag behavior\n * Fired from {@link Canvas#_onMouseMove}\n * @returns true in order for the window to start a drag session\n */\n shouldStartDragging(_e: TPointerEvent) {\n return false;\n }\n\n /**\n * Override to customize Drag behavior\\\n * Fired once a drag session has started\n * @returns true to handle the drag event\n */\n onDragStart(_e: DragEvent) {\n return false;\n }\n\n /**\n * Override to customize drag and drop behavior\n * @public\n * @param {DragEvent} _e\n * @returns {boolean} true if the object currently dragged can be dropped on the target\n */\n canDrop(_e: DragEvent): boolean {\n return false;\n }\n\n /**\n * Override to customize drag and drop behavior\n * render a specific effect when an object is the source of a drag event\n * example: render the selection status for the part of text that is being dragged from a text object\n * @public\n * @param {DragEvent} _e\n */\n renderDragSourceEffect(_e: DragEvent) {\n // for subclasses\n }\n\n /**\n * Override to customize drag and drop behavior\n * render a specific effect when an object is the target of a drag event\n * used to show that the underly object can receive a drop, or to show how the\n * object will change when dropping. example: show the cursor where the text is about to be dropped\n * @public\n * @param {DragEvent} _e\n */\n renderDropTargetEffect(_e: DragEvent) {\n // for subclasses\n }\n}\n","import type { Constructor } from '../typedefs';\n\n/***\n * https://www.typescriptlang.org/docs/handbook/mixins.html#alternative-pattern\n */\nexport function applyMixins(\n derivedCtor: T,\n constructors: S[],\n) {\n constructors.forEach((baseCtor) => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\n name !== 'constructor' &&\n Object.defineProperty(\n derivedCtor.prototype,\n name,\n Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||\n Object.create(null),\n );\n });\n });\n return derivedCtor as T & { prototype: InstanceType };\n}\n","import type { ObjectEvents } from '../../EventTypeDefs';\nimport { FabricObjectSVGExportMixin } from './FabricObjectSVGExportMixin';\nimport { InteractiveFabricObject } from './InteractiveObject';\nimport { applyMixins } from '../../util/applyMixins';\nimport type { FabricObjectProps } from './types/FabricObjectProps';\nimport type { TFabricObjectProps, SerializedObjectProps } from './types';\nimport { classRegistry } from '../../ClassRegistry';\n\n// TODO somehow we have to make a tree-shakeable import\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface FabricObject<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Props extends TFabricObjectProps = Partial,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n SProps extends SerializedObjectProps = SerializedObjectProps,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObjectSVGExportMixin {}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class FabricObject<\n Props extends TFabricObjectProps = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends InteractiveFabricObject {}\n\napplyMixins(FabricObject, [FabricObjectSVGExportMixin]);\n\nclassRegistry.setClass(FabricObject);\nclassRegistry.setClass(FabricObject, 'object');\n\nexport { cacheProperties } from './defaultValues';\n","/**\n * Returns true if context has transparent pixel\n * at specified location (taking tolerance into account)\n * @param {CanvasRenderingContext2D} ctx context\n * @param {Number} x x coordinate in canvasElementCoordinate, not fabric space. integer\n * @param {Number} y y coordinate in canvasElementCoordinate, not fabric space. integer\n * @param {Number} tolerance Tolerance pixels around the point, not alpha tolerance, integer\n * @return {boolean} true if transparent\n */\nexport const isTransparent = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n tolerance: number,\n): boolean => {\n tolerance = Math.round(tolerance);\n const size = tolerance * 2 + 1;\n const { data } = ctx.getImageData(x - tolerance, y - tolerance, size, size);\n\n // Split image data - for tolerance > 1, pixelDataSize = 4;\n for (let i = 3; i < data.length; i += 4) {\n const alphaChannel = data[i];\n if (alphaChannel > 0) {\n return false;\n }\n }\n return true;\n};\n","import type { Point } from '../../Point';\nimport type { TRadian } from '../../typedefs';\n/**\n * Rotates `point` around `origin` with `radians`\n * @deprecated use the Point.rotate\n * @param {Point} origin The origin of the rotation\n * @param {Point} origin The origin of the rotation\n * @param {TRadian} radians The radians of the angle for the rotation\n * @return {Point} The new rotated point\n */\nexport const rotatePoint = (\n point: Point,\n origin: Point,\n radians: TRadian,\n): Point => point.rotate(radians, origin);\n","export const findIndexRight = (\n array: T[],\n predicate: (value: T, index: number, array: T[]) => boolean,\n) => {\n for (let index = array.length - 1; index >= 0; index--) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\n","import type { XY } from '../../../Point';\nimport { Point } from '../../../Point';\nimport { degreesToRadians } from '../radiansDegreesConversion';\nimport { createVector } from '../vectors';\nimport type { TProjectStrokeOnPointsOptions, TProjection } from './types';\n\n/**\n * @see https://github.com/fabricjs/fabric.js/pull/8344\n * @todo consider removing skewing from points before calculating stroke projection,\n * see https://github.com/fabricjs/fabric.js/commit/494a10ee2f8c2278ae9a55b20bf50cf6ee25b064#commitcomment-94751537\n */\nexport abstract class StrokeProjectionsBase {\n declare options: TProjectStrokeOnPointsOptions;\n declare scale: Point;\n declare strokeUniformScalar: Point;\n declare strokeProjectionMagnitude: number;\n\n constructor(options: TProjectStrokeOnPointsOptions) {\n this.options = options;\n this.strokeProjectionMagnitude = this.options.strokeWidth / 2;\n this.scale = new Point(this.options.scaleX, this.options.scaleY);\n this.strokeUniformScalar = this.options.strokeUniform\n ? new Point(1 / this.options.scaleX, 1 / this.options.scaleY)\n : new Point(1, 1);\n }\n\n /**\n * When the stroke is uniform, scaling affects the arrangement of points. So we must take it into account.\n */\n protected createSideVector(from: XY, to: XY) {\n const v = createVector(from, to);\n return this.options.strokeUniform ? v.multiply(this.scale) : v;\n }\n\n protected abstract calcOrthogonalProjection(\n from: Point,\n to: Point,\n magnitude?: number,\n ): Point;\n\n protected projectOrthogonally(from: Point, to: Point, magnitude?: number) {\n return this.applySkew(\n from.add(this.calcOrthogonalProjection(from, to, magnitude)),\n );\n }\n\n protected isSkewed() {\n return this.options.skewX !== 0 || this.options.skewY !== 0;\n }\n\n protected applySkew(point: Point) {\n const p = new Point(point);\n // skewY must be applied before skewX as this distortion affects skewX calculation\n p.y += p.x * Math.tan(degreesToRadians(this.options.skewY));\n p.x += p.y * Math.tan(degreesToRadians(this.options.skewX));\n return p;\n }\n\n protected scaleUnitVector(unitVector: Point, scalar: number) {\n return unitVector.multiply(this.strokeUniformScalar).scalarMultiply(scalar);\n }\n\n protected abstract projectPoints(): Point[];\n\n public abstract project(): TProjection[];\n}\n","import type { XY } from '../../../Point';\nimport { Point } from '../../../Point';\nimport { halfPI, twoMathPi } from '../../../constants';\nimport type { TRadian } from '../../../typedefs';\nimport { degreesToRadians } from '../radiansDegreesConversion';\nimport {\n calcAngleBetweenVectors,\n calcVectorRotation,\n crossProduct,\n getOrthonormalVector,\n getUnitVector,\n isBetweenVectors,\n magnitude,\n rotateVector,\n} from '../vectors';\nimport { StrokeProjectionsBase } from './StrokeProjectionsBase';\nimport type { TProjection, TProjectStrokeOnPointsOptions } from './types';\n\nconst zeroVector = new Point();\n\n/**\n * class in charge of finding projections for each type of line join\n * @see {@link [Closed path projections at #8344](https://github.com/fabricjs/fabric.js/pull/8344#2-closed-path)}\n *\n * - MDN:\n * - https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin\n * - https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin\n * - Spec: https://svgwg.org/svg2-draft/painting.html#StrokeLinejoinProperty\n * - Playground to understand how the line joins works: https://hypertolosana.github.io/efficient-webgl-stroking/index.html\n * - View the calculated projections for each of the control points: https://codesandbox.io/s/project-stroke-points-with-context-to-trace-b8jc4j?file=/src/index.js\n *\n */\nexport class StrokeLineJoinProjections extends StrokeProjectionsBase {\n /**\n * The point being projected (the angle ∠BAC)\n */\n declare A: Point;\n /**\n * The point before A\n */\n declare B: Point;\n /**\n * The point after A\n */\n declare C: Point;\n /**\n * The AB vector\n */\n AB: Point;\n /**\n * The AC vector\n */\n AC: Point;\n /**\n * The angle of A (∠BAC)\n */\n alpha: TRadian;\n /**\n * The bisector of A (∠BAC)\n */\n bisector: Point;\n\n static getOrthogonalRotationFactor(vector1: Point, vector2?: Point) {\n const angle = vector2\n ? calcAngleBetweenVectors(vector1, vector2)\n : calcVectorRotation(vector1);\n return Math.abs(angle) < halfPI ? -1 : 1;\n }\n\n constructor(A: XY, B: XY, C: XY, options: TProjectStrokeOnPointsOptions) {\n super(options);\n this.A = new Point(A);\n this.B = new Point(B);\n this.C = new Point(C);\n this.AB = this.createSideVector(this.A, this.B);\n this.AC = this.createSideVector(this.A, this.C);\n this.alpha = calcAngleBetweenVectors(this.AB, this.AC);\n this.bisector = getUnitVector(\n // if AC is also the zero vector nothing will be projected\n // in that case the next point will handle the projection\n rotateVector(this.AB.eq(zeroVector) ? this.AC : this.AB, this.alpha / 2),\n );\n }\n\n calcOrthogonalProjection(\n from: Point,\n to: Point,\n magnitude: number = this.strokeProjectionMagnitude,\n ) {\n const vector = this.createSideVector(from, to);\n const orthogonalProjection = getOrthonormalVector(vector);\n const correctSide = StrokeLineJoinProjections.getOrthogonalRotationFactor(\n orthogonalProjection,\n this.bisector,\n );\n return this.scaleUnitVector(orthogonalProjection, magnitude * correctSide);\n }\n\n /**\n * BEVEL\n * Calculation: the projection points are formed by the vector orthogonal to the vertex.\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-2-bevel\n */\n projectBevel() {\n const projections: Point[] = [];\n // if `alpha` equals 0 or 2*PI, the projections are the same for `B` and `C`\n (this.alpha % twoMathPi === 0 ? [this.B] : [this.B, this.C]).forEach(\n (to) => {\n projections.push(this.projectOrthogonally(this.A, to));\n projections.push(\n this.projectOrthogonally(this.A, to, -this.strokeProjectionMagnitude),\n );\n },\n );\n return projections;\n }\n\n /**\n * MITER\n * Calculation: the corner is formed by extending the outer edges of the stroke\n * at the tangents of the path segments until they intersect.\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-1-miter\n */\n projectMiter() {\n const projections: Point[] = [],\n alpha = Math.abs(this.alpha),\n hypotUnitScalar = 1 / Math.sin(alpha / 2),\n miterVector = this.scaleUnitVector(\n this.bisector,\n -this.strokeProjectionMagnitude * hypotUnitScalar,\n );\n\n // When two line segments meet at a sharp angle, it is possible for the join to extend,\n // far beyond the thickness of the line stroking the path. The stroke-miterlimit imposes\n // a limit on the extent of the line join.\n // MDN: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit\n // When the stroke is uniform, scaling changes the arrangement of points, this changes the miter-limit\n const strokeMiterLimit = this.options.strokeUniform\n ? magnitude(\n this.scaleUnitVector(this.bisector, this.options.strokeMiterLimit),\n )\n : this.options.strokeMiterLimit;\n\n if (\n magnitude(miterVector) / this.strokeProjectionMagnitude <=\n strokeMiterLimit\n ) {\n projections.push(this.applySkew(this.A.add(miterVector)));\n }\n /* when the miter-limit is reached, the stroke line join becomes of type bevel.\n We always need two orthogonal projections which are basically bevel-type projections,\n so regardless of whether the miter-limit was reached or not, we include these projections.\n */\n projections.push(...this.projectBevel());\n\n return projections;\n }\n\n /**\n * ROUND (without skew)\n * Calculation: the projections are the two vectors parallel to X and Y axes\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-3-1-round-without-skew\n */\n private projectRoundNoSkew(startCircle: Point, endCircle: Point) {\n const projections: Point[] = [],\n // correctSide is used to only consider projecting for the outer side\n correctSide = new Point(\n StrokeLineJoinProjections.getOrthogonalRotationFactor(this.bisector),\n StrokeLineJoinProjections.getOrthogonalRotationFactor(\n new Point(this.bisector.y, this.bisector.x),\n ),\n ),\n radiusOnAxisX = new Point(1, 0)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar)\n .multiply(correctSide),\n radiusOnAxisY = new Point(0, 1)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar)\n .multiply(correctSide);\n\n [radiusOnAxisX, radiusOnAxisY].forEach((vector) => {\n if (isBetweenVectors(vector, startCircle, endCircle)) {\n projections.push(this.A.add(vector));\n }\n });\n return projections;\n }\n\n /**\n * ROUND (with skew)\n * Calculation: the projections are the points furthest from the vertex in\n * the direction of the X and Y axes after distortion.\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-3-2-round-skew\n */\n private projectRoundWithSkew(startCircle: Point, endCircle: Point) {\n const projections: Point[] = [];\n\n const { skewX, skewY, scaleX, scaleY, strokeUniform } = this.options,\n shearing = new Point(\n Math.tan(degreesToRadians(skewX)),\n Math.tan(degreesToRadians(skewY)),\n );\n // The points furthest from the vertex in the direction of the X and Y axes after distortion\n const circleRadius = this.strokeProjectionMagnitude,\n newY = strokeUniform\n ? circleRadius /\n scaleY /\n Math.sqrt(1 / scaleY ** 2 + (1 / scaleX ** 2) * shearing.y ** 2)\n : circleRadius / Math.sqrt(1 + shearing.y ** 2),\n furthestY = new Point(\n // Safe guard due to floating point precision. In some situations the square root\n // was returning NaN because of a negative number close to zero.\n Math.sqrt(Math.max(circleRadius ** 2 - newY ** 2, 0)),\n newY,\n ),\n newX = strokeUniform\n ? circleRadius /\n Math.sqrt(\n 1 +\n (shearing.x ** 2 * (1 / scaleY) ** 2) /\n (1 / scaleX + (1 / scaleX) * shearing.x * shearing.y) ** 2,\n )\n : circleRadius /\n Math.sqrt(1 + shearing.x ** 2 / (1 + shearing.x * shearing.y) ** 2),\n furthestX = new Point(\n newX,\n Math.sqrt(Math.max(circleRadius ** 2 - newX ** 2, 0)),\n );\n\n [\n furthestX,\n furthestX.scalarMultiply(-1),\n furthestY,\n furthestY.scalarMultiply(-1),\n ]\n // We need to skew the vector here as this information is used to check if\n // it is between the start and end of the circle segment\n .map((vector) =>\n this.applySkew(\n strokeUniform ? vector.multiply(this.strokeUniformScalar) : vector,\n ),\n )\n .forEach((vector) => {\n if (isBetweenVectors(vector, startCircle, endCircle)) {\n projections.push(this.applySkew(this.A).add(vector));\n }\n });\n\n return projections;\n }\n\n projectRound() {\n const projections: Point[] = [];\n /* Include the start and end points of the circle segment, so that only\n the projections contained within it are included */\n // add the orthogonal projections (start and end points of circle segment)\n projections.push(...this.projectBevel());\n // let's determines which one of the orthogonal projection is the beginning and end of the circle segment.\n // when `alpha` equals 0 or 2*PI, we have a straight line, so the way to find the start/end is different.\n const isStraightLine = this.alpha % twoMathPi === 0,\n // change the origin of the projections to point A\n // so that the cross product calculation is correct\n newOrigin = this.applySkew(this.A),\n proj0 = projections[isStraightLine ? 0 : 2].subtract(newOrigin),\n proj1 = projections[isStraightLine ? 1 : 0].subtract(newOrigin),\n // when `isStraightLine` === true, we compare with the vector opposite AB, otherwise we compare with the bisector.\n comparisonVector = isStraightLine\n ? this.applySkew(this.AB.scalarMultiply(-1))\n : this.applySkew(\n this.bisector.multiply(this.strokeUniformScalar).scalarMultiply(-1),\n ),\n // the beginning of the circle segment is always to the right of the comparison vector (cross product > 0)\n isProj0Start = crossProduct(proj0, comparisonVector) > 0,\n startCircle = isProj0Start ? proj0 : proj1,\n endCircle = isProj0Start ? proj1 : proj0;\n if (!this.isSkewed()) {\n projections.push(...this.projectRoundNoSkew(startCircle, endCircle));\n } else {\n projections.push(...this.projectRoundWithSkew(startCircle, endCircle));\n }\n return projections;\n }\n\n /**\n * Project stroke width on points returning projections for each point as follows:\n * - `miter`: 1 point corresponding to the outer boundary. If the miter limit is exceeded, it will be 2 points (becomes bevel)\n * - `bevel`: 2 points corresponding to the bevel possible boundaries, orthogonal to the stroke.\n * - `round`: same as `bevel` when it has no skew, with skew are 4 points.\n */\n protected projectPoints() {\n switch (this.options.strokeLineJoin) {\n case 'miter':\n return this.projectMiter();\n case 'round':\n return this.projectRound();\n default:\n return this.projectBevel();\n }\n }\n\n public project(): TProjection[] {\n return this.projectPoints().map((point) => ({\n originPoint: this.A,\n projectedPoint: point,\n angle: this.alpha,\n bisector: this.bisector,\n }));\n }\n}\n","import type { XY } from '../../../Point';\nimport { Point } from '../../../Point';\nimport { getOrthonormalVector, getUnitVector } from '../vectors';\nimport { StrokeLineJoinProjections } from './StrokeLineJoinProjections';\nimport { StrokeProjectionsBase } from './StrokeProjectionsBase';\nimport type { TProjection, TProjectStrokeOnPointsOptions } from './types';\n\n/**\n * class in charge of finding projections for each type of line cap for start/end of an open path\n * @see {@link [Open path projections at #8344](https://github.com/fabricjs/fabric.js/pull/8344#1-open-path)}\n *\n * Reference:\n * - MDN:\n * - https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap\n * - https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap\n * - Spec: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-linecap-dev\n * - Playground to understand how the line joins works: https://hypertolosana.github.io/efficient-webgl-stroking/index.html\n * - View the calculated projections for each of the control points: https://codesandbox.io/s/project-stroke-points-with-context-to-trace-b8jc4j?file=/src/index.js\n */\nexport class StrokeLineCapProjections extends StrokeProjectionsBase {\n /**\n * edge point\n */\n declare A: Point;\n /**\n * point next to edge point\n */\n declare T: Point;\n\n constructor(A: XY, T: XY, options: TProjectStrokeOnPointsOptions) {\n super(options);\n this.A = new Point(A);\n this.T = new Point(T);\n }\n\n calcOrthogonalProjection(\n from: Point,\n to: Point,\n magnitude: number = this.strokeProjectionMagnitude,\n ) {\n const vector = this.createSideVector(from, to);\n return this.scaleUnitVector(getOrthonormalVector(vector), magnitude);\n }\n\n /**\n * OPEN PATH START/END - Line cap: Butt\n * Calculation: to find the projections, just find the points orthogonal to the stroke\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#1-1-butt\n */\n projectButt() {\n return [\n this.projectOrthogonally(this.A, this.T, this.strokeProjectionMagnitude),\n this.projectOrthogonally(this.A, this.T, -this.strokeProjectionMagnitude),\n ];\n }\n\n /**\n * OPEN PATH START/END - Line cap: Round\n * Calculation: same as stroke line join `round`\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#1-2-round\n */\n projectRound() {\n const projections: Point[] = [];\n\n if (!this.isSkewed() && this.A.eq(this.T)) {\n /* 1 point case without `skew`\n When `strokeUniform` is true, scaling has no effect.\n So we divide by scale, to remove its effect.\n */\n const projection = new Point(1, 1)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar);\n projections.push(\n this.applySkew(this.A.add(projection)),\n this.applySkew(this.A.subtract(projection)),\n );\n } else {\n projections.push(\n ...new StrokeLineJoinProjections(\n this.A,\n this.T,\n this.T,\n this.options,\n ).projectRound(),\n );\n }\n\n return projections;\n }\n\n /**\n * OPEN PATH START/END - Line cap: Square\n * Calculation: project a rectangle of points on the stroke in the opposite direction of the vector `AT`\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#1-3-square\n */\n projectSquare() {\n const projections: Point[] = [];\n\n if (this.A.eq(this.T)) {\n /* 1 point case without `skew`\n When `strokeUniform` is true, scaling has no effect.\n So we divide by scale, to remove its effect.\n */\n const projection = new Point(1, 1)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar);\n projections.push(this.A.add(projection), this.A.subtract(projection));\n } else {\n const orthogonalProjection = this.calcOrthogonalProjection(\n this.A,\n this.T,\n this.strokeProjectionMagnitude,\n );\n const strokePointingOut = this.scaleUnitVector(\n getUnitVector(this.createSideVector(this.A, this.T)),\n -this.strokeProjectionMagnitude,\n );\n const projectedA = this.A.add(strokePointingOut);\n projections.push(\n projectedA.add(orthogonalProjection),\n projectedA.subtract(orthogonalProjection),\n );\n }\n\n return projections.map((p) => this.applySkew(p));\n }\n\n protected projectPoints() {\n switch (this.options.strokeLineCap) {\n case 'round':\n return this.projectRound();\n case 'square':\n return this.projectSquare();\n default:\n return this.projectButt();\n }\n }\n\n public project(): TProjection[] {\n return this.projectPoints().map((point) => ({\n originPoint: this.A,\n projectedPoint: point,\n }));\n }\n}\n","import { Point, type XY } from '../../../Point';\nimport { findIndexRight } from '../../internals/findRight';\nimport { StrokeLineCapProjections } from './StrokeLineCapProjections';\nimport { StrokeLineJoinProjections } from './StrokeLineJoinProjections';\nimport type { TProjection, TProjectStrokeOnPointsOptions } from './types';\n\nexport * from './types';\n\n/**\n *\n * Used to calculate object's bounding box\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344\n *\n */\nexport const projectStrokeOnPoints = (\n points: XY[],\n options: TProjectStrokeOnPointsOptions,\n openPath = false,\n): TProjection[] => {\n const projections: TProjection[] = [];\n\n if (points.length === 0) {\n return projections;\n }\n\n // first we remove duplicate neighboring points\n const reduced = points.reduce(\n (reduced, point) => {\n if (!reduced[reduced.length - 1].eq(point)) {\n reduced.push(new Point(point));\n }\n return reduced;\n },\n [new Point(points[0])],\n );\n\n if (reduced.length === 1) {\n openPath = true;\n } else if (!openPath) {\n // remove points from end in case they equal the first point\n // in order to correctly project the first point\n const start = reduced[0];\n const index = findIndexRight(reduced, (point) => !point.eq(start));\n reduced.splice(index + 1);\n }\n\n reduced.forEach((A, index, points) => {\n let B: XY, C: XY;\n if (index === 0) {\n C = points[1];\n B = openPath ? A : points[points.length - 1];\n } else if (index === points.length - 1) {\n B = points[index - 1];\n C = openPath ? A : points[0];\n } else {\n B = points[index - 1];\n C = points[index + 1];\n }\n\n if (openPath && points.length === 1) {\n projections.push(\n ...new StrokeLineCapProjections(A, A, options).project(),\n );\n } else if (openPath && (index === 0 || index === points.length - 1)) {\n projections.push(\n ...new StrokeLineCapProjections(\n A,\n index === 0 ? C : B,\n options,\n ).project(),\n );\n } else {\n projections.push(\n ...new StrokeLineJoinProjections(A, B, C, options).project(),\n );\n }\n });\n\n return projections;\n};\n","import type { TextStyle } from '../../shapes/Text/StyledText';\n\nexport const cloneStyles = (style: TextStyle): TextStyle => {\n const newObj: TextStyle = {};\n Object.keys(style).forEach((key) => {\n newObj[key] = {};\n Object.keys(style[key]).forEach((keyInner) => {\n newObj[key][keyInner] = { ...style[key][keyInner] };\n });\n });\n return newObj;\n};\n","/**\n * Capitalizes a string\n * @param {String} string String to capitalize\n * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized\n * and other letters stay untouched, if false first letter is capitalized\n * and other letters are converted to lowercase.\n * @return {String} Capitalized version of a string\n */\nexport const capitalize = (string: string, firstLetterOnly = false): string =>\n `${string.charAt(0).toUpperCase()}${\n firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase()\n }`;\n\n/**\n * Escapes XML in a string\n * @param {String} string String to escape\n * @return {String} Escaped version of a string\n */\nexport const escapeXml = (string: string): string =>\n string\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(//g, '>');\n\n/**\n * Divide a string in the user perceived single units\n * @param {String} textstring String to escape\n * @return {Array} array containing the graphemes\n */\nexport const graphemeSplit = (textstring: string): string[] => {\n const graphemes = [];\n for (let i = 0, chr; i < textstring.length; i++) {\n if ((chr = getWholeChar(textstring, i)) === false) {\n continue;\n }\n graphemes.push(chr as string);\n }\n return graphemes;\n};\n\n// taken from mdn in the charAt doc page.\nconst getWholeChar = (str: string, i: number): string | boolean => {\n const code = str.charCodeAt(i);\n if (isNaN(code)) {\n return ''; // Position not found\n }\n if (code < 0xd800 || code > 0xdfff) {\n return str.charAt(i);\n }\n\n // High surrogate (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xd800 <= code && code <= 0xdbff) {\n if (str.length <= i + 1) {\n throw 'High surrogate without following low surrogate';\n }\n const next = str.charCodeAt(i + 1);\n if (0xdc00 > next || next > 0xdfff) {\n throw 'High surrogate without following low surrogate';\n }\n return str.charAt(i) + str.charAt(i + 1);\n }\n // Low surrogate (0xDC00 <= code && code <= 0xDFFF)\n if (i === 0) {\n throw 'Low surrogate without preceding high surrogate';\n }\n const prev = str.charCodeAt(i - 1);\n\n // (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xd800 > prev || prev > 0xdbff) {\n throw 'Low surrogate without preceding high surrogate';\n }\n // We can pass over low surrogates now as the second component\n // in a pair which we have already processed\n return false;\n};\n","import { reNewline } from '../../constants';\nimport type {\n TextStyle,\n TextStyleDeclaration,\n} from '../../shapes/Text/StyledText';\nimport { cloneStyles } from '../internals/cloneStyles';\nimport { graphemeSplit } from '../lang_string';\n\nexport type TextStyleArray = {\n start: number;\n end: number;\n style: TextStyleDeclaration;\n}[];\n\n/**\n * @param {Object} prevStyle first style to compare\n * @param {Object} thisStyle second style to compare\n * @param {boolean} forTextSpans whether to check overline, underline, and line-through properties\n * @return {boolean} true if the style changed\n */\nexport const hasStyleChanged = (\n prevStyle: TextStyleDeclaration,\n thisStyle: TextStyleDeclaration,\n forTextSpans = false,\n) =>\n prevStyle.fill !== thisStyle.fill ||\n prevStyle.stroke !== thisStyle.stroke ||\n prevStyle.strokeWidth !== thisStyle.strokeWidth ||\n prevStyle.fontSize !== thisStyle.fontSize ||\n prevStyle.fontFamily !== thisStyle.fontFamily ||\n prevStyle.fontWeight !== thisStyle.fontWeight ||\n prevStyle.fontStyle !== thisStyle.fontStyle ||\n prevStyle.textBackgroundColor !== thisStyle.textBackgroundColor ||\n prevStyle.deltaY !== thisStyle.deltaY ||\n (forTextSpans &&\n (prevStyle.overline !== thisStyle.overline ||\n prevStyle.underline !== thisStyle.underline ||\n prevStyle.linethrough !== thisStyle.linethrough));\n\n/**\n * Returns the array form of a text object's inline styles property with styles grouped in ranges\n * rather than per character. This format is less verbose, and is better suited for storage\n * so it is used in serialization (not during runtime).\n * @param {object} styles per character styles for a text object\n * @param {String} text the text string that the styles are applied to\n * @return {{start: number, end: number, style: object}[]}\n */\nexport const stylesToArray = (\n styles: TextStyle,\n text: string,\n): TextStyleArray => {\n const textLines = text.split('\\n'),\n stylesArray = [];\n let charIndex = -1,\n prevStyle = {};\n // clone style structure to prevent mutation\n styles = cloneStyles(styles);\n\n //loop through each textLine\n for (let i = 0; i < textLines.length; i++) {\n const chars = graphemeSplit(textLines[i]);\n if (!styles[i]) {\n //no styles exist for this line, so add the line's length to the charIndex total and reset prevStyle\n charIndex += chars.length;\n prevStyle = {};\n continue;\n }\n //loop through each character of the current line\n for (let c = 0; c < chars.length; c++) {\n charIndex++;\n const thisStyle = styles[i][c];\n //check if style exists for this character\n if (thisStyle && Object.keys(thisStyle).length > 0) {\n if (hasStyleChanged(prevStyle, thisStyle, true)) {\n stylesArray.push({\n start: charIndex,\n end: charIndex + 1,\n style: thisStyle,\n });\n } else {\n //if style is the same as previous character, increase end index\n stylesArray[stylesArray.length - 1].end++;\n }\n }\n prevStyle = thisStyle || {};\n }\n }\n return stylesArray;\n};\n\n/**\n * Returns the object form of the styles property with styles that are assigned per\n * character rather than grouped by range. This format is more verbose, and is\n * only used during runtime (not for serialization/storage)\n * @param {Array} styles the serialized form of a text object's styles\n * @param {String} text the text string that the styles are applied to\n * @return {Object}\n */\nexport const stylesFromArray = (\n styles: TextStyleArray | TextStyle,\n text: string,\n): TextStyle => {\n if (!Array.isArray(styles)) {\n // clone to prevent mutation\n return cloneStyles(styles);\n }\n const textLines = text.split(reNewline),\n stylesObject: TextStyle = {};\n let charIndex = -1,\n styleIndex = 0;\n //loop through each textLine\n for (let i = 0; i < textLines.length; i++) {\n const chars = graphemeSplit(textLines[i]);\n\n //loop through each character of the current line\n for (let c = 0; c < chars.length; c++) {\n charIndex++;\n //check if there's a style collection that includes the current character\n if (\n styles[styleIndex] &&\n styles[styleIndex].start <= charIndex &&\n charIndex < styles[styleIndex].end\n ) {\n //create object for line index if it doesn't exist\n stylesObject[i] = stylesObject[i] || {};\n //assign a style at this character's index\n stylesObject[i][c] = { ...styles[styleIndex].style };\n //if character is at the end of the current style collection, move to the next\n if (charIndex === styles[styleIndex].end - 1) {\n styleIndex++;\n }\n }\n }\n }\n return stylesObject;\n};\n","import { FILL, STROKE } from '../constants';\n\n/**\n * Attributes parsed from all SVG elements\n * @type array\n */\nexport const SHARED_ATTRIBUTES = [\n 'display',\n 'transform',\n FILL,\n 'fill-opacity',\n 'fill-rule',\n 'opacity',\n STROKE,\n 'stroke-dasharray',\n 'stroke-linecap',\n 'stroke-dashoffset',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'id',\n 'paint-order',\n 'vector-effect',\n 'instantiated_by_use',\n 'clip-path',\n];\n","export function selectorMatches(element: HTMLElement, selector: string) {\n const nodeName = element.nodeName;\n const classNames = element.getAttribute('class');\n const id = element.getAttribute('id');\n const azAz = '(?![a-zA-Z\\\\-]+)';\n let matcher;\n // i check if a selector matches slicing away part from it.\n // if i get empty string i should match\n matcher = new RegExp('^' + nodeName, 'i');\n selector = selector.replace(matcher, '');\n if (id && selector.length) {\n matcher = new RegExp('#' + id + azAz, 'i');\n selector = selector.replace(matcher, '');\n }\n if (classNames && selector.length) {\n const splitClassNames = classNames.split(' ');\n for (let i = splitClassNames.length; i--; ) {\n matcher = new RegExp('\\\\.' + splitClassNames[i] + azAz, 'i');\n selector = selector.replace(matcher, '');\n }\n }\n return selector.length === 0;\n}\n","import { selectorMatches } from './selectorMatches';\n\nexport function doesSomeParentMatch(element: HTMLElement, selectors: string[]) {\n let selector: string,\n parentMatching = true;\n while (\n element.parentElement &&\n element.parentElement.nodeType === 1 &&\n selectors.length\n ) {\n if (parentMatching) {\n selector = selectors.pop()!;\n }\n element = element.parentElement;\n parentMatching = selectorMatches(element, selector!);\n }\n return selectors.length === 0;\n}\n","import { selectorMatches } from './selectorMatches';\nimport { doesSomeParentMatch } from './doesSomeParentMatch';\n\n/**\n * @private\n */\n\nexport function elementMatchesRule(element: HTMLElement, selectors: string[]) {\n let parentMatching = true;\n // start from rightmost selector.\n const firstMatching = selectorMatches(element, selectors.pop()!);\n if (firstMatching && selectors.length) {\n parentMatching = doesSomeParentMatch(element, selectors);\n }\n return firstMatching && parentMatching && selectors.length === 0;\n}\n","import { elementMatchesRule } from './elementMatchesRule';\nimport type { CSSRules } from './typedefs';\n\n/**\n * @private\n */\n\nexport function getGlobalStylesForElement(\n element: HTMLElement,\n cssRules: CSSRules = {},\n) {\n let styles: Record = {};\n for (const rule in cssRules) {\n if (elementMatchesRule(element, rule.split(' '))) {\n styles = {\n ...styles,\n ...cssRules[rule],\n };\n }\n }\n return styles;\n}\n","import { attributesMap } from './constants';\n\nexport const normalizeAttr = (\n attr: keyof typeof attributesMap | string,\n): string => attributesMap[attr as keyof typeof attributesMap] ?? attr;\n","import { reNum } from '../../parser/constants';\n\nconst regex = new RegExp(`(${reNum})`, 'gi');\n\nexport const cleanupSvgAttribute = (attributeValue: string) =>\n attributeValue\n .replace(regex, ' $1 ')\n // replace annoying commas and arbitrary whitespace with single spaces\n .replace(/,/gi, ' ')\n .replace(/\\s+/gi, ' ');\n","import { ROTATE, SCALE, SKEW_X, SKEW_Y, iMatrix } from '../constants';\nimport { reNum } from './constants';\nimport type { TMat2D } from '../typedefs';\nimport { cleanupSvgAttribute } from '../util/internals/cleanupSvgAttribute';\nimport {\n createRotateMatrix,\n createScaleMatrix,\n createSkewXMatrix,\n createSkewYMatrix,\n createTranslateMatrix,\n multiplyTransformMatrixArray,\n} from '../util/misc/matrix';\n\n// == begin transform regexp\nconst p = `(${reNum})`;\nconst skewX = String.raw`(skewX)\\(${p}\\)`;\nconst skewY = String.raw`(skewY)\\(${p}\\)`;\nconst rotate = String.raw`(rotate)\\(${p}(?: ${p} ${p})?\\)`;\nconst scale = String.raw`(scale)\\(${p}(?: ${p})?\\)`;\nconst translate = String.raw`(translate)\\(${p}(?: ${p})?\\)`;\nconst matrix = String.raw`(matrix)\\(${p} ${p} ${p} ${p} ${p} ${p}\\)`;\nconst transform = `(?:${matrix}|${translate}|${rotate}|${scale}|${skewX}|${skewY})`;\nconst transforms = `(?:${transform}*)`;\nconst transformList = String.raw`^\\s*(?:${transforms}?)\\s*$`;\n// http://www.w3.org/TR/SVG/coords.html#TransformAttribute\nconst reTransformList = new RegExp(transformList);\nconst reTransform = new RegExp(transform);\nconst reTransformAll = new RegExp(transform, 'g');\n// == end transform regexp\n\n/**\n * Parses \"transform\" attribute, returning an array of values\n * @static\n * @function\n * @memberOf fabric\n * @param {String} attributeValue String containing attribute value\n * @return {TTransformMatrix} Array of 6 elements representing transformation matrix\n */\nexport function parseTransformAttribute(attributeValue: string): TMat2D {\n // first we clean the string\n attributeValue = cleanupSvgAttribute(attributeValue)\n // remove spaces around front parentheses\n .replace(/\\s*([()])\\s*/gi, '$1');\n\n // start with identity matrix\n const matrices: TMat2D[] = [];\n\n // return if no argument was given or\n // an argument does not match transform attribute regexp\n if (\n !attributeValue ||\n (attributeValue && !reTransformList.test(attributeValue))\n ) {\n return [...iMatrix];\n }\n\n for (const match of attributeValue.matchAll(reTransformAll)) {\n const transformMatch = reTransform.exec(match[0]);\n if (!transformMatch) {\n continue;\n }\n let matrix: TMat2D = iMatrix;\n const matchedParams = transformMatch.filter((m) => !!m);\n const [, operation, ...rawArgs] = matchedParams;\n const [arg0, arg1, arg2, arg3, arg4, arg5] = rawArgs.map((arg) =>\n parseFloat(arg),\n );\n\n switch (operation) {\n case 'translate':\n matrix = createTranslateMatrix(arg0, arg1);\n break;\n case ROTATE:\n matrix = createRotateMatrix({ angle: arg0 }, { x: arg1, y: arg2 });\n break;\n case SCALE:\n matrix = createScaleMatrix(arg0, arg1);\n break;\n case SKEW_X:\n matrix = createSkewXMatrix(arg0);\n break;\n case SKEW_Y:\n matrix = createSkewYMatrix(arg0);\n break;\n case 'matrix':\n matrix = [arg0, arg1, arg2, arg3, arg4, arg5];\n break;\n }\n\n // snapshot current matrix into matrices array\n matrices.push(matrix);\n }\n\n return multiplyTransformMatrixArray(matrices);\n}\n","import { multiplyTransformMatrices } from '../util/misc/matrix';\nimport { parseUnit } from '../util/misc/svgParsing';\nimport { parseTransformAttribute } from './parseTransformAttribute';\nimport { CENTER, LEFT, RIGHT, NONE, FILL, STROKE } from '../constants';\n\nexport function normalizeValue(\n attr: string,\n value: any,\n parentAttributes: Record,\n fontSize: number,\n): string | null | boolean | number[] | number {\n const isArray = Array.isArray(value);\n let parsed: number | number[];\n let ouputValue: string | null | boolean | number[] | number = value;\n if ((attr === FILL || attr === STROKE) && value === NONE) {\n ouputValue = '';\n } else if (attr === 'strokeUniform') {\n return value === 'non-scaling-stroke';\n } else if (attr === 'strokeDashArray') {\n if (value === NONE) {\n ouputValue = null;\n } else {\n ouputValue = value.replace(/,/g, ' ').split(/\\s+/).map(parseFloat);\n }\n } else if (attr === 'transformMatrix') {\n if (parentAttributes && parentAttributes.transformMatrix) {\n ouputValue = multiplyTransformMatrices(\n parentAttributes.transformMatrix,\n parseTransformAttribute(value),\n );\n } else {\n ouputValue = parseTransformAttribute(value);\n }\n } else if (attr === 'visible') {\n ouputValue = value !== NONE && value !== 'hidden';\n // display=none on parent element always takes precedence over child element\n if (parentAttributes && parentAttributes.visible === false) {\n ouputValue = false;\n }\n } else if (attr === 'opacity') {\n ouputValue = parseFloat(value);\n if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {\n ouputValue *= parentAttributes.opacity as number;\n }\n } else if (attr === 'textAnchor' /* text-anchor */) {\n ouputValue = value === 'start' ? LEFT : value === 'end' ? RIGHT : CENTER;\n } else if (attr === 'charSpacing') {\n // parseUnit returns px and we convert it to em\n parsed = (parseUnit(value, fontSize) / fontSize) * 1000;\n } else if (attr === 'paintFirst') {\n const fillIndex = value.indexOf(FILL);\n const strokeIndex = value.indexOf(STROKE);\n ouputValue = FILL;\n if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {\n ouputValue = STROKE;\n } else if (fillIndex === -1 && strokeIndex > -1) {\n ouputValue = STROKE;\n }\n } else if (\n attr === 'href' ||\n attr === 'xlink:href' ||\n attr === 'font' ||\n attr === 'id'\n ) {\n return value;\n } else if (attr === 'imageSmoothing') {\n return value === 'optimizeQuality';\n } else {\n parsed = isArray\n ? (value as string[]).map(parseUnit)\n : parseUnit(value, fontSize);\n }\n\n return !isArray && isNaN(parsed! as number) ? ouputValue : parsed!;\n}\n","import { parseUnit } from '../util/misc/svgParsing';\nimport { reFontDeclaration } from './constants';\n\n/**\n * Parses a short font declaration, building adding its properties to a style object\n * @static\n * @function\n * @memberOf fabric\n * @param {String} value font declaration\n * @param {Object} oStyle definition\n */\nexport function parseFontDeclaration(\n value: string,\n oStyle: Record,\n): void {\n const match = value.match(reFontDeclaration);\n\n if (!match) {\n return;\n }\n const fontStyle = match[1],\n // font variant is not used\n // fontVariant = match[2],\n fontWeight = match[3],\n fontSize = match[4],\n lineHeight = match[5],\n fontFamily = match[6];\n\n if (fontStyle) {\n oStyle.fontStyle = fontStyle;\n }\n if (fontWeight) {\n oStyle.fontWeight = isNaN(parseFloat(fontWeight))\n ? fontWeight\n : parseFloat(fontWeight);\n }\n if (fontSize) {\n oStyle.fontSize = parseUnit(fontSize);\n }\n if (fontFamily) {\n oStyle.fontFamily = fontFamily;\n }\n if (lineHeight) {\n oStyle.lineHeight = lineHeight === 'normal' ? 1 : lineHeight;\n }\n}\n","/**\n * Takes a style object and parses it in one that has only defined values\n * and lowercases properties\n * @param style\n * @param oStyle\n */\nexport function parseStyleObject(\n style: Record,\n oStyle: Record,\n): void {\n Object.entries(style).forEach(([prop, value]) => {\n if (value === undefined) {\n return;\n }\n oStyle[prop.toLowerCase()] = value;\n });\n}\n","/**\n * Takes a style string and parses it in one that has only defined values\n * and lowercases properties\n * @param style\n * @param oStyle\n */\nexport function parseStyleString(\n style: string,\n oStyle: Record,\n): void {\n style\n .replace(/;\\s*$/, '')\n .split(';')\n .forEach((chunk) => {\n if (!chunk) return;\n const [attr, value] = chunk.split(':');\n oStyle[attr.trim().toLowerCase()] = value.trim();\n });\n}\n","import { parseStyleObject } from './parseStyleObject';\nimport { parseStyleString } from './parseStyleString';\n\n/**\n * Parses \"style\" attribute, retuning an object with values\n * @static\n * @memberOf fabric\n * @param {SVGElement} element Element to parse\n * @return {Object} Objects with values parsed from style attribute of an element\n */\nexport function parseStyleAttribute(element: HTMLElement): Record {\n const oStyle: Record = {},\n style = element.getAttribute('style');\n\n if (!style) {\n return oStyle;\n }\n\n if (typeof style === 'string') {\n parseStyleString(style, oStyle);\n } else {\n parseStyleObject(style, oStyle);\n }\n\n return oStyle;\n}\n","import { Color } from '../color/Color';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject } from '../shapes/Object/FabricObject';\n\nconst colorAttributesMap = {\n stroke: 'strokeOpacity',\n fill: 'fillOpacity',\n};\n\n/**\n * @private\n * @param {Object} attributes Array of attributes to parse\n */\n\nexport function setStrokeFillOpacity(\n attributes: Record,\n): Record {\n const defaults = FabricObject.getDefaults();\n Object.entries(colorAttributesMap).forEach(([attr, colorAttr]) => {\n if (\n typeof attributes[colorAttr] === 'undefined' ||\n attributes[attr] === ''\n ) {\n return;\n }\n if (typeof attributes[attr] === 'undefined') {\n if (!defaults[attr]) {\n return;\n }\n attributes[attr] = defaults[attr];\n }\n if (attributes[attr].indexOf('url(') === 0) {\n return;\n }\n const color = new Color(attributes[attr]);\n attributes[attr] = color\n .setAlpha(toFixed(color.getAlpha() * attributes[colorAttr], 2))\n .toRgba();\n });\n return attributes;\n}\n","import { DEFAULT_SVG_FONT_SIZE } from '../constants';\nimport { parseUnit } from '../util/misc/svgParsing';\nimport { cPath, fSize, svgValidParentsRegEx } from './constants';\nimport { getGlobalStylesForElement } from './getGlobalStylesForElement';\nimport { normalizeAttr } from './normalizeAttr';\nimport { normalizeValue } from './normalizeValue';\nimport { parseFontDeclaration } from './parseFontDeclaration';\nimport { parseStyleAttribute } from './parseStyleAttribute';\nimport { setStrokeFillOpacity } from './setStrokeFillOpacity';\nimport type { CSSRules } from './typedefs';\n\n/**\n * Returns an object of attributes' name/value, given element and an array of attribute names;\n * Parses parent \"g\" nodes recursively upwards.\n * @param {SVGElement | HTMLElement} element Element to parse\n * @param {Array} attributes Array of attributes to parse\n * @return {Object} object containing parsed attributes' names/values\n */\nexport function parseAttributes(\n element: HTMLElement | null,\n attributes: string[],\n cssRules?: CSSRules,\n): Record {\n if (!element) {\n return {};\n }\n\n let parentAttributes: Record = {},\n fontSize: number,\n parentFontSize = DEFAULT_SVG_FONT_SIZE;\n\n // if there's a parent container (`g` or `a` or `symbol` node), parse its attributes recursively upwards\n if (\n element.parentNode &&\n svgValidParentsRegEx.test(element.parentNode.nodeName)\n ) {\n parentAttributes = parseAttributes(\n element.parentElement,\n attributes,\n cssRules,\n );\n if (parentAttributes.fontSize) {\n fontSize = parentFontSize = parseUnit(parentAttributes.fontSize);\n }\n }\n\n const ownAttributes: Record = {\n ...attributes.reduce>((memo, attr) => {\n const value = element.getAttribute(attr);\n if (value) {\n memo[attr] = value;\n }\n return memo;\n }, {}),\n // add values parsed from style, which take precedence over attributes\n // (see: http://www.w3.org/TR/SVG/styling.html#UsingPresentationAttributes)\n ...getGlobalStylesForElement(element, cssRules),\n ...parseStyleAttribute(element),\n };\n\n if (ownAttributes[cPath]) {\n element.setAttribute(cPath, ownAttributes[cPath]);\n }\n if (ownAttributes[fSize]) {\n // looks like the minimum should be 9px when dealing with ems. this is what looks like in browsers.\n fontSize = parseUnit(ownAttributes[fSize], parentFontSize);\n ownAttributes[fSize] = `${fontSize}`;\n }\n\n // this should have its own complex type\n const normalizedStyle: Record<\n string,\n string | boolean | number | number[] | null\n > = {};\n for (const attr in ownAttributes) {\n const normalizedAttr = normalizeAttr(attr);\n const normalizedValue = normalizeValue(\n normalizedAttr,\n ownAttributes[attr],\n parentAttributes,\n fontSize!,\n );\n normalizedStyle[normalizedAttr] = normalizedValue;\n }\n if (normalizedStyle && normalizedStyle.font) {\n parseFontDeclaration(normalizedStyle.font as string, normalizedStyle);\n }\n const mergedAttrs = { ...parentAttributes, ...normalizedStyle };\n return svgValidParentsRegEx.test(element.nodeName)\n ? mergedAttrs\n : setStrokeFillOpacity(mergedAttrs);\n}\n","import { kRect } from '../constants';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const rectDefaultValues: Partial> = {\n rx: 0,\n ry: 0,\n};\n\ninterface UniqueRectProps {\n rx: number;\n ry: number;\n}\n\nexport interface SerializedRectProps\n extends SerializedObjectProps,\n UniqueRectProps {}\n\nexport interface RectProps extends FabricObjectProps, UniqueRectProps {}\n\nconst RECT_PROPS = ['rx', 'ry'] as const;\n\nexport class Rect<\n Props extends TOptions = Partial,\n SProps extends SerializedRectProps = SerializedRectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements RectProps\n{\n /**\n * Horizontal border radius\n * @type Number\n * @default\n */\n declare rx: number;\n\n /**\n * Vertical border radius\n * @type Number\n * @default\n */\n declare ry: number;\n\n static type = 'Rect';\n\n static cacheProperties = [...cacheProperties, ...RECT_PROPS];\n\n static ownDefaults = rectDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Rect.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Rect.ownDefaults);\n this.setOptions(options);\n this._initRxRy();\n }\n /**\n * Initializes rx/ry attributes\n * @private\n */\n _initRxRy() {\n const { rx, ry } = this;\n if (rx && !ry) {\n this.ry = rx;\n } else if (ry && !rx) {\n this.rx = ry;\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const { width: w, height: h } = this;\n const x = -w / 2;\n const y = -h / 2;\n const rx = this.rx ? Math.min(this.rx, w / 2) : 0;\n const ry = this.ry ? Math.min(this.ry, h / 2) : 0;\n const isRounded = rx !== 0 || ry !== 0;\n\n ctx.beginPath();\n\n ctx.moveTo(x + rx, y);\n\n ctx.lineTo(x + w - rx, y);\n isRounded &&\n ctx.bezierCurveTo(\n x + w - kRect * rx,\n y,\n x + w,\n y + kRect * ry,\n x + w,\n y + ry,\n );\n\n ctx.lineTo(x + w, y + h - ry);\n isRounded &&\n ctx.bezierCurveTo(\n x + w,\n y + h - kRect * ry,\n x + w - kRect * rx,\n y + h,\n x + w - rx,\n y + h,\n );\n\n ctx.lineTo(x + rx, y + h);\n isRounded &&\n ctx.bezierCurveTo(\n x + kRect * rx,\n y + h,\n x,\n y + h - kRect * ry,\n x,\n y + h - ry,\n );\n\n ctx.lineTo(x, y + ry);\n isRounded &&\n ctx.bezierCurveTo(x, y + kRect * ry, x + kRect * rx, y, x + rx, y);\n\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([...RECT_PROPS, ...propertiesToInclude]);\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const { width, height, rx, ry } = this;\n return [\n '\\n`,\n ];\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `Rect.fromElement`)\n * @static\n * @memberOf Rect\n * @see: http://www.w3.org/TR/SVG/shapes.html#RectElement\n */\n static ATTRIBUTE_NAMES = [\n ...SHARED_ATTRIBUTES,\n 'x',\n 'y',\n 'rx',\n 'ry',\n 'width',\n 'height',\n ];\n\n /* _FROM_SVG_START_ */\n\n /**\n * Returns {@link Rect} instance from an SVG element\n * @static\n * @memberOf Rect\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const {\n left = 0,\n top = 0,\n width = 0,\n height = 0,\n visible = true,\n ...restOfparsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n\n return new this({\n ...options,\n ...restOfparsedAttributes,\n left,\n top,\n width,\n height,\n visible: Boolean(visible && width && height),\n });\n }\n\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Rect);\nclassRegistry.setSVGClass(Rect);\n","export const LAYOUT_TYPE_INITIALIZATION = 'initialization';\nexport const LAYOUT_TYPE_ADDED = 'added';\nexport const LAYOUT_TYPE_REMOVED = 'removed';\nexport const LAYOUT_TYPE_IMPERATIVE = 'imperative';\nexport const LAYOUT_TYPE_OBJECT_MODIFIED = 'object_modified';\nexport const LAYOUT_TYPE_OBJECT_MODIFYING = 'object_modifying';\n","import { Point, ZERO } from '../../Point';\nimport type { Group } from '../../shapes/Group';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { multiplyTransformMatrixArray } from '../../util/misc/matrix';\nimport { sizeAfterTransform } from '../../util/misc/objectTransforms';\nimport {\n calcPlaneChangeMatrix,\n sendVectorToPlane,\n} from '../../util/misc/planeChange';\n\n/**\n * @returns 2 points, the tl and br corners of the non rotated bounding box of an object\n * in the {@link group} plane, taking into account objects that {@link group} is their parent\n * but also belong to the active selection.\n */\nexport const getObjectBounds = (\n destinationGroup: Group,\n object: FabricObject,\n): Point[] => {\n const {\n strokeUniform,\n strokeWidth,\n width,\n height,\n group: currentGroup,\n } = object;\n const t =\n currentGroup && currentGroup !== destinationGroup\n ? calcPlaneChangeMatrix(\n currentGroup.calcTransformMatrix(),\n destinationGroup.calcTransformMatrix(),\n )\n : null;\n const objectCenter = t\n ? object.getRelativeCenterPoint().transform(t)\n : object.getRelativeCenterPoint();\n const accountForStroke = !object['isStrokeAccountedForInDimensions']();\n const strokeUniformVector =\n strokeUniform && accountForStroke\n ? sendVectorToPlane(\n new Point(strokeWidth, strokeWidth),\n undefined,\n destinationGroup.calcTransformMatrix(),\n )\n : ZERO;\n const scalingStrokeWidth =\n !strokeUniform && accountForStroke ? strokeWidth : 0;\n const sizeVector = sizeAfterTransform(\n width + scalingStrokeWidth,\n height + scalingStrokeWidth,\n multiplyTransformMatrixArray([t, object.calcOwnMatrix()], true),\n )\n .add(strokeUniformVector)\n .scalarDivide(2);\n return [objectCenter.subtract(sizeVector), objectCenter.add(sizeVector)];\n};\n","import { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_IMPERATIVE,\n} from '../constants';\nimport type {\n InitializationLayoutContext,\n LayoutStrategyResult,\n StrictLayoutContext,\n} from '../types';\nimport { getObjectBounds } from './utils';\n\n/**\n * Exposes a main public method {@link calcLayoutResult} that is used by the `LayoutManager` to perform layout.\n * Returning `undefined` signals the `LayoutManager` to skip the layout.\n *\n * In charge of calculating the bounding box of the passed objects.\n */\nexport abstract class LayoutStrategy {\n /**\n * override by subclass for persistence (TS does not support `static abstract`)\n */\n static type = 'strategy';\n\n /**\n * Used by the `LayoutManager` to perform layout\n * @TODO/fix: if this method is calcResult, should calc unconditionally.\n * the condition to not calc should be evaluated by the layoutManager.\n * @returns layout result **OR** `undefined` to skip layout\n */\n public calcLayoutResult(\n context: StrictLayoutContext,\n objects: FabricObject[],\n ): LayoutStrategyResult | undefined {\n if (this.shouldPerformLayout(context)) {\n return this.calcBoundingBox(objects, context);\n }\n }\n\n shouldPerformLayout({ type, prevStrategy, strategy }: StrictLayoutContext) {\n return (\n type === LAYOUT_TYPE_INITIALIZATION ||\n type === LAYOUT_TYPE_IMPERATIVE ||\n (!!prevStrategy && strategy !== prevStrategy)\n );\n }\n\n shouldLayoutClipPath({ type, target: { clipPath } }: StrictLayoutContext) {\n return (\n type !== LAYOUT_TYPE_INITIALIZATION &&\n clipPath &&\n !clipPath.absolutePositioned\n );\n }\n\n getInitialSize(\n context: StrictLayoutContext & InitializationLayoutContext,\n result: Pick,\n ) {\n return result.size;\n }\n\n /**\n * Override this method to customize layout.\n */\n calcBoundingBox(\n objects: FabricObject[],\n context: StrictLayoutContext,\n ): LayoutStrategyResult | undefined {\n const { type, target } = context;\n if (type === LAYOUT_TYPE_IMPERATIVE && context.overrides) {\n return context.overrides;\n }\n if (objects.length === 0) {\n return;\n }\n const { left, top, width, height } = makeBoundingBoxFromPoints(\n objects\n .map((object) => getObjectBounds(target, object))\n .reduce((coords, curr) => coords.concat(curr), []),\n );\n const bboxSize = new Point(width, height);\n const bboxLeftTop = new Point(left, top);\n const bboxCenter = bboxLeftTop.add(bboxSize.scalarDivide(2));\n\n if (type === LAYOUT_TYPE_INITIALIZATION) {\n const actualSize = this.getInitialSize(context, {\n size: bboxSize,\n center: bboxCenter,\n });\n return {\n // in `initialization` we do not account for target's transformation matrix\n center: bboxCenter,\n // TODO: investigate if this is still necessary\n relativeCorrection: new Point(0, 0),\n size: actualSize,\n };\n } else {\n // we send `relativeCenter` up to group's containing plane\n const center = bboxCenter.transform(target.calcOwnMatrix());\n return {\n center,\n size: bboxSize,\n };\n }\n }\n}\n","import type { StrictLayoutContext } from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will adjust the bounding box to fit target's objects.\n */\nexport class FitContentLayout extends LayoutStrategy {\n static readonly type = 'fit-content';\n\n /**\n * @override layout on all triggers\n * Override at will\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n shouldPerformLayout(context: StrictLayoutContext) {\n return true;\n }\n}\n\nclassRegistry.setClass(FitContentLayout);\n","import { Point } from '../Point';\nimport {\n CENTER,\n CHANGED,\n MODIFIED,\n MODIFY_PATH,\n MODIFY_POLY,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n iMatrix,\n} from '../constants';\nimport type { Group } from '../shapes/Group';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { invertTransform } from '../util/misc/matrix';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { FitContentLayout } from './LayoutStrategies/FitContentLayout';\nimport type { LayoutStrategy } from './LayoutStrategies/LayoutStrategy';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_OBJECT_MODIFIED,\n LAYOUT_TYPE_OBJECT_MODIFYING,\n} from './constants';\nimport type {\n LayoutContext,\n LayoutResult,\n RegistrationContext,\n StrictLayoutContext,\n} from './types';\nimport { classRegistry } from '../ClassRegistry';\nimport type { TModificationEvents } from '../EventTypeDefs';\n\nconst LAYOUT_MANAGER = 'layoutManager';\n\nexport type SerializedLayoutManager = {\n type: string;\n strategy: string;\n};\n\nexport class LayoutManager {\n private declare _prevLayoutStrategy?: LayoutStrategy;\n protected declare _subscriptions: Map;\n\n strategy: LayoutStrategy;\n\n constructor(strategy: LayoutStrategy = new FitContentLayout()) {\n this.strategy = strategy;\n this._subscriptions = new Map();\n }\n\n public performLayout(context: LayoutContext) {\n const strictContext: StrictLayoutContext = {\n bubbles: true,\n strategy: this.strategy,\n ...context,\n prevStrategy: this._prevLayoutStrategy,\n stopPropagation() {\n this.bubbles = false;\n },\n };\n\n this.onBeforeLayout(strictContext);\n\n const layoutResult = this.getLayoutResult(strictContext);\n if (layoutResult) {\n this.commitLayout(strictContext, layoutResult);\n }\n\n this.onAfterLayout(strictContext, layoutResult);\n this._prevLayoutStrategy = strictContext.strategy;\n }\n\n /**\n * Attach handlers for events that we know will invalidate the layout when\n * performed on child objects ( general transforms ).\n * Returns the disposers for later unsubscribing and cleanup\n * @param {FabricObject} object\n * @param {RegistrationContext & Partial} context\n * @returns {VoidFunction[]} disposers remove the handlers\n */\n protected attachHandlers(\n object: FabricObject,\n context: RegistrationContext & Partial,\n ): VoidFunction[] {\n const { target } = context;\n return (\n [\n MODIFIED,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n CHANGED,\n MODIFY_POLY,\n MODIFY_PATH,\n ] as (TModificationEvents & 'modified')[]\n ).map((key) =>\n object.on(key, (e) =>\n this.performLayout(\n key === MODIFIED\n ? {\n type: LAYOUT_TYPE_OBJECT_MODIFIED,\n trigger: key,\n e,\n target,\n }\n : {\n type: LAYOUT_TYPE_OBJECT_MODIFYING,\n trigger: key,\n e,\n target,\n },\n ),\n ),\n );\n }\n\n /**\n * Subscribe an object to transform events that will trigger a layout change on the parent\n * This is important only for interactive groups.\n * @param object\n * @param context\n */\n protected subscribe(\n object: FabricObject,\n context: RegistrationContext & Partial,\n ) {\n this.unsubscribe(object, context);\n const disposers = this.attachHandlers(object, context);\n this._subscriptions.set(object, disposers);\n }\n\n /**\n * unsubscribe object layout triggers\n */\n protected unsubscribe(\n object: FabricObject,\n _context?: RegistrationContext & Partial,\n ) {\n (this._subscriptions.get(object) || []).forEach((d) => d());\n this._subscriptions.delete(object);\n }\n\n unsubscribeTargets(\n context: RegistrationContext & Partial,\n ) {\n context.targets.forEach((object) => this.unsubscribe(object, context));\n }\n\n subscribeTargets(\n context: RegistrationContext & Partial,\n ) {\n context.targets.forEach((object) => this.subscribe(object, context));\n }\n\n protected onBeforeLayout(context: StrictLayoutContext) {\n const { target, type } = context;\n const { canvas } = target;\n // handle layout triggers subscription\n // @TODO: gate the registration when the group is interactive\n if (type === LAYOUT_TYPE_INITIALIZATION || type === LAYOUT_TYPE_ADDED) {\n this.subscribeTargets(context);\n } else if (type === LAYOUT_TYPE_REMOVED) {\n this.unsubscribeTargets(context);\n }\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:before', {\n context,\n });\n canvas &&\n canvas.fire('object:layout:before', {\n target,\n context,\n });\n\n if (type === LAYOUT_TYPE_IMPERATIVE && context.deep) {\n const { strategy: _, ...tricklingContext } = context;\n // traverse the tree\n target.forEachObject(\n (object) =>\n (object as Group).layoutManager &&\n (object as Group).layoutManager.performLayout({\n ...tricklingContext,\n bubbles: false,\n target: object as Group,\n }),\n );\n }\n }\n\n protected getLayoutResult(\n context: StrictLayoutContext,\n ): Required | undefined {\n const { target, strategy, type } = context;\n\n const result = strategy.calcLayoutResult(context, target.getObjects());\n\n if (!result) {\n return;\n }\n\n const prevCenter =\n type === LAYOUT_TYPE_INITIALIZATION\n ? new Point()\n : target.getRelativeCenterPoint();\n\n const {\n center: nextCenter,\n correction = new Point(),\n relativeCorrection = new Point(),\n } = result;\n const offset = prevCenter\n .subtract(nextCenter)\n .add(correction)\n .transform(\n // in `initialization` we do not account for target's transformation matrix\n type === LAYOUT_TYPE_INITIALIZATION\n ? iMatrix\n : invertTransform(target.calcOwnMatrix()),\n true,\n )\n .add(relativeCorrection);\n\n return {\n result,\n prevCenter,\n nextCenter,\n offset,\n };\n }\n\n protected commitLayout(\n context: StrictLayoutContext,\n layoutResult: Required,\n ) {\n const { target } = context;\n const {\n result: { size },\n nextCenter,\n } = layoutResult;\n // set dimensions\n target.set({ width: size.x, height: size.y });\n // layout descendants\n this.layoutObjects(context, layoutResult);\n // set position\n // in `initialization` we do not account for target's transformation matrix\n if (context.type === LAYOUT_TYPE_INITIALIZATION) {\n // TODO: what about strokeWidth?\n target.set({\n left:\n context.x ?? nextCenter.x + size.x * resolveOrigin(target.originX),\n top: context.y ?? nextCenter.y + size.y * resolveOrigin(target.originY),\n });\n } else {\n target.setPositionByOrigin(nextCenter, CENTER, CENTER);\n // invalidate\n target.setCoords();\n target.set('dirty', true);\n }\n }\n\n protected layoutObjects(\n context: StrictLayoutContext,\n layoutResult: Required,\n ) {\n const { target } = context;\n // adjust objects to account for new center\n target.forEachObject((object) => {\n object.group === target &&\n this.layoutObject(context, layoutResult, object);\n });\n // adjust clip path to account for new center\n context.strategy.shouldLayoutClipPath(context) &&\n this.layoutObject(context, layoutResult, target.clipPath as FabricObject);\n }\n\n /**\n * @param {FabricObject} object\n * @param {Point} offset\n */\n protected layoutObject(\n context: StrictLayoutContext,\n { offset }: Required,\n object: FabricObject,\n ) {\n // TODO: this is here for cache invalidation.\n // verify if this is necessary since we have explicit\n // cache invalidation at the end of commitLayout\n object.set({\n left: object.left + offset.x,\n top: object.top + offset.y,\n });\n }\n\n protected onAfterLayout(\n context: StrictLayoutContext,\n layoutResult?: LayoutResult,\n ) {\n const {\n target,\n strategy,\n bubbles,\n prevStrategy: _,\n ...bubblingContext\n } = context;\n const { canvas } = target;\n\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:after', {\n context,\n result: layoutResult,\n });\n canvas &&\n canvas.fire('object:layout:after', {\n context,\n result: layoutResult,\n target,\n });\n\n // bubble\n const parent = target.parent;\n if (bubbles && parent?.layoutManager) {\n // add target to context#path\n (bubblingContext.path || (bubblingContext.path = [])).push(target);\n // all parents should invalidate their layout\n parent.layoutManager.performLayout({\n ...bubblingContext,\n target: parent,\n });\n }\n target.set('dirty', true);\n }\n\n dispose() {\n const { _subscriptions } = this;\n _subscriptions.forEach((disposers) => disposers.forEach((d) => d()));\n _subscriptions.clear();\n }\n\n toObject() {\n return {\n type: LAYOUT_MANAGER,\n strategy: (this.strategy.constructor as typeof LayoutStrategy).type,\n };\n }\n\n toJSON() {\n return this.toObject();\n }\n}\n\nclassRegistry.setClass(LayoutManager, LAYOUT_MANAGER);\n","import type { CollectionEvents, ObjectEvents } from '../EventTypeDefs';\nimport { createCollectionMixin } from '../Collection';\nimport type {\n TClassProperties,\n TSVGReviver,\n TOptions,\n Abortable,\n} from '../typedefs';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n} from '../util/misc/matrix';\nimport {\n enlivenObjectEnlivables,\n enlivenObjects,\n} from '../util/misc/objectEnlive';\nimport { applyTransformToObject } from '../util/misc/objectTransforms';\nimport { FabricObject } from './Object/FabricObject';\nimport { Rect } from './Rect';\nimport { classRegistry } from '../ClassRegistry';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport { log } from '../util/internals/console';\nimport type {\n ImperativeLayoutOptions,\n LayoutBeforeEvent,\n LayoutAfterEvent,\n} from '../LayoutManager/types';\nimport { LayoutManager } from '../LayoutManager/LayoutManager';\nimport {\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_REMOVED,\n} from '../LayoutManager/constants';\nimport type { SerializedLayoutManager } from '../LayoutManager/LayoutManager';\nimport type { FitContentLayout } from '../LayoutManager';\nimport type { DrawContext } from './Object/Object';\n\n/**\n * This class handles the specific case of creating a group using {@link Group#fromObject} and is not meant to be used in any other case.\n * We could have used a boolean in the constructor, as we did previously, but we think the boolean\n * would stay in the group's constructor interface and create confusion, therefore it was removed.\n * This layout manager doesn't do anything and therefore keeps the exact layout the group had when {@link Group#toObject} was called.\n */\nclass NoopLayoutManager extends LayoutManager {\n performLayout() {}\n}\n\nexport interface GroupEvents extends ObjectEvents, CollectionEvents {\n 'layout:before': LayoutBeforeEvent;\n 'layout:after': LayoutAfterEvent;\n}\n\nexport interface GroupOwnProps {\n subTargetCheck: boolean;\n interactive: boolean;\n}\n\nexport interface SerializedGroupProps\n extends SerializedObjectProps,\n GroupOwnProps {\n objects: SerializedObjectProps[];\n layoutManager: SerializedLayoutManager;\n}\n\nexport interface GroupProps extends FabricObjectProps, GroupOwnProps {\n layoutManager: LayoutManager;\n}\n\nexport const groupDefaultValues: Partial> = {\n strokeWidth: 0,\n subTargetCheck: false,\n interactive: false,\n};\n\n/**\n * @fires object:added\n * @fires object:removed\n * @fires layout:before\n * @fires layout:after\n */\nexport class Group\n extends createCollectionMixin(\n FabricObject,\n )\n implements GroupProps\n{\n /**\n * Used to optimize performance\n * set to `false` if you don't need contained objects to be targets of events\n * @default\n * @type boolean\n */\n declare subTargetCheck: boolean;\n\n /**\n * Used to allow targeting of object inside groups.\n * set to true if you want to select an object inside a group.\\\n * **REQUIRES** `subTargetCheck` set to true\n * This will be not removed but slowly replaced with a method setInteractive\n * that will take care of enabling subTargetCheck and necessary object events.\n * There is too much attached to group interactivity to just be evaluated by a\n * boolean in the code\n * @default\n * @deprecated\n * @type boolean\n */\n declare interactive: boolean;\n\n declare layoutManager: LayoutManager;\n\n /**\n * Used internally to optimize performance\n * Once an object is selected, instance is rendered without the selected object.\n * This way instance is cached only once for the entire interaction with the selected object.\n * @private\n */\n protected _activeObjects: FabricObject[] = [];\n\n static type = 'Group';\n\n static ownDefaults: Record = groupDefaultValues;\n private __objectSelectionTracker: (ev: ObjectEvents['selected']) => void;\n private __objectSelectionDisposer: (ev: ObjectEvents['deselected']) => void;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Group.ownDefaults,\n };\n }\n\n /**\n * Constructor\n *\n * @param {FabricObject[]} [objects] instance objects\n * @param {Object} [options] Options object\n */\n constructor(objects: FabricObject[] = [], options: Partial = {}) {\n super();\n Object.assign(this, Group.ownDefaults);\n this.setOptions(options);\n this.groupInit(objects, options);\n }\n\n /**\n * Shared code between group and active selection\n * Meant to be used by the constructor.\n */\n protected groupInit(\n objects: FabricObject[],\n options: {\n layoutManager?: LayoutManager;\n top?: number;\n left?: number;\n },\n ) {\n this._objects = [...objects]; // Avoid unwanted mutations of Collection to affect the caller\n\n this.__objectSelectionTracker = this.__objectSelectionMonitor.bind(\n this,\n true,\n );\n this.__objectSelectionDisposer = this.__objectSelectionMonitor.bind(\n this,\n false,\n );\n\n this.forEachObject((object) => {\n this.enterGroup(object, false);\n });\n\n // perform initial layout\n this.layoutManager = options.layoutManager ?? new LayoutManager();\n this.layoutManager.performLayout({\n type: LAYOUT_TYPE_INITIALIZATION,\n target: this,\n targets: [...objects],\n // @TODO remove this concept from the layout manager.\n // Layout manager will calculate the correct position,\n // group options can override it later.\n x: options.left,\n y: options.top,\n });\n }\n\n /**\n * Checks if object can enter group and logs relevant warnings\n * @private\n * @param {FabricObject} object\n * @returns\n */\n canEnterGroup(object: FabricObject) {\n if (object === this || this.isDescendantOf(object)) {\n // prevent circular object tree\n log(\n 'error',\n 'Group: circular object trees are not supported, this call has no effect',\n );\n return false;\n } else if (this._objects.indexOf(object) !== -1) {\n // is already in the objects array\n log(\n 'error',\n 'Group: duplicate objects are not supported inside group, this call has no effect',\n );\n return false;\n }\n return true;\n }\n\n /**\n * Override this method to enhance performance (for groups with a lot of objects).\n * If Overriding, be sure not pass illegal objects to group - it will break your app.\n * @private\n */\n protected _filterObjectsBeforeEnteringGroup(objects: FabricObject[]) {\n return objects.filter((object, index, array) => {\n // can enter AND is the first occurrence of the object in the passed args (to prevent adding duplicates)\n return this.canEnterGroup(object) && array.indexOf(object) === index;\n });\n }\n\n /**\n * Add objects\n * @param {...FabricObject[]} objects\n */\n add(...objects: FabricObject[]) {\n const allowedObjects = this._filterObjectsBeforeEnteringGroup(objects);\n const size = super.add(...allowedObjects);\n this._onAfterObjectsChange(LAYOUT_TYPE_ADDED, allowedObjects);\n return size;\n }\n\n /**\n * Inserts an object into collection at specified index\n * @param {FabricObject[]} objects Object to insert\n * @param {Number} index Index to insert object at\n */\n insertAt(index: number, ...objects: FabricObject[]) {\n const allowedObjects = this._filterObjectsBeforeEnteringGroup(objects);\n const size = super.insertAt(index, ...allowedObjects);\n this._onAfterObjectsChange(LAYOUT_TYPE_ADDED, allowedObjects);\n return size;\n }\n\n /**\n * Remove objects\n * @param {...FabricObject[]} objects\n * @returns {FabricObject[]} removed objects\n */\n remove(...objects: FabricObject[]) {\n const removed = super.remove(...objects);\n this._onAfterObjectsChange(LAYOUT_TYPE_REMOVED, removed);\n return removed;\n }\n\n _onObjectAdded(object: FabricObject) {\n this.enterGroup(object, true);\n this.fire('object:added', { target: object });\n object.fire('added', { target: this });\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n _onObjectRemoved(object: FabricObject, removeParentTransform?: boolean) {\n this.exitGroup(object, removeParentTransform);\n this.fire('object:removed', { target: object });\n object.fire('removed', { target: this });\n }\n\n /**\n * @private\n * @param {'added'|'removed'} type\n * @param {FabricObject[]} targets\n */\n _onAfterObjectsChange(type: 'added' | 'removed', targets: FabricObject[]) {\n this.layoutManager.performLayout({\n type,\n targets,\n target: this,\n });\n }\n\n _onStackOrderChanged() {\n this._set('dirty', true);\n }\n\n /**\n * @private\n * @param {string} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n const prev = this[key as keyof this];\n super._set(key, value);\n if (key === 'canvas' && prev !== value) {\n (this._objects || []).forEach((object) => {\n object._set(key, value);\n });\n }\n return this;\n }\n\n /**\n * @private\n */\n _shouldSetNestedCoords() {\n return this.subTargetCheck;\n }\n\n /**\n * Remove all objects\n * @returns {FabricObject[]} removed objects\n */\n removeAll() {\n this._activeObjects = [];\n return this.remove(...this._objects);\n }\n\n /**\n * keeps track of the selected objects\n * @private\n */\n __objectSelectionMonitor(\n selected: T,\n {\n target: object,\n }: ObjectEvents[T extends true ? 'selected' : 'deselected'],\n ) {\n const activeObjects = this._activeObjects;\n if (selected) {\n activeObjects.push(object);\n this._set('dirty', true);\n } else if (activeObjects.length > 0) {\n const index = activeObjects.indexOf(object);\n if (index > -1) {\n activeObjects.splice(index, 1);\n this._set('dirty', true);\n }\n }\n }\n\n /**\n * @private\n * @param {boolean} watch\n * @param {FabricObject} object\n */\n _watchObject(watch: boolean, object: FabricObject) {\n // make sure we listen only once\n watch && this._watchObject(false, object);\n if (watch) {\n object.on('selected', this.__objectSelectionTracker);\n object.on('deselected', this.__objectSelectionDisposer);\n } else {\n object.off('selected', this.__objectSelectionTracker);\n object.off('deselected', this.__objectSelectionDisposer);\n }\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n object.group && object.group.remove(object);\n object._set('parent', this);\n this._enterGroup(object, removeParentTransform);\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n _enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n if (removeParentTransform) {\n // can this be converted to utils (sendObjectToPlane)?\n applyTransformToObject(\n object,\n multiplyTransformMatrices(\n invertTransform(this.calcTransformMatrix()),\n object.calcTransformMatrix(),\n ),\n );\n }\n this._shouldSetNestedCoords() && object.setCoords();\n object._set('group', this);\n object._set('canvas', this.canvas);\n this._watchObject(true, object);\n const activeObject =\n this.canvas &&\n this.canvas.getActiveObject &&\n this.canvas.getActiveObject();\n // if we are adding the activeObject in a group\n if (\n activeObject &&\n (activeObject === object || object.isDescendantOf(activeObject))\n ) {\n this._activeObjects.push(object);\n }\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n this._exitGroup(object, removeParentTransform);\n object._set('parent', undefined);\n object._set('canvas', undefined);\n }\n\n /**\n * Executes the inner fabric logic of exiting a group.\n * - Stop watching the object\n * - Remove the object from the optimization map this._activeObjects\n * - unset the group property of the object\n * @protected\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n _exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n object._set('group', undefined);\n if (!removeParentTransform) {\n applyTransformToObject(\n object,\n multiplyTransformMatrices(\n this.calcTransformMatrix(),\n object.calcTransformMatrix(),\n ),\n );\n object.setCoords();\n }\n this._watchObject(false, object);\n const index =\n this._activeObjects.length > 0 ? this._activeObjects.indexOf(object) : -1;\n if (index > -1) {\n this._activeObjects.splice(index, 1);\n }\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group is already cached.\n * @return {Boolean}\n */\n shouldCache() {\n const ownCache = FabricObject.prototype.shouldCache.call(this);\n if (ownCache) {\n for (let i = 0; i < this._objects.length; i++) {\n if (this._objects[i].willDrawShadow()) {\n this.ownCaching = false;\n return false;\n }\n }\n }\n return ownCache;\n }\n\n /**\n * Check if this object or a child object will cast a shadow\n * @return {Boolean}\n */\n willDrawShadow() {\n if (super.willDrawShadow()) {\n return true;\n }\n for (let i = 0; i < this._objects.length; i++) {\n if (this._objects[i].willDrawShadow()) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Check if instance or its group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache(): boolean {\n return this.ownCaching || (!!this.parent && this.parent.isOnACache());\n }\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawObject(\n ctx: CanvasRenderingContext2D,\n forClipping: boolean | undefined,\n context: DrawContext,\n ) {\n this._renderBackground(ctx);\n for (let i = 0; i < this._objects.length; i++) {\n const obj = this._objects[i];\n // TODO: handle rendering edge case somehow\n if (this.canvas?.preserveObjectStacking && obj.group !== this) {\n ctx.save();\n ctx.transform(...invertTransform(this.calcTransformMatrix()));\n obj.render(ctx);\n ctx.restore();\n } else if (obj.group === this) {\n obj.render(ctx);\n }\n }\n this._drawClipPath(ctx, this.clipPath, context);\n }\n\n /**\n * @override\n * @return {Boolean}\n */\n setCoords() {\n super.setCoords();\n this._shouldSetNestedCoords() &&\n this.forEachObject((object) => object.setCoords());\n }\n\n triggerLayout(options: ImperativeLayoutOptions = {}) {\n this.layoutManager.performLayout({\n target: this,\n type: LAYOUT_TYPE_IMPERATIVE,\n ...options,\n });\n }\n\n /**\n * Renders instance on a given context\n * @param {CanvasRenderingContext2D} ctx context to render instance on\n */\n render(ctx: CanvasRenderingContext2D) {\n this._transformDone = true;\n super.render(ctx);\n this._transformDone = false;\n }\n\n /**\n *\n * @private\n * @param {'toObject'|'toDatalessObject'} [method]\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @returns {FabricObject[]} serialized objects\n */\n __serializeObjects(\n method: 'toObject' | 'toDatalessObject',\n propertiesToInclude?: string[],\n ) {\n const _includeDefaultValues = this.includeDefaultValues;\n return this._objects\n .filter(function (obj) {\n return !obj.excludeFromExport;\n })\n .map(function (obj) {\n const originalDefaults = obj.includeDefaultValues;\n obj.includeDefaultValues = _includeDefaultValues;\n const data = obj[method || 'toObject'](propertiesToInclude);\n obj.includeDefaultValues = originalDefaults;\n // delete data.version;\n return data;\n });\n }\n\n /**\n * Returns object representation of an instance\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit<\n GroupProps & TClassProperties,\n keyof SerializedGroupProps\n >,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SerializedGroupProps {\n const layoutManager = this.layoutManager.toObject();\n\n return {\n ...super.toObject([\n 'subTargetCheck',\n 'interactive',\n ...propertiesToInclude,\n ]),\n ...(layoutManager.strategy !== 'fit-content' || this.includeDefaultValues\n ? { layoutManager }\n : {}),\n objects: this.__serializeObjects(\n 'toObject',\n propertiesToInclude as string[],\n ),\n };\n }\n\n toString() {\n return `#`;\n }\n\n dispose() {\n this.layoutManager.unsubscribeTargets({\n targets: this.getObjects(),\n target: this,\n });\n this._activeObjects = [];\n this.forEachObject((object) => {\n this._watchObject(false, object);\n object.dispose();\n });\n super.dispose();\n }\n\n /**\n * @private\n */\n _createSVGBgRect(reviver?: TSVGReviver) {\n if (!this.backgroundColor) {\n return '';\n }\n const fillStroke = Rect.prototype._toSVG.call(this);\n const commons = fillStroke.indexOf('COMMON_PARTS');\n fillStroke[commons] = 'for=\"group\" ';\n const markup = fillStroke.join('');\n return reviver ? reviver(markup) : markup;\n }\n\n /**\n * Returns svg representation of an instance\n * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n _toSVG(reviver?: TSVGReviver) {\n const svgString = ['\\n'];\n const bg = this._createSVGBgRect(reviver);\n bg && svgString.push('\\t\\t', bg);\n for (let i = 0; i < this._objects.length; i++) {\n svgString.push('\\t\\t', this._objects[i].toSVG(reviver));\n }\n svgString.push('\\n');\n return svgString;\n }\n\n /**\n * Returns styles-string for svg-export, specific version for group\n * @return {String}\n */\n getSvgStyles(): string {\n const opacity =\n typeof this.opacity !== 'undefined' && this.opacity !== 1\n ? `opacity: ${this.opacity};`\n : '',\n visibility = this.visible ? '' : ' visibility: hidden;';\n return [opacity, this.getSvgFilter(), visibility].join('');\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG(reviver?: TSVGReviver): string {\n const svgString = [];\n const bg = this._createSVGBgRect(reviver);\n bg && svgString.push('\\t', bg);\n for (let i = 0; i < this._objects.length; i++) {\n svgString.push('\\t', this._objects[i].toClipPathSVG(reviver));\n }\n return this._createBaseClipPathSVGMarkup(svgString, {\n reviver,\n });\n }\n\n /**\n * @todo support loading from svg\n * @private\n * @static\n * @memberOf Group\n * @param {Object} object Object to create a group from\n * @returns {Promise}\n */\n static fromObject>(\n { type, objects = [], layoutManager, ...options }: T,\n abortable?: Abortable,\n ) {\n return Promise.all([\n enlivenObjects(objects, abortable),\n enlivenObjectEnlivables(options, abortable),\n ]).then(([objects, hydratedOptions]) => {\n const group = new this(objects, {\n ...options,\n ...hydratedOptions,\n layoutManager: new NoopLayoutManager(),\n });\n if (layoutManager) {\n const layoutClass = classRegistry.getClass(\n layoutManager.type,\n );\n const strategyClass = classRegistry.getClass(\n layoutManager.strategy,\n );\n group.layoutManager = new layoutClass(new strategyClass());\n } else {\n group.layoutManager = new LayoutManager();\n }\n group.layoutManager.subscribeTargets({\n type: LAYOUT_TYPE_INITIALIZATION,\n target: group,\n targets: group.getObjects(),\n });\n group.setCoords();\n return group;\n });\n }\n}\n\nclassRegistry.setClass(Group);\n","import type { GroupProps } from '../../shapes/Group';\nimport { Group } from '../../shapes/Group';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\n\n/**\n * TODO experiment with different layout manager and svg results ( fixed fit content )\n * Groups SVG elements (usually those retrieved from SVG document)\n * @static\n * @param {FabricObject[]} elements FabricObject(s) parsed from svg, to group\n * @return {FabricObject | Group}\n */\nexport const groupSVGElements = (\n elements: FabricObject[],\n options?: Partial,\n) => {\n if (elements && elements.length === 1) {\n return elements[0];\n }\n return new Group(elements, options);\n};\n","import type { TSize } from '../../typedefs';\n\n/**\n * Finds the scale for the object source to fit inside the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @param {TSize} source natural unscaled size of the object\n * @param {TSize} destination natural unscaled size of the object\n * @return {Number} scale factor to apply to source to fit into destination\n */\nexport const findScaleToFit = (source: TSize, destination: TSize) =>\n Math.min(\n destination.width / source.width,\n destination.height / source.height,\n );\n\n/**\n * Finds the scale for the object source to cover entirely the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @param {TSize} source natural unscaled size of the object\n * @param {TSize} destination natural unscaled size of the object\n * @return {Number} scale factor to apply to source to cover destination\n */\nexport const findScaleToCover = (source: TSize, destination: TSize) =>\n Math.max(\n destination.width / source.width,\n destination.height / source.height,\n );\n","import { reNum } from '../../parser/constants';\n\nconst commaWsp = `\\\\s*,?\\\\s*`;\n\n/**\n * p for param\n * using \"bad naming\" here because it makes the regex much easier to read\n * p is a number that is preceded by an arbitary number of spaces, maybe 0,\n * a comma or not, and then possibly more spaces or not.\n */\nconst p = `${commaWsp}(${reNum})`;\n\n// const reMoveToCommand = `(M) ?(?:${p}${p} ?)+`;\n\n// const reLineCommand = `(L) ?(?:${p}${p} ?)+`;\n\n// const reHorizontalLineCommand = `(H) ?(?:${p} ?)+`;\n\n// const reVerticalLineCommand = `(V) ?(?:${p} ?)+`;\n\n// const reClosePathCommand = String.raw`(Z)\\s*`;\n\n// const reCubicCurveCommand = `(C) ?(?:${p}${p}${p}${p}${p}${p} ?)+`;\n\n// const reCubicCurveShortcutCommand = `(S) ?(?:${p}${p}${p}${p} ?)+`;\n\n// const reQuadraticCurveCommand = `(Q) ?(?:${p}${p}${p}${p} ?)+`;\n\n// const reQuadraticCurveShortcutCommand = `(T) ?(?:${p}${p} ?)+`;\n\nexport const reArcCommandPoints = `${p}${p}${p}${commaWsp}([01])${commaWsp}([01])${p}${p}`;\n// const reArcCommand = `(A) ?(?:${reArcCommandPoints} ?)+`;\n\n// export const rePathCommandGroups =\n// `(?:(?:${reMoveToCommand})` +\n// `|(?:${reLineCommand})` +\n// `|(?:${reHorizontalLineCommand})` +\n// `|(?:${reVerticalLineCommand})` +\n// `|(?:${reClosePathCommand})` +\n// `|(?:${reCubicCurveCommand})` +\n// `|(?:${reCubicCurveShortcutCommand})` +\n// `|(?:${reQuadraticCurveCommand})` +\n// `|(?:${reQuadraticCurveShortcutCommand})` +\n// `|(?:${reArcCommand}))`;\n\nexport const rePathCommand = '[mzlhvcsqta][^mzlhvcsqta]*';\n","import { cache } from '../../cache';\nimport { config } from '../../config';\nimport { halfPI, PiBy180 } from '../../constants';\nimport type { TMat2D, TRadian, TRectBounds } from '../../typedefs';\nimport { cos } from '../misc/cos';\nimport { multiplyTransformMatrices, transformPoint } from '../misc/matrix';\nimport { sin } from '../misc/sin';\nimport { toFixed } from '../misc/toFixed';\nimport type {\n TCurveInfo,\n TComplexPathData,\n TParsedAbsoluteCubicCurveCommand,\n TPathSegmentInfo,\n TPointAngle,\n TSimpleParsedCommand,\n TSimplePathData,\n TPathSegmentCommandInfo,\n TComplexParsedCommand,\n TPathSegmentInfoCommon,\n TEndPathInfo,\n TParsedArcCommand,\n TComplexParsedCommandType,\n} from './typedefs';\nimport type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport { reArcCommandPoints, rePathCommand } from './regex';\nimport { reNum } from '../../parser/constants';\n\n/**\n * Commands that may be repeated\n */\nconst repeatedCommands: Record = {\n m: 'l',\n M: 'L',\n};\n\n/**\n * Convert an arc of a rotated ellipse to a Bezier Curve\n * @param {TRadian} theta1 start of the arc\n * @param {TRadian} theta2 end of the arc\n * @param cosTh cosine of the angle of rotation\n * @param sinTh sine of the angle of rotation\n * @param rx x-axis radius (before rotation)\n * @param ry y-axis radius (before rotation)\n * @param cx1 center x of the ellipse\n * @param cy1 center y of the ellipse\n * @param mT\n * @param fromX starting point of arc x\n * @param fromY starting point of arc y\n */\nconst segmentToBezier = (\n theta1: TRadian,\n theta2: TRadian,\n cosTh: number,\n sinTh: number,\n rx: number,\n ry: number,\n cx1: number,\n cy1: number,\n mT: number,\n fromX: number,\n fromY: number,\n): TParsedAbsoluteCubicCurveCommand => {\n const costh1 = cos(theta1),\n sinth1 = sin(theta1),\n costh2 = cos(theta2),\n sinth2 = sin(theta2),\n toX = cosTh * rx * costh2 - sinTh * ry * sinth2 + cx1,\n toY = sinTh * rx * costh2 + cosTh * ry * sinth2 + cy1,\n cp1X = fromX + mT * (-cosTh * rx * sinth1 - sinTh * ry * costh1),\n cp1Y = fromY + mT * (-sinTh * rx * sinth1 + cosTh * ry * costh1),\n cp2X = toX + mT * (cosTh * rx * sinth2 + sinTh * ry * costh2),\n cp2Y = toY + mT * (sinTh * rx * sinth2 - cosTh * ry * costh2);\n\n return ['C', cp1X, cp1Y, cp2X, cp2Y, toX, toY];\n};\n\n/**\n * Adapted from {@link http://dxr.mozilla.org/mozilla-central/source/dom/svg/SVGPathDataParser.cpp}\n * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here\n * http://mozilla.org/MPL/2.0/\n * @param toX\n * @param toY\n * @param rx\n * @param ry\n * @param {number} large 0 or 1 flag\n * @param {number} sweep 0 or 1 flag\n * @param rotateX\n */\nconst arcToSegments = (\n toX: number,\n toY: number,\n rx: number,\n ry: number,\n large: number,\n sweep: number,\n rotateX: TRadian,\n): TParsedAbsoluteCubicCurveCommand[] => {\n if (rx === 0 || ry === 0) {\n return [];\n }\n let fromX = 0,\n fromY = 0,\n root = 0;\n const PI = Math.PI,\n theta = rotateX * PiBy180,\n sinTheta = sin(theta),\n cosTh = cos(theta),\n px = 0.5 * (-cosTh * toX - sinTheta * toY),\n py = 0.5 * (-cosTh * toY + sinTheta * toX),\n rx2 = rx ** 2,\n ry2 = ry ** 2,\n py2 = py ** 2,\n px2 = px ** 2,\n pl = rx2 * ry2 - rx2 * py2 - ry2 * px2;\n let _rx = Math.abs(rx);\n let _ry = Math.abs(ry);\n\n if (pl < 0) {\n const s = Math.sqrt(1 - pl / (rx2 * ry2));\n _rx *= s;\n _ry *= s;\n } else {\n root =\n (large === sweep ? -1.0 : 1.0) * Math.sqrt(pl / (rx2 * py2 + ry2 * px2));\n }\n\n const cx = (root * _rx * py) / _ry,\n cy = (-root * _ry * px) / _rx,\n cx1 = cosTh * cx - sinTheta * cy + toX * 0.5,\n cy1 = sinTheta * cx + cosTh * cy + toY * 0.5;\n let mTheta = calcVectorAngle(1, 0, (px - cx) / _rx, (py - cy) / _ry);\n let dtheta = calcVectorAngle(\n (px - cx) / _rx,\n (py - cy) / _ry,\n (-px - cx) / _rx,\n (-py - cy) / _ry,\n );\n\n if (sweep === 0 && dtheta > 0) {\n dtheta -= 2 * PI;\n } else if (sweep === 1 && dtheta < 0) {\n dtheta += 2 * PI;\n }\n\n // Convert into cubic bezier segments <= 90deg\n const segments = Math.ceil(Math.abs((dtheta / PI) * 2)),\n result = [],\n mDelta = dtheta / segments,\n mT =\n ((8 / 3) * Math.sin(mDelta / 4) * Math.sin(mDelta / 4)) /\n Math.sin(mDelta / 2);\n let th3 = mTheta + mDelta;\n\n for (let i = 0; i < segments; i++) {\n result[i] = segmentToBezier(\n mTheta,\n th3,\n cosTh,\n sinTheta,\n _rx,\n _ry,\n cx1,\n cy1,\n mT,\n fromX,\n fromY,\n );\n fromX = result[i][5];\n fromY = result[i][6];\n mTheta = th3;\n th3 += mDelta;\n }\n return result;\n};\n\n/**\n * @private\n * Calculate the angle between two vectors\n * @param ux u endpoint x\n * @param uy u endpoint y\n * @param vx v endpoint x\n * @param vy v endpoint y\n */\nconst calcVectorAngle = (\n ux: number,\n uy: number,\n vx: number,\n vy: number,\n): TRadian => {\n const ta = Math.atan2(uy, ux),\n tb = Math.atan2(vy, vx);\n if (tb >= ta) {\n return tb - ta;\n } else {\n return 2 * Math.PI - (ta - tb);\n }\n};\n\n// functions for the Cubic beizer\n// taken from: https://github.com/konvajs/konva/blob/7.0.5/src/shapes/Path.ts#L350\nconst CB1 = (t: number) => t ** 3;\nconst CB2 = (t: number) => 3 * t ** 2 * (1 - t);\nconst CB3 = (t: number) => 3 * t * (1 - t) ** 2;\nconst CB4 = (t: number) => (1 - t) ** 3;\n\n/**\n * Calculate bounding box of a cubic Bezier curve\n * Taken from http://jsbin.com/ivomiq/56/edit (no credits available)\n * TODO: can we normalize this with the starting points set at 0 and then translated the bbox?\n * @param {number} begx starting point\n * @param {number} begy\n * @param {number} cp1x first control point\n * @param {number} cp1y\n * @param {number} cp2x second control point\n * @param {number} cp2y\n * @param {number} endx end of bezier\n * @param {number} endy\n * @return {TRectBounds} the rectangular bounds\n */\nexport function getBoundsOfCurve(\n begx: number,\n begy: number,\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n endx: number,\n endy: number,\n): TRectBounds {\n let argsString: string;\n if (config.cachesBoundsOfCurve) {\n // eslint-disable-next-line\n argsString = [...arguments].join();\n if (cache.boundsOfCurveCache[argsString]) {\n return cache.boundsOfCurveCache[argsString];\n }\n }\n\n const sqrt = Math.sqrt,\n abs = Math.abs,\n tvalues = [],\n bounds: [[x: number, y: number], [x: number, y: number]] = [\n [0, 0],\n [0, 0],\n ];\n\n let b = 6 * begx - 12 * cp1x + 6 * cp2x;\n let a = -3 * begx + 9 * cp1x - 9 * cp2x + 3 * endx;\n let c = 3 * cp1x - 3 * begx;\n\n for (let i = 0; i < 2; ++i) {\n if (i > 0) {\n b = 6 * begy - 12 * cp1y + 6 * cp2y;\n a = -3 * begy + 9 * cp1y - 9 * cp2y + 3 * endy;\n c = 3 * cp1y - 3 * begy;\n }\n\n if (abs(a) < 1e-12) {\n if (abs(b) < 1e-12) {\n continue;\n }\n const t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n const b2ac = b * b - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n const sqrtb2ac = sqrt(b2ac);\n const t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n const t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n let j = tvalues.length;\n const jlen = j;\n const iterator = getPointOnCubicBezierIterator(\n begx,\n begy,\n cp1x,\n cp1y,\n cp2x,\n cp2y,\n endx,\n endy,\n );\n while (j--) {\n const { x, y } = iterator(tvalues[j]);\n bounds[0][j] = x;\n bounds[1][j] = y;\n }\n\n bounds[0][jlen] = begx;\n bounds[1][jlen] = begy;\n bounds[0][jlen + 1] = endx;\n bounds[1][jlen + 1] = endy;\n const result: TRectBounds = [\n new Point(Math.min(...bounds[0]), Math.min(...bounds[1])),\n new Point(Math.max(...bounds[0]), Math.max(...bounds[1])),\n ];\n if (config.cachesBoundsOfCurve) {\n cache.boundsOfCurveCache[argsString!] = result;\n }\n return result;\n}\n\n/**\n * Converts arc to a bunch of cubic Bezier curves\n * @param {number} fx starting point x\n * @param {number} fy starting point y\n * @param {TParsedArcCommand} coords Arc command\n */\nexport const fromArcToBeziers = (\n fx: number,\n fy: number,\n [_, rx, ry, rot, large, sweep, tx, ty]: TParsedArcCommand,\n): TParsedAbsoluteCubicCurveCommand[] => {\n const segsNorm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\n\n for (let i = 0, len = segsNorm.length; i < len; i++) {\n segsNorm[i][1] += fx;\n segsNorm[i][2] += fy;\n segsNorm[i][3] += fx;\n segsNorm[i][4] += fy;\n segsNorm[i][5] += fx;\n segsNorm[i][6] += fy;\n }\n return segsNorm;\n};\n\n/**\n * This function takes a parsed SVG path and makes it simpler for fabricJS logic.\n * Simplification consist of:\n * - All commands converted to absolute (lowercase to uppercase)\n * - S converted to C\n * - T converted to Q\n * - A converted to C\n * @param {TComplexPathData} path the array of commands of a parsed SVG path for `Path`\n * @return {TSimplePathData} the simplified array of commands of a parsed SVG path for `Path`\n * TODO: figure out how to remove the type assertions in a nice way\n */\nexport const makePathSimpler = (path: TComplexPathData): TSimplePathData => {\n // x and y represent the last point of the path, AKA the previous command point.\n // we add them to each relative command to make it an absolute comment.\n // we also swap the v V h H with L, because are easier to transform.\n let x = 0,\n y = 0;\n // x1 and y1 represent the last point of the subpath. the subpath is started with\n // m or M command. When a z or Z command is drawn, x and y need to be resetted to\n // the last x1 and y1.\n let x1 = 0,\n y1 = 0;\n // previous will host the letter of the previous command, to handle S and T.\n // controlX and controlY will host the previous reflected control point\n const destinationPath: TSimplePathData = [];\n let previous,\n // placeholders\n controlX = 0,\n controlY = 0;\n for (const parsedCommand of path) {\n const current: TComplexParsedCommand = [...parsedCommand];\n let converted: TSimpleParsedCommand | undefined;\n switch (\n current[0] // first letter\n ) {\n case 'l': // lineto, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'L':\n x = current[1];\n y = current[2];\n converted = ['L', x, y];\n break;\n case 'h': // horizontal lineto, relative\n current[1] += x;\n // falls through\n case 'H':\n x = current[1];\n converted = ['L', x, y];\n break;\n case 'v': // vertical lineto, relative\n current[1] += y;\n // falls through\n case 'V':\n y = current[1];\n converted = ['L', x, y];\n break;\n case 'm': // moveTo, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'M':\n x = current[1];\n y = current[2];\n x1 = current[1];\n y1 = current[2];\n converted = ['M', x, y];\n break;\n case 'c': // bezierCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n current[5] += x;\n current[6] += y;\n // falls through\n case 'C':\n controlX = current[3];\n controlY = current[4];\n x = current[5];\n y = current[6];\n converted = ['C', current[1], current[2], controlX, controlY, x, y];\n break;\n case 's': // shorthand cubic bezierCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'S':\n // would be sScC but since we are swapping sSc for C, we check just that.\n if (previous === 'C') {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n } else {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n x = current[3];\n y = current[4];\n converted = ['C', controlX, controlY, current[1], current[2], x, y];\n // converted[3] and converted[4] are NOW the second control point.\n // we keep it for the next reflection.\n controlX = converted[3];\n controlY = converted[4];\n break;\n case 'q': // quadraticCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'Q':\n controlX = current[1];\n controlY = current[2];\n x = current[3];\n y = current[4];\n converted = ['Q', controlX, controlY, x, y];\n break;\n case 't': // shorthand quadraticCurveTo, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'T':\n if (previous === 'Q') {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n } else {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n x = current[1];\n y = current[2];\n converted = ['Q', controlX, controlY, x, y];\n break;\n case 'a':\n current[6] += x;\n current[7] += y;\n // falls through\n case 'A':\n fromArcToBeziers(x, y, current).forEach((b) => destinationPath.push(b));\n x = current[6];\n y = current[7];\n break;\n case 'z':\n case 'Z':\n x = x1;\n y = y1;\n converted = ['Z'];\n break;\n default:\n }\n if (converted) {\n destinationPath.push(converted);\n previous = converted[0];\n } else {\n previous = '';\n }\n }\n return destinationPath;\n};\n\n// todo verify if we can just use the point class here\n/**\n * Calc length from point x1,y1 to x2,y2\n * @param {number} x1 starting point x\n * @param {number} y1 starting point y\n * @param {number} x2 starting point x\n * @param {number} y2 starting point y\n * @return {number} length of segment\n */\nconst calcLineLength = (\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n): number => Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n\n/**\n * Get an iterator that takes a percentage and returns a point\n * @param {number} begx\n * @param {number} begy\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} endx\n * @param {number} endy\n */\nconst getPointOnCubicBezierIterator =\n (\n begx: number,\n begy: number,\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n endx: number,\n endy: number,\n ) =>\n (pct: number) => {\n const c1 = CB1(pct),\n c2 = CB2(pct),\n c3 = CB3(pct),\n c4 = CB4(pct);\n return new Point(\n endx * c1 + cp2x * c2 + cp1x * c3 + begx * c4,\n endy * c1 + cp2y * c2 + cp1y * c3 + begy * c4,\n );\n };\n\nconst QB1 = (t: number) => t ** 2;\nconst QB2 = (t: number) => 2 * t * (1 - t);\nconst QB3 = (t: number) => (1 - t) ** 2;\n\nconst getTangentCubicIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n p4x: number,\n p4y: number,\n ) =>\n (pct: number) => {\n const qb1 = QB1(pct),\n qb2 = QB2(pct),\n qb3 = QB3(pct),\n tangentX =\n 3 * (qb3 * (p2x - p1x) + qb2 * (p3x - p2x) + qb1 * (p4x - p3x)),\n tangentY =\n 3 * (qb3 * (p2y - p1y) + qb2 * (p3y - p2y) + qb1 * (p4y - p3y));\n return Math.atan2(tangentY, tangentX);\n };\n\nconst getPointOnQuadraticBezierIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n ) =>\n (pct: number) => {\n const c1 = QB1(pct),\n c2 = QB2(pct),\n c3 = QB3(pct);\n return new Point(\n p3x * c1 + p2x * c2 + p1x * c3,\n p3y * c1 + p2y * c2 + p1y * c3,\n );\n };\n\nconst getTangentQuadraticIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n ) =>\n (pct: number) => {\n const invT = 1 - pct,\n tangentX = 2 * (invT * (p2x - p1x) + pct * (p3x - p2x)),\n tangentY = 2 * (invT * (p2y - p1y) + pct * (p3y - p2y));\n return Math.atan2(tangentY, tangentX);\n };\n\n// this will run over a path segment (a cubic or quadratic segment) and approximate it\n// with 100 segments. This will good enough to calculate the length of the curve\nconst pathIterator = (\n iterator: (pct: number) => Point,\n x1: number,\n y1: number,\n) => {\n let tempP = new Point(x1, y1),\n tmpLen = 0;\n for (let perc = 1; perc <= 100; perc += 1) {\n const p = iterator(perc / 100);\n tmpLen += calcLineLength(tempP.x, tempP.y, p.x, p.y);\n tempP = p;\n }\n return tmpLen;\n};\n\n/**\n * Given a pathInfo, and a distance in pixels, find the percentage from 0 to 1\n * that correspond to that pixels run over the path.\n * The percentage will be then used to find the correct point on the canvas for the path.\n * @param {Array} segInfo fabricJS collection of information on a parsed path\n * @param {number} distance from starting point, in pixels.\n * @return {TPointAngle} info object with x and y ( the point on canvas ) and angle, the tangent on that point;\n */\nconst findPercentageForDistance = (\n segInfo: TCurveInfo<'Q' | 'C'>,\n distance: number,\n): TPointAngle => {\n let perc = 0,\n tmpLen = 0,\n tempP: XY = { x: segInfo.x, y: segInfo.y },\n p: XY = { ...tempP },\n nextLen: number,\n nextStep = 0.01,\n lastPerc = 0;\n // nextStep > 0.0001 covers 0.00015625 that 1/64th of 1/100\n // the path\n const iterator = segInfo.iterator,\n angleFinder = segInfo.angleFinder;\n while (tmpLen < distance && nextStep > 0.0001) {\n p = iterator(perc);\n lastPerc = perc;\n nextLen = calcLineLength(tempP.x, tempP.y, p.x, p.y);\n // compare tmpLen each cycle with distance, decide next perc to test.\n if (nextLen + tmpLen > distance) {\n // we discard this step and we make smaller steps.\n perc -= nextStep;\n nextStep /= 2;\n } else {\n tempP = p;\n perc += nextStep;\n tmpLen += nextLen;\n }\n }\n return { ...p, angle: angleFinder(lastPerc) };\n};\n\n/**\n * Run over a parsed and simplified path and extract some information (length of each command and starting point)\n * @param {TSimplePathData} path parsed path commands\n * @return {TPathSegmentInfo[]} path commands information\n */\nexport const getPathSegmentsInfo = (\n path: TSimplePathData,\n): TPathSegmentInfo[] => {\n let totalLength = 0,\n //x2 and y2 are the coords of segment start\n //x1 and y1 are the coords of the current point\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n iterator,\n tempInfo: TPathSegmentInfo;\n const info: TPathSegmentInfo[] = [];\n for (const current of path) {\n const basicInfo: TPathSegmentInfoCommon = {\n x: x1,\n y: y1,\n command: current[0],\n length: 0,\n };\n switch (\n current[0] //first letter\n ) {\n case 'M':\n tempInfo = >basicInfo;\n tempInfo.x = x2 = x1 = current[1];\n tempInfo.y = y2 = y1 = current[2];\n break;\n case 'L':\n tempInfo = >basicInfo;\n tempInfo.length = calcLineLength(x1, y1, current[1], current[2]);\n x1 = current[1];\n y1 = current[2];\n break;\n case 'C':\n iterator = getPointOnCubicBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6],\n );\n tempInfo = >basicInfo;\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = getTangentCubicIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6],\n );\n tempInfo.length = pathIterator(iterator, x1, y1);\n\n x1 = current[5];\n y1 = current[6];\n break;\n case 'Q':\n iterator = getPointOnQuadraticBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n );\n tempInfo = >basicInfo;\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = getTangentQuadraticIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n );\n tempInfo.length = pathIterator(iterator, x1, y1);\n x1 = current[3];\n y1 = current[4];\n break;\n case 'Z':\n // we add those in order to ease calculations later\n tempInfo = basicInfo;\n tempInfo.destX = x2;\n tempInfo.destY = y2;\n tempInfo.length = calcLineLength(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n break;\n }\n totalLength += tempInfo.length;\n info.push(tempInfo);\n }\n info.push({ length: totalLength, x: x1, y: y1 });\n return info;\n};\n\n/**\n * Get the point on the path that is distance along the path\n * @param path\n * @param distance\n * @param infos\n */\nexport const getPointOnPath = (\n path: TSimplePathData,\n distance: number,\n infos: TPathSegmentInfo[] = getPathSegmentsInfo(path),\n): TPointAngle | undefined => {\n let i = 0;\n while (distance - infos[i].length > 0 && i < infos.length - 2) {\n distance -= infos[i].length;\n i++;\n }\n const segInfo = infos[i],\n segPercent = distance / segInfo.length,\n segment = path[i];\n\n switch (segInfo.command) {\n case 'M':\n return { x: segInfo.x, y: segInfo.y, angle: 0 };\n case 'Z':\n return {\n ...new Point(segInfo.x, segInfo.y).lerp(\n new Point(segInfo.destX, segInfo.destY),\n segPercent,\n ),\n angle: Math.atan2(segInfo.destY - segInfo.y, segInfo.destX - segInfo.x),\n };\n case 'L':\n return {\n ...new Point(segInfo.x, segInfo.y).lerp(\n new Point(segment[1]!, segment[2]!),\n segPercent,\n ),\n angle: Math.atan2(segment[2]! - segInfo.y, segment[1]! - segInfo.x),\n };\n case 'C':\n return findPercentageForDistance(segInfo, distance);\n case 'Q':\n return findPercentageForDistance(segInfo, distance);\n default:\n // throw Error('Invalid command');\n }\n};\n\nconst rePathCmdAll = new RegExp(rePathCommand, 'gi');\nconst regExpArcCommandPoints = new RegExp(reArcCommandPoints, 'g');\nconst reMyNum = new RegExp(reNum, 'gi');\nconst commandLengths = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7,\n} as const;\n/**\n *\n * @param {string} pathString\n * @return {TComplexPathData} An array of SVG path commands\n * @example Usage\n * parsePath('M 3 4 Q 3 5 2 1 4 0 Q 9 12 2 1 4 0') === [\n * ['M', 3, 4],\n * ['Q', 3, 5, 2, 1, 4, 0],\n * ['Q', 9, 12, 2, 1, 4, 0],\n * ];\n */\nexport const parsePath = (pathString: string): TComplexPathData => {\n const chain: TComplexPathData = [];\n const all = pathString.match(rePathCmdAll) ?? [];\n for (const matchStr of all) {\n // take match string and save the first letter as the command\n const commandLetter = matchStr[0] as TComplexParsedCommandType;\n // in case of Z we have very little to do\n if (commandLetter === 'z' || commandLetter === 'Z') {\n chain.push([commandLetter]);\n continue;\n }\n const commandLength =\n commandLengths[\n commandLetter.toLowerCase() as keyof typeof commandLengths\n ];\n\n let paramArr = [];\n if (commandLetter === 'a' || commandLetter === 'A') {\n // the arc command ha some peculariaties that requires a special regex other than numbers\n // it is possible to avoid using a space between the sweep and large arc flags, making them either\n // 00, 01, 10 or 11, making them identical to a plain number for the regex reMyNum\n // reset the regexp\n regExpArcCommandPoints.lastIndex = 0;\n for (let out = null; (out = regExpArcCommandPoints.exec(matchStr)); ) {\n paramArr.push(...out.slice(1));\n }\n } else {\n paramArr = matchStr.match(reMyNum) || [];\n }\n\n // inspect the length of paramArr, if is longer than commandLength\n // we are dealing with repeated commands\n for (let i = 0; i < paramArr.length; i += commandLength) {\n const newCommand = new Array(commandLength) as TComplexParsedCommand;\n const transformedCommand = repeatedCommands[commandLetter];\n newCommand[0] =\n i > 0 && transformedCommand ? transformedCommand : commandLetter;\n for (let j = 0; j < commandLength; j++) {\n newCommand[j + 1] = parseFloat(paramArr[i + j]);\n }\n chain.push(newCommand);\n }\n }\n return chain;\n};\n\n/**\n *\n * Converts points to a smooth SVG path\n * @param {XY[]} points Array of points\n * @param {number} [correction] Apply a correction to the path (usually we use `width / 1000`). If value is undefined 0 is used as the correction value.\n * @return {(string|number)[][]} An array of SVG path commands\n */\nexport const getSmoothPathFromPoints = (\n points: Point[],\n correction = 0,\n): TSimplePathData => {\n let p1 = new Point(points[0]),\n p2 = new Point(points[1]),\n multSignX = 1,\n multSignY = 0;\n const path: TSimplePathData = [],\n len = points.length,\n manyPoints = len > 2;\n\n if (manyPoints) {\n multSignX = points[2].x < p2.x ? -1 : points[2].x === p2.x ? 0 : 1;\n multSignY = points[2].y < p2.y ? -1 : points[2].y === p2.y ? 0 : 1;\n }\n path.push([\n 'M',\n p1.x - multSignX * correction,\n p1.y - multSignY * correction,\n ]);\n let i;\n for (i = 1; i < len; i++) {\n if (!p1.eq(p2)) {\n const midPoint = p1.midPointFrom(p2);\n // p1 is our bezier control point\n // midpoint is our endpoint\n // start point is p(i-1) value.\n path.push(['Q', p1.x, p1.y, midPoint.x, midPoint.y]);\n }\n p1 = points[i];\n if (i + 1 < points.length) {\n p2 = points[i + 1];\n }\n }\n if (manyPoints) {\n multSignX = p1.x > points[i - 2].x ? 1 : p1.x === points[i - 2].x ? 0 : -1;\n multSignY = p1.y > points[i - 2].y ? 1 : p1.y === points[i - 2].y ? 0 : -1;\n }\n path.push([\n 'L',\n p1.x + multSignX * correction,\n p1.y + multSignY * correction,\n ]);\n return path;\n};\n\n/**\n * Transform a path by transforming each segment.\n * it has to be a simplified path or it won't work.\n * WARNING: this depends from pathOffset for correct operation\n * @param {TSimplePathData} path fabricJS parsed and simplified path commands\n * @param {TMat2D} transform matrix that represent the transformation\n * @param {Point} [pathOffset] `Path.pathOffset`\n * @returns {TSimplePathData} the transformed path\n */\nexport const transformPath = (\n path: TSimplePathData,\n transform: TMat2D,\n pathOffset: Point,\n): TSimplePathData => {\n if (pathOffset) {\n transform = multiplyTransformMatrices(transform, [\n 1,\n 0,\n 0,\n 1,\n -pathOffset.x,\n -pathOffset.y,\n ]);\n }\n return path.map((pathSegment) => {\n const newSegment: TSimpleParsedCommand = [...pathSegment];\n for (let i = 1; i < pathSegment.length - 1; i += 2) {\n // TODO: is there a way to get around casting to any?\n const { x, y } = transformPoint(\n {\n x: pathSegment[i] as number,\n y: pathSegment[i + 1] as number,\n },\n transform,\n );\n newSegment[i] = x;\n newSegment[i + 1] = y;\n }\n return newSegment;\n });\n};\n\n/**\n * Returns an array of path commands to create a regular polygon\n * @param {number} numVertexes\n * @param {number} radius\n * @returns {TSimplePathData} An array of SVG path commands\n */\nexport const getRegularPolygonPath = (\n numVertexes: number,\n radius: number,\n): TSimplePathData => {\n const interiorAngle = (Math.PI * 2) / numVertexes;\n // rotationAdjustment rotates the path by 1/2 the interior angle so that the polygon always has a flat side on the bottom\n // This isn't strictly necessary, but it's how we tend to think of and expect polygons to be drawn\n let rotationAdjustment = -halfPI;\n if (numVertexes % 2 === 0) {\n rotationAdjustment += interiorAngle / 2;\n }\n const d = new Array(numVertexes + 1);\n for (let i = 0; i < numVertexes; i++) {\n const rad = i * interiorAngle + rotationAdjustment;\n const { x, y } = new Point(cos(rad), sin(rad)).scalarMultiply(radius);\n d[i] = [i === 0 ? 'M' : 'L', x, y];\n }\n d[numVertexes] = ['Z'];\n return d;\n};\n\n/**\n * Join path commands to go back to svg format\n * @param {TSimplePathData} pathData fabricJS parsed path commands\n * @param {number} fractionDigits number of fraction digits to \"leave\"\n * @return {String} joined path 'M 0 0 L 20 30'\n */\nexport const joinPath = (pathData: TSimplePathData, fractionDigits?: number) =>\n pathData\n .map((segment) => {\n return segment\n .map((arg, i) => {\n if (i === 0) return arg;\n return fractionDigits === undefined\n ? arg\n : toFixed(arg, fractionDigits);\n })\n .join(' ');\n })\n .join(' ');\n","// TODO this file needs to go away, cross browser style support is not fabricjs domain.\n\n/**\n * wrapper for setting element's style\n * @param {HTMLElement} element\n * @param {Object | string} styles\n */\nexport function setStyle(\n element: HTMLElement,\n styles: string | Record,\n) {\n const elementStyle = element.style;\n if (!elementStyle || !styles) {\n return;\n } else if (typeof styles === 'string') {\n elementStyle.cssText += ';' + styles;\n } else {\n Object.entries(styles).forEach(([property, value]) =>\n elementStyle.setProperty(property, value),\n );\n }\n}\n","import type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { sendObjectToPlane } from './planeChange';\nimport { Group } from '../../shapes/Group';\n/**\n * Merges 2 clip paths into one visually equal clip path\n *\n * **IMPORTANT**:\\\n * Does **NOT** clone the arguments, clone them proir if necessary.\n *\n * Creates a wrapper (group) that contains one clip path and is clipped by the other so content is kept where both overlap.\n * Use this method if both the clip paths may have nested clip paths of their own, so assigning one to the other's clip path property is not possible.\n *\n * In order to handle the `inverted` property we follow logic described in the following cases:\\\n * **(1)** both clip paths are inverted - the clip paths pass the inverted prop to the wrapper and loose it themselves.\\\n * **(2)** one is inverted and the other isn't - the wrapper shouldn't become inverted and the inverted clip path must clip the non inverted one to produce an identical visual effect.\\\n * **(3)** both clip paths are not inverted - wrapper and clip paths remain unchanged.\n *\n * @memberOf fabric.util\n * @param {fabric.Object} c1\n * @param {fabric.Object} c2\n * @returns {fabric.Object} merged clip path\n */\nexport const mergeClipPaths = (c1: FabricObject, c2: FabricObject) => {\n let a = c1,\n b = c2;\n if (a.inverted && !b.inverted) {\n // case (2)\n a = c2;\n b = c1;\n }\n // `b` becomes `a`'s clip path so we transform `b` to `a` coordinate plane\n sendObjectToPlane(b, b.group?.calcTransformMatrix(), a.calcTransformMatrix());\n // assign the `inverted` prop to the wrapping group\n const inverted = a.inverted && b.inverted;\n if (inverted) {\n // case (1)\n a.inverted = b.inverted = false;\n }\n return new Group([a], { clipPath: b, inverted });\n};\n","/**\n * Returns random number between 2 specified ones.\n * @param {Number} min lower limit\n * @param {Number} max upper limit\n * @return {Number} random value (between min and max)\n */\nexport const getRandomInt = (min: number, max: number): number =>\n Math.floor(Math.random() * (max - min + 1)) + min;\n","import { getFabricWindow } from '../../env';\nimport { noop } from '../../constants';\nimport type { Abortable } from '../../typedefs';\nimport { SignalAbortedError } from './console';\n\ntype requestOptions = Abortable & {\n onComplete?: (xhr: XMLHttpRequest) => void;\n};\n\n/**\n * Cross-browser abstraction for sending XMLHttpRequest\n * @deprecated this has to go away, we can use a modern browser method to do the same.\n * @param {String} url URL to send XMLHttpRequest to\n * @param {Object} [options] Options object\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @param {Function} options.onComplete Callback to invoke when request is completed\n * @return {XMLHttpRequest} request\n */\n\nexport function request(url: string, options: requestOptions = {}) {\n const onComplete = options.onComplete || noop,\n xhr = new (getFabricWindow().XMLHttpRequest)(),\n signal = options.signal,\n abort = function () {\n xhr.abort();\n },\n removeListener = function () {\n signal && signal.removeEventListener('abort', abort);\n xhr.onerror = xhr.ontimeout = noop;\n };\n\n if (signal && signal.aborted) {\n throw new SignalAbortedError('request');\n } else if (signal) {\n signal.addEventListener('abort', abort, { once: true });\n }\n\n /** @ignore */\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n removeListener();\n onComplete(xhr);\n xhr.onreadystatechange = noop;\n }\n };\n\n xhr.onerror = xhr.ontimeout = removeListener;\n\n xhr.open('get', url, true);\n\n xhr.send();\n return xhr;\n}\n","import { CENTER, SCALE_X, SCALE_Y } from '../constants';\nimport type { FabricImage } from '../shapes/Image';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { qrDecompose } from './misc/matrix';\n\ntype FabricObjectWithTransformMatrix = FabricObject & {\n transformMatrix?: TMat2D;\n};\n\n/**\n * This function is an helper for svg import. it decompose the transformMatrix\n * and assign properties to object.\n * untransformed coordinates\n * @private\n */\nconst _assignTransformMatrixProps = (\n object: FabricObjectWithTransformMatrix,\n) => {\n if (object.transformMatrix) {\n const { scaleX, scaleY, angle, skewX } = qrDecompose(\n object.transformMatrix,\n );\n object.flipX = false;\n object.flipY = false;\n object.set(SCALE_X, scaleX);\n object.set(SCALE_Y, scaleY);\n object.angle = angle;\n object.skewX = skewX;\n object.skewY = 0;\n }\n};\n\n/**\n * This function is an helper for svg import. it removes the transform matrix\n * and set to object properties that fabricjs can handle\n * @private\n * @param {Object} preserveAspectRatioOptions\n */\nexport const removeTransformMatrixForSvgParsing = (\n object: FabricObjectWithTransformMatrix,\n preserveAspectRatioOptions?: any,\n) => {\n let center = object._findCenterFromElement();\n if (object.transformMatrix) {\n _assignTransformMatrixProps(object);\n center = center.transform(object.transformMatrix);\n }\n delete object.transformMatrix;\n if (preserveAspectRatioOptions) {\n object.scaleX *= preserveAspectRatioOptions.scaleX;\n object.scaleY *= preserveAspectRatioOptions.scaleY;\n (object as FabricImage).cropX = preserveAspectRatioOptions.cropX;\n (object as FabricImage).cropY = preserveAspectRatioOptions.cropY;\n center.x += preserveAspectRatioOptions.offsetLeft;\n center.y += preserveAspectRatioOptions.offsetTop;\n object.width = preserveAspectRatioOptions.width;\n object.height = preserveAspectRatioOptions.height;\n }\n object.setPositionByOrigin(center, CENTER, CENTER);\n};\n","import { getEnv, getFabricDocument } from '../../env';\nimport type { TSize } from '../../typedefs';\nimport { createCanvasElement, setStyle } from '../../util';\nimport type { CSSDimensions } from './util';\nimport { makeElementUnselectable, setCSSDimensions } from './util';\nimport type { CanvasItem } from './StaticCanvasDOMManager';\nimport { StaticCanvasDOMManager } from './StaticCanvasDOMManager';\nimport { setCanvasDimensions } from './util';\nimport { NONE } from '../../constants';\n\nexport class CanvasDOMManager extends StaticCanvasDOMManager {\n upper: CanvasItem;\n container: HTMLDivElement;\n\n constructor(\n arg0?: string | HTMLCanvasElement,\n {\n allowTouchScrolling = false,\n containerClass = '',\n }: {\n allowTouchScrolling?: boolean;\n /**\n * @deprecated here only for backward compatibility\n */\n containerClass?: string;\n } = {},\n ) {\n super(arg0);\n const { el: lowerCanvasEl } = this.lower;\n const upperCanvasEl = this.createUpperCanvas();\n this.upper = { el: upperCanvasEl, ctx: upperCanvasEl.getContext('2d')! };\n this.applyCanvasStyle(lowerCanvasEl, {\n allowTouchScrolling,\n });\n this.applyCanvasStyle(upperCanvasEl, {\n allowTouchScrolling,\n styles: {\n position: 'absolute',\n left: '0',\n top: '0',\n },\n });\n const container = this.createContainerElement();\n container.classList.add(containerClass);\n if (lowerCanvasEl.parentNode) {\n lowerCanvasEl.parentNode.replaceChild(container, lowerCanvasEl);\n }\n container.append(lowerCanvasEl, upperCanvasEl);\n this.container = container;\n }\n\n protected createUpperCanvas() {\n const { el: lowerCanvasEl } = this.lower;\n const el = createCanvasElement();\n // we assign the same classname of the lowerCanvas\n el.className = lowerCanvasEl.className;\n // but then we remove the lower-canvas specific className\n el.classList.remove('lower-canvas');\n // we add the specific upper-canvas class\n el.classList.add('upper-canvas');\n el.setAttribute('data-fabric', 'top');\n el.style.cssText = lowerCanvasEl.style.cssText;\n el.setAttribute('draggable', 'true');\n return el;\n }\n\n protected createContainerElement() {\n const container = getFabricDocument().createElement('div');\n container.setAttribute('data-fabric', 'wrapper');\n setStyle(container, {\n position: 'relative',\n });\n makeElementUnselectable(container);\n return container;\n }\n\n /**\n * @private\n * @param {HTMLCanvasElement} element canvas element to apply styles on\n */\n protected applyCanvasStyle(\n element: HTMLCanvasElement,\n options: {\n allowTouchScrolling?: boolean;\n styles?: Record;\n },\n ) {\n const { styles, allowTouchScrolling } = options;\n setStyle(element, {\n ...styles,\n 'touch-action': allowTouchScrolling ? 'manipulation' : NONE,\n });\n makeElementUnselectable(element);\n }\n\n setDimensions(size: TSize, retinaScaling: number) {\n super.setDimensions(size, retinaScaling);\n const { el, ctx } = this.upper;\n setCanvasDimensions(el, ctx, size, retinaScaling);\n }\n\n setCSSDimensions(size: Partial): void {\n super.setCSSDimensions(size);\n setCSSDimensions(this.upper.el, size);\n setCSSDimensions(this.container, size);\n }\n\n cleanupDOM(size: TSize) {\n const container = this.container,\n { el: lowerCanvasEl } = this.lower,\n { el: upperCanvasEl } = this.upper;\n super.cleanupDOM(size);\n container.removeChild(upperCanvasEl);\n container.removeChild(lowerCanvasEl);\n if (container.parentNode) {\n container.parentNode.replaceChild(lowerCanvasEl, container);\n }\n }\n\n dispose() {\n super.dispose();\n getEnv().dispose(this.upper.el);\n // @ts-expect-error disposing\n delete this.upper;\n // @ts-expect-error disposing\n delete this.container;\n }\n}\n","import type { ModifierKey, TOptionalModifierKey } from '../EventTypeDefs';\nimport type { TOptions } from '../typedefs';\nimport type { StaticCanvasOptions } from './StaticCanvasOptions';\n\nexport interface CanvasTransformOptions {\n /**\n * When true, objects can be transformed by one side (unproportionately)\n * when dragged on the corners that normally would not do that.\n * @type Boolean\n * @default\n * @since fabric 4.0 // changed name and default value\n */\n uniformScaling: boolean;\n\n /**\n * Indicates which key switches uniform scaling.\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * totally wrong named. this sounds like `uniform scaling`\n * if Canvas.uniformScaling is true, pressing this will set it to false\n * and viceversa.\n * @since 1.6.2\n * @type ModifierKey\n * @default\n */\n uniScaleKey: TOptionalModifierKey;\n\n /**\n * When true, objects use center point as the origin of scale transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredScaling: boolean;\n\n /**\n * When true, objects use center point as the origin of rotate transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredRotation: boolean;\n\n /**\n * Indicates which key enable centered Transform\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type ModifierKey\n * @default\n */\n centeredKey: TOptionalModifierKey;\n\n /**\n * Indicates which key enable alternate action on corner\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type ModifierKey\n * @default\n */\n altActionKey: TOptionalModifierKey;\n}\n\nexport interface CanvasSelectionOptions {\n /**\n * Indicates whether group selection should be enabled\n * @type Boolean\n * @default\n */\n selection: boolean;\n\n /**\n * Indicates which key or keys enable multiple click selection\n * Pass value as a string or array of strings\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or empty or containing any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.2\n * @type ModifierKey|ModifierKey[]\n * @default\n */\n selectionKey: TOptionalModifierKey | ModifierKey[];\n\n /**\n * Indicates which key enable alternative selection\n * in case of target overlapping with active object\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * For a series of reason that come from the general expectations on how\n * things should work, this feature works only for preserveObjectStacking true.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.5\n * @type null|ModifierKey\n * @default\n */\n altSelectionKey: TOptionalModifierKey;\n\n /**\n * Color of selection\n * @type String\n * @default\n */\n selectionColor: string;\n\n /**\n * Default dash array pattern\n * If not empty the selection border is dashed\n * @type Array\n */\n selectionDashArray: number[];\n\n /**\n * Color of the border of selection (usually slightly darker than color of selection itself)\n * @type String\n * @default\n */\n selectionBorderColor: string;\n\n /**\n * Width of a line used in object/group selection\n * @type Number\n * @default\n */\n selectionLineWidth: number;\n\n /**\n * Select only shapes that are fully contained in the dragged selection rectangle.\n * @type Boolean\n * @default\n */\n selectionFullyContained: boolean;\n}\n\nexport interface CanvasCursorOptions {\n /**\n * Default cursor value used when hovering over an object on canvas\n * @type CSSStyleDeclaration['cursor']\n * @default move\n */\n hoverCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Default cursor value used when moving an object on canvas\n * @type CSSStyleDeclaration['cursor']\n * @default move\n */\n moveCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Default cursor value used for the entire canvas\n * @type String\n * @default default\n */\n defaultCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Cursor value used during free drawing\n * @type String\n * @default crosshair\n */\n freeDrawingCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Cursor value used for disabled elements ( corners with disabled action )\n * @type String\n * @since 2.0.0\n * @default not-allowed\n */\n notAllowedCursor: CSSStyleDeclaration['cursor'];\n}\n\nexport interface TargetFindOptions {\n /**\n * When true, object detection happens on per-pixel basis rather than on per-bounding-box\n * @type Boolean\n * @default\n */\n perPixelTargetFind: boolean;\n\n /**\n * Number of pixels around target pixel to tolerate (consider active) during object detection\n * @type Number\n * @default\n */\n targetFindTolerance: number;\n\n /**\n * When true, target detection is skipped. Target detection will return always undefined.\n * click selection won't work anymore, events will fire with no targets.\n * if something is selected before setting it to true, it will be deselected at the first click.\n * area selection will still work. check the `selection` property too.\n * if you deactivate both, you should look into staticCanvas.\n * @type Boolean\n * @default\n */\n skipTargetFind: boolean;\n}\n\nexport interface CanvasEventsOptions {\n /**\n * Indicates if the right click on canvas can output the context menu or not\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n stopContextMenu: boolean;\n\n /**\n * Indicates if the canvas can fire right click events\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n fireRightClick: boolean;\n\n /**\n * Indicates if the canvas can fire middle click events\n * @type Boolean\n * @since 1.7.8\n * @default\n */\n fireMiddleClick: boolean;\n\n /**\n * When the option is enabled, PointerEvent is used instead of TPointerEvent.\n * @type Boolean\n * @default\n */\n enablePointerEvents: boolean;\n}\n\nexport interface CanvasOptions\n extends StaticCanvasOptions,\n CanvasTransformOptions,\n CanvasSelectionOptions,\n CanvasCursorOptions,\n TargetFindOptions,\n CanvasEventsOptions {\n /**\n * Default element class that's given to wrapper (div) element of canvas\n * @type String\n * @default\n * @deprecated customize {@link CanvasDOMManager} instead or access {@link elements} directly\n */\n containerClass: string;\n\n /**\n * Indicates whether objects should remain in current stack position when selected.\n * When false objects are brought to top and rendered as part of the selection group\n * @type Boolean\n * @default\n */\n preserveObjectStacking: boolean;\n}\n\nexport type TCanvasOptions = TOptions;\n\nexport const canvasDefaults: TOptions = {\n uniformScaling: true,\n uniScaleKey: 'shiftKey',\n centeredScaling: false,\n centeredRotation: false,\n centeredKey: 'altKey',\n altActionKey: 'shiftKey',\n\n selection: true,\n selectionKey: 'shiftKey',\n selectionColor: 'rgba(100, 100, 255, 0.3)',\n selectionDashArray: [],\n selectionBorderColor: 'rgba(255, 255, 255, 0.3)',\n selectionLineWidth: 1,\n selectionFullyContained: false,\n\n hoverCursor: 'move',\n moveCursor: 'move',\n defaultCursor: 'default',\n freeDrawingCursor: 'crosshair',\n notAllowedCursor: 'not-allowed',\n\n perPixelTargetFind: false,\n targetFindTolerance: 0,\n skipTargetFind: false,\n\n stopContextMenu: false,\n fireRightClick: false,\n fireMiddleClick: false,\n enablePointerEvents: false,\n\n containerClass: 'canvas-container',\n\n preserveObjectStacking: false,\n};\n","import { dragHandler } from '../controls/drag';\nimport { getActionFromCorner } from '../controls/util';\nimport { Point } from '../Point';\nimport { FabricObject } from '../shapes/Object/FabricObject';\nimport type {\n CanvasEvents,\n ModifierKey,\n TOptionalModifierKey,\n TPointerEvent,\n Transform,\n} from '../EventTypeDefs';\nimport {\n addTransformToObject,\n saveObjectTransform,\n} from '../util/misc/objectTransforms';\nimport type { TCanvasSizeOptions } from './StaticCanvas';\nimport { StaticCanvas } from './StaticCanvas';\nimport { isCollection } from '../Collection';\nimport { isTransparent } from '../util/misc/isTransparent';\nimport type {\n TMat2D,\n TOriginX,\n TOriginY,\n TSize,\n TSVGReviver,\n} from '../typedefs';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { getPointer, isTouchEvent } from '../util/dom_event';\nimport type { IText } from '../shapes/IText/IText';\nimport type { BaseBrush } from '../brushes/BaseBrush';\nimport { pick } from '../util/misc/pick';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { cos, createCanvasElement, sin } from '../util';\nimport { CanvasDOMManager } from './DOMManagers/CanvasDOMManager';\nimport {\n BOTTOM,\n CENTER,\n LEFT,\n MODIFIED,\n RESIZING,\n RIGHT,\n ROTATE,\n SCALE,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CanvasOptions } from './CanvasOptions';\nimport { canvasDefaults } from './CanvasOptions';\nimport { Intersection } from '../Intersection';\nimport { isActiveSelection } from '../util/typeAssertions';\n\n/**\n * Canvas class\n * @class Canvas\n * @extends StaticCanvas\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#canvas}\n *\n * @fires object:modified at the end of a transform\n * @fires object:rotating while an object is being rotated from the control\n * @fires object:scaling while an object is being scaled by controls\n * @fires object:moving while an object is being dragged\n * @fires object:skewing while an object is being skewed from the controls\n *\n * @fires before:transform before a transform is is started\n * @fires before:selection:cleared\n * @fires selection:cleared\n * @fires selection:updated\n * @fires selection:created\n *\n * @fires path:created after a drawing operation ends and the path is added\n * @fires mouse:down\n * @fires mouse:move\n * @fires mouse:up\n * @fires mouse:down:before on mouse down, before the inner fabric logic runs\n * @fires mouse:move:before on mouse move, before the inner fabric logic runs\n * @fires mouse:up:before on mouse up, before the inner fabric logic runs\n * @fires mouse:over\n * @fires mouse:out\n * @fires mouse:dblclick whenever a native dbl click event fires on the canvas.\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drag:enter object drag enter\n * @fires drag:leave object drag leave\n * @fires drop:before before drop event. Prepare for the drop event (same native event).\n * @fires drop\n * @fires drop:after after drop event. Run logic on canvas after event has been accepted/declined (same native event).\n * @example\n * let a: fabric.Object, b: fabric.Object;\n * let flag = false;\n * canvas.add(a, b);\n * a.on('drop:before', opt => {\n * // we want a to accept the drop even though it's below b in the stack\n * flag = this.canDrop(opt.e);\n * });\n * b.canDrop = function(e) {\n * !flag && this.draggableTextDelegate.canDrop(e);\n * }\n * b.on('dragover', opt => b.set('fill', opt.dropTarget === b ? 'pink' : 'black'));\n * a.on('drop', opt => {\n * opt.e.defaultPrevented // drop occurred\n * opt.didDrop // drop occurred on canvas\n * opt.target // drop target\n * opt.target !== a && a.set('text', 'I lost');\n * });\n * canvas.on('drop:after', opt => {\n * // inform user who won\n * if(!opt.e.defaultPrevented) {\n * // no winners\n * }\n * else if(!opt.didDrop) {\n * // my objects didn't win, some other lucky object\n * }\n * else {\n * // we have a winner it's opt.target!!\n * }\n * })\n *\n * @fires after:render at the end of the render process, receives the context in the callback\n * @fires before:render at start the render process, receives the context in the callback\n *\n * @fires contextmenu:before\n * @fires contextmenu\n * @example\n * let handler;\n * targets.forEach(target => {\n * target.on('contextmenu:before', opt => {\n * // decide which target should handle the event before canvas hijacks it\n * if (someCaseHappens && opt.targets.includes(target)) {\n * handler = target;\n * }\n * });\n * target.on('contextmenu', opt => {\n * // do something fantastic\n * });\n * });\n * canvas.on('contextmenu', opt => {\n * if (!handler) {\n * // no one takes responsibility, it's always left to me\n * // let's show them how it's done!\n * }\n * });\n *\n */\nexport class SelectableCanvas\n extends StaticCanvas\n implements Omit\n{\n declare _objects: FabricObject[];\n\n // transform config\n declare uniformScaling: boolean;\n declare uniScaleKey: TOptionalModifierKey;\n declare centeredScaling: boolean;\n declare centeredRotation: boolean;\n declare centeredKey: TOptionalModifierKey;\n declare altActionKey: TOptionalModifierKey;\n\n // selection config\n declare selection: boolean;\n declare selectionKey: TOptionalModifierKey | ModifierKey[];\n declare altSelectionKey: TOptionalModifierKey;\n declare selectionColor: string;\n declare selectionDashArray: number[];\n declare selectionBorderColor: string;\n declare selectionLineWidth: number;\n declare selectionFullyContained: boolean;\n\n // cursors\n declare hoverCursor: CSSStyleDeclaration['cursor'];\n declare moveCursor: CSSStyleDeclaration['cursor'];\n declare defaultCursor: CSSStyleDeclaration['cursor'];\n declare freeDrawingCursor: CSSStyleDeclaration['cursor'];\n declare notAllowedCursor: CSSStyleDeclaration['cursor'];\n\n declare containerClass: string;\n\n // target find config\n declare perPixelTargetFind: boolean;\n declare targetFindTolerance: number;\n declare skipTargetFind: boolean;\n\n /**\n * When true, mouse events on canvas (mousedown/mousemove/mouseup) result in free drawing.\n * After mousedown, mousemove creates a shape,\n * and then mouseup finalizes it and adds an instance of `fabric.Path` onto canvas.\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-4#free_drawing}\n * @type Boolean\n * @default\n */\n declare isDrawingMode: boolean;\n\n declare preserveObjectStacking: boolean;\n\n // event config\n declare stopContextMenu: boolean;\n declare fireRightClick: boolean;\n declare fireMiddleClick: boolean;\n\n /**\n * Keep track of the subTargets for Mouse Events, ordered bottom up from innermost nested subTarget\n * @type FabricObject[]\n */\n targets: FabricObject[] = [];\n\n /**\n * Keep track of the hovered target\n * @type FabricObject | null\n * @private\n */\n declare _hoveredTarget?: FabricObject;\n\n /**\n * hold the list of nested targets hovered\n * @type FabricObject[]\n * @private\n */\n _hoveredTargets: FabricObject[] = [];\n\n /**\n * hold the list of objects to render\n * @type FabricObject[]\n * @private\n */\n _objectsToRender?: FabricObject[];\n\n /**\n * hold a reference to a data structure that contains information\n * on the current on going transform\n * @type\n * @private\n */\n _currentTransform: Transform | null = null;\n\n /**\n * hold a reference to a data structure used to track the selection\n * box on canvas drag\n * on the current on going transform\n * x, y, deltaX and deltaY are in scene plane\n * @type\n * @private\n */\n protected _groupSelector: {\n x: number;\n y: number;\n deltaX: number;\n deltaY: number;\n } | null = null;\n\n /**\n * internal flag used to understand if the context top requires a cleanup\n * in case this is true, the contextTop will be cleared at the next render\n * @type boolean\n * @private\n */\n contextTopDirty = false;\n\n /**\n * During a mouse event we may need the pointer multiple times in multiple functions.\n * _absolutePointer holds a reference to the pointer in fabricCanvas/design coordinates that is valid for the event\n * lifespan. Every fabricJS mouse event create and delete the cache every time\n * We do this because there are some HTML DOM inspection functions to get the actual pointer coordinates\n * @type {Point}\n */\n protected declare _absolutePointer?: Point;\n\n /**\n * During a mouse event we may need the pointer multiple times in multiple functions.\n * _pointer holds a reference to the pointer in html coordinates that is valid for the event\n * lifespan. Every fabricJS mouse event create and delete the cache every time\n * We do this because there are some HTML DOM inspection functions to get the actual pointer coordinates\n * @type {Point}\n */\n protected declare _pointer?: Point;\n\n /**\n * During a mouse event we may need the target multiple times in multiple functions.\n * _target holds a reference to the target that is valid for the event\n * lifespan. Every fabricJS mouse event create and delete the cache every time\n * @type {FabricObject}\n */\n protected declare _target?: FabricObject;\n\n static ownDefaults = canvasDefaults;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...SelectableCanvas.ownDefaults };\n }\n\n declare elements: CanvasDOMManager;\n get upperCanvasEl() {\n return this.elements.upper?.el;\n }\n get contextTop() {\n return this.elements.upper?.ctx;\n }\n get wrapperEl() {\n return this.elements.container;\n }\n private declare pixelFindCanvasEl: HTMLCanvasElement;\n private declare pixelFindContext: CanvasRenderingContext2D;\n\n protected declare _isCurrentlyDrawing: boolean;\n declare freeDrawingBrush?: BaseBrush;\n declare _activeObject?: FabricObject;\n\n protected initElements(el?: string | HTMLCanvasElement) {\n this.elements = new CanvasDOMManager(el, {\n allowTouchScrolling: this.allowTouchScrolling,\n containerClass: this.containerClass,\n });\n this._createCacheCanvas();\n }\n\n /**\n * @private\n * @param {FabricObject} obj Object that was added\n */\n _onObjectAdded(obj: FabricObject) {\n this._objectsToRender = undefined;\n super._onObjectAdded(obj);\n }\n\n /**\n * @private\n * @param {FabricObject} obj Object that was removed\n */\n _onObjectRemoved(obj: FabricObject) {\n this._objectsToRender = undefined;\n // removing active object should fire \"selection:cleared\" events\n if (obj === this._activeObject) {\n this.fire('before:selection:cleared', { deselected: [obj] });\n this._discardActiveObject();\n this.fire('selection:cleared', { deselected: [obj] });\n obj.fire('deselected', {\n target: obj,\n });\n }\n if (obj === this._hoveredTarget) {\n this._hoveredTarget = undefined;\n this._hoveredTargets = [];\n }\n super._onObjectRemoved(obj);\n }\n\n _onStackOrderChanged() {\n this._objectsToRender = undefined;\n super._onStackOrderChanged();\n }\n\n /**\n * Divides objects in two groups, one to render immediately\n * and one to render as activeGroup.\n * @return {Array} objects to render immediately and pushes the other in the activeGroup.\n */\n _chooseObjectsToRender(): FabricObject[] {\n const activeObject = this._activeObject;\n return !this.preserveObjectStacking && activeObject\n ? this._objects\n .filter((object) => !object.group && object !== activeObject)\n .concat(activeObject)\n : this._objects;\n }\n\n /**\n * Renders both the top canvas and the secondary container canvas.\n */\n renderAll() {\n this.cancelRequestedRender();\n if (this.destroyed) {\n return;\n }\n if (this.contextTopDirty && !this._groupSelector && !this.isDrawingMode) {\n this.clearContext(this.contextTop);\n this.contextTopDirty = false;\n }\n if (this.hasLostContext) {\n this.renderTopLayer(this.contextTop);\n this.hasLostContext = false;\n }\n !this._objectsToRender &&\n (this._objectsToRender = this._chooseObjectsToRender());\n this.renderCanvas(this.getContext(), this._objectsToRender);\n }\n\n /**\n * text selection is rendered by the active text instance during the rendering cycle\n */\n renderTopLayer(ctx: CanvasRenderingContext2D): void {\n ctx.save();\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this.freeDrawingBrush && this.freeDrawingBrush._render();\n this.contextTopDirty = true;\n }\n // we render the top context - last object\n if (this.selection && this._groupSelector) {\n this._drawSelection(ctx);\n this.contextTopDirty = true;\n }\n ctx.restore();\n }\n\n /**\n * Method to render only the top canvas.\n * Also used to render the group selection box.\n * Does not render text selection.\n */\n renderTop() {\n const ctx = this.contextTop;\n this.clearContext(ctx);\n this.renderTopLayer(ctx);\n // todo: how do i know if the after:render is for the top or normal contex?\n this.fire('after:render', { ctx });\n }\n\n /**\n * Set the canvas tolerance value for pixel taret find.\n * Use only integer numbers.\n * @private\n */\n setTargetFindTolerance(value: number) {\n value = Math.round(value);\n this.targetFindTolerance = value;\n const retina = this.getRetinaScaling();\n const size = Math.ceil((value * 2 + 1) * retina);\n this.pixelFindCanvasEl.width = this.pixelFindCanvasEl.height = size;\n this.pixelFindContext.scale(retina, retina);\n }\n\n /**\n * Returns true if object is transparent at a certain location\n * Clarification: this is `is target transparent at location X or are controls there`\n * @TODO this seems dumb that we treat controls with transparency. we can find controls\n * programmatically without painting them, the cache canvas optimization is always valid\n * @param {FabricObject} target Object to check\n * @param {Number} x Left coordinate in viewport space\n * @param {Number} y Top coordinate in viewport space\n * @return {Boolean}\n */\n isTargetTransparent(target: FabricObject, x: number, y: number): boolean {\n const tolerance = this.targetFindTolerance;\n const ctx = this.pixelFindContext;\n this.clearContext(ctx);\n ctx.save();\n ctx.translate(-x + tolerance, -y + tolerance);\n ctx.transform(...this.viewportTransform);\n const selectionBgc = target.selectionBackgroundColor;\n target.selectionBackgroundColor = '';\n target.render(ctx);\n target.selectionBackgroundColor = selectionBgc;\n ctx.restore();\n // our canvas is square, and made around tolerance.\n // so tolerance in this case also represent the center of the canvas.\n const enhancedTolerance = Math.round(tolerance * this.getRetinaScaling());\n return isTransparent(\n ctx,\n enhancedTolerance,\n enhancedTolerance,\n enhancedTolerance,\n );\n }\n\n /**\n * takes an event and determines if selection key has been pressed\n * @private\n * @param {TPointerEvent} e Event object\n */\n _isSelectionKeyPressed(e: TPointerEvent): boolean {\n const sKey = this.selectionKey;\n if (!sKey) {\n return false;\n }\n if (Array.isArray(sKey)) {\n return !!sKey.find((key) => !!key && e[key] === true);\n } else {\n return e[sKey];\n }\n }\n\n /**\n * @private\n * @param {TPointerEvent} e Event object\n * @param {FabricObject} target\n */\n _shouldClearSelection(\n e: TPointerEvent,\n target?: FabricObject,\n ): target is undefined {\n const activeObjects = this.getActiveObjects(),\n activeObject = this._activeObject;\n\n return !!(\n !target ||\n (target &&\n activeObject &&\n activeObjects.length > 1 &&\n activeObjects.indexOf(target) === -1 &&\n activeObject !== target &&\n !this._isSelectionKeyPressed(e)) ||\n (target && !target.evented) ||\n (target && !target.selectable && activeObject && activeObject !== target)\n );\n }\n\n /**\n * This method will take in consideration a modifier key pressed and the control we are\n * about to drag, and try to guess the anchor point ( origin ) of the transormation.\n * This should be really in the realm of controls, and we should remove specific code for legacy\n * embedded actions.\n * @TODO this probably deserve discussion/rediscovery and change/refactor\n * @private\n * @deprecated\n * @param {FabricObject} target\n * @param {string} action\n * @param {boolean} altKey\n * @returns {boolean} true if the transformation should be centered\n */\n private _shouldCenterTransform(\n target: FabricObject,\n action: string,\n modifierKeyPressed: boolean,\n ) {\n if (!target) {\n return;\n }\n\n let centerTransform;\n\n if (\n action === SCALE ||\n action === SCALE_X ||\n action === SCALE_Y ||\n action === RESIZING\n ) {\n centerTransform = this.centeredScaling || target.centeredScaling;\n } else if (action === ROTATE) {\n centerTransform = this.centeredRotation || target.centeredRotation;\n }\n\n return centerTransform ? !modifierKeyPressed : modifierKeyPressed;\n }\n\n /**\n * Given the control clicked, determine the origin of the transform.\n * This is bad because controls can totally have custom names\n * should disappear before release 4.0\n * @private\n * @deprecated\n */\n _getOriginFromCorner(\n target: FabricObject,\n controlName: string,\n ): { x: TOriginX; y: TOriginY } {\n const origin = {\n x: target.originX,\n y: target.originY,\n };\n\n if (!controlName) {\n return origin;\n }\n\n // is a left control ?\n if (['ml', 'tl', 'bl'].includes(controlName)) {\n origin.x = RIGHT;\n // is a right control ?\n } else if (['mr', 'tr', 'br'].includes(controlName)) {\n origin.x = LEFT;\n }\n // is a top control ?\n if (['tl', 'mt', 'tr'].includes(controlName)) {\n origin.y = BOTTOM;\n // is a bottom control ?\n } else if (['bl', 'mb', 'br'].includes(controlName)) {\n origin.y = TOP;\n }\n return origin;\n }\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {FabricObject} target\n * @param {boolean} [alreadySelected] pass true to setup the active control\n */\n _setupCurrentTransform(\n e: TPointerEvent,\n target: FabricObject,\n alreadySelected: boolean,\n ): void {\n const pointer = target.group\n ? // transform pointer to target's containing coordinate plane\n sendPointToPlane(\n this.getScenePoint(e),\n undefined,\n target.group.calcTransformMatrix(),\n )\n : this.getScenePoint(e);\n const { key: corner = '', control } = target.getActiveControl() || {},\n actionHandler =\n alreadySelected && control\n ? control.getActionHandler(e, target, control)?.bind(control)\n : dragHandler,\n action = getActionFromCorner(alreadySelected, corner, e, target),\n altKey = e[this.centeredKey as ModifierKey],\n origin = this._shouldCenterTransform(target, action, altKey)\n ? ({ x: CENTER, y: CENTER } as const)\n : this._getOriginFromCorner(target, corner),\n /**\n * relative to target's containing coordinate plane\n * both agree on every point\n **/\n transform: Transform = {\n target: target,\n action,\n actionHandler,\n actionPerformed: false,\n corner,\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n offsetX: pointer.x - target.left,\n offsetY: pointer.y - target.top,\n originX: origin.x,\n originY: origin.y,\n ex: pointer.x,\n ey: pointer.y,\n lastX: pointer.x,\n lastY: pointer.y,\n theta: degreesToRadians(target.angle),\n width: target.width,\n height: target.height,\n shiftKey: e.shiftKey,\n altKey,\n original: {\n ...saveObjectTransform(target),\n originX: origin.x,\n originY: origin.y,\n },\n };\n\n this._currentTransform = transform;\n\n this.fire('before:transform', {\n e,\n transform,\n });\n }\n\n /**\n * Set the cursor type of the canvas element\n * @param {String} value Cursor type of the canvas element.\n * @see http://www.w3.org/TR/css3-ui/#cursor\n */\n setCursor(value: CSSStyleDeclaration['cursor']): void {\n this.upperCanvasEl.style.cursor = value;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx to draw the selection on\n */\n _drawSelection(ctx: CanvasRenderingContext2D): void {\n const { x, y, deltaX, deltaY } = this._groupSelector!,\n start = new Point(x, y).transform(this.viewportTransform),\n extent = new Point(x + deltaX, y + deltaY).transform(\n this.viewportTransform,\n ),\n strokeOffset = this.selectionLineWidth / 2;\n let minX = Math.min(start.x, extent.x),\n minY = Math.min(start.y, extent.y),\n maxX = Math.max(start.x, extent.x),\n maxY = Math.max(start.y, extent.y);\n\n if (this.selectionColor) {\n ctx.fillStyle = this.selectionColor;\n ctx.fillRect(minX, minY, maxX - minX, maxY - minY);\n }\n\n if (!this.selectionLineWidth || !this.selectionBorderColor) {\n return;\n }\n ctx.lineWidth = this.selectionLineWidth;\n ctx.strokeStyle = this.selectionBorderColor;\n\n minX += strokeOffset;\n minY += strokeOffset;\n maxX -= strokeOffset;\n maxY -= strokeOffset;\n // selection border\n // @TODO: is _setLineDash still necessary on modern canvas?\n FabricObject.prototype._setLineDash.call(\n this,\n ctx,\n this.selectionDashArray,\n );\n ctx.strokeRect(minX, minY, maxX - minX, maxY - minY);\n }\n\n /**\n * Method that determines what object we are clicking on\n * 11/09/2018 TODO: would be cool if findTarget could discern between being a full target\n * or the outside part of the corner.\n * @param {Event} e mouse event\n * @return {FabricObject | null} the target found\n */\n findTarget(e: TPointerEvent): FabricObject | undefined {\n if (this.skipTargetFind) {\n return undefined;\n }\n\n const pointer = this.getViewportPoint(e),\n activeObject = this._activeObject,\n aObjects = this.getActiveObjects();\n\n this.targets = [];\n\n if (activeObject && aObjects.length >= 1) {\n if (activeObject.findControl(pointer, isTouchEvent(e))) {\n // if we hit the corner of the active object, let's return that.\n return activeObject;\n } else if (\n aObjects.length > 1 &&\n // check pointer is over active selection and possibly perform `subTargetCheck`\n this.searchPossibleTargets([activeObject], pointer)\n ) {\n // active selection does not select sub targets like normal groups\n return activeObject;\n } else if (\n activeObject === this.searchPossibleTargets([activeObject], pointer)\n ) {\n // active object is not an active selection\n if (!this.preserveObjectStacking) {\n return activeObject;\n } else {\n const subTargets = this.targets;\n this.targets = [];\n const target = this.searchPossibleTargets(this._objects, pointer);\n if (\n e[this.altSelectionKey as ModifierKey] &&\n target &&\n target !== activeObject\n ) {\n // alt selection: select active object even though it is not the top most target\n // restore targets\n this.targets = subTargets;\n return activeObject;\n }\n return target;\n }\n }\n }\n\n return this.searchPossibleTargets(this._objects, pointer);\n }\n\n /**\n * Checks if the point is inside the object selection area including padding\n * @param {FabricObject} obj Object to test against\n * @param {Object} [pointer] point in scene coordinates\n * @return {Boolean} true if point is contained within an area of given object\n * @private\n */\n private _pointIsInObjectSelectionArea(obj: FabricObject, point: Point) {\n // getCoords will already take care of group de-nesting\n let coords = obj.getCoords();\n const viewportZoom = this.getZoom();\n const padding = obj.padding / viewportZoom;\n if (padding) {\n const [tl, tr, br, bl] = coords;\n // what is the angle of the object?\n // we could use getTotalAngle, but is way easier to look at it\n // from how coords are oriented, since if something went wrong\n // at least we are consistent.\n const angleRadians = Math.atan2(tr.y - tl.y, tr.x - tl.x),\n cosP = cos(angleRadians) * padding,\n sinP = sin(angleRadians) * padding,\n cosPSinP = cosP + sinP,\n cosPMinusSinP = cosP - sinP;\n\n coords = [\n new Point(tl.x - cosPMinusSinP, tl.y - cosPSinP),\n new Point(tr.x + cosPSinP, tr.y - cosPMinusSinP),\n new Point(br.x + cosPMinusSinP, br.y + cosPSinP),\n new Point(bl.x - cosPSinP, bl.y + cosPMinusSinP),\n ];\n // in case of padding we calculate the new coords on the fly.\n // otherwise we have to maintain 2 sets of coordinates for everything.\n // we can reiterate on storing them.\n // if this is slow, for now the semplification is large and doesn't impact\n // rendering.\n // the idea behind this is that outside target check we don't need ot know\n // where those coords are\n }\n return Intersection.isPointInPolygon(point, coords);\n }\n\n /**\n * Checks point is inside the object selection condition. Either area with padding\n * or over pixels if perPixelTargetFind is enabled\n * @param {FabricObject} obj Object to test against\n * @param {Object} [pointer] point from viewport.\n * @return {Boolean} true if point is contained within an area of given object\n * @private\n */\n _checkTarget(obj: FabricObject, pointer: Point): boolean {\n if (\n obj &&\n obj.visible &&\n obj.evented &&\n this._pointIsInObjectSelectionArea(\n obj,\n sendPointToPlane(pointer, undefined, this.viewportTransform),\n )\n ) {\n if (\n (this.perPixelTargetFind || obj.perPixelTargetFind) &&\n !(obj as unknown as IText).isEditing\n ) {\n if (!this.isTargetTransparent(obj, pointer.x, pointer.y)) {\n return true;\n }\n } else {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Internal Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted\n * @param {Array} [objects] objects array to look into\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\n * @return {FabricObject} **top most object from given `objects`** that contains pointer\n * @private\n */\n _searchPossibleTargets(\n objects: FabricObject[],\n pointer: Point,\n ): FabricObject | undefined {\n // Cache all targets where their bounding box contains point.\n let i = objects.length;\n // Do not check for currently grouped objects, since we check the parent group itself.\n // until we call this function specifically to search inside the activeGroup\n while (i--) {\n const target = objects[i];\n if (this._checkTarget(target, pointer)) {\n if (isCollection(target) && target.subTargetCheck) {\n const subTarget = this._searchPossibleTargets(\n target._objects as FabricObject[],\n pointer,\n );\n subTarget && this.targets.push(subTarget);\n }\n return target;\n }\n }\n }\n\n /**\n * Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted\n * @see {@link _searchPossibleTargets}\n * @param {FabricObject[]} [objects] objects array to look into\n * @param {Point} [pointer] coordinates from viewport to check.\n * @return {FabricObject} **top most object on screen** that contains pointer\n */\n searchPossibleTargets(\n objects: FabricObject[],\n pointer: Point,\n ): FabricObject | undefined {\n const target = this._searchPossibleTargets(objects, pointer);\n\n // if we found something in this.targets, and the group is interactive, return the innermost subTarget\n // that is still interactive\n // TODO: reverify why interactive. the target should be returned always, but selected only\n // if interactive.\n if (\n target &&\n isCollection(target) &&\n target.interactive &&\n this.targets[0]\n ) {\n /** targets[0] is the innermost nested target, but it could be inside non interactive groups and so not a selection target */\n const targets = this.targets;\n for (let i = targets.length - 1; i > 0; i--) {\n const t = targets[i];\n if (!(isCollection(t) && t.interactive)) {\n // one of the subtargets was not interactive. that is the last subtarget we can return.\n // we can't dig more deep;\n return t;\n }\n }\n return targets[0];\n }\n\n return target;\n }\n\n /**\n * @returns point existing in the same plane as the {@link HTMLCanvasElement},\n * `(0, 0)` being the top left corner of the {@link HTMLCanvasElement}.\n * This means that changes to the {@link viewportTransform} do not change the values of the point\n * and it remains unchanged from the viewer's perspective.\n *\n * @example\n * const scenePoint = sendPointToPlane(\n * this.getViewportPoint(e),\n * undefined,\n * canvas.viewportTransform\n * );\n *\n */\n getViewportPoint(e: TPointerEvent) {\n if (this._pointer) {\n return this._pointer;\n }\n return this.getPointer(e, true);\n }\n\n /**\n * @returns point existing in the scene (the same plane as the plane {@link FabricObject#getCenterPoint} exists in).\n * This means that changes to the {@link viewportTransform} do not change the values of the point,\n * however, from the viewer's perspective, the point is changed.\n *\n * @example\n * const viewportPoint = sendPointToPlane(\n * this.getScenePoint(e),\n * canvas.viewportTransform\n * );\n *\n */\n getScenePoint(e: TPointerEvent) {\n if (this._absolutePointer) {\n return this._absolutePointer;\n }\n return this.getPointer(e);\n }\n\n /**\n * Returns pointer relative to canvas.\n *\n * @deprecated This method is deprecated since v6 to protect you from misuse.\n * Use {@link getViewportPoint} or {@link getScenePoint} instead.\n *\n * @param {Event} e\n * @param {Boolean} [fromViewport] whether to return the point from the viewport or in the scene\n * @return {Point}\n */\n getPointer(e: TPointerEvent, fromViewport = false): Point {\n const upperCanvasEl = this.upperCanvasEl,\n bounds = upperCanvasEl.getBoundingClientRect();\n let pointer = getPointer(e),\n boundsWidth = bounds.width || 0,\n boundsHeight = bounds.height || 0;\n\n if (!boundsWidth || !boundsHeight) {\n if (TOP in bounds && BOTTOM in bounds) {\n boundsHeight = Math.abs(bounds.top - bounds.bottom);\n }\n if (RIGHT in bounds && LEFT in bounds) {\n boundsWidth = Math.abs(bounds.right - bounds.left);\n }\n }\n\n this.calcOffset();\n pointer.x = pointer.x - this._offset.left;\n pointer.y = pointer.y - this._offset.top;\n if (!fromViewport) {\n pointer = sendPointToPlane(pointer, undefined, this.viewportTransform);\n }\n\n const retinaScaling = this.getRetinaScaling();\n if (retinaScaling !== 1) {\n pointer.x /= retinaScaling;\n pointer.y /= retinaScaling;\n }\n\n // If bounds are not available (i.e. not visible), do not apply scale.\n const cssScale =\n boundsWidth === 0 || boundsHeight === 0\n ? new Point(1, 1)\n : new Point(\n upperCanvasEl.width / boundsWidth,\n upperCanvasEl.height / boundsHeight,\n );\n\n return pointer.multiply(cssScale);\n }\n\n /**\n * Internal use only\n * @protected\n */\n protected _setDimensionsImpl(\n dimensions: TSize,\n options?: TCanvasSizeOptions,\n ) {\n // @ts-expect-error this method exists in the subclass - should be moved or declared as abstract\n this._resetTransformEventData();\n super._setDimensionsImpl(dimensions, options);\n if (this._isCurrentlyDrawing) {\n this.freeDrawingBrush &&\n this.freeDrawingBrush._setBrushStyles(this.contextTop);\n }\n }\n\n protected _createCacheCanvas() {\n this.pixelFindCanvasEl = createCanvasElement();\n this.pixelFindContext = this.pixelFindCanvasEl.getContext('2d', {\n willReadFrequently: true,\n })!;\n this.setTargetFindTolerance(this.targetFindTolerance);\n }\n\n /**\n * Returns context of top canvas where interactions are drawn\n * @returns {CanvasRenderingContext2D}\n */\n getTopContext(): CanvasRenderingContext2D {\n return this.elements.upper.ctx;\n }\n\n /**\n * Returns context of canvas where object selection is drawn\n * @alias\n * @return {CanvasRenderingContext2D}\n */\n getSelectionContext(): CanvasRenderingContext2D {\n return this.elements.upper.ctx;\n }\n\n /**\n * Returns <canvas> element on which object selection is drawn\n * @return {HTMLCanvasElement}\n */\n getSelectionElement(): HTMLCanvasElement {\n return this.elements.upper.el;\n }\n\n /**\n * Returns currently active object\n * @return {FabricObject | null} active object\n */\n getActiveObject(): FabricObject | undefined {\n return this._activeObject;\n }\n\n /**\n * Returns an array with the current selected objects\n * @return {FabricObject[]} active objects array\n */\n getActiveObjects(): FabricObject[] {\n const active = this._activeObject;\n return isActiveSelection(active)\n ? active.getObjects()\n : active\n ? [active]\n : [];\n }\n\n /**\n * @private\n * Compares the old activeObject with the current one and fires correct events\n * @param {FabricObject[]} oldObjects old activeObject\n * @param {TPointerEvent} e mouse event triggering the selection events\n */\n _fireSelectionEvents(oldObjects: FabricObject[], e?: TPointerEvent) {\n let somethingChanged = false,\n invalidate = false;\n const objects = this.getActiveObjects(),\n added: FabricObject[] = [],\n removed: FabricObject[] = [];\n\n oldObjects.forEach((target) => {\n if (!objects.includes(target)) {\n somethingChanged = true;\n target.fire('deselected', {\n e,\n target,\n });\n removed.push(target);\n }\n });\n\n objects.forEach((target) => {\n if (!oldObjects.includes(target)) {\n somethingChanged = true;\n target.fire('selected', {\n e,\n target,\n });\n added.push(target);\n }\n });\n\n if (oldObjects.length > 0 && objects.length > 0) {\n invalidate = true;\n somethingChanged &&\n this.fire('selection:updated', {\n e,\n selected: added,\n deselected: removed,\n });\n } else if (objects.length > 0) {\n invalidate = true;\n this.fire('selection:created', {\n e,\n selected: added,\n });\n } else if (oldObjects.length > 0) {\n invalidate = true;\n this.fire('selection:cleared', {\n e,\n deselected: removed,\n });\n }\n invalidate && (this._objectsToRender = undefined);\n }\n\n /**\n * Sets given object as the only active object on canvas\n * @param {FabricObject} object Object to set as an active one\n * @param {TPointerEvent} [e] Event (passed along when firing \"object:selected\")\n * @return {Boolean} true if the object has been selected\n */\n setActiveObject(object: FabricObject, e?: TPointerEvent) {\n // we can't inline this, since _setActiveObject will change what getActiveObjects returns\n const currentActives = this.getActiveObjects();\n const selected = this._setActiveObject(object, e);\n this._fireSelectionEvents(currentActives, e);\n return selected;\n }\n\n /**\n * This is supposed to be equivalent to setActiveObject but without firing\n * any event. There is commitment to have this stay this way.\n * This is the functional part of setActiveObject.\n * @param {Object} object to set as active\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\n * @return {Boolean} true if the object has been selected\n */\n _setActiveObject(object: FabricObject, e?: TPointerEvent) {\n const prevActiveObject = this._activeObject;\n if (prevActiveObject === object) {\n return false;\n }\n // after calling this._discardActiveObject, this,_activeObject could be undefined\n if (!this._discardActiveObject(e, object) && this._activeObject) {\n // refused to deselect\n return false;\n }\n if (object.onSelect({ e })) {\n return false;\n }\n\n this._activeObject = object;\n\n if (isActiveSelection(object) && prevActiveObject !== object) {\n object.set('canvas', this);\n }\n object.setCoords();\n\n return true;\n }\n\n /**\n * This is supposed to be equivalent to discardActiveObject but without firing\n * any selection events ( can still fire object transformation events ). There is commitment to have this stay this way.\n * This is the functional part of discardActiveObject.\n * @param {Event} [e] Event (passed along when firing \"object:deselected\")\n * @param {Object} object the next object to set as active, reason why we are discarding this\n * @return {Boolean} true if the active object has been discarded\n */\n _discardActiveObject(\n e?: TPointerEvent,\n object?: FabricObject,\n ): this is { _activeObject: undefined } {\n const obj = this._activeObject;\n if (obj) {\n // onDeselect return TRUE to cancel selection;\n if (obj.onDeselect({ e, object })) {\n return false;\n }\n if (this._currentTransform && this._currentTransform.target === obj) {\n this.endCurrentTransform(e);\n }\n if (isActiveSelection(obj) && obj === this._hoveredTarget) {\n this._hoveredTarget = undefined;\n }\n this._activeObject = undefined;\n return true;\n }\n return false;\n }\n\n /**\n * Discards currently active object and fire events. If the function is called by fabric\n * as a consequence of a mouse event, the event is passed as a parameter and\n * sent to the fire function for the custom events. When used as a method the\n * e param does not have any application.\n * @param {event} e\n * @return {Boolean} true if the active object has been discarded\n */\n discardActiveObject(e?: TPointerEvent): this is { _activeObject: undefined } {\n const currentActives = this.getActiveObjects(),\n activeObject = this.getActiveObject();\n if (currentActives.length) {\n this.fire('before:selection:cleared', {\n e,\n deselected: [activeObject!],\n });\n }\n const discarded = this._discardActiveObject(e);\n this._fireSelectionEvents(currentActives, e);\n return discarded;\n }\n\n /**\n * End the current transform.\n * You don't usually need to call this method unless you are interrupting a user initiated transform\n * because of some other event ( a press of key combination, or something that block the user UX )\n * @param {Event} [e] send the mouse event that generate the finalize down, so it can be used in the event\n */\n endCurrentTransform(e?: TPointerEvent) {\n const transform = this._currentTransform;\n this._finalizeCurrentTransform(e);\n if (transform && transform.target) {\n // this could probably go inside _finalizeCurrentTransform\n transform.target.isMoving = false;\n }\n this._currentTransform = null;\n }\n\n /**\n * @private\n * @param {Event} e send the mouse event that generate the finalize down, so it can be used in the event\n */\n _finalizeCurrentTransform(e?: TPointerEvent) {\n const transform = this._currentTransform!,\n target = transform.target,\n options = {\n e,\n target,\n transform,\n action: transform.action,\n };\n\n if (target._scaling) {\n target._scaling = false;\n }\n\n target.setCoords();\n\n if (transform.actionPerformed) {\n this.fire('object:modified', options);\n target.fire(MODIFIED, options);\n }\n }\n\n /**\n * Sets viewport transformation of this canvas instance\n * @param {Array} vpt a Canvas 2D API transform matrix\n */\n setViewportTransform(vpt: TMat2D) {\n super.setViewportTransform(vpt);\n const activeObject = this._activeObject;\n if (activeObject) {\n activeObject.setCoords();\n }\n }\n\n /**\n * @override clears active selection ref and interactive canvas elements and contexts\n */\n destroy() {\n // dispose of active selection\n const activeObject = this._activeObject;\n if (isActiveSelection(activeObject)) {\n activeObject.removeAll();\n activeObject.dispose();\n }\n\n delete this._activeObject;\n\n super.destroy();\n\n // free resources\n\n // pixel find canvas\n // @ts-expect-error disposing\n this.pixelFindContext = null;\n // @ts-expect-error disposing\n this.pixelFindCanvasEl = undefined;\n }\n\n /**\n * Clears all contexts (background, main, top) of an instance\n */\n clear() {\n // discard active object and fire events\n this.discardActiveObject();\n // make sure we clear the active object in case it refused to be discarded\n this._activeObject = undefined;\n this.clearContext(this.contextTop);\n super.clear();\n }\n\n /**\n * Draws objects' controls (borders/controls)\n * @param {CanvasRenderingContext2D} ctx Context to render controls on\n */\n drawControls(ctx: CanvasRenderingContext2D) {\n const activeObject = this._activeObject;\n\n if (activeObject) {\n activeObject._renderControls(ctx);\n }\n }\n\n /**\n * @private\n */\n protected _toObject(\n instance: FabricObject,\n methodName: 'toObject' | 'toDatalessObject',\n propertiesToInclude: string[],\n ): Record {\n // If the object is part of the current selection group, it should\n // be transformed appropriately\n // i.e. it should be serialised as it would appear if the selection group\n // were to be destroyed.\n const originalProperties = this._realizeGroupTransformOnObject(instance),\n object = super._toObject(instance, methodName, propertiesToInclude);\n //Undo the damage we did by changing all of its properties\n instance.set(originalProperties);\n return object;\n }\n\n /**\n * Realizes an object's group transformation on it\n * @private\n * @param {FabricObject} [instance] the object to transform (gets mutated)\n * @returns the original values of instance which were changed\n */\n private _realizeGroupTransformOnObject(\n instance: FabricObject,\n ): Partial {\n const { group } = instance;\n if (group && isActiveSelection(group) && this._activeObject === group) {\n const layoutProps = [\n 'angle',\n 'flipX',\n 'flipY',\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n ] as (keyof typeof instance)[];\n const originalValues = pick(instance, layoutProps);\n addTransformToObject(instance, group.calcOwnMatrix());\n return originalValues;\n } else {\n return {};\n }\n }\n\n /**\n * @private\n */\n _setSVGObject(\n markup: string[],\n instance: FabricObject,\n reviver?: TSVGReviver,\n ) {\n // If the object is in a selection group, simulate what would happen to that\n // object when the group is deselected\n const originalProperties = this._realizeGroupTransformOnObject(instance);\n super._setSVGObject(markup, instance, reviver);\n instance.set(originalProperties);\n }\n}\n","import type { TPointerEvent } from '../EventTypeDefs';\nimport type { ITextBehavior } from '../shapes/IText/ITextBehavior';\nimport { removeFromArray } from '../util/internals/removeFromArray';\nimport type { Canvas } from './Canvas';\n\n/**\n * In charge of synchronizing all interactive text instances of a canvas\n */\nexport class TextEditingManager {\n private targets: ITextBehavior[] = [];\n private declare target?: ITextBehavior;\n private __disposer: VoidFunction;\n\n constructor(canvas: Canvas) {\n const cb = () => {\n const { hiddenTextarea } =\n (canvas.getActiveObject() as ITextBehavior) || {};\n hiddenTextarea && hiddenTextarea.focus();\n };\n const el = canvas.upperCanvasEl;\n el.addEventListener('click', cb);\n this.__disposer = () => el.removeEventListener('click', cb);\n }\n\n exitTextEditing() {\n this.target = undefined;\n this.targets.forEach((target) => {\n if (target.isEditing) {\n target.exitEditing();\n }\n });\n }\n\n add(target: ITextBehavior) {\n this.targets.push(target);\n }\n\n remove(target: ITextBehavior) {\n this.unregister(target);\n removeFromArray(this.targets, target);\n }\n\n register(target: ITextBehavior) {\n this.target = target;\n }\n\n unregister(target: ITextBehavior) {\n if (target === this.target) {\n this.target = undefined;\n }\n }\n\n onMouseMove(e: TPointerEvent) {\n this.target?.isEditing && this.target.updateSelectionOnMouseMove(e);\n }\n\n clear() {\n this.targets = [];\n this.target = undefined;\n }\n\n dispose() {\n this.clear();\n this.__disposer();\n // @ts-expect-error disposing\n delete this.__disposer;\n }\n}\n","import { classRegistry } from '../ClassRegistry';\nimport { NONE } from '../constants';\nimport type {\n CanvasEvents,\n DragEventData,\n ObjectEvents,\n TPointerEvent,\n TPointerEventNames,\n Transform,\n} from '../EventTypeDefs';\nimport { Point } from '../Point';\nimport type { ActiveSelection } from '../shapes/ActiveSelection';\nimport type { Group } from '../shapes/Group';\nimport type { IText } from '../shapes/IText/IText';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { isTouchEvent, stopEvent } from '../util/dom_event';\nimport { getDocumentFromElement, getWindowFromElement } from '../util/dom_misc';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { isActiveSelection } from '../util/typeAssertions';\nimport type { CanvasOptions, TCanvasOptions } from './CanvasOptions';\nimport { SelectableCanvas } from './SelectableCanvas';\nimport { TextEditingManager } from './TextEditingManager';\n\nconst addEventOptions = { passive: false } as EventListenerOptions;\n\nconst getEventPoints = (canvas: Canvas, e: TPointerEvent) => {\n const viewportPoint = canvas.getViewportPoint(e);\n const scenePoint = canvas.getScenePoint(e);\n return {\n viewportPoint,\n scenePoint,\n pointer: viewportPoint,\n absolutePointer: scenePoint,\n };\n};\n\n// just to be clear, the utils are now deprecated and those are here exactly as minifier helpers\n// because el.addEventListener can't me be minified while a const yes and we use it 47 times in this file.\n// few bytes but why give it away.\nconst addListener = (\n el: HTMLElement | Document,\n ...args: Parameters\n) => el.addEventListener(...args);\nconst removeListener = (\n el: HTMLElement | Document,\n ...args: Parameters\n) => el.removeEventListener(...args);\n\nconst syntheticEventConfig = {\n mouse: {\n in: 'over',\n out: 'out',\n targetIn: 'mouseover',\n targetOut: 'mouseout',\n canvasIn: 'mouse:over',\n canvasOut: 'mouse:out',\n },\n drag: {\n in: 'enter',\n out: 'leave',\n targetIn: 'dragenter',\n targetOut: 'dragleave',\n canvasIn: 'drag:enter',\n canvasOut: 'drag:leave',\n },\n} as const;\n\ntype TSyntheticEventContext = {\n mouse: { e: TPointerEvent };\n drag: DragEventData;\n};\n\nexport class Canvas extends SelectableCanvas implements CanvasOptions {\n /**\n * Contains the id of the touch event that owns the fabric transform\n * @type Number\n * @private\n */\n declare mainTouchId?: number;\n\n declare enablePointerEvents: boolean;\n\n /**\n * Holds a reference to a setTimeout timer for event synchronization\n * @type number\n * @private\n */\n private declare _willAddMouseDown: number;\n\n /**\n * Holds a reference to an object on the canvas that is receiving the drag over event.\n * @type FabricObject\n * @private\n */\n private declare _draggedoverTarget?: FabricObject;\n\n /**\n * Holds a reference to an object on the canvas from where the drag operation started\n * @type FabricObject\n * @private\n */\n private declare _dragSource?: FabricObject;\n\n /**\n * Holds a reference to an object on the canvas that is the current drop target\n * May differ from {@link _draggedoverTarget}\n * @todo inspect whether {@link _draggedoverTarget} and {@link _dropTarget} should be merged somehow\n * @type FabricObject\n * @private\n */\n private declare _dropTarget: FabricObject | undefined;\n\n private _isClick: boolean;\n\n textEditingManager = new TextEditingManager(this);\n\n constructor(el?: string | HTMLCanvasElement, options: TCanvasOptions = {}) {\n super(el, options);\n // bind event handlers\n (\n [\n '_onMouseDown',\n '_onTouchStart',\n '_onMouseMove',\n '_onMouseUp',\n '_onTouchEnd',\n '_onResize',\n // '_onGesture',\n // '_onDrag',\n // '_onShake',\n // '_onLongPress',\n // '_onOrientationChange',\n '_onMouseWheel',\n '_onMouseOut',\n '_onMouseEnter',\n '_onContextMenu',\n '_onDoubleClick',\n '_onDragStart',\n '_onDragEnd',\n '_onDragProgress',\n '_onDragOver',\n '_onDragEnter',\n '_onDragLeave',\n '_onDrop',\n ] as (keyof this)[]\n ).forEach((eventHandler) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n this[eventHandler] = (this[eventHandler] as Function).bind(this);\n });\n // register event handlers\n this.addOrRemove(addListener, 'add');\n }\n\n /**\n * return an event prefix pointer or mouse.\n * @private\n */\n private _getEventPrefix() {\n return this.enablePointerEvents ? 'pointer' : 'mouse';\n }\n\n addOrRemove(functor: any, _eventjsFunctor: 'add' | 'remove') {\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n functor(getWindowFromElement(canvasElement), 'resize', this._onResize);\n functor(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n functor(\n canvasElement,\n `${eventTypePrefix}move`,\n this._onMouseMove,\n addEventOptions,\n );\n functor(canvasElement, `${eventTypePrefix}out`, this._onMouseOut);\n functor(canvasElement, `${eventTypePrefix}enter`, this._onMouseEnter);\n functor(canvasElement, 'wheel', this._onMouseWheel);\n functor(canvasElement, 'contextmenu', this._onContextMenu);\n functor(canvasElement, 'dblclick', this._onDoubleClick);\n functor(canvasElement, 'dragstart', this._onDragStart);\n functor(canvasElement, 'dragend', this._onDragEnd);\n functor(canvasElement, 'dragover', this._onDragOver);\n functor(canvasElement, 'dragenter', this._onDragEnter);\n functor(canvasElement, 'dragleave', this._onDragLeave);\n functor(canvasElement, 'drop', this._onDrop);\n if (!this.enablePointerEvents) {\n functor(canvasElement, 'touchstart', this._onTouchStart, addEventOptions);\n }\n // if (typeof eventjs !== 'undefined' && eventjsFunctor in eventjs) {\n // eventjs[eventjsFunctor](canvasElement, 'gesture', this._onGesture);\n // eventjs[eventjsFunctor](canvasElement, 'drag', this._onDrag);\n // eventjs[eventjsFunctor](\n // canvasElement,\n // 'orientation',\n // this._onOrientationChange\n // );\n // eventjs[eventjsFunctor](canvasElement, 'shake', this._onShake);\n // eventjs[eventjsFunctor](canvasElement, 'longpress', this._onLongPress);\n // }\n }\n\n /**\n * Removes all event listeners\n */\n removeListeners() {\n this.addOrRemove(removeListener, 'remove');\n // if you dispose on a mouseDown, before mouse up, you need to clean document to...\n const eventTypePrefix = this._getEventPrefix();\n const doc = getDocumentFromElement(this.upperCanvasEl);\n removeListener(\n doc,\n `${eventTypePrefix}up`,\n this._onMouseUp as EventListener,\n );\n removeListener(\n doc,\n 'touchend',\n this._onTouchEnd as EventListener,\n addEventOptions,\n );\n removeListener(\n doc,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n removeListener(\n doc,\n 'touchmove',\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n }\n\n /**\n * @private\n * @param {Event} [e] Event object fired on wheel event\n */\n private _onMouseWheel(e: MouseEvent) {\n this.__onMouseWheel(e);\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n private _onMouseOut(e: TPointerEvent) {\n const target = this._hoveredTarget;\n const shared = {\n e,\n ...getEventPoints(this, e),\n };\n this.fire('mouse:out', { ...shared, target });\n this._hoveredTarget = undefined;\n target && target.fire('mouseout', { ...shared });\n this._hoveredTargets.forEach((nestedTarget) => {\n this.fire('mouse:out', { ...shared, target: nestedTarget });\n nestedTarget && nestedTarget.fire('mouseout', { ...shared });\n });\n this._hoveredTargets = [];\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseenter\n */\n private _onMouseEnter(e: TPointerEvent) {\n // This find target and consequent 'mouse:over' is used to\n // clear old instances on hovered target.\n // calling findTarget has the side effect of killing target.__corner.\n // as a short term fix we are not firing this if we are currently transforming.\n // as a long term fix we need to separate the action of finding a target with the\n // side effects we added to it.\n if (!this._currentTransform && !this.findTarget(e)) {\n this.fire('mouse:over', {\n e,\n ...getEventPoints(this, e),\n });\n this._hoveredTarget = undefined;\n this._hoveredTargets = [];\n }\n }\n\n /**\n * supports native like text dragging\n * @private\n * @param {DragEvent} e\n */\n private _onDragStart(e: DragEvent) {\n this._isClick = false;\n const activeObject = this.getActiveObject();\n if (activeObject && activeObject.onDragStart(e)) {\n this._dragSource = activeObject;\n const options = { e, target: activeObject };\n this.fire('dragstart', options);\n activeObject.fire('dragstart', options);\n addListener(\n this.upperCanvasEl,\n 'drag',\n this._onDragProgress as EventListener,\n );\n return;\n }\n stopEvent(e);\n }\n\n /**\n * First we clear top context where the effects are being rendered.\n * Then we render the effects.\n * Doing so will render the correct effect for all cases including an overlap between `source` and `target`.\n * @private\n */\n private _renderDragEffects(\n e: DragEvent,\n source?: FabricObject,\n target?: FabricObject,\n ) {\n let dirty = false;\n // clear top context\n const dropTarget = this._dropTarget;\n if (dropTarget && dropTarget !== source && dropTarget !== target) {\n dropTarget.clearContextTop();\n dirty = true;\n }\n source?.clearContextTop();\n target !== source && target?.clearContextTop();\n // render effects\n const ctx = this.contextTop;\n ctx.save();\n ctx.transform(...this.viewportTransform);\n if (source) {\n ctx.save();\n source.transform(ctx);\n source.renderDragSourceEffect(e);\n ctx.restore();\n dirty = true;\n }\n if (target) {\n ctx.save();\n target.transform(ctx);\n target.renderDropTargetEffect(e);\n ctx.restore();\n dirty = true;\n }\n ctx.restore();\n dirty && (this.contextTopDirty = true);\n }\n\n /**\n * supports native like text dragging\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#finishing_a_drag\n * @private\n * @param {DragEvent} e\n */\n private _onDragEnd(e: DragEvent) {\n const didDrop = !!e.dataTransfer && e.dataTransfer.dropEffect !== NONE,\n dropTarget = didDrop ? this._activeObject : undefined,\n options = {\n e,\n target: this._dragSource as FabricObject,\n subTargets: this.targets,\n dragSource: this._dragSource as FabricObject,\n didDrop,\n dropTarget: dropTarget as FabricObject,\n };\n removeListener(\n this.upperCanvasEl,\n 'drag',\n this._onDragProgress as EventListener,\n );\n this.fire('dragend', options);\n this._dragSource && this._dragSource.fire('dragend', options);\n delete this._dragSource;\n // we need to call mouse up synthetically because the browser won't\n this._onMouseUp(e);\n }\n\n /**\n * fire `drag` event on canvas and drag source\n * @private\n * @param {DragEvent} e\n */\n private _onDragProgress(e: DragEvent) {\n const options = {\n e,\n target: this._dragSource as FabricObject | undefined,\n dragSource: this._dragSource as FabricObject | undefined,\n dropTarget: this._draggedoverTarget as FabricObject,\n };\n this.fire('drag', options);\n this._dragSource && this._dragSource.fire('drag', options);\n }\n\n /**\n * As opposed to {@link findTarget} we want the top most object to be returned w/o the active object cutting in line.\n * Override at will\n */\n protected findDragTargets(e: DragEvent) {\n this.targets = [];\n const target = this._searchPossibleTargets(\n this._objects,\n this.getViewportPoint(e),\n );\n return {\n target,\n targets: [...this.targets],\n };\n }\n\n /**\n * prevent default to allow drop event to be fired\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#specifying_drop_targets\n * @private\n * @param {DragEvent} [e] Event object fired on Event.js shake\n */\n private _onDragOver(e: DragEvent) {\n const eventType = 'dragover';\n const { target, targets } = this.findDragTargets(e);\n const dragSource = this._dragSource as FabricObject;\n const options = {\n e,\n target,\n subTargets: targets,\n dragSource,\n canDrop: false,\n dropTarget: undefined,\n };\n let dropTarget;\n // fire on canvas\n this.fire(eventType, options);\n // make sure we fire dragenter events before dragover\n // if dragleave is needed, object will not fire dragover so we don't need to trouble ourselves with it\n this._fireEnterLeaveEvents(target, options);\n if (target) {\n if (target.canDrop(e)) {\n dropTarget = target;\n }\n target.fire(eventType, options);\n }\n // propagate the event to subtargets\n for (let i = 0; i < targets.length; i++) {\n const subTarget = targets[i];\n // accept event only if previous targets didn't (the accepting target calls `preventDefault` to inform that the event is taken)\n // TODO: verify if those should loop in inverse order then?\n // what is the order of subtargets?\n if (subTarget.canDrop(e)) {\n dropTarget = subTarget;\n }\n subTarget.fire(eventType, options);\n }\n // render drag effects now that relations between source and target is clear\n this._renderDragEffects(e, dragSource, dropTarget);\n this._dropTarget = dropTarget;\n }\n\n /**\n * fire `dragleave` on `dragover` targets\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n */\n private _onDragEnter(e: DragEvent) {\n const { target, targets } = this.findDragTargets(e);\n const options = {\n e,\n target,\n subTargets: targets,\n dragSource: this._dragSource,\n };\n this.fire('dragenter', options);\n // fire dragenter on targets\n this._fireEnterLeaveEvents(target, options);\n }\n\n /**\n * fire `dragleave` on `dragover` targets\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n */\n private _onDragLeave(e: DragEvent) {\n const options = {\n e,\n target: this._draggedoverTarget,\n subTargets: this.targets,\n dragSource: this._dragSource,\n };\n this.fire('dragleave', options);\n\n // fire dragleave on targets\n this._fireEnterLeaveEvents(undefined, options);\n this._renderDragEffects(e, this._dragSource);\n this._dropTarget = undefined;\n // clear targets\n this.targets = [];\n this._hoveredTargets = [];\n }\n\n /**\n * `drop:before` is a an event that allows you to schedule logic\n * before the `drop` event. Prefer `drop` event always, but if you need\n * to run some drop-disabling logic on an event, since there is no way\n * to handle event handlers ordering, use `drop:before`\n * @private\n * @param {Event} e\n */\n private _onDrop(e: DragEvent) {\n const { target, targets } = this.findDragTargets(e);\n const options = this._basicEventHandler('drop:before', {\n e,\n target,\n subTargets: targets,\n dragSource: this._dragSource,\n ...getEventPoints(this, e),\n });\n // will be set by the drop target\n options.didDrop = false;\n // will be set by the drop target, used in case options.target refuses the drop\n options.dropTarget = undefined;\n // fire `drop`\n this._basicEventHandler('drop', options);\n // inform canvas of the drop\n // we do this because canvas was unaware of what happened at the time the `drop` event was fired on it\n // use for side effects\n this.fire('drop:after', options);\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n private _onContextMenu(e: TPointerEvent): false {\n const target = this.findTarget(e),\n subTargets = this.targets || [];\n const options = this._basicEventHandler('contextmenu:before', {\n e,\n target,\n subTargets,\n });\n // TODO: this line is silly because the dev can subscribe to the event and prevent it themselves\n this.stopContextMenu && stopEvent(e);\n this._basicEventHandler('contextmenu', options);\n return false;\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n private _onDoubleClick(e: TPointerEvent) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'dblclick');\n this._resetTransformEventData();\n }\n\n /**\n * Return a the id of an event.\n * returns either the pointerId or the identifier or 0 for the mouse event\n * @private\n * @param {Event} evt Event object\n */\n getPointerId(evt: TouchEvent | PointerEvent): number {\n const changedTouches = (evt as TouchEvent).changedTouches;\n\n if (changedTouches) {\n return changedTouches[0] && changedTouches[0].identifier;\n }\n\n if (this.enablePointerEvents) {\n return (evt as PointerEvent).pointerId;\n }\n\n return -1;\n }\n\n /**\n * Determines if an event has the id of the event that is considered main\n * @private\n * @param {evt} event Event object\n */\n _isMainEvent(evt: TPointerEvent): boolean {\n if ((evt as PointerEvent).isPrimary === true) {\n return true;\n }\n if ((evt as PointerEvent).isPrimary === false) {\n return false;\n }\n if (evt.type === 'touchend' && (evt as TouchEvent).touches.length === 0) {\n return true;\n }\n if ((evt as TouchEvent).changedTouches) {\n return (\n (evt as TouchEvent).changedTouches[0].identifier === this.mainTouchId\n );\n }\n return true;\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchStart(e: TouchEvent) {\n // we will prevent scrolling if allowTouchScrolling is not enabled and\n let shouldPreventScrolling = !this.allowTouchScrolling;\n const currentActiveObject = this._activeObject;\n if (this.mainTouchId === undefined) {\n this.mainTouchId = this.getPointerId(e);\n }\n this.__onMouseDown(e);\n // after executing fabric logic for mouse down let's see\n // if we didn't change target or if we are drawing\n // we want to prevent scrolling anyway\n if (\n this.isDrawingMode ||\n (currentActiveObject && this._target === currentActiveObject)\n ) {\n shouldPreventScrolling = true;\n }\n // prevent default, will block scrolling from start\n shouldPreventScrolling && e.preventDefault();\n this._resetTransformEventData();\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n const doc = getDocumentFromElement(canvasElement);\n addListener(\n doc,\n 'touchend',\n this._onTouchEnd as EventListener,\n addEventOptions,\n );\n // if we scroll don't register the touch move event\n shouldPreventScrolling &&\n addListener(\n doc,\n 'touchmove',\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n // Unbind mousedown to prevent double triggers from touch devices\n removeListener(\n canvasElement,\n `${eventTypePrefix}down`,\n this._onMouseDown as EventListener,\n );\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDown(e: TPointerEvent) {\n this.__onMouseDown(e);\n this._resetTransformEventData();\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n removeListener(\n canvasElement,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n const doc = getDocumentFromElement(canvasElement);\n addListener(doc, `${eventTypePrefix}up`, this._onMouseUp as EventListener);\n addListener(\n doc,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchEnd(e: TouchEvent) {\n if (e.touches.length > 0) {\n // if there are still touches stop here\n return;\n }\n this.__onMouseUp(e);\n this._resetTransformEventData();\n delete this.mainTouchId;\n const eventTypePrefix = this._getEventPrefix();\n const doc = getDocumentFromElement(this.upperCanvasEl);\n removeListener(\n doc,\n 'touchend',\n this._onTouchEnd as EventListener,\n addEventOptions,\n );\n removeListener(\n doc,\n 'touchmove',\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n if (this._willAddMouseDown) {\n clearTimeout(this._willAddMouseDown);\n }\n this._willAddMouseDown = setTimeout(() => {\n // Wait 400ms before rebinding mousedown to prevent double triggers\n // from touch devices\n addListener(\n this.upperCanvasEl,\n `${eventTypePrefix}down`,\n this._onMouseDown as EventListener,\n );\n this._willAddMouseDown = 0;\n }, 400) as unknown as number;\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUp(e: TPointerEvent) {\n this.__onMouseUp(e);\n this._resetTransformEventData();\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n if (this._isMainEvent(e)) {\n const doc = getDocumentFromElement(this.upperCanvasEl);\n removeListener(\n doc,\n `${eventTypePrefix}up`,\n this._onMouseUp as EventListener,\n );\n removeListener(\n doc,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n addListener(\n canvasElement,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n }\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMove(e: TPointerEvent) {\n const activeObject = this.getActiveObject();\n !this.allowTouchScrolling &&\n (!activeObject ||\n // a drag event sequence is started by the active object flagging itself on mousedown / mousedown:before\n // we must not prevent the event's default behavior in order for the window to start dragging\n !activeObject.shouldStartDragging(e)) &&\n e.preventDefault &&\n e.preventDefault();\n this.__onMouseMove(e);\n }\n\n /**\n * @private\n */\n _onResize() {\n this.calcOffset();\n this._resetTransformEventData();\n }\n\n /**\n * Decides whether the canvas should be redrawn in mouseup and mousedown events.\n * @private\n * @param {Object} target\n */\n _shouldRender(target: FabricObject | undefined) {\n const activeObject = this.getActiveObject();\n // if just one of them is available or if they are both but are different objects\n // this covers: switch of target, from target to no target, selection of target\n // multiSelection with key and mouse\n return (\n !!activeObject !== !!target ||\n (activeObject && target && activeObject !== target)\n );\n }\n\n /**\n * Method that defines the actions when mouse is released on canvas.\n * The method resets the currentTransform parameters, store the image corner\n * position in the image object and render the canvas on top.\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseUp(e: TPointerEvent) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'up:before');\n\n const transform = this._currentTransform;\n const isClick = this._isClick;\n const target = this._target;\n\n // if right/middle click just fire events and return\n // target undefined will make the _handleEvent search the target\n const { button } = e as MouseEvent;\n if (button) {\n ((this.fireMiddleClick && button === 1) ||\n (this.fireRightClick && button === 2)) &&\n this._handleEvent(e, 'up');\n this._resetTransformEventData();\n return;\n }\n\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this._onMouseUpInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n let shouldRender = false;\n if (transform) {\n this._finalizeCurrentTransform(e);\n shouldRender = transform.actionPerformed;\n }\n if (!isClick) {\n const targetWasActive = target === this._activeObject;\n this.handleSelection(e);\n if (!shouldRender) {\n shouldRender =\n this._shouldRender(target) ||\n (!targetWasActive && target === this._activeObject);\n }\n }\n let pointer, corner;\n if (target) {\n const found = target.findControl(\n this.getViewportPoint(e),\n isTouchEvent(e),\n );\n const { key, control } = found || {};\n corner = key;\n if (\n target.selectable &&\n target !== this._activeObject &&\n target.activeOn === 'up'\n ) {\n this.setActiveObject(target, e);\n shouldRender = true;\n } else if (control) {\n const mouseUpHandler = control.getMouseUpHandler(e, target, control);\n if (mouseUpHandler) {\n pointer = this.getScenePoint(e);\n mouseUpHandler.call(control, e, transform!, pointer.x, pointer.y);\n }\n }\n target.isMoving = false;\n }\n // if we are ending up a transform on a different control or a new object\n // fire the original mouse up from the corner that started the transform\n if (\n transform &&\n (transform.target !== target || transform.corner !== corner)\n ) {\n const originalControl =\n transform.target && transform.target.controls[transform.corner],\n originalMouseUpHandler =\n originalControl &&\n originalControl.getMouseUpHandler(\n e,\n transform.target,\n originalControl,\n );\n pointer = pointer || this.getScenePoint(e);\n originalMouseUpHandler &&\n originalMouseUpHandler.call(\n originalControl,\n e,\n transform,\n pointer.x,\n pointer.y,\n );\n }\n this._setCursorFromEvent(e, target);\n this._handleEvent(e, 'up');\n this._groupSelector = null;\n this._currentTransform = null;\n // reset the target information about which corner is selected\n target && (target.__corner = undefined);\n if (shouldRender) {\n this.requestRenderAll();\n } else if (!isClick && !(this._activeObject as IText)?.isEditing) {\n this.renderTop();\n }\n }\n\n _basicEventHandler(\n eventType: T,\n options: (CanvasEvents & ObjectEvents)[T],\n ) {\n const { target, subTargets = [] } = options as {\n target?: FabricObject;\n subTargets: FabricObject[];\n };\n this.fire(eventType, options);\n target && target.fire(eventType, options);\n for (let i = 0; i < subTargets.length; i++) {\n subTargets[i] !== target && subTargets[i].fire(eventType, options);\n }\n return options;\n }\n\n /**\n * @private\n * Handle event firing for target and subtargets\n * @param {TPointerEvent} e event from mouse\n * @param {TPointerEventNames} eventType\n */\n _handleEvent(e: TPointerEvent, eventType: T) {\n const target = this._target,\n targets = this.targets || [],\n options: CanvasEvents[`mouse:${T}`] = {\n e,\n target,\n subTargets: targets,\n ...getEventPoints(this, e),\n transform: this._currentTransform,\n ...(eventType === 'up:before' || eventType === 'up'\n ? {\n isClick: this._isClick,\n currentTarget: this.findTarget(e),\n // set by the preceding `findTarget` call\n currentSubTargets: this.targets,\n }\n : {}),\n } as CanvasEvents[`mouse:${T}`];\n this.fire(`mouse:${eventType}`, options);\n // this may be a little be more complicated of what we want to handle\n target && target.fire(`mouse${eventType}`, options);\n for (let i = 0; i < targets.length; i++) {\n targets[i] !== target && targets[i].fire(`mouse${eventType}`, options);\n }\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDownInDrawingMode(e: TPointerEvent) {\n this._isCurrentlyDrawing = true;\n if (this.getActiveObject()) {\n this.discardActiveObject(e);\n this.requestRenderAll();\n }\n // TODO: this is a scene point so it should be renamed\n const pointer = this.getScenePoint(e);\n this.freeDrawingBrush &&\n this.freeDrawingBrush.onMouseDown(pointer, { e, pointer });\n this._handleEvent(e, 'down');\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMoveInDrawingMode(e: TPointerEvent) {\n if (this._isCurrentlyDrawing) {\n const pointer = this.getScenePoint(e);\n this.freeDrawingBrush &&\n this.freeDrawingBrush.onMouseMove(pointer, {\n e,\n // this is an absolute pointer, the naming is wrong\n pointer,\n });\n }\n this.setCursor(this.freeDrawingCursor);\n this._handleEvent(e, 'move');\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUpInDrawingMode(e: TPointerEvent) {\n const pointer = this.getScenePoint(e);\n if (this.freeDrawingBrush) {\n this._isCurrentlyDrawing = !!this.freeDrawingBrush.onMouseUp({\n e: e,\n // this is an absolute pointer, the naming is wrong\n pointer,\n });\n } else {\n this._isCurrentlyDrawing = false;\n }\n this._handleEvent(e, 'up');\n }\n\n /**\n * Method that defines the actions when mouse is clicked on canvas.\n * The method inits the currentTransform parameters and renders all the\n * canvas so the current image can be placed on the top canvas and the rest\n * in on the container one.\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n __onMouseDown(e: TPointerEvent) {\n this._isClick = true;\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'down:before');\n\n let target: FabricObject | undefined = this._target;\n\n // if right/middle click just fire events\n const { button } = e as MouseEvent;\n if (button) {\n ((this.fireMiddleClick && button === 1) ||\n (this.fireRightClick && button === 2)) &&\n this._handleEvent(e, 'down');\n this._resetTransformEventData();\n return;\n }\n\n if (this.isDrawingMode) {\n this._onMouseDownInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n // ignore if some object is being transformed at this moment\n if (this._currentTransform) {\n return;\n }\n\n let shouldRender = this._shouldRender(target);\n let grouped = false;\n if (this.handleMultiSelection(e, target)) {\n // active object might have changed while grouping\n target = this._activeObject;\n grouped = true;\n shouldRender = true;\n } else if (this._shouldClearSelection(e, target)) {\n this.discardActiveObject(e);\n }\n // we start a group selector rectangle if\n // selection is enabled\n // and there is no target, or the following 3 conditions are satisfied:\n // target is not selectable ( otherwise we selected it )\n // target is not editing\n // target is not already selected ( otherwise we drag )\n if (\n this.selection &&\n (!target ||\n (!target.selectable &&\n !(target as IText).isEditing &&\n target !== this._activeObject))\n ) {\n const p = this.getScenePoint(e);\n this._groupSelector = {\n x: p.x,\n y: p.y,\n deltaY: 0,\n deltaX: 0,\n };\n }\n\n if (target) {\n const alreadySelected = target === this._activeObject;\n if (target.selectable && target.activeOn === 'down') {\n this.setActiveObject(target, e);\n }\n const handle = target.findControl(\n this.getViewportPoint(e),\n isTouchEvent(e),\n );\n if (target === this._activeObject && (handle || !grouped)) {\n this._setupCurrentTransform(e, target, alreadySelected);\n const control = handle ? handle.control : undefined,\n pointer = this.getScenePoint(e),\n mouseDownHandler =\n control && control.getMouseDownHandler(e, target, control);\n mouseDownHandler &&\n mouseDownHandler.call(\n control,\n e,\n this._currentTransform!,\n pointer.x,\n pointer.y,\n );\n }\n }\n // we clear `_objectsToRender` in case of a change in order to repopulate it at rendering\n // run before firing the `down` event to give the dev a chance to populate it themselves\n shouldRender && (this._objectsToRender = undefined);\n this._handleEvent(e, 'down');\n // we must renderAll so that we update the visuals\n shouldRender && this.requestRenderAll();\n }\n\n /**\n * reset cache form common information needed during event processing\n * @private\n */\n _resetTransformEventData() {\n this._target = undefined;\n this._pointer = undefined;\n this._absolutePointer = undefined;\n }\n\n /**\n * Cache common information needed during event processing\n * @private\n * @param {Event} e Event object fired on event\n */\n _cacheTransformEventData(e: TPointerEvent) {\n // reset in order to avoid stale caching\n this._resetTransformEventData();\n this._pointer = this.getViewportPoint(e);\n this._absolutePointer = sendPointToPlane(\n this._pointer,\n undefined,\n this.viewportTransform,\n );\n this._target = this._currentTransform\n ? this._currentTransform.target\n : this.findTarget(e);\n }\n\n /**\n * Method that defines the actions when mouse is hovering the canvas.\n * The currentTransform parameter will define whether the user is rotating/scaling/translating\n * an image or neither of them (only hovering). A group selection is also possible and would cancel\n * all any other type of action.\n * In case of an image transformation only the top canvas will be rendered.\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n __onMouseMove(e: TPointerEvent) {\n this._isClick = false;\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'move:before');\n\n if (this.isDrawingMode) {\n this._onMouseMoveInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n const groupSelector = this._groupSelector;\n\n // We initially clicked in an empty area, so we draw a box for multiple selection\n if (groupSelector) {\n const pointer = this.getScenePoint(e);\n\n groupSelector.deltaX = pointer.x - groupSelector.x;\n groupSelector.deltaY = pointer.y - groupSelector.y;\n\n this.renderTop();\n } else if (!this._currentTransform) {\n const target = this.findTarget(e);\n this._setCursorFromEvent(e, target);\n this._fireOverOutEvents(e, target);\n } else {\n this._transformObject(e);\n }\n this.textEditingManager.onMouseMove(e);\n this._handleEvent(e, 'move');\n this._resetTransformEventData();\n }\n\n /**\n * Manage the mouseout, mouseover events for the fabric object on the canvas\n * @param {Fabric.Object} target the target where the target from the mousemove event\n * @param {Event} e Event object fired on mousemove\n * @private\n */\n _fireOverOutEvents(e: TPointerEvent, target?: FabricObject) {\n const _hoveredTarget = this._hoveredTarget,\n _hoveredTargets = this._hoveredTargets,\n targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents('mouse', {\n e,\n target,\n oldTarget: _hoveredTarget,\n fireCanvas: true,\n });\n for (let i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents('mouse', {\n e,\n target: targets[i],\n oldTarget: _hoveredTargets[i],\n });\n }\n this._hoveredTarget = target;\n this._hoveredTargets = this.targets.concat();\n }\n\n /**\n * Manage the dragEnter, dragLeave events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the onDrag event\n * @param {Object} data Event object fired on dragover\n * @private\n */\n _fireEnterLeaveEvents(target: FabricObject | undefined, data: DragEventData) {\n const draggedoverTarget = this._draggedoverTarget,\n _hoveredTargets = this._hoveredTargets,\n targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents('drag', {\n ...data,\n target,\n oldTarget: draggedoverTarget,\n fireCanvas: true,\n });\n for (let i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents('drag', {\n ...data,\n target: targets[i],\n oldTarget: _hoveredTargets[i],\n });\n }\n this._draggedoverTarget = target;\n }\n\n /**\n * Manage the synthetic in/out events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the supported events\n * @param {Object} data Event object fired\n * @param {Object} config configuration for the function to work\n * @param {String} config.targetName property on the canvas where the old target is stored\n * @param {String} [config.canvasEvtOut] name of the event to fire at canvas level for out\n * @param {String} config.evtOut name of the event to fire for out\n * @param {String} [config.canvasEvtIn] name of the event to fire at canvas level for in\n * @param {String} config.evtIn name of the event to fire for in\n * @private\n */\n fireSyntheticInOutEvents(\n type: T,\n {\n target,\n oldTarget,\n fireCanvas,\n e,\n ...data\n }: TSyntheticEventContext[T] & {\n target?: FabricObject;\n oldTarget?: FabricObject;\n fireCanvas?: boolean;\n },\n ) {\n const { targetIn, targetOut, canvasIn, canvasOut } =\n syntheticEventConfig[type];\n const targetChanged = oldTarget !== target;\n\n if (oldTarget && targetChanged) {\n const outOpt: CanvasEvents[typeof canvasOut] = {\n ...data,\n e,\n target: oldTarget,\n nextTarget: target,\n ...getEventPoints(this, e),\n };\n fireCanvas && this.fire(canvasOut, outOpt);\n oldTarget.fire(targetOut, outOpt);\n }\n if (target && targetChanged) {\n const inOpt: CanvasEvents[typeof canvasIn] = {\n ...data,\n e,\n target,\n previousTarget: oldTarget,\n ...getEventPoints(this, e),\n };\n fireCanvas && this.fire(canvasIn, inOpt);\n target.fire(targetIn, inOpt);\n }\n }\n\n /**\n * Method that defines actions when an Event Mouse Wheel\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseWheel(e: TPointerEvent) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'wheel');\n this._resetTransformEventData();\n }\n\n /**\n * @private\n * @param {Event} e Event fired on mousemove\n */\n _transformObject(e: TPointerEvent) {\n const scenePoint = this.getScenePoint(e),\n transform = this._currentTransform!,\n target = transform.target,\n // transform pointer to target's containing coordinate plane\n // both pointer and object should agree on every point\n localPointer = target.group\n ? sendPointToPlane(\n scenePoint,\n undefined,\n target.group.calcTransformMatrix(),\n )\n : scenePoint;\n transform.shiftKey = e.shiftKey;\n transform.altKey = !!this.centeredKey && e[this.centeredKey];\n\n this._performTransformAction(e, transform, localPointer);\n transform.actionPerformed && this.requestRenderAll();\n }\n\n /**\n * @private\n */\n _performTransformAction(\n e: TPointerEvent,\n transform: Transform,\n pointer: Point,\n ) {\n const { action, actionHandler, target } = transform;\n\n const actionPerformed =\n !!actionHandler && actionHandler(e, transform, pointer.x, pointer.y);\n actionPerformed && target.setCoords();\n\n // this object could be created from the function in the control handlers\n if (action === 'drag' && actionPerformed) {\n transform.target.isMoving = true;\n this.setCursor(transform.target.moveCursor || this.moveCursor);\n }\n transform.actionPerformed = transform.actionPerformed || actionPerformed;\n }\n\n /**\n * Sets the cursor depending on where the canvas is being hovered.\n * Note: very buggy in Opera\n * @param {Event} e Event object\n * @param {Object} target Object that the mouse is hovering, if so.\n */\n _setCursorFromEvent(e: TPointerEvent, target?: FabricObject) {\n if (!target) {\n this.setCursor(this.defaultCursor);\n return;\n }\n let hoverCursor = target.hoverCursor || this.hoverCursor;\n const activeSelection = isActiveSelection(this._activeObject)\n ? this._activeObject\n : null,\n // only show proper corner when group selection is not active\n corner =\n (!activeSelection || target.group !== activeSelection) &&\n // here we call findTargetCorner always with undefined for the touch parameter.\n // we assume that if you are using a cursor you do not need to interact with\n // the bigger touch area.\n target.findControl(this.getViewportPoint(e));\n\n if (!corner) {\n if ((target as Group).subTargetCheck) {\n // hoverCursor should come from top-most subTarget,\n // so we walk the array backwards\n this.targets\n .concat()\n .reverse()\n .map((_target) => {\n hoverCursor = _target.hoverCursor || hoverCursor;\n });\n }\n this.setCursor(hoverCursor);\n } else {\n const control = corner.control;\n this.setCursor(control.cursorStyleHandler(e, control, target));\n }\n }\n\n /**\n * ## Handles multiple selection\n * - toggles `target` selection (selects/deselects `target` if it isn't/is selected respectively)\n * - sets the active object in case it is not set or in case there is a single active object left under active selection.\n * ---\n * - If the active object is the active selection we add/remove `target` from it\n * - If not, add the active object and `target` to the active selection and make it the active object.\n * @private\n * @param {TPointerEvent} e Event object\n * @param {FabricObject} target target of event to select/deselect\n * @returns true if grouping occurred\n */\n protected handleMultiSelection(e: TPointerEvent, target?: FabricObject) {\n const activeObject = this._activeObject;\n const isAS = isActiveSelection(activeObject);\n if (\n // check if an active object exists on canvas and if the user is pressing the `selectionKey` while canvas supports multi selection.\n !!activeObject &&\n this._isSelectionKeyPressed(e) &&\n this.selection &&\n // on top of that the user also has to hit a target that is selectable.\n !!target &&\n target.selectable &&\n // group target and active object only if they are different objects\n // else we try to find a subtarget of `ActiveSelection`\n (activeObject !== target || isAS) &&\n // make sure `activeObject` and `target` aren't ancestors of each other in case `activeObject` is not `ActiveSelection`\n // if it is then we want to remove `target` from it\n (isAS ||\n (!target.isDescendantOf(activeObject) &&\n !activeObject.isDescendantOf(target))) &&\n // target accepts selection\n !target.onSelect({ e }) &&\n // make sure we are not on top of a control\n !activeObject.getActiveControl()\n ) {\n if (isAS) {\n const prevActiveObjects = activeObject.getObjects();\n if (target === activeObject) {\n const pointer = this.getViewportPoint(e);\n target =\n // first search active objects for a target to remove\n this.searchPossibleTargets(prevActiveObjects, pointer) ||\n // if not found, search under active selection for a target to add\n // `prevActiveObjects` will be searched but we already know they will not be found\n this.searchPossibleTargets(this._objects, pointer);\n // if nothing is found bail out\n if (!target || !target.selectable) {\n return false;\n }\n }\n if (target.group === activeObject) {\n // `target` is part of active selection => remove it\n activeObject.remove(target);\n this._hoveredTarget = target;\n this._hoveredTargets = [...this.targets];\n // if after removing an object we are left with one only...\n if (activeObject.size() === 1) {\n // activate last remaining object\n // deselecting the active selection will remove the remaining object from it\n this._setActiveObject(activeObject.item(0), e);\n }\n } else {\n // `target` isn't part of active selection => add it\n activeObject.multiSelectAdd(target);\n this._hoveredTarget = activeObject;\n this._hoveredTargets = [...this.targets];\n }\n this._fireSelectionEvents(prevActiveObjects, e);\n } else {\n (activeObject as IText).exitEditing &&\n (activeObject as IText).exitEditing();\n // add the active object and the target to the active selection and set it as the active object\n const klass =\n classRegistry.getClass('ActiveSelection');\n const newActiveSelection = new klass([], {\n /**\n * it is crucial to pass the canvas ref before calling {@link ActiveSelection#multiSelectAdd}\n * since it uses {@link FabricObject#isInFrontOf} which relies on the canvas ref\n */\n canvas: this,\n });\n newActiveSelection.multiSelectAdd(activeObject, target);\n this._hoveredTarget = newActiveSelection;\n // ISSUE 4115: should we consider subTargets here?\n // this._hoveredTargets = [];\n // this._hoveredTargets = this.targets.concat();\n this._setActiveObject(newActiveSelection, e);\n this._fireSelectionEvents([activeObject], e);\n }\n return true;\n }\n return false;\n }\n\n /**\n * ## Handles selection\n * - selects objects that are contained in (and possibly intersecting) the selection bounding box\n * - sets the active object\n * ---\n * runs on mouse up after a mouse move\n */\n protected handleSelection(e: TPointerEvent) {\n if (!this.selection || !this._groupSelector) {\n return false;\n }\n const { x, y, deltaX, deltaY } = this._groupSelector,\n point1 = new Point(x, y),\n point2 = point1.add(new Point(deltaX, deltaY)),\n tl = point1.min(point2),\n br = point1.max(point2),\n size = br.subtract(tl);\n\n const collectedObjects = this.collectObjects(\n {\n left: tl.x,\n top: tl.y,\n width: size.x,\n height: size.y,\n },\n { includeIntersecting: !this.selectionFullyContained },\n ) as FabricObject[];\n\n const objects =\n // though this method runs only after mouse move the pointer could do a mouse up on the same position as mouse down\n // should it be handled as is?\n point1.eq(point2)\n ? collectedObjects[0]\n ? [collectedObjects[0]]\n : []\n : collectedObjects.length > 1\n ? collectedObjects\n .filter((object) => !object.onSelect({ e }))\n .reverse()\n : // `setActiveObject` will call `onSelect(collectedObjects[0])` in this case\n collectedObjects;\n\n // set active object\n if (objects.length === 1) {\n // set as active object\n this.setActiveObject(objects[0], e);\n } else if (objects.length > 1) {\n // add to active selection and make it the active object\n const klass =\n classRegistry.getClass('ActiveSelection');\n this.setActiveObject(new klass(objects, { canvas: this }), e);\n }\n\n // cleanup\n this._groupSelector = null;\n return true;\n }\n\n /**\n * @override clear {@link textEditingManager}\n */\n clear() {\n this.textEditingManager.clear();\n super.clear();\n }\n\n /**\n * @override clear {@link textEditingManager}\n */\n destroy() {\n this.removeListeners();\n this.textEditingManager.dispose();\n super.destroy();\n }\n}\n","export const linearDefaultCoords = {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n};\n\nexport const radialDefaultCoords = {\n ...linearDefaultCoords,\n r1: 0,\n r2: 0,\n};\n","/**\n *\n * @param value value to check if NaN\n * @param [valueIfNaN]\n * @returns `fallback` is `value is NaN\n */\nexport const ifNaN = (value: number, valueIfNaN?: number) => {\n return isNaN(value) && typeof valueIfNaN === 'number' ? valueIfNaN : value;\n};\n","import { ifNaN } from '../util/internals/ifNaN';\nimport { capValue } from '../util/misc/capValue';\n\nconst RE_PERCENT = /^(\\d+\\.\\d+)%|(\\d+)%$/;\n\nexport function isPercent(value: string | null) {\n return value && RE_PERCENT.test(value);\n}\n\n/**\n *\n * @param value\n * @param valueIfNaN\n * @returns ∈ [0, 1]\n */\nexport function parsePercent(\n value: string | number | null | undefined,\n valueIfNaN?: number,\n) {\n const parsed =\n typeof value === 'number'\n ? value\n : typeof value === 'string'\n ? parseFloat(value) / (isPercent(value) ? 100 : 1)\n : NaN;\n return capValue(0, ifNaN(parsed, valueIfNaN), 1);\n}\n","import { Color } from '../../color/Color';\nimport { parsePercent } from '../../parser/percent';\nimport { ifNaN } from '../../util/internals/ifNaN';\nimport type { ColorStop } from '../typedefs';\n\nconst RE_KEY_VALUE_PAIRS = /\\s*;\\s*/;\nconst RE_KEY_VALUE = /\\s*:\\s*/;\n\nfunction parseColorStop(el: SVGStopElement, multiplier: number) {\n let colorValue, opacity;\n const style = el.getAttribute('style');\n if (style) {\n const keyValuePairs = style.split(RE_KEY_VALUE_PAIRS);\n\n if (keyValuePairs[keyValuePairs.length - 1] === '') {\n keyValuePairs.pop();\n }\n\n for (let i = keyValuePairs.length; i--; ) {\n const [key, value] = keyValuePairs[i]\n .split(RE_KEY_VALUE)\n .map((s) => s.trim());\n if (key === 'stop-color') {\n colorValue = value;\n } else if (key === 'stop-opacity') {\n opacity = value;\n }\n }\n }\n\n const color = new Color(\n colorValue || el.getAttribute('stop-color') || 'rgb(0,0,0)',\n );\n\n return {\n offset: parsePercent(el.getAttribute('offset'), 0),\n color: color.toRgb(),\n opacity:\n ifNaN(parseFloat(opacity || el.getAttribute('stop-opacity') || ''), 1) *\n color.getAlpha() *\n multiplier,\n };\n}\n\nexport function parseColorStops(\n el: SVGGradientElement,\n opacityAttr: string | null,\n) {\n const colorStops: ColorStop[] = [],\n colorStopEls = el.getElementsByTagName('stop'),\n multiplier = parsePercent(opacityAttr, 1);\n for (let i = colorStopEls.length; i--; ) {\n colorStops.push(parseColorStop(colorStopEls[i], multiplier));\n }\n return colorStops;\n}\n","import type { GradientType, GradientUnits } from '../typedefs';\n\nexport function parseType(el: SVGGradientElement): GradientType {\n return el.nodeName === 'linearGradient' || el.nodeName === 'LINEARGRADIENT'\n ? 'linear'\n : 'radial';\n}\n\nexport function parseGradientUnits(el: SVGGradientElement): GradientUnits {\n return el.getAttribute('gradientUnits') === 'userSpaceOnUse'\n ? 'pixels'\n : 'percentage';\n}\n","import { isPercent } from '../../parser/percent';\nimport type { TSize } from '../../typedefs';\nimport type { GradientCoords, GradientType, GradientUnits } from '../typedefs';\nimport { parseGradientUnits, parseType } from './misc';\n\nfunction convertPercentUnitsToValues<\n T extends GradientType,\n K extends keyof GradientCoords,\n>(\n valuesToConvert: Record,\n { width, height, gradientUnits }: TSize & { gradientUnits: GradientUnits },\n) {\n let finalValue;\n return (Object.keys(valuesToConvert) as K[]).reduce(\n (acc, prop) => {\n const propValue = valuesToConvert[prop];\n if (propValue === 'Infinity') {\n finalValue = 1;\n } else if (propValue === '-Infinity') {\n finalValue = 0;\n } else {\n finalValue =\n typeof propValue === 'string' ? parseFloat(propValue) : propValue;\n if (typeof propValue === 'string' && isPercent(propValue)) {\n finalValue *= 0.01;\n if (gradientUnits === 'pixels') {\n // then we need to fix those percentages here in svg parsing\n if (prop === 'x1' || prop === 'x2' || prop === 'r2') {\n finalValue *= width;\n }\n if (prop === 'y1' || prop === 'y2') {\n finalValue *= height;\n }\n }\n }\n }\n acc[prop] = finalValue;\n return acc;\n },\n {} as Record,\n );\n}\n\nfunction getValue(el: SVGGradientElement, key: string) {\n return el.getAttribute(key);\n}\n\nexport function parseLinearCoords(el: SVGGradientElement) {\n return {\n x1: getValue(el, 'x1') || 0,\n y1: getValue(el, 'y1') || 0,\n x2: getValue(el, 'x2') || '100%',\n y2: getValue(el, 'y2') || 0,\n };\n}\n\nexport function parseRadialCoords(el: SVGGradientElement) {\n return {\n x1: getValue(el, 'fx') || getValue(el, 'cx') || '50%',\n y1: getValue(el, 'fy') || getValue(el, 'cy') || '50%',\n r1: 0,\n x2: getValue(el, 'cx') || '50%',\n y2: getValue(el, 'cy') || '50%',\n r2: getValue(el, 'r') || '50%',\n };\n}\n\nexport function parseCoords(el: SVGGradientElement, size: TSize) {\n return convertPercentUnitsToValues(\n parseType(el) === 'linear' ? parseLinearCoords(el) : parseRadialCoords(el),\n {\n ...size,\n gradientUnits: parseGradientUnits(el),\n },\n );\n}\n","import { Color } from '../color/Color';\nimport { iMatrix } from '../constants';\nimport { parseTransformAttribute } from '../parser/parseTransformAttribute';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { uid } from '../util/internals/uid';\nimport { pick } from '../util/misc/pick';\nimport { matrixToSVG } from '../util/misc/svgParsing';\nimport { linearDefaultCoords, radialDefaultCoords } from './constants';\nimport { parseColorStops } from './parser/parseColorStops';\nimport { parseCoords } from './parser/parseCoords';\nimport { parseType, parseGradientUnits } from './parser/misc';\nimport type {\n ColorStop,\n GradientCoords,\n GradientOptions,\n GradientType,\n GradientUnits,\n SVGOptions,\n} from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { isPath } from '../util/typeAssertions';\n\n/**\n * Gradient class\n * @class Gradient\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#gradients}\n */\nexport class Gradient<\n S,\n T extends GradientType = S extends GradientType ? S : 'linear',\n> {\n /**\n * Horizontal offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n declare offsetX: number;\n\n /**\n * Vertical offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n declare offsetY: number;\n\n /**\n * A transform matrix to apply to the gradient before painting.\n * Imported from svg gradients, is not applied with the current transform in the center.\n * Before this transform is applied, the origin point is at the top left corner of the object\n * plus the addition of offsetY and offsetX.\n * @type Number[]\n * @default null\n */\n declare gradientTransform?: TMat2D;\n\n /**\n * coordinates units for coords.\n * If `pixels`, the number of coords are in the same unit of width / height.\n * If set as `percentage` the coords are still a number, but 1 means 100% of width\n * for the X and 100% of the height for the y. It can be bigger than 1 and negative.\n * allowed values pixels or percentage.\n * @type GradientUnits\n * @default 'pixels'\n */\n declare gradientUnits: GradientUnits;\n\n /**\n * Gradient type linear or radial\n * @type GradientType\n * @default 'linear'\n */\n declare type: T;\n\n /**\n * Defines how the gradient is located in space and spread\n * @type GradientCoords\n */\n declare coords: GradientCoords;\n\n /**\n * Defines how many colors a gradient has and how they are located on the axis\n * defined by coords\n * @type GradientCoords\n */\n declare colorStops: ColorStop[];\n\n /**\n * If true, this object will not be exported during the serialization of a canvas\n * @type boolean\n */\n declare excludeFromExport?: boolean;\n\n /**\n * ID used for SVG export functionalities\n * @type number | string\n */\n declare readonly id: string | number;\n\n static type = 'Gradient';\n\n constructor(options: GradientOptions) {\n const {\n type = 'linear' as T,\n gradientUnits = 'pixels',\n coords = {},\n colorStops = [],\n offsetX = 0,\n offsetY = 0,\n gradientTransform,\n id,\n } = options || {};\n Object.assign(this, {\n type,\n gradientUnits,\n coords: {\n ...(type === 'radial' ? radialDefaultCoords : linearDefaultCoords),\n ...coords,\n },\n colorStops,\n offsetX,\n offsetY,\n gradientTransform,\n id: id ? `${id}_${uid()}` : uid(),\n });\n }\n\n /**\n * Adds another colorStop\n * @param {Record} colorStop Object with offset and color\n * @return {Gradient} thisArg\n */\n addColorStop(colorStops: Record) {\n for (const position in colorStops) {\n const color = new Color(colorStops[position]);\n this.colorStops.push({\n offset: parseFloat(position),\n color: color.toRgb(),\n opacity: color.getAlpha(),\n });\n }\n return this;\n }\n\n /**\n * Returns object representation of a gradient\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {object}\n */\n toObject(propertiesToInclude?: (keyof this | string)[]) {\n return {\n ...pick(this, propertiesToInclude as (keyof this)[]),\n type: this.type,\n coords: { ...this.coords },\n colorStops: this.colorStops.map((colorStop) => ({ ...colorStop })),\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n gradientUnits: this.gradientUnits,\n gradientTransform: this.gradientTransform\n ? [...this.gradientTransform]\n : undefined,\n };\n }\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of an gradient\n * @param {FabricObject} object Object to create a gradient for\n * @return {String} SVG representation of an gradient (linear/radial)\n */\n toSVG(\n object: FabricObject,\n {\n additionalTransform: preTransform,\n }: { additionalTransform?: string } = {},\n ) {\n const markup = [],\n transform = (\n this.gradientTransform\n ? this.gradientTransform.concat()\n : iMatrix.concat()\n ) as TMat2D,\n gradientUnits =\n this.gradientUnits === 'pixels'\n ? 'userSpaceOnUse'\n : 'objectBoundingBox';\n // colorStops must be sorted ascending, and guarded against deep mutations\n const colorStops = this.colorStops\n .map((colorStop) => ({ ...colorStop }))\n .sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let offsetX = -this.offsetX,\n offsetY = -this.offsetY;\n if (gradientUnits === 'objectBoundingBox') {\n offsetX /= object.width;\n offsetY /= object.height;\n } else {\n offsetX += object.width / 2;\n offsetY += object.height / 2;\n }\n // todo what about polygon/polyline?\n if (isPath(object) && this.gradientUnits !== 'percentage') {\n offsetX -= object.pathOffset.x;\n offsetY -= object.pathOffset.y;\n }\n transform[4] -= offsetX;\n transform[5] -= offsetY;\n\n const commonAttributes = [\n `id=\"SVGID_${this.id}\"`,\n `gradientUnits=\"${gradientUnits}\"`,\n `gradientTransform=\"${\n preTransform ? preTransform + ' ' : ''\n }${matrixToSVG(transform)}\"`,\n '',\n ].join(' ');\n\n if (this.type === 'linear') {\n const { x1, y1, x2, y2 } = this.coords;\n markup.push(\n '\\n',\n );\n } else if (this.type === 'radial') {\n const { x1, y1, x2, y2, r1, r2 } = this\n .coords as GradientCoords<'radial'>;\n const needsSwap = r1 > r2;\n // svg radial gradient has just 1 radius. the biggest.\n markup.push(\n '\\n',\n );\n if (needsSwap) {\n // svg goes from internal to external radius. if radius are inverted, swap color stops.\n colorStops.reverse(); // mutates array\n colorStops.forEach((colorStop) => {\n colorStop.offset = 1 - colorStop.offset;\n });\n }\n const minRadius = Math.min(r1, r2);\n if (minRadius > 0) {\n // i have to shift all colorStops and add new one in 0.\n const maxRadius = Math.max(r1, r2),\n percentageShift = minRadius / maxRadius;\n colorStops.forEach((colorStop) => {\n colorStop.offset += percentageShift * (1 - colorStop.offset);\n });\n }\n }\n\n colorStops.forEach(({ color, offset, opacity }) => {\n markup.push(\n '\\n',\n );\n });\n\n markup.push(\n this.type === 'linear' ? '' : '',\n '\\n',\n );\n\n return markup.join('');\n }\n /* _TO_SVG_END_ */\n\n /**\n * Returns an instance of CanvasGradient\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {CanvasGradient}\n */\n toLive(ctx: CanvasRenderingContext2D): CanvasGradient {\n const { x1, y1, x2, y2, r1, r2 } = this.coords as GradientCoords<'radial'>;\n const gradient =\n this.type === 'linear'\n ? ctx.createLinearGradient(x1, y1, x2, y2)\n : ctx.createRadialGradient(x1, y1, r1, x2, y2, r2);\n\n this.colorStops.forEach(({ color, opacity, offset }) => {\n gradient.addColorStop(\n offset,\n typeof opacity !== 'undefined'\n ? new Color(color).setAlpha(opacity).toRgba()\n : color,\n );\n });\n\n return gradient;\n }\n\n static async fromObject(\n options: GradientOptions<'linear'>,\n ): Promise>;\n static async fromObject(\n options: GradientOptions<'radial'>,\n ): Promise>;\n static async fromObject(\n options: GradientOptions<'linear'> | GradientOptions<'radial'>,\n ) {\n const { colorStops, gradientTransform } = options;\n return new this({\n ...options,\n colorStops: colorStops\n ? colorStops.map((colorStop) => ({ ...colorStop }))\n : undefined,\n gradientTransform: gradientTransform ? [...gradientTransform] : undefined,\n });\n }\n\n /* _FROM_SVG_START_ */\n /**\n * Returns {@link Gradient} instance from an SVG element\n * @static\n * @memberOf Gradient\n * @param {SVGGradientElement} el SVG gradient element\n * @param {FabricObject} instance\n * @param {String} opacity A fill-opacity or stroke-opacity attribute to multiply to each stop's opacity.\n * @param {SVGOptions} svgOptions an object containing the size of the SVG in order to parse correctly gradients\n * that uses gradientUnits as 'userSpaceOnUse' and percentages.\n * @return {Gradient} Gradient instance\n * @see http://www.w3.org/TR/SVG/pservers.html#LinearGradientElement\n * @see http://www.w3.org/TR/SVG/pservers.html#RadialGradientElement\n *\n * @example\n *\n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n * \n *\n */\n static fromElement(\n el: SVGGradientElement,\n instance: FabricObject,\n svgOptions: SVGOptions,\n ): Gradient {\n const gradientUnits = parseGradientUnits(el);\n const center = instance._findCenterFromElement();\n return new this({\n id: el.getAttribute('id') || undefined,\n type: parseType(el),\n coords: parseCoords(el, {\n width: svgOptions.viewBoxWidth || svgOptions.width,\n height: svgOptions.viewBoxHeight || svgOptions.height,\n }),\n colorStops: parseColorStops(el, svgOptions.opacity),\n gradientUnits,\n gradientTransform: parseTransformAttribute(\n el.getAttribute('gradientTransform') || '',\n ),\n ...(gradientUnits === 'pixels'\n ? {\n offsetX: instance.width / 2 - center.x,\n offsetY: instance.height / 2 - center.y,\n }\n : {\n offsetX: 0,\n offsetY: 0,\n }),\n });\n }\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Gradient, 'gradient');\nclassRegistry.setClass(Gradient, 'linear');\nclassRegistry.setClass(Gradient, 'radial');\n","import { config } from '../config';\nimport type { Abortable, TCrossOrigin, TMat2D, TSize } from '../typedefs';\nimport { ifNaN } from '../util/internals/ifNaN';\nimport { uid } from '../util/internals/uid';\nimport { loadImage } from '../util/misc/objectEnlive';\nimport { pick } from '../util/misc/pick';\nimport { toFixed } from '../util/misc/toFixed';\nimport { classRegistry } from '../ClassRegistry';\nimport type {\n PatternRepeat,\n PatternOptions,\n SerializedPatternOptions,\n} from './types';\nimport { log } from '../util/internals/console';\n\n/**\n * @see {@link http://fabricjs.com/patterns demo}\n * @see {@link http://fabricjs.com/dynamic-patterns demo}\n */\nexport class Pattern {\n static type = 'Pattern';\n\n /**\n * Legacy identifier of the class. Prefer using this.constructor.type 'Pattern'\n * or utils like isPattern, or instance of to indentify a pattern in your code.\n * Will be removed in future versiones\n * @TODO add sustainable warning message\n * @type string\n * @deprecated\n */\n get type() {\n return 'pattern';\n }\n\n set type(value) {\n log('warn', 'Setting type has no effect', value);\n }\n\n /**\n * @type PatternRepeat\n * @defaults\n */\n repeat: PatternRepeat = 'repeat';\n\n /**\n * Pattern horizontal offset from object's left/top corner\n * @type Number\n * @default\n */\n offsetX = 0;\n\n /**\n * Pattern vertical offset from object's left/top corner\n * @type Number\n * @default\n */\n offsetY = 0;\n\n /**\n * @type TCrossOrigin\n * @default\n */\n crossOrigin: TCrossOrigin = '';\n\n /**\n * transform matrix to change the pattern, imported from svgs.\n * @todo verify if using the identity matrix as default makes the rest of the code more easy\n * @type Array\n * @default\n */\n declare patternTransform?: TMat2D;\n\n /**\n * The actual pixel source of the pattern\n */\n declare source: CanvasImageSource;\n\n /**\n * If true, this object will not be exported during the serialization of a canvas\n * @type boolean\n */\n declare excludeFromExport?: boolean;\n\n /**\n * ID used for SVG export functionalities\n * @type number\n */\n declare readonly id: number;\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n * @param {option.source} [source] the pattern source, eventually empty or a drawable\n */\n constructor(options: PatternOptions) {\n this.id = uid();\n Object.assign(this, options);\n }\n\n /**\n * @returns true if {@link source} is an element\n */\n isImageSource(): this is { source: HTMLImageElement } {\n return (\n !!this.source && typeof (this.source as HTMLImageElement).src === 'string'\n );\n }\n\n /**\n * @returns true if {@link source} is a element\n */\n isCanvasSource(): this is { source: HTMLCanvasElement } {\n return !!this.source && !!(this.source as HTMLCanvasElement).toDataURL;\n }\n\n sourceToString(): string {\n return this.isImageSource()\n ? this.source.src\n : this.isCanvasSource()\n ? this.source.toDataURL()\n : '';\n }\n\n /**\n * Returns an instance of CanvasPattern\n * @param {CanvasRenderingContext2D} ctx Context to create pattern\n * @return {CanvasPattern}\n */\n toLive(ctx: CanvasRenderingContext2D): CanvasPattern | null {\n if (\n // if the image failed to load, return, and allow rest to continue loading\n !this.source ||\n // if an image\n (this.isImageSource() &&\n (!this.source.complete ||\n this.source.naturalWidth === 0 ||\n this.source.naturalHeight === 0))\n ) {\n return null;\n }\n\n return ctx.createPattern(this.source, this.repeat)!;\n }\n\n /**\n * Returns object representation of a pattern\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {object} Object representation of a pattern instance\n */\n toObject(propertiesToInclude: string[] = []): Record {\n const { repeat, crossOrigin } = this;\n return {\n ...pick(this, propertiesToInclude as (keyof this)[]),\n type: 'pattern',\n source: this.sourceToString(),\n repeat,\n crossOrigin,\n offsetX: toFixed(this.offsetX, config.NUM_FRACTION_DIGITS),\n offsetY: toFixed(this.offsetY, config.NUM_FRACTION_DIGITS),\n patternTransform: this.patternTransform\n ? [...this.patternTransform]\n : null,\n };\n }\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of a pattern\n */\n toSVG({ width, height }: TSize): string {\n const { source: patternSource, repeat, id } = this,\n patternOffsetX = ifNaN(this.offsetX / width, 0),\n patternOffsetY = ifNaN(this.offsetY / height, 0),\n patternWidth =\n repeat === 'repeat-y' || repeat === 'no-repeat'\n ? 1 + Math.abs(patternOffsetX || 0)\n : ifNaN(\n ((patternSource as HTMLImageElement).width as number) / width,\n 0,\n ),\n patternHeight =\n repeat === 'repeat-x' || repeat === 'no-repeat'\n ? 1 + Math.abs(patternOffsetY || 0)\n : ifNaN(\n ((patternSource as HTMLImageElement).height as number) / height,\n 0,\n );\n\n return [\n ``,\n ``,\n ``,\n '',\n ].join('\\n');\n }\n /* _TO_SVG_END_ */\n\n static async fromObject(\n {\n type,\n source,\n patternTransform,\n ...otherOptions\n }: SerializedPatternOptions,\n options?: Abortable,\n ): Promise {\n const img = await loadImage(source, {\n ...options,\n crossOrigin: otherOptions.crossOrigin,\n });\n return new this({\n ...otherOptions,\n patternTransform:\n patternTransform && (patternTransform.slice(0) as TMat2D),\n source: img,\n });\n }\n}\n\nclassRegistry.setClass(Pattern);\n// kept for compatibility reason\nclassRegistry.setClass(Pattern, 'pattern');\n","import { Color } from '../color/Color';\nimport type { Point } from '../Point';\nimport type { Shadow } from '../Shadow';\nimport type { Canvas } from '../canvas/Canvas';\nimport type { TBrushEventData } from './typedefs';\n\n/**\n * @see {@link http://fabricjs.com/freedrawing|Freedrawing demo}\n */\nexport abstract class BaseBrush {\n /**\n * Color of a brush\n * @type String\n * @default\n */\n color = 'rgb(0, 0, 0)';\n\n /**\n * Width of a brush, has to be a Number, no string literals\n * @type Number\n * @default\n */\n width = 1;\n\n /**\n * Shadow object representing shadow of this shape.\n * Backwards incompatibility note: This property replaces \"shadowColor\" (String), \"shadowOffsetX\" (Number),\n * \"shadowOffsetY\" (Number) and \"shadowBlur\" (Number) since v1.2.12\n * @type Shadow\n * @default\n */\n shadow: Shadow | null = null;\n\n /**\n * Line endings style of a brush (one of \"butt\", \"round\", \"square\")\n * @type String\n * @default\n */\n strokeLineCap: CanvasLineCap = 'round';\n\n /**\n * Corner style of a brush (one of \"bevel\", \"round\", \"miter\")\n * @type String\n * @default\n */\n strokeLineJoin: CanvasLineJoin = 'round';\n\n /**\n * Maximum miter length (used for strokeLineJoin = \"miter\") of a brush's\n * @type Number\n * @default\n */\n strokeMiterLimit = 10;\n\n /**\n * Stroke Dash Array.\n * @type Array\n * @default\n */\n strokeDashArray: number[] | null = null;\n\n /**\n * When `true`, the free drawing is limited to the whiteboard size. Default to false.\n * @type Boolean\n * @default false\n */\n\n limitedToCanvasSize = false;\n\n /**\n * @todo add type\n */\n declare canvas: Canvas;\n\n constructor(canvas: Canvas) {\n this.canvas = canvas;\n }\n\n abstract _render(): void;\n abstract onMouseDown(pointer: Point, ev: TBrushEventData): void;\n abstract onMouseMove(pointer: Point, ev: TBrushEventData): void;\n /**\n * @returns true if brush should continue blocking interaction\n */\n abstract onMouseUp(ev: TBrushEventData): boolean | void;\n\n /**\n * Sets brush styles\n * @private\n * @param {CanvasRenderingContext2D} ctx\n */\n _setBrushStyles(ctx: CanvasRenderingContext2D) {\n ctx.strokeStyle = this.color;\n ctx.lineWidth = this.width;\n ctx.lineCap = this.strokeLineCap;\n ctx.miterLimit = this.strokeMiterLimit;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.setLineDash(this.strokeDashArray || []);\n }\n\n /**\n * Sets the transformation on given context\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @private\n */\n protected _saveAndTransform(ctx: CanvasRenderingContext2D) {\n const v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n }\n\n protected needsFullRender() {\n const color = new Color(this.color);\n return color.getAlpha() < 1 || !!this.shadow;\n }\n\n /**\n * Sets brush shadow styles\n * @private\n */\n protected _setShadow() {\n if (!this.shadow || !this.canvas) {\n return;\n }\n\n const canvas = this.canvas,\n shadow = this.shadow,\n ctx = canvas.contextTop,\n zoom = canvas.getZoom() * canvas.getRetinaScaling();\n\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur = shadow.blur * zoom;\n ctx.shadowOffsetX = shadow.offsetX * zoom;\n ctx.shadowOffsetY = shadow.offsetY * zoom;\n }\n\n /**\n * Removes brush shadow styles\n * @private\n */\n protected _resetShadow() {\n const ctx = this.canvas.contextTop;\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n }\n\n /**\n * Check is pointer is outside canvas boundaries\n * @param {Object} pointer\n * @private\n */\n protected _isOutSideCanvas(pointer: Point) {\n return (\n pointer.x < 0 ||\n pointer.x > this.canvas.getWidth() ||\n pointer.y < 0 ||\n pointer.y > this.canvas.getHeight()\n );\n }\n}\n","import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { toFixed } from '../util/misc/toFixed';\nimport {\n getBoundsOfCurve,\n joinPath,\n makePathSimpler,\n parsePath,\n} from '../util/path';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type {\n TComplexPathData,\n TPathSegmentInfo,\n TSimplePathData,\n} from '../util/path/typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type {\n TBBox,\n TClassProperties,\n TSVGReviver,\n TOptions,\n} from '../typedefs';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\ninterface UniquePathProps {\n sourcePath?: string;\n path?: TSimplePathData;\n}\n\nexport interface SerializedPathProps\n extends SerializedObjectProps,\n UniquePathProps {}\n\nexport interface PathProps extends FabricObjectProps, UniquePathProps {}\n\nexport interface IPathBBox extends TBBox {\n left: number;\n top: number;\n pathOffset: Point;\n}\n\nexport class Path<\n Props extends TOptions = Partial,\n SProps extends SerializedPathProps = SerializedPathProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject {\n /**\n * Array of path points\n * @type Array\n * @default\n */\n declare path: TSimplePathData;\n\n declare pathOffset: Point;\n\n declare sourcePath?: string;\n\n declare segmentsInfo?: TPathSegmentInfo[];\n\n static type = 'Path';\n\n static cacheProperties = [...cacheProperties, 'path', 'fillRule'];\n\n /**\n * Constructor\n * @param {TComplexPathData} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {Partial} [options] Options object\n * @return {Path} thisArg\n */\n constructor(\n path: TComplexPathData | string,\n // todo: evaluate this spread here\n { path: _, left, top, ...options }: Partial = {},\n ) {\n super();\n Object.assign(this, Path.ownDefaults);\n this.setOptions(options);\n this._setPath(path || [], true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n /**\n * @private\n * @param {TComplexPathData | string} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {boolean} [adjustPosition] pass true to reposition the object according to the bounding box\n * @returns {Point} top left position of the bounding box, useful for complementary positioning\n */\n _setPath(path: TComplexPathData | string, adjustPosition?: boolean) {\n this.path = makePathSimpler(Array.isArray(path) ? path : parsePath(path));\n this.setBoundingBox(adjustPosition);\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = this._calcBoundsFromPath();\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _renderPathCommands(ctx: CanvasRenderingContext2D) {\n const l = -this.pathOffset.x,\n t = -this.pathOffset.y;\n\n ctx.beginPath();\n\n for (const command of this.path) {\n switch (\n command[0] // first letter\n ) {\n case 'L': // lineto, absolute\n ctx.lineTo(command[1] + l, command[2] + t);\n break;\n\n case 'M': // moveTo, absolute\n ctx.moveTo(command[1] + l, command[2] + t);\n break;\n\n case 'C': // bezierCurveTo, absolute\n ctx.bezierCurveTo(\n command[1] + l,\n command[2] + t,\n command[3] + l,\n command[4] + t,\n command[5] + l,\n command[6] + t,\n );\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n ctx.quadraticCurveTo(\n command[1] + l,\n command[2] + t,\n command[3] + l,\n command[4] + t,\n );\n break;\n\n case 'Z':\n ctx.closePath();\n break;\n }\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _render(ctx: CanvasRenderingContext2D) {\n this._renderPathCommands(ctx);\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns string representation of an instance\n * @return {string} string representation of an instance\n */\n toString() {\n return `#`;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n path: this.path.map((pathCmd) => pathCmd.slice()),\n };\n }\n\n /**\n * Returns dataless object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n const o = this.toObject(propertiesToInclude);\n if (this.sourcePath) {\n delete o.path;\n o.sourcePath = this.sourcePath;\n }\n return o;\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const path = joinPath(this.path, config.NUM_FRACTION_DIGITS);\n return [\n '\\n`,\n ];\n }\n\n /**\n * @private\n * @return the path command's translate transform attribute\n */\n _getOffsetTransform() {\n const digits = config.NUM_FRACTION_DIGITS;\n return ` translate(${toFixed(-this.pathOffset.x, digits)}, ${toFixed(\n -this.pathOffset.y,\n digits,\n )})`;\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {string} svg representation of an instance\n */\n toClipPathSVG(reviver?: TSVGReviver): string {\n const additionalTransform = this._getOffsetTransform();\n return (\n '\\t' +\n this._createBaseClipPathSVGMarkup(this._toSVG(), {\n reviver,\n additionalTransform: additionalTransform,\n })\n );\n }\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {string} svg representation of an instance\n */\n toSVG(reviver?: TSVGReviver): string {\n const additionalTransform = this._getOffsetTransform();\n return this._createBaseSVGMarkup(this._toSVG(), {\n reviver,\n additionalTransform: additionalTransform,\n });\n }\n\n /**\n * Returns number representation of an instance complexity\n * @return {number} complexity of this instance\n */\n complexity() {\n return this.path.length;\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { width, height, pathOffset } = this._calcDimensions();\n this.set({ width, height, pathOffset });\n // using pathOffset because it match the use case.\n // if pathOffset change here we need to use left + width/2 , top + height/2\n adjustPosition && this.setPositionByOrigin(pathOffset, CENTER, CENTER);\n }\n\n _calcBoundsFromPath(): TBBox {\n const bounds: XY[] = [];\n let subpathStartX = 0,\n subpathStartY = 0,\n x = 0, // current x\n y = 0; // current y\n\n for (const command of this.path) {\n // current instruction\n switch (\n command[0] // first letter\n ) {\n case 'L': // lineto, absolute\n x = command[1];\n y = command[2];\n bounds.push({ x: subpathStartX, y: subpathStartY }, { x, y });\n break;\n\n case 'M': // moveTo, absolute\n x = command[1];\n y = command[2];\n subpathStartX = x;\n subpathStartY = y;\n break;\n\n case 'C': // bezierCurveTo, absolute\n bounds.push(\n ...getBoundsOfCurve(\n x,\n y,\n command[1],\n command[2],\n command[3],\n command[4],\n command[5],\n command[6],\n ),\n );\n x = command[5];\n y = command[6];\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n bounds.push(\n ...getBoundsOfCurve(\n x,\n y,\n command[1],\n command[2],\n command[1],\n command[2],\n command[3],\n command[4],\n ),\n );\n x = command[3];\n y = command[4];\n break;\n\n case 'Z':\n x = subpathStartX;\n y = subpathStartY;\n break;\n }\n }\n return makeBoundingBoxFromPoints(bounds);\n }\n\n /**\n * @private\n */\n _calcDimensions(): IPathBBox {\n const bbox = this._calcBoundsFromPath();\n\n return {\n ...bbox,\n pathOffset: new Point(\n bbox.left + bbox.width / 2,\n bbox.top + bbox.height / 2,\n ),\n };\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `Path.fromElement`)\n * @static\n * @memberOf Path\n * @see http://www.w3.org/TR/SVG/paths.html#PathElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'd'];\n\n /**\n * Creates an instance of Path from an object\n * @static\n * @memberOf Path\n * @param {Object} object\n * @returns {Promise}\n */\n static fromObject>(object: T) {\n return this._fromObject(object, {\n extraParam: 'path',\n });\n }\n\n /**\n * Creates an instance of Path from an SVG element\n * @static\n * @memberOf Path\n * @param {HTMLElement} element to parse\n * @param {Partial} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Partial,\n cssRules?: CSSRules,\n ) {\n const { d, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(d, {\n ...parsedAttributes,\n ...options,\n // we pass undefined to instruct the constructor to position the object using the bbox\n left: undefined,\n top: undefined,\n });\n }\n}\n\nclassRegistry.setClass(Path);\nclassRegistry.setSVGClass(Path);\n\n/* _FROM_SVG_START_ */\n","import type { ModifierKey, TEvent } from '../EventTypeDefs';\nimport type { Point } from '../Point';\nimport { Shadow } from '../Shadow';\nimport { Path } from '../shapes/Path';\nimport { getSmoothPathFromPoints, joinPath } from '../util/path';\nimport type { Canvas } from '../canvas/Canvas';\nimport { BaseBrush } from './BaseBrush';\nimport type { TSimplePathData } from '../util/path/typedefs';\n\n/**\n * @private\n * @param {TSimplePathData} pathData SVG path commands\n * @returns {boolean}\n */\nfunction isEmptySVGPath(pathData: TSimplePathData): boolean {\n return joinPath(pathData) === 'M 0 0 Q 0 0 0 0 L 0 0';\n}\n\nexport class PencilBrush extends BaseBrush {\n /**\n * Discard points that are less than `decimate` pixel distant from each other\n * @type Number\n * @default 0.4\n */\n decimate = 0.4;\n\n /**\n * Draws a straight line between last recorded point to current pointer\n * Used for `shift` functionality\n *\n * @type boolean\n * @default false\n */\n drawStraightLine = false;\n\n /**\n * The event modifier key that makes the brush draw a straight line.\n * If `null` or 'none' or any other string that is not a modifier key the feature is disabled.\n * @type {ModifierKey | undefined | null}\n */\n straightLineKey: ModifierKey | undefined | null = 'shiftKey';\n\n private declare _points: Point[];\n private declare _hasStraightLine: boolean;\n private declare oldEnd?: Point;\n\n constructor(canvas: Canvas) {\n super(canvas);\n this._points = [];\n this._hasStraightLine = false;\n }\n\n needsFullRender() {\n return super.needsFullRender() || this._hasStraightLine;\n }\n\n static drawSegment(ctx: CanvasRenderingContext2D, p1: Point, p2: Point) {\n const midPoint = p1.midPointFrom(p2);\n ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n return midPoint;\n }\n\n /**\n * Invoked on mouse down\n * @param {Point} pointer\n */\n onMouseDown(pointer: Point, { e }: TEvent) {\n if (!this.canvas._isMainEvent(e)) {\n return;\n }\n this.drawStraightLine = !!this.straightLineKey && e[this.straightLineKey];\n this._prepareForDrawing(pointer);\n // capture coordinates immediately\n // this allows to draw dots (when movement never occurs)\n this._addPoint(pointer);\n this._render();\n }\n\n /**\n * Invoked on mouse move\n * @param {Point} pointer\n */\n onMouseMove(pointer: Point, { e }: TEvent) {\n if (!this.canvas._isMainEvent(e)) {\n return;\n }\n this.drawStraightLine = !!this.straightLineKey && e[this.straightLineKey];\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n if (this._addPoint(pointer) && this._points.length > 1) {\n if (this.needsFullRender()) {\n // redraw curve\n // clear top canvas\n this.canvas.clearContext(this.canvas.contextTop);\n this._render();\n } else {\n const points = this._points,\n length = points.length,\n ctx = this.canvas.contextTop;\n // draw the curve update\n this._saveAndTransform(ctx);\n if (this.oldEnd) {\n ctx.beginPath();\n ctx.moveTo(this.oldEnd.x, this.oldEnd.y);\n }\n this.oldEnd = PencilBrush.drawSegment(\n ctx,\n points[length - 2],\n points[length - 1],\n );\n ctx.stroke();\n ctx.restore();\n }\n }\n }\n\n /**\n * Invoked on mouse up\n */\n onMouseUp({ e }: TEvent) {\n if (!this.canvas._isMainEvent(e)) {\n return true;\n }\n this.drawStraightLine = false;\n this.oldEnd = undefined;\n this._finalizeAndAddPath();\n return false;\n }\n\n /**\n * @private\n * @param {Point} pointer Actual mouse position related to the canvas.\n */\n _prepareForDrawing(pointer: Point) {\n this._reset();\n this._addPoint(pointer);\n this.canvas.contextTop.moveTo(pointer.x, pointer.y);\n }\n\n /**\n * @private\n * @param {Point} point Point to be added to points array\n */\n _addPoint(point: Point) {\n if (\n this._points.length > 1 &&\n point.eq(this._points[this._points.length - 1])\n ) {\n return false;\n }\n if (this.drawStraightLine && this._points.length > 1) {\n this._hasStraightLine = true;\n this._points.pop();\n }\n this._points.push(point);\n return true;\n }\n\n /**\n * Clear points array and set contextTop canvas style.\n * @private\n */\n _reset() {\n this._points = [];\n this._setBrushStyles(this.canvas.contextTop);\n this._setShadow();\n this._hasStraightLine = false;\n }\n\n /**\n * Draw a smooth path on the topCanvas using quadraticCurveTo\n * @private\n * @param {CanvasRenderingContext2D} [ctx]\n */\n _render(ctx: CanvasRenderingContext2D = this.canvas.contextTop) {\n let p1 = this._points[0],\n p2 = this._points[1];\n this._saveAndTransform(ctx);\n ctx.beginPath();\n //if we only have 2 points in the path and they are the same\n //it means that the user only clicked the canvas without moving the mouse\n //then we should be drawing a dot. A path isn't drawn between two identical dots\n //that's why we set them apart a bit\n if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) {\n const width = this.width / 1000;\n p1.x -= width;\n p2.x += width;\n }\n ctx.moveTo(p1.x, p1.y);\n\n for (let i = 1; i < this._points.length; i++) {\n // we pick the point between pi + 1 & pi + 2 as the\n // end point and p1 as our control point.\n PencilBrush.drawSegment(ctx, p1, p2);\n p1 = this._points[i];\n p2 = this._points[i + 1];\n }\n // Draw last line as a straight line while\n // we wait for the next point to be able to calculate\n // the bezier control point\n ctx.lineTo(p1.x, p1.y);\n ctx.stroke();\n ctx.restore();\n }\n\n /**\n * Converts points to SVG path\n * @param {Point[]} points Array of points\n * @return {TSimplePathData} SVG path commands\n */\n convertPointsToSVGPath(points: Point[]): TSimplePathData {\n const correction = this.width / 1000;\n return getSmoothPathFromPoints(points, correction);\n }\n\n /**\n * Creates a Path object to add on canvas\n * @param {TSimplePathData} pathData Path data\n * @return {Path} Path to add on canvas\n */\n createPath(pathData: TSimplePathData): Path {\n const path = new Path(pathData, {\n fill: null,\n stroke: this.color,\n strokeWidth: this.width,\n strokeLineCap: this.strokeLineCap,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeLineJoin: this.strokeLineJoin,\n strokeDashArray: this.strokeDashArray,\n });\n if (this.shadow) {\n this.shadow.affectStroke = true;\n path.shadow = new Shadow(this.shadow);\n }\n\n return path;\n }\n\n /**\n * Decimate points array with the decimate value\n */\n decimatePoints(points: Point[], distance: number) {\n if (points.length <= 2) {\n return points;\n }\n let lastPoint = points[0],\n cDistance;\n const zoom = this.canvas.getZoom(),\n adjustedDistance = Math.pow(distance / zoom, 2),\n l = points.length - 1,\n newPoints = [lastPoint];\n for (let i = 1; i < l - 1; i++) {\n cDistance =\n Math.pow(lastPoint.x - points[i].x, 2) +\n Math.pow(lastPoint.y - points[i].y, 2);\n if (cDistance >= adjustedDistance) {\n lastPoint = points[i];\n newPoints.push(lastPoint);\n }\n }\n // Add the last point from the original line to the end of the array.\n // This ensures decimate doesn't delete the last point on the line, and ensures the line is > 1 point.\n newPoints.push(points[l]);\n return newPoints;\n }\n\n /**\n * On mouseup after drawing the path on contextTop canvas\n * we use the points captured to create an new Path object\n * and add it to the canvas.\n */\n _finalizeAndAddPath() {\n const ctx = this.canvas.contextTop;\n ctx.closePath();\n if (this.decimate) {\n this._points = this.decimatePoints(this._points, this.decimate);\n }\n const pathData = this.convertPointsToSVGPath(this._points);\n if (isEmptySVGPath(pathData)) {\n // do not create 0 width/height paths, as they are\n // rendered inconsistently across browsers\n // Firefox 4, for example, renders a dot,\n // whereas Chrome 10 renders nothing\n this.canvas.requestRenderAll();\n return;\n }\n\n const path = this.createPath(pathData);\n this.canvas.clearContext(this.canvas.contextTop);\n this.canvas.fire('before:path:created', { path: path });\n this.canvas.add(path);\n this.canvas.requestRenderAll();\n path.setCoords();\n this._resetShadow();\n\n // fire event 'path' created\n this.canvas.fire('path:created', { path: path });\n }\n}\n","import type { ObjectEvents } from '../EventTypeDefs';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { cos } from '../util/misc/cos';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { sin } from '../util/misc/sin';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { CSSRules } from '../parser/typedefs';\nimport { SCALE_X, SCALE_Y } from '../constants';\n\ninterface UniqueCircleProps {\n /**\n * Radius of this circle\n * @type Number\n * @default 0\n */\n radius: number;\n\n /**\n * Angle for the start of the circle, in degrees.\n * @type TDegree 0 - 359\n * @default 0\n */\n startAngle: number;\n\n /**\n * Angle for the end of the circle, in degrees\n * @type TDegree 1 - 360\n * @default 360\n */\n endAngle: number;\n\n /**\n * Orientation for the direction of the circle.\n * Setting to true will switch the arc of the circle to traverse from startAngle to endAngle in a counter-clockwise direction.\n * Note: this will only change how the circle is drawn, and does not affect rotational transformation.\n * @default false\n */\n counterClockwise: boolean;\n}\n\nexport interface SerializedCircleProps\n extends SerializedObjectProps,\n UniqueCircleProps {}\n\nexport interface CircleProps extends FabricObjectProps, UniqueCircleProps {}\n\nconst CIRCLE_PROPS = [\n 'radius',\n 'startAngle',\n 'endAngle',\n 'counterClockwise',\n] as const;\n\nexport const circleDefaultValues: Partial> = {\n radius: 0,\n startAngle: 0,\n endAngle: 360,\n counterClockwise: false,\n};\n\nexport class Circle<\n Props extends TOptions = Partial,\n SProps extends SerializedCircleProps = SerializedCircleProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements UniqueCircleProps\n{\n declare radius: number;\n declare startAngle: number;\n declare endAngle: number;\n declare counterClockwise: boolean;\n\n static type = 'Circle';\n\n static cacheProperties = [...cacheProperties, ...CIRCLE_PROPS];\n\n static ownDefaults = circleDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Circle.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Circle.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n super._set(key, value);\n\n if (key === 'radius') {\n this.setRadius(value);\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n ctx.arc(\n 0,\n 0,\n this.radius,\n degreesToRadians(this.startAngle),\n degreesToRadians(this.endAngle),\n this.counterClockwise,\n );\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusX(): number {\n return this.get('radius') * this.get(SCALE_X);\n }\n\n /**\n * Returns vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusY(): number {\n return this.get('radius') * this.get(SCALE_Y);\n }\n\n /**\n * Sets radius of an object (and updates width accordingly)\n */\n setRadius(value: number) {\n this.radius = value;\n this.set({ width: value * 2, height: value * 2 });\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([...CIRCLE_PROPS, ...propertiesToInclude]);\n }\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG(): string[] {\n const angle = (this.endAngle - this.startAngle) % 360;\n\n if (angle === 0) {\n return [\n '\\n',\n ];\n } else {\n const { radius } = this;\n const start = degreesToRadians(this.startAngle),\n end = degreesToRadians(this.endAngle),\n startX = cos(start) * radius,\n startY = sin(start) * radius,\n endX = cos(end) * radius,\n endY = sin(end) * radius,\n largeFlag = angle > 180 ? 1 : 0,\n sweepFlag = this.counterClockwise ? 0 : 1;\n return [\n `\\n',\n ];\n }\n }\n /* _TO_SVG_END_ */\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Circle.fromElement})\n * @static\n * @memberOf Circle\n * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement\n */\n static ATTRIBUTE_NAMES = ['cx', 'cy', 'r', ...SHARED_ATTRIBUTES];\n\n /**\n * Returns {@link Circle} instance from an SVG element\n * @static\n * @memberOf Circle\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Partial Circle object to default missing properties on the element.\n * @throws {Error} If value of `r` attribute is missing or invalid\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ): Promise {\n const {\n left = 0,\n top = 0,\n radius = 0,\n ...otherParsedAttributes\n } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n ) as Partial;\n\n // this probably requires to be fixed for default origins not being top/left.\n\n return new this({\n ...otherParsedAttributes,\n radius,\n left: left - radius,\n top: top - radius,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * @todo how do we declare this??\n */\n static fromObject>(object: T) {\n return super._fromObject(object);\n }\n}\n\nclassRegistry.setClass(Circle);\nclassRegistry.setSVGClass(Circle);\n","import { Color } from '../color/Color';\nimport type { Point } from '../Point';\nimport { Shadow } from '../Shadow';\nimport { Circle } from '../shapes/Circle';\nimport { Group } from '../shapes/Group';\nimport { getRandomInt } from '../util/internals/getRandomInt';\nimport type { Canvas } from '../canvas/Canvas';\nimport { BaseBrush } from './BaseBrush';\nimport type { CircleBrushPoint } from './typedefs';\nimport { CENTER } from '../constants';\n\nexport class CircleBrush extends BaseBrush {\n /**\n * Width of a brush\n * @type Number\n * @default\n */\n width = 10;\n\n declare points: CircleBrushPoint[];\n\n constructor(canvas: Canvas) {\n super(canvas);\n this.points = [];\n }\n\n /**\n * Invoked inside on mouse down and mouse move\n * @param {Point} pointer\n */\n drawDot(pointer: Point) {\n const point = this.addPoint(pointer),\n ctx = this.canvas.contextTop;\n this._saveAndTransform(ctx);\n this.dot(ctx, point);\n ctx.restore();\n }\n\n dot(ctx: CanvasRenderingContext2D, point: CircleBrushPoint) {\n ctx.fillStyle = point.fill;\n ctx.beginPath();\n ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n }\n\n /**\n * Invoked on mouse down\n */\n onMouseDown(pointer: Point) {\n this.points = [];\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n this.drawDot(pointer);\n }\n\n /**\n * Render the full state of the brush\n * @private\n */\n _render() {\n const ctx = this.canvas.contextTop,\n points = this.points;\n this._saveAndTransform(ctx);\n for (let i = 0; i < points.length; i++) {\n this.dot(ctx, points[i]);\n }\n ctx.restore();\n }\n\n /**\n * Invoked on mouse move\n * @param {Point} pointer\n */\n onMouseMove(pointer: Point) {\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n if (this.needsFullRender()) {\n this.canvas.clearContext(this.canvas.contextTop);\n this.addPoint(pointer);\n this._render();\n } else {\n this.drawDot(pointer);\n }\n }\n\n /**\n * Invoked on mouse up\n */\n onMouseUp() {\n const originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\n this.canvas.renderOnAddRemove = false;\n\n const circles: Circle[] = [];\n\n for (let i = 0; i < this.points.length; i++) {\n const point = this.points[i],\n circle = new Circle({\n radius: point.radius,\n left: point.x,\n top: point.y,\n originX: CENTER,\n originY: CENTER,\n fill: point.fill,\n });\n\n this.shadow && (circle.shadow = new Shadow(this.shadow));\n\n circles.push(circle);\n }\n const group = new Group(circles, { canvas: this.canvas });\n\n this.canvas.fire('before:path:created', { path: group });\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n }\n\n /**\n * @param {Object} pointer\n * @return {Point} Just added pointer point\n */\n addPoint({ x, y }: Point) {\n const pointerPoint: CircleBrushPoint = {\n x,\n y,\n radius: getRandomInt(Math.max(0, this.width - 20), this.width + 20) / 2,\n fill: new Color(this.color).setAlpha(getRandomInt(0, 100) / 100).toRgba(),\n };\n\n this.points.push(pointerPoint);\n\n return pointerPoint;\n }\n}\n","import type { Point } from '../Point';\nimport { Group } from '../shapes/Group';\nimport { Shadow } from '../Shadow';\nimport { Rect } from '../shapes/Rect';\nimport { getRandomInt } from '../util/internals/getRandomInt';\nimport type { Canvas } from '../canvas/Canvas';\nimport { BaseBrush } from './BaseBrush';\nimport type { SprayBrushPoint } from './typedefs';\nimport { CENTER } from '../constants';\n\n/**\n *\n * @param rects\n * @returns\n */\nfunction getUniqueRects(rects: Rect[]) {\n const uniqueRects: Record = {};\n const uniqueRectsArray: Rect[] = [];\n\n for (let i = 0, key: string; i < rects.length; i++) {\n key = `${rects[i].left}${rects[i].top}`;\n if (!uniqueRects[key]) {\n uniqueRects[key] = true;\n uniqueRectsArray.push(rects[i]);\n }\n }\n\n return uniqueRectsArray;\n}\n\nexport class SprayBrush extends BaseBrush {\n /**\n * Width of a spray\n * @type Number\n * @default\n */\n width = 10;\n\n /**\n * Density of a spray (number of dots per chunk)\n * @type Number\n * @default\n */\n density = 20;\n\n /**\n * Width of spray dots\n * @type Number\n * @default\n */\n dotWidth = 1;\n\n /**\n * Width variance of spray dots\n * @type Number\n * @default\n */\n dotWidthVariance = 1;\n\n /**\n * Whether opacity of a dot should be random\n * @type Boolean\n * @default\n */\n randomOpacity = false;\n\n /**\n * Whether overlapping dots (rectangles) should be removed (for performance reasons)\n * @type Boolean\n * @default\n */\n optimizeOverlapping = true;\n\n private declare sprayChunks: SprayBrushPoint[][];\n\n private declare sprayChunk: SprayBrushPoint[];\n\n /**\n * Constructor\n * @param {Canvas} canvas\n * @return {SprayBrush} Instance of a spray brush\n */\n constructor(canvas: Canvas) {\n super(canvas);\n this.sprayChunks = [];\n this.sprayChunk = [];\n }\n\n /**\n * Invoked on mouse down\n * @param {Point} pointer\n */\n onMouseDown(pointer: Point) {\n this.sprayChunks = [];\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n\n this.addSprayChunk(pointer);\n this.renderChunck(this.sprayChunk);\n }\n\n /**\n * Invoked on mouse move\n * @param {Point} pointer\n */\n onMouseMove(pointer: Point) {\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n this.addSprayChunk(pointer);\n this.renderChunck(this.sprayChunk);\n }\n\n /**\n * Invoked on mouse up\n */\n onMouseUp() {\n const originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\n this.canvas.renderOnAddRemove = false;\n\n const rects: Rect[] = [];\n\n for (let i = 0; i < this.sprayChunks.length; i++) {\n const sprayChunk = this.sprayChunks[i];\n for (let j = 0; j < sprayChunk.length; j++) {\n const chunck = sprayChunk[j];\n const rect = new Rect({\n width: chunck.width,\n height: chunck.width,\n left: chunck.x + 1,\n top: chunck.y + 1,\n originX: CENTER,\n originY: CENTER,\n fill: this.color,\n });\n rects.push(rect);\n }\n }\n\n const group = new Group(\n this.optimizeOverlapping ? getUniqueRects(rects) : rects,\n {\n objectCaching: true,\n subTargetCheck: false,\n interactive: false,\n },\n );\n this.shadow && group.set('shadow', new Shadow(this.shadow));\n this.canvas.fire('before:path:created', { path: group });\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n }\n\n renderChunck(sprayChunck: SprayBrushPoint[]) {\n const ctx = this.canvas.contextTop;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (let i = 0; i < sprayChunck.length; i++) {\n const point = sprayChunck[i];\n ctx.globalAlpha = point.opacity;\n ctx.fillRect(point.x, point.y, point.width, point.width);\n }\n\n ctx.restore();\n }\n\n /**\n * Render all spray chunks\n */\n _render() {\n const ctx = this.canvas.contextTop;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (let i = 0; i < this.sprayChunks.length; i++) {\n this.renderChunck(this.sprayChunks[i]);\n }\n ctx.restore();\n }\n\n /**\n * @param {Point} pointer\n */\n addSprayChunk(pointer: Point) {\n this.sprayChunk = [];\n const radius = this.width / 2;\n\n for (let i = 0; i < this.density; i++) {\n this.sprayChunk.push({\n x: getRandomInt(pointer.x - radius, pointer.x + radius),\n y: getRandomInt(pointer.y - radius, pointer.y + radius),\n width: this.dotWidthVariance\n ? getRandomInt(\n // bottom clamp width to 1\n Math.max(1, this.dotWidth - this.dotWidthVariance),\n this.dotWidth + this.dotWidthVariance,\n )\n : this.dotWidth,\n opacity: this.randomOpacity ? getRandomInt(0, 100) / 100 : 1,\n });\n }\n\n this.sprayChunks.push(this.sprayChunk);\n }\n}\n","import { Pattern } from '../Pattern';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type { Canvas } from '../canvas/Canvas';\nimport { PencilBrush } from './PencilBrush';\nimport type { TSimplePathData } from '../util/path/typedefs';\n\nexport class PatternBrush extends PencilBrush {\n declare source?: CanvasImageSource;\n\n constructor(canvas: Canvas) {\n super(canvas);\n }\n\n getPatternSrc() {\n const dotWidth = 20,\n dotDistance = 5,\n patternCanvas = createCanvasElement(),\n patternCtx = patternCanvas.getContext('2d');\n\n patternCanvas.width = patternCanvas.height = dotWidth + dotDistance;\n if (patternCtx) {\n patternCtx.fillStyle = this.color;\n patternCtx.beginPath();\n patternCtx.arc(\n dotWidth / 2,\n dotWidth / 2,\n dotWidth / 2,\n 0,\n Math.PI * 2,\n false,\n );\n patternCtx.closePath();\n patternCtx.fill();\n }\n return patternCanvas;\n }\n\n /**\n * Creates \"pattern\" instance property\n * @param {CanvasRenderingContext2D} ctx\n */\n getPattern(ctx: CanvasRenderingContext2D) {\n return ctx.createPattern(this.source || this.getPatternSrc(), 'repeat');\n }\n\n /**\n * Sets brush styles\n * @param {CanvasRenderingContext2D} ctx\n */\n _setBrushStyles(ctx: CanvasRenderingContext2D) {\n super._setBrushStyles(ctx);\n const pattern = this.getPattern(ctx);\n pattern && (ctx.strokeStyle = pattern);\n }\n\n /**\n * Creates path\n */\n createPath(pathData: TSimplePathData) {\n const path = super.createPath(pathData),\n topLeft = path._getLeftTopCoords().scalarAdd(path.strokeWidth / 2);\n\n path.stroke = new Pattern({\n source: this.source || this.getPatternSrc(),\n offsetX: -topLeft.x,\n offsetY: -topLeft.y,\n });\n return path;\n }\n}\n","import { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport { Point } from '../Point';\nimport { isFiller } from '../util/typeAssertions';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { makeBoundingBoxFromPoints } from '../util';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\n// @TODO this code is terrible and Line should be a special case of polyline.\n\nconst coordProps = ['x1', 'x2', 'y1', 'y2'] as const;\n\ninterface UniqueLineProps {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport interface SerializedLineProps\n extends SerializedObjectProps,\n UniqueLineProps {}\n\nexport class Line<\n Props extends TOptions = Partial,\n SProps extends SerializedLineProps = SerializedLineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements UniqueLineProps\n{\n /**\n * x value or first line edge\n * @type number\n * @default\n */\n declare x1: number;\n\n /**\n * y value or first line edge\n * @type number\n * @default\n */\n declare y1: number;\n\n /**\n * x value or second line edge\n * @type number\n * @default\n */\n declare x2: number;\n\n /**\n * y value or second line edge\n * @type number\n * @default\n */\n declare y2: number;\n\n static type = 'Line';\n\n static cacheProperties = [...cacheProperties, ...coordProps];\n /**\n * Constructor\n * @param {Array} [points] Array of points\n * @param {Object} [options] Options object\n * @return {Line} thisArg\n */\n constructor([x1, y1, x2, y2] = [0, 0, 0, 0], options: Partial = {}) {\n super();\n Object.assign(this, Line.ownDefaults);\n this.setOptions(options);\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\n this._setWidthHeight();\n const { left, top } = options;\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n /**\n * @private\n * @param {Object} [options] Options\n */\n _setWidthHeight() {\n const { x1, y1, x2, y2 } = this;\n this.width = Math.abs(x2 - x1);\n this.height = Math.abs(y2 - y1);\n const { left, top, width, height } = makeBoundingBoxFromPoints([\n { x: x1, y: y1 },\n { x: x2, y: y2 },\n ]);\n const position = new Point(left + width / 2, top + height / 2);\n this.setPositionByOrigin(position, CENTER, CENTER);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n super._set(key, value);\n if (coordProps.includes(key as keyof UniqueLineProps)) {\n // this doesn't make sense very much, since setting x1 when top or left\n // are already set, is just going to show a strange result since the\n // line will move way more than the developer expect.\n // in fabric5 it worked only when the line didn't have extra transformations,\n // in fabric6 too. With extra transform they behave bad in different ways.\n // This needs probably a good rework or a tutorial if you have to create a dynamic line\n this._setWidthHeight();\n }\n return this;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n\n const p = this.calcLinePoints();\n ctx.moveTo(p.x1, p.y1);\n ctx.lineTo(p.x2, p.y2);\n\n ctx.lineWidth = this.strokeWidth;\n\n // TODO: test this\n // make sure setting \"fill\" changes color of a line\n // (by copying fillStyle to strokeStyle, since line is stroked, not filled)\n const origStrokeStyle = ctx.strokeStyle;\n if (isFiller(this.stroke)) {\n ctx.strokeStyle = this.stroke.toLive(ctx)!;\n } else {\n ctx.strokeStyle = this.stroke ?? ctx.fillStyle;\n }\n this.stroke && this._renderStroke(ctx);\n ctx.strokeStyle = origStrokeStyle;\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n return new Point((this.x1 + this.x2) / 2, (this.y1 + this.y2) / 2);\n }\n\n /**\n * Returns object representation of an instance\n * @method toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n ...this.calcLinePoints(),\n };\n }\n\n /*\n * Calculate object dimensions from its properties\n * @private\n */\n _getNonTransformedDimensions(): Point {\n const dim = super._getNonTransformedDimensions();\n if (this.strokeLineCap === 'butt') {\n if (this.width === 0) {\n dim.y -= this.strokeWidth;\n }\n if (this.height === 0) {\n dim.x -= this.strokeWidth;\n }\n }\n return dim;\n }\n\n /**\n * Recalculates line points given width and height\n * Those points are simply placed around the center,\n * This is not useful outside internal render functions and svg output\n * Is not meant to be for the developer.\n * @private\n */\n calcLinePoints(): UniqueLineProps {\n const { x1: _x1, x2: _x2, y1: _y1, y2: _y2, width, height } = this;\n const xMult = _x1 <= _x2 ? -1 : 1,\n yMult = _y1 <= _y2 ? -1 : 1,\n x1 = (xMult * width) / 2,\n y1 = (yMult * height) / 2,\n x2 = (xMult * -width) / 2,\n y2 = (yMult * -height) / 2;\n\n return {\n x1,\n x2,\n y1,\n y2,\n };\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const { x1, x2, y1, y2 } = this.calcLinePoints();\n return [\n '\\n`,\n ];\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Line.fromElement})\n * @static\n * @memberOf Line\n * @see http://www.w3.org/TR/SVG/shapes.html#LineElement\n */\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(coordProps);\n\n /**\n * Returns Line instance from an SVG element\n * @static\n * @memberOf Line\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {Function} [callback] callback function invoked after parsing\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const {\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n ...parsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n return new this([x1, y1, x2, y2], parsedAttributes);\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Line instance from an object representation\n * @static\n * @memberOf Line\n * @param {Object} object Object to create an instance from\n * @returns {Promise}\n */\n static fromObject>({\n x1,\n y1,\n x2,\n y2,\n ...object\n }: T) {\n return this._fromObject(\n {\n ...object,\n points: [x1, y1, x2, y2],\n },\n {\n extraParam: 'points',\n },\n );\n }\n}\n\nclassRegistry.setClass(Line);\nclassRegistry.setSVGClass(Line);\n","import { classRegistry } from '../ClassRegistry';\nimport { FabricObject } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { TClassProperties, TOptions } from '../typedefs';\nimport type { ObjectEvents } from '../EventTypeDefs';\n\nexport const triangleDefaultValues: Partial> = {\n width: 100,\n height: 100,\n};\n\nexport class Triangle<\n Props extends TOptions = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements FabricObjectProps\n{\n static type = 'Triangle';\n\n static ownDefaults = triangleDefaultValues;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...Triangle.ownDefaults };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Triangle.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const widthBy2 = this.width / 2,\n heightBy2 = this.height / 2;\n\n ctx.beginPath();\n ctx.moveTo(-widthBy2, heightBy2);\n ctx.lineTo(0, -heightBy2);\n ctx.lineTo(widthBy2, heightBy2);\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const widthBy2 = this.width / 2,\n heightBy2 = this.height / 2,\n points = `${-widthBy2} ${heightBy2},0 ${-heightBy2},${widthBy2} ${heightBy2}`;\n return [''];\n }\n}\n\nclassRegistry.setClass(Triangle);\nclassRegistry.setSVGClass(Triangle);\n","import { SCALE_X, SCALE_Y, twoMathPi } from '../constants';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const ellipseDefaultValues: Partial> = {\n rx: 0,\n ry: 0,\n};\n\ninterface UniqueEllipseProps {\n rx: number;\n ry: number;\n}\n\nexport interface SerializedEllipseProps\n extends SerializedObjectProps,\n UniqueEllipseProps {}\n\nexport interface EllipseProps extends FabricObjectProps, UniqueEllipseProps {}\n\nconst ELLIPSE_PROPS = ['rx', 'ry'] as const;\n\nexport class Ellipse<\n Props extends TOptions = Partial,\n SProps extends SerializedEllipseProps = SerializedEllipseProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements EllipseProps\n{\n /**\n * Horizontal radius\n * @type Number\n * @default\n */\n declare rx: number;\n\n /**\n * Vertical radius\n * @type Number\n * @default\n */\n declare ry: number;\n\n static type = 'Ellipse';\n\n static cacheProperties = [...cacheProperties, ...ELLIPSE_PROPS];\n\n static ownDefaults = ellipseDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Ellipse.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Ellipse.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {Ellipse} thisArg\n */\n _set(key: string, value: any) {\n super._set(key, value);\n switch (key) {\n case 'rx':\n this.rx = value;\n this.set('width', value * 2);\n break;\n\n case 'ry':\n this.ry = value;\n this.set('height', value * 2);\n break;\n }\n return this;\n }\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRx() {\n return this.get('rx') * this.get(SCALE_X);\n }\n\n /**\n * Returns Vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRy() {\n return this.get('ry') * this.get(SCALE_Y);\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([...ELLIPSE_PROPS, ...propertiesToInclude]);\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG(): string[] {\n return [\n '\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n ctx.save();\n ctx.transform(1, 0, 0, this.ry / this.rx, 0, 0);\n ctx.arc(0, 0, this.rx, 0, twoMathPi, false);\n ctx.restore();\n this._renderPaintInOrder(ctx);\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Ellipse.fromElement})\n * @static\n * @memberOf Ellipse\n * @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'cx', 'cy', 'rx', 'ry'];\n\n /**\n * Returns {@link Ellipse} instance from an SVG element\n * @static\n * @memberOf Ellipse\n * @param {HTMLElement} element Element to parse\n * @return {Ellipse}\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const parsedAttributes = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n\n parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx;\n parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry;\n return new this(parsedAttributes);\n }\n\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Ellipse);\nclassRegistry.setSVGClass(Ellipse);\n","import type { XY } from '../Point';\n\n/**\n * Parses \"points\" attribute, returning an array of values\n * @static\n * @memberOf fabric\n * @param {String} points points attribute string\n * @return {Array} array of points\n */\nexport function parsePointsAttribute(points: string | null): XY[] {\n // points attribute is required and must not be empty\n if (!points) {\n return [];\n }\n\n // replace commas with whitespace and remove bookending whitespace\n const pointsSplit: string[] = points.replace(/,/g, ' ').trim().split(/\\s+/);\n\n const parsedPoints = [];\n\n for (let i = 0; i < pointsSplit.length; i += 2) {\n parsedPoints.push({\n x: parseFloat(pointsSplit[i]),\n y: parseFloat(pointsSplit[i + 1]),\n });\n }\n\n // odd number of points is an error\n // if (parsedPoints.length % 2 !== 0) {\n // return null;\n // }\n return parsedPoints;\n}\n","import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { parsePointsAttribute } from '../parser/parsePointsAttribute';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { calcDimensionsMatrix, transformPoint } from '../util/misc/matrix';\nimport { projectStrokeOnPoints } from '../util/misc/projectStroke';\nimport type { TProjectStrokeOnPointsOptions } from '../util/misc/projectStroke/types';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport {\n CENTER,\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const polylineDefaultValues: Partial> = {\n /**\n * @deprecated transient option soon to be removed in favor of a different design\n */\n exactBoundingBox: false,\n};\n\nexport interface SerializedPolylineProps extends SerializedObjectProps {\n points: XY[];\n}\n\nexport class Polyline<\n Props extends TOptions = Partial,\n SProps extends SerializedPolylineProps = SerializedPolylineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject {\n /**\n * Points array\n * @type Array\n * @default\n */\n declare points: XY[];\n\n /**\n * WARNING: Feature in progress\n * Calculate the exact bounding box taking in account strokeWidth on acute angles\n * this will be turned to true by default on fabric 6.0\n * maybe will be left in as an optimization since calculations may be slow\n * @deprecated transient option soon to be removed in favor of a different design\n * @type Boolean\n * @default false\n */\n declare exactBoundingBox: boolean;\n\n private declare initialized: true | undefined;\n\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polyline';\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Polyline.ownDefaults,\n };\n }\n\n /**\n * A list of properties that if changed trigger a recalculation of dimensions\n * @todo check if you really need to recalculate for all cases\n */\n static layoutProperties: (keyof Polyline)[] = [\n SKEW_X,\n SKEW_Y,\n 'strokeLineCap',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'strokeWidth',\n 'strokeUniform',\n 'points',\n ];\n\n declare pathOffset: Point;\n\n declare strokeOffset: Point;\n\n static cacheProperties = [...cacheProperties, 'points'];\n\n strokeDiff: Point;\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {Polyline} thisArg\n * @example\n * var poly = new Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n constructor(points: XY[] = [], options: Props = {} as Props) {\n super();\n Object.assign(this, Polyline.ownDefaults);\n this.setOptions(options);\n this.points = points;\n const { left, top } = options;\n this.initialized = true;\n this.setBoundingBox(true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n protected isOpen() {\n return true;\n }\n\n private _projectStrokeOnPoints(options: TProjectStrokeOnPointsOptions) {\n return projectStrokeOnPoints(this.points, options, this.isOpen());\n }\n\n /**\n * Calculate the polygon bounding box\n * @private\n */\n _calcDimensions(options?: Partial) {\n options = {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n strokeLineCap: this.strokeLineCap,\n strokeLineJoin: this.strokeLineJoin,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeUniform: this.strokeUniform,\n strokeWidth: this.strokeWidth,\n ...(options || {}),\n };\n const points = this.exactBoundingBox\n ? this._projectStrokeOnPoints(\n options as TProjectStrokeOnPointsOptions,\n ).map((projection) => projection.projectedPoint)\n : this.points;\n if (points.length === 0) {\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n pathOffset: new Point(),\n strokeOffset: new Point(),\n strokeDiff: new Point(),\n };\n }\n const bbox = makeBoundingBoxFromPoints(points),\n // Remove scale effect, since it's applied after\n matrix = calcDimensionsMatrix({ ...options, scaleX: 1, scaleY: 1 }),\n bboxNoStroke = makeBoundingBoxFromPoints(\n this.points.map((p) => transformPoint(p, matrix, true)),\n ),\n scale = new Point(this.scaleX, this.scaleY);\n let offsetX = bbox.left + bbox.width / 2,\n offsetY = bbox.top + bbox.height / 2;\n if (this.exactBoundingBox) {\n offsetX = offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));\n // Order of those assignments is important.\n // offsetY relies on offsetX being already changed by the line above\n offsetY = offsetY - offsetX * Math.tan(degreesToRadians(this.skewY));\n }\n\n return {\n ...bbox,\n pathOffset: new Point(offsetX, offsetY),\n strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top)\n .subtract(new Point(bbox.left, bbox.top))\n .multiply(scale),\n strokeDiff: new Point(bbox.width, bbox.height)\n .subtract(new Point(bboxNoStroke.width, bboxNoStroke.height))\n .multiply(scale),\n };\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = makeBoundingBoxFromPoints(this.points);\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { left, top, width, height, pathOffset, strokeOffset, strokeDiff } =\n this._calcDimensions();\n this.set({ width, height, pathOffset, strokeOffset, strokeDiff });\n adjustPosition &&\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER,\n );\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return this.exactBoundingBox;\n }\n\n /**\n * @override stroke is taken in account in size\n */\n _getNonTransformedDimensions() {\n return this.exactBoundingBox\n ? // TODO: fix this\n new Point(this.width, this.height)\n : super._getNonTransformedDimensions();\n }\n\n /**\n * @override stroke and skewing are taken into account when projecting stroke on points,\n * therefore we don't want the default calculation to account for skewing as well.\n * Though it is possible to pass `width` and `height` in `options`, doing so is very strange, use with discretion.\n *\n * @private\n */\n _getTransformedDimensions(options: any = {}) {\n if (this.exactBoundingBox) {\n let size: Point;\n /* When `strokeUniform = true`, any changes to the properties require recalculating the `width` and `height` because\n the stroke projections are affected.\n When `strokeUniform = false`, we don't need to recalculate for scale transformations, as the effect of scale on\n projections follows a linear function (e.g. scaleX of 2 just multiply width by 2)*/\n if (\n Object.keys(options).some(\n (key) =>\n this.strokeUniform ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof TProjectStrokeOnPointsOptions,\n ),\n )\n ) {\n const { width, height } = this._calcDimensions(options);\n size = new Point(options.width ?? width, options.height ?? height);\n } else {\n size = new Point(\n options.width ?? this.width,\n options.height ?? this.height,\n );\n }\n return size.multiply(\n new Point(options.scaleX || this.scaleX, options.scaleY || this.scaleY),\n );\n } else {\n return super._getTransformedDimensions(options);\n }\n }\n\n /**\n * Recalculates dimensions when changing skew and scale\n * @private\n */\n _set(key: string, value: any) {\n const changed = this.initialized && this[key as keyof this] !== value;\n const output = super._set(key, value);\n if (\n this.exactBoundingBox &&\n changed &&\n (((key === SCALE_X || key === SCALE_Y) &&\n this.strokeUniform &&\n (this.constructor as typeof Polyline).layoutProperties.includes(\n 'strokeUniform',\n )) ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof Polyline,\n ))\n ) {\n this.setDimensions();\n }\n return output;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n points: this.points.map(({ x, y }) => ({ x, y })),\n };\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const points = [],\n diffX = this.pathOffset.x,\n diffY = this.pathOffset.y,\n NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n\n for (let i = 0, len = this.points.length; i < len; i++) {\n points.push(\n toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS),\n ',',\n toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS),\n ' ',\n );\n }\n return [\n `<${\n (this.constructor as typeof Polyline).type.toLowerCase() as\n | 'polyline'\n | 'polygon'\n } `,\n 'COMMON_PARTS',\n `points=\"${points.join('')}\" />\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return;\n }\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (let i = 0; i < len; i++) {\n const point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n !this.isOpen() && ctx.closePath();\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity(): number {\n return this.points.length;\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Polyline.fromElement})\n * @static\n * @memberOf Polyline\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES];\n\n /**\n * Returns Polyline instance from an SVG element\n * @static\n * @memberOf Polyline\n * @param {HTMLElement} element Element to parser\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const points = parsePointsAttribute(element.getAttribute('points')),\n // we omit left and top to instruct the constructor to position the object using the bbox\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n { left, top, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(points, {\n ...parsedAttributes,\n ...options,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Polyline instance from an object representation\n * @static\n * @memberOf Polyline\n * @param {Object} object Object to create an instance from\n * @returns {Promise}\n */\n static fromObject>(object: T) {\n return this._fromObject(object, {\n extraParam: 'points',\n });\n }\n}\n\nclassRegistry.setClass(Polyline);\nclassRegistry.setSVGClass(Polyline);\n","import { classRegistry } from '../ClassRegistry';\nimport { Polyline, polylineDefaultValues } from './Polyline';\n\nexport class Polygon extends Polyline {\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polygon';\n\n protected isOpen() {\n return false;\n }\n}\n\nclassRegistry.setClass(Polygon);\nclassRegistry.setSVGClass(Polygon);\n","import { FILL, LEFT, STROKE, reNewline } from '../../constants';\nimport type { TClassProperties } from '../../typedefs';\nimport type { FabricText } from './Text';\n\nconst fontProperties = [\n 'fontSize',\n 'fontWeight',\n 'fontFamily',\n 'fontStyle',\n] as const;\n\nexport const textDecorationProperties = [\n 'underline',\n 'overline',\n 'linethrough',\n] as const;\n\nexport const textLayoutProperties: string[] = [\n ...fontProperties,\n 'lineHeight',\n 'text',\n 'charSpacing',\n 'textAlign',\n 'styles',\n 'path',\n 'pathStartOffset',\n 'pathSide',\n 'pathAlign',\n];\n\nexport const additionalProps = [\n ...textLayoutProperties,\n ...textDecorationProperties,\n 'textBackgroundColor',\n 'direction',\n] as const;\n\nexport type StylePropertiesType =\n | 'fill'\n | 'stroke'\n | 'strokeWidth'\n | 'fontSize'\n | 'fontFamily'\n | 'fontWeight'\n | 'fontStyle'\n | 'textBackgroundColor'\n | 'deltaY'\n | 'overline'\n | 'underline'\n | 'linethrough';\n\nexport const styleProperties: Readonly = [\n ...fontProperties,\n ...textDecorationProperties,\n STROKE,\n 'strokeWidth',\n FILL,\n 'deltaY',\n 'textBackgroundColor',\n] as const;\n\n// @TODO: Many things here are configuration related and shouldn't be on the class nor prototype\n// regexes, list of properties that are not suppose to change by instances, magic consts.\n// this will be a separated effort\nexport const textDefaultValues: Partial> = {\n _reNewline: reNewline,\n _reSpacesAndTabs: /[ \\t\\r]/g,\n _reSpaceAndTab: /[ \\t\\r]/,\n _reWords: /\\S+/g,\n fontSize: 40,\n fontWeight: 'normal',\n fontFamily: 'Times New Roman',\n underline: false,\n overline: false,\n linethrough: false,\n textAlign: LEFT,\n fontStyle: 'normal',\n lineHeight: 1.16,\n superscript: {\n size: 0.6, // fontSize factor\n baseline: -0.35, // baseline-shift factor (upwards)\n },\n subscript: {\n size: 0.6, // fontSize factor\n baseline: 0.11, // baseline-shift factor (downwards)\n },\n textBackgroundColor: '',\n stroke: null,\n shadow: null,\n path: undefined,\n pathStartOffset: 0,\n pathSide: LEFT,\n pathAlign: 'baseline',\n _fontSizeFraction: 0.222,\n offsets: {\n underline: 0.1,\n linethrough: -0.315,\n overline: -0.88,\n },\n _fontSizeMult: 1.13,\n charSpacing: 0,\n deltaY: 0,\n direction: 'ltr',\n CACHE_FONT_SIZE: 400,\n MIN_TEXT_WIDTH: 2,\n};\n\nexport const JUSTIFY = 'justify';\nexport const JUSTIFY_LEFT = 'justify-left';\nexport const JUSTIFY_RIGHT = 'justify-right';\nexport const JUSTIFY_CENTER = 'justify-center';\n","import type { ObjectEvents } from '../../EventTypeDefs';\nimport type { FabricObjectProps, SerializedObjectProps } from '../Object/types';\nimport type { TOptions } from '../../typedefs';\nimport { FabricObject } from '../Object/FabricObject';\nimport { styleProperties } from './constants';\nimport type { StylePropertiesType } from './constants';\nimport type { FabricText } from './Text';\nimport { pick } from '../../util';\nimport { pickBy } from '../../util/misc/pick';\n\nexport type CompleteTextStyleDeclaration = Pick<\n FabricText,\n StylePropertiesType\n>;\n\nexport type TextStyleDeclaration = Partial;\n\nexport type TextStyle = {\n [line: number | string]: { [char: number | string]: TextStyleDeclaration };\n};\n\nexport abstract class StyledText<\n Props extends TOptions = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject {\n declare abstract styles: TextStyle;\n protected declare abstract _textLines: string[][];\n protected declare _forceClearCache: boolean;\n static _styleProperties: Readonly = styleProperties;\n abstract get2DCursorLocation(\n selectionStart: number,\n skipWrapping?: boolean,\n ): { charIndex: number; lineIndex: number };\n\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles(lineIndex?: number): boolean {\n if (!this.styles) {\n return true;\n }\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return true;\n }\n const obj =\n typeof lineIndex === 'undefined'\n ? this.styles\n : { line: this.styles[lineIndex] };\n for (const p1 in obj) {\n for (const p2 in obj[p1]) {\n // eslint-disable-next-line no-unused-vars\n for (const p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * Returns true if object has a style property or has it ina specified line\n * This function is used to detect if a text will use a particular property or not.\n * @param {String} property to check for\n * @param {Number} lineIndex to check the style on\n * @return {Boolean}\n */\n styleHas(property: keyof TextStyleDeclaration, lineIndex?: number): boolean {\n if (!this.styles) {\n return false;\n }\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return false;\n }\n const obj =\n typeof lineIndex === 'undefined'\n ? this.styles\n : { 0: this.styles[lineIndex] };\n // eslint-disable-next-line\n for (const p1 in obj) {\n // eslint-disable-next-line\n for (const p2 in obj[p1]) {\n if (typeof obj[p1][p2][property] !== 'undefined') {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * Check if characters in a text have a value for a property\n * whose value matches the textbox's value for that property. If so,\n * the character-level property is deleted. If the character\n * has no other properties, then it is also deleted. Finally,\n * if the line containing that character has no other characters\n * then it also is deleted.\n *\n * @param {string} property The property to compare between characters and text.\n */\n cleanStyle(property: keyof TextStyleDeclaration) {\n if (!this.styles) {\n return false;\n }\n const obj = this.styles;\n let stylesCount = 0,\n letterCount,\n stylePropertyValue,\n allStyleObjectPropertiesMatch = true,\n graphemeCount = 0;\n for (const p1 in obj) {\n letterCount = 0;\n for (const p2 in obj[p1]) {\n const styleObject = obj[p1][p2] || {},\n stylePropertyHasBeenSet = styleObject[property] !== undefined;\n\n stylesCount++;\n\n if (stylePropertyHasBeenSet) {\n if (!stylePropertyValue) {\n stylePropertyValue = styleObject[property];\n } else if (styleObject[property] !== stylePropertyValue) {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (styleObject[property] === this[property as keyof this]) {\n delete styleObject[property];\n }\n } else {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (Object.keys(styleObject).length !== 0) {\n letterCount++;\n } else {\n delete obj[p1][p2];\n }\n }\n\n if (letterCount === 0) {\n delete obj[p1];\n }\n }\n // if every grapheme has the same style set then\n // delete those styles and set it on the parent\n for (let i = 0; i < this._textLines.length; i++) {\n graphemeCount += this._textLines[i].length;\n }\n if (allStyleObjectPropertiesMatch && stylesCount === graphemeCount) {\n // @ts-expect-error conspiracy theory of TS\n this[property as keyof this] = stylePropertyValue;\n this.removeStyle(property);\n }\n }\n\n /**\n * Remove a style property or properties from all individual character styles\n * in a text object. Deletes the character style object if it contains no other style\n * props. Deletes a line style object if it contains no other character styles.\n *\n * @param {String} props The property to remove from character styles.\n */\n removeStyle(property: keyof TextStyleDeclaration) {\n if (!this.styles) {\n return;\n }\n const obj = this.styles;\n let line, lineNum, charNum;\n for (lineNum in obj) {\n line = obj[lineNum];\n for (charNum in line) {\n delete line[charNum][property];\n if (Object.keys(line[charNum]).length === 0) {\n delete line[charNum];\n }\n }\n if (Object.keys(line).length === 0) {\n delete obj[lineNum];\n }\n }\n }\n\n private _extendStyles(index: number, style: TextStyleDeclaration): void {\n const { lineIndex, charIndex } = this.get2DCursorLocation(index);\n\n if (!this._getLineStyle(lineIndex)) {\n this._setLineStyle(lineIndex);\n }\n\n const newStyle = pickBy(\n {\n // first create a new object that is a merge of existing and new\n ...this._getStyleDeclaration(lineIndex, charIndex),\n ...style,\n // use the predicate to discard undefined values\n },\n (value) => value !== undefined,\n );\n\n // finally assign to the old position the new style\n this._setStyleDeclaration(lineIndex, charIndex, newStyle);\n }\n\n /**\n * Gets style of a current selection/cursor (at the start position)\n * @param {Number} startIndex Start index to get styles at\n * @param {Number} endIndex End index to get styles at, if not specified startIndex + 1\n * @param {Boolean} [complete] get full style or not\n * @return {Array} styles an array with one, zero or more Style objects\n */\n getSelectionStyles(\n startIndex: number,\n endIndex?: number,\n complete?: boolean,\n ): TextStyleDeclaration[] {\n const styles: TextStyleDeclaration[] = [];\n for (let i = startIndex; i < (endIndex || startIndex); i++) {\n styles.push(this.getStyleAtPosition(i, complete));\n }\n return styles;\n }\n\n /**\n * Gets style of a current selection/cursor position\n * @param {Number} position to get styles at\n * @param {Boolean} [complete] full style if true\n * @return {Object} style Style object at a specified index\n * @private\n */\n getStyleAtPosition(position: number, complete?: boolean) {\n const { lineIndex, charIndex } = this.get2DCursorLocation(position);\n return complete\n ? this.getCompleteStyleDeclaration(lineIndex, charIndex)\n : this._getStyleDeclaration(lineIndex, charIndex);\n }\n\n /**\n * Sets style of a current selection, if no selection exist, do not set anything.\n * @param {Object} styles Styles object\n * @param {Number} startIndex Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified startIndex + 1\n */\n setSelectionStyles(styles: object, startIndex: number, endIndex?: number) {\n for (let i = startIndex; i < (endIndex || startIndex); i++) {\n this._extendStyles(i, styles);\n }\n /* not included in _extendStyles to avoid clearing cache more than once */\n this._forceClearCache = true;\n }\n\n /**\n * Get a reference, not a clone, to the style object for a given character,\n * if no style is set for a line or char, return a new empty object.\n * This is tricky and confusing because when you get an empty object you can't\n * determine if it is a reference or a new one.\n * @TODO this should always return a reference or always a clone or undefined when necessary.\n * @protected\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {TextStyleDeclaration} a style object reference to the existing one or a new empty object when undefined\n */\n _getStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n ): TextStyleDeclaration {\n const lineStyle = this.styles && this.styles[lineIndex];\n return lineStyle ? lineStyle[charIndex] ?? {} : {};\n }\n\n /**\n * return a new object that contains all the style property for a character\n * the object returned is newly created\n * @param {Number} lineIndex of the line where the character is\n * @param {Number} charIndex position of the character on the line\n * @return {Object} style object\n */\n getCompleteStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n ): CompleteTextStyleDeclaration {\n return {\n // @ts-expect-error readonly\n ...pick(this, (this.constructor as typeof StyledText)._styleProperties),\n ...this._getStyleDeclaration(lineIndex, charIndex),\n } as CompleteTextStyleDeclaration;\n }\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n protected _setStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n style: object,\n ) {\n this.styles[lineIndex][charIndex] = style;\n }\n\n /**\n *\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n protected _deleteStyleDeclaration(lineIndex: number, charIndex: number) {\n delete this.styles[lineIndex][charIndex];\n }\n\n /**\n * @param {Number} lineIndex\n * @return {Boolean} if the line exists or not\n * @private\n */\n protected _getLineStyle(lineIndex: number): boolean {\n return !!this.styles[lineIndex];\n }\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @private\n */\n protected _setLineStyle(lineIndex: number) {\n this.styles[lineIndex] = {};\n }\n\n protected _deleteLineStyle(lineIndex: number) {\n delete this.styles[lineIndex];\n }\n}\n","import { config } from '../../config';\nimport type { TSVGReviver } from '../../typedefs';\nimport { escapeXml } from '../../util/lang_string';\nimport { colorPropToSVG, createSVGRect } from '../../util/misc/svgParsing';\nimport { hasStyleChanged } from '../../util/misc/textStyles';\nimport { toFixed } from '../../util/misc/toFixed';\nimport { FabricObjectSVGExportMixin } from '../Object/FabricObjectSVGExportMixin';\nimport { type TextStyleDeclaration } from './StyledText';\nimport { JUSTIFY } from '../Text/constants';\nimport type { FabricText } from './Text';\nimport { STROKE, FILL } from '../../constants';\n\nconst multipleSpacesRegex = / +/g;\nconst dblQuoteRegex = /\"/g;\n\nfunction createSVGInlineRect(\n color: string,\n left: number,\n top: number,\n width: number,\n height: number,\n) {\n return `\\t\\t${createSVGRect(color, { left, top, width, height })}\\n`;\n}\n\nexport class TextSVGExportMixin extends FabricObjectSVGExportMixin {\n _toSVG(this: TextSVGExportMixin & FabricText): string[] {\n const offsets = this._getSVGLeftTopOffsets(),\n textAndBg = this._getSVGTextAndBg(offsets.textTop, offsets.textLeft);\n return this._wrapSVGTextAndBg(textAndBg);\n }\n\n toSVG(this: TextSVGExportMixin & FabricText, reviver?: TSVGReviver): string {\n return this._createBaseSVGMarkup(this._toSVG(), {\n reviver,\n noStyle: true,\n withShadow: true,\n });\n }\n\n private _getSVGLeftTopOffsets(this: TextSVGExportMixin & FabricText) {\n return {\n textLeft: -this.width / 2,\n textTop: -this.height / 2,\n lineTop: this.getHeightOfLine(0),\n };\n }\n\n private _wrapSVGTextAndBg(\n this: TextSVGExportMixin & FabricText,\n {\n textBgRects,\n textSpans,\n }: {\n textSpans: string[];\n textBgRects: string[];\n },\n ) {\n const noShadow = true,\n textDecoration = this.getSvgTextDecoration(this);\n return [\n textBgRects.join(''),\n '\\t\\t',\n textSpans.join(''),\n '\\n',\n ];\n }\n\n /**\n * @private\n * @param {Number} textTopOffset Text top offset\n * @param {Number} textLeftOffset Text left offset\n * @return {Object}\n */\n private _getSVGTextAndBg(\n this: TextSVGExportMixin & FabricText,\n textTopOffset: number,\n textLeftOffset: number,\n ) {\n const textSpans: string[] = [],\n textBgRects: string[] = [];\n let height = textTopOffset,\n lineOffset;\n\n // bounding-box background\n this.backgroundColor &&\n textBgRects.push(\n ...createSVGInlineRect(\n this.backgroundColor,\n -this.width / 2,\n -this.height / 2,\n this.width,\n this.height,\n ),\n );\n\n // text and text-background\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n lineOffset = this._getLineLeftOffset(i);\n if (this.direction === 'rtl') {\n lineOffset += this.width;\n }\n if (this.textBackgroundColor || this.styleHas('textBackgroundColor', i)) {\n this._setSVGTextLineBg(\n textBgRects,\n i,\n textLeftOffset + lineOffset,\n height,\n );\n }\n this._setSVGTextLineText(\n textSpans,\n i,\n textLeftOffset + lineOffset,\n height,\n );\n height += this.getHeightOfLine(i);\n }\n\n return {\n textSpans,\n textBgRects,\n };\n }\n\n private _createTextCharSpan(\n this: TextSVGExportMixin & FabricText,\n char: string,\n styleDecl: TextStyleDeclaration,\n left: number,\n top: number,\n ) {\n const styleProps = this.getSvgSpanStyles(\n styleDecl,\n char !== char.trim() || !!char.match(multipleSpacesRegex),\n ),\n fillStyles = styleProps ? `style=\"${styleProps}\"` : '',\n dy = styleDecl.deltaY,\n dySpan = dy ? ` dy=\"${toFixed(dy, config.NUM_FRACTION_DIGITS)}\" ` : '';\n\n return `${escapeXml(char)}`;\n }\n\n private _setSVGTextLineText(\n this: TextSVGExportMixin & FabricText,\n textSpans: string[],\n lineIndex: number,\n textLeftOffset: number,\n textTopOffset: number,\n ) {\n const lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.includes(JUSTIFY),\n line = this._textLines[lineIndex];\n let actualStyle,\n nextStyle,\n charsToRender = '',\n charBox,\n style,\n boxWidth = 0,\n timeToRender;\n\n textTopOffset +=\n (lineHeight * (1 - this._fontSizeFraction)) / this.lineHeight;\n for (let i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i];\n if (boxWidth === 0) {\n textLeftOffset += charBox.kernedWidth - charBox.width;\n boxWidth += charBox.width;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle =\n actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = hasStyleChanged(actualStyle, nextStyle, true);\n }\n if (timeToRender) {\n style = this._getStyleDeclaration(lineIndex, i);\n textSpans.push(\n this._createTextCharSpan(\n charsToRender,\n style,\n textLeftOffset,\n textTopOffset,\n ),\n );\n charsToRender = '';\n actualStyle = nextStyle;\n if (this.direction === 'rtl') {\n textLeftOffset -= boxWidth;\n } else {\n textLeftOffset += boxWidth;\n }\n boxWidth = 0;\n }\n }\n }\n\n private _setSVGTextLineBg(\n this: TextSVGExportMixin & FabricText,\n textBgRects: (string | number)[],\n i: number,\n leftOffset: number,\n textTopOffset: number,\n ) {\n const line = this._textLines[i],\n heightOfLine = this.getHeightOfLine(i) / this.lineHeight;\n let boxWidth = 0,\n boxStart = 0,\n currentColor,\n lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (let j = 0; j < line.length; j++) {\n const { left, width, kernedWidth } = this.__charBounds[i][j];\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (currentColor !== lastColor) {\n lastColor &&\n textBgRects.push(\n ...createSVGInlineRect(\n lastColor,\n leftOffset + boxStart,\n textTopOffset,\n boxWidth,\n heightOfLine,\n ),\n );\n boxStart = left;\n boxWidth = width;\n lastColor = currentColor;\n } else {\n boxWidth += kernedWidth;\n }\n }\n currentColor &&\n textBgRects.push(\n ...createSVGInlineRect(\n lastColor,\n leftOffset + boxStart,\n textTopOffset,\n boxWidth,\n heightOfLine,\n ),\n );\n }\n\n /**\n * @deprecated unused\n */\n _getSVGLineTopOffset(\n this: TextSVGExportMixin & FabricText,\n lineIndex: number,\n ) {\n let lineTopOffset = 0,\n j;\n for (j = 0; j < lineIndex; j++) {\n lineTopOffset += this.getHeightOfLine(j);\n }\n const lastHeight = this.getHeightOfLine(j);\n return {\n lineTop: lineTopOffset,\n offset:\n ((this._fontSizeMult - this._fontSizeFraction) * lastHeight) /\n (this.lineHeight * this._fontSizeMult),\n };\n }\n\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles(this: TextSVGExportMixin & FabricText, skipShadow?: boolean) {\n return `${super.getSvgStyles(skipShadow)} white-space: pre;`;\n }\n\n /**\n * Returns styles-string for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @param {Boolean} useWhiteSpace a boolean to include an additional attribute in the style.\n * @return {String}\n */\n getSvgSpanStyles(\n this: TextSVGExportMixin & FabricText,\n style: TextStyleDeclaration,\n useWhiteSpace?: boolean,\n ) {\n const {\n fontFamily,\n strokeWidth,\n stroke,\n fill,\n fontSize,\n fontStyle,\n fontWeight,\n deltaY,\n } = style;\n\n const textDecoration = this.getSvgTextDecoration(style);\n\n return [\n stroke ? colorPropToSVG(STROKE, stroke) : '',\n strokeWidth ? `stroke-width: ${strokeWidth}; ` : '',\n fontFamily\n ? `font-family: ${\n !fontFamily.includes(\"'\") && !fontFamily.includes('\"')\n ? `'${fontFamily}'`\n : fontFamily\n }; `\n : '',\n fontSize ? `font-size: ${fontSize}px; ` : '',\n fontStyle ? `font-style: ${fontStyle}; ` : '',\n fontWeight ? `font-weight: ${fontWeight}; ` : '',\n textDecoration ? `text-decoration: ${textDecoration}; ` : textDecoration,\n fill ? colorPropToSVG(FILL, fill) : '',\n deltaY ? `baseline-shift: ${-deltaY}; ` : '',\n useWhiteSpace ? 'white-space: pre; ' : '',\n ].join('');\n }\n\n /**\n * Returns text-decoration property for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @return {String}\n */\n getSvgTextDecoration(\n this: TextSVGExportMixin & FabricText,\n style: TextStyleDeclaration,\n ) {\n return (['overline', 'underline', 'line-through'] as const)\n .filter(\n (decoration) =>\n style[\n decoration.replace('-', '') as\n | 'overline'\n | 'underline'\n | 'linethrough'\n ],\n )\n .join(' ');\n }\n}\n","import { cache } from '../../cache';\nimport { DEFAULT_SVG_FONT_SIZE, FILL, STROKE } from '../../constants';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport type {\n CompleteTextStyleDeclaration,\n TextStyle,\n TextStyleDeclaration,\n} from './StyledText';\nimport { StyledText } from './StyledText';\nimport { SHARED_ATTRIBUTES } from '../../parser/attributes';\nimport { parseAttributes } from '../../parser/parseAttributes';\nimport type {\n Abortable,\n TCacheCanvasDimensions,\n TClassProperties,\n TFiller,\n TOptions,\n TRadian,\n} from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { graphemeSplit } from '../../util/lang_string';\nimport { createCanvasElementFor } from '../../util/misc/dom';\nimport type { TextStyleArray } from '../../util/misc/textStyles';\nimport {\n hasStyleChanged,\n stylesFromArray,\n stylesToArray,\n} from '../../util/misc/textStyles';\nimport { getPathSegmentsInfo, getPointOnPath } from '../../util/path';\nimport { cacheProperties } from '../Object/FabricObject';\nimport type { Path } from '../Path';\nimport { TextSVGExportMixin } from './TextSVGExportMixin';\nimport { applyMixins } from '../../util/applyMixins';\nimport type { FabricObjectProps, SerializedObjectProps } from '../Object/types';\nimport type { StylePropertiesType } from './constants';\nimport {\n additionalProps,\n textDefaultValues,\n textLayoutProperties,\n JUSTIFY,\n JUSTIFY_CENTER,\n JUSTIFY_LEFT,\n JUSTIFY_RIGHT,\n} from './constants';\nimport { CENTER, LEFT, RIGHT, TOP, BOTTOM } from '../../constants';\nimport { isFiller } from '../../util/typeAssertions';\nimport type { Gradient } from '../../gradient/Gradient';\nimport type { Pattern } from '../../Pattern';\nimport type { CSSRules } from '../../parser/typedefs';\nimport { Point } from '../../Point';\nimport { createRotateMatrix } from '../../util/misc/matrix';\nimport { makeBoundingBoxFromPoints, radiansToDegrees } from '../../util';\n\nlet measuringContext: CanvasRenderingContext2D | null;\n\n/**\n * Return a context for measurement of text string.\n * if created it gets stored for reuse\n */\nfunction getMeasuringContext() {\n if (!measuringContext) {\n const canvas = createCanvasElementFor({\n width: 0,\n height: 0,\n });\n measuringContext = canvas.getContext('2d');\n }\n return measuringContext;\n}\n\nexport type TPathSide = 'left' | 'right';\n\nexport type TPathAlign = 'baseline' | 'center' | 'ascender' | 'descender';\n\nexport type TextLinesInfo = {\n lines: string[];\n graphemeLines: string[][];\n graphemeText: string[];\n _unwrappedLines: string[][];\n};\n\n/**\n * Measure and return the info of a single grapheme.\n * needs the the info of previous graphemes already filled\n * Override to customize measuring\n */\nexport type GraphemeBBox = {\n width: number;\n height: number;\n kernedWidth: number;\n left: number;\n deltaY: number;\n renderLeft?: number;\n renderTop?: number;\n angle?: TRadian;\n};\n\n// @TODO this is not complete\ninterface UniqueTextProps {\n charSpacing: number;\n lineHeight: number;\n fontSize: number;\n fontWeight: string | number;\n fontFamily: string;\n fontStyle: string;\n pathSide: TPathSide;\n pathAlign: TPathAlign;\n underline: boolean;\n overline: boolean;\n linethrough: boolean;\n textAlign: string;\n direction: CanvasDirection;\n path?: Path;\n}\n\nexport interface SerializedTextProps\n extends SerializedObjectProps,\n UniqueTextProps {\n styles: TextStyleArray | TextStyle;\n}\n\nexport interface TextProps extends FabricObjectProps, UniqueTextProps {\n styles: TextStyle;\n}\n\n/**\n * Text class\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#text}\n */\nexport class FabricText<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends StyledText\n implements UniqueTextProps\n{\n /**\n * Properties that requires a text layout recalculation when changed\n * @type string[]\n * @protected\n */\n static textLayoutProperties: string[] = textLayoutProperties;\n\n /**\n * @private\n */\n declare _reNewline: RegExp;\n\n /**\n * Use this regular expression to filter for whitespaces that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reSpacesAndTabs: RegExp;\n\n /**\n * Use this regular expression to filter for whitespace that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reSpaceAndTab: RegExp;\n\n /**\n * Use this regular expression to filter consecutive groups of non spaces.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reWords: RegExp;\n\n declare text: string;\n\n /**\n * Font size (in pixels)\n * @type Number\n * @default\n */\n declare fontSize: number;\n\n /**\n * Font weight (e.g. bold, normal, 400, 600, 800)\n * @type {(Number|String)}\n * @default\n */\n declare fontWeight: string | number;\n\n /**\n * Font family\n * @type String\n * @default\n */\n declare fontFamily: string;\n\n /**\n * Text decoration underline.\n * @type Boolean\n * @default\n */\n declare underline: boolean;\n\n /**\n * Text decoration overline.\n * @type Boolean\n * @default\n */\n declare overline: boolean;\n\n /**\n * Text decoration linethrough.\n * @type Boolean\n * @default\n */\n declare linethrough: boolean;\n\n /**\n * Text alignment. Possible values: \"left\", \"center\", \"right\", \"justify\",\n * \"justify-left\", \"justify-center\" or \"justify-right\".\n * @type String\n * @default\n */\n declare textAlign: string;\n\n /**\n * Font style . Possible values: \"\", \"normal\", \"italic\" or \"oblique\".\n * @type String\n * @default\n */\n declare fontStyle: string;\n\n /**\n * Line height\n * @type Number\n * @default\n */\n declare lineHeight: number;\n\n /**\n * Superscript schema object (minimum overlap)\n */\n declare superscript: {\n /**\n * fontSize factor\n * @default 0.6\n */\n size: number;\n /**\n * baseline-shift factor (upwards)\n * @default -0.35\n */\n baseline: number;\n };\n\n /**\n * Subscript schema object (minimum overlap)\n */\n declare subscript: {\n /**\n * fontSize factor\n * @default 0.6\n */\n size: number;\n /**\n * baseline-shift factor (downwards)\n * @default 0.11\n */\n baseline: number;\n };\n\n /**\n * Background color of text lines\n * @type String\n * @default\n */\n declare textBackgroundColor: string;\n\n declare styles: TextStyle;\n\n /**\n * Path that the text should follow.\n * since 4.6.0 the path will be drawn automatically.\n * if you want to make the path visible, give it a stroke and strokeWidth or fill value\n * if you want it to be hidden, assign visible = false to the path.\n * This feature is in BETA, and SVG import/export is not yet supported.\n * @type Path\n * @example\n * const textPath = new Text('Text on a path', {\n * top: 150,\n * left: 150,\n * textAlign: 'center',\n * charSpacing: -50,\n * path: new Path('M 0 0 C 50 -100 150 -100 200 0', {\n * strokeWidth: 1,\n * visible: false\n * }),\n * pathSide: 'left',\n * pathStartOffset: 0\n * });\n * @default\n */\n declare path?: Path;\n\n /**\n * Offset amount for text path starting position\n * Only used when text has a path\n * @type Number\n * @default\n */\n declare pathStartOffset: number;\n\n /**\n * Which side of the path the text should be drawn on.\n * Only used when text has a path\n * @type {TPathSide} 'left|right'\n * @default\n */\n declare pathSide: TPathSide;\n\n /**\n * How text is aligned to the path. This property determines\n * the perpendicular position of each character relative to the path.\n * (one of \"baseline\", \"center\", \"ascender\", \"descender\")\n * This feature is in BETA, and its behavior may change\n * @type TPathAlign\n * @default\n */\n declare pathAlign: TPathAlign;\n\n /**\n * @private\n */\n declare _fontSizeFraction: number;\n\n /**\n * @private\n */\n declare offsets: { underline: number; linethrough: number; overline: number };\n\n /**\n * Text Line proportion to font Size (in pixels)\n * @type Number\n * @default\n */\n declare _fontSizeMult: number;\n\n /**\n * additional space between characters\n * expressed in thousands of em unit\n * @type Number\n * @default\n */\n declare charSpacing: number;\n\n /**\n * Baseline shift, styles only, keep at 0 for the main text object\n * @type {Number}\n * @default\n */\n declare deltaY: number;\n\n /**\n * WARNING: EXPERIMENTAL. NOT SUPPORTED YET\n * determine the direction of the text.\n * This has to be set manually together with textAlign and originX for proper\n * experience.\n * some interesting link for the future\n * https://www.w3.org/International/questions/qa-bidi-unicode-controls\n * @since 4.5.0\n * @type {CanvasDirection} 'ltr|rtl'\n * @default\n */\n declare direction: CanvasDirection;\n\n /**\n * contains characters bounding boxes\n * This variable is considered to be protected.\n * But for how mixins are implemented right now, we can't leave it private\n * @protected\n */\n __charBounds: GraphemeBBox[][] = [];\n\n /**\n * use this size when measuring text. To avoid IE11 rounding errors\n * @type {Number}\n * @default\n * @readonly\n * @private\n */\n declare CACHE_FONT_SIZE: number;\n\n /**\n * contains the min text width to avoid getting 0\n * @type {Number}\n * @default\n */\n declare MIN_TEXT_WIDTH: number;\n\n /**\n * contains the the text of the object, divided in lines as they are displayed\n * on screen. Wrapping will divide the text independently of line breaks\n * @type {string[]}\n * @default\n */\n declare textLines: string[];\n\n /**\n * same as textlines, but each line is an array of graphemes as split by splitByGrapheme\n * @type {string[]}\n * @default\n */\n declare _textLines: string[][];\n\n declare _unwrappedTextLines: string[][];\n declare _text: string[];\n declare cursorWidth: number;\n declare __lineHeights: number[];\n declare __lineWidths: number[];\n declare initialized?: true;\n\n declare pathOffset: Point;\n\n static cacheProperties = [...cacheProperties, ...additionalProps];\n\n static ownDefaults = textDefaultValues;\n\n static type = 'Text';\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...FabricText.ownDefaults };\n }\n\n constructor(text: string, options?: Props) {\n super();\n Object.assign(this, FabricText.ownDefaults);\n this.setOptions(options);\n if (!this.styles) {\n this.styles = {};\n }\n this.text = text;\n this.initialized = true;\n if (this.path) {\n this.setPathInfo();\n }\n this.initDimensions();\n this.setCoords();\n }\n\n /**\n * If text has a path, it will add the extra information needed\n * for path and text calculations\n */\n setPathInfo() {\n const path = this.path;\n if (path) {\n path.segmentsInfo = getPathSegmentsInfo(path.path);\n }\n }\n\n /**\n * @private\n * Divides text into lines of text and lines of graphemes.\n */\n _splitText(): TextLinesInfo {\n const newLines = this._splitTextIntoLines(this.text);\n this.textLines = newLines.lines;\n this._textLines = newLines.graphemeLines;\n this._unwrappedTextLines = newLines._unwrappedLines;\n this._text = newLines.graphemeText;\n return newLines;\n }\n\n /**\n * Initialize or update text dimensions.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n */\n initDimensions() {\n this._splitText();\n this._clearCache();\n this.dirty = true;\n if (this.path) {\n this.calcTextWidth();\n // gets all the charboxes and transform by the path angle\n const points: Point[] = [];\n this.__charBounds.forEach((lineBoxes) => {\n lineBoxes.forEach(({ width, height, renderLeft, renderTop, angle }) => {\n const wBy2 = width / 2;\n const h = height * 0.75;\n const m = createRotateMatrix({ angle: radiansToDegrees(angle!) });\n m[4] = renderLeft!;\n m[5] = renderTop!;\n points.push(\n new Point(-wBy2, -h).transform(m),\n new Point(wBy2, -h).transform(m),\n new Point(wBy2, h).transform(m),\n new Point(-wBy2, h).transform(m),\n );\n });\n });\n const bbox = makeBoundingBoxFromPoints(points);\n this.pathOffset = new Point(\n bbox.width / 2 + bbox.left,\n bbox.height / 2 + bbox.top,\n );\n this.width = bbox.width;\n this.height = bbox.height;\n } else {\n this.width =\n this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH;\n this.height = this.calcTextHeight();\n this.pathOffset = new Point(0, 0);\n }\n if (this.textAlign.includes(JUSTIFY)) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n }\n\n /**\n * Enlarge space boxes and shift the others\n */\n enlargeSpaces() {\n let diffSpace,\n currentLineWidth,\n numberOfSpaces,\n accumulatedSpace,\n line,\n charBound,\n spaces;\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n if (\n this.textAlign !== JUSTIFY &&\n (i === len - 1 || this.isEndOfWrapping(i))\n ) {\n continue;\n }\n accumulatedSpace = 0;\n line = this._textLines[i];\n currentLineWidth = this.getLineWidth(i);\n if (\n currentLineWidth < this.width &&\n (spaces = this.textLines[i].match(this._reSpacesAndTabs))\n ) {\n numberOfSpaces = spaces.length;\n diffSpace = (this.width - currentLineWidth) / numberOfSpaces;\n for (let j = 0; j <= line.length; j++) {\n charBound = this.__charBounds[i][j];\n if (this._reSpaceAndTab.test(line[j])) {\n charBound.width += diffSpace;\n charBound.kernedWidth += diffSpace;\n charBound.left += accumulatedSpace;\n accumulatedSpace += diffSpace;\n } else {\n charBound.left += accumulatedSpace;\n }\n }\n }\n }\n }\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @return {Boolean}\n */\n isEndOfWrapping(lineIndex: number): boolean {\n return lineIndex === this._textLines.length - 1;\n }\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * It return always 1 for text and Itext. Textbox has its own implementation\n * @return Number\n */\n missingNewlineOffset(lineIndex: number, skipWrapping?: boolean): 0 | 1;\n missingNewlineOffset(_lineIndex: number): 1 {\n return 1;\n }\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor\n * @param {Number} selectionStart\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.\n */\n get2DCursorLocation(selectionStart: number, skipWrapping?: boolean) {\n const lines = skipWrapping ? this._unwrappedTextLines : this._textLines;\n let i: number;\n for (i = 0; i < lines.length; i++) {\n if (selectionStart <= lines[i].length) {\n return {\n lineIndex: i,\n charIndex: selectionStart,\n };\n }\n selectionStart -=\n lines[i].length + this.missingNewlineOffset(i, skipWrapping);\n }\n return {\n lineIndex: i - 1,\n charIndex:\n lines[i - 1].length < selectionStart\n ? lines[i - 1].length\n : selectionStart,\n };\n }\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of text object\n */\n toString(): string {\n return `#`;\n }\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @param {Object} dim.x width of object to be cached\n * @param {Object} dim.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions(): TCacheCanvasDimensions {\n const dims = super._getCacheCanvasDimensions();\n const fontSize = this.fontSize;\n dims.width += fontSize * dims.zoomX;\n dims.height += fontSize * dims.zoomY;\n return dims;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const path = this.path;\n ctx.translate(-this.pathOffset.x, -this.pathOffset.y);\n path && !path.isNotVisible() && path._render(ctx);\n this._setTextStyles(ctx);\n this._renderTextLinesBackground(ctx);\n this._renderTextDecoration(ctx, 'underline');\n this._renderText(ctx);\n this._renderTextDecoration(ctx, 'overline');\n this._renderTextDecoration(ctx, 'linethrough');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderText(ctx: CanvasRenderingContext2D) {\n if (this.paintFirst === STROKE) {\n this._renderTextStroke(ctx);\n this._renderTextFill(ctx);\n } else {\n this._renderTextFill(ctx);\n this._renderTextStroke(ctx);\n }\n }\n\n /**\n * Set the font parameter of the context with the object properties or with charStyle\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [charStyle] object with font style properties\n * @param {String} [charStyle.fontFamily] Font Family\n * @param {Number} [charStyle.fontSize] Font size in pixels. ( without px suffix )\n * @param {String} [charStyle.fontWeight] Font weight\n * @param {String} [charStyle.fontStyle] Font style (italic|normal)\n */\n _setTextStyles(\n ctx: CanvasRenderingContext2D,\n charStyle?: any,\n forMeasuring?: boolean,\n ) {\n ctx.textBaseline = 'alphabetic';\n if (this.path) {\n switch (this.pathAlign) {\n case CENTER:\n ctx.textBaseline = 'middle';\n break;\n case 'ascender':\n ctx.textBaseline = TOP;\n break;\n case 'descender':\n ctx.textBaseline = BOTTOM;\n break;\n }\n }\n ctx.font = this._getFontDeclaration(charStyle, forMeasuring);\n }\n\n /**\n * calculate and return the text Width measuring each line.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {Number} Maximum width of Text object\n */\n calcTextWidth(): number {\n let maxWidth = this.getLineWidth(0);\n\n for (let i = 1, len = this._textLines.length; i < len; i++) {\n const currentLineWidth = this.getLineWidth(i);\n if (currentLineWidth > maxWidth) {\n maxWidth = currentLineWidth;\n }\n }\n return maxWidth;\n }\n\n /**\n * @private\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} line Text to render\n * @param {Number} left Left position of text\n * @param {Number} top Top position of text\n * @param {Number} lineIndex Index of a line in a text\n */\n _renderTextLine(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n line: string[],\n left: number,\n top: number,\n lineIndex: number,\n ) {\n this._renderChars(method, ctx, line, left, top, lineIndex);\n }\n\n /**\n * Renders the text background for lines, taking care of style\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextLinesBackground(ctx: CanvasRenderingContext2D) {\n if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor')) {\n return;\n }\n const originalFill = ctx.fillStyle,\n leftOffset = this._getLeftOffset();\n let lineTopOffset = this._getTopOffset();\n\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i);\n if (\n !this.textBackgroundColor &&\n !this.styleHas('textBackgroundColor', i)\n ) {\n lineTopOffset += heightOfLine;\n continue;\n }\n const jlen = this._textLines[i].length;\n const lineLeftOffset = this._getLineLeftOffset(i);\n let boxWidth = 0;\n let boxStart = 0;\n let drawStart;\n let currentColor;\n let lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (let j = 0; j < jlen; j++) {\n // at this point charbox are either standard or full with pathInfo if there is a path.\n const charBox = this.__charBounds[i][j] as Required;\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (this.path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillStyle = currentColor;\n currentColor &&\n ctx.fillRect(\n -charBox.width / 2,\n (-heightOfLine / this.lineHeight) * (1 - this._fontSizeFraction),\n charBox.width,\n heightOfLine / this.lineHeight,\n );\n ctx.restore();\n } else if (currentColor !== lastColor) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = lastColor;\n lastColor &&\n ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight,\n );\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastColor = currentColor;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n }\n if (currentColor && !this.path) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentColor;\n ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight,\n );\n }\n lineTopOffset += heightOfLine;\n }\n ctx.fillStyle = originalFill;\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * measure and return the width of a single character.\n * possibly overridden to accommodate different measure logic or\n * to hook some external lib for character measurement\n * @private\n * @param {String} _char, char to be measured\n * @param {Object} charStyle style of char to be measured\n * @param {String} [previousChar] previous char\n * @param {Object} [prevCharStyle] style of previous char\n */\n _measureChar(\n _char: string,\n charStyle: CompleteTextStyleDeclaration,\n previousChar: string | undefined,\n prevCharStyle: CompleteTextStyleDeclaration | Record,\n ) {\n const fontCache = cache.getFontCache(charStyle),\n fontDeclaration = this._getFontDeclaration(charStyle),\n couple = previousChar + _char,\n stylesAreEqual =\n previousChar &&\n fontDeclaration === this._getFontDeclaration(prevCharStyle),\n fontMultiplier = charStyle.fontSize / this.CACHE_FONT_SIZE;\n let width: number | undefined,\n coupleWidth: number | undefined,\n previousWidth: number | undefined,\n kernedWidth: number | undefined;\n\n if (previousChar && fontCache[previousChar] !== undefined) {\n previousWidth = fontCache[previousChar];\n }\n if (fontCache[_char] !== undefined) {\n kernedWidth = width = fontCache[_char];\n }\n if (stylesAreEqual && fontCache[couple] !== undefined) {\n coupleWidth = fontCache[couple];\n kernedWidth = coupleWidth - previousWidth!;\n }\n if (\n width === undefined ||\n previousWidth === undefined ||\n coupleWidth === undefined\n ) {\n const ctx = getMeasuringContext()!;\n // send a TRUE to specify measuring font size CACHE_FONT_SIZE\n this._setTextStyles(ctx, charStyle, true);\n if (width === undefined) {\n kernedWidth = width = ctx.measureText(_char).width;\n fontCache[_char] = width;\n }\n if (previousWidth === undefined && stylesAreEqual && previousChar) {\n previousWidth = ctx.measureText(previousChar).width;\n fontCache[previousChar] = previousWidth;\n }\n if (stylesAreEqual && coupleWidth === undefined) {\n // we can measure the kerning couple and subtract the width of the previous character\n coupleWidth = ctx.measureText(couple).width;\n fontCache[couple] = coupleWidth;\n // safe to use the non-null since if undefined we defined it before.\n kernedWidth = coupleWidth - previousWidth!;\n }\n }\n return {\n width: width * fontMultiplier,\n kernedWidth: kernedWidth! * fontMultiplier,\n };\n }\n\n /**\n * Computes height of character at given position\n * @param {Number} line the line index number\n * @param {Number} _char the character index number\n * @return {Number} fontSize of the character\n */\n getHeightOfChar(line: number, _char: number): number {\n return this.getValueOfPropertyAt(line, _char, 'fontSize');\n }\n\n /**\n * measure a text line measuring all characters.\n * @param {Number} lineIndex line number\n */\n measureLine(lineIndex: number) {\n const lineInfo = this._measureLine(lineIndex);\n if (this.charSpacing !== 0) {\n lineInfo.width -= this._getWidthOfCharSpacing();\n }\n if (lineInfo.width < 0) {\n lineInfo.width = 0;\n }\n return lineInfo;\n }\n\n /**\n * measure every grapheme of a line, populating __charBounds\n * @param {Number} lineIndex\n * @return {Object} object.width total width of characters\n * @return {Object} object.numOfSpaces length of chars that match this._reSpacesAndTabs\n */\n _measureLine(lineIndex: number) {\n let width = 0,\n prevGrapheme: string | undefined,\n graphemeInfo: GraphemeBBox | undefined;\n\n const reverse = this.pathSide === RIGHT,\n path = this.path,\n line = this._textLines[lineIndex],\n llength = line.length,\n lineBounds = new Array(llength);\n this.__charBounds[lineIndex] = lineBounds;\n for (let i = 0; i < llength; i++) {\n const grapheme = line[i];\n graphemeInfo = this._getGraphemeBox(grapheme, lineIndex, i, prevGrapheme);\n lineBounds[i] = graphemeInfo;\n width += graphemeInfo.kernedWidth;\n prevGrapheme = grapheme;\n }\n // this latest bound box represent the last character of the line\n // to simplify cursor handling in interactive mode.\n lineBounds[llength] = {\n left: graphemeInfo ? graphemeInfo.left + graphemeInfo.width : 0,\n width: 0,\n kernedWidth: 0,\n height: this.fontSize,\n deltaY: 0,\n } as GraphemeBBox;\n if (path && path.segmentsInfo) {\n let positionInPath = 0;\n const totalPathLength =\n path.segmentsInfo[path.segmentsInfo.length - 1].length;\n switch (this.textAlign) {\n case LEFT:\n positionInPath = reverse ? totalPathLength - width : 0;\n break;\n case CENTER:\n positionInPath = (totalPathLength - width) / 2;\n break;\n case RIGHT:\n positionInPath = reverse ? 0 : totalPathLength - width;\n break;\n //todo - add support for justify\n }\n positionInPath += this.pathStartOffset * (reverse ? -1 : 1);\n for (\n let i = reverse ? llength - 1 : 0;\n reverse ? i >= 0 : i < llength;\n reverse ? i-- : i++\n ) {\n graphemeInfo = lineBounds[i];\n if (positionInPath > totalPathLength) {\n positionInPath %= totalPathLength;\n } else if (positionInPath < 0) {\n positionInPath += totalPathLength;\n }\n // it would probably much faster to send all the grapheme position for a line\n // and calculate path position/angle at once.\n this._setGraphemeOnPath(positionInPath, graphemeInfo);\n positionInPath += graphemeInfo.kernedWidth;\n }\n }\n return { width: width, numOfSpaces: 0 };\n }\n\n /**\n * Calculate the angle and the left,top position of the char that follow a path.\n * It appends it to graphemeInfo to be reused later at rendering\n * @private\n * @param {Number} positionInPath to be measured\n * @param {GraphemeBBox} graphemeInfo current grapheme box information\n * @param {Object} startingPoint position of the point\n */\n _setGraphemeOnPath(positionInPath: number, graphemeInfo: GraphemeBBox) {\n const centerPosition = positionInPath + graphemeInfo.kernedWidth / 2,\n path = this.path!;\n\n // we are at currentPositionOnPath. we want to know what point on the path is.\n const info = getPointOnPath(path.path, centerPosition, path.segmentsInfo)!;\n graphemeInfo.renderLeft = info.x - path.pathOffset.x;\n graphemeInfo.renderTop = info.y - path.pathOffset.y;\n graphemeInfo.angle = info.angle + (this.pathSide === RIGHT ? Math.PI : 0);\n }\n\n /**\n *\n * @param {String} grapheme to be measured\n * @param {Number} lineIndex index of the line where the char is\n * @param {Number} charIndex position in the line\n * @param {String} [prevGrapheme] character preceding the one to be measured\n * @returns {GraphemeBBox} grapheme bbox\n */\n _getGraphemeBox(\n grapheme: string,\n lineIndex: number,\n charIndex: number,\n prevGrapheme?: string,\n skipLeft?: boolean,\n ): GraphemeBBox {\n const style = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n prevStyle = prevGrapheme\n ? this.getCompleteStyleDeclaration(lineIndex, charIndex - 1)\n : {},\n info = this._measureChar(grapheme, style, prevGrapheme, prevStyle);\n let kernedWidth = info.kernedWidth,\n width = info.width,\n charSpacing;\n\n if (this.charSpacing !== 0) {\n charSpacing = this._getWidthOfCharSpacing();\n width += charSpacing;\n kernedWidth += charSpacing;\n }\n\n const box: GraphemeBBox = {\n width,\n left: 0,\n height: style.fontSize,\n kernedWidth,\n deltaY: style.deltaY,\n };\n if (charIndex > 0 && !skipLeft) {\n const previousBox = this.__charBounds[lineIndex][charIndex - 1];\n box.left =\n previousBox.left + previousBox.width + info.kernedWidth - info.width;\n }\n return box;\n }\n\n /**\n * Calculate height of line at 'lineIndex'\n * @param {Number} lineIndex index of line to calculate\n * @return {Number}\n */\n getHeightOfLine(lineIndex: number): number {\n if (this.__lineHeights[lineIndex]) {\n return this.__lineHeights[lineIndex];\n }\n\n // char 0 is measured before the line cycle because it needs to char\n // emptylines\n let maxHeight = this.getHeightOfChar(lineIndex, 0);\n for (let i = 1, len = this._textLines[lineIndex].length; i < len; i++) {\n maxHeight = Math.max(this.getHeightOfChar(lineIndex, i), maxHeight);\n }\n\n return (this.__lineHeights[lineIndex] =\n maxHeight * this.lineHeight * this._fontSizeMult);\n }\n\n /**\n * Calculate text box height\n */\n calcTextHeight() {\n let lineHeight,\n height = 0;\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n lineHeight = this.getHeightOfLine(i);\n height += i === len - 1 ? lineHeight / this.lineHeight : lineHeight;\n }\n return height;\n }\n\n /**\n * @private\n * @return {Number} Left offset\n */\n _getLeftOffset(): number {\n return this.direction === 'ltr' ? -this.width / 2 : this.width / 2;\n }\n\n /**\n * @private\n * @return {Number} Top offset\n */\n _getTopOffset(): number {\n return -this.height / 2;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n */\n _renderTextCommon(\n ctx: CanvasRenderingContext2D,\n method: 'fillText' | 'strokeText',\n ) {\n ctx.save();\n let lineHeights = 0;\n const left = this._getLeftOffset(),\n top = this._getTopOffset();\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i),\n maxHeight = heightOfLine / this.lineHeight,\n leftOffset = this._getLineLeftOffset(i);\n this._renderTextLine(\n method,\n ctx,\n this._textLines[i],\n left + leftOffset,\n top + lineHeights + maxHeight,\n i,\n );\n lineHeights += heightOfLine;\n }\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextFill(ctx: CanvasRenderingContext2D) {\n if (!this.fill && !this.styleHas(FILL)) {\n return;\n }\n\n this._renderTextCommon(ctx, 'fillText');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextStroke(ctx: CanvasRenderingContext2D) {\n if ((!this.stroke || this.strokeWidth === 0) && this.isEmptyStyles()) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n this._setLineDash(ctx, this.strokeDashArray);\n ctx.beginPath();\n this._renderTextCommon(ctx, 'strokeText');\n ctx.closePath();\n ctx.restore();\n }\n\n /**\n * @private\n * @param {String} method fillText or strokeText.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Array} line Content of the line, splitted in an array by grapheme\n * @param {Number} left\n * @param {Number} top\n * @param {Number} lineIndex\n */\n _renderChars(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n line: Array,\n left: number,\n top: number,\n lineIndex: number,\n ) {\n const lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.includes(JUSTIFY),\n path = this.path,\n shortCut =\n !isJustify &&\n this.charSpacing === 0 &&\n this.isEmptyStyles(lineIndex) &&\n !path,\n isLtr = this.direction === 'ltr',\n sign = this.direction === 'ltr' ? 1 : -1,\n // this was changed in the PR #7674\n // currentDirection = ctx.canvas.getAttribute('dir');\n currentDirection = ctx.direction;\n\n let actualStyle,\n nextStyle,\n charsToRender = '',\n charBox,\n boxWidth = 0,\n timeToRender,\n drawingLeft;\n\n ctx.save();\n if (currentDirection !== this.direction) {\n ctx.canvas.setAttribute('dir', isLtr ? 'ltr' : 'rtl');\n ctx.direction = isLtr ? 'ltr' : 'rtl';\n ctx.textAlign = isLtr ? LEFT : RIGHT;\n }\n top -= (lineHeight * this._fontSizeFraction) / this.lineHeight;\n if (shortCut) {\n // render all the line in one pass without checking\n // drawingLeft = isLtr ? left : left - this.getLineWidth(lineIndex);\n this._renderChar(method, ctx, lineIndex, 0, line.join(''), left, top);\n ctx.restore();\n return;\n }\n for (let i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing || path;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i] as Required;\n if (boxWidth === 0) {\n left += sign * (charBox.kernedWidth - charBox.width);\n boxWidth += charBox.width;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle =\n actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = hasStyleChanged(actualStyle, nextStyle, false);\n }\n if (timeToRender) {\n if (path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n this._renderChar(\n method,\n ctx,\n lineIndex,\n i,\n charsToRender,\n -boxWidth / 2,\n 0,\n );\n ctx.restore();\n } else {\n drawingLeft = left;\n this._renderChar(\n method,\n ctx,\n lineIndex,\n i,\n charsToRender,\n drawingLeft,\n top,\n );\n }\n charsToRender = '';\n actualStyle = nextStyle;\n left += sign * boxWidth;\n boxWidth = 0;\n }\n }\n ctx.restore();\n }\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {TFiller} filler a fabric gradient instance\n * @return {CanvasPattern} a pattern to use as fill/stroke style\n */\n _applyPatternGradientTransformText(filler: TFiller) {\n // TODO: verify compatibility with strokeUniform\n const width = this.width + this.strokeWidth,\n height = this.height + this.strokeWidth,\n pCanvas = createCanvasElementFor({\n width,\n height,\n }),\n pCtx = pCanvas.getContext('2d')!;\n pCanvas.width = width;\n pCanvas.height = height;\n pCtx.beginPath();\n pCtx.moveTo(0, 0);\n pCtx.lineTo(width, 0);\n pCtx.lineTo(width, height);\n pCtx.lineTo(0, height);\n pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.fillStyle = filler.toLive(pCtx)!;\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fill();\n return pCtx.createPattern(pCanvas, 'no-repeat')!;\n }\n\n handleFiller(\n ctx: CanvasRenderingContext2D,\n property: `${T}Style`,\n filler: TFiller | string,\n ): { offsetX: number; offsetY: number } {\n let offsetX: number, offsetY: number;\n if (isFiller(filler)) {\n if (\n (filler as Gradient<'linear'>).gradientUnits === 'percentage' ||\n (filler as Gradient<'linear'>).gradientTransform ||\n (filler as Pattern).patternTransform\n ) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n offsetX = -this.width / 2;\n offsetY = -this.height / 2;\n ctx.translate(offsetX, offsetY);\n ctx[property] = this._applyPatternGradientTransformText(filler);\n return { offsetX, offsetY };\n } else {\n // is a simple gradient or pattern\n ctx[property] = filler.toLive(ctx)!;\n return this._applyPatternGradientTransform(ctx, filler);\n }\n } else {\n // is a color\n ctx[property] = filler;\n }\n return { offsetX: 0, offsetY: 0 };\n }\n\n /**\n * This function prepare the canvas for a stroke style, and stroke and strokeWidth\n * need to be sent in as defined\n * @param {CanvasRenderingContext2D} ctx\n * @param {CompleteTextStyleDeclaration} style with stroke and strokeWidth defined\n * @returns\n */\n _setStrokeStyles(\n ctx: CanvasRenderingContext2D,\n {\n stroke,\n strokeWidth,\n }: Pick,\n ) {\n ctx.lineWidth = strokeWidth;\n ctx.lineCap = this.strokeLineCap;\n ctx.lineDashOffset = this.strokeDashOffset;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.miterLimit = this.strokeMiterLimit;\n return this.handleFiller(ctx, 'strokeStyle', stroke!);\n }\n\n /**\n * This function prepare the canvas for a ill style, and fill\n * need to be sent in as defined\n * @param {CanvasRenderingContext2D} ctx\n * @param {CompleteTextStyleDeclaration} style with ill defined\n * @returns\n */\n _setFillStyles(ctx: CanvasRenderingContext2D, { fill }: Pick) {\n return this.handleFiller(ctx, 'fillStyle', fill!);\n }\n\n /**\n * @private\n * @param {String} method\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {String} _char\n * @param {Number} left Left coordinate\n * @param {Number} top Top coordinate\n * @param {Number} lineHeight Height of the line\n */\n _renderChar(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n lineIndex: number,\n charIndex: number,\n _char: string,\n left: number,\n top: number,\n ) {\n const decl = this._getStyleDeclaration(lineIndex, charIndex),\n fullDecl = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n shouldFill = method === 'fillText' && fullDecl.fill,\n shouldStroke =\n method === 'strokeText' && fullDecl.stroke && fullDecl.strokeWidth;\n\n if (!shouldStroke && !shouldFill) {\n return;\n }\n ctx.save();\n\n ctx.font = this._getFontDeclaration(fullDecl);\n\n if (decl.textBackgroundColor) {\n this._removeShadow(ctx);\n }\n if (decl.deltaY) {\n top += decl.deltaY;\n }\n\n if (shouldFill) {\n const fillOffsets = this._setFillStyles(ctx, fullDecl);\n ctx.fillText(\n _char,\n left - fillOffsets.offsetX,\n top - fillOffsets.offsetY,\n );\n }\n\n if (shouldStroke) {\n const strokeOffsets = this._setStrokeStyles(ctx, fullDecl);\n ctx.strokeText(\n _char,\n left - strokeOffsets.offsetX,\n top - strokeOffsets.offsetY,\n );\n }\n\n ctx.restore();\n }\n\n /**\n * Turns the character into a 'superior figure' (i.e. 'superscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n */\n setSuperscript(start: number, end: number) {\n this._setScript(start, end, this.superscript);\n }\n\n /**\n * Turns the character into an 'inferior figure' (i.e. 'subscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n */\n setSubscript(start: number, end: number) {\n this._setScript(start, end, this.subscript);\n }\n\n /**\n * Applies 'schema' at given position\n * @private\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @param {Number} schema\n */\n protected _setScript(\n start: number,\n end: number,\n schema: {\n size: number;\n baseline: number;\n },\n ) {\n const loc = this.get2DCursorLocation(start, true),\n fontSize = this.getValueOfPropertyAt(\n loc.lineIndex,\n loc.charIndex,\n 'fontSize',\n ),\n dy = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'deltaY'),\n style = {\n fontSize: fontSize * schema.size,\n deltaY: dy + fontSize * schema.baseline,\n };\n this.setSelectionStyles(style, start, end);\n }\n\n /**\n * @private\n * @param {Number} lineIndex index text line\n * @return {Number} Line left offset\n */\n _getLineLeftOffset(lineIndex: number): number {\n const lineWidth = this.getLineWidth(lineIndex),\n lineDiff = this.width - lineWidth,\n textAlign = this.textAlign,\n direction = this.direction,\n isEndOfWrapping = this.isEndOfWrapping(lineIndex);\n let leftOffset = 0;\n if (\n textAlign === JUSTIFY ||\n (textAlign === JUSTIFY_CENTER && !isEndOfWrapping) ||\n (textAlign === JUSTIFY_RIGHT && !isEndOfWrapping) ||\n (textAlign === JUSTIFY_LEFT && !isEndOfWrapping)\n ) {\n return 0;\n }\n if (textAlign === CENTER) {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === RIGHT) {\n leftOffset = lineDiff;\n }\n if (textAlign === JUSTIFY_CENTER) {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === JUSTIFY_RIGHT) {\n leftOffset = lineDiff;\n }\n if (direction === 'rtl') {\n if (\n textAlign === RIGHT ||\n textAlign === JUSTIFY ||\n textAlign === JUSTIFY_RIGHT\n ) {\n leftOffset = 0;\n } else if (textAlign === LEFT || textAlign === JUSTIFY_LEFT) {\n leftOffset = -lineDiff;\n } else if (textAlign === CENTER || textAlign === JUSTIFY_CENTER) {\n leftOffset = -lineDiff / 2;\n }\n }\n return leftOffset;\n }\n\n /**\n * @private\n */\n _clearCache() {\n this._forceClearCache = false;\n this.__lineWidths = [];\n this.__lineHeights = [];\n this.__charBounds = [];\n }\n\n /**\n * Measure a single line given its index. Used to calculate the initial\n * text bounding box. The values are calculated and stored in __lineWidths cache.\n * @private\n * @param {Number} lineIndex line number\n * @return {Number} Line width\n */\n getLineWidth(lineIndex: number): number {\n if (this.__lineWidths[lineIndex] !== undefined) {\n return this.__lineWidths[lineIndex];\n }\n\n const { width } = this.measureLine(lineIndex);\n this.__lineWidths[lineIndex] = width;\n return width;\n }\n\n _getWidthOfCharSpacing() {\n if (this.charSpacing !== 0) {\n return (this.fontSize * this.charSpacing) / 1000;\n }\n return 0;\n }\n\n /**\n * Retrieves the value of property at given character position\n * @param {Number} lineIndex the line number\n * @param {Number} charIndex the character number\n * @param {String} property the property name\n * @returns the value of 'property'\n */\n getValueOfPropertyAt(\n lineIndex: number,\n charIndex: number,\n property: T,\n ): this[T] {\n const charStyle = this._getStyleDeclaration(lineIndex, charIndex);\n return (charStyle[property] ?? this[property]) as this[T];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextDecoration(\n ctx: CanvasRenderingContext2D,\n type: 'underline' | 'linethrough' | 'overline',\n ) {\n if (!this[type] && !this.styleHas(type)) {\n return;\n }\n let topOffset = this._getTopOffset();\n const leftOffset = this._getLeftOffset(),\n path = this.path,\n charSpacing = this._getWidthOfCharSpacing(),\n offsetY = this.offsets[type];\n\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i);\n if (!this[type] && !this.styleHas(type, i)) {\n topOffset += heightOfLine;\n continue;\n }\n const line = this._textLines[i];\n const maxHeight = heightOfLine / this.lineHeight;\n const lineLeftOffset = this._getLineLeftOffset(i);\n let boxStart = 0;\n let boxWidth = 0;\n let lastDecoration = this.getValueOfPropertyAt(i, 0, type);\n let lastFill = this.getValueOfPropertyAt(i, 0, FILL);\n let currentDecoration;\n let currentFill;\n const top = topOffset + maxHeight * (1 - this._fontSizeFraction);\n let size = this.getHeightOfChar(i, 0);\n let dy = this.getValueOfPropertyAt(i, 0, 'deltaY');\n for (let j = 0, jlen = line.length; j < jlen; j++) {\n const charBox = this.__charBounds[i][j] as Required;\n currentDecoration = this.getValueOfPropertyAt(i, j, type);\n currentFill = this.getValueOfPropertyAt(i, j, FILL);\n const currentSize = this.getHeightOfChar(i, j);\n const currentDy = this.getValueOfPropertyAt(i, j, 'deltaY');\n if (path && currentDecoration && currentFill) {\n ctx.save();\n // bug? verify lastFill is a valid fill here.\n ctx.fillStyle = lastFill as string;\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillRect(\n -charBox.kernedWidth / 2,\n offsetY * currentSize + currentDy,\n charBox.kernedWidth,\n this.fontSize / 15,\n );\n ctx.restore();\n } else if (\n (currentDecoration !== lastDecoration ||\n currentFill !== lastFill ||\n currentSize !== size ||\n currentDy !== dy) &&\n boxWidth > 0\n ) {\n let drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n if (lastDecoration && lastFill) {\n // bug? verify lastFill is a valid fill here.\n ctx.fillStyle = lastFill as string;\n ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth,\n this.fontSize / 15,\n );\n }\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastDecoration = currentDecoration;\n lastFill = currentFill;\n size = currentSize;\n dy = currentDy;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n }\n let drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentFill as string;\n currentDecoration &&\n currentFill &&\n ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth - charSpacing,\n this.fontSize / 15,\n );\n topOffset += heightOfLine;\n }\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * return font declaration string for canvas context\n * @param {Object} [styleObject] object\n * @returns {String} font declaration formatted for canvas context.\n */\n _getFontDeclaration(\n {\n fontFamily = this.fontFamily,\n fontStyle = this.fontStyle,\n fontWeight = this.fontWeight,\n fontSize = this.fontSize,\n }: Partial<\n Pick<\n TextStyleDeclaration,\n 'fontFamily' | 'fontStyle' | 'fontWeight' | 'fontSize'\n >\n > = {},\n forMeasuring?: boolean,\n ): string {\n const parsedFontFamily =\n fontFamily.includes(\"'\") ||\n fontFamily.includes('\"') ||\n fontFamily.includes(',') ||\n FabricText.genericFonts.includes(fontFamily.toLowerCase())\n ? fontFamily\n : `\"${fontFamily}\"`;\n return [\n fontStyle,\n fontWeight,\n `${forMeasuring ? this.CACHE_FONT_SIZE : fontSize}px`,\n parsedFontFamily,\n ].join(' ');\n }\n\n /**\n * Renders text instance on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n if (!this.visible) {\n return;\n }\n if (\n this.canvas &&\n this.canvas.skipOffscreen &&\n !this.group &&\n !this.isOnScreen()\n ) {\n return;\n }\n if (this._forceClearCache) {\n this.initDimensions();\n }\n super.render(ctx);\n }\n\n /**\n * Override this method to customize grapheme splitting\n * @todo the util `graphemeSplit` needs to be injectable in some way.\n * is more comfortable to inject the correct util rather than having to override text\n * in the middle of the prototype chain\n * @param {string} value\n * @returns {string[]} array of graphemes\n */\n graphemeSplit(value: string): string[] {\n return graphemeSplit(value);\n }\n\n /**\n * Returns the text as an array of lines.\n * @param {String} text text to split\n * @returns Lines in the text\n */\n _splitTextIntoLines(text: string): TextLinesInfo {\n const lines = text.split(this._reNewline),\n newLines = new Array(lines.length),\n newLine = ['\\n'];\n let newText: string[] = [];\n for (let i = 0; i < lines.length; i++) {\n newLines[i] = this.graphemeSplit(lines[i]);\n newText = newText.concat(newLines[i], newLine);\n }\n newText.pop();\n return {\n _unwrappedLines: newLines,\n lines: lines,\n graphemeText: newText,\n graphemeLines: newLines,\n };\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject([...additionalProps, ...propertiesToInclude] as K[]),\n styles: stylesToArray(this.styles, this.text),\n ...(this.path ? { path: this.path.toObject() } : {}),\n };\n }\n\n set(key: string | any, value?: any) {\n const { textLayoutProperties } = this.constructor as typeof FabricText;\n super.set(key, value);\n let needsDims = false;\n let isAddingPath = false;\n if (typeof key === 'object') {\n for (const _key in key) {\n if (_key === 'path') {\n this.setPathInfo();\n }\n needsDims = needsDims || textLayoutProperties.includes(_key);\n isAddingPath = isAddingPath || _key === 'path';\n }\n } else {\n needsDims = textLayoutProperties.includes(key);\n isAddingPath = key === 'path';\n }\n if (isAddingPath) {\n this.setPathInfo();\n }\n if (needsDims && this.initialized) {\n this.initDimensions();\n this.setCoords();\n }\n return this;\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity\n */\n complexity(): number {\n return 1;\n }\n\n /**\n * List of generic font families\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/font-family#generic-name\n */\n static genericFonts = [\n 'serif',\n 'sans-serif',\n 'monospace',\n 'cursive',\n 'fantasy',\n 'system-ui',\n 'ui-serif',\n 'ui-sans-serif',\n 'ui-monospace',\n 'ui-rounded',\n 'math',\n 'emoji',\n 'fangsong',\n ];\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link FabricText.fromElement})\n * @static\n * @memberOf Text\n * @see: http://www.w3.org/TR/SVG/text.html#TextElement\n */\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(\n 'x',\n 'y',\n 'dx',\n 'dy',\n 'font-family',\n 'font-style',\n 'font-weight',\n 'font-size',\n 'letter-spacing',\n 'text-decoration',\n 'text-anchor',\n );\n\n /**\n * Returns FabricText instance from an SVG element (not yet implemented)\n * @static\n * @memberOf Text\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const parsedAttributes = parseAttributes(\n element,\n FabricText.ATTRIBUTE_NAMES,\n cssRules,\n );\n\n const {\n textAnchor = LEFT as typeof LEFT | typeof CENTER | typeof RIGHT,\n textDecoration = '',\n dx = 0,\n dy = 0,\n top = 0,\n left = 0,\n fontSize = DEFAULT_SVG_FONT_SIZE,\n strokeWidth = 1,\n ...restOfOptions\n } = { ...options, ...parsedAttributes };\n\n const textContent = (element.textContent || '')\n .replace(/^\\s+|\\s+$|\\n+/g, '')\n .replace(/\\s+/g, ' ');\n\n // this code here is probably the usual issue for SVG center find\n // this can later looked at again and probably removed.\n\n const text = new this(textContent, {\n left: left + dx,\n top: top + dy,\n underline: textDecoration.includes('underline'),\n overline: textDecoration.includes('overline'),\n linethrough: textDecoration.includes('line-through'),\n // we initialize this as 0\n strokeWidth: 0,\n fontSize,\n ...restOfOptions,\n }),\n textHeightScaleFactor = text.getScaledHeight() / text.height,\n lineHeightDiff =\n (text.height + text.strokeWidth) * text.lineHeight - text.height,\n scaledDiff = lineHeightDiff * textHeightScaleFactor,\n textHeight = text.getScaledHeight() + scaledDiff;\n\n let offX = 0;\n /*\n Adjust positioning:\n x/y attributes in SVG correspond to the bottom-left corner of text bounding box\n fabric output by default at top, left.\n */\n if (textAnchor === CENTER) {\n offX = text.getScaledWidth() / 2;\n }\n if (textAnchor === RIGHT) {\n offX = text.getScaledWidth();\n }\n text.set({\n left: text.left - offX,\n top:\n text.top -\n (textHeight - text.fontSize * (0.07 + text._fontSizeFraction)) /\n text.lineHeight,\n strokeWidth,\n });\n return text;\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns FabricText instance from an object representation\n * @param {Object} object plain js Object to create an instance from\n * @returns {Promise}\n */\n static fromObject<\n T extends TOptions,\n S extends FabricText,\n >(object: T) {\n return this._fromObject(\n {\n ...object,\n styles: stylesFromArray(object.styles || {}, object.text),\n },\n {\n extraParam: 'text',\n },\n );\n }\n}\n\napplyMixins(FabricText, [TextSVGExportMixin]);\nclassRegistry.setClass(FabricText);\nclassRegistry.setSVGClass(FabricText);\n","import type {\n DragEventData,\n DropEventData,\n TPointerEvent,\n} from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport type { IText } from './IText';\nimport { setStyle } from '../../util/dom_style';\nimport { cloneStyles } from '../../util/internals/cloneStyles';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { CHANGED, NONE } from '../../constants';\n\n/**\n * #### Dragging IText/Textbox Lifecycle\n * - {@link start} is called from `mousedown` {@link IText#_mouseDownHandler} and determines if dragging should start by testing {@link isPointerOverSelection}\n * - if true `mousedown` {@link IText#_mouseDownHandler} is blocked to keep selection\n * - if the pointer moves, canvas fires numerous mousemove {@link Canvas#_onMouseMove} that we make sure **aren't** prevented ({@link IText#shouldStartDragging}) in order for the window to start a drag session\n * - once/if the session starts canvas calls {@link onDragStart} on the active object to determine if dragging should occur\n * - canvas fires relevant drag events that are handled by the handlers defined in this scope\n * - {@link end} is called from `mouseup` {@link IText#mouseUpHandler}, blocking IText default click behavior\n * - in case the drag session didn't occur, {@link end} handles a click, since logic to do so was blocked during `mousedown`\n */\nexport class DraggableTextDelegate {\n readonly target: IText;\n private __mouseDownInPlace = false;\n private __dragStartFired = false;\n private __isDraggingOver = false;\n private __dragStartSelection?: {\n selectionStart: number;\n selectionEnd: number;\n };\n private __dragImageDisposer?: VoidFunction;\n private _dispose?: () => void;\n\n constructor(target: IText) {\n this.target = target;\n const disposers = [\n this.target.on('dragenter', this.dragEnterHandler.bind(this)),\n this.target.on('dragover', this.dragOverHandler.bind(this)),\n this.target.on('dragleave', this.dragLeaveHandler.bind(this)),\n this.target.on('dragend', this.dragEndHandler.bind(this)),\n this.target.on('drop', this.dropHandler.bind(this)),\n ];\n this._dispose = () => {\n disposers.forEach((d) => d());\n this._dispose = undefined;\n };\n }\n\n isPointerOverSelection(e: TPointerEvent) {\n const target = this.target;\n const newSelection = target.getSelectionStartFromPointer(e);\n return (\n target.isEditing &&\n newSelection >= target.selectionStart &&\n newSelection <= target.selectionEnd &&\n target.selectionStart < target.selectionEnd\n );\n }\n\n /**\n * @public override this method to disable dragging and default to mousedown logic\n */\n start(e: TPointerEvent) {\n return (this.__mouseDownInPlace = this.isPointerOverSelection(e));\n }\n\n /**\n * @public override this method to disable dragging without discarding selection\n */\n isActive() {\n return this.__mouseDownInPlace;\n }\n\n /**\n * Ends interaction and sets cursor in case of a click\n * @returns true if was active\n */\n end(e: TPointerEvent) {\n const active = this.isActive();\n if (active && !this.__dragStartFired) {\n // mousedown has been blocked since `active` is true => cursor has not been set.\n // `__dragStartFired` is false => dragging didn't occur, pointer didn't move and is over selection.\n // meaning this is actually a click, `active` is a false positive.\n this.target.setCursorByClick(e);\n this.target.initDelayedCursor(true);\n }\n this.__mouseDownInPlace = false;\n this.__dragStartFired = false;\n this.__isDraggingOver = false;\n return active;\n }\n\n getDragStartSelection() {\n return this.__dragStartSelection;\n }\n\n /**\n * Override to customize the drag image\n * https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/setDragImage\n */\n setDragImage(\n e: DragEvent,\n {\n selectionStart,\n selectionEnd,\n }: {\n selectionStart: number;\n selectionEnd: number;\n },\n ) {\n const target = this.target;\n const canvas = target.canvas!;\n const flipFactor = new Point(target.flipX ? -1 : 1, target.flipY ? -1 : 1);\n const boundaries = target._getCursorBoundaries(selectionStart);\n const selectionPosition = new Point(\n boundaries.left + boundaries.leftOffset,\n boundaries.top + boundaries.topOffset,\n ).multiply(flipFactor);\n const pos = selectionPosition.transform(target.calcTransformMatrix());\n const pointer = canvas.getScenePoint(e);\n const diff = pointer.subtract(pos);\n const retinaScaling = target.getCanvasRetinaScaling();\n const bbox = target.getBoundingRect();\n const correction = pos.subtract(new Point(bbox.left, bbox.top));\n const vpt = canvas.viewportTransform;\n const offset = correction.add(diff).transform(vpt, true);\n // prepare instance for drag image snapshot by making all non selected text invisible\n const bgc = target.backgroundColor;\n const styles = cloneStyles(target.styles);\n target.backgroundColor = '';\n const styleOverride = {\n stroke: 'transparent',\n fill: 'transparent',\n textBackgroundColor: 'transparent',\n };\n target.setSelectionStyles(styleOverride, 0, selectionStart);\n target.setSelectionStyles(styleOverride, selectionEnd, target.text.length);\n target.dirty = true;\n const dragImage = target.toCanvasElement({\n enableRetinaScaling: canvas.enableRetinaScaling,\n viewportTransform: true,\n });\n // restore values\n target.backgroundColor = bgc;\n target.styles = styles;\n target.dirty = true;\n // position drag image offscreen\n setStyle(dragImage, {\n position: 'fixed',\n left: `${-dragImage.width}px`,\n border: NONE,\n width: `${dragImage.width / retinaScaling}px`,\n height: `${dragImage.height / retinaScaling}px`,\n });\n this.__dragImageDisposer && this.__dragImageDisposer();\n this.__dragImageDisposer = () => {\n dragImage.remove();\n };\n getDocumentFromElement(\n (e.target || this.target.hiddenTextarea)! as HTMLElement,\n ).body.appendChild(dragImage);\n e.dataTransfer?.setDragImage(dragImage, offset.x, offset.y);\n }\n\n /**\n * @returns {boolean} determines whether {@link target} should/shouldn't become a drag source\n */\n onDragStart(e: DragEvent): boolean {\n this.__dragStartFired = true;\n const target = this.target;\n const active = this.isActive();\n if (active && e.dataTransfer) {\n const selection = (this.__dragStartSelection = {\n selectionStart: target.selectionStart,\n selectionEnd: target.selectionEnd,\n });\n const value = target._text\n .slice(selection.selectionStart, selection.selectionEnd)\n .join('');\n const data = { text: target.text, value, ...selection };\n e.dataTransfer.setData('text/plain', value);\n e.dataTransfer.setData(\n 'application/fabric',\n JSON.stringify({\n value: value,\n styles: target.getSelectionStyles(\n selection.selectionStart,\n selection.selectionEnd,\n true,\n ),\n }),\n );\n e.dataTransfer.effectAllowed = 'copyMove';\n this.setDragImage(e, data);\n }\n target.abortCursorAnimation();\n return active;\n }\n\n /**\n * use {@link targetCanDrop} to respect overriding\n * @returns {boolean} determines whether {@link target} should/shouldn't become a drop target\n */\n canDrop(e: DragEvent): boolean {\n if (\n this.target.editable &&\n !this.target.getActiveControl() &&\n !e.defaultPrevented\n ) {\n if (this.isActive() && this.__dragStartSelection) {\n // drag source trying to drop over itself\n // allow dropping only outside of drag start selection\n const index = this.target.getSelectionStartFromPointer(e);\n const dragStartSelection = this.__dragStartSelection;\n return (\n index < dragStartSelection.selectionStart ||\n index > dragStartSelection.selectionEnd\n );\n }\n return true;\n }\n return false;\n }\n\n /**\n * in order to respect overriding {@link IText#canDrop} we call that instead of calling {@link canDrop} directly\n */\n protected targetCanDrop(e: DragEvent) {\n return this.target.canDrop(e);\n }\n\n dragEnterHandler({ e }: DragEventData) {\n const canDrop = this.targetCanDrop(e);\n if (!this.__isDraggingOver && canDrop) {\n this.__isDraggingOver = true;\n }\n }\n\n dragOverHandler(ev: DragEventData) {\n const { e } = ev;\n const canDrop = this.targetCanDrop(e);\n if (!this.__isDraggingOver && canDrop) {\n this.__isDraggingOver = true;\n } else if (this.__isDraggingOver && !canDrop) {\n // drop state has changed\n this.__isDraggingOver = false;\n }\n if (this.__isDraggingOver) {\n // can be dropped, inform browser\n e.preventDefault();\n // inform event subscribers\n ev.canDrop = true;\n ev.dropTarget = this.target;\n }\n }\n\n dragLeaveHandler() {\n if (this.__isDraggingOver || this.isActive()) {\n this.__isDraggingOver = false;\n }\n }\n\n /**\n * Override the `text/plain | application/fabric` types of {@link DragEvent#dataTransfer}\n * in order to change the drop value or to customize styling respectively, by listening to the `drop:before` event\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#performing_a_drop\n */\n dropHandler(ev: DropEventData) {\n const { e } = ev;\n const didDrop = e.defaultPrevented;\n this.__isDraggingOver = false;\n // inform browser that the drop has been accepted\n e.preventDefault();\n let insert = e.dataTransfer?.getData('text/plain');\n if (insert && !didDrop) {\n const target = this.target;\n const canvas = target.canvas!;\n let insertAt = target.getSelectionStartFromPointer(e);\n const { styles } = (\n e.dataTransfer!.types.includes('application/fabric')\n ? JSON.parse(e.dataTransfer!.getData('application/fabric'))\n : {}\n ) as { styles: TextStyleDeclaration[] };\n const trailing = insert[Math.max(0, insert.length - 1)];\n const selectionStartOffset = 0;\n // drag and drop in same instance\n if (this.__dragStartSelection) {\n const selectionStart = this.__dragStartSelection.selectionStart;\n const selectionEnd = this.__dragStartSelection.selectionEnd;\n if (insertAt > selectionStart && insertAt <= selectionEnd) {\n insertAt = selectionStart;\n } else if (insertAt > selectionEnd) {\n insertAt -= selectionEnd - selectionStart;\n }\n target.removeChars(selectionStart, selectionEnd);\n // prevent `dragend` from handling event\n delete this.__dragStartSelection;\n }\n // remove redundant line break\n if (\n target._reNewline.test(trailing) &&\n (target._reNewline.test(target._text[insertAt]) ||\n insertAt === target._text.length)\n ) {\n insert = insert.trimEnd();\n }\n // inform subscribers\n ev.didDrop = true;\n ev.dropTarget = target;\n // finalize\n target.insertChars(insert, styles, insertAt);\n // can this part be moved in an outside event? andrea to check.\n canvas.setActiveObject(target);\n target.enterEditing(e);\n target.selectionStart = Math.min(\n insertAt + selectionStartOffset,\n target._text.length,\n );\n target.selectionEnd = Math.min(\n target.selectionStart + insert.length,\n target._text.length,\n );\n target.hiddenTextarea!.value = target.text;\n target._updateTextarea();\n target.hiddenTextarea!.focus();\n target.fire(CHANGED, {\n index: insertAt + selectionStartOffset,\n action: 'drop',\n });\n canvas.fire('text:changed', { target });\n canvas.contextTopDirty = true;\n canvas.requestRenderAll();\n }\n }\n\n /**\n * fired only on the drag source after drop (if occurred)\n * handle changes to the drag source in case of a drop on another object or a cancellation\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#finishing_a_drag\n */\n dragEndHandler({ e }: DragEventData) {\n if (this.isActive() && this.__dragStartFired) {\n // once the drop event finishes we check if we need to change the drag source\n // if the drag source received the drop we bail out since the drop handler has already handled logic\n if (this.__dragStartSelection) {\n const target = this.target;\n const canvas = this.target.canvas!;\n const { selectionStart, selectionEnd } = this.__dragStartSelection;\n const dropEffect = e.dataTransfer?.dropEffect || NONE;\n if (dropEffect === NONE) {\n // pointer is back over selection\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n target._updateTextarea();\n target.hiddenTextarea!.focus();\n } else {\n target.clearContextTop();\n if (dropEffect === 'move') {\n target.removeChars(selectionStart, selectionEnd);\n target.selectionStart = target.selectionEnd = selectionStart;\n target.hiddenTextarea &&\n (target.hiddenTextarea.value = target.text);\n target._updateTextarea();\n target.fire(CHANGED, {\n index: selectionStart,\n action: 'dragend',\n });\n canvas.fire('text:changed', { target });\n canvas.requestRenderAll();\n }\n target.exitEditing();\n }\n }\n }\n\n this.__dragImageDisposer && this.__dragImageDisposer();\n delete this.__dragImageDisposer;\n delete this.__dragStartSelection;\n this.__isDraggingOver = false;\n }\n\n dispose() {\n this._dispose && this._dispose();\n }\n}\n","import type {\n ObjectEvents,\n TPointerEvent,\n TPointerEventInfo,\n} from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport type { FabricObject } from '../Object/FabricObject';\nimport { FabricText } from '../Text/Text';\nimport { animate } from '../../util/animation/animate';\nimport type { TOnAnimationChangeCallback } from '../../util/animation/types';\nimport type { ValueAnimation } from '../../util/animation/ValueAnimation';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\nimport type { SerializedTextProps, TextProps } from '../Text/Text';\nimport type { TOptions } from '../../typedefs';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { LEFT, MODIFIED, RIGHT, reNewline } from '../../constants';\nimport type { IText } from './IText';\n\n/**\n * extend this regex to support non english languages\n *\n * - ` ` Matches a SPACE character (char code 32).\n * - `\\n` Matches a LINE FEED character (char code 10).\n * - `\\.` Matches a \".\" character (char code 46).\n * - `,` Matches a \",\" character (char code 44).\n * - `;` Matches a \";\" character (char code 59).\n * - `!` Matches a \"!\" character (char code 33).\n * - `\\?` Matches a \"?\" character (char code 63).\n * - `\\-` Matches a \"-\" character (char code 45).\n */\n// eslint-disable-next-line no-useless-escape\nconst reNonWord = /[ \\n\\.,;!\\?\\-]/;\n\nexport type ITextEvents = ObjectEvents & {\n 'selection:changed': never;\n changed: never | { index: number; action: string };\n tripleclick: TPointerEventInfo;\n 'editing:entered': never | { e: TPointerEvent };\n 'editing:exited': never;\n};\n\nexport abstract class ITextBehavior<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ITextEvents = ITextEvents,\n> extends FabricText {\n declare abstract isEditing: boolean;\n declare abstract cursorDelay: number;\n declare abstract selectionStart: number;\n declare abstract selectionEnd: number;\n declare abstract cursorDuration: number;\n declare abstract editable: boolean;\n declare abstract editingBorderColor: string;\n\n declare abstract compositionStart: number;\n declare abstract compositionEnd: number;\n\n declare abstract hiddenTextarea: HTMLTextAreaElement | null;\n\n /**\n * Helps determining when the text is in composition, so that the cursor\n * rendering is altered.\n */\n protected declare inCompositionMode: boolean;\n\n protected declare _reSpace: RegExp;\n private declare _currentTickState?: ValueAnimation;\n private declare _currentTickCompleteState?: ValueAnimation;\n protected _currentCursorOpacity = 1;\n private declare _textBeforeEdit: string;\n protected declare __selectionStartOnMouseDown: number;\n\n protected declare selected: boolean;\n protected declare cursorOffsetCache: { left?: number; top?: number };\n protected declare _savedProps?: {\n hasControls: boolean;\n borderColor: string;\n lockMovementX: boolean;\n lockMovementY: boolean;\n selectable: boolean;\n hoverCursor: CSSStyleDeclaration['cursor'] | null;\n defaultCursor?: CSSStyleDeclaration['cursor'];\n moveCursor?: CSSStyleDeclaration['cursor'];\n };\n protected declare _selectionDirection: 'left' | 'right' | null;\n\n abstract initHiddenTextarea(): void;\n abstract _fireSelectionChanged(): void;\n abstract renderCursorOrSelection(): void;\n abstract getSelectionStartFromPointer(e: TPointerEvent): number;\n abstract _getCursorBoundaries(\n index: number,\n skipCaching?: boolean,\n ): {\n left: number;\n top: number;\n leftOffset: number;\n topOffset: number;\n };\n\n /**\n * Initializes all the interactive behavior of IText\n */\n initBehavior() {\n this._tick = this._tick.bind(this);\n this._onTickComplete = this._onTickComplete.bind(this);\n this.updateSelectionOnMouseMove =\n this.updateSelectionOnMouseMove.bind(this);\n }\n\n onDeselect(options?: { e?: TPointerEvent; object?: FabricObject }) {\n this.isEditing && this.exitEditing();\n this.selected = false;\n return super.onDeselect(options);\n }\n\n /**\n * @private\n */\n _animateCursor({\n toValue,\n duration,\n delay,\n onComplete,\n }: {\n toValue: number;\n duration: number;\n delay?: number;\n onComplete?: TOnAnimationChangeCallback;\n }) {\n return animate({\n startValue: this._currentCursorOpacity,\n endValue: toValue,\n duration,\n delay,\n onComplete,\n abort: () =>\n !this.canvas ||\n // we do not want to animate a selection, only cursor\n this.selectionStart !== this.selectionEnd,\n onChange: (value) => {\n this._currentCursorOpacity = value;\n this.renderCursorOrSelection();\n },\n });\n }\n\n /**\n * changes the cursor from visible to invisible\n */\n private _tick(delay?: number) {\n this._currentTickState = this._animateCursor({\n toValue: 0,\n duration: this.cursorDuration / 2,\n delay: Math.max(delay || 0, 100),\n onComplete: this._onTickComplete,\n });\n }\n\n /**\n * Changes the cursor from invisible to visible\n */\n private _onTickComplete() {\n this._currentTickCompleteState?.abort();\n this._currentTickCompleteState = this._animateCursor({\n toValue: 1,\n duration: this.cursorDuration,\n onComplete: this._tick,\n });\n }\n\n /**\n * Initializes delayed cursor\n */\n initDelayedCursor(restart?: boolean) {\n this.abortCursorAnimation();\n this._tick(restart ? 0 : this.cursorDelay);\n }\n\n /**\n * Aborts cursor animation, clears all timeouts and clear textarea context if necessary\n */\n abortCursorAnimation() {\n let shouldClear = false;\n [this._currentTickState, this._currentTickCompleteState].forEach(\n (cursorAnimation) => {\n if (cursorAnimation && !cursorAnimation.isDone()) {\n shouldClear = true;\n cursorAnimation.abort();\n }\n },\n );\n\n this._currentCursorOpacity = 1;\n\n // make sure we clear context even if instance is not editing\n if (shouldClear) {\n this.clearContextTop();\n }\n }\n\n /**\n * Restart tue cursor animation if either is in complete state ( between animations )\n * or if it never started before\n */\n restartCursorIfNeeded() {\n if (\n [this._currentTickState, this._currentTickCompleteState].some(\n (cursorAnimation) => !cursorAnimation || cursorAnimation.isDone(),\n )\n ) {\n this.initDelayedCursor();\n }\n }\n\n /**\n * Selects entire text\n */\n selectAll() {\n this.selectionStart = 0;\n this.selectionEnd = this._text.length;\n this._fireSelectionChanged();\n this._updateTextarea();\n return this;\n }\n\n /**\n * Returns selected text\n * @return {String}\n */\n getSelectedText(): string {\n return this._text.slice(this.selectionStart, this.selectionEnd).join('');\n }\n\n /**\n * Find new selection index representing start of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryLeft(startFrom: number): number {\n let offset = 0,\n index = startFrom - 1;\n\n // remove space before cursor first\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index--;\n }\n }\n while (/\\S/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n }\n\n /**\n * Find new selection index representing end of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryRight(startFrom: number): number {\n let offset = 0,\n index = startFrom;\n\n // remove space after cursor first\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index++;\n }\n }\n while (/\\S/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n }\n\n /**\n * Find new selection index representing start of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryLeft(startFrom: number): number {\n let offset = 0,\n index = startFrom - 1;\n\n while (!/\\n/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n }\n\n /**\n * Find new selection index representing end of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryRight(startFrom: number): number {\n let offset = 0,\n index = startFrom;\n\n while (!/\\n/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n }\n\n /**\n * Finds index corresponding to beginning or end of a word\n * @param {Number} selectionStart Index of a character\n * @param {Number} direction 1 or -1\n * @return {Number} Index of the beginning or end of a word\n */\n searchWordBoundary(selectionStart: number, direction: 1 | -1): number {\n const text = this._text;\n // if we land on a space we move the cursor backwards\n // if we are searching boundary end we move the cursor backwards ONLY if we don't land on a line break\n let index =\n selectionStart > 0 &&\n this._reSpace.test(text[selectionStart]) &&\n (direction === -1 || !reNewline.test(text[selectionStart - 1]))\n ? selectionStart - 1\n : selectionStart,\n _char = text[index];\n while (index > 0 && index < text.length && !reNonWord.test(_char)) {\n index += direction;\n _char = text[index];\n }\n if (direction === -1 && reNonWord.test(_char)) {\n index++;\n }\n return index;\n }\n\n /**\n * TODO fix: selectionStart set as 0 will be ignored?\n * Selects a word based on the index\n * @param {Number} selectionStart Index of a character\n */\n selectWord(selectionStart?: number) {\n selectionStart = selectionStart || this.selectionStart;\n // search backwards\n const newSelectionStart = this.searchWordBoundary(selectionStart, -1),\n // search forward\n newSelectionEnd = Math.max(\n newSelectionStart,\n this.searchWordBoundary(selectionStart, 1),\n );\n\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n this._fireSelectionChanged();\n this._updateTextarea();\n this.renderCursorOrSelection();\n }\n\n /**\n * TODO fix: selectionStart set as 0 will be ignored?\n * Selects a line based on the index\n * @param {Number} selectionStart Index of a character\n */\n selectLine(selectionStart?: number) {\n selectionStart = selectionStart || this.selectionStart;\n const newSelectionStart = this.findLineBoundaryLeft(selectionStart),\n newSelectionEnd = this.findLineBoundaryRight(selectionStart);\n\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n this._fireSelectionChanged();\n this._updateTextarea();\n return this;\n }\n\n /**\n * Enters editing state\n */\n enterEditing(e?: TPointerEvent) {\n if (this.isEditing || !this.editable) {\n return;\n }\n this.enterEditingImpl();\n this.fire('editing:entered', e ? { e } : undefined);\n this._fireSelectionChanged();\n if (this.canvas) {\n this.canvas.fire('text:editing:entered', {\n target: this as unknown as IText,\n e,\n });\n this.canvas.requestRenderAll();\n }\n }\n\n /**\n * runs the actual logic that enter from editing state, see {@link enterEditing}\n */\n enterEditingImpl() {\n if (this.canvas) {\n this.canvas.calcOffset();\n this.canvas.textEditingManager.exitTextEditing();\n }\n\n this.isEditing = true;\n\n this.initHiddenTextarea();\n this.hiddenTextarea!.focus();\n this.hiddenTextarea!.value = this.text;\n this._updateTextarea();\n this._saveEditingProps();\n this._setEditingProps();\n this._textBeforeEdit = this.text;\n\n this._tick();\n }\n\n /**\n * called by {@link Canvas#textEditingManager}\n */\n updateSelectionOnMouseMove(e: TPointerEvent) {\n if (this.getActiveControl()) {\n return;\n }\n\n const el = this.hiddenTextarea!;\n // regain focus\n getDocumentFromElement(el).activeElement !== el && el.focus();\n\n const newSelectionStart = this.getSelectionStartFromPointer(e),\n currentStart = this.selectionStart,\n currentEnd = this.selectionEnd;\n if (\n (newSelectionStart !== this.__selectionStartOnMouseDown ||\n currentStart === currentEnd) &&\n (currentStart === newSelectionStart || currentEnd === newSelectionStart)\n ) {\n return;\n }\n if (newSelectionStart > this.__selectionStartOnMouseDown) {\n this.selectionStart = this.__selectionStartOnMouseDown;\n this.selectionEnd = newSelectionStart;\n } else {\n this.selectionStart = newSelectionStart;\n this.selectionEnd = this.__selectionStartOnMouseDown;\n }\n if (\n this.selectionStart !== currentStart ||\n this.selectionEnd !== currentEnd\n ) {\n this._fireSelectionChanged();\n this._updateTextarea();\n this.renderCursorOrSelection();\n }\n }\n\n /**\n * @private\n */\n _setEditingProps() {\n this.hoverCursor = 'text';\n\n if (this.canvas) {\n this.canvas.defaultCursor = this.canvas.moveCursor = 'text';\n }\n\n this.borderColor = this.editingBorderColor;\n this.hasControls = this.selectable = false;\n this.lockMovementX = this.lockMovementY = true;\n }\n\n /**\n * convert from textarea to grapheme indexes\n */\n fromStringToGraphemeSelection(start: number, end: number, text: string) {\n const smallerTextStart = text.slice(0, start),\n graphemeStart = this.graphemeSplit(smallerTextStart).length;\n if (start === end) {\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n }\n const smallerTextEnd = text.slice(start, end),\n graphemeEnd = this.graphemeSplit(smallerTextEnd).length;\n return {\n selectionStart: graphemeStart,\n selectionEnd: graphemeStart + graphemeEnd,\n };\n }\n\n /**\n * convert from fabric to textarea values\n */\n fromGraphemeToStringSelection(\n start: number,\n end: number,\n graphemes: string[],\n ) {\n const smallerTextStart = graphemes.slice(0, start),\n graphemeStart = smallerTextStart.join('').length;\n if (start === end) {\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n }\n const smallerTextEnd = graphemes.slice(start, end),\n graphemeEnd = smallerTextEnd.join('').length;\n return {\n selectionStart: graphemeStart,\n selectionEnd: graphemeStart + graphemeEnd,\n };\n }\n\n /**\n * @private\n */\n _updateTextarea() {\n this.cursorOffsetCache = {};\n if (!this.hiddenTextarea) {\n return;\n }\n if (!this.inCompositionMode) {\n const newSelection = this.fromGraphemeToStringSelection(\n this.selectionStart,\n this.selectionEnd,\n this._text,\n );\n this.hiddenTextarea.selectionStart = newSelection.selectionStart;\n this.hiddenTextarea.selectionEnd = newSelection.selectionEnd;\n }\n this.updateTextareaPosition();\n }\n\n /**\n * @private\n */\n updateFromTextArea() {\n if (!this.hiddenTextarea) {\n return;\n }\n this.cursorOffsetCache = {};\n const textarea = this.hiddenTextarea;\n this.text = textarea.value;\n this.set('dirty', true);\n this.initDimensions();\n this.setCoords();\n const newSelection = this.fromStringToGraphemeSelection(\n textarea.selectionStart,\n textarea.selectionEnd,\n textarea.value,\n );\n this.selectionEnd = this.selectionStart = newSelection.selectionEnd;\n if (!this.inCompositionMode) {\n this.selectionStart = newSelection.selectionStart;\n }\n this.updateTextareaPosition();\n }\n\n /**\n * @private\n */\n updateTextareaPosition() {\n if (this.selectionStart === this.selectionEnd) {\n const style = this._calcTextareaPosition();\n this.hiddenTextarea!.style.left = style.left;\n this.hiddenTextarea!.style.top = style.top;\n }\n }\n\n /**\n * @private\n * @return {Object} style contains style for hiddenTextarea\n */\n _calcTextareaPosition() {\n if (!this.canvas) {\n return { left: '1px', top: '1px' };\n }\n const desiredPosition = this.inCompositionMode\n ? this.compositionStart\n : this.selectionStart,\n boundaries = this._getCursorBoundaries(desiredPosition),\n cursorLocation = this.get2DCursorLocation(desiredPosition),\n lineIndex = cursorLocation.lineIndex,\n charIndex = cursorLocation.charIndex,\n charHeight =\n this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize') *\n this.lineHeight,\n leftOffset = boundaries.leftOffset,\n retinaScaling = this.getCanvasRetinaScaling(),\n upperCanvas = this.canvas.upperCanvasEl,\n upperCanvasWidth = upperCanvas.width / retinaScaling,\n upperCanvasHeight = upperCanvas.height / retinaScaling,\n maxWidth = upperCanvasWidth - charHeight,\n maxHeight = upperCanvasHeight - charHeight;\n\n const p = new Point(\n boundaries.left + leftOffset,\n boundaries.top + boundaries.topOffset + charHeight,\n )\n .transform(this.calcTransformMatrix())\n .transform(this.canvas.viewportTransform)\n .multiply(\n new Point(\n upperCanvas.clientWidth / upperCanvasWidth,\n upperCanvas.clientHeight / upperCanvasHeight,\n ),\n );\n\n if (p.x < 0) {\n p.x = 0;\n }\n if (p.x > maxWidth) {\n p.x = maxWidth;\n }\n if (p.y < 0) {\n p.y = 0;\n }\n if (p.y > maxHeight) {\n p.y = maxHeight;\n }\n\n // add canvas offset on document\n p.x += this.canvas._offset.left;\n p.y += this.canvas._offset.top;\n\n return {\n left: `${p.x}px`,\n top: `${p.y}px`,\n fontSize: `${charHeight}px`,\n charHeight: charHeight,\n };\n }\n\n /**\n * @private\n */\n _saveEditingProps() {\n this._savedProps = {\n hasControls: this.hasControls,\n borderColor: this.borderColor,\n lockMovementX: this.lockMovementX,\n lockMovementY: this.lockMovementY,\n hoverCursor: this.hoverCursor,\n selectable: this.selectable,\n defaultCursor: this.canvas && this.canvas.defaultCursor,\n moveCursor: this.canvas && this.canvas.moveCursor,\n };\n }\n\n /**\n * @private\n */\n _restoreEditingProps() {\n if (!this._savedProps) {\n return;\n }\n\n this.hoverCursor = this._savedProps.hoverCursor;\n this.hasControls = this._savedProps.hasControls;\n this.borderColor = this._savedProps.borderColor;\n this.selectable = this._savedProps.selectable;\n this.lockMovementX = this._savedProps.lockMovementX;\n this.lockMovementY = this._savedProps.lockMovementY;\n\n if (this.canvas) {\n this.canvas.defaultCursor =\n this._savedProps.defaultCursor || this.canvas.defaultCursor;\n this.canvas.moveCursor =\n this._savedProps.moveCursor || this.canvas.moveCursor;\n }\n\n delete this._savedProps;\n }\n\n /**\n * runs the actual logic that exits from editing state, see {@link exitEditing}\n * Please use exitEditingImpl, this function was kept to avoid breaking changes.\n * Will be removed in fabric 7.0\n * @deprecated use \"exitEditingImpl\"\n */\n protected _exitEditing() {\n const hiddenTextarea = this.hiddenTextarea;\n this.selected = false;\n this.isEditing = false;\n\n if (hiddenTextarea) {\n hiddenTextarea.blur && hiddenTextarea.blur();\n hiddenTextarea.parentNode &&\n hiddenTextarea.parentNode.removeChild(hiddenTextarea);\n }\n this.hiddenTextarea = null;\n this.abortCursorAnimation();\n this.selectionStart !== this.selectionEnd && this.clearContextTop();\n }\n\n /**\n * runs the actual logic that exits from editing state, see {@link exitEditing}\n * But it does not fire events\n */\n exitEditingImpl() {\n this._exitEditing();\n this.selectionEnd = this.selectionStart;\n this._restoreEditingProps();\n if (this._forceClearCache) {\n this.initDimensions();\n this.setCoords();\n }\n }\n\n /**\n * Exits from editing state and fires relevant events\n */\n exitEditing() {\n const isTextChanged = this._textBeforeEdit !== this.text;\n this.exitEditingImpl();\n\n this.fire('editing:exited');\n isTextChanged && this.fire(MODIFIED);\n if (this.canvas) {\n this.canvas.fire('text:editing:exited', {\n target: this as unknown as IText,\n });\n // todo: evaluate add an action to this event\n isTextChanged && this.canvas.fire('object:modified', { target: this });\n }\n return this;\n }\n\n /**\n * @private\n */\n _removeExtraneousStyles() {\n for (const prop in this.styles) {\n if (!this._textLines[prop as unknown as number]) {\n delete this.styles[prop];\n }\n }\n }\n\n /**\n * remove and reflow a style block from start to end.\n * @param {Number} start linear start position for removal (included in removal)\n * @param {Number} end linear end position for removal ( excluded from removal )\n */\n removeStyleFromTo(start: number, end: number) {\n const { lineIndex: lineStart, charIndex: charStart } =\n this.get2DCursorLocation(start, true),\n { lineIndex: lineEnd, charIndex: charEnd } = this.get2DCursorLocation(\n end,\n true,\n );\n if (lineStart !== lineEnd) {\n // step1 remove the trailing of lineStart\n if (this.styles[lineStart]) {\n for (\n let i = charStart;\n i < this._unwrappedTextLines[lineStart].length;\n i++\n ) {\n delete this.styles[lineStart][i];\n }\n }\n // step2 move the trailing of lineEnd to lineStart if needed\n if (this.styles[lineEnd]) {\n for (\n let i = charEnd;\n i < this._unwrappedTextLines[lineEnd].length;\n i++\n ) {\n const styleObj = this.styles[lineEnd][i];\n if (styleObj) {\n this.styles[lineStart] || (this.styles[lineStart] = {});\n this.styles[lineStart][charStart + i - charEnd] = styleObj;\n }\n }\n }\n // step3 detects lines will be completely removed.\n for (let i = lineStart + 1; i <= lineEnd; i++) {\n delete this.styles[i];\n }\n // step4 shift remaining lines.\n this.shiftLineStyles(lineEnd, lineStart - lineEnd);\n } else {\n // remove and shift left on the same line\n if (this.styles[lineStart]) {\n const styleObj = this.styles[lineStart];\n const diff = charEnd - charStart;\n for (let i = charStart; i < charEnd; i++) {\n delete styleObj[i];\n }\n for (const char in this.styles[lineStart]) {\n const numericChar = parseInt(char, 10);\n if (numericChar >= charEnd) {\n styleObj[numericChar - diff] = styleObj[char];\n delete styleObj[char];\n }\n }\n }\n }\n }\n\n /**\n * Shifts line styles up or down\n * @param {Number} lineIndex Index of a line\n * @param {Number} offset Can any number?\n */\n shiftLineStyles(lineIndex: number, offset: number) {\n const clonedStyles = Object.assign({}, this.styles);\n for (const line in this.styles) {\n const numericLine = parseInt(line, 10);\n if (numericLine > lineIndex) {\n this.styles[numericLine + offset] = clonedStyles[numericLine];\n if (!clonedStyles[numericLine - offset]) {\n delete this.styles[numericLine];\n }\n }\n }\n }\n\n /**\n * Handle insertion of more consecutive style lines for when one or more\n * newlines gets added to the text. Since current style needs to be shifted\n * first we shift the current style of the number lines needed, then we add\n * new lines from the last to the first.\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} qty number of lines to add\n * @param {Array} copiedStyle Array of objects styles\n */\n insertNewlineStyleObject(\n lineIndex: number,\n charIndex: number,\n qty: number,\n copiedStyle?: { [index: number]: TextStyleDeclaration },\n ) {\n const newLineStyles: { [index: number]: TextStyleDeclaration } = {};\n const originalLineLength = this._unwrappedTextLines[lineIndex].length;\n const isEndOfLine = originalLineLength === charIndex;\n\n let someStyleIsCarryingOver = false;\n qty || (qty = 1);\n this.shiftLineStyles(lineIndex, qty);\n const currentCharStyle = this.styles[lineIndex]\n ? this.styles[lineIndex][charIndex === 0 ? charIndex : charIndex - 1]\n : undefined;\n\n // we clone styles of all chars\n // after cursor onto the current line\n for (const index in this.styles[lineIndex]) {\n const numIndex = parseInt(index, 10);\n if (numIndex >= charIndex) {\n someStyleIsCarryingOver = true;\n newLineStyles[numIndex - charIndex] = this.styles[lineIndex][index];\n // remove lines from the previous line since they're on a new line now\n if (!(isEndOfLine && charIndex === 0)) {\n delete this.styles[lineIndex][index];\n }\n }\n }\n let styleCarriedOver = false;\n if (someStyleIsCarryingOver && !isEndOfLine) {\n // if is end of line, the extra style we copied\n // is probably not something we want\n this.styles[lineIndex + qty] = newLineStyles;\n styleCarriedOver = true;\n }\n if (styleCarriedOver || originalLineLength > charIndex) {\n // skip the last line of since we already prepared it.\n // or contains text without style that we don't want to style\n // just because it changed lines\n qty--;\n }\n // for the all the lines or all the other lines\n // we clone current char style onto the next (otherwise empty) line\n while (qty > 0) {\n if (copiedStyle && copiedStyle[qty - 1]) {\n this.styles[lineIndex + qty] = {\n 0: { ...copiedStyle[qty - 1] },\n };\n } else if (currentCharStyle) {\n this.styles[lineIndex + qty] = {\n 0: { ...currentCharStyle },\n };\n } else {\n delete this.styles[lineIndex + qty];\n }\n qty--;\n }\n this._forceClearCache = true;\n }\n\n /**\n * Inserts style object for a given line/char index\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} quantity number Style object to insert, if given\n * @param {Array} copiedStyle array of style objects\n */\n insertCharStyleObject(\n lineIndex: number,\n charIndex: number,\n quantity: number,\n copiedStyle?: TextStyleDeclaration[],\n ) {\n if (!this.styles) {\n this.styles = {};\n }\n const currentLineStyles = this.styles[lineIndex],\n currentLineStylesCloned = currentLineStyles\n ? { ...currentLineStyles }\n : {};\n\n quantity || (quantity = 1);\n // shift all char styles by quantity forward\n // 0,1,2,3 -> (charIndex=2) -> 0,1,3,4 -> (insert 2) -> 0,1,2,3,4\n for (const index in currentLineStylesCloned) {\n const numericIndex = parseInt(index, 10);\n if (numericIndex >= charIndex) {\n currentLineStyles[numericIndex + quantity] =\n currentLineStylesCloned[numericIndex];\n // only delete the style if there was nothing moved there\n if (!currentLineStylesCloned[numericIndex - quantity]) {\n delete currentLineStyles[numericIndex];\n }\n }\n }\n this._forceClearCache = true;\n if (copiedStyle) {\n while (quantity--) {\n if (!Object.keys(copiedStyle[quantity]).length) {\n continue;\n }\n if (!this.styles[lineIndex]) {\n this.styles[lineIndex] = {};\n }\n this.styles[lineIndex][charIndex + quantity] = {\n ...copiedStyle[quantity],\n };\n }\n return;\n }\n if (!currentLineStyles) {\n return;\n }\n const newStyle = currentLineStyles[charIndex ? charIndex - 1 : 1];\n while (newStyle && quantity--) {\n this.styles[lineIndex][charIndex + quantity] = { ...newStyle };\n }\n }\n\n /**\n * Inserts style object(s)\n * @param {Array} insertedText Characters at the location where style is inserted\n * @param {Number} start cursor index for inserting style\n * @param {Array} [copiedStyle] array of style objects to insert.\n */\n insertNewStyleBlock(\n insertedText: string[],\n start: number,\n copiedStyle?: TextStyleDeclaration[],\n ) {\n const cursorLoc = this.get2DCursorLocation(start, true),\n addedLines = [0];\n let linesLength = 0;\n // get an array of how many char per lines are being added.\n for (let i = 0; i < insertedText.length; i++) {\n if (insertedText[i] === '\\n') {\n linesLength++;\n addedLines[linesLength] = 0;\n } else {\n addedLines[linesLength]++;\n }\n }\n // for the first line copy the style from the current char position.\n if (addedLines[0] > 0) {\n this.insertCharStyleObject(\n cursorLoc.lineIndex,\n cursorLoc.charIndex,\n addedLines[0],\n copiedStyle,\n );\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[0] + 1);\n }\n linesLength &&\n this.insertNewlineStyleObject(\n cursorLoc.lineIndex,\n cursorLoc.charIndex + addedLines[0],\n linesLength,\n );\n let i;\n for (i = 1; i < linesLength; i++) {\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(\n cursorLoc.lineIndex + i,\n 0,\n addedLines[i],\n copiedStyle,\n );\n } else if (copiedStyle) {\n // this test is required in order to close #6841\n // when a pasted buffer begins with a newline then\n // this.styles[cursorLoc.lineIndex + i] and copiedStyle[0]\n // may be undefined for some reason\n if (this.styles[cursorLoc.lineIndex + i] && copiedStyle[0]) {\n this.styles[cursorLoc.lineIndex + i][0] = copiedStyle[0];\n }\n }\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[i] + 1);\n }\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(\n cursorLoc.lineIndex + i,\n 0,\n addedLines[i],\n copiedStyle,\n );\n }\n }\n\n /**\n * Removes characters from start/end\n * start/end ar per grapheme position in _text array.\n *\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n removeChars(start: number, end: number = start + 1) {\n this.removeStyleFromTo(start, end);\n this._text.splice(start, end - start);\n this.text = this._text.join('');\n this.set('dirty', true);\n this.initDimensions();\n this.setCoords();\n this._removeExtraneousStyles();\n }\n\n /**\n * insert characters at start position, before start position.\n * start equal 1 it means the text get inserted between actual grapheme 0 and 1\n * if style array is provided, it must be as the same length of text in graphemes\n * if end is provided and is bigger than start, old text is replaced.\n * start/end ar per grapheme position in _text array.\n *\n * @param {String} text text to insert\n * @param {Array} style array of style objects\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n insertChars(\n text: string,\n style: TextStyleDeclaration[] | undefined,\n start: number,\n end: number = start,\n ) {\n if (end > start) {\n this.removeStyleFromTo(start, end);\n }\n const graphemes = this.graphemeSplit(text);\n this.insertNewStyleBlock(graphemes, start, style);\n this._text = [\n ...this._text.slice(0, start),\n ...graphemes,\n ...this._text.slice(end),\n ];\n this.text = this._text.join('');\n this.set('dirty', true);\n this.initDimensions();\n this.setCoords();\n this._removeExtraneousStyles();\n }\n\n /**\n * Set the selectionStart and selectionEnd according to the new position of cursor\n * mimic the key - mouse navigation when shift is pressed.\n */\n setSelectionStartEndWithShift(\n start: number,\n end: number,\n newSelection: number,\n ) {\n if (newSelection <= start) {\n if (end === start) {\n this._selectionDirection = LEFT;\n } else if (this._selectionDirection === RIGHT) {\n this._selectionDirection = LEFT;\n this.selectionEnd = start;\n }\n this.selectionStart = newSelection;\n } else if (newSelection > start && newSelection < end) {\n if (this._selectionDirection === RIGHT) {\n this.selectionEnd = newSelection;\n } else {\n this.selectionStart = newSelection;\n }\n } else {\n // newSelection is > selection start and end\n if (end === start) {\n this._selectionDirection = RIGHT;\n } else if (this._selectionDirection === LEFT) {\n this._selectionDirection = RIGHT;\n this.selectionStart = end;\n }\n this.selectionEnd = newSelection;\n }\n }\n}\n","import { config } from '../../config';\nimport { getFabricDocument, getEnv } from '../../env';\nimport { capValue } from '../../util/misc/capValue';\nimport type { ITextEvents } from './ITextBehavior';\nimport { ITextBehavior } from './ITextBehavior';\nimport type { TKeyMapIText } from './constants';\nimport type { TOptions } from '../../typedefs';\nimport type { TextProps, SerializedTextProps } from '../Text/Text';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { CHANGED, LEFT, RIGHT } from '../../constants';\nimport type { IText } from './IText';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\n\nexport abstract class ITextKeyBehavior<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ITextEvents = ITextEvents,\n> extends ITextBehavior {\n /**\n * For functionalities on keyDown\n * Map a special key to a function of the instance/prototype\n * If you need different behavior for ESC or TAB or arrows, you have to change\n * this map setting the name of a function that you build on the IText or\n * your prototype.\n * the map change will affect all Instances unless you need for only some text Instances\n * in that case you have to clone this object and assign your Instance.\n * this.keysMap = Object.assign({}, this.keysMap);\n * The function must be in IText.prototype.myFunction And will receive event as args[0]\n */\n declare keysMap: TKeyMapIText;\n\n declare keysMapRtl: TKeyMapIText;\n\n /**\n * For functionalities on keyUp + ctrl || cmd\n */\n declare ctrlKeysMapUp: TKeyMapIText;\n\n /**\n * For functionalities on keyDown + ctrl || cmd\n */\n declare ctrlKeysMapDown: TKeyMapIText;\n\n declare hiddenTextarea: HTMLTextAreaElement | null;\n\n /**\n * DOM container to append the hiddenTextarea.\n * An alternative to attaching to the document.body.\n * Useful to reduce laggish redraw of the full document.body tree and\n * also with modals event capturing that won't let the textarea take focus.\n * @type HTMLElement\n * @default\n */\n declare hiddenTextareaContainer?: HTMLElement | null;\n\n private declare _clickHandlerInitialized: boolean;\n private declare _copyDone: boolean;\n private declare fromPaste: boolean;\n\n /**\n * Initializes hidden textarea (needed to bring up keyboard in iOS)\n */\n initHiddenTextarea() {\n const doc =\n (this.canvas && getDocumentFromElement(this.canvas.getElement())) ||\n getFabricDocument();\n const textarea = doc.createElement('textarea');\n Object.entries({\n autocapitalize: 'off',\n autocorrect: 'off',\n autocomplete: 'off',\n spellcheck: 'false',\n 'data-fabric': 'textarea',\n wrap: 'off',\n }).map(([attribute, value]) => textarea.setAttribute(attribute, value));\n const { top, left, fontSize } = this._calcTextareaPosition();\n // line-height: 1px; was removed from the style to fix this:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=870966\n textarea.style.cssText = `position: absolute; top: ${top}; left: ${left}; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: ${fontSize};`;\n\n (this.hiddenTextareaContainer || doc.body).appendChild(textarea);\n\n Object.entries({\n blur: 'blur',\n keydown: 'onKeyDown',\n keyup: 'onKeyUp',\n input: 'onInput',\n copy: 'copy',\n cut: 'copy',\n paste: 'paste',\n compositionstart: 'onCompositionStart',\n compositionupdate: 'onCompositionUpdate',\n compositionend: 'onCompositionEnd',\n } as Record).map(([eventName, handler]) =>\n textarea.addEventListener(\n eventName,\n (this[handler] as EventListener).bind(this),\n ),\n );\n this.hiddenTextarea = textarea;\n }\n\n /**\n * Override this method to customize cursor behavior on textbox blur\n */\n blur() {\n this.abortCursorAnimation();\n }\n\n /**\n * Handles keydown event\n * only used for arrows and combination of modifier keys.\n * @param {KeyboardEvent} e Event object\n */\n onKeyDown(e: KeyboardEvent) {\n if (!this.isEditing) {\n return;\n }\n const keyMap = this.direction === 'rtl' ? this.keysMapRtl : this.keysMap;\n if (e.keyCode in keyMap) {\n // @ts-expect-error legacy method calling pattern\n this[keyMap[e.keyCode]](e);\n } else if (e.keyCode in this.ctrlKeysMapDown && (e.ctrlKey || e.metaKey)) {\n // @ts-expect-error legacy method calling pattern\n this[this.ctrlKeysMapDown[e.keyCode]](e);\n } else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n if (e.keyCode >= 33 && e.keyCode <= 40) {\n // if i press an arrow key just update selection\n this.inCompositionMode = false;\n this.clearContextTop();\n this.renderCursorOrSelection();\n } else {\n this.canvas && this.canvas.requestRenderAll();\n }\n }\n\n /**\n * Handles keyup event\n * We handle KeyUp because ie11 and edge have difficulties copy/pasting\n * if a copy/cut event fired, keyup is dismissed\n * @param {KeyboardEvent} e Event object\n */\n onKeyUp(e: KeyboardEvent) {\n if (!this.isEditing || this._copyDone || this.inCompositionMode) {\n this._copyDone = false;\n return;\n }\n if (e.keyCode in this.ctrlKeysMapUp && (e.ctrlKey || e.metaKey)) {\n // @ts-expect-error legacy method calling pattern\n this[this.ctrlKeysMapUp[e.keyCode]](e);\n } else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n this.canvas && this.canvas.requestRenderAll();\n }\n\n /**\n * Handles onInput event\n * @param {Event} e Event object\n */\n onInput(this: this & { hiddenTextarea: HTMLTextAreaElement }, e: Event) {\n const fromPaste = this.fromPaste;\n this.fromPaste = false;\n e && e.stopPropagation();\n if (!this.isEditing) {\n return;\n }\n const updateAndFire = () => {\n this.updateFromTextArea();\n this.fire(CHANGED);\n if (this.canvas) {\n this.canvas.fire('text:changed', { target: this as unknown as IText });\n this.canvas.requestRenderAll();\n }\n };\n if (this.hiddenTextarea.value === '') {\n this.styles = {};\n updateAndFire();\n return;\n }\n // decisions about style changes.\n const nextText = this._splitTextIntoLines(\n this.hiddenTextarea.value,\n ).graphemeText,\n charCount = this._text.length,\n nextCharCount = nextText.length,\n selectionStart = this.selectionStart,\n selectionEnd = this.selectionEnd,\n selection = selectionStart !== selectionEnd;\n let copiedStyle: TextStyleDeclaration[] | undefined,\n removedText,\n charDiff = nextCharCount - charCount,\n removeFrom,\n removeTo;\n\n const textareaSelection = this.fromStringToGraphemeSelection(\n this.hiddenTextarea.selectionStart,\n this.hiddenTextarea.selectionEnd,\n this.hiddenTextarea.value,\n );\n const backDelete = selectionStart > textareaSelection.selectionStart;\n\n if (selection) {\n removedText = this._text.slice(selectionStart, selectionEnd);\n charDiff += selectionEnd - selectionStart;\n } else if (nextCharCount < charCount) {\n if (backDelete) {\n removedText = this._text.slice(selectionEnd + charDiff, selectionEnd);\n } else {\n removedText = this._text.slice(\n selectionStart,\n selectionStart - charDiff,\n );\n }\n }\n const insertedText = nextText.slice(\n textareaSelection.selectionEnd - charDiff,\n textareaSelection.selectionEnd,\n );\n if (removedText && removedText.length) {\n if (insertedText.length) {\n // let's copy some style before deleting.\n // we want to copy the style before the cursor OR the style at the cursor if selection\n // is bigger than 0.\n copiedStyle = this.getSelectionStyles(\n selectionStart,\n selectionStart + 1,\n false,\n );\n // now duplicate the style one for each inserted text.\n copiedStyle = insertedText.map(\n () =>\n // this return an array of references, but that is fine since we are\n // copying the style later.\n copiedStyle![0],\n );\n }\n if (selection) {\n removeFrom = selectionStart;\n removeTo = selectionEnd;\n } else if (backDelete) {\n // detect differences between forwardDelete and backDelete\n removeFrom = selectionEnd - removedText.length;\n removeTo = selectionEnd;\n } else {\n removeFrom = selectionEnd;\n removeTo = selectionEnd + removedText.length;\n }\n this.removeStyleFromTo(removeFrom, removeTo);\n }\n if (insertedText.length) {\n const { copyPasteData } = getEnv();\n if (\n fromPaste &&\n insertedText.join('') === copyPasteData.copiedText &&\n !config.disableStyleCopyPaste\n ) {\n copiedStyle = copyPasteData.copiedTextStyle;\n }\n this.insertNewStyleBlock(insertedText, selectionStart, copiedStyle);\n }\n updateAndFire();\n }\n\n /**\n * Composition start\n */\n onCompositionStart() {\n this.inCompositionMode = true;\n }\n\n /**\n * Composition end\n */\n onCompositionEnd() {\n this.inCompositionMode = false;\n }\n\n onCompositionUpdate({ target }: CompositionEvent) {\n const { selectionStart, selectionEnd } = target as HTMLTextAreaElement;\n this.compositionStart = selectionStart;\n this.compositionEnd = selectionEnd;\n this.updateTextareaPosition();\n }\n\n /**\n * Copies selected text\n */\n copy() {\n if (this.selectionStart === this.selectionEnd) {\n //do not cut-copy if no selection\n return;\n }\n const { copyPasteData } = getEnv();\n copyPasteData.copiedText = this.getSelectedText();\n if (!config.disableStyleCopyPaste) {\n copyPasteData.copiedTextStyle = this.getSelectionStyles(\n this.selectionStart,\n this.selectionEnd,\n true,\n );\n } else {\n copyPasteData.copiedTextStyle = undefined;\n }\n this._copyDone = true;\n }\n\n /**\n * Pastes text\n */\n paste() {\n this.fromPaste = true;\n }\n\n /**\n * Finds the width in pixels before the cursor on the same line\n * @private\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {Number} widthBeforeCursor width before cursor\n */\n _getWidthBeforeCursor(lineIndex: number, charIndex: number): number {\n let widthBeforeCursor = this._getLineLeftOffset(lineIndex),\n bound;\n\n if (charIndex > 0) {\n bound = this.__charBounds[lineIndex][charIndex - 1];\n widthBeforeCursor += bound.left + bound.width;\n }\n return widthBeforeCursor;\n }\n\n /**\n * Gets start offset of a selection\n * @param {KeyboardEvent} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getDownCursorOffset(e: KeyboardEvent, isRight: boolean): number {\n const selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n // if on last line, down cursor goes to end of line\n if (\n lineIndex === this._textLines.length - 1 ||\n e.metaKey ||\n e.keyCode === 34\n ) {\n // move to the end of a text\n return this._text.length - selectionProp;\n }\n const charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex + 1, widthBeforeCursor),\n textAfterCursor = this._textLines[lineIndex].slice(charIndex);\n return (\n textAfterCursor.length +\n indexOnOtherLine +\n 1 +\n this.missingNewlineOffset(lineIndex)\n );\n }\n\n /**\n * private\n * Helps finding if the offset should be counted from Start or End\n * @param {KeyboardEvent} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n _getSelectionForOffset(e: KeyboardEvent, isRight: boolean): number {\n if (e.shiftKey && this.selectionStart !== this.selectionEnd && isRight) {\n return this.selectionEnd;\n } else {\n return this.selectionStart;\n }\n }\n\n /**\n * @param {KeyboardEvent} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getUpCursorOffset(e: KeyboardEvent, isRight: boolean): number {\n const selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n if (lineIndex === 0 || e.metaKey || e.keyCode === 33) {\n // if on first line, up cursor goes to start of line\n return -selectionProp;\n }\n const charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex - 1, widthBeforeCursor),\n textBeforeCursor = this._textLines[lineIndex].slice(0, charIndex),\n missingNewlineOffset = this.missingNewlineOffset(lineIndex - 1);\n // return a negative offset\n return (\n -this._textLines[lineIndex - 1].length +\n indexOnOtherLine -\n textBeforeCursor.length +\n (1 - missingNewlineOffset)\n );\n }\n\n /**\n * for a given width it founds the matching character.\n * @private\n */\n _getIndexOnLine(lineIndex: number, width: number) {\n const line = this._textLines[lineIndex],\n lineLeftOffset = this._getLineLeftOffset(lineIndex);\n let widthOfCharsOnLine = lineLeftOffset,\n indexOnLine = 0,\n charWidth,\n foundMatch;\n\n for (let j = 0, jlen = line.length; j < jlen; j++) {\n charWidth = this.__charBounds[lineIndex][j].width;\n widthOfCharsOnLine += charWidth;\n if (widthOfCharsOnLine > width) {\n foundMatch = true;\n const leftEdge = widthOfCharsOnLine - charWidth,\n rightEdge = widthOfCharsOnLine,\n offsetFromLeftEdge = Math.abs(leftEdge - width),\n offsetFromRightEdge = Math.abs(rightEdge - width);\n\n indexOnLine = offsetFromRightEdge < offsetFromLeftEdge ? j : j - 1;\n break;\n }\n }\n\n // reached end\n if (!foundMatch) {\n indexOnLine = line.length - 1;\n }\n\n return indexOnLine;\n }\n\n /**\n * Moves cursor down\n * @param {KeyboardEvent} e Event object\n */\n moveCursorDown(e: KeyboardEvent) {\n if (\n this.selectionStart >= this._text.length &&\n this.selectionEnd >= this._text.length\n ) {\n return;\n }\n this._moveCursorUpOrDown('Down', e);\n }\n\n /**\n * Moves cursor up\n * @param {KeyboardEvent} e Event object\n */\n moveCursorUp(e: KeyboardEvent) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorUpOrDown('Up', e);\n }\n\n /**\n * Moves cursor up or down, fires the events\n * @param {String} direction 'Up' or 'Down'\n * @param {KeyboardEvent} e Event object\n */\n _moveCursorUpOrDown(direction: 'Up' | 'Down', e: KeyboardEvent) {\n const offset = this[`get${direction}CursorOffset`](\n e,\n this._selectionDirection === RIGHT,\n );\n if (e.shiftKey) {\n this.moveCursorWithShift(offset);\n } else {\n this.moveCursorWithoutShift(offset);\n }\n if (offset !== 0) {\n const max = this.text.length;\n this.selectionStart = capValue(0, this.selectionStart, max);\n this.selectionEnd = capValue(0, this.selectionEnd, max);\n // TODO fix: abort and init should be an alternative depending\n // on selectionStart/End being equal or different\n this.abortCursorAnimation();\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n }\n\n /**\n * Moves cursor with shift\n * @param {Number} offset\n */\n moveCursorWithShift(offset: number) {\n const newSelection =\n this._selectionDirection === LEFT\n ? this.selectionStart + offset\n : this.selectionEnd + offset;\n this.setSelectionStartEndWithShift(\n this.selectionStart,\n this.selectionEnd,\n newSelection,\n );\n return offset !== 0;\n }\n\n /**\n * Moves cursor up without shift\n * @param {Number} offset\n */\n moveCursorWithoutShift(offset: number) {\n if (offset < 0) {\n this.selectionStart += offset;\n this.selectionEnd = this.selectionStart;\n } else {\n this.selectionEnd += offset;\n this.selectionStart = this.selectionEnd;\n }\n return offset !== 0;\n }\n\n /**\n * Moves cursor left\n * @param {KeyboardEvent} e Event object\n */\n moveCursorLeft(e: KeyboardEvent) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorLeftOrRight('Left', e);\n }\n\n /**\n * @private\n * @return {Boolean} true if a change happened\n *\n * @todo refactor not to use method name composition\n */\n _move(\n e: KeyboardEvent,\n prop: 'selectionStart' | 'selectionEnd',\n direction: 'Left' | 'Right',\n ): boolean {\n let newValue: number | undefined;\n if (e.altKey) {\n newValue = this[`findWordBoundary${direction}`](this[prop]);\n } else if (e.metaKey || e.keyCode === 35 || e.keyCode === 36) {\n newValue = this[`findLineBoundary${direction}`](this[prop]);\n } else {\n this[prop] += direction === 'Left' ? -1 : 1;\n return true;\n }\n if (typeof newValue !== 'undefined' && this[prop] !== newValue) {\n this[prop] = newValue;\n return true;\n }\n return false;\n }\n\n /**\n * @private\n */\n _moveLeft(e: KeyboardEvent, prop: 'selectionStart' | 'selectionEnd') {\n return this._move(e, prop, 'Left');\n }\n\n /**\n * @private\n */\n _moveRight(e: KeyboardEvent, prop: 'selectionStart' | 'selectionEnd') {\n return this._move(e, prop, 'Right');\n }\n\n /**\n * Moves cursor left without keeping selection\n * @param {KeyboardEvent} e\n */\n moveCursorLeftWithoutShift(e: KeyboardEvent) {\n let change = true;\n this._selectionDirection = LEFT;\n\n // only move cursor when there is no selection,\n // otherwise we discard it, and leave cursor on same place\n if (\n this.selectionEnd === this.selectionStart &&\n this.selectionStart !== 0\n ) {\n change = this._moveLeft(e, 'selectionStart');\n }\n this.selectionEnd = this.selectionStart;\n return change;\n }\n\n /**\n * Moves cursor left while keeping selection\n * @param {KeyboardEvent} e\n */\n moveCursorLeftWithShift(e: KeyboardEvent) {\n if (\n this._selectionDirection === RIGHT &&\n this.selectionStart !== this.selectionEnd\n ) {\n return this._moveLeft(e, 'selectionEnd');\n } else if (this.selectionStart !== 0) {\n this._selectionDirection = LEFT;\n return this._moveLeft(e, 'selectionStart');\n }\n }\n\n /**\n * Moves cursor right\n * @param {KeyboardEvent} e Event object\n */\n moveCursorRight(e: KeyboardEvent) {\n if (\n this.selectionStart >= this._text.length &&\n this.selectionEnd >= this._text.length\n ) {\n return;\n }\n this._moveCursorLeftOrRight('Right', e);\n }\n\n /**\n * Moves cursor right or Left, fires event\n * @param {String} direction 'Left', 'Right'\n * @param {KeyboardEvent} e Event object\n */\n _moveCursorLeftOrRight(direction: 'Left' | 'Right', e: KeyboardEvent) {\n const actionName = `moveCursor${direction}${\n e.shiftKey ? 'WithShift' : 'WithoutShift'\n }` as const;\n this._currentCursorOpacity = 1;\n if (this[actionName](e)) {\n // TODO fix: abort and init should be an alternative depending\n // on selectionStart/End being equal or different\n this.abortCursorAnimation();\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n }\n\n /**\n * Moves cursor right while keeping selection\n * @param {KeyboardEvent} e\n */\n moveCursorRightWithShift(e: KeyboardEvent) {\n if (\n this._selectionDirection === LEFT &&\n this.selectionStart !== this.selectionEnd\n ) {\n return this._moveRight(e, 'selectionStart');\n } else if (this.selectionEnd !== this._text.length) {\n this._selectionDirection = RIGHT;\n return this._moveRight(e, 'selectionEnd');\n }\n }\n\n /**\n * Moves cursor right without keeping selection\n * @param {KeyboardEvent} e Event object\n */\n moveCursorRightWithoutShift(e: KeyboardEvent) {\n let changed = true;\n this._selectionDirection = RIGHT;\n\n if (this.selectionStart === this.selectionEnd) {\n changed = this._moveRight(e, 'selectionStart');\n this.selectionEnd = this.selectionStart;\n } else {\n this.selectionStart = this.selectionEnd;\n }\n return changed;\n }\n}\n","import type { TPointerEvent, TPointerEventInfo } from '../../EventTypeDefs';\nimport type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport { stopEvent } from '../../util/dom_event';\nimport { invertTransform } from '../../util/misc/matrix';\nimport { DraggableTextDelegate } from './DraggableTextDelegate';\nimport type { ITextEvents } from './ITextBehavior';\nimport { ITextKeyBehavior } from './ITextKeyBehavior';\nimport type { TOptions } from '../../typedefs';\nimport type { TextProps, SerializedTextProps } from '../Text/Text';\n\n/**\n * `LEFT_CLICK === 0`\n */\nconst notALeftClick = (e: Event) => !!(e as MouseEvent).button;\n\nexport abstract class ITextClickBehavior<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ITextEvents = ITextEvents,\n> extends ITextKeyBehavior {\n private declare __lastSelected: boolean;\n private declare __lastClickTime: number;\n private declare __lastLastClickTime: number;\n private declare __lastPointer: XY | Record;\n private declare __newClickTime: number;\n\n protected draggableTextDelegate: DraggableTextDelegate;\n\n initBehavior() {\n // Initializes event handlers related to cursor or selection\n this.on('mousedown', this._mouseDownHandler);\n this.on('mousedown:before', this._mouseDownHandlerBefore);\n this.on('mouseup', this.mouseUpHandler);\n this.on('mousedblclick', this.doubleClickHandler);\n this.on('tripleclick', this.tripleClickHandler);\n\n // Initializes \"dbclick\" event handler\n this.__lastClickTime = +new Date();\n // for triple click\n this.__lastLastClickTime = +new Date();\n this.__lastPointer = {};\n this.on('mousedown', this.onMouseDown);\n\n // @ts-expect-error in reality it is an IText instance\n this.draggableTextDelegate = new DraggableTextDelegate(this);\n\n super.initBehavior();\n }\n\n /**\n * If this method returns true a mouse move operation over a text selection\n * will not prevent the native mouse event allowing the browser to start a drag operation.\n * shouldStartDragging can be read 'do not prevent default for mouse move event'\n * To prevent drag and drop between objects both shouldStartDragging and onDragStart should return false\n * @returns\n */\n shouldStartDragging() {\n return this.draggableTextDelegate.isActive();\n }\n\n /**\n * @public override this method to control whether instance should/shouldn't become a drag source,\n * @see also {@link DraggableTextDelegate#isActive}\n * To prevent drag and drop between objects both shouldStartDragging and onDragStart should return false\n * @returns {boolean} should handle event\n */\n onDragStart(e: DragEvent) {\n return this.draggableTextDelegate.onDragStart(e);\n }\n\n /**\n * @public override this method to control whether instance should/shouldn't become a drop target\n */\n canDrop(e: DragEvent) {\n return this.draggableTextDelegate.canDrop(e);\n }\n\n /**\n * Default event handler to simulate triple click\n * @private\n */\n onMouseDown(options: TPointerEventInfo) {\n if (!this.canvas) {\n return;\n }\n this.__newClickTime = +new Date();\n const newPointer = options.pointer;\n if (this.isTripleClick(newPointer)) {\n this.fire('tripleclick', options);\n stopEvent(options.e);\n }\n this.__lastLastClickTime = this.__lastClickTime;\n this.__lastClickTime = this.__newClickTime;\n this.__lastPointer = newPointer;\n this.__lastSelected = this.selected && !this.getActiveControl();\n }\n\n isTripleClick(newPointer: XY) {\n return (\n this.__newClickTime - this.__lastClickTime < 500 &&\n this.__lastClickTime - this.__lastLastClickTime < 500 &&\n this.__lastPointer.x === newPointer.x &&\n this.__lastPointer.y === newPointer.y\n );\n }\n\n /**\n * Default handler for double click, select a word\n */\n doubleClickHandler(options: TPointerEventInfo) {\n if (!this.isEditing) {\n return;\n }\n this.selectWord(this.getSelectionStartFromPointer(options.e));\n }\n\n /**\n * Default handler for triple click, select a line\n */\n tripleClickHandler(options: TPointerEventInfo) {\n if (!this.isEditing) {\n return;\n }\n this.selectLine(this.getSelectionStartFromPointer(options.e));\n }\n\n /**\n * Default event handler for the basic functionalities needed on _mouseDown\n * can be overridden to do something different.\n * Scope of this implementation is: find the click position, set selectionStart\n * find selectionEnd, initialize the drawing of either cursor or selection area\n * initializing a mousedDown on a text area will cancel fabricjs knowledge of\n * current compositionMode. It will be set to false.\n */\n _mouseDownHandler({ e }: TPointerEventInfo) {\n if (\n !this.canvas ||\n !this.editable ||\n notALeftClick(e) ||\n this.getActiveControl()\n ) {\n return;\n }\n\n if (this.draggableTextDelegate.start(e)) {\n return;\n }\n\n this.canvas.textEditingManager.register(this);\n\n if (this.selected) {\n this.inCompositionMode = false;\n this.setCursorByClick(e);\n }\n\n if (this.isEditing) {\n this.__selectionStartOnMouseDown = this.selectionStart;\n if (this.selectionStart === this.selectionEnd) {\n this.abortCursorAnimation();\n }\n this.renderCursorOrSelection();\n }\n }\n\n /**\n * Default event handler for the basic functionalities needed on mousedown:before\n * can be overridden to do something different.\n * Scope of this implementation is: verify the object is already selected when mousing down\n */\n _mouseDownHandlerBefore({ e }: TPointerEventInfo) {\n if (!this.canvas || !this.editable || notALeftClick(e)) {\n return;\n }\n // we want to avoid that an object that was selected and then becomes unselectable,\n // may trigger editing mode in some way.\n this.selected = this === this.canvas._activeObject;\n }\n\n /**\n * standard handler for mouse up, overridable\n * @private\n */\n mouseUpHandler({ e, transform }: TPointerEventInfo) {\n const didDrag = this.draggableTextDelegate.end(e);\n if (this.canvas) {\n this.canvas.textEditingManager.unregister(this);\n\n const activeObject = this.canvas._activeObject;\n if (activeObject && activeObject !== this) {\n // avoid running this logic when there is an active object\n // this because is possible with shift click and fast clicks,\n // to rapidly deselect and reselect this object and trigger an enterEdit\n return;\n }\n }\n if (\n !this.editable ||\n (this.group && !this.group.interactive) ||\n (transform && transform.actionPerformed) ||\n notALeftClick(e) ||\n didDrag\n ) {\n return;\n }\n\n if (this.__lastSelected && !this.getActiveControl()) {\n this.selected = false;\n this.__lastSelected = false;\n this.enterEditing(e);\n if (this.selectionStart === this.selectionEnd) {\n this.initDelayedCursor(true);\n } else {\n this.renderCursorOrSelection();\n }\n } else {\n this.selected = true;\n }\n }\n\n /**\n * Changes cursor location in a text depending on passed pointer (x/y) object\n * @param {TPointerEvent} e Event object\n */\n setCursorByClick(e: TPointerEvent) {\n const newSelection = this.getSelectionStartFromPointer(e),\n start = this.selectionStart,\n end = this.selectionEnd;\n if (e.shiftKey) {\n this.setSelectionStartEndWithShift(start, end, newSelection);\n } else {\n this.selectionStart = newSelection;\n this.selectionEnd = newSelection;\n }\n if (this.isEditing) {\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n }\n\n /**\n * Returns index of a character corresponding to where an object was clicked\n * @param {TPointerEvent} e Event object\n * @return {Number} Index of a character\n */\n getSelectionStartFromPointer(e: TPointerEvent): number {\n const mouseOffset = this.canvas!.getScenePoint(e)\n .transform(invertTransform(this.calcTransformMatrix()))\n .add(new Point(-this._getLeftOffset(), -this._getTopOffset()));\n let height = 0,\n charIndex = 0,\n lineIndex = 0;\n\n for (let i = 0; i < this._textLines.length; i++) {\n if (height <= mouseOffset.y) {\n height += this.getHeightOfLine(i);\n lineIndex = i;\n if (i > 0) {\n charIndex +=\n this._textLines[i - 1].length + this.missingNewlineOffset(i - 1);\n }\n } else {\n break;\n }\n }\n const lineLeftOffset = Math.abs(this._getLineLeftOffset(lineIndex));\n let width = lineLeftOffset;\n const charLength = this._textLines[lineIndex].length;\n const chars = this.__charBounds[lineIndex];\n for (let j = 0; j < charLength; j++) {\n // i removed something about flipX here, check.\n const charWidth = chars[j].kernedWidth;\n const widthAfter = width + charWidth;\n if (mouseOffset.x <= widthAfter) {\n // if the pointer is closer to the end of the char we increment charIndex\n // in order to position the cursor after the char\n if (\n Math.abs(mouseOffset.x - widthAfter) <=\n Math.abs(mouseOffset.x - width)\n ) {\n charIndex++;\n }\n break;\n }\n width = widthAfter;\n charIndex++;\n }\n\n return Math.min(\n // if object is horizontally flipped, mirror cursor location from the end\n this.flipX ? charLength - charIndex : charIndex,\n this._text.length,\n );\n }\n}\n","export type TKeyMapIText = Record<\n KeyboardEvent['keyCode'],\n CursorHandlingMethods\n>;\n\nexport type CursorHandlingMethods =\n | 'moveCursorUp'\n | 'moveCursorDown'\n | 'moveCursorLeft'\n | 'moveCursorRight'\n | 'exitEditing'\n | 'copy'\n | 'cut'\n | 'selectAll';\n\nconst MOVE_CURSOR_UP: CursorHandlingMethods = 'moveCursorUp';\nconst MOVE_CURSOR_DOWN: CursorHandlingMethods = 'moveCursorDown';\nconst MOVE_CURSOR_LEFT: CursorHandlingMethods = 'moveCursorLeft';\nconst MOVE_CURSOR_RIGHT: CursorHandlingMethods = 'moveCursorRight';\nconst EXIT_EDITING: CursorHandlingMethods = 'exitEditing';\n\n// @TODO look into import { Key } from 'ts-key-enum';\n// and transition from keyCode to Key\n// also reduce string duplication\nexport const keysMap: TKeyMapIText = {\n 9: EXIT_EDITING,\n 27: EXIT_EDITING,\n 33: MOVE_CURSOR_UP,\n 34: MOVE_CURSOR_DOWN,\n 35: MOVE_CURSOR_RIGHT,\n 36: MOVE_CURSOR_LEFT,\n 37: MOVE_CURSOR_LEFT,\n 38: MOVE_CURSOR_UP,\n 39: MOVE_CURSOR_RIGHT,\n 40: MOVE_CURSOR_DOWN,\n};\n\nexport const keysMapRtl: TKeyMapIText = {\n 9: EXIT_EDITING,\n 27: EXIT_EDITING,\n 33: MOVE_CURSOR_UP,\n 34: MOVE_CURSOR_DOWN,\n 35: MOVE_CURSOR_LEFT,\n 36: MOVE_CURSOR_RIGHT,\n 37: MOVE_CURSOR_RIGHT,\n 38: MOVE_CURSOR_UP,\n 39: MOVE_CURSOR_LEFT,\n 40: MOVE_CURSOR_DOWN,\n};\n\n/**\n * For functionalities on keyUp + ctrl || cmd\n */\nexport const ctrlKeysMapUp: TKeyMapIText = {\n 67: 'copy',\n // there was a reason this wasn't deleted. for now leave it here\n 88: 'cut',\n};\n\n/**\n * For functionalities on keyDown + ctrl || cmd\n */\nexport const ctrlKeysMapDown: TKeyMapIText = {\n 65: 'selectAll',\n};\n","import { Canvas } from '../../canvas/Canvas';\nimport type { ITextEvents } from './ITextBehavior';\nimport { ITextClickBehavior } from './ITextClickBehavior';\nimport {\n ctrlKeysMapDown,\n ctrlKeysMapUp,\n keysMap,\n keysMapRtl,\n} from './constants';\nimport type { TClassProperties, TFiller, TOptions } from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport type { SerializedTextProps, TextProps } from '../Text/Text';\nimport {\n JUSTIFY,\n JUSTIFY_CENTER,\n JUSTIFY_LEFT,\n JUSTIFY_RIGHT,\n} from '../Text/constants';\nimport { CENTER, FILL, LEFT, RIGHT } from '../../constants';\nimport type { ObjectToCanvasElementOptions } from '../Object/Object';\n\nexport type CursorBoundaries = {\n left: number;\n top: number;\n leftOffset: number;\n topOffset: number;\n};\n\nexport type CursorRenderingData = {\n color: string;\n opacity: number;\n left: number;\n top: number;\n width: number;\n height: number;\n};\n\n// Declare IText protected properties to workaround TS\nconst protectedDefaultValues = {\n _selectionDirection: null,\n _reSpace: /\\s|\\r?\\n/,\n inCompositionMode: false,\n};\n\nexport const iTextDefaultValues: Partial> = {\n selectionStart: 0,\n selectionEnd: 0,\n selectionColor: 'rgba(17,119,255,0.3)',\n isEditing: false,\n editable: true,\n editingBorderColor: 'rgba(102,153,255,0.25)',\n cursorWidth: 2,\n cursorColor: '',\n cursorDelay: 1000,\n cursorDuration: 600,\n caching: true,\n hiddenTextareaContainer: null,\n keysMap,\n keysMapRtl,\n ctrlKeysMapDown,\n ctrlKeysMapUp,\n ...protectedDefaultValues,\n};\n\n// @TODO this is not complete\ninterface UniqueITextProps {\n selectionStart: number;\n selectionEnd: number;\n}\n\nexport interface SerializedITextProps\n extends SerializedTextProps,\n UniqueITextProps {}\n\nexport interface ITextProps extends TextProps, UniqueITextProps {}\n\n/**\n * @fires changed\n * @fires selection:changed\n * @fires editing:entered\n * @fires editing:exited\n * @fires dragstart\n * @fires drag drag event firing on the drag source\n * @fires dragend\n * @fires copy\n * @fires cut\n * @fires paste\n *\n * #### Supported key combinations\n * ```\n * Move cursor: left, right, up, down\n * Select character: shift + left, shift + right\n * Select text vertically: shift + up, shift + down\n * Move cursor by word: alt + left, alt + right\n * Select words: shift + alt + left, shift + alt + right\n * Move cursor to line start/end: cmd + left, cmd + right or home, end\n * Select till start/end of line: cmd + shift + left, cmd + shift + right or shift + home, shift + end\n * Jump to start/end of text: cmd + up, cmd + down\n * Select till start/end of text: cmd + shift + up, cmd + shift + down or shift + pgUp, shift + pgDown\n * Delete character: backspace\n * Delete word: alt + backspace\n * Delete line: cmd + backspace\n * Forward delete: delete\n * Copy text: ctrl/cmd + c\n * Paste text: ctrl/cmd + v\n * Cut text: ctrl/cmd + x\n * Select entire text: ctrl/cmd + a\n * Quit editing tab or esc\n * ```\n *\n * #### Supported mouse/touch combination\n * ```\n * Position cursor: click/touch\n * Create selection: click/touch & drag\n * Create selection: click & shift + click\n * Select word: double click\n * Select line: triple click\n * ```\n */\nexport class IText<\n Props extends TOptions = Partial,\n SProps extends SerializedITextProps = SerializedITextProps,\n EventSpec extends ITextEvents = ITextEvents,\n >\n extends ITextClickBehavior\n implements UniqueITextProps\n{\n /**\n * Index where text selection starts (or where cursor is when there is no selection)\n * @type Number\n * @default\n */\n declare selectionStart: number;\n\n /**\n * Index where text selection ends\n * @type Number\n * @default\n */\n declare selectionEnd: number;\n\n declare compositionStart: number;\n\n declare compositionEnd: number;\n\n /**\n * Color of text selection\n * @type String\n * @default\n */\n declare selectionColor: string;\n\n /**\n * Indicates whether text is in editing mode\n * @type Boolean\n * @default\n */\n declare isEditing: boolean;\n\n /**\n * Indicates whether a text can be edited\n * @type Boolean\n * @default\n */\n declare editable: boolean;\n\n /**\n * Border color of text object while it's in editing mode\n * @type String\n * @default\n */\n declare editingBorderColor: string;\n\n /**\n * Width of cursor (in px)\n * @type Number\n * @default\n */\n declare cursorWidth: number;\n\n /**\n * Color of text cursor color in editing mode.\n * if not set (default) will take color from the text.\n * if set to a color value that fabric can understand, it will\n * be used instead of the color of the text at the current position.\n * @type String\n * @default\n */\n declare cursorColor: string;\n\n /**\n * Delay between cursor blink (in ms)\n * @type Number\n * @default\n */\n declare cursorDelay: number;\n\n /**\n * Duration of cursor fade in (in ms)\n * @type Number\n * @default\n */\n declare cursorDuration: number;\n\n declare compositionColor: string;\n\n /**\n * Indicates whether internal text char widths can be cached\n * @type Boolean\n * @default\n */\n declare caching: boolean;\n\n static ownDefaults = iTextDefaultValues;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...IText.ownDefaults };\n }\n\n static type = 'IText';\n\n get type() {\n const type = super.type;\n // backward compatibility\n return type === 'itext' ? 'i-text' : type;\n }\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n */\n constructor(text: string, options?: Props) {\n super(text, { ...IText.ownDefaults, ...options } as Props);\n this.initBehavior();\n }\n\n /**\n * While editing handle differently\n * @private\n * @param {string} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n if (this.isEditing && this._savedProps && key in this._savedProps) {\n // @ts-expect-error irritating TS\n this._savedProps[key] = value;\n return this;\n }\n if (key === 'canvas') {\n this.canvas instanceof Canvas &&\n this.canvas.textEditingManager.remove(this);\n value instanceof Canvas && value.textEditingManager.add(this);\n }\n return super._set(key, value);\n }\n\n /**\n * Sets selection start (left boundary of a selection)\n * @param {Number} index Index to set selection start to\n */\n setSelectionStart(index: number) {\n index = Math.max(index, 0);\n this._updateAndFire('selectionStart', index);\n }\n\n /**\n * Sets selection end (right boundary of a selection)\n * @param {Number} index Index to set selection end to\n */\n setSelectionEnd(index: number) {\n index = Math.min(index, this.text.length);\n this._updateAndFire('selectionEnd', index);\n }\n\n /**\n * @private\n * @param {String} property 'selectionStart' or 'selectionEnd'\n * @param {Number} index new position of property\n */\n protected _updateAndFire(\n property: 'selectionStart' | 'selectionEnd',\n index: number,\n ) {\n if (this[property] !== index) {\n this._fireSelectionChanged();\n this[property] = index;\n }\n this._updateTextarea();\n }\n\n /**\n * Fires the even of selection changed\n * @private\n */\n _fireSelectionChanged() {\n this.fire('selection:changed');\n this.canvas && this.canvas.fire('text:selection:changed', { target: this });\n }\n\n /**\n * Initialize text dimensions. Render all text on given context\n * or on a offscreen canvas to get the text width with measureText.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n * @private\n */\n initDimensions() {\n this.isEditing && this.initDelayedCursor();\n super.initDimensions();\n }\n\n /**\n * Gets style of a current selection/cursor (at the start position)\n * if startIndex or endIndex are not provided, selectionStart or selectionEnd will be used.\n * @param {Number} startIndex Start index to get styles at\n * @param {Number} endIndex End index to get styles at, if not specified selectionEnd or startIndex + 1\n * @param {Boolean} [complete] get full style or not\n * @return {Array} styles an array with one, zero or more Style objects\n */\n getSelectionStyles(\n startIndex: number = this.selectionStart || 0,\n endIndex: number = this.selectionEnd,\n complete?: boolean,\n ) {\n return super.getSelectionStyles(startIndex, endIndex, complete);\n }\n\n /**\n * Sets style of a current selection, if no selection exist, do not set anything.\n * @param {Object} [styles] Styles object\n * @param {Number} [startIndex] Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n */\n setSelectionStyles(\n styles: object,\n startIndex: number = this.selectionStart || 0,\n endIndex: number = this.selectionEnd,\n ) {\n return super.setSelectionStyles(styles, startIndex, endIndex);\n }\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor (or selection start)\n * @param {Number} [selectionStart] Optional index. When not given, current selectionStart is used.\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.\n */\n get2DCursorLocation(\n selectionStart = this.selectionStart,\n skipWrapping?: boolean,\n ) {\n return super.get2DCursorLocation(selectionStart, skipWrapping);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n super.render(ctx);\n // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor\n // the correct position but not at every cursor animation.\n this.cursorOffsetCache = {};\n this.renderCursorOrSelection();\n }\n\n /**\n * @override block cursor/selection logic while rendering the exported canvas\n * @todo this workaround should be replaced with a more robust solution\n */\n toCanvasElement(options?: ObjectToCanvasElementOptions): HTMLCanvasElement {\n const isEditing = this.isEditing;\n this.isEditing = false;\n const canvas = super.toCanvasElement(options);\n this.isEditing = isEditing;\n return canvas;\n }\n\n /**\n * Renders cursor or selection (depending on what exists)\n * it does on the contextTop. If contextTop is not available, do nothing.\n */\n renderCursorOrSelection() {\n if (!this.isEditing) {\n return;\n }\n const ctx = this.clearContextTop(true);\n if (!ctx) {\n return;\n }\n const boundaries = this._getCursorBoundaries();\n if (this.selectionStart === this.selectionEnd && !this.inCompositionMode) {\n this.renderCursor(ctx, boundaries);\n } else {\n this.renderSelection(ctx, boundaries);\n }\n this.canvas!.contextTopDirty = true;\n ctx.restore();\n }\n\n /**\n * Returns cursor boundaries (left, top, leftOffset, topOffset)\n * left/top are left/top of entire text box\n * leftOffset/topOffset are offset from that left/top point of a text box\n * @private\n * @param {number} [index] index from start\n * @param {boolean} [skipCaching]\n */\n _getCursorBoundaries(\n index: number = this.selectionStart,\n skipCaching?: boolean,\n ): CursorBoundaries {\n const left = this._getLeftOffset(),\n top = this._getTopOffset(),\n offsets = this._getCursorBoundariesOffsets(index, skipCaching);\n return {\n left: left,\n top: top,\n leftOffset: offsets.left,\n topOffset: offsets.top,\n };\n }\n\n /**\n * Caches and returns cursor left/top offset relative to instance's center point\n * @private\n * @param {number} index index from start\n * @param {boolean} [skipCaching]\n */\n _getCursorBoundariesOffsets(\n index: number,\n skipCaching?: boolean,\n ): { left: number; top: number } {\n if (skipCaching) {\n return this.__getCursorBoundariesOffsets(index);\n }\n if (this.cursorOffsetCache && 'top' in this.cursorOffsetCache) {\n return this.cursorOffsetCache as { left: number; top: number };\n }\n return (this.cursorOffsetCache = this.__getCursorBoundariesOffsets(index));\n }\n\n /**\n * Calculates cursor left/top offset relative to instance's center point\n * @private\n * @param {number} index index from start\n */\n __getCursorBoundariesOffsets(index: number) {\n let topOffset = 0,\n leftOffset = 0;\n const { charIndex, lineIndex } = this.get2DCursorLocation(index);\n\n for (let i = 0; i < lineIndex; i++) {\n topOffset += this.getHeightOfLine(i);\n }\n const lineLeftOffset = this._getLineLeftOffset(lineIndex);\n const bound = this.__charBounds[lineIndex][charIndex];\n bound && (leftOffset = bound.left);\n if (\n this.charSpacing !== 0 &&\n charIndex === this._textLines[lineIndex].length\n ) {\n leftOffset -= this._getWidthOfCharSpacing();\n }\n const boundaries = {\n top: topOffset,\n left: lineLeftOffset + (leftOffset > 0 ? leftOffset : 0),\n };\n if (this.direction === 'rtl') {\n if (\n this.textAlign === RIGHT ||\n this.textAlign === JUSTIFY ||\n this.textAlign === JUSTIFY_RIGHT\n ) {\n boundaries.left *= -1;\n } else if (this.textAlign === LEFT || this.textAlign === JUSTIFY_LEFT) {\n boundaries.left = lineLeftOffset - (leftOffset > 0 ? leftOffset : 0);\n } else if (\n this.textAlign === CENTER ||\n this.textAlign === JUSTIFY_CENTER\n ) {\n boundaries.left = lineLeftOffset - (leftOffset > 0 ? leftOffset : 0);\n }\n }\n return boundaries;\n }\n\n /**\n * Renders cursor on context Top, outside the animation cycle, on request\n * Used for the drag/drop effect.\n * If contextTop is not available, do nothing.\n */\n renderCursorAt(selectionStart: number) {\n this._renderCursor(\n this.canvas!.contextTop,\n this._getCursorBoundaries(selectionStart, true),\n selectionStart,\n );\n }\n\n /**\n * Renders cursor\n * @param {Object} boundaries\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderCursor(ctx: CanvasRenderingContext2D, boundaries: CursorBoundaries) {\n this._renderCursor(ctx, boundaries, this.selectionStart);\n }\n\n /**\n * Return the data needed to render the cursor for given selection start\n * The left,top are relative to the object, while width and height are prescaled\n * to look think with canvas zoom and object scaling,\n * so they depend on canvas and object scaling\n */\n getCursorRenderingData(\n selectionStart: number = this.selectionStart,\n boundaries: CursorBoundaries = this._getCursorBoundaries(selectionStart),\n ): CursorRenderingData {\n const cursorLocation = this.get2DCursorLocation(selectionStart),\n lineIndex = cursorLocation.lineIndex,\n charIndex =\n cursorLocation.charIndex > 0 ? cursorLocation.charIndex - 1 : 0,\n charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize'),\n multiplier = this.getObjectScaling().x * this.canvas!.getZoom(),\n cursorWidth = this.cursorWidth / multiplier,\n dy = this.getValueOfPropertyAt(lineIndex, charIndex, 'deltaY'),\n topOffset =\n boundaries.topOffset +\n ((1 - this._fontSizeFraction) * this.getHeightOfLine(lineIndex)) /\n this.lineHeight -\n charHeight * (1 - this._fontSizeFraction);\n\n return {\n color:\n this.cursorColor ||\n (this.getValueOfPropertyAt(lineIndex, charIndex, 'fill') as string),\n opacity: this._currentCursorOpacity,\n left: boundaries.left + boundaries.leftOffset - cursorWidth / 2,\n top: topOffset + boundaries.top + dy,\n width: cursorWidth,\n height: charHeight,\n };\n }\n\n /**\n * Render the cursor at the given selectionStart.\n *\n */\n _renderCursor(\n ctx: CanvasRenderingContext2D,\n boundaries: CursorBoundaries,\n selectionStart: number,\n ) {\n const { color, opacity, left, top, width, height } =\n this.getCursorRenderingData(selectionStart, boundaries);\n ctx.fillStyle = color;\n ctx.globalAlpha = opacity;\n ctx.fillRect(left, top, width, height);\n }\n\n /**\n * Renders text selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderSelection(ctx: CanvasRenderingContext2D, boundaries: CursorBoundaries) {\n const selection = {\n selectionStart: this.inCompositionMode\n ? this.hiddenTextarea!.selectionStart\n : this.selectionStart,\n selectionEnd: this.inCompositionMode\n ? this.hiddenTextarea!.selectionEnd\n : this.selectionEnd,\n };\n this._renderSelection(ctx, selection, boundaries);\n }\n\n /**\n * Renders drag start text selection\n */\n renderDragSourceEffect() {\n const dragStartSelection =\n this.draggableTextDelegate.getDragStartSelection()!;\n this._renderSelection(\n this.canvas!.contextTop,\n dragStartSelection,\n this._getCursorBoundaries(dragStartSelection.selectionStart, true),\n );\n }\n\n renderDropTargetEffect(e: DragEvent) {\n const dragSelection = this.getSelectionStartFromPointer(e);\n this.renderCursorAt(dragSelection);\n }\n\n /**\n * Renders text selection\n * @private\n * @param {{ selectionStart: number, selectionEnd: number }} selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n _renderSelection(\n ctx: CanvasRenderingContext2D,\n selection: { selectionStart: number; selectionEnd: number },\n boundaries: CursorBoundaries,\n ) {\n const selectionStart = selection.selectionStart,\n selectionEnd = selection.selectionEnd,\n isJustify = this.textAlign.includes(JUSTIFY),\n start = this.get2DCursorLocation(selectionStart),\n end = this.get2DCursorLocation(selectionEnd),\n startLine = start.lineIndex,\n endLine = end.lineIndex,\n startChar = start.charIndex < 0 ? 0 : start.charIndex,\n endChar = end.charIndex < 0 ? 0 : end.charIndex;\n\n for (let i = startLine; i <= endLine; i++) {\n const lineOffset = this._getLineLeftOffset(i) || 0;\n let lineHeight = this.getHeightOfLine(i),\n realLineHeight = 0,\n boxStart = 0,\n boxEnd = 0;\n\n if (i === startLine) {\n boxStart = this.__charBounds[startLine][startChar].left;\n }\n if (i >= startLine && i < endLine) {\n boxEnd =\n isJustify && !this.isEndOfWrapping(i)\n ? this.width\n : this.getLineWidth(i) || 5; // WTF is this 5?\n } else if (i === endLine) {\n if (endChar === 0) {\n boxEnd = this.__charBounds[endLine][endChar].left;\n } else {\n const charSpacing = this._getWidthOfCharSpacing();\n boxEnd =\n this.__charBounds[endLine][endChar - 1].left +\n this.__charBounds[endLine][endChar - 1].width -\n charSpacing;\n }\n }\n realLineHeight = lineHeight;\n if (this.lineHeight < 1 || (i === endLine && this.lineHeight > 1)) {\n lineHeight /= this.lineHeight;\n }\n let drawStart = boundaries.left + lineOffset + boxStart,\n drawHeight = lineHeight,\n extraTop = 0;\n const drawWidth = boxEnd - boxStart;\n if (this.inCompositionMode) {\n ctx.fillStyle = this.compositionColor || 'black';\n drawHeight = 1;\n extraTop = lineHeight;\n } else {\n ctx.fillStyle = this.selectionColor;\n }\n if (this.direction === 'rtl') {\n if (\n this.textAlign === RIGHT ||\n this.textAlign === JUSTIFY ||\n this.textAlign === JUSTIFY_RIGHT\n ) {\n drawStart = this.width - drawStart - drawWidth;\n } else if (this.textAlign === LEFT || this.textAlign === JUSTIFY_LEFT) {\n drawStart = boundaries.left + lineOffset - boxEnd;\n } else if (\n this.textAlign === CENTER ||\n this.textAlign === JUSTIFY_CENTER\n ) {\n drawStart = boundaries.left + lineOffset - boxEnd;\n }\n }\n ctx.fillRect(\n drawStart,\n boundaries.top + boundaries.topOffset + extraTop,\n drawWidth,\n drawHeight,\n );\n boundaries.topOffset += realLineHeight;\n }\n }\n\n /**\n * High level function to know the height of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns fontSize of char at the current cursor\n * Unused from the library, is for the end user\n * @return {Number} Character font size\n */\n getCurrentCharFontSize(): number {\n const cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, 'fontSize');\n }\n\n /**\n * High level function to know the color of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns color (fill) of char at the current cursor\n * if the text object has a pattern or gradient for filler, it will return that.\n * Unused by the library, is for the end user\n * @return {String | TFiller} Character color (fill)\n */\n getCurrentCharColor(): string | TFiller | null {\n const cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, FILL);\n }\n\n /**\n * Returns the cursor position for the getCurrent.. functions\n * @private\n */\n _getCurrentCharIndex() {\n const cursorPosition = this.get2DCursorLocation(this.selectionStart, true),\n charIndex =\n cursorPosition.charIndex > 0 ? cursorPosition.charIndex - 1 : 0;\n return { l: cursorPosition.lineIndex, c: charIndex };\n }\n\n dispose() {\n this.exitEditingImpl();\n this.draggableTextDelegate.dispose();\n super.dispose();\n }\n}\n\nclassRegistry.setClass(IText);\n// legacy\nclassRegistry.setClass(IText, 'i-text');\n","import type { TClassProperties, TOptions } from '../typedefs';\nimport { IText } from './IText/IText';\nimport { classRegistry } from '../ClassRegistry';\nimport { createTextboxDefaultControls } from '../controls/commonControls';\nimport { JUSTIFY } from './Text/constants';\nimport type { TextStyleDeclaration } from './Text/StyledText';\nimport type { SerializedITextProps, ITextProps } from './IText/IText';\nimport type { ITextEvents } from './IText/ITextBehavior';\nimport type { TextLinesInfo } from './Text/Text';\nimport type { Control } from '../controls/Control';\n\n// @TODO: Many things here are configuration related and shouldn't be on the class nor prototype\n// regexes, list of properties that are not suppose to change by instances, magic consts.\n// this will be a separated effort\nexport const textboxDefaultValues: Partial> = {\n minWidth: 20,\n dynamicMinWidth: 2,\n lockScalingFlip: true,\n noScaleCache: false,\n _wordJoiners: /[ \\t\\r]/,\n splitByGrapheme: false,\n};\n\nexport type GraphemeData = {\n wordsData: {\n word: string[];\n width: number;\n }[][];\n largestWordWidth: number;\n};\n\nexport type StyleMap = Record;\n\n// @TODO this is not complete\ninterface UniqueTextboxProps {\n minWidth: number;\n splitByGrapheme: boolean;\n dynamicMinWidth: number;\n _wordJoiners: RegExp;\n}\n\nexport interface SerializedTextboxProps\n extends SerializedITextProps,\n Pick {}\n\nexport interface TextboxProps extends ITextProps, UniqueTextboxProps {}\n\n/**\n * Textbox class, based on IText, allows the user to resize the text rectangle\n * and wraps lines automatically. Textboxes have their Y scaling locked, the\n * user can only change width. Height is adjusted automatically based on the\n * wrapping of lines.\n */\nexport class Textbox<\n Props extends TOptions = Partial,\n SProps extends SerializedTextboxProps = SerializedTextboxProps,\n EventSpec extends ITextEvents = ITextEvents,\n >\n extends IText\n implements UniqueTextboxProps\n{\n /**\n * Minimum width of textbox, in pixels.\n * @type Number\n * @default\n */\n declare minWidth: number;\n\n /**\n * Minimum calculated width of a textbox, in pixels.\n * fixed to 2 so that an empty textbox cannot go to 0\n * and is still selectable without text.\n * @type Number\n * @default\n */\n declare dynamicMinWidth: number;\n\n /**\n * Use this boolean property in order to split strings that have no white space concept.\n * this is a cheap way to help with chinese/japanese\n * @type Boolean\n * @since 2.6.0\n */\n declare splitByGrapheme: boolean;\n\n declare _wordJoiners: RegExp;\n\n declare _styleMap: StyleMap;\n\n declare isWrapping: boolean;\n\n static type = 'Textbox';\n\n static textLayoutProperties = [...IText.textLayoutProperties, 'width'];\n\n static ownDefaults = textboxDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Textbox.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n */\n constructor(text: string, options?: Props) {\n super(text, { ...Textbox.ownDefaults, ...options } as Props);\n }\n\n /**\n * Creates the default control object.\n * If you prefer to have on instance of controls shared among all objects\n * make this function return an empty object and add controls to the ownDefaults object\n */\n static createControls(): { controls: Record } {\n return { controls: createTextboxDefaultControls() };\n }\n\n /**\n * Unlike superclass's version of this function, Textbox does not update\n * its width.\n * @private\n * @override\n */\n initDimensions() {\n if (!this.initialized) {\n return;\n }\n this.isEditing && this.initDelayedCursor();\n this._clearCache();\n // clear dynamicMinWidth as it will be different after we re-wrap line\n this.dynamicMinWidth = 0;\n // wrap lines\n this._styleMap = this._generateStyleMap(this._splitText());\n // if after wrapping, the width is smaller than dynamicMinWidth, change the width and re-wrap\n if (this.dynamicMinWidth > this.width) {\n this._set('width', this.dynamicMinWidth);\n }\n if (this.textAlign.includes(JUSTIFY)) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n // clear cache and re-calculate height\n this.height = this.calcTextHeight();\n }\n\n /**\n * Generate an object that translates the style object so that it is\n * broken up by visual lines (new lines and automatic wrapping).\n * The original text styles object is broken up by actual lines (new lines only),\n * which is only sufficient for Text / IText\n * @private\n */\n _generateStyleMap(textInfo: TextLinesInfo): StyleMap {\n let realLineCount = 0,\n realLineCharCount = 0,\n charCount = 0;\n const map: StyleMap = {};\n\n for (let i = 0; i < textInfo.graphemeLines.length; i++) {\n if (textInfo.graphemeText[charCount] === '\\n' && i > 0) {\n realLineCharCount = 0;\n charCount++;\n realLineCount++;\n } else if (\n !this.splitByGrapheme &&\n this._reSpaceAndTab.test(textInfo.graphemeText[charCount]) &&\n i > 0\n ) {\n // this case deals with space's that are removed from end of lines when wrapping\n realLineCharCount++;\n charCount++;\n }\n\n map[i] = { line: realLineCount, offset: realLineCharCount };\n\n charCount += textInfo.graphemeLines[i].length;\n realLineCharCount += textInfo.graphemeLines[i].length;\n }\n\n return map;\n }\n\n /**\n * Returns true if object has a style property or has it on a specified line\n * @param {Number} lineIndex\n * @return {Boolean}\n */\n styleHas(property: keyof TextStyleDeclaration, lineIndex: number): boolean {\n if (this._styleMap && !this.isWrapping) {\n const map = this._styleMap[lineIndex];\n if (map) {\n lineIndex = map.line;\n }\n }\n return super.styleHas(property, lineIndex);\n }\n\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles(lineIndex: number): boolean {\n if (!this.styles) {\n return true;\n }\n let offset = 0,\n nextLineIndex = lineIndex + 1,\n nextOffset: number,\n shouldLimit = false;\n const map = this._styleMap[lineIndex],\n mapNextLine = this._styleMap[lineIndex + 1];\n if (map) {\n lineIndex = map.line;\n offset = map.offset;\n }\n if (mapNextLine) {\n nextLineIndex = mapNextLine.line;\n shouldLimit = nextLineIndex === lineIndex;\n nextOffset = mapNextLine.offset;\n }\n const obj =\n typeof lineIndex === 'undefined'\n ? this.styles\n : { line: this.styles[lineIndex] };\n for (const p1 in obj) {\n for (const p2 in obj[p1]) {\n const p2Number = parseInt(p2, 10);\n if (p2Number >= offset && (!shouldLimit || p2Number < nextOffset!)) {\n // eslint-disable-next-line no-unused-vars\n for (const p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n /**\n * @protected\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {TextStyleDeclaration} a style object reference to the existing one or a new empty object when undefined\n */\n _getStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n ): TextStyleDeclaration {\n if (this._styleMap && !this.isWrapping) {\n const map = this._styleMap[lineIndex];\n if (!map) {\n return {};\n }\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n }\n return super._getStyleDeclaration(lineIndex, charIndex);\n }\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n protected _setStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n style: object,\n ) {\n const map = this._styleMap[lineIndex];\n super._setStyleDeclaration(map.line, map.offset + charIndex, style);\n }\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n protected _deleteStyleDeclaration(lineIndex: number, charIndex: number) {\n const map = this._styleMap[lineIndex];\n super._deleteStyleDeclaration(map.line, map.offset + charIndex);\n }\n\n /**\n * probably broken need a fix\n * Returns the real style line that correspond to the wrapped lineIndex line\n * Used just to verify if the line does exist or not.\n * @param {Number} lineIndex\n * @returns {Boolean} if the line exists or not\n * @private\n */\n protected _getLineStyle(lineIndex: number): boolean {\n const map = this._styleMap[lineIndex];\n return !!this.styles[map.line];\n }\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @param {Object} style\n * @private\n */\n protected _setLineStyle(lineIndex: number) {\n const map = this._styleMap[lineIndex];\n super._setLineStyle(map.line);\n }\n\n /**\n * Wraps text using the 'width' property of Textbox. First this function\n * splits text on newlines, so we preserve newlines entered by the user.\n * Then it wraps each line using the width of the Textbox by calling\n * _wrapLine().\n * @param {Array} lines The string array of text that is split into lines\n * @param {Number} desiredWidth width you want to wrap to\n * @returns {Array} Array of lines\n */\n _wrapText(lines: string[], desiredWidth: number): string[][] {\n this.isWrapping = true;\n // extract all thewords and the widths to optimally wrap lines.\n const data = this.getGraphemeDataForRender(lines);\n const wrapped: string[][] = [];\n for (let i = 0; i < data.wordsData.length; i++) {\n wrapped.push(...this._wrapLine(i, desiredWidth, data));\n }\n this.isWrapping = false;\n return wrapped;\n }\n\n /**\n * For each line of text terminated by an hard line stop,\n * measure each word width and extract the largest word from all.\n * The returned words here are the one that at the end will be rendered.\n * @param {string[]} lines the lines we need to measure\n *\n */\n getGraphemeDataForRender(lines: string[]): GraphemeData {\n const splitByGrapheme = this.splitByGrapheme,\n infix = splitByGrapheme ? '' : ' ';\n\n let largestWordWidth = 0;\n\n const data = lines.map((line, lineIndex) => {\n let offset = 0;\n const wordsOrGraphemes = splitByGrapheme\n ? this.graphemeSplit(line)\n : this.wordSplit(line);\n\n if (wordsOrGraphemes.length === 0) {\n return [{ word: [], width: 0 }];\n }\n\n return wordsOrGraphemes.map((word: string) => {\n // if using splitByGrapheme words are already in graphemes.\n const graphemeArray = splitByGrapheme\n ? [word]\n : this.graphemeSplit(word);\n const width = this._measureWord(graphemeArray, lineIndex, offset);\n largestWordWidth = Math.max(width, largestWordWidth);\n offset += graphemeArray.length + infix.length;\n return { word: graphemeArray, width };\n });\n });\n\n return {\n wordsData: data,\n largestWordWidth,\n };\n }\n\n /**\n * Helper function to measure a string of text, given its lineIndex and charIndex offset\n * It gets called when charBounds are not available yet.\n * Override if necessary\n * Use with {@link Textbox#wordSplit}\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {String} text\n * @param {number} lineIndex\n * @param {number} charOffset\n * @returns {number}\n */\n _measureWord(word: string[], lineIndex: number, charOffset = 0): number {\n let width = 0,\n prevGrapheme;\n const skipLeft = true;\n for (let i = 0, len = word.length; i < len; i++) {\n const box = this._getGraphemeBox(\n word[i],\n lineIndex,\n i + charOffset,\n prevGrapheme,\n skipLeft,\n );\n width += box.kernedWidth;\n prevGrapheme = word[i];\n }\n return width;\n }\n\n /**\n * Override this method to customize word splitting\n * Use with {@link Textbox#_measureWord}\n * @param {string} value\n * @returns {string[]} array of words\n */\n wordSplit(value: string): string[] {\n return value.split(this._wordJoiners);\n }\n\n /**\n * Wraps a line of text using the width of the Textbox as desiredWidth\n * and leveraging the known width o words from GraphemeData\n * @private\n * @param {Number} lineIndex\n * @param {Number} desiredWidth width you want to wrap the line to\n * @param {GraphemeData} graphemeData an object containing all the lines' words width.\n * @param {Number} reservedSpace space to remove from wrapping for custom functionalities\n * @returns {Array} Array of line(s) into which the given text is wrapped\n * to.\n */\n _wrapLine(\n lineIndex: number,\n desiredWidth: number,\n { largestWordWidth, wordsData }: GraphemeData,\n reservedSpace = 0,\n ): string[][] {\n const additionalSpace = this._getWidthOfCharSpacing(),\n splitByGrapheme = this.splitByGrapheme,\n graphemeLines = [],\n infix = splitByGrapheme ? '' : ' ';\n\n let lineWidth = 0,\n line: string[] = [],\n // spaces in different languages?\n offset = 0,\n infixWidth = 0,\n lineJustStarted = true;\n\n desiredWidth -= reservedSpace;\n\n const maxWidth = Math.max(\n desiredWidth,\n largestWordWidth,\n this.dynamicMinWidth,\n );\n // layout words\n const data = wordsData[lineIndex];\n offset = 0;\n let i;\n for (i = 0; i < data.length; i++) {\n const { word, width: wordWidth } = data[i];\n offset += word.length;\n\n lineWidth += infixWidth + wordWidth - additionalSpace;\n if (lineWidth > maxWidth && !lineJustStarted) {\n graphemeLines.push(line);\n line = [];\n lineWidth = wordWidth;\n lineJustStarted = true;\n } else {\n lineWidth += additionalSpace;\n }\n\n if (!lineJustStarted && !splitByGrapheme) {\n line.push(infix);\n }\n line = line.concat(word);\n\n infixWidth = splitByGrapheme\n ? 0\n : this._measureWord([infix], lineIndex, offset);\n offset++;\n lineJustStarted = false;\n }\n\n i && graphemeLines.push(line);\n\n // TODO: this code is probably not necessary anymore.\n // it can be moved out of this function since largestWordWidth is now\n // known in advance\n if (largestWordWidth + reservedSpace > this.dynamicMinWidth) {\n this.dynamicMinWidth = largestWordWidth - additionalSpace + reservedSpace;\n }\n return graphemeLines;\n }\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @param {Number} lineIndex text to split\n * @return {Boolean}\n */\n isEndOfWrapping(lineIndex: number): boolean {\n if (!this._styleMap[lineIndex + 1]) {\n // is last line, return true;\n return true;\n }\n if (this._styleMap[lineIndex + 1].line !== this._styleMap[lineIndex].line) {\n // this is last line before a line break, return true;\n return true;\n }\n return false;\n }\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * This is important only for splitByGrapheme at the end of wrapping.\n * If we are not wrapping the offset is always 1\n * @return Number\n */\n missingNewlineOffset(lineIndex: number, skipWrapping?: boolean): 0 | 1 {\n if (this.splitByGrapheme && !skipWrapping) {\n return this.isEndOfWrapping(lineIndex) ? 1 : 0;\n }\n return 1;\n }\n\n /**\n * Gets lines of text to render in the Textbox. This function calculates\n * text wrapping on the fly every time it is called.\n * @param {String} text text to split\n * @returns {Array} Array of lines in the Textbox.\n * @override\n */\n _splitTextIntoLines(text: string) {\n const newText = super._splitTextIntoLines(text),\n graphemeLines = this._wrapText(newText.lines, this.width),\n lines = new Array(graphemeLines.length);\n for (let i = 0; i < graphemeLines.length; i++) {\n lines[i] = graphemeLines[i].join('');\n }\n newText.lines = lines;\n newText.graphemeLines = graphemeLines;\n return newText;\n }\n\n getMinWidth() {\n return Math.max(this.minWidth, this.dynamicMinWidth);\n }\n\n _removeExtraneousStyles() {\n const linesToKeep = new Map();\n for (const prop in this._styleMap) {\n const propNumber = parseInt(prop, 10);\n if (this._textLines[propNumber]) {\n const lineIndex = this._styleMap[prop].line;\n linesToKeep.set(`${lineIndex}`, true);\n }\n }\n for (const prop in this.styles) {\n if (!linesToKeep.has(prop)) {\n delete this.styles[prop];\n }\n }\n }\n\n /**\n * Returns object representation of an instance\n * @method toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([\n 'minWidth',\n 'splitByGrapheme',\n ...propertiesToInclude,\n ] as K[]) as Pick & SProps;\n }\n}\n\nclassRegistry.setClass(Textbox);\n","import { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport { sendPointToPlane } from '../../util/misc/planeChange';\nimport type { LayoutStrategyResult, StrictLayoutContext } from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { getObjectBounds } from './utils';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will adjust the bounding box to match the clip path bounding box.\n */\nexport class ClipPathLayout extends LayoutStrategy {\n static readonly type = 'clip-path';\n\n shouldPerformLayout(context: StrictLayoutContext): boolean {\n return !!context.target.clipPath && super.shouldPerformLayout(context);\n }\n\n shouldLayoutClipPath() {\n return false;\n }\n\n calcLayoutResult(\n context: StrictLayoutContext,\n objects: FabricObject[],\n ): LayoutStrategyResult | undefined {\n const { target } = context;\n const { clipPath, group } = target;\n if (!clipPath || !this.shouldPerformLayout(context)) {\n return;\n }\n // TODO: remove stroke calculation from this case\n const { width, height } = makeBoundingBoxFromPoints(\n getObjectBounds(target, clipPath as FabricObject),\n );\n const size = new Point(width, height);\n if (clipPath.absolutePositioned) {\n // we want the center point to exist in group's containing plane\n const clipPathCenter = sendPointToPlane(\n clipPath.getRelativeCenterPoint(),\n undefined,\n group ? group.calcTransformMatrix() : undefined,\n );\n return {\n center: clipPathCenter,\n size,\n };\n } else {\n // we want the center point to exist in group's containing plane, so we send it upwards\n const clipPathCenter = clipPath\n .getRelativeCenterPoint()\n .transform(target.calcOwnMatrix(), true);\n if (this.shouldPerformLayout(context)) {\n // the clip path is positioned relative to the group's center which is affected by the bbox\n // so we first calculate the bbox\n const { center = new Point(), correction = new Point() } =\n this.calcBoundingBox(objects, context) || {};\n return {\n center: center.add(clipPathCenter),\n correction: correction.subtract(clipPathCenter),\n size,\n };\n } else {\n return {\n center: target.getRelativeCenterPoint().add(clipPathCenter),\n size,\n };\n }\n }\n }\n}\n\nclassRegistry.setClass(ClipPathLayout);\n","import { Point } from '../../Point';\nimport type {\n InitializationLayoutContext,\n LayoutStrategyResult,\n StrictLayoutContext,\n} from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will keep target's initial size.\n */\nexport class FixedLayout extends LayoutStrategy {\n static readonly type = 'fixed';\n\n /**\n * @override respect target's initial size\n */\n getInitialSize(\n { target }: StrictLayoutContext & InitializationLayoutContext,\n { size }: Pick,\n ): Point {\n return new Point(target.width || size.x, target.height || size.y);\n }\n}\n\nclassRegistry.setClass(FixedLayout);\n","import { LayoutManager } from './LayoutManager';\nimport type { RegistrationContext, StrictLayoutContext } from './types';\nimport type { Group } from '../shapes/Group';\n\n/**\n * Today the LayoutManager class also takes care of subscribing event handlers\n * to update the group layout when the group is interactive and a transform is applied\n * to a child object.\n * The ActiveSelection is never interactive, but it could contain objects from\n * groups that are.\n * The standard LayoutManager would subscribe the children of the activeSelection to\n * perform layout changes to the active selection itself, what we need instead is that\n * the transformation applied to the active selection will trigger changes to the\n * original group of the children ( the one referenced under the parent property )\n * This subclass of the LayoutManager has a single duty to fill the gap of this difference.`\n */\nexport class ActiveSelectionLayoutManager extends LayoutManager {\n subscribeTargets(\n context: RegistrationContext & Partial,\n ): void {\n const activeSelection = context.target;\n const parents = context.targets.reduce((parents, target) => {\n target.parent && parents.add(target.parent);\n return parents;\n }, new Set());\n parents.forEach((parent) => {\n parent.layoutManager.subscribeTargets({\n target: parent,\n targets: [activeSelection],\n });\n });\n }\n\n /**\n * unsubscribe from parent only if all its children were deselected\n */\n unsubscribeTargets(\n context: RegistrationContext & Partial,\n ): void {\n const activeSelection = context.target;\n const selectedObjects = activeSelection.getObjects();\n const parents = context.targets.reduce((parents, target) => {\n target.parent && parents.add(target.parent);\n return parents;\n }, new Set());\n parents.forEach((parent) => {\n !selectedObjects.some((object) => object.parent === parent) &&\n parent.layoutManager.unsubscribeTargets({\n target: parent,\n targets: [activeSelection],\n });\n });\n }\n}\n","import type { ControlRenderingStyleOverride } from '../controls/controlRendering';\nimport { classRegistry } from '../ClassRegistry';\nimport type { GroupProps } from './Group';\nimport { Group } from './Group';\nimport type { FabricObject } from './Object/FabricObject';\nimport {\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n} from '../LayoutManager/constants';\nimport type { TClassProperties } from '../typedefs';\nimport { log } from '../util/internals/console';\nimport { ActiveSelectionLayoutManager } from '../LayoutManager/ActiveSelectionLayoutManager';\n\nexport type MultiSelectionStacking = 'canvas-stacking' | 'selection-order';\n\nexport interface ActiveSelectionOptions extends GroupProps {\n multiSelectionStacking: MultiSelectionStacking;\n}\n\nconst activeSelectionDefaultValues: Partial> =\n {\n multiSelectionStacking: 'canvas-stacking',\n };\n\n/**\n * Used by Canvas to manage selection.\n *\n * @example\n * class MyActiveSelection extends ActiveSelection {\n * ...\n * }\n *\n * // override the default `ActiveSelection` class\n * classRegistry.setClass(MyActiveSelection)\n */\nexport class ActiveSelection extends Group {\n static type = 'ActiveSelection';\n\n static ownDefaults: Record = activeSelectionDefaultValues;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...ActiveSelection.ownDefaults };\n }\n\n /**\n * The ActiveSelection needs to use the ActiveSelectionLayoutManager\n * or selections on interactive groups may be broken\n */\n declare layoutManager: ActiveSelectionLayoutManager;\n\n /**\n * controls how selected objects are added during a multiselection event\n * - `canvas-stacking` adds the selected object to the active selection while respecting canvas object stacking order\n * - `selection-order` adds the selected object to the top of the stack,\n * meaning that the stack is ordered by the order in which objects were selected\n * @default `canvas-stacking`\n */\n declare multiSelectionStacking: MultiSelectionStacking;\n\n constructor(\n objects: FabricObject[] = [],\n options: Partial = {},\n ) {\n super();\n Object.assign(this, ActiveSelection.ownDefaults);\n this.setOptions(options);\n const { left, top, layoutManager } = options;\n this.groupInit(objects, {\n left,\n top,\n layoutManager: layoutManager ?? new ActiveSelectionLayoutManager(),\n });\n }\n\n /**\n * @private\n */\n _shouldSetNestedCoords() {\n return true;\n }\n\n /**\n * @private\n * @override we don't want the selection monitor to be active\n */\n __objectSelectionMonitor() {\n // noop\n }\n\n /**\n * Adds objects with respect to {@link multiSelectionStacking}\n * @param targets object to add to selection\n */\n multiSelectAdd(...targets: FabricObject[]) {\n if (this.multiSelectionStacking === 'selection-order') {\n this.add(...targets);\n } else {\n // respect object stacking as it is on canvas\n // perf enhancement for large ActiveSelection: consider a binary search of `isInFrontOf`\n targets.forEach((target) => {\n const index = this._objects.findIndex((obj) => obj.isInFrontOf(target));\n const insertAt =\n index === -1\n ? // `target` is in front of all other objects\n this.size()\n : index;\n this.insertAt(insertAt, target);\n });\n }\n }\n\n /**\n * @override block ancestors/descendants of selected objects from being selected to prevent a circular object tree\n */\n canEnterGroup(object: FabricObject) {\n if (\n this.getObjects().some(\n (o) => o.isDescendantOf(object) || object.isDescendantOf(o),\n )\n ) {\n // prevent circular object tree\n log(\n 'error',\n 'ActiveSelection: circular object trees are not supported, this call has no effect',\n );\n return false;\n }\n\n return super.canEnterGroup(object);\n }\n\n /**\n * Change an object so that it can be part of an active selection.\n * this method is called by multiselectAdd from canvas code.\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n // This condition check that the object has currently a group, and the group\n // is also its parent, meaning that is not in an active selection, but is\n // in a normal group.\n if (object.parent && object.parent === object.group) {\n // Disconnect the object from the group functionalities, but keep the ref parent intact\n // for later re-enter\n object.parent._exitGroup(object);\n // in this case the object is probably inside an active selection.\n } else if (object.group && object.parent !== object.group) {\n // in this case group.remove will also clear the old parent reference.\n object.group.remove(object);\n }\n // enter the active selection from a render perspective\n // the object will be in the objects array of both the ActiveSelection and the Group\n // but referenced in the group's _activeObjects so that it won't be rendered twice.\n this._enterGroup(object, removeParentTransform);\n }\n\n /**\n * we want objects to retain their canvas ref when exiting instance\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n this._exitGroup(object, removeParentTransform);\n // return to parent\n object.parent && object.parent._enterGroup(object, true);\n }\n\n /**\n * @private\n * @param {'added'|'removed'} type\n * @param {FabricObject[]} targets\n */\n _onAfterObjectsChange(type: 'added' | 'removed', targets: FabricObject[]) {\n super._onAfterObjectsChange(type, targets);\n const groups = new Set();\n targets.forEach((object) => {\n const { parent } = object;\n parent && groups.add(parent);\n });\n if (type === LAYOUT_TYPE_REMOVED) {\n // invalidate groups' layout and mark as dirty\n groups.forEach((group) => {\n group._onAfterObjectsChange(LAYOUT_TYPE_ADDED, targets);\n });\n } else {\n // mark groups as dirty\n groups.forEach((group) => {\n group._set('dirty', true);\n });\n }\n }\n\n /**\n * @override remove all objects\n */\n onDeselect() {\n this.removeAll();\n return false;\n }\n\n /**\n * Returns string representation of a group\n * @return {String}\n */\n toString() {\n return `#`;\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * @return {Boolean}\n */\n shouldCache() {\n return false;\n }\n\n /**\n * Check if this group or its parent group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache() {\n return false;\n }\n\n /**\n * Renders controls and borders for the object\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [styleOverride] properties to override the object style\n * @param {Object} [childrenOverride] properties to override the children overrides\n */\n _renderControls(\n ctx: CanvasRenderingContext2D,\n styleOverride?: ControlRenderingStyleOverride,\n childrenOverride?: ControlRenderingStyleOverride,\n ) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n const options = {\n hasControls: false,\n ...childrenOverride,\n forActiveSelection: true,\n };\n for (let i = 0; i < this._objects.length; i++) {\n this._objects[i]._renderControls(ctx, options);\n }\n super._renderControls(ctx, styleOverride);\n ctx.restore();\n }\n}\n\nclassRegistry.setClass(ActiveSelection);\nclassRegistry.setClass(ActiveSelection, 'activeSelection');\n","/**\n * Canvas 2D filter backend.\n */\nimport type { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TPipelineResources } from './typedefs';\n\nexport class Canvas2dFilterBackend {\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: TPipelineResources = {};\n\n /**\n * Apply a set of filters against a source image and draw the filtered output\n * to the provided destination canvas.\n *\n * @param {EnhancedFilter} filters The filter to apply.\n * @param {HTMLImageElement|HTMLCanvasElement} sourceElement The source to be filtered.\n * @param {Number} sourceWidth The width of the source input.\n * @param {Number} sourceHeight The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n */\n applyFilters(\n filters: BaseFilter>[],\n sourceElement: CanvasImageSource,\n sourceWidth: number,\n sourceHeight: number,\n targetCanvas: HTMLCanvasElement,\n ): T2DPipelineState | void {\n const ctx = targetCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.drawImage(sourceElement, 0, 0, sourceWidth, sourceHeight);\n const imageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n const originalImageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n const pipelineState: T2DPipelineState = {\n sourceWidth,\n sourceHeight,\n imageData,\n originalEl: sourceElement,\n originalImageData,\n canvasEl: targetCanvas,\n ctx,\n filterBackend: this,\n };\n filters.forEach((filter) => {\n filter.applyTo(pipelineState);\n });\n const { imageData: imageDataPostFilter } = pipelineState;\n if (\n imageDataPostFilter.width !== sourceWidth ||\n imageDataPostFilter.height !== sourceHeight\n ) {\n targetCanvas.width = imageDataPostFilter.width;\n targetCanvas.height = imageDataPostFilter.height;\n }\n ctx.putImageData(imageDataPostFilter, 0, 0);\n return pipelineState;\n }\n}\n","import { config } from '../config';\nimport { createCanvasElementFor } from '../util/misc/dom';\nimport type {\n TWebGLPipelineState,\n TProgramCache,\n TTextureCache,\n TPipelineResources,\n} from './typedefs';\nimport type { BaseFilter } from './BaseFilter';\n\nexport class WebGLFilterBackend {\n declare tileSize: number;\n\n /**\n * Define ...\n **/\n aPosition: Float32Array = new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]);\n\n /**\n * If GLPut data is the fastest operation, or if forced, this buffer will be used\n * to transfer the data back in the 2d logic\n **/\n declare imageBuffer?: ArrayBuffer;\n\n declare canvas: HTMLCanvasElement;\n\n /**\n * The Webgl context that will execute the operations for filtering\n **/\n declare gl: WebGLRenderingContext;\n\n /**\n * Keyed map for shader cache\n **/\n declare programCache: TProgramCache;\n\n /**\n * Keyed map for texture cache\n **/\n declare textureCache: TTextureCache;\n\n /**\n * Contains GPU info for debug\n **/\n declare gpuInfo: any;\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: TPipelineResources = {};\n\n constructor({ tileSize = config.textureSize } = {}) {\n this.tileSize = tileSize;\n this.setupGLContext(tileSize, tileSize);\n this.captureGPUInfo();\n }\n\n /**\n * Setup a WebGL context suitable for filtering, and bind any needed event handlers.\n */\n setupGLContext(width: number, height: number): void {\n this.dispose();\n this.createWebGLCanvas(width, height);\n }\n\n /**\n * Create a canvas element and associated WebGL context and attaches them as\n * class properties to the GLFilterBackend class.\n */\n createWebGLCanvas(width: number, height: number): void {\n const canvas = createCanvasElementFor({ width, height });\n const glOptions = {\n alpha: true,\n premultipliedAlpha: false,\n depth: false,\n stencil: false,\n antialias: false,\n },\n gl = canvas.getContext('webgl', glOptions) as WebGLRenderingContext;\n\n if (!gl) {\n return;\n }\n gl.clearColor(0, 0, 0, 0);\n // this canvas can fire webglcontextlost and webglcontextrestored\n this.canvas = canvas;\n this.gl = gl;\n }\n\n /**\n * Attempts to apply the requested filters to the source provided, drawing the filtered output\n * to the provided target canvas.\n *\n * @param {Array} filters The filters to apply.\n * @param {TexImageSource} source The source to be filtered.\n * @param {Number} width The width of the source input.\n * @param {Number} height The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n * @param {String|undefined} cacheKey A key used to cache resources related to the source. If\n * omitted, caching will be skipped.\n */\n applyFilters(\n filters: BaseFilter>[],\n source: TexImageSource,\n width: number,\n height: number,\n targetCanvas: HTMLCanvasElement,\n cacheKey?: string,\n ): TWebGLPipelineState | undefined {\n const gl = this.gl;\n const ctx = targetCanvas.getContext('2d');\n if (!gl || !ctx) {\n return;\n }\n let cachedTexture;\n if (cacheKey) {\n cachedTexture = this.getCachedTexture(cacheKey, source);\n }\n const pipelineState: TWebGLPipelineState = {\n originalWidth:\n (source as HTMLImageElement).width ||\n // @ts-expect-error is this a bug? should this be naturalWidth? or is this the pipeline state?\n (source as HTMLImageElement).originalWidth ||\n 0,\n originalHeight:\n (source as HTMLImageElement).height ||\n // @ts-expect-error is this a bug? should this be naturalHeight? or is this the pipeline state?\n (source as HTMLImageElement).originalHeight ||\n 0,\n sourceWidth: width,\n sourceHeight: height,\n destinationWidth: width,\n destinationHeight: height,\n context: gl,\n sourceTexture: this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined,\n ),\n targetTexture: this.createTexture(gl, width, height),\n originalTexture:\n cachedTexture ||\n this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined,\n )!,\n passes: filters.length,\n webgl: true,\n aPosition: this.aPosition,\n programCache: this.programCache,\n pass: 0,\n filterBackend: this,\n targetCanvas: targetCanvas,\n };\n const tempFbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, tempFbo);\n filters.forEach((filter: any) => {\n filter && filter.applyTo(pipelineState);\n });\n resizeCanvasIfNeeded(pipelineState);\n this.copyGLTo2D(gl, pipelineState);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.deleteTexture(pipelineState.sourceTexture);\n gl.deleteTexture(pipelineState.targetTexture);\n gl.deleteFramebuffer(tempFbo);\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n return pipelineState;\n }\n\n /**\n * Detach event listeners, remove references, and clean up caches.\n */\n dispose() {\n if (this.canvas) {\n // we are disposing, we don't care about the fact\n // that the canvas shouldn't be null.\n // @ts-expect-error disposing\n this.canvas = null;\n // @ts-expect-error disposing\n this.gl = null;\n }\n this.clearWebGLCaches();\n }\n\n /**\n * Wipe out WebGL-related caches.\n */\n clearWebGLCaches() {\n this.programCache = {};\n this.textureCache = {};\n }\n\n /**\n * Create a WebGL texture object.\n *\n * Accepts specific dimensions to initialize the texture to or a source image.\n *\n * @param {WebGLRenderingContext} gl The GL context to use for creating the texture.\n * @param {number} width The width to initialize the texture at.\n * @param {number} height The height to initialize the texture.\n * @param {TexImageSource} textureImageSource A source for the texture data.\n * @param {number} filter gl.NEAREST default or gl.LINEAR filters for the texture.\n * This filter is very useful for LUTs filters. If you need interpolation use gl.LINEAR\n * @returns {WebGLTexture}\n */\n createTexture(\n gl: WebGLRenderingContext,\n width: number,\n height: number,\n textureImageSource?: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR'],\n ) {\n const {\n NEAREST,\n TEXTURE_2D,\n RGBA,\n UNSIGNED_BYTE,\n CLAMP_TO_EDGE,\n TEXTURE_MAG_FILTER,\n TEXTURE_MIN_FILTER,\n TEXTURE_WRAP_S,\n TEXTURE_WRAP_T,\n } = gl;\n const texture = gl.createTexture();\n gl.bindTexture(TEXTURE_2D, texture);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE);\n if (textureImageSource) {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n RGBA,\n UNSIGNED_BYTE,\n textureImageSource,\n );\n } else {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n width,\n height,\n 0,\n RGBA,\n UNSIGNED_BYTE,\n null,\n );\n }\n return texture;\n }\n\n /**\n * Can be optionally used to get a texture from the cache array\n *\n * If an existing texture is not found, a new texture is created and cached.\n *\n * @param {String} uniqueId A cache key to use to find an existing texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source to use to create the\n * texture cache entry if one does not already exist.\n */\n getCachedTexture(\n uniqueId: string,\n textureImageSource: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR'],\n ): WebGLTexture | null {\n const { textureCache } = this;\n if (textureCache[uniqueId]) {\n return textureCache[uniqueId];\n } else {\n const texture = this.createTexture(\n this.gl,\n (textureImageSource as HTMLImageElement).width,\n (textureImageSource as HTMLImageElement).height,\n textureImageSource,\n filter,\n );\n if (texture) {\n textureCache[uniqueId] = texture;\n }\n return texture;\n }\n }\n\n /**\n * Clear out cached resources related to a source image that has been\n * filtered previously.\n *\n * @param {String} cacheKey The cache key provided when the source image was filtered.\n */\n evictCachesForKey(cacheKey: string) {\n if (this.textureCache[cacheKey]) {\n this.gl.deleteTexture(this.textureCache[cacheKey]);\n delete this.textureCache[cacheKey];\n }\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas.\n *\n * The WebGL canvas is assumed to be upside down, with the top-left pixel of the\n * desired output image appearing in the bottom-left corner of the WebGL canvas.\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2D(gl: WebGLRenderingContext, pipelineState: TWebGLPipelineState) {\n const glCanvas = gl.canvas,\n targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.translate(0, targetCanvas.height); // move it down again\n ctx.scale(1, -1); // vertical flip\n // where is my image on the big glcanvas?\n const sourceY = glCanvas.height - targetCanvas.height;\n ctx.drawImage(\n glCanvas,\n 0,\n sourceY,\n targetCanvas.width,\n targetCanvas.height,\n 0,\n 0,\n targetCanvas.width,\n targetCanvas.height,\n );\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas using 2d canvas' putImageData\n * API. Measurably faster than using ctx.drawImage in Firefox (version 54 on OSX Sierra).\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2DPutImageData(\n this: Required,\n gl: WebGLRenderingContext,\n pipelineState: TWebGLPipelineState,\n ) {\n const targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d'),\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight,\n numBytes = dWidth * dHeight * 4;\n if (!ctx) {\n return;\n }\n const u8 = new Uint8Array(this.imageBuffer, 0, numBytes);\n const u8Clamped = new Uint8ClampedArray(this.imageBuffer, 0, numBytes);\n\n gl.readPixels(0, 0, dWidth, dHeight, gl.RGBA, gl.UNSIGNED_BYTE, u8);\n const imgData = new ImageData(u8Clamped, dWidth, dHeight);\n ctx.putImageData(imgData, 0, 0);\n }\n\n /**\n * Attempt to extract GPU information strings from a WebGL context.\n *\n * Useful information when debugging or blacklisting specific GPUs.\n *\n * @returns {Object} A GPU info object with renderer and vendor strings.\n */\n captureGPUInfo() {\n if (this.gpuInfo) {\n return this.gpuInfo;\n }\n const gl = this.gl,\n gpuInfo = { renderer: '', vendor: '' };\n if (!gl) {\n return gpuInfo;\n }\n const ext = gl.getExtension('WEBGL_debug_renderer_info');\n if (ext) {\n const renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);\n const vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);\n if (renderer) {\n gpuInfo.renderer = renderer.toLowerCase();\n }\n if (vendor) {\n gpuInfo.vendor = vendor.toLowerCase();\n }\n }\n this.gpuInfo = gpuInfo;\n return gpuInfo;\n }\n}\n\nfunction resizeCanvasIfNeeded(pipelineState: TWebGLPipelineState): void {\n const targetCanvas = pipelineState.targetCanvas,\n width = targetCanvas.width,\n height = targetCanvas.height,\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight;\n\n if (width !== dWidth || height !== dHeight) {\n targetCanvas.width = dWidth;\n targetCanvas.height = dHeight;\n }\n}\n","import { config } from '../config';\nimport { getEnv } from '../env';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { Canvas2dFilterBackend } from './Canvas2dFilterBackend';\nimport { WebGLFilterBackend } from './WebGLFilterBackend';\n\nexport type FilterBackend = WebGLFilterBackend | Canvas2dFilterBackend;\n\nlet filterBackend: FilterBackend;\n\n/**\n * Verifies if it is possible to initialize webgl or fallback on a canvas2d filtering backend\n */\nexport function initFilterBackend(): FilterBackend {\n const { WebGLProbe } = getEnv();\n WebGLProbe.queryWebGL(createCanvasElement());\n if (config.enableGLFiltering && WebGLProbe.isSupported(config.textureSize)) {\n return new WebGLFilterBackend({ tileSize: config.textureSize });\n } else {\n return new Canvas2dFilterBackend();\n }\n}\n\n/**\n * Get the current fabricJS filter backend or initialize one if not available yet\n * @param [strict] pass `true` to create the backend if it wasn't created yet (default behavior),\n * pass `false` to get the backend ref without mutating it\n */\nexport function getFilterBackend(strict = true): FilterBackend {\n if (!filterBackend && strict) {\n filterBackend = initFilterBackend();\n }\n return filterBackend;\n}\n\nexport function setFilterBackend(backend: FilterBackend) {\n filterBackend = backend;\n}\n","import { getFabricDocument, getEnv } from '../env';\nimport type { BaseFilter } from '../filters/BaseFilter';\nimport { getFilterBackend } from '../filters/FilterBackend';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type {\n TClassProperties,\n TCrossOrigin,\n TSize,\n Abortable,\n TOptions,\n} from '../typedefs';\nimport { uid } from '../util/internals/uid';\nimport { createCanvasElementFor } from '../util/misc/dom';\nimport { findScaleToCover, findScaleToFit } from '../util/misc/findScaleTo';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\nimport {\n enlivenObjectEnlivables,\n enlivenObjects,\n loadImage,\n} from '../util/misc/objectEnlive';\nimport { parsePreserveAspectRatioAttribute } from '../util/misc/svgParsing';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { WebGLFilterBackend } from '../filters/WebGLFilterBackend';\nimport { FILL, NONE } from '../constants';\nimport { getDocumentFromElement } from '../util/dom_misc';\nimport type { CSSRules } from '../parser/typedefs';\nimport type { Resize } from '../filters/Resize';\nimport type { TCachedFabricObject } from './Object/Object';\nimport { log } from '../util/internals/console';\n\n// @todo Would be nice to have filtering code not imported directly.\n\nexport type ImageSource =\n | HTMLImageElement\n | HTMLVideoElement\n | HTMLCanvasElement;\n\ninterface UniqueImageProps {\n srcFromAttribute: boolean;\n minimumScaleTrigger: number;\n cropX: number;\n cropY: number;\n imageSmoothing: boolean;\n filters: BaseFilter>[];\n resizeFilter?: Resize;\n}\n\nexport const imageDefaultValues: Partial> = {\n strokeWidth: 0,\n srcFromAttribute: false,\n minimumScaleTrigger: 0.5,\n cropX: 0,\n cropY: 0,\n imageSmoothing: true,\n};\n\nexport interface SerializedImageProps extends SerializedObjectProps {\n src: string;\n crossOrigin: TCrossOrigin;\n filters: any[];\n resizeFilter?: any;\n cropX: number;\n cropY: number;\n}\n\nexport interface ImageProps extends FabricObjectProps, UniqueImageProps {}\n\nconst IMAGE_PROPS = ['cropX', 'cropY'] as const;\n\n/**\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#images}\n */\nexport class FabricImage<\n Props extends TOptions = Partial,\n SProps extends SerializedImageProps = SerializedImageProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements ImageProps\n{\n /**\n * When calling {@link FabricImage.getSrc}, return value from element src with `element.getAttribute('src')`.\n * This allows for relative urls as image src.\n * @since 2.7.0\n * @type Boolean\n * @default false\n */\n declare srcFromAttribute: boolean;\n\n /**\n * private\n * contains last value of scaleX to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n protected _lastScaleX = 1;\n\n /**\n * private\n * contains last value of scaleY to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n protected _lastScaleY = 1;\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n protected _filterScalingX = 1;\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n protected _filterScalingY = 1;\n\n /**\n * minimum scale factor under which any resizeFilter is triggered to resize the image\n * 0 will disable the automatic resize. 1 will trigger automatically always.\n * number bigger than 1 are not implemented yet.\n * @type Number\n */\n declare minimumScaleTrigger: number;\n\n /**\n * key used to retrieve the texture representing this image\n * @since 2.0.0\n * @type String\n * @default\n */\n declare cacheKey: string;\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n declare cropX: number;\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n declare cropY: number;\n\n /**\n * Indicates whether this canvas will use image smoothing when painting this image.\n * Also influence if the cacheCanvas for this image uses imageSmoothing\n * @since 4.0.0-beta.11\n * @type Boolean\n * @default\n */\n declare imageSmoothing: boolean;\n\n declare preserveAspectRatio: string;\n\n protected declare src: string;\n\n declare filters: BaseFilter>[];\n declare resizeFilter: Resize;\n\n declare _element: ImageSource;\n declare _filteredEl?: HTMLCanvasElement;\n declare _originalElement: ImageSource;\n\n static type = 'Image';\n\n static cacheProperties = [...cacheProperties, ...IMAGE_PROPS];\n\n static ownDefaults = imageDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...FabricImage.ownDefaults,\n };\n }\n /**\n * Constructor\n * Image can be initialized with any canvas drawable or a string.\n * The string should be a url and will be loaded as an image.\n * Canvas and Image element work out of the box, while videos require extra code to work.\n * Please check video element events for seeking.\n * @param {ImageSource | string} element Image element\n * @param {Object} [options] Options object\n */\n constructor(elementId: string, options?: Props);\n constructor(element: ImageSource, options?: Props);\n constructor(arg0: ImageSource | string, options?: Props) {\n super();\n this.filters = [];\n Object.assign(this, FabricImage.ownDefaults);\n this.setOptions(options);\n this.cacheKey = `texture${uid()}`;\n this.setElement(\n typeof arg0 === 'string'\n ? ((\n (this.canvas && getDocumentFromElement(this.canvas.getElement())) ||\n getFabricDocument()\n ).getElementById(arg0) as ImageSource)\n : arg0,\n options,\n );\n }\n\n /**\n * Returns image element which this instance if based on\n */\n getElement() {\n return this._element;\n }\n\n /**\n * Sets image element for this instance to a specified one.\n * If filters defined they are applied to new image.\n * You might need to call `canvas.renderAll` and `object.setCoords` after replacing, to render new image and update controls area.\n * @param {HTMLImageElement} element\n * @param {Partial} [size] Options object\n */\n setElement(element: ImageSource, size: Partial = {}) {\n this.removeTexture(this.cacheKey);\n this.removeTexture(`${this.cacheKey}_filtered`);\n this._element = element;\n this._originalElement = element;\n this._setWidthHeight(size);\n element.classList.add(FabricImage.CSS_CANVAS);\n if (this.filters.length !== 0) {\n this.applyFilters();\n }\n // resizeFilters work on the already filtered copy.\n // we need to apply resizeFilters AFTER normal filters.\n // applyResizeFilters is run more often than normal filters\n // and is triggered by user interactions rather than dev code\n if (this.resizeFilter) {\n this.applyResizeFilters();\n }\n }\n\n /**\n * Delete a single texture if in webgl mode\n */\n removeTexture(key: string) {\n const backend = getFilterBackend(false);\n if (backend instanceof WebGLFilterBackend) {\n backend.evictCachesForKey(key);\n }\n }\n\n /**\n * Delete textures, reference to elements and eventually JSDOM cleanup\n */\n dispose() {\n super.dispose();\n this.removeTexture(this.cacheKey);\n this.removeTexture(`${this.cacheKey}_filtered`);\n this._cacheContext = null;\n (\n ['_originalElement', '_element', '_filteredEl', '_cacheCanvas'] as const\n ).forEach((elementKey) => {\n const el = this[elementKey];\n el && getEnv().dispose(el);\n // @ts-expect-error disposing\n this[elementKey] = undefined;\n });\n }\n\n /**\n * Get the crossOrigin value (of the corresponding image element)\n */\n getCrossOrigin(): string | null {\n return (\n this._originalElement &&\n ((this._originalElement as any).crossOrigin || null)\n );\n }\n\n /**\n * Returns original size of an image\n */\n getOriginalSize() {\n const element = this.getElement() as any;\n if (!element) {\n return {\n width: 0,\n height: 0,\n };\n }\n return {\n width: element.naturalWidth || element.width,\n height: element.naturalHeight || element.height,\n };\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _stroke(ctx: CanvasRenderingContext2D) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n const w = this.width / 2,\n h = this.height / 2;\n ctx.beginPath();\n ctx.moveTo(-w, -h);\n ctx.lineTo(w, -h);\n ctx.lineTo(w, h);\n ctx.lineTo(-w, h);\n ctx.lineTo(-w, -h);\n ctx.closePath();\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n const filters: Record[] = [];\n this.filters.forEach((filterObj) => {\n filterObj && filters.push(filterObj.toObject());\n });\n return {\n ...super.toObject([...IMAGE_PROPS, ...propertiesToInclude]),\n src: this.getSrc(),\n crossOrigin: this.getCrossOrigin(),\n filters,\n ...(this.resizeFilter\n ? { resizeFilter: this.resizeFilter.toObject() }\n : {}),\n };\n }\n\n /**\n * Returns true if an image has crop applied, inspecting values of cropX,cropY,width,height.\n * @return {Boolean}\n */\n hasCrop() {\n return (\n !!this.cropX ||\n !!this.cropY ||\n this.width < this._element.width ||\n this.height < this._element.height\n );\n }\n\n /**\n * Returns svg representation of an instance\n * @return {string[]} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const imageMarkup: string[] = [],\n element = this._element,\n x = -this.width / 2,\n y = -this.height / 2;\n let svgString: string[] = [],\n strokeSvg: string[] = [],\n clipPath = '',\n imageRendering = '';\n if (!element) {\n return [];\n }\n if (this.hasCrop()) {\n const clipPathId = uid();\n svgString.push(\n '\\n',\n '\\t\\n',\n '\\n',\n );\n clipPath = ' clip-path=\"url(#imageCrop_' + clipPathId + ')\" ';\n }\n if (!this.imageSmoothing) {\n imageRendering = ' image-rendering=\"optimizeSpeed\"';\n }\n imageMarkup.push(\n '\\t element with actual transformation, then offsetting object to the top/left\n // so that object's center aligns with container's left/top\n }\" width=\"${\n element.width || (element as HTMLImageElement).naturalWidth\n }\" height=\"${\n element.height || (element as HTMLImageElement).naturalHeight\n }\"${imageRendering}${clipPath}>\\n`,\n );\n\n if (this.stroke || this.strokeDashArray) {\n const origFill = this.fill;\n this.fill = null;\n strokeSvg = [\n `\\t\\n`,\n ];\n this.fill = origFill;\n }\n if (this.paintFirst !== FILL) {\n svgString = svgString.concat(strokeSvg, imageMarkup);\n } else {\n svgString = svgString.concat(imageMarkup, strokeSvg);\n }\n return svgString;\n }\n\n /**\n * Returns source of an image\n * @param {Boolean} filtered indicates if the src is needed for svg\n * @return {String} Source of an image\n */\n getSrc(filtered?: boolean): string {\n const element = filtered ? this._element : this._originalElement;\n if (element) {\n if ((element as HTMLCanvasElement).toDataURL) {\n return (element as HTMLCanvasElement).toDataURL();\n }\n\n if (this.srcFromAttribute) {\n return element.getAttribute('src') || '';\n } else {\n return (element as HTMLImageElement).src;\n }\n } else {\n return this.src || '';\n }\n }\n\n /**\n * Alias for getSrc\n * @param filtered\n * @deprecated\n */\n getSvgSrc(filtered?: boolean) {\n return this.getSrc(filtered);\n }\n\n /**\n * Loads and sets source of an image\\\n * **IMPORTANT**: It is recommended to abort loading tasks before calling this method to prevent race conditions and unnecessary networking\n * @param {String} src Source string (URL)\n * @param {LoadImageOptions} [options] Options object\n */\n setSrc(src: string, { crossOrigin, signal }: LoadImageOptions = {}) {\n return loadImage(src, { crossOrigin, signal }).then((img) => {\n typeof crossOrigin !== 'undefined' && this.set({ crossOrigin });\n this.setElement(img);\n });\n }\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of an instance\n */\n toString() {\n return `#`;\n }\n\n applyResizeFilters() {\n const filter = this.resizeFilter,\n minimumScale = this.minimumScaleTrigger,\n objectScale = this.getTotalObjectScaling(),\n scaleX = objectScale.x,\n scaleY = objectScale.y,\n elementToFilter = this._filteredEl || this._originalElement;\n if (this.group) {\n this.set('dirty', true);\n }\n if (!filter || (scaleX > minimumScale && scaleY > minimumScale)) {\n this._element = elementToFilter;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n this._lastScaleX = scaleX;\n this._lastScaleY = scaleY;\n return;\n }\n const canvasEl = createCanvasElementFor(elementToFilter),\n { width, height } = elementToFilter;\n this._element = canvasEl;\n this._lastScaleX = filter.scaleX = scaleX;\n this._lastScaleY = filter.scaleY = scaleY;\n getFilterBackend().applyFilters(\n [filter],\n elementToFilter,\n width,\n height,\n this._element,\n );\n this._filterScalingX = canvasEl.width / this._originalElement.width;\n this._filterScalingY = canvasEl.height / this._originalElement.height;\n }\n\n /**\n * Applies filters assigned to this image (from \"filters\" array) or from filter param\n * @method applyFilters\n * @param {Array} filters to be applied\n * @param {Boolean} forResizing specify if the filter operation is a resize operation\n */\n applyFilters(\n filters: BaseFilter>[] = this.filters || [],\n ) {\n filters = filters.filter((filter) => filter && !filter.isNeutralState());\n this.set('dirty', true);\n\n // needs to clear out or WEBGL will not resize correctly\n this.removeTexture(`${this.cacheKey}_filtered`);\n\n if (filters.length === 0) {\n this._element = this._originalElement;\n // this is unsafe and needs to be rethinkend\n this._filteredEl = undefined;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n return;\n }\n\n const imgElement = this._originalElement,\n sourceWidth =\n (imgElement as HTMLImageElement).naturalWidth || imgElement.width,\n sourceHeight =\n (imgElement as HTMLImageElement).naturalHeight || imgElement.height;\n\n if (this._element === this._originalElement) {\n // if the _element a reference to _originalElement\n // we need to create a new element to host the filtered pixels\n const canvasEl = createCanvasElementFor({\n width: sourceWidth,\n height: sourceHeight,\n });\n this._element = canvasEl;\n this._filteredEl = canvasEl;\n } else if (this._filteredEl) {\n // if the _element is it own element,\n // and we also have a _filteredEl, then we clean up _filteredEl\n // and we assign it to _element.\n // in this way we invalidate the eventual old resize filtered element\n this._element = this._filteredEl;\n this._filteredEl\n .getContext('2d')!\n .clearRect(0, 0, sourceWidth, sourceHeight);\n // we also need to resize again at next renderAll, so remove saved _lastScaleX/Y\n this._lastScaleX = 1;\n this._lastScaleY = 1;\n }\n getFilterBackend().applyFilters(\n filters,\n this._originalElement,\n sourceWidth,\n sourceHeight,\n this._element as HTMLCanvasElement,\n );\n if (\n this._originalElement.width !== this._element.width ||\n this._originalElement.height !== this._element.height\n ) {\n this._filterScalingX = this._element.width / this._originalElement.width;\n this._filterScalingY =\n this._element.height / this._originalElement.height;\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.imageSmoothingEnabled = this.imageSmoothing;\n if (this.isMoving !== true && this.resizeFilter && this._needsResize()) {\n this.applyResizeFilters();\n }\n this._stroke(ctx);\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Paint the cached copy of the object on the target context.\n * it will set the imageSmoothing for the draw operation\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas(\n this: TCachedFabricObject,\n ctx: CanvasRenderingContext2D,\n ) {\n ctx.imageSmoothingEnabled = this.imageSmoothing;\n super.drawCacheOnCanvas(ctx);\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * This is the special image version where we would like to avoid caching where possible.\n * Essentially images do not benefit from caching. They may require caching, and in that\n * case we do it. Also caching an image usually ends in a loss of details.\n * A full performance audit should be done.\n * @return {Boolean}\n */\n shouldCache() {\n return this.needsItsOwnCache();\n }\n\n _renderFill(ctx: CanvasRenderingContext2D) {\n const elementToDraw = this._element;\n if (!elementToDraw) {\n return;\n }\n const scaleX = this._filterScalingX,\n scaleY = this._filterScalingY,\n w = this.width,\n h = this.height,\n // crop values cannot be lesser than 0.\n cropX = Math.max(this.cropX, 0),\n cropY = Math.max(this.cropY, 0),\n elWidth =\n (elementToDraw as HTMLImageElement).naturalWidth || elementToDraw.width,\n elHeight =\n (elementToDraw as HTMLImageElement).naturalHeight ||\n elementToDraw.height,\n sX = cropX * scaleX,\n sY = cropY * scaleY,\n // the width height cannot exceed element width/height, starting from the crop offset.\n sW = Math.min(w * scaleX, elWidth - sX),\n sH = Math.min(h * scaleY, elHeight - sY),\n x = -w / 2,\n y = -h / 2,\n maxDestW = Math.min(w, elWidth / scaleX - cropX),\n maxDestH = Math.min(h, elHeight / scaleY - cropY);\n\n elementToDraw &&\n ctx.drawImage(elementToDraw, sX, sY, sW, sH, x, y, maxDestW, maxDestH);\n }\n\n /**\n * needed to check if image needs resize\n * @private\n */\n _needsResize() {\n const scale = this.getTotalObjectScaling();\n return scale.x !== this._lastScaleX || scale.y !== this._lastScaleY;\n }\n\n /**\n * @private\n * @deprecated unused\n */\n _resetWidthHeight() {\n this.set(this.getOriginalSize());\n }\n\n /**\n * @private\n * Set the width and the height of the image object, using the element or the\n * options.\n */\n _setWidthHeight({ width, height }: Partial = {}) {\n const size = this.getOriginalSize();\n this.width = width || size.width;\n this.height = height || size.height;\n }\n\n /**\n * Calculate offset for center and scale factor for the image in order to respect\n * the preserveAspectRatio attribute\n * @private\n */\n parsePreserveAspectRatioAttribute() {\n const pAR = parsePreserveAspectRatioAttribute(\n this.preserveAspectRatio || '',\n ),\n pWidth = this.width,\n pHeight = this.height,\n parsedAttributes = { width: pWidth, height: pHeight };\n let rWidth = this._element.width,\n rHeight = this._element.height,\n scaleX = 1,\n scaleY = 1,\n offsetLeft = 0,\n offsetTop = 0,\n cropX = 0,\n cropY = 0,\n offset;\n\n if (pAR && (pAR.alignX !== NONE || pAR.alignY !== NONE)) {\n if (pAR.meetOrSlice === 'meet') {\n scaleX = scaleY = findScaleToFit(this._element, parsedAttributes);\n offset = (pWidth - rWidth * scaleX) / 2;\n if (pAR.alignX === 'Min') {\n offsetLeft = -offset;\n }\n if (pAR.alignX === 'Max') {\n offsetLeft = offset;\n }\n offset = (pHeight - rHeight * scaleY) / 2;\n if (pAR.alignY === 'Min') {\n offsetTop = -offset;\n }\n if (pAR.alignY === 'Max') {\n offsetTop = offset;\n }\n }\n if (pAR.meetOrSlice === 'slice') {\n scaleX = scaleY = findScaleToCover(this._element, parsedAttributes);\n offset = rWidth - pWidth / scaleX;\n if (pAR.alignX === 'Mid') {\n cropX = offset / 2;\n }\n if (pAR.alignX === 'Max') {\n cropX = offset;\n }\n offset = rHeight - pHeight / scaleY;\n if (pAR.alignY === 'Mid') {\n cropY = offset / 2;\n }\n if (pAR.alignY === 'Max') {\n cropY = offset;\n }\n rWidth = pWidth / scaleX;\n rHeight = pHeight / scaleY;\n }\n } else {\n scaleX = pWidth / rWidth;\n scaleY = pHeight / rHeight;\n }\n return {\n width: rWidth,\n height: rHeight,\n scaleX,\n scaleY,\n offsetLeft,\n offsetTop,\n cropX,\n cropY,\n };\n }\n\n /**\n * Default CSS class name for canvas\n * @static\n * @type String\n * @default\n */\n static CSS_CANVAS = 'canvas-img';\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link FabricImage.fromElement})\n * @static\n * @see {@link http://www.w3.org/TR/SVG/struct.html#ImageElement}\n */\n static ATTRIBUTE_NAMES = [\n ...SHARED_ATTRIBUTES,\n 'x',\n 'y',\n 'width',\n 'height',\n 'preserveAspectRatio',\n 'xlink:href',\n 'crossOrigin',\n 'image-rendering',\n ];\n\n /**\n * Creates an instance of FabricImage from its object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {object} [options] Options object\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static fromObject>(\n { filters: f, resizeFilter: rf, src, crossOrigin, type, ...object }: T,\n options?: Abortable,\n ) {\n return Promise.all([\n loadImage(src!, { ...options, crossOrigin }),\n f && enlivenObjects>(f, options),\n // TODO: redundant - handled by enlivenObjectEnlivables\n rf && enlivenObjects>([rf], options),\n enlivenObjectEnlivables(object, options),\n ]).then(([el, filters = [], [resizeFilter] = [], hydratedProps = {}]) => {\n return new this(el, {\n ...object,\n // TODO: this creates a difference between image creation and restoring from JSON\n src,\n filters,\n resizeFilter,\n ...hydratedProps,\n });\n });\n }\n\n /**\n * Creates an instance of Image from an URL string\n * @static\n * @param {String} url URL to create an image from\n * @param {LoadImageOptions} [options] Options object\n * @returns {Promise}\n */\n static fromURL>(\n url: string,\n { crossOrigin = null, signal }: LoadImageOptions = {},\n imageOptions?: T,\n ): Promise {\n return loadImage(url, { crossOrigin, signal }).then(\n (img) => new this(img, imageOptions),\n );\n }\n\n /**\n * Returns {@link FabricImage} instance from an SVG element\n * @static\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @param {Function} callback Callback to execute when Image object is created\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable = {},\n cssRules?: CSSRules,\n ) {\n const parsedAttributes = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return this.fromURL(\n parsedAttributes['xlink:href'],\n options,\n parsedAttributes,\n ).catch((err) => {\n log('log', 'Unable to parse Image', err);\n return null;\n });\n }\n}\n\nclassRegistry.setClass(FabricImage);\nclassRegistry.setSVGClass(FabricImage);\n","import { svgNS } from './constants';\nimport {\n parsePreserveAspectRatioAttribute,\n parseUnit,\n} from '../util/misc/svgParsing';\nimport { svgViewBoxElementsRegEx, reViewBoxAttrValue } from './constants';\nimport { NONE } from '../constants';\n\nexport type ParsedViewboxTransform = Partial<{\n width: number;\n height: number;\n minX: number;\n minY: number;\n viewBoxWidth: number;\n viewBoxHeight: number;\n}>;\n\n/**\n * Add a element that envelop all child elements and makes the viewbox transformMatrix descend on all elements\n */\nexport function applyViewboxTransform(\n element: Element,\n): ParsedViewboxTransform {\n if (!svgViewBoxElementsRegEx.test(element.nodeName)) {\n return {};\n }\n const viewBoxAttr: string | null = element.getAttribute('viewBox');\n let scaleX = 1;\n let scaleY = 1;\n let minX = 0;\n let minY = 0;\n let matrix;\n let el;\n const widthAttr = element.getAttribute('width');\n const heightAttr = element.getAttribute('height');\n const x = element.getAttribute('x') || 0;\n const y = element.getAttribute('y') || 0;\n const goodViewbox = viewBoxAttr && reViewBoxAttrValue.test(viewBoxAttr);\n const missingViewBox = !goodViewbox;\n const missingDimAttr =\n !widthAttr || !heightAttr || widthAttr === '100%' || heightAttr === '100%';\n\n let translateMatrix = '';\n let widthDiff = 0;\n let heightDiff = 0;\n\n if (missingViewBox) {\n if (\n (x || y) &&\n element.parentNode &&\n element.parentNode.nodeName !== '#document'\n ) {\n translateMatrix =\n ' translate(' + parseUnit(x || '0') + ' ' + parseUnit(y || '0') + ') ';\n matrix = (element.getAttribute('transform') || '') + translateMatrix;\n element.setAttribute('transform', matrix);\n element.removeAttribute('x');\n element.removeAttribute('y');\n }\n }\n\n if (missingViewBox && missingDimAttr) {\n return {\n width: 0,\n height: 0,\n };\n }\n\n const parsedDim: ParsedViewboxTransform = {\n width: 0,\n height: 0,\n };\n\n if (missingViewBox) {\n parsedDim.width = parseUnit(widthAttr!);\n parsedDim.height = parseUnit(heightAttr!);\n // set a transform for elements that have x y and are inner(only) SVGs\n return parsedDim;\n }\n\n const pasedViewBox = viewBoxAttr.match(reViewBoxAttrValue)!;\n minX = -parseFloat(pasedViewBox[1]);\n minY = -parseFloat(pasedViewBox[2]);\n const viewBoxWidth = parseFloat(pasedViewBox[3]);\n const viewBoxHeight = parseFloat(pasedViewBox[4]);\n parsedDim.minX = minX;\n parsedDim.minY = minY;\n parsedDim.viewBoxWidth = viewBoxWidth;\n parsedDim.viewBoxHeight = viewBoxHeight;\n if (!missingDimAttr) {\n parsedDim.width = parseUnit(widthAttr);\n parsedDim.height = parseUnit(heightAttr);\n scaleX = parsedDim.width / viewBoxWidth;\n scaleY = parsedDim.height / viewBoxHeight;\n } else {\n parsedDim.width = viewBoxWidth;\n parsedDim.height = viewBoxHeight;\n }\n\n // default is to preserve aspect ratio\n const preserveAspectRatio = parsePreserveAspectRatioAttribute(\n element.getAttribute('preserveAspectRatio') || '',\n );\n if (preserveAspectRatio.alignX !== NONE) {\n //translate all container for the effect of Mid, Min, Max\n if (preserveAspectRatio.meetOrSlice === 'meet') {\n scaleY = scaleX = scaleX > scaleY ? scaleY : scaleX;\n // calculate additional translation to move the viewbox\n }\n if (preserveAspectRatio.meetOrSlice === 'slice') {\n scaleY = scaleX = scaleX > scaleY ? scaleX : scaleY;\n // calculate additional translation to move the viewbox\n }\n widthDiff = parsedDim.width - viewBoxWidth * scaleX;\n heightDiff = parsedDim.height - viewBoxHeight * scaleX;\n if (preserveAspectRatio.alignX === 'Mid') {\n widthDiff /= 2;\n }\n if (preserveAspectRatio.alignY === 'Mid') {\n heightDiff /= 2;\n }\n if (preserveAspectRatio.alignX === 'Min') {\n widthDiff = 0;\n }\n if (preserveAspectRatio.alignY === 'Min') {\n heightDiff = 0;\n }\n }\n\n if (\n scaleX === 1 &&\n scaleY === 1 &&\n minX === 0 &&\n minY === 0 &&\n x === 0 &&\n y === 0\n ) {\n return parsedDim;\n }\n if ((x || y) && element.parentNode!.nodeName !== '#document') {\n translateMatrix =\n ' translate(' + parseUnit(x || '0') + ' ' + parseUnit(y || '0') + ') ';\n }\n\n matrix =\n translateMatrix +\n ' matrix(' +\n scaleX +\n ' 0' +\n ' 0 ' +\n scaleY +\n ' ' +\n (minX * scaleX + widthDiff) +\n ' ' +\n (minY * scaleY + heightDiff) +\n ') ';\n // seems unused.\n // parsedDim.viewboxTransform = parseTransformAttribute(matrix);\n if (element.nodeName === 'svg') {\n el = element.ownerDocument.createElementNS(svgNS, 'g');\n // element.firstChild != null\n while (element.firstChild) {\n el.appendChild(element.firstChild);\n }\n element.appendChild(el);\n } else {\n el = element;\n el.removeAttribute('x');\n el.removeAttribute('y');\n matrix = el.getAttribute('transform') + matrix;\n }\n el.setAttribute('transform', matrix);\n return parsedDim;\n}\n","export const getTagName = (node: Element) => node.tagName.replace('svg:', '');\n","import { svgInvalidAncestors } from './constants';\nimport { getSvgRegex } from './getSvgRegex';\nimport { getTagName } from './getTagName';\n\nconst svgInvalidAncestorsRegEx = getSvgRegex(svgInvalidAncestors);\n\nexport function hasInvalidAncestor(element: Element) {\n let _element: Element | null = element;\n while (_element && (_element = _element.parentElement)) {\n if (\n _element &&\n _element.nodeName &&\n svgInvalidAncestorsRegEx.test(getTagName(_element)) &&\n !_element.getAttribute('instantiated_by_use')\n ) {\n return true;\n }\n }\n return false;\n}\n","export function getMultipleNodes(\n doc: Document,\n nodeNames: string[],\n): Element[] {\n let nodeName,\n nodeArray: Element[] = [],\n nodeList,\n i,\n len;\n for (i = 0, len = nodeNames.length; i < len; i++) {\n nodeName = nodeNames[i];\n nodeList = doc.getElementsByTagNameNS(\n 'http://www.w3.org/2000/svg',\n nodeName,\n );\n nodeArray = nodeArray.concat(Array.from(nodeList));\n }\n return nodeArray;\n}\n","import { svgNS } from './constants';\nimport { getMultipleNodes } from './getMultipleNodes';\nimport { applyViewboxTransform } from './applyViewboxTransform';\nimport { parseStyleString } from './parseStyleString';\n\nexport function parseUseDirectives(doc: Document) {\n const nodelist = getMultipleNodes(doc, ['use', 'svg:use']);\n const skipAttributes = ['x', 'y', 'xlink:href', 'href', 'transform'];\n\n for (const useElement of nodelist) {\n const useAttributes: NamedNodeMap = useElement.attributes;\n\n const useAttrMap: Record = {};\n for (const attr of useAttributes) {\n attr.value && (useAttrMap[attr.name] = attr.value);\n }\n\n const xlink = (useAttrMap['xlink:href'] || useAttrMap.href || '').slice(1);\n\n if (xlink === '') {\n return;\n }\n const referencedElement = doc.getElementById(xlink);\n if (referencedElement === null) {\n // if we can't find the target of the xlink, consider this use tag bad, similar to no xlink\n return;\n }\n let clonedOriginal = referencedElement.cloneNode(true) as Element;\n\n const originalAttributes: NamedNodeMap = clonedOriginal.attributes;\n\n const originalAttrMap: Record = {};\n for (const attr of originalAttributes) {\n attr.value && (originalAttrMap[attr.name] = attr.value);\n }\n\n // Transform attribute needs to be merged in a particular way\n const { x = 0, y = 0, transform = '' } = useAttrMap;\n const currentTrans = `${transform} ${\n originalAttrMap.transform || ''\n } translate(${x}, ${y})`;\n\n applyViewboxTransform(clonedOriginal);\n\n if (/^svg$/i.test(clonedOriginal.nodeName)) {\n // if is an SVG, create a group and apply all the attributes on top of it\n const el3 = clonedOriginal.ownerDocument.createElementNS(svgNS, 'g');\n Object.entries(originalAttrMap).forEach(([name, value]) =>\n el3.setAttributeNS(svgNS, name, value),\n );\n el3.append(...clonedOriginal.childNodes);\n clonedOriginal = el3;\n }\n\n for (const attr of useAttributes) {\n if (!attr) {\n continue;\n }\n const { name, value } = attr;\n if (skipAttributes.includes(name)) {\n continue;\n }\n\n if (name === 'style') {\n // when use has a style, merge the two styles, with the ref being priority (not use)\n // priority is by feature. an attribute for fill on the original element\n // will overwrite the fill in style or attribute for tha use\n const styleRecord: Record = {};\n parseStyleString(value!, styleRecord);\n // cleanup styleRecord from attributes of original\n Object.entries(originalAttrMap).forEach(([name, value]) => {\n styleRecord[name] = value;\n });\n // now we can put in the style of the original that will overwrite the original attributes\n parseStyleString(originalAttrMap.style || '', styleRecord);\n const mergedStyles = Object.entries(styleRecord)\n .map((entry) => entry.join(':'))\n .join(';');\n clonedOriginal.setAttribute(name, mergedStyles);\n } else {\n // set the attribute from use element only if the original does not have it already\n !originalAttrMap[name] && clonedOriginal.setAttribute(name, value!);\n }\n }\n\n clonedOriginal.setAttribute('transform', currentTrans);\n clonedOriginal.setAttribute('instantiated_by_use', '1');\n clonedOriginal.removeAttribute('id');\n useElement.parentNode!.replaceChild(clonedOriginal, useElement);\n }\n}\n","const gradientsAttrs = [\n 'gradientTransform',\n 'x1',\n 'x2',\n 'y1',\n 'y2',\n 'gradientUnits',\n 'cx',\n 'cy',\n 'r',\n 'fx',\n 'fy',\n];\nconst xlinkAttr = 'xlink:href';\n\nexport function recursivelyParseGradientsXlink(\n doc: Document,\n gradient: Element,\n) {\n const xLink = gradient.getAttribute(xlinkAttr)?.slice(1) || '',\n referencedGradient = doc.getElementById(xLink);\n if (referencedGradient && referencedGradient.getAttribute(xlinkAttr)) {\n recursivelyParseGradientsXlink(doc, referencedGradient as Element);\n }\n if (referencedGradient) {\n gradientsAttrs.forEach((attr) => {\n const value = referencedGradient.getAttribute(attr);\n if (!gradient.hasAttribute(attr) && value) {\n gradient.setAttribute(attr, value);\n }\n });\n if (!gradient.children.length) {\n const referenceClone = referencedGradient.cloneNode(true);\n while (referenceClone.firstChild) {\n gradient.appendChild(referenceClone.firstChild);\n }\n }\n }\n gradient.removeAttribute(xlinkAttr);\n}\n","import { getMultipleNodes } from './getMultipleNodes';\nimport { recursivelyParseGradientsXlink } from './recursivelyParseGradientsXlink';\n\nconst tagArray = [\n 'linearGradient',\n 'radialGradient',\n 'svg:linearGradient',\n 'svg:radialGradient',\n];\n\n/**\n * Parses an SVG document, returning all of the gradient declarations found in it\n * @param {SVGDocument} doc SVG document to parse\n * @return {Object} Gradient definitions; key corresponds to element id, value -- to gradient definition element\n */\nexport function getGradientDefs(\n doc: Document,\n): Record {\n const elList = getMultipleNodes(doc, tagArray);\n const gradientDefs: Record = {};\n let j = elList.length;\n while (j--) {\n const el = elList[j];\n if (el.getAttribute('xlink:href')) {\n recursivelyParseGradientsXlink(doc, el);\n }\n const id = el.getAttribute('id');\n if (id) {\n gradientDefs[id] = el as SVGGradientElement;\n }\n }\n return gradientDefs;\n}\n","import type { CSSRules } from './typedefs';\n\n/**\n * Returns CSS rules for a given SVG document\n * @param {HTMLElement} doc SVG document to parse\n * @return {Object} CSS rules of this document\n */\nexport function getCSSRules(doc: Document) {\n const styles = doc.getElementsByTagName('style');\n let i;\n let len;\n const allRules: CSSRules = {};\n\n // very crude parsing of style contents\n for (i = 0, len = styles.length; i < len; i++) {\n const styleContents = (styles[i].textContent || '').replace(\n // remove comments\n /\\/\\*[\\s\\S]*?\\*\\//g,\n '',\n );\n\n if (styleContents.trim() === '') {\n continue;\n }\n // recovers all the rule in this form `body { style code... }`\n // rules = styleContents.match(/[^{]*\\{[\\s\\S]*?\\}/g);\n styleContents\n .split('}')\n // remove empty rules and remove everything if we didn't split in at least 2 pieces\n .filter((rule, index, array) => array.length > 1 && rule.trim())\n // at this point we have hopefully an array of rules `body { style code... `\n .forEach((rule) => {\n // if there is more than one opening bracket and the rule starts with '@', it is likely\n // a nested at-rule like @media, @supports, @scope, etc. Ignore these as the code below\n // can not handle it.\n if (\n (rule.match(/{/g) || []).length > 1 &&\n rule.trim().startsWith('@')\n ) {\n return;\n }\n\n const match = rule.split('{'),\n ruleObj: Record = {},\n declaration = match[1].trim(),\n propertyValuePairs = declaration.split(';').filter(function (pair) {\n return pair.trim();\n });\n\n for (i = 0, len = propertyValuePairs.length; i < len; i++) {\n const pair = propertyValuePairs[i].split(':'),\n property = pair[0].trim(),\n value = pair[1].trim();\n ruleObj[property] = value;\n }\n rule = match[0].trim();\n rule.split(',').forEach((_rule) => {\n _rule = _rule.replace(/^svg/i, '').trim();\n if (_rule === '') {\n return;\n }\n allRules[_rule] = {\n ...(allRules[_rule] || {}),\n ...ruleObj,\n };\n });\n });\n }\n return allRules;\n}\n","import { Gradient } from '../gradient/Gradient';\nimport { Group } from '../shapes/Group';\nimport { FabricImage } from '../shapes/Image';\nimport { classRegistry } from '../ClassRegistry';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n qrDecompose,\n} from '../util/misc/matrix';\nimport { removeTransformMatrixForSvgParsing } from '../util/transform_matrix_removal';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { Point } from '../Point';\nimport { CENTER, FILL, STROKE } from '../constants';\nimport { getGradientDefs } from './getGradientDefs';\nimport { getCSSRules } from './getCSSRules';\nimport type { LoadImageOptions } from '../util';\nimport type { CSSRules, TSvgReviverCallback } from './typedefs';\nimport type { ParsedViewboxTransform } from './applyViewboxTransform';\nimport type { SVGOptions } from '../gradient';\nimport { getTagName } from './getTagName';\nimport { parseTransformAttribute } from './parseTransformAttribute';\n\nconst findTag = (el: Element) =>\n classRegistry.getSVGClass(getTagName(el).toLowerCase());\n\ntype StorageType = {\n fill: SVGGradientElement;\n stroke: SVGGradientElement;\n clipPath: Element[];\n};\n\ntype NotParsedFabricObject = FabricObject & {\n fill: string;\n stroke: string;\n clipPath?: string;\n clipRule?: CanvasFillRule;\n};\n\nexport class ElementsParser {\n declare elements: Element[];\n declare options: LoadImageOptions & ParsedViewboxTransform;\n declare reviver?: TSvgReviverCallback;\n declare regexUrl: RegExp;\n declare doc: Document;\n declare clipPaths: Record;\n declare gradientDefs: Record;\n declare cssRules: CSSRules;\n\n constructor(\n elements: Element[],\n options: LoadImageOptions & ParsedViewboxTransform,\n reviver: TSvgReviverCallback | undefined,\n doc: Document,\n clipPaths: Record,\n ) {\n this.elements = elements;\n this.options = options;\n this.reviver = reviver;\n this.regexUrl = /^url\\(['\"]?#([^'\"]+)['\"]?\\)/g;\n this.doc = doc;\n this.clipPaths = clipPaths;\n this.gradientDefs = getGradientDefs(doc);\n this.cssRules = getCSSRules(doc);\n }\n\n parse(): Promise> {\n return Promise.all(\n this.elements.map((element) => this.createObject(element)),\n );\n }\n\n async createObject(el: Element): Promise {\n const klass = findTag(el);\n if (klass) {\n const obj: NotParsedFabricObject = await klass.fromElement(\n el,\n this.options,\n this.cssRules,\n );\n this.resolveGradient(obj, el, FILL);\n this.resolveGradient(obj, el, STROKE);\n if (obj instanceof FabricImage && obj._originalElement) {\n removeTransformMatrixForSvgParsing(\n obj,\n obj.parsePreserveAspectRatioAttribute(),\n );\n } else {\n removeTransformMatrixForSvgParsing(obj);\n }\n await this.resolveClipPath(obj, el);\n this.reviver && this.reviver(el, obj);\n return obj;\n }\n return null;\n }\n\n extractPropertyDefinition(\n obj: NotParsedFabricObject,\n property: 'fill' | 'stroke' | 'clipPath',\n storage: Record,\n ): StorageType[typeof property] | undefined {\n const value = obj[property]!,\n regex = this.regexUrl;\n if (!regex.test(value)) {\n return undefined;\n }\n // verify: can we remove the 'g' flag? and remove lastIndex changes?\n regex.lastIndex = 0;\n // we passed the regex test, so we know is not null;\n const id = regex.exec(value)![1];\n regex.lastIndex = 0;\n // @todo fix this\n return storage[id];\n }\n\n resolveGradient(\n obj: NotParsedFabricObject,\n el: Element,\n property: 'fill' | 'stroke',\n ) {\n const gradientDef = this.extractPropertyDefinition(\n obj,\n property,\n this.gradientDefs,\n ) as SVGGradientElement;\n if (gradientDef) {\n const opacityAttr = el.getAttribute(property + '-opacity');\n const gradient = Gradient.fromElement(gradientDef, obj, {\n ...this.options,\n opacity: opacityAttr,\n } as SVGOptions);\n obj.set(property, gradient);\n }\n }\n\n // TODO: resolveClipPath could be run once per clippath with minor work per object.\n // is a refactor that i m not sure is worth on this code\n async resolveClipPath(\n obj: NotParsedFabricObject,\n usingElement: Element,\n exactOwner?: Element,\n ) {\n const clipPathElements = this.extractPropertyDefinition(\n obj,\n 'clipPath',\n this.clipPaths,\n ) as Element[];\n if (clipPathElements) {\n const objTransformInv = invertTransform(obj.calcTransformMatrix());\n const clipPathTag = clipPathElements[0].parentElement!;\n let clipPathOwner = usingElement;\n while (\n !exactOwner &&\n clipPathOwner.parentElement &&\n clipPathOwner.getAttribute('clip-path') !== obj.clipPath\n ) {\n clipPathOwner = clipPathOwner.parentElement;\n }\n // move the clipPath tag as sibling to the real element that is using it\n clipPathOwner.parentElement!.appendChild(clipPathTag!);\n\n // this multiplication order could be opposite.\n // but i don't have an svg to test it\n // at the first SVG that has a transform on both places and is misplaced\n // try to invert this multiplication order\n const finalTransform = parseTransformAttribute(\n `${clipPathOwner.getAttribute('transform') || ''} ${\n clipPathTag.getAttribute('originalTransform') || ''\n }`,\n );\n\n clipPathTag.setAttribute(\n 'transform',\n `matrix(${finalTransform.join(',')})`,\n );\n\n const container = await Promise.all(\n clipPathElements.map((clipPathElement) => {\n return findTag(clipPathElement)\n .fromElement(clipPathElement, this.options, this.cssRules)\n .then((enlivedClippath: NotParsedFabricObject) => {\n removeTransformMatrixForSvgParsing(enlivedClippath);\n enlivedClippath.fillRule = enlivedClippath.clipRule!;\n delete enlivedClippath.clipRule;\n return enlivedClippath;\n });\n }),\n );\n const clipPath =\n container.length === 1 ? container[0] : new Group(container);\n const gTransform = multiplyTransformMatrices(\n objTransformInv,\n clipPath.calcTransformMatrix(),\n );\n if (clipPath.clipPath) {\n await this.resolveClipPath(\n clipPath,\n clipPathOwner,\n // this is tricky.\n // it tries to differentiate from when clipPaths are inherited by outside groups\n // or when are really clipPaths referencing other clipPaths\n clipPathTag.getAttribute('clip-path') ? clipPathOwner : undefined,\n );\n }\n const { scaleX, scaleY, angle, skewX, translateX, translateY } =\n qrDecompose(gTransform);\n clipPath.set({\n flipX: false,\n flipY: false,\n });\n clipPath.set({\n scaleX,\n scaleY,\n angle,\n skewX,\n skewY: 0,\n });\n clipPath.setPositionByOrigin(\n new Point(translateX, translateY),\n CENTER,\n CENTER,\n );\n obj.clipPath = clipPath;\n } else {\n // if clip-path does not resolve to any element, delete the property.\n delete obj.clipPath;\n return;\n }\n }\n}\n","import { applyViewboxTransform } from './applyViewboxTransform';\nimport { svgValidTagNamesRegEx } from './constants';\nimport { hasInvalidAncestor } from './hasInvalidAncestor';\nimport { parseUseDirectives } from './parseUseDirectives';\nimport type { SVGParsingOutput, TSvgReviverCallback } from './typedefs';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\nimport { ElementsParser } from './elements_parser';\nimport { log, SignalAbortedError } from '../util/internals/console';\nimport { getTagName } from './getTagName';\n\nconst isValidSvgTag = (el: Element) =>\n svgValidTagNamesRegEx.test(getTagName(el));\n\nexport const createEmptyResponse = (): SVGParsingOutput => ({\n objects: [],\n elements: [],\n options: {},\n allElements: [],\n});\n\n/**\n * Parses an SVG document, converts it to an array of corresponding fabric.* instances and passes them to a callback\n * @static\n * @function\n * @memberOf fabric\n * @param {HTMLElement} doc SVG document to parse\n * @param {TSvgParsedCallback} callback Invoked when the parsing is done, with null if parsing wasn't possible with the list of svg nodes.\n * @param {TSvgReviverCallback} [reviver] Extra callback for further parsing of SVG elements, called after each fabric object has been created.\n * Takes as input the original svg element and the generated `FabricObject` as arguments. Used to inspect extra properties not parsed by fabric,\n * or extra custom manipulation\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin setting to use for external resources\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @return {SVGParsingOutput}\n * {@link SVGParsingOutput} also receives `allElements` array as the last argument. This is the full list of svg nodes available in the document.\n * You may want to use it if you are trying to regroup the objects as they were originally grouped in the SVG. ( This was the reason why it was added )\n */\nexport async function parseSVGDocument(\n doc: Document,\n reviver?: TSvgReviverCallback,\n { crossOrigin, signal }: LoadImageOptions = {},\n): Promise {\n if (signal && signal.aborted) {\n log('log', new SignalAbortedError('parseSVGDocument'));\n // this is an unhappy path, we dont care about speed\n return createEmptyResponse();\n }\n const documentElement = doc.documentElement;\n parseUseDirectives(doc);\n\n const descendants = Array.from(documentElement.getElementsByTagName('*')),\n options = {\n ...applyViewboxTransform(documentElement),\n crossOrigin,\n signal,\n };\n const elements = descendants.filter((el) => {\n applyViewboxTransform(el);\n return isValidSvgTag(el) && !hasInvalidAncestor(el); // http://www.w3.org/TR/SVG/struct.html#DefsElement\n });\n if (!elements || (elements && !elements.length)) {\n return {\n ...createEmptyResponse(),\n options,\n allElements: descendants,\n };\n }\n const localClipPaths: Record = {};\n descendants\n .filter((el) => getTagName(el) === 'clipPath')\n .forEach((el) => {\n el.setAttribute('originalTransform', el.getAttribute('transform') || '');\n const id = el.getAttribute('id')!;\n localClipPaths[id] = Array.from(el.getElementsByTagName('*')).filter(\n (el) => isValidSvgTag(el),\n );\n });\n\n // Precedence of rules: style > class > attribute\n const elementParser = new ElementsParser(\n elements,\n options,\n reviver,\n doc,\n localClipPaths,\n );\n\n const instances = await elementParser.parse();\n\n return {\n objects: instances,\n elements,\n options,\n allElements: descendants,\n };\n}\n","import { getFabricWindow } from '../env';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\nimport { parseSVGDocument } from './parseSVGDocument';\nimport type { SVGParsingOutput, TSvgReviverCallback } from './typedefs';\n\n/**\n * Takes string corresponding to an SVG document, and parses it into a set of fabric objects\n * @memberOf fabric\n * @param {String} string representing the svg\n * @param {TSvgParsedCallback} callback Invoked when the parsing is done, with null if parsing wasn't possible with the list of svg nodes.\n * {@link TSvgParsedCallback} also receives `allElements` array as the last argument. This is the full list of svg nodes available in the document.\n * You may want to use it if you are trying to regroup the objects as they were originally grouped in the SVG. ( This was the reason why it was added )\n * @param {TSvgReviverCallback} [reviver] Extra callback for further parsing of SVG elements, called after each fabric object has been created.\n * Takes as input the original svg element and the generated `FabricObject` as arguments. Used to inspect extra properties not parsed by fabric,\n * or extra custom manipulation\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin setting to use for external resources\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n */\nexport function loadSVGFromString(\n string: string,\n reviver?: TSvgReviverCallback,\n options?: LoadImageOptions,\n): Promise {\n const parser = new (getFabricWindow().DOMParser)(),\n // should we use `image/svg+xml` here?\n doc = parser.parseFromString(string.trim(), 'text/xml');\n return parseSVGDocument(doc, reviver, options);\n}\n","import { request } from '../util/internals/dom_request';\nimport { parseSVGDocument, createEmptyResponse } from './parseSVGDocument';\nimport type { SVGParsingOutput, TSvgReviverCallback } from './typedefs';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\n\n/**\n * Takes url corresponding to an SVG document, and parses it into a set of fabric objects.\n * Note that SVG is fetched via XMLHttpRequest, so it needs to conform to SOP (Same Origin Policy)\n * @memberOf fabric\n * @param {string} url where the SVG is\n * @param {TSvgParsedCallback} callback Invoked when the parsing is done, with null if parsing wasn't possible with the list of svg nodes.\n * {@link TSvgParsedCallback} also receives `allElements` array as the last argument. This is the full list of svg nodes available in the document.\n * You may want to use it if you are trying to regroup the objects as they were originally grouped in the SVG. ( This was the reason why it was added )\n * @param {TSvgReviverCallback} [reviver] Extra callback for further parsing of SVG elements, called after each fabric object has been created.\n * Takes as input the original svg element and the generated `FabricObject` as arguments. Used to inspect extra properties not parsed by fabric,\n * or extra custom manipulation\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin setting to use for external resources\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n */\nexport function loadSVGFromURL(\n url: string,\n reviver?: TSvgReviverCallback,\n options: LoadImageOptions = {},\n): Promise {\n // need to handle error properly\n return new Promise((resolve, reject) => {\n const onComplete = (r: XMLHttpRequest) => {\n const xml = r.responseXML;\n if (xml) {\n resolve(xml);\n }\n reject();\n };\n\n request(url.replace(/^\\n\\s*/, '').trim(), {\n onComplete,\n signal: options.signal,\n });\n })\n .then((parsedDoc) => parseSVGDocument(parsedDoc, reviver, options))\n .catch(() => {\n // this is an unhappy path, we dont care about speed\n return createEmptyResponse();\n });\n}\n","import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Polyline } from '../shapes/Polyline';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { MODIFY_POLY } from '../constants';\n\nconst ACTION_NAME: TModificationEvents = MODIFY_POLY;\n\ntype TTransformAnchor = Transform & { pointIndex: number };\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nexport const createPolyPositionHandler = (pointIndex: number) => {\n return function (dim: Point, finalMatrix: TMat2D, polyObject: Polyline) {\n const { points, pathOffset } = polyObject;\n return new Point(points[pointIndex])\n .subtract(pathOffset)\n .transform(\n multiplyTransformMatrices(\n polyObject.getViewportTransform(),\n polyObject.calcTransformMatrix(),\n ),\n );\n };\n};\n\n/**\n * This function defines what the control does.\n * It'll be called on every mouse move after a control has been clicked and is being dragged.\n * The function receives as argument the mouse event, the current transform object\n * and the current position in canvas coordinate `transform.target` is a reference to the\n * current object being transformed.\n */\nexport const polyActionHandler = (\n eventData: TPointerEvent,\n transform: TTransformAnchor,\n x: number,\n y: number,\n) => {\n const { target, pointIndex } = transform;\n const poly = target as Polyline;\n const mouseLocalPosition = sendPointToPlane(\n new Point(x, y),\n undefined,\n poly.calcOwnMatrix(),\n );\n\n poly.points[pointIndex] = mouseLocalPosition.add(poly.pathOffset);\n poly.setDimensions();\n\n return true;\n};\n\n/**\n * Keep the polygon in the same position when we change its `width`/`height`/`top`/`left`.\n */\nexport const factoryPolyActionHandler = (\n pointIndex: number,\n fn: TransformActionHandler,\n) => {\n return function (\n eventData: TPointerEvent,\n transform: Transform,\n x: number,\n y: number,\n ) {\n const poly = transform.target as Polyline,\n anchorPoint = new Point(\n poly.points[(pointIndex > 0 ? pointIndex : poly.points.length) - 1],\n ),\n anchorPointInParentPlane = anchorPoint\n .subtract(poly.pathOffset)\n .transform(poly.calcOwnMatrix()),\n actionPerformed = fn(eventData, { ...transform, pointIndex }, x, y);\n\n const newAnchorPointInParentPlane = anchorPoint\n .subtract(poly.pathOffset)\n .transform(poly.calcOwnMatrix());\n\n const diff = newAnchorPointInParentPlane.subtract(anchorPointInParentPlane);\n poly.left -= diff.x;\n poly.top -= diff.y;\n\n return actionPerformed;\n };\n};\n\nexport const createPolyActionHandler = (pointIndex: number) =>\n wrapWithFireEvent(\n ACTION_NAME,\n factoryPolyActionHandler(pointIndex, polyActionHandler),\n );\n\nexport function createPolyControls(\n poly: Polyline,\n options?: Partial,\n): Record;\nexport function createPolyControls(\n numOfControls: number,\n options?: Partial,\n): Record;\nexport function createPolyControls(\n arg0: number | Polyline,\n options: Partial = {},\n) {\n const controls = {} as Record;\n for (\n let idx = 0;\n idx < (typeof arg0 === 'number' ? arg0 : arg0.points.length);\n idx++\n ) {\n controls[`p${idx}`] = new Control({\n actionName: ACTION_NAME,\n positionHandler: createPolyPositionHandler(idx),\n actionHandler: createPolyActionHandler(idx),\n ...options,\n });\n }\n return controls;\n}\n","import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Path } from '../shapes/Path';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n} from '../EventTypeDefs';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport type { TSimpleParseCommandType } from '../util/path/typedefs';\nimport type { ControlRenderingStyleOverride } from './controlRendering';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo } from './util';\n\nconst ACTION_NAME: TModificationEvents = 'modifyPath' as const;\n\ntype TTransformAnchor = Transform;\n\nexport type PathPointControlStyle = {\n controlFill?: string;\n controlStroke?: string;\n connectionDashArray?: number[];\n};\n\nconst calcPathPointPosition = (\n pathObject: Path,\n commandIndex: number,\n pointIndex: number,\n) => {\n const { path, pathOffset } = pathObject;\n const command = path[commandIndex];\n return new Point(\n (command[pointIndex] as number) - pathOffset.x,\n (command[pointIndex + 1] as number) - pathOffset.y,\n ).transform(\n multiplyTransformMatrices(\n pathObject.getViewportTransform(),\n pathObject.calcTransformMatrix(),\n ),\n );\n};\n\nconst movePathPoint = (\n pathObject: Path,\n x: number,\n y: number,\n commandIndex: number,\n pointIndex: number,\n) => {\n const { path, pathOffset } = pathObject;\n\n const anchorCommand =\n path[(commandIndex > 0 ? commandIndex : path.length) - 1];\n const anchorPoint = new Point(\n anchorCommand[pointIndex] as number,\n anchorCommand[pointIndex + 1] as number,\n );\n\n const anchorPointInParentPlane = anchorPoint\n .subtract(pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const mouseLocalPosition = sendPointToPlane(\n new Point(x, y),\n undefined,\n pathObject.calcOwnMatrix(),\n );\n\n path[commandIndex][pointIndex] = mouseLocalPosition.x + pathOffset.x;\n path[commandIndex][pointIndex + 1] = mouseLocalPosition.y + pathOffset.y;\n pathObject.setDimensions();\n\n const newAnchorPointInParentPlane = anchorPoint\n .subtract(pathObject.pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const diff = newAnchorPointInParentPlane.subtract(anchorPointInParentPlane);\n pathObject.left -= diff.x;\n pathObject.top -= diff.y;\n pathObject.set('dirty', true);\n return true;\n};\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nfunction pathPositionHandler(\n this: PathPointControl,\n dim: Point,\n finalMatrix: TMat2D,\n pathObject: Path,\n) {\n const { commandIndex, pointIndex } = this;\n return calcPathPointPosition(pathObject, commandIndex, pointIndex);\n}\n\n/**\n * This function defines what the control does.\n * It'll be called on every mouse move after a control has been clicked and is being dragged.\n * The function receives as argument the mouse event, the current transform object\n * and the current position in canvas coordinate `transform.target` is a reference to the\n * current object being transformed.\n */\nfunction pathActionHandler(\n this: PathPointControl,\n eventData: TPointerEvent,\n transform: TTransformAnchor,\n x: number,\n y: number,\n) {\n const { target } = transform;\n const { commandIndex, pointIndex } = this;\n const actionPerformed = movePathPoint(\n target as Path,\n x,\n y,\n commandIndex,\n pointIndex,\n );\n if (actionPerformed) {\n fireEvent(this.actionName as TModificationEvents, {\n ...commonEventInfo(eventData, transform, x, y),\n commandIndex,\n pointIndex,\n });\n }\n return actionPerformed;\n}\n\nconst indexFromPrevCommand = (previousCommandType: TSimpleParseCommandType) =>\n previousCommandType === 'C' ? 5 : previousCommandType === 'Q' ? 3 : 1;\n\nclass PathPointControl extends Control {\n declare commandIndex: number;\n declare pointIndex: number;\n declare controlFill: string;\n declare controlStroke: string;\n constructor(options?: Partial) {\n super(options);\n }\n\n render(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path,\n ) {\n const overrides: ControlRenderingStyleOverride = {\n ...styleOverride,\n cornerColor: this.controlFill,\n cornerStrokeColor: this.controlStroke,\n transparentCorners: !this.controlFill,\n };\n super.render(ctx, left, top, overrides, fabricObject);\n }\n}\n\nclass PathControlPointControl extends PathPointControl {\n declare connectionDashArray?: number[];\n declare connectToCommandIndex: number;\n declare connectToPointIndex: number;\n constructor(options?: Partial) {\n super(options);\n }\n\n render(\n this: PathControlPointControl,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path,\n ) {\n const { path } = fabricObject;\n const {\n commandIndex,\n pointIndex,\n connectToCommandIndex,\n connectToPointIndex,\n } = this;\n ctx.save();\n ctx.strokeStyle = this.controlStroke;\n if (this.connectionDashArray) {\n ctx.setLineDash(this.connectionDashArray);\n }\n const [commandType] = path[commandIndex];\n const point = calcPathPointPosition(\n fabricObject,\n connectToCommandIndex,\n connectToPointIndex,\n );\n\n if (commandType === 'Q') {\n // one control point connects to 2 points\n const point2 = calcPathPointPosition(\n fabricObject,\n commandIndex,\n pointIndex + 2,\n );\n ctx.moveTo(point2.x, point2.y);\n ctx.lineTo(left, top);\n } else {\n ctx.moveTo(left, top);\n }\n ctx.lineTo(point.x, point.y);\n ctx.stroke();\n ctx.restore();\n\n super.render(ctx, left, top, styleOverride, fabricObject);\n }\n}\n\nconst createControl = (\n commandIndexPos: number,\n pointIndexPos: number,\n isControlPoint: boolean,\n options: Partial & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n },\n connectToCommandIndex?: number,\n connectToPointIndex?: number,\n) =>\n new (isControlPoint ? PathControlPointControl : PathPointControl)({\n commandIndex: commandIndexPos,\n pointIndex: pointIndexPos,\n actionName: ACTION_NAME,\n positionHandler: pathPositionHandler,\n actionHandler: pathActionHandler,\n connectToCommandIndex,\n connectToPointIndex,\n ...options,\n ...(isControlPoint ? options.controlPointStyle : options.pointStyle),\n } as Partial);\n\nexport function createPathControls(\n path: Path,\n options: Partial & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n } = {},\n): Record {\n const controls = {} as Record;\n let previousCommandType: TSimpleParseCommandType = 'M';\n path.path.forEach((command, commandIndex) => {\n const commandType = command[0];\n\n if (commandType !== 'Z') {\n controls[`c_${commandIndex}_${commandType}`] = createControl(\n commandIndex,\n command.length - 2,\n false,\n options,\n );\n }\n switch (commandType) {\n case 'C':\n controls[`c_${commandIndex}_C_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex - 1,\n indexFromPrevCommand(previousCommandType),\n );\n controls[`c_${commandIndex}_C_CP_2`] = createControl(\n commandIndex,\n 3,\n true,\n options,\n commandIndex,\n 5,\n );\n break;\n case 'Q':\n controls[`c_${commandIndex}_Q_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex,\n 3,\n );\n break;\n }\n previousCommandType = commandType;\n });\n return controls;\n}\n","import { getFabricWindow } from '../env';\nimport { createCanvasElement, createCanvasElementFor } from '../util/misc/dom';\nimport { WebGLFilterBackend } from './WebGLFilterBackend';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\n\nexport const isWebGLPipelineState = (\n options: TWebGLPipelineState | T2DPipelineState,\n): options is TWebGLPipelineState => {\n return (options as TWebGLPipelineState).webgl !== undefined;\n};\n\n/**\n * Pick a method to copy data from GL context to 2d canvas. In some browsers using\n * drawImage should be faster, but is also bugged for a small combination of old hardware\n * and drivers.\n * putImageData is faster than drawImage for that specific operation.\n */\nexport const isPutImageFaster = (width: number, height: number): boolean => {\n const targetCanvas = createCanvasElementFor({ width, height });\n const sourceCanvas = createCanvasElement();\n const gl = sourceCanvas.getContext('webgl')!;\n // eslint-disable-next-line no-undef\n const imageBuffer = new ArrayBuffer(width * height * 4);\n\n const testContext = {\n imageBuffer: imageBuffer,\n } as unknown as Required;\n const testPipelineState = {\n destinationWidth: width,\n destinationHeight: height,\n targetCanvas: targetCanvas,\n } as unknown as TWebGLPipelineState;\n let startTime;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2D.call(\n testContext,\n gl,\n testPipelineState,\n );\n const drawImageTime = getFabricWindow().performance.now() - startTime;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2DPutImageData.call(\n testContext,\n gl,\n testPipelineState,\n );\n const putImageDataTime = getFabricWindow().performance.now() - startTime;\n\n return drawImageTime > putImageDataTime;\n};\n","export const highPsourceCode = `precision highp float`;\n\nexport const identityFragmentShader = `\n ${highPsourceCode};\n varying vec2 vTexCoord;\n uniform sampler2D uTexture;\n void main() {\n gl_FragColor = texture2D(uTexture, vTexCoord);\n }`;\n\nexport const vertexSource = `\n attribute vec2 aPosition;\n varying vec2 vTexCoord;\n void main() {\n vTexCoord = aPosition;\n gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n }`;\n","import { getEnv } from '../env';\nimport type {\n T2DPipelineState,\n TWebGLAttributeLocationMap,\n TWebGLPipelineState,\n TWebGLProgramCacheItem,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport {\n highPsourceCode,\n identityFragmentShader,\n vertexSource,\n} from './shaders/baseFilter';\nimport type { Abortable } from '../typedefs';\nimport { FabricError } from '../util/internals/console';\nimport { createCanvasElementFor } from '../util/misc/dom';\n\nconst regex = new RegExp(highPsourceCode, 'g');\n\nexport class BaseFilter<\n Name extends string,\n OwnProps extends Record = object,\n> {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n get type(): Name {\n return (this.constructor as typeof BaseFilter).type as Name;\n }\n\n /**\n * The class type. Used to identify which class this is.\n * This is used for serialization purposes and internally it can be used\n * to identify classes. As a developer you could use `instance of Class`\n * but to avoid importing all the code and blocking tree shaking we try\n * to avoid doing that.\n */\n static type = 'BaseFilter';\n\n /**\n * Contains the uniform locations for the fragment shader.\n * uStepW and uStepH are handled by the BaseFilter, each filter class\n * needs to specify all the one that are needed\n */\n static uniformLocations: string[] = [];\n\n declare static defaults: Record;\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor({\n type,\n ...options\n }: { type?: never } & Partial & Record = {}) {\n Object.assign(\n this,\n (this.constructor as typeof BaseFilter).defaults,\n options,\n );\n }\n\n protected getFragmentSource(): string {\n return identityFragmentShader;\n }\n\n getVertexSource(): string {\n return vertexSource;\n }\n\n /**\n * Compile this filter's shader program.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context to use for shader compilation.\n * @param {String} fragmentSource fragmentShader source for compilation\n * @param {String} vertexSource vertexShader source for compilation\n */\n createProgram(\n gl: WebGLRenderingContext,\n fragmentSource: string = this.getFragmentSource(),\n vertexSource: string = this.getVertexSource(),\n ) {\n const {\n WebGLProbe: { GLPrecision = 'highp' },\n } = getEnv();\n if (GLPrecision !== 'highp') {\n fragmentSource = fragmentSource.replace(\n regex,\n highPsourceCode.replace('highp', GLPrecision),\n );\n }\n const vertexShader = gl.createShader(gl.VERTEX_SHADER);\n const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n const program = gl.createProgram();\n\n if (!vertexShader || !fragmentShader || !program) {\n throw new FabricError(\n 'Vertex, fragment shader or program creation error',\n );\n }\n gl.shaderSource(vertexShader, vertexSource);\n gl.compileShader(vertexShader);\n if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n throw new FabricError(\n `Vertex shader compile error for ${this.type}: ${gl.getShaderInfoLog(\n vertexShader,\n )}`,\n );\n }\n\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n throw new FabricError(\n `Fragment shader compile error for ${this.type}: ${gl.getShaderInfoLog(\n fragmentShader,\n )}`,\n );\n }\n\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n throw new FabricError(\n `Shader link error for \"${this.type}\" ${gl.getProgramInfoLog(program)}`,\n );\n }\n\n const uniformLocations = this.getUniformLocations(gl, program) || {};\n uniformLocations.uStepW = gl.getUniformLocation(program, 'uStepW');\n uniformLocations.uStepH = gl.getUniformLocation(program, 'uStepH');\n\n return {\n program,\n attributeLocations: this.getAttributeLocations(gl, program),\n uniformLocations,\n };\n }\n\n /**\n * Return a map of attribute names to WebGLAttributeLocation objects.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take attribute locations.\n * @returns {Object} A map of attribute names to attribute locations.\n */\n getAttributeLocations(\n gl: WebGLRenderingContext,\n program: WebGLProgram,\n ): TWebGLAttributeLocationMap {\n return {\n aPosition: gl.getAttribLocation(program, 'aPosition'),\n };\n }\n\n /**\n * Return a map of uniform names to WebGLUniformLocation objects.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take uniform locations.\n * @returns {Object} A map of uniform names to uniform locations.\n */\n getUniformLocations(\n gl: WebGLRenderingContext,\n program: WebGLProgram,\n ): TWebGLUniformLocationMap {\n const locations = (this.constructor as unknown as typeof BaseFilter)\n .uniformLocations;\n\n const uniformLocations: Record = {};\n for (let i = 0; i < locations.length; i++) {\n uniformLocations[locations[i]] = gl.getUniformLocation(\n program,\n locations[i],\n );\n }\n return uniformLocations;\n }\n\n /**\n * Send attribute data from this filter to its shader program on the GPU.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {Object} attributeLocations A map of shader attribute names to their locations.\n */\n sendAttributeData(\n gl: WebGLRenderingContext,\n attributeLocations: Record,\n aPositionData: Float32Array,\n ) {\n const attributeLocation = attributeLocations.aPosition;\n const buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.enableVertexAttribArray(attributeLocation);\n gl.vertexAttribPointer(attributeLocation, 2, gl.FLOAT, false, 0, 0);\n gl.bufferData(gl.ARRAY_BUFFER, aPositionData, gl.STATIC_DRAW);\n }\n\n _setupFrameBuffer(options: TWebGLPipelineState) {\n const gl = options.context;\n if (options.passes > 1) {\n const width = options.destinationWidth;\n const height = options.destinationHeight;\n if (options.sourceWidth !== width || options.sourceHeight !== height) {\n gl.deleteTexture(options.targetTexture);\n options.targetTexture = options.filterBackend.createTexture(\n gl,\n width,\n height,\n );\n }\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n options.targetTexture,\n 0,\n );\n } else {\n // draw last filter on canvas and not to framebuffer.\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.finish();\n }\n }\n\n _swapTextures(options: TWebGLPipelineState) {\n options.passes--;\n options.pass++;\n const temp = options.targetTexture;\n options.targetTexture = options.sourceTexture;\n options.sourceTexture = temp;\n }\n\n /**\n * Generic isNeutral implementation for one parameter based filters.\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * Other filters may need their own version ( ColorMatrix, HueRotation, gamma, ComposedFilter )\n * @param {Object} options\n **/\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isNeutralState(options?: any): boolean {\n return false;\n }\n\n /**\n * Apply this filter to the input image data provided.\n *\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n this._setupFrameBuffer(options);\n this.applyToWebGL(options);\n this._swapTextures(options);\n } else {\n this.applyTo2d(options);\n }\n }\n\n applyTo2d(_options: T2DPipelineState): void {\n // override by subclass\n }\n\n /**\n * Returns a string that represent the current selected shader code for the filter.\n * Used to force recompilation when parameters change or to retrieve the shader from cache\n * @type string\n **/\n getCacheKey(): string {\n return this.type;\n }\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n * @return {WebGLProgram} the compiled program shader\n */\n retrieveShader(options: TWebGLPipelineState): TWebGLProgramCacheItem {\n const key = this.getCacheKey();\n if (!options.programCache[key]) {\n options.programCache[key] = this.createProgram(options.context);\n }\n return options.programCache[key];\n }\n\n /**\n * Apply this filter using webgl.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.originalTexture The texture of the original input image.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyToWebGL(options: TWebGLPipelineState) {\n const gl = options.context;\n const shader = this.retrieveShader(options);\n if (options.pass === 0 && options.originalTexture) {\n gl.bindTexture(gl.TEXTURE_2D, options.originalTexture);\n } else {\n gl.bindTexture(gl.TEXTURE_2D, options.sourceTexture);\n }\n gl.useProgram(shader.program);\n this.sendAttributeData(gl, shader.attributeLocations, options.aPosition);\n\n gl.uniform1f(shader.uniformLocations.uStepW, 1 / options.sourceWidth);\n gl.uniform1f(shader.uniformLocations.uStepH, 1 / options.sourceHeight);\n\n this.sendUniformData(gl, shader.uniformLocations);\n gl.viewport(0, 0, options.destinationWidth, options.destinationHeight);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n bindAdditionalTexture(\n gl: WebGLRenderingContext,\n texture: WebGLTexture,\n textureUnit: number,\n ) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n // reset active texture to 0 as usual\n gl.activeTexture(gl.TEXTURE0);\n }\n\n unbindAdditionalTexture(gl: WebGLRenderingContext, textureUnit: number) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.activeTexture(gl.TEXTURE0);\n }\n\n /**\n * Send uniform data from this filter to its shader program on the GPU.\n *\n * Intended to be overridden by subclasses.\n *\n * @param {WebGLRenderingContext} _gl The canvas context used to compile the shader program.\n * @param {Object} _uniformLocations A map of shader uniform names to their locations.\n */\n sendUniformData(\n _gl: WebGLRenderingContext,\n _uniformLocations: TWebGLUniformLocationMap,\n ): void {\n // override by subclass\n }\n\n /**\n * If needed by a 2d filter, this functions can create an helper canvas to be used\n * remember that options.targetCanvas is available for use till end of chain.\n */\n createHelpLayer(options: T2DPipelineState) {\n if (!options.helpLayer) {\n const { sourceWidth, sourceHeight } = options;\n const helpLayer = createCanvasElementFor({\n width: sourceWidth,\n height: sourceHeight,\n });\n options.helpLayer = helpLayer;\n }\n }\n\n /**\n * Returns object representation of an instance\n * It will automatically export the default values of a filter,\n * stored in the static defaults property.\n * @return {Object} Object representation of an instance\n */\n toObject(): { type: Name } & OwnProps {\n const defaultKeys = Object.keys(\n (this.constructor as typeof BaseFilter).defaults || {},\n ) as (keyof OwnProps)[];\n\n return {\n type: this.type,\n ...defaultKeys.reduce((acc, key) => {\n acc[key] = this[\n key as keyof this\n ] as unknown as (typeof acc)[typeof key];\n return acc;\n }, {} as OwnProps),\n };\n }\n\n /**\n * Returns a JSON representation of an instance\n * @return {Object} JSON\n */\n toJSON() {\n // delegate, not alias\n return this.toObject();\n }\n\n static async fromObject(\n { type, ...filterOptions }: Record,\n _options: Abortable,\n ): Promise> {\n return new this(filterOptions);\n }\n}\n","export const blendColorFragmentSource = {\n multiply: 'gl_FragColor.rgb *= uColor.rgb;\\n',\n screen:\n 'gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);\\n',\n add: 'gl_FragColor.rgb += uColor.rgb;\\n',\n difference: 'gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);\\n',\n subtract: 'gl_FragColor.rgb -= uColor.rgb;\\n',\n lighten: 'gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);\\n',\n darken: 'gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);\\n',\n exclusion:\n 'gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);\\n',\n overlay: `\n if (uColor.r < 0.5) {\n gl_FragColor.r *= 2.0 * uColor.r;\n } else {\n gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);\n }\n if (uColor.g < 0.5) {\n gl_FragColor.g *= 2.0 * uColor.g;\n } else {\n gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);\n }\n if (uColor.b < 0.5) {\n gl_FragColor.b *= 2.0 * uColor.b;\n } else {\n gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);\n }\n `,\n tint: `\n gl_FragColor.rgb *= (1.0 - uColor.a);\n gl_FragColor.rgb += uColor.rgb;\n `,\n} as const;\n","import { Color } from '../color/Color';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { blendColorFragmentSource } from './shaders/blendColor';\n\nexport type TBlendMode =\n | 'multiply'\n | 'add'\n | 'difference'\n | 'screen'\n | 'subtract'\n | 'darken'\n | 'lighten'\n | 'overlay'\n | 'exclusion'\n | 'tint';\n\ntype BlendColorOwnProps = {\n color: string;\n mode: TBlendMode;\n alpha: number;\n};\n\nexport const blendColorDefaultValues: BlendColorOwnProps = {\n color: '#F95C63',\n mode: 'multiply',\n alpha: 1,\n};\n\n/**\n * Color Blend filter class\n * @example\n * const filter = new BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * const filter = new BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply'\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class BlendColor extends BaseFilter<'BlendColor', BlendColorOwnProps> {\n /**\n * Color to make the blend operation with. default to a reddish color since black or white\n * gives always strong result.\n * @type String\n * @default\n **/\n declare color: BlendColorOwnProps['color'];\n\n /**\n * Blend mode for the filter: one of multiply, add, difference, screen, subtract,\n * darken, lighten, overlay, exclusion, tint.\n * @type String\n * @default\n **/\n declare mode: BlendColorOwnProps['mode'];\n /**\n * alpha value. represent the strength of the blend color operation.\n * @type Number\n * @default\n **/\n declare alpha: BlendColorOwnProps['alpha'];\n\n static defaults = blendColorDefaultValues;\n\n static type = 'BlendColor';\n\n static uniformLocations = ['uColor'];\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n protected getFragmentSource(): string {\n return `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec4 uColor;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n gl_FragColor = color;\n if (color.a > 0.0) {\n ${blendColorFragmentSource[this.mode]}\n }\n }\n `;\n }\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const source = new Color(this.color).getSource();\n const tr = source[0] * this.alpha;\n const tg = source[1] * this.alpha;\n const tb = source[2] * this.alpha;\n const alpha1 = 1 - this.alpha;\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = (r * tr) / 255;\n data[i + 1] = (g * tg) / 255;\n data[i + 2] = (b * tb) / 255;\n break;\n case 'screen':\n data[i] = 255 - ((255 - r) * (255 - tr)) / 255;\n data[i + 1] = 255 - ((255 - g) * (255 - tg)) / 255;\n data[i + 2] = 255 - ((255 - b) * (255 - tb)) / 255;\n break;\n case 'add':\n data[i] = r + tr;\n data[i + 1] = g + tg;\n data[i + 2] = b + tb;\n break;\n case 'difference':\n data[i] = Math.abs(r - tr);\n data[i + 1] = Math.abs(g - tg);\n data[i + 2] = Math.abs(b - tb);\n break;\n case 'subtract':\n data[i] = r - tr;\n data[i + 1] = g - tg;\n data[i + 2] = b - tb;\n break;\n case 'darken':\n data[i] = Math.min(r, tr);\n data[i + 1] = Math.min(g, tg);\n data[i + 2] = Math.min(b, tb);\n break;\n case 'lighten':\n data[i] = Math.max(r, tr);\n data[i + 1] = Math.max(g, tg);\n data[i + 2] = Math.max(b, tb);\n break;\n case 'overlay':\n data[i] =\n tr < 128\n ? (2 * r * tr) / 255\n : 255 - (2 * (255 - r) * (255 - tr)) / 255;\n data[i + 1] =\n tg < 128\n ? (2 * g * tg) / 255\n : 255 - (2 * (255 - g) * (255 - tg)) / 255;\n data[i + 2] =\n tb < 128\n ? (2 * b * tb) / 255\n : 255 - (2 * (255 - b) * (255 - tb)) / 255;\n break;\n case 'exclusion':\n data[i] = tr + r - (2 * tr * r) / 255;\n data[i + 1] = tg + g - (2 * tg * g) / 255;\n data[i + 2] = tb + b - (2 * tb * b) / 255;\n break;\n case 'tint':\n data[i] = tr + r * alpha1;\n data[i + 1] = tg + g * alpha1;\n data[i + 2] = tb + b * alpha1;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const source = new Color(this.color).getSource();\n source[0] = (this.alpha * source[0]) / 255;\n source[1] = (this.alpha * source[1]) / 255;\n source[2] = (this.alpha * source[2]) / 255;\n source[3] = this.alpha;\n gl.uniform4fv(uniformLocations.uColor, source);\n }\n}\n\nclassRegistry.setClass(BlendColor);\n","import type { TBlendImageMode } from '../BlendImage';\n\nexport const fragmentSource: Record = {\n multiply: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform sampler2D uImage;\n uniform vec4 uColor;\n varying vec2 vTexCoord;\n varying vec2 vTexCoord2;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n vec4 color2 = texture2D(uImage, vTexCoord2);\n color.rgba *= color2.rgba;\n gl_FragColor = color;\n }\n `,\n mask: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform sampler2D uImage;\n uniform vec4 uColor;\n varying vec2 vTexCoord;\n varying vec2 vTexCoord2;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n vec4 color2 = texture2D(uImage, vTexCoord2);\n color.a = color2.a;\n gl_FragColor = color;\n }\n `,\n} as const;\n\nexport const vertexSource = `\n attribute vec2 aPosition;\n varying vec2 vTexCoord;\n varying vec2 vTexCoord2;\n uniform mat3 uTransformMatrix;\n void main() {\n vTexCoord = aPosition;\n vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\n gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n }\n ` as const;\n","import { FabricImage } from '../shapes/Image';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { BaseFilter } from './BaseFilter';\nimport type {\n T2DPipelineState,\n TWebGLPipelineState,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport type { WebGLFilterBackend } from './WebGLFilterBackend';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource, vertexSource } from './shaders/blendImage';\n\nexport type TBlendImageMode = 'multiply' | 'mask';\n\ntype BlendImageOwnProps = {\n mode: TBlendImageMode;\n alpha: number;\n};\n\nexport const blendImageDefaultValues: BlendImageOwnProps = {\n mode: 'multiply',\n alpha: 1,\n};\n\n/**\n * Image Blend filter class\n * @example\n * const filter = new filters.BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * const filter = new BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply'\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class BlendImage extends BaseFilter<'BlendImage', BlendImageOwnProps> {\n /**\n * Image to make the blend operation with.\n **/\n declare image: FabricImage;\n\n /**\n * Blend mode for the filter: either 'multiply' or 'mask'. 'multiply' will\n * multiply the values of each channel (R, G, B, and A) of the filter image by\n * their corresponding values in the base image. 'mask' will only look at the\n * alpha channel of the filter image, and apply those values to the base\n * image's alpha channel.\n * @type String\n * @default\n **/\n declare mode: BlendImageOwnProps['mode'];\n\n /**\n * alpha value. represent the strength of the blend image operation.\n * not implemented.\n **/\n declare alpha: BlendImageOwnProps['alpha'];\n\n static type = 'BlendImage';\n\n static defaults = blendImageDefaultValues;\n\n static uniformLocations = ['uTransformMatrix', 'uImage'];\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n getFragmentSource(): string {\n return fragmentSource[this.mode];\n }\n\n getVertexSource(): string {\n return vertexSource;\n }\n\n applyToWebGL(options: TWebGLPipelineState) {\n const gl = options.context,\n texture = this.createTexture(options.filterBackend, this.image);\n this.bindAdditionalTexture(gl, texture!, gl.TEXTURE1);\n super.applyToWebGL(options);\n this.unbindAdditionalTexture(gl, gl.TEXTURE1);\n }\n\n createTexture(backend: WebGLFilterBackend, image: FabricImage) {\n return backend.getCachedTexture(image.cacheKey, image.getElement());\n }\n\n /**\n * Calculate a transformMatrix to adapt the image to blend over\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n calculateMatrix() {\n const image = this.image,\n { width, height } = image.getElement();\n return [\n 1 / image.scaleX,\n 0,\n 0,\n 0,\n 1 / image.scaleY,\n 0,\n -image.left / width,\n -image.top / height,\n 1,\n ];\n }\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({\n imageData: { data, width, height },\n filterBackend: { resources },\n }: T2DPipelineState) {\n const image = this.image;\n if (!resources.blendImage) {\n resources.blendImage = createCanvasElement();\n }\n const canvas1 = resources.blendImage;\n const context = canvas1.getContext('2d')!;\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas1.width = width;\n canvas1.height = height;\n } else {\n context.clearRect(0, 0, width, height);\n }\n context.setTransform(\n image.scaleX,\n 0,\n 0,\n image.scaleY,\n image.left,\n image.top,\n );\n context.drawImage(image.getElement(), 0, 0, width, height);\n const blendData = context.getImageData(0, 0, width, height).data;\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n const a = data[i + 3];\n\n const tr = blendData[i];\n const tg = blendData[i + 1];\n const tb = blendData[i + 2];\n const ta = blendData[i + 3];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = (r * tr) / 255;\n data[i + 1] = (g * tg) / 255;\n data[i + 2] = (b * tb) / 255;\n data[i + 3] = (a * ta) / 255;\n break;\n case 'mask':\n data[i + 3] = ta;\n break;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const matrix = this.calculateMatrix();\n gl.uniform1i(uniformLocations.uImage, 1); // texture unit 1.\n gl.uniformMatrix3fv(uniformLocations.uTransformMatrix, false, matrix);\n }\n\n /**\n * Returns object representation of an instance\n * TODO: Handle the possibility of missing image better.\n * As of now a BlendImage filter without image can't be used with fromObject\n * @return {Object} Object representation of an instance\n */\n toObject(): {\n type: 'BlendImage';\n image: ReturnType;\n } & BlendImageOwnProps {\n return {\n ...super.toObject(),\n image: this.image && this.image.toObject(),\n };\n }\n\n /**\n * Create filter instance from an object representation\n * @static\n * @param {object} object Object to create an instance from\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting image loading, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static async fromObject(\n { type, image, ...filterOptions }: Record,\n options: { signal: AbortSignal },\n ): Promise> {\n return FabricImage.fromObject(image, options).then(\n (enlivedImage) =>\n new this({ ...filterOptions, image: enlivedImage }) as BlendImage,\n );\n }\n}\n\nclassRegistry.setClass(BlendImage);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec2 uDelta;\n varying vec2 vTexCoord;\n const float nSamples = 15.0;\n vec3 v3offset = vec3(12.9898, 78.233, 151.7182);\n float random(vec3 scale) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\n }\n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n float offset = random(v3offset);\n for (float t = -nSamples; t <= nSamples; t++) {\n float percent = (t + offset - 0.5) / nSamples;\n float weight = 1.0 - abs(percent);\n color += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;\n total += weight;\n }\n gl_FragColor = color / total;\n }\n ` as const;\n","import { createCanvasElement } from '../util/misc/dom';\nimport { BaseFilter } from './BaseFilter';\nimport type {\n TWebGLPipelineState,\n T2DPipelineState,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/blur';\n\ntype BlurOwnProps = {\n blur: number;\n};\n\nexport const blurDefaultValues: BlurOwnProps = {\n blur: 0,\n};\n\n/**\n * Blur filter class\n * @example\n * const filter = new Blur({\n * blur: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class Blur extends BaseFilter<'Blur', BlurOwnProps> {\n /**\n * blur value, in percentage of image dimensions.\n * specific to keep the image blur constant at different resolutions\n * range between 0 and 1.\n * @type Number\n * @default\n */\n declare blur: BlurOwnProps['blur'];\n\n declare horizontal: boolean;\n declare aspectRatio: number;\n\n static type = 'Blur';\n\n static defaults = blurDefaultValues;\n\n static uniformLocations = ['uDelta'];\n\n getFragmentSource(): string {\n return fragmentSource;\n }\n\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n // this aspectRatio is used to give the same blur to vertical and horizontal\n this.aspectRatio = options.sourceWidth / options.sourceHeight;\n options.passes++;\n this._setupFrameBuffer(options);\n this.horizontal = true;\n this.applyToWebGL(options);\n this._swapTextures(options);\n this._setupFrameBuffer(options);\n this.horizontal = false;\n this.applyToWebGL(options);\n this._swapTextures(options);\n } else {\n this.applyTo2d(options);\n }\n }\n\n applyTo2d(options: T2DPipelineState) {\n options.imageData = this.simpleBlur(options);\n }\n\n simpleBlur({\n ctx,\n imageData,\n filterBackend: { resources },\n }: T2DPipelineState) {\n const { width, height } = imageData;\n if (!resources.blurLayer1) {\n resources.blurLayer1 = createCanvasElement();\n resources.blurLayer2 = createCanvasElement();\n }\n const canvas1 = resources.blurLayer1!;\n const canvas2 = resources.blurLayer2!;\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas2.width = canvas1.width = width;\n canvas2.height = canvas1.height = height;\n }\n const ctx1 = canvas1.getContext('2d')!,\n ctx2 = canvas2.getContext('2d')!,\n nSamples = 15,\n blur = this.blur * 0.06 * 0.5;\n let random, percent, j, i;\n\n // load first canvas\n ctx1.putImageData(imageData, 0, 0);\n ctx2.clearRect(0, 0, width, height);\n\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * width + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, j, random);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * height + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, random, j);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n ctx.drawImage(canvas1, 0, 0);\n const newImageData = ctx.getImageData(0, 0, canvas1.width, canvas1.height);\n ctx1.globalAlpha = 1;\n ctx1.clearRect(0, 0, canvas1.width, canvas1.height);\n return newImageData;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const delta = this.chooseRightDelta();\n gl.uniform2fv(uniformLocations.uDelta, delta);\n }\n\n isNeutralState() {\n return this.blur === 0;\n }\n\n /**\n * choose right value of image percentage to blur with\n * @returns {Array} a numeric array with delta values\n */\n chooseRightDelta() {\n let blurScale = 1;\n const delta = [0, 0];\n if (this.horizontal) {\n if (this.aspectRatio > 1) {\n // image is wide, i want to shrink radius horizontal\n blurScale = 1 / this.aspectRatio;\n }\n } else {\n if (this.aspectRatio < 1) {\n // image is tall, i want to shrink radius vertical\n blurScale = this.aspectRatio;\n }\n }\n const blur = blurScale * this.blur * 0.12;\n if (this.horizontal) {\n delta[0] = blur;\n } else {\n delta[1] = blur;\n }\n return delta;\n }\n}\n\nclassRegistry.setClass(Blur);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uBrightness;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n color.rgb += uBrightness;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/brightness';\n\ntype BrightnessOwnProps = {\n brightness: number;\n};\n\nexport const brightnessDefaultValues: BrightnessOwnProps = {\n brightness: 0,\n};\n\n/**\n * Brightness filter class\n * @example\n * const filter = new Brightness({\n * brightness: 0.05\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Brightness extends BaseFilter<'Brightness', BrightnessOwnProps> {\n /**\n * Brightness value, from -1 to 1.\n * translated to -255 to 255 for 2d\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Number} brightness\n * @default\n */\n declare brightness: BrightnessOwnProps['brightness'];\n\n static type = 'Brightness';\n\n static defaults = brightnessDefaultValues;\n\n static uniformLocations = ['uBrightness'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const brightness = Math.round(this.brightness * 255);\n for (let i = 0; i < data.length; i += 4) {\n data[i] = data[i] + brightness;\n data[i + 1] = data[i + 1] + brightness;\n data[i + 2] = data[i + 2] + brightness;\n }\n }\n\n isNeutralState() {\n return this.brightness === 0;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uBrightness, this.brightness);\n }\n}\n\nclassRegistry.setClass(Brightness);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n varying vec2 vTexCoord;\n uniform mat4 uColorMatrix;\n uniform vec4 uConstants;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n color *= uColorMatrix;\n color += uConstants;\n gl_FragColor = color;\n }`;\n","import { BaseFilter } from './BaseFilter';\nimport type {\n T2DPipelineState,\n TMatColorMatrix,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/colorMatrix';\n\ntype ColorMatrixOwnProps = {\n matrix: TMatColorMatrix;\n colorsOnly: boolean;\n};\n\nexport const colorMatrixDefaultValues: ColorMatrixOwnProps = {\n matrix: [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],\n colorsOnly: true,\n};\n\n/**\n * Color Matrix filter class\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @see {@Link http://phoboslab.org/log/2013/11/fast-image-filters-with-webgl demo}\n * @example Kodachrome filter\n * const filter = new ColorMatrix({\n * matrix: [\n 1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,\n -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,\n -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,\n 0, 0, 0, 1, 0\n ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class ColorMatrix<\n Name extends string = 'ColorMatrix',\n OwnProps extends object = ColorMatrixOwnProps,\n> extends BaseFilter {\n /**\n * Colormatrix for pixels.\n * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning\n * outside the -1, 1 range.\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Array} matrix array of 20 numbers.\n * @default\n */\n declare matrix: ColorMatrixOwnProps['matrix'];\n\n /**\n * Lock the colormatrix on the color part, skipping alpha, mainly for non webgl scenario\n * to save some calculation\n * @type Boolean\n * @default true\n */\n declare colorsOnly: ColorMatrixOwnProps['colorsOnly'];\n\n static type = 'ColorMatrix';\n\n static defaults = colorMatrixDefaultValues;\n\n static uniformLocations = ['uColorMatrix', 'uConstants'];\n\n getFragmentSource(): string {\n return fragmentSource;\n }\n\n /**\n * Apply the ColorMatrix operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d(options: T2DPipelineState) {\n const imageData = options.imageData,\n data = imageData.data,\n m = this.matrix,\n colorsOnly = this.colorsOnly;\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n if (colorsOnly) {\n data[i] = r * m[0] + g * m[1] + b * m[2] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + m[9] * 255;\n data[i + 2] = r * m[10] + g * m[11] + b * m[12] + m[14] * 255;\n } else {\n const a = data[i + 3];\n data[i] = r * m[0] + g * m[1] + b * m[2] + a * m[3] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + a * m[8] + m[9] * 255;\n data[i + 2] =\n r * m[10] + g * m[11] + b * m[12] + a * m[13] + m[14] * 255;\n data[i + 3] =\n r * m[15] + g * m[16] + b * m[17] + a * m[18] + m[19] * 255;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const m = this.matrix,\n matrix = [\n m[0],\n m[1],\n m[2],\n m[3],\n m[5],\n m[6],\n m[7],\n m[8],\n m[10],\n m[11],\n m[12],\n m[13],\n m[15],\n m[16],\n m[17],\n m[18],\n ],\n constants = [m[4], m[9], m[14], m[19]];\n gl.uniformMatrix4fv(uniformLocations.uColorMatrix, false, matrix);\n gl.uniform4fv(uniformLocations.uConstants, constants);\n }\n\n toObject() {\n return {\n ...super.toObject(),\n matrix: [...this.matrix] as TMatColorMatrix,\n };\n }\n}\n\nclassRegistry.setClass(ColorMatrix);\n","import { ColorMatrix } from './ColorMatrix';\nimport { classRegistry } from '../ClassRegistry';\nimport type { TMatColorMatrix } from './typedefs';\n\ntype FixedFiltersOwnProps = {\n colorsOnly: boolean;\n};\n\nexport function createColorMatrixFilter(key: string, matrix: TMatColorMatrix) {\n const newClass = class extends ColorMatrix {\n static type = key;\n\n static defaults = {\n colorsOnly: false,\n matrix,\n };\n\n //@ts-expect-error TS wants matrix to be exported.\n toObject(): { type: string } & FixedFiltersOwnProps {\n return { type: this.type, colorsOnly: this.colorsOnly };\n }\n };\n classRegistry.setClass(newClass, key);\n return newClass as typeof ColorMatrix;\n}\n\nexport const Brownie = createColorMatrixFilter(\n 'Brownie',\n [\n 0.5997, 0.34553, -0.27082, 0, 0.186, -0.0377, 0.86095, 0.15059, 0, -0.1449,\n 0.24113, -0.07441, 0.44972, 0, -0.02965, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Vintage = createColorMatrixFilter(\n 'Vintage',\n [\n 0.62793, 0.32021, -0.03965, 0, 0.03784, 0.02578, 0.64411, 0.03259, 0,\n 0.02926, 0.0466, -0.08512, 0.52416, 0, 0.02023, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Kodachrome = createColorMatrixFilter(\n 'Kodachrome',\n [\n 1.12855, -0.39673, -0.03992, 0, 0.24991, -0.16404, 1.08352, -0.05498, 0,\n 0.09698, -0.16786, -0.56034, 1.60148, 0, 0.13972, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Technicolor = createColorMatrixFilter(\n 'Technicolor',\n [\n 1.91252, -0.85453, -0.09155, 0, 0.04624, -0.30878, 1.76589, -0.10601, 0,\n -0.27589, -0.2311, -0.75018, 1.84759, 0, 0.12137, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Polaroid = createColorMatrixFilter(\n 'Polaroid',\n [\n 1.438, -0.062, -0.062, 0, 0, -0.122, 1.378, -0.122, 0, 0, -0.016, -0.016,\n 1.483, 0, 0, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Sepia = createColorMatrixFilter(\n 'Sepia',\n [\n 0.393, 0.769, 0.189, 0, 0, 0.349, 0.686, 0.168, 0, 0, 0.272, 0.534, 0.131,\n 0, 0, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const BlackWhite = createColorMatrixFilter(\n 'BlackWhite',\n [\n 1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 0, 0, 0,\n 1, 0,\n ],\n);\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLPipelineState } from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport { classRegistry } from '../ClassRegistry';\n\ntype ComposedOwnProps = {\n subFilters: BaseFilter[];\n};\n\n/**\n * A container class that knows how to apply a sequence of filters to an input image.\n */\nexport class Composed extends BaseFilter<'Composed', ComposedOwnProps> {\n /**\n * A non sparse array of filters to apply\n */\n declare subFilters: ComposedOwnProps['subFilters'];\n\n static type = 'Composed';\n\n constructor(\n options: { subFilters?: BaseFilter[] } & Record<\n string,\n any\n > = {},\n ) {\n super(options);\n this.subFilters = options.subFilters || [];\n }\n\n /**\n * Apply this container's filters to the input image provided.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be applied.\n */\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n options.passes += this.subFilters.length - 1;\n }\n this.subFilters.forEach((filter) => {\n filter.applyTo(options);\n });\n }\n\n /**\n * Serialize this filter into JSON.\n * @returns {Object} A JSON representation of this filter.\n */\n //@ts-expect-error TS doesn't like this toObject\n toObject(): {\n type: 'Composed';\n subFilters: ReturnType['toObject']>[];\n } {\n return {\n type: this.type,\n subFilters: this.subFilters.map((filter) => filter.toObject()),\n };\n }\n\n isNeutralState() {\n return !this.subFilters.some((filter) => !filter.isNeutralState());\n }\n\n /**\n * Deserialize a JSON definition of a ComposedFilter into a concrete instance.\n * @static\n * @param {oject} object Object to create an instance from\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting `BlendImage` filter loading, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static fromObject(\n object: Record,\n options: { signal: AbortSignal },\n ): Promise {\n return Promise.all(\n ((object.subFilters || []) as BaseFilter[]).map(\n (filter) =>\n classRegistry\n .getClass(filter.type)\n .fromObject(filter, options),\n ),\n ).then(\n (enlivedFilters) => new this({ subFilters: enlivedFilters }) as Composed,\n );\n }\n}\n\nclassRegistry.setClass(Composed);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uContrast;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\n color.rgb = contrastF * (color.rgb - 0.5) + 0.5;\n gl_FragColor = color;\n }`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/constrast';\n\ntype ContrastOwnProps = {\n contrast: number;\n};\n\nexport const contrastDefaultValues: ContrastOwnProps = {\n contrast: 0,\n};\n\n/**\n * Contrast filter class\n * @example\n * const filter = new Contrast({\n * contrast: 0.25\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Contrast extends BaseFilter<'Contrast', ContrastOwnProps> {\n /**\n * contrast value, range from -1 to 1.\n * @param {Number} contrast\n * @default 0\n */\n declare contrast: ContrastOwnProps['contrast'];\n\n static type = 'Contrast';\n\n static defaults = contrastDefaultValues;\n\n static uniformLocations = ['uContrast'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n isNeutralState() {\n return this.contrast === 0;\n }\n\n /**\n * Apply the Contrast operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const contrast = Math.floor(this.contrast * 255),\n contrastF = (259 * (contrast + 255)) / (255 * (259 - contrast));\n\n for (let i = 0; i < data.length; i += 4) {\n data[i] = contrastF * (data[i] - 128) + 128;\n data[i + 1] = contrastF * (data[i + 1] - 128) + 128;\n data[i + 2] = contrastF * (data[i + 2] - 128) + 128;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uContrast, this.contrast);\n }\n}\n\nclassRegistry.setClass(Contrast);\n","export const fragmentSource = {\n Convolute_3_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[9];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 3.0; h+=1.0) {\n for (float w = 0.0; w < 3.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_3_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[9];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 3.0; h+=1.0) {\n for (float w = 0.0; w < 3.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n Convolute_5_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[25];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 5.0; h+=1.0) {\n for (float w = 0.0; w < 5.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_5_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[25];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 5.0; h+=1.0) {\n for (float w = 0.0; w < 5.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n Convolute_7_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[49];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 7.0; h+=1.0) {\n for (float w = 0.0; w < 7.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_7_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[49];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 7.0; h+=1.0) {\n for (float w = 0.0; w < 7.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n Convolute_9_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[81];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 9.0; h+=1.0) {\n for (float w = 0.0; w < 9.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_9_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[81];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 9.0; h+=1.0) {\n for (float w = 0.0; w < 9.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n};\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/convolute';\n\nexport type ConvoluteOwnProps = {\n opaque: boolean;\n matrix: number[];\n};\n\nexport const convoluteDefaultValues: ConvoluteOwnProps = {\n opaque: false,\n matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0],\n};\n\n/**\n * Adapted from html5rocks article\n * @example Sharpen filter\n * const filter = new Convolute({\n * matrix: [ 0, -1, 0,\n * -1, 5, -1,\n * 0, -1, 0 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Blur filter\n * const filter = new Convolute({\n * matrix: [ 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter\n * const filter = new Convolute({\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter with opaqueness\n * const filter = new Convolute({\n * opaque: true,\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class Convolute extends BaseFilter<'Convolute', ConvoluteOwnProps> {\n /*\n * Opaque value (true/false)\n */\n declare opaque: ConvoluteOwnProps['opaque'];\n\n /*\n * matrix for the filter, max 9x9\n */\n declare matrix: ConvoluteOwnProps['matrix'];\n\n static type = 'Convolute';\n\n static defaults = convoluteDefaultValues;\n\n static uniformLocations = ['uMatrix', 'uOpaque', 'uHalfSize', 'uSize'];\n\n getCacheKey() {\n return `${this.type}_${Math.sqrt(this.matrix.length)}_${\n this.opaque ? 1 : 0\n }` as keyof typeof fragmentSource;\n }\n\n getFragmentSource() {\n return fragmentSource[this.getCacheKey()];\n }\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d(options: T2DPipelineState) {\n const imageData = options.imageData,\n data = imageData.data,\n weights = this.matrix,\n side = Math.round(Math.sqrt(weights.length)),\n halfSide = Math.floor(side / 2),\n sw = imageData.width,\n sh = imageData.height,\n output = options.ctx.createImageData(sw, sh),\n dst = output.data,\n // go through the destination image pixels\n alphaFac = this.opaque ? 1 : 0;\n let r, g, b, a, dstOff, scx, scy, srcOff, wt, x, y, cx, cy;\n\n for (y = 0; y < sh; y++) {\n for (x = 0; x < sw; x++) {\n dstOff = (y * sw + x) * 4;\n // calculate the weighed sum of the source image pixels that\n // fall under the convolution matrix\n r = 0;\n g = 0;\n b = 0;\n a = 0;\n\n for (cy = 0; cy < side; cy++) {\n for (cx = 0; cx < side; cx++) {\n scy = y + cy - halfSide;\n scx = x + cx - halfSide;\n\n // eslint-disable-next-line max-depth\n if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {\n continue;\n }\n\n srcOff = (scy * sw + scx) * 4;\n wt = weights[cy * side + cx];\n\n r += data[srcOff] * wt;\n g += data[srcOff + 1] * wt;\n b += data[srcOff + 2] * wt;\n // eslint-disable-next-line max-depth\n if (!alphaFac) {\n a += data[srcOff + 3] * wt;\n }\n }\n }\n dst[dstOff] = r;\n dst[dstOff + 1] = g;\n dst[dstOff + 2] = b;\n if (!alphaFac) {\n dst[dstOff + 3] = a;\n } else {\n dst[dstOff + 3] = data[dstOff + 3];\n }\n }\n }\n options.imageData = output;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1fv(uniformLocations.uMatrix, this.matrix);\n }\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject() {\n return {\n ...super.toObject(),\n opaque: this.opaque,\n matrix: [...this.matrix],\n };\n }\n}\n\nclassRegistry.setClass(Convolute);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec3 uGamma;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n vec3 correction = (1.0 / uGamma);\n color.r = pow(color.r, correction.r);\n color.g = pow(color.g, correction.g);\n color.b = pow(color.b, correction.b);\n gl_FragColor = color;\n gl_FragColor.rgb *= color.a;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/gamma';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\n\nconst GAMMA = 'Gamma' as const;\n\nexport type GammaInput = [number, number, number];\n\nexport type GammaOwnProps = {\n gamma: GammaInput;\n};\n\nexport const gammaDefaultValues: GammaOwnProps = {\n gamma: [1, 1, 1],\n};\n\n/**\n * Gamma filter class\n * @example\n * const filter = new Gamma({\n * gamma: [1, 0.5, 2.1]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Gamma extends BaseFilter {\n /**\n * Gamma array value, from 0.01 to 2.2.\n * @param {Array} gamma\n * @default\n */\n declare gamma: GammaOwnProps['gamma'];\n declare rgbValues?: {\n r: Uint8Array;\n g: Uint8Array;\n b: Uint8Array;\n };\n\n static type = GAMMA;\n\n static defaults = gammaDefaultValues;\n\n static uniformLocations = ['uGamma'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n constructor(options: { gamma?: GammaInput } = {}) {\n super(options);\n this.gamma =\n options.gamma ||\n ((\n this.constructor as typeof Gamma\n ).defaults.gamma.concat() as GammaInput);\n }\n\n /**\n * Apply the Gamma operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const gamma = this.gamma,\n rInv = 1 / gamma[0],\n gInv = 1 / gamma[1],\n bInv = 1 / gamma[2];\n\n if (!this.rgbValues) {\n this.rgbValues = {\n r: new Uint8Array(256),\n g: new Uint8Array(256),\n b: new Uint8Array(256),\n };\n }\n\n // This is an optimization - pre-compute a look-up table for each color channel\n // instead of performing these pow calls for each pixel in the image.\n const rgb = this.rgbValues;\n for (let i = 0; i < 256; i++) {\n rgb.r[i] = Math.pow(i / 255, rInv) * 255;\n rgb.g[i] = Math.pow(i / 255, gInv) * 255;\n rgb.b[i] = Math.pow(i / 255, bInv) * 255;\n }\n for (let i = 0; i < data.length; i += 4) {\n data[i] = rgb.r[data[i]];\n data[i + 1] = rgb.g[data[i + 1]];\n data[i + 2] = rgb.b[data[i + 2]];\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform3fv(uniformLocations.uGamma, this.gamma);\n }\n\n isNeutralState() {\n const { gamma } = this;\n return gamma[0] === 1 && gamma[1] === 1 && gamma[2] === 1;\n }\n\n toObject(): { type: typeof GAMMA; gamma: GammaInput } {\n return {\n type: GAMMA,\n gamma: this.gamma.concat() as GammaInput,\n };\n }\n}\n\nclassRegistry.setClass(Gamma);\n","import type { TGrayscaleMode } from '../Grayscale';\n\nexport const fragmentSource: Record = {\n average: `\n precision highp float;\n uniform sampler2D uTexture;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float average = (color.r + color.b + color.g) / 3.0;\n gl_FragColor = vec4(average, average, average, color.a);\n }\n `,\n lightness: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform int uMode;\n varying vec2 vTexCoord;\n void main() {\n vec4 col = texture2D(uTexture, vTexCoord);\n float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\n gl_FragColor = vec4(average, average, average, col.a);\n }\n `,\n luminosity: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform int uMode;\n varying vec2 vTexCoord;\n void main() {\n vec4 col = texture2D(uTexture, vTexCoord);\n float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\n gl_FragColor = vec4(average, average, average, col.a);\n }\n `,\n};\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/grayscale';\n\nexport type TGrayscaleMode = 'average' | 'lightness' | 'luminosity';\n\ntype GrayscaleOwnProps = {\n mode: TGrayscaleMode;\n};\n\nexport const grayscaleDefaultValues: GrayscaleOwnProps = {\n mode: 'average',\n};\n\n/**\n * Grayscale image filter class\n * @example\n * const filter = new Grayscale();\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Grayscale extends BaseFilter<'Grayscale', GrayscaleOwnProps> {\n declare mode: TGrayscaleMode;\n\n static type = 'Grayscale';\n\n static defaults = grayscaleDefaultValues;\n\n static uniformLocations = ['uMode'];\n\n /**\n * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n for (let i = 0, value: number; i < data.length; i += 4) {\n switch (this.mode) {\n case 'average':\n value = (data[i] + data[i + 1] + data[i + 2]) / 3;\n break;\n case 'lightness':\n value =\n (Math.min(data[i], data[i + 1], data[i + 2]) +\n Math.max(data[i], data[i + 1], data[i + 2])) /\n 2;\n break;\n case 'luminosity':\n value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];\n break;\n }\n\n data[i] = value;\n data[i + 1] = value;\n data[i + 2] = value;\n }\n }\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n getFragmentSource() {\n return fragmentSource[this.mode];\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const mode = 1;\n gl.uniform1i(uniformLocations.uMode, mode);\n }\n\n /**\n * Grayscale filter isNeutralState implementation\n * The filter is never neutral\n * on the image\n **/\n isNeutralState() {\n return false;\n }\n}\n\nclassRegistry.setClass(Grayscale);\n","import { cos } from '../util/misc/cos';\nimport { sin } from '../util/misc/sin';\nimport { ColorMatrix } from './ColorMatrix';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\n\nexport type HueRotationOwnProps = {\n rotation: number;\n};\n\nexport const hueRotationDefaultValues: HueRotationOwnProps = {\n rotation: 0,\n};\n\n/**\n * HueRotation filter class\n * @example\n * const filter = new HueRotation({\n * rotation: -0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class HueRotation extends ColorMatrix<\n 'HueRotation',\n HueRotationOwnProps\n> {\n /**\n * HueRotation value, from -1 to 1.\n */\n declare rotation: HueRotationOwnProps['rotation'];\n\n static type = 'HueRotation';\n\n static defaults = hueRotationDefaultValues;\n\n calculateMatrix() {\n const rad = this.rotation * Math.PI,\n cosine = cos(rad),\n sine = sin(rad),\n aThird = 1 / 3,\n aThirdSqtSin = Math.sqrt(aThird) * sine,\n OneMinusCos = 1 - cosine;\n this.matrix = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n this.matrix[0] = cosine + OneMinusCos / 3;\n this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[6] = cosine + aThird * OneMinusCos;\n this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[12] = cosine + aThird * OneMinusCos;\n }\n\n isNeutralState() {\n return this.rotation === 0;\n }\n\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n this.calculateMatrix();\n super.applyTo(options);\n }\n\n //@ts-expect-error TS and classes with different methods\n toObject(): { type: 'HueRotation'; rotation: number } {\n return {\n type: this.type,\n rotation: this.rotation,\n };\n }\n}\n\nclassRegistry.setClass(HueRotation);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform int uInvert;\n uniform int uAlpha;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n if (uInvert == 1) {\n if (uAlpha == 1) {\n gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,1.0 -color.a);\n } else {\n gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\n }\n } else {\n gl_FragColor = color;\n }\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/invert';\n\nexport type InvertOwnProps = {\n alpha: boolean;\n invert: boolean;\n};\n\nexport const invertDefaultValues: InvertOwnProps = {\n alpha: false,\n invert: true,\n};\n\n/**\n * @example\n * const filter = new Invert();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\nexport class Invert extends BaseFilter<'Invert', InvertOwnProps> {\n /**\n * Invert also alpha.\n * @param {Boolean} alpha\n * @default\n **/\n declare alpha: InvertOwnProps['alpha'];\n\n /**\n * Filter invert. if false, does nothing\n * @param {Boolean} invert\n * @default\n */\n declare invert: InvertOwnProps['invert'];\n\n static type = 'Invert';\n\n static defaults = invertDefaultValues;\n\n static uniformLocations = ['uInvert', 'uAlpha'];\n\n /**\n * Apply the Invert operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n for (let i = 0; i < data.length; i += 4) {\n data[i] = 255 - data[i];\n data[i + 1] = 255 - data[i + 1];\n data[i + 2] = 255 - data[i + 2];\n\n if (this.alpha) {\n data[i + 3] = 255 - data[i + 3];\n }\n }\n }\n\n protected getFragmentSource(): string {\n return fragmentSource;\n }\n\n /**\n * Invert filter isNeutralState implementation\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * @param {Object} options\n **/\n isNeutralState() {\n return !this.invert;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1i(uniformLocations.uInvert, Number(this.invert));\n gl.uniform1i(uniformLocations.uAlpha, Number(this.alpha));\n }\n}\n\nclassRegistry.setClass(Invert);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uStepH;\n uniform float uNoise;\n uniform float uSeed;\n varying vec2 vTexCoord;\n float rand(vec2 co, float seed, float vScale) {\n return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\n }\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/noise';\n\nexport type NoiseOwnProps = {\n noise: number;\n};\n\nexport const noiseDefaultValues: NoiseOwnProps = {\n noise: 0,\n};\n\n/**\n * Noise filter class\n * @example\n * const filter = new Noise({\n * noise: 700\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class Noise extends BaseFilter<'Noise', NoiseOwnProps> {\n /**\n * Noise value, from\n * @param {Number} noise\n * @default\n */\n declare noise: NoiseOwnProps['noise'];\n\n static type = 'Noise';\n\n static defaults = noiseDefaultValues;\n\n static uniformLocations = ['uNoise', 'uSeed'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const noise = this.noise;\n for (let i = 0; i < data.length; i += 4) {\n const rand = (0.5 - Math.random()) * noise;\n data[i] += rand;\n data[i + 1] += rand;\n data[i + 2] += rand;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uNoise, this.noise / 255);\n gl.uniform1f(uniformLocations.uSeed, Math.random());\n }\n\n isNeutralState() {\n return this.noise === 0;\n }\n}\n\nclassRegistry.setClass(Noise);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uBlocksize;\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n float blockW = uBlocksize * uStepW;\n float blockH = uBlocksize * uStepH;\n int posX = int(vTexCoord.x / blockW);\n int posY = int(vTexCoord.y / blockH);\n float fposX = float(posX);\n float fposY = float(posY);\n vec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\n vec4 color = texture2D(uTexture, squareCoords);\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/pixelate';\n\nexport type PixelateOwnProps = {\n blocksize: number;\n};\n\nexport const pixelateDefaultValues: PixelateOwnProps = {\n blocksize: 4,\n};\n\n/**\n * Pixelate filter class\n * @example\n * const filter = new Pixelate({\n * blocksize: 8\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Pixelate extends BaseFilter<'Pixelate', PixelateOwnProps> {\n declare blocksize: PixelateOwnProps['blocksize'];\n\n static type = 'Pixelate';\n\n static defaults = pixelateDefaultValues;\n\n static uniformLocations = ['uBlocksize'];\n\n /**\n * Apply the Pixelate operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data, width, height } }: T2DPipelineState) {\n for (let i = 0; i < height; i += this.blocksize) {\n for (let j = 0; j < width; j += this.blocksize) {\n const index = i * 4 * width + j * 4;\n const r = data[index];\n const g = data[index + 1];\n const b = data[index + 2];\n const a = data[index + 3];\n\n for (let _i = i; _i < Math.min(i + this.blocksize, height); _i++) {\n for (let _j = j; _j < Math.min(j + this.blocksize, width); _j++) {\n const index = _i * 4 * width + _j * 4;\n data[index] = r;\n data[index + 1] = g;\n data[index + 2] = b;\n data[index + 3] = a;\n }\n }\n }\n }\n }\n\n /**\n * Indicate when the filter is not gonna apply changes to the image\n **/\n isNeutralState() {\n return this.blocksize === 1;\n }\n\n protected getFragmentSource(): string {\n return fragmentSource;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uBlocksize, this.blocksize);\n }\n}\n\nclassRegistry.setClass(Pixelate);\n","export const fragmentShader = `\nprecision highp float;\nuniform sampler2D uTexture;\nuniform vec4 uLow;\nuniform vec4 uHigh;\nvarying vec2 vTexCoord;\nvoid main() {\n gl_FragColor = texture2D(uTexture, vTexCoord);\n if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\n gl_FragColor.a = 0.0;\n }\n}\n`;\n","import { classRegistry } from '../ClassRegistry';\nimport { Color } from '../color/Color';\nimport { BaseFilter } from './BaseFilter';\nimport { fragmentShader } from './shaders/removeColor';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\n\nexport type RemoveColorOwnProps = {\n color: string;\n distance: number;\n useAlpha: boolean;\n};\n\nexport const removeColorDefaultValues: RemoveColorOwnProps = {\n color: '#FFFFFF',\n distance: 0.02,\n useAlpha: false,\n};\n\n/**\n * Remove white filter class\n * @example\n * const filter = new RemoveColor({\n * threshold: 0.2,\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class RemoveColor extends BaseFilter<\n 'RemoveColor',\n RemoveColorOwnProps\n> {\n /**\n * Color to remove, in any format understood by {@link Color}.\n * @param {String} type\n * @default\n */\n declare color: RemoveColorOwnProps['color'];\n\n /**\n * distance to actual color, as value up or down from each r,g,b\n * between 0 and 1\n **/\n declare distance: RemoveColorOwnProps['distance'];\n\n /**\n * For color to remove inside distance, use alpha channel for a smoother deletion\n * NOT IMPLEMENTED YET\n **/\n declare useAlpha: RemoveColorOwnProps['useAlpha'];\n\n static type = 'RemoveColor';\n\n static defaults = removeColorDefaultValues;\n\n static uniformLocations = ['uLow', 'uHigh'];\n\n getFragmentSource() {\n return fragmentShader;\n }\n\n /**\n * Applies filter to canvas element\n * @param {Object} canvasEl Canvas element to apply filter to\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const distance = this.distance * 255,\n source = new Color(this.color).getSource(),\n lowC = [source[0] - distance, source[1] - distance, source[2] - distance],\n highC = [\n source[0] + distance,\n source[1] + distance,\n source[2] + distance,\n ];\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n\n if (\n r > lowC[0] &&\n g > lowC[1] &&\n b > lowC[2] &&\n r < highC[0] &&\n g < highC[1] &&\n b < highC[2]\n ) {\n data[i + 3] = 0;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const source = new Color(this.color).getSource(),\n distance = this.distance,\n lowC = [\n 0 + source[0] / 255 - distance,\n 0 + source[1] / 255 - distance,\n 0 + source[2] / 255 - distance,\n 1,\n ],\n highC = [\n source[0] / 255 + distance,\n source[1] / 255 + distance,\n source[2] / 255 + distance,\n 1,\n ];\n gl.uniform4fv(uniformLocations.uLow, lowC);\n gl.uniform4fv(uniformLocations.uHigh, highC);\n }\n}\n\nclassRegistry.setClass(RemoveColor);\n","import { BaseFilter } from './BaseFilter';\nimport type {\n T2DPipelineState,\n TWebGLPipelineState,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport { classRegistry } from '../ClassRegistry';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type { XY } from '../Point';\n\nexport type TResizeType = 'bilinear' | 'hermite' | 'sliceHack' | 'lanczos';\n\nexport type ResizeOwnProps = {\n resizeType: TResizeType;\n scaleX: number;\n scaleY: number;\n lanczosLobes: number;\n};\n\nexport const resizeDefaultValues: ResizeOwnProps = {\n resizeType: 'hermite',\n scaleX: 1,\n scaleY: 1,\n lanczosLobes: 3,\n};\n\ntype ResizeDuring2DResize = Resize & {\n rcpScaleX: number;\n rcpScaleY: number;\n};\n\ntype ResizeDuringWEBGLResize = Resize & {\n rcpScaleX: number;\n rcpScaleY: number;\n horizontal: boolean;\n width: number;\n height: number;\n taps: number[];\n tempScale: number;\n dH: number;\n dW: number;\n};\n\n/**\n * Resize image filter class\n * @example\n * const filter = new Resize();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\nexport class Resize extends BaseFilter<'Resize', ResizeOwnProps> {\n /**\n * Resize type\n * for webgl resizeType is just lanczos, for canvas2d can be:\n * bilinear, hermite, sliceHack, lanczos.\n * @default\n */\n declare resizeType: ResizeOwnProps['resizeType'];\n\n /**\n * Scale factor for resizing, x axis\n * @param {Number} scaleX\n * @default\n */\n declare scaleX: ResizeOwnProps['scaleX'];\n\n /**\n * Scale factor for resizing, y axis\n * @param {Number} scaleY\n * @default\n */\n declare scaleY: ResizeOwnProps['scaleY'];\n\n /**\n * LanczosLobes parameter for lanczos filter, valid for resizeType lanczos\n * @param {Number} lanczosLobes\n * @default\n */\n declare lanczosLobes: ResizeOwnProps['lanczosLobes'];\n\n static type = 'Resize';\n\n static defaults = resizeDefaultValues;\n\n static uniformLocations = ['uDelta', 'uTaps'];\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n this: ResizeDuringWEBGLResize,\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform2fv(\n uniformLocations.uDelta,\n this.horizontal ? [1 / this.width, 0] : [0, 1 / this.height],\n );\n gl.uniform1fv(uniformLocations.uTaps, this.taps);\n }\n\n getFilterWindow(this: ResizeDuringWEBGLResize) {\n const scale = this.tempScale;\n return Math.ceil(this.lanczosLobes / scale);\n }\n\n getCacheKey(this: ResizeDuringWEBGLResize): string {\n const filterWindow = this.getFilterWindow();\n return `${this.type}_${filterWindow}`;\n }\n\n getFragmentSource(this: ResizeDuringWEBGLResize): string {\n const filterWindow = this.getFilterWindow();\n return this.generateShader(filterWindow);\n }\n\n getTaps(this: ResizeDuringWEBGLResize) {\n const lobeFunction = this.lanczosCreate(this.lanczosLobes),\n scale = this.tempScale,\n filterWindow = this.getFilterWindow(),\n taps = new Array(filterWindow);\n for (let i = 1; i <= filterWindow; i++) {\n taps[i - 1] = lobeFunction(i * scale);\n }\n return taps;\n }\n\n /**\n * Generate vertex and shader sources from the necessary steps numbers\n * @param {Number} filterWindow\n */\n generateShader(filterWindow: number) {\n const offsets = new Array(filterWindow);\n for (let i = 1; i <= filterWindow; i++) {\n offsets[i - 1] = `${i}.0 * uDelta`;\n }\n return `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec2 uDelta;\n varying vec2 vTexCoord;\n uniform float uTaps[${filterWindow}];\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float sum = 1.0;\n ${offsets\n .map(\n (offset, i) => `\n color += texture2D(uTexture, vTexCoord + ${offset}) * uTaps[${i}] + texture2D(uTexture, vTexCoord - ${offset}) * uTaps[${i}];\n sum += 2.0 * uTaps[${i}];\n `,\n )\n .join('\\n')}\n gl_FragColor = color / sum;\n }\n `;\n }\n\n applyToForWebgl(this: ResizeDuringWEBGLResize, options: TWebGLPipelineState) {\n options.passes++;\n this.width = options.sourceWidth;\n this.horizontal = true;\n this.dW = Math.round(this.width * this.scaleX);\n this.dH = options.sourceHeight;\n this.tempScale = this.dW / this.width;\n this.taps = this.getTaps();\n options.destinationWidth = this.dW;\n super.applyTo(options);\n options.sourceWidth = options.destinationWidth;\n\n this.height = options.sourceHeight;\n this.horizontal = false;\n this.dH = Math.round(this.height * this.scaleY);\n this.tempScale = this.dH / this.height;\n this.taps = this.getTaps();\n options.destinationHeight = this.dH;\n super.applyTo(options);\n options.sourceHeight = options.destinationHeight;\n }\n\n /**\n * Apply the resize filter to the image\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n (this as unknown as ResizeDuringWEBGLResize).applyToForWebgl(options);\n } else {\n (this as unknown as ResizeDuring2DResize).applyTo2d(options);\n }\n }\n\n isNeutralState() {\n return this.scaleX === 1 && this.scaleY === 1;\n }\n\n lanczosCreate(lobes: number) {\n return (x: number) => {\n if (x >= lobes || x <= -lobes) {\n return 0.0;\n }\n if (x < 1.1920929e-7 && x > -1.1920929e-7) {\n return 1.0;\n }\n x *= Math.PI;\n const xx = x / lobes;\n return ((Math.sin(x) / x) * Math.sin(xx)) / xx;\n };\n }\n\n applyTo2d(this: ResizeDuring2DResize, options: T2DPipelineState) {\n const imageData = options.imageData,\n scaleX = this.scaleX,\n scaleY = this.scaleY;\n\n this.rcpScaleX = 1 / scaleX;\n this.rcpScaleY = 1 / scaleY;\n\n const oW = imageData.width;\n const oH = imageData.height;\n const dW = Math.round(oW * scaleX);\n const dH = Math.round(oH * scaleY);\n let newData: ImageData;\n\n if (this.resizeType === 'sliceHack') {\n newData = this.sliceByTwo(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'hermite') {\n newData = this.hermiteFastResize(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'bilinear') {\n newData = this.bilinearFiltering(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'lanczos') {\n newData = this.lanczosResize(options, oW, oH, dW, dH);\n } else {\n // this should never trigger, is here just for safety net.\n newData = new ImageData(dW, dH);\n }\n options.imageData = newData;\n }\n\n /**\n * Filter sliceByTwo\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n sliceByTwo(\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ) {\n const imageData = options.imageData;\n const mult = 0.5;\n let doneW = false;\n let doneH = false;\n let stepW = oW * mult;\n let stepH = oH * mult;\n const resources = options.filterBackend.resources;\n let sX = 0;\n let sY = 0;\n const dX = oW;\n let dY = 0;\n if (!resources.sliceByTwo) {\n resources.sliceByTwo = createCanvasElement();\n }\n const tmpCanvas = resources.sliceByTwo;\n if (tmpCanvas.width < oW * 1.5 || tmpCanvas.height < oH) {\n tmpCanvas.width = oW * 1.5;\n tmpCanvas.height = oH;\n }\n const ctx = tmpCanvas.getContext('2d')!;\n ctx.clearRect(0, 0, oW * 1.5, oH);\n ctx.putImageData(imageData, 0, 0);\n\n dW = Math.floor(dW);\n dH = Math.floor(dH);\n\n while (!doneW || !doneH) {\n oW = stepW;\n oH = stepH;\n if (dW < Math.floor(stepW * mult)) {\n stepW = Math.floor(stepW * mult);\n } else {\n stepW = dW;\n doneW = true;\n }\n if (dH < Math.floor(stepH * mult)) {\n stepH = Math.floor(stepH * mult);\n } else {\n stepH = dH;\n doneH = true;\n }\n ctx.drawImage(tmpCanvas, sX, sY, oW, oH, dX, dY, stepW, stepH);\n sX = dX;\n sY = dY;\n dY += stepH;\n }\n return ctx.getImageData(sX, sY, dW, dH);\n }\n\n /**\n * Filter lanczosResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n lanczosResize(\n this: ResizeDuring2DResize,\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ): ImageData {\n function process(u: number): ImageData {\n let v, i, weight, idx, a, red, green, blue, alpha, fX, fY;\n center.x = (u + 0.5) * ratioX;\n icenter.x = Math.floor(center.x);\n for (v = 0; v < dH; v++) {\n center.y = (v + 0.5) * ratioY;\n icenter.y = Math.floor(center.y);\n a = 0;\n red = 0;\n green = 0;\n blue = 0;\n alpha = 0;\n for (i = icenter.x - range2X; i <= icenter.x + range2X; i++) {\n if (i < 0 || i >= oW) {\n continue;\n }\n fX = Math.floor(1000 * Math.abs(i - center.x));\n if (!cacheLanc[fX]) {\n cacheLanc[fX] = {};\n }\n for (let j = icenter.y - range2Y; j <= icenter.y + range2Y; j++) {\n if (j < 0 || j >= oH) {\n continue;\n }\n fY = Math.floor(1000 * Math.abs(j - center.y));\n if (!cacheLanc[fX][fY]) {\n cacheLanc[fX][fY] = lanczos(\n Math.sqrt(\n Math.pow(fX * rcpRatioX, 2) + Math.pow(fY * rcpRatioY, 2),\n ) / 1000,\n );\n }\n weight = cacheLanc[fX][fY];\n if (weight > 0) {\n idx = (j * oW + i) * 4;\n a += weight;\n red += weight * srcData[idx];\n green += weight * srcData[idx + 1];\n blue += weight * srcData[idx + 2];\n alpha += weight * srcData[idx + 3];\n }\n }\n }\n idx = (v * dW + u) * 4;\n destData[idx] = red / a;\n destData[idx + 1] = green / a;\n destData[idx + 2] = blue / a;\n destData[idx + 3] = alpha / a;\n }\n\n if (++u < dW) {\n return process(u);\n } else {\n return destImg;\n }\n }\n\n const srcData = options.imageData.data,\n destImg = options.ctx.createImageData(dW, dH),\n destData = destImg.data,\n lanczos = this.lanczosCreate(this.lanczosLobes),\n ratioX = this.rcpScaleX,\n ratioY = this.rcpScaleY,\n rcpRatioX = 2 / this.rcpScaleX,\n rcpRatioY = 2 / this.rcpScaleY,\n range2X = Math.ceil((ratioX * this.lanczosLobes) / 2),\n range2Y = Math.ceil((ratioY * this.lanczosLobes) / 2),\n cacheLanc: Record> = {},\n center: XY = { x: 0, y: 0 },\n icenter: XY = { x: 0, y: 0 };\n\n return process(0);\n }\n\n /**\n * bilinearFiltering\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n bilinearFiltering(\n this: ResizeDuring2DResize,\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ) {\n let a;\n let b;\n let c;\n let d;\n let x;\n let y;\n let i;\n let j;\n let xDiff;\n let yDiff;\n let chnl;\n let color;\n let offset = 0;\n let origPix;\n const ratioX = this.rcpScaleX;\n const ratioY = this.rcpScaleY;\n const w4 = 4 * (oW - 1);\n const img = options.imageData;\n const pixels = img.data;\n const destImage = options.ctx.createImageData(dW, dH);\n const destPixels = destImage.data;\n for (i = 0; i < dH; i++) {\n for (j = 0; j < dW; j++) {\n x = Math.floor(ratioX * j);\n y = Math.floor(ratioY * i);\n xDiff = ratioX * j - x;\n yDiff = ratioY * i - y;\n origPix = 4 * (y * oW + x);\n\n for (chnl = 0; chnl < 4; chnl++) {\n a = pixels[origPix + chnl];\n b = pixels[origPix + 4 + chnl];\n c = pixels[origPix + w4 + chnl];\n d = pixels[origPix + w4 + 4 + chnl];\n color =\n a * (1 - xDiff) * (1 - yDiff) +\n b * xDiff * (1 - yDiff) +\n c * yDiff * (1 - xDiff) +\n d * xDiff * yDiff;\n destPixels[offset++] = color;\n }\n }\n }\n return destImage;\n }\n\n /**\n * hermiteFastResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n hermiteFastResize(\n this: ResizeDuring2DResize,\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ) {\n const ratioW = this.rcpScaleX,\n ratioH = this.rcpScaleY,\n ratioWHalf = Math.ceil(ratioW / 2),\n ratioHHalf = Math.ceil(ratioH / 2),\n img = options.imageData,\n data = img.data,\n img2 = options.ctx.createImageData(dW, dH),\n data2 = img2.data;\n for (let j = 0; j < dH; j++) {\n for (let i = 0; i < dW; i++) {\n const x2 = (i + j * dW) * 4;\n let weight = 0;\n let weights = 0;\n let weightsAlpha = 0;\n let gxR = 0;\n let gxG = 0;\n let gxB = 0;\n let gxA = 0;\n const centerY = (j + 0.5) * ratioH;\n for (let yy = Math.floor(j * ratioH); yy < (j + 1) * ratioH; yy++) {\n const dy = Math.abs(centerY - (yy + 0.5)) / ratioHHalf,\n centerX = (i + 0.5) * ratioW,\n w0 = dy * dy;\n for (let xx = Math.floor(i * ratioW); xx < (i + 1) * ratioW; xx++) {\n let dx = Math.abs(centerX - (xx + 0.5)) / ratioWHalf;\n const w = Math.sqrt(w0 + dx * dx);\n /* eslint-disable max-depth */\n if (w > 1 && w < -1) {\n continue;\n }\n //hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n if (weight > 0) {\n dx = 4 * (xx + yy * oW);\n //alpha\n gxA += weight * data[dx + 3];\n weightsAlpha += weight;\n //colors\n if (data[dx + 3] < 255) {\n weight = (weight * data[dx + 3]) / 250;\n }\n gxR += weight * data[dx];\n gxG += weight * data[dx + 1];\n gxB += weight * data[dx + 2];\n weights += weight;\n }\n /* eslint-enable max-depth */\n }\n }\n data2[x2] = gxR / weights;\n data2[x2 + 1] = gxG / weights;\n data2[x2 + 2] = gxB / weights;\n data2[x2 + 3] = gxA / weightsAlpha;\n }\n }\n return img2;\n }\n}\n\nclassRegistry.setClass(Resize);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uSaturation;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float rgMax = max(color.r, color.g);\n float rgbMax = max(rgMax, color.b);\n color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\n color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\n color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/saturation';\n\nexport type SaturationOwnProps = {\n saturation: number;\n};\n\nexport const saturationDefaultValues: SaturationOwnProps = {\n saturation: 0,\n};\n\n/**\n * Saturate filter class\n * @example\n * const filter = new Saturation({\n * saturation: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Saturation extends BaseFilter<'Saturation', SaturationOwnProps> {\n /**\n * Saturation value, from -1 to 1.\n * Increases/decreases the color saturation.\n * A value of 0 has no effect.\n *\n * @param {Number} saturation\n * @default\n */\n declare saturation: SaturationOwnProps['saturation'];\n\n static type = 'Saturation';\n\n static defaults = saturationDefaultValues;\n\n static uniformLocations = ['uSaturation'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Saturation operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const adjust = -this.saturation;\n for (let i = 0; i < data.length; i += 4) {\n const max = Math.max(data[i], data[i + 1], data[i + 2]);\n data[i] += max !== data[i] ? (max - data[i]) * adjust : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * adjust : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * adjust : 0;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uSaturation, -this.saturation);\n }\n\n isNeutralState() {\n return this.saturation === 0;\n }\n}\n\nclassRegistry.setClass(Saturation);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uVibrance;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float max = max(color.r, max(color.g, color.b));\n float avg = (color.r + color.g + color.b) / 3.0;\n float amt = (abs(max - avg) * 2.0) * uVibrance;\n color.r += max != color.r ? (max - color.r) * amt : 0.00;\n color.g += max != color.g ? (max - color.g) * amt : 0.00;\n color.b += max != color.b ? (max - color.b) * amt : 0.00;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/vibrance';\n\nexport type VibranceOwnProps = {\n vibrance: number;\n};\n\nexport const vibranceDefaultValues: VibranceOwnProps = {\n vibrance: 0,\n};\n\n/**\n * Vibrance filter class\n * @example\n * const filter = new Vibrance({\n * vibrance: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Vibrance extends BaseFilter<'Vibrance', VibranceOwnProps> {\n /**\n * Vibrance value, from -1 to 1.\n * Increases/decreases the saturation of more muted colors with less effect on saturated colors.\n * A value of 0 has no effect.\n *\n * @param {Number} vibrance\n * @default\n */\n declare vibrance: VibranceOwnProps['vibrance'];\n\n static type = 'Vibrance';\n\n static defaults = vibranceDefaultValues;\n\n static uniformLocations = ['uVibrance'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Vibrance operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const adjust = -this.vibrance;\n for (let i = 0; i < data.length; i += 4) {\n const max = Math.max(data[i], data[i + 1], data[i + 2]);\n const avg = (data[i] + data[i + 1] + data[i + 2]) / 3;\n const amt = ((Math.abs(max - avg) * 2) / 255) * adjust;\n data[i] += max !== data[i] ? (max - data[i]) * amt : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * amt : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * amt : 0;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {TWebGLUniformLocationMap} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uVibrance, -this.vibrance);\n }\n\n isNeutralState() {\n return this.vibrance === 0;\n }\n}\n\nclassRegistry.setClass(Vibrance);\n"],"names":["BaseConfiguration","constructor","_defineProperty","window","devicePixelRatio","Configuration","config","configure","arguments","length","undefined","Object","assign","addFonts","paths","fontPaths","_objectSpread","removeFonts","fontFamilys","forEach","fontFamily","clearFonts","restoreDefaults","keys","defaults","reduce","acc","key","log","severity","_len","optionalParams","Array","_key","console","FabricError","Error","message","options","concat","SignalAbortedError","context","GLProbe","WebGLProbe","testPrecision","gl","precision","fragmentSource","fragmentShader","createShader","FRAGMENT_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","queryWebGL","canvas","getContext","maxTextureSize","getParameter","MAX_TEXTURE_SIZE","GLPrecision","find","getExtension","loseContext","isSupported","textureSize","copyPasteData","getEnv","document","isTouchSupported","navigator","maxTouchPoints","dispose","env","setEnv","value","getBrowserEnv","getFabricDocument","getFabricWindow","getDevicePixelRatio","_config$devicePixelRa","Math","max","Cache","getFontCache","_ref","fontStyle","fontWeight","toLowerCase","charWidthsCache","fontCache","cacheKey","clearFontCache","limitDimsByArea","ar","perfLimitSizeTotal","roughWidth","sqrt","floor","cache","VERSION","version","noop","halfPI","PI","twoMathPi","PiBy180","iMatrix","freeze","DEFAULT_SVG_FONT_SIZE","ALIASING_LIMIT","kRect","CENTER","LEFT","TOP","BOTTOM","RIGHT","NONE","reNewline","MOVING","SCALING","ROTATING","ROTATE","SKEWING","RESIZING","MODIFY_POLY","MODIFY_PATH","CHANGED","SCALE","SCALE_X","SCALE_Y","SKEW_X","SKEW_Y","FILL","STROKE","MODIFIED","JSON","SVG","ClassRegistry","Map","has","classType","getClass","get","setClass","classConstructor","set","type","getSVGClass","SVGTagName","setSVGClass","classRegistry","AnimationRegistry","remove","index","indexOf","splice","cancelAll","animations","animation","abort","cancelByCanvas","filter","_animation$target","target","cancelByTarget","runningAnimations","Observable","on","arg0","handler","__eventListeners","entries","eventName","off","push","once","disposers","_ref2","d","disposer","onceHandler","args","call","_removeEventListener","eventListener","_ref3","fire","_this$__eventListener","listenersForEvent","i","removeFromArray","array","idx","cos","angle","angleSlice","abs","sin","sign","Point","y","x","add","that","addEquals","scalarAdd","scalar","scalarAddEquals","subtract","subtractEquals","scalarSubtract","scalarSubtractEquals","multiply","scalarMultiply","scalarMultiplyEquals","divide","scalarDivide","scalarDivideEquals","eq","lt","lte","gt","gte","lerp","t","min","distanceFrom","dx","dy","midPointFrom","toString","setXY","setX","setY","setFromPoint","swap","clone","rotate","radians","origin","ZERO","sinus","cosinus","p","rotated","transform","ignoreOffset","isCollection","fabricObject","isArray","_objects","createCollectionMixin","Base","Collection","_onObjectAdded","object","_onObjectRemoved","_onStackOrderChanged","objects","size","insertAt","_len2","_key2","removed","_len3","_key3","forEachObject","callback","getObjects","_len4","types","_key4","o","isType","item","isEmpty","contains","deep","includes","some","obj","complexity","memo","current","sendObjectToBack","unshift","bringObjectToFront","sendObjectBackwards","intersecting","newIdx","findNewLowerIndex","bringObjectForward","findNewUpperIndex","moveObjectTo","isOverlapping","collectObjects","left","top","width","height","includeIntersecting","tl","br","selectable","visible","intersectsWithRect","isContainedWithinRect","containsPoint","CommonMethods","_setOptions","prop","_setObject","_set","toggle","property","requestAnimFrame","requestAnimationFrame","cancelAnimFrame","handle","cancelAnimationFrame","id","uid","createCanvasElement","element","createElement","createImage","copyCanvasElement","_newCanvas$getContext","newCanvas","createCanvasElementFor","drawImage","toDataURL","canvasEl","format","quality","isHTMLCanvas","degreesToRadians","degrees","radiansToDegrees","isIdentityMatrix","mat","every","transformPoint","invertTransform","a","r","multiplyTransformMatrices","b","is2x2","multiplyTransformMatrixArray","matrices","reduceRight","product","curr","calcPlaneRotation","atan2","qrDecompose","denom","pow","scaleX","scaleY","skewX","skewY","translateX","translateY","createTranslateMatrix","createRotateMatrix","angleRadiant","cosValue","sinValue","createScaleMatrix","angleToSkew","tan","createSkewXMatrix","skewValue","createSkewYMatrix","calcDimensionsMatrix","flipX","flipY","matrix","composeMatrix","scaleMatrix","loadImage","url","signal","crossOrigin","Promise","resolve","reject","aborted","img","err","src","addEventListener","done","onload","onerror","removeEventListener","enlivenObjects","reviver","instances","all","map","fromObject","then","fabricInstance","catch","error","instance","finally","enlivenObjectEnlivables","serializedObject","promises","values","enlived","pick","source","pickBy","predicate","ColorNameMap","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","reRGBa","reHSLa","reHex","hue2rgb","q","rgb2Hsl","g","maxValue","minValue","h","s","l","round","fromAlphaToFloat","parseFloat","endsWith","hexify","toUpperCase","padStart","greyAverage","avg","Color","color","setSource","_source","_tryParsingColor","sourceFromHex","sourceFromRgb","sourceFromHsl","isUnrecognised","getSource","toRgb","toRgba","join","toHsl","toHsla","toHex","fullHex","toHexa","slice","getAlpha","setAlpha","alpha","toGrayscale","toBlackWhite","threshold","average","bOrW","overlayWith","otherColor","otherAlpha","otherSource","R","G","B","fromRgb","fromRgba","match","parsedValue","fromHsl","fromHsla","match1degrees","parseAngletoDegrees","fromHex","isShortNotation","expandedValue","split","hex","hexCouple","parseInt","lowercase","numeric","toFixed","number","fractionDigits","Number","getSvgAttributes","commonAttributes","parseUnit","fontSize","unit","exec","dpi","DPI","parseAlign","align","parsePreserveAspectRatioAttribute","attribute","firstPart","secondPart","trim","alignX","alignY","meetOrSlice","matrixToSVG","NUM_FRACTION_DIGITS","colorPropToSVG","inlineStyle","colorValue","opacityValue","toLive","opacity","createSVGRect","svgColor","w","isFiller","filler","isSerializableFiller","toObject","isPattern","offsetX","isTextObject","_renderText","isPath","_renderPathCommands","isActiveSelection","getScrollLeftTop","doc","getDocumentFromElement","elementLoop","docElement","documentElement","body","scrollLeft","scrollTop","parentNode","host","nodeType","style","position","el","ownerDocument","getWindowFromElement","_el$ownerDocument","defaultView","setCanvasDimensions","ctx","retinaScaling","setAttribute","scale","setCSSDimensions","getElementOffset","_getWindowFromElement","offset","elemStyle","getComputedStyle","borderLeftWidth","borderTopWidth","paddingLeft","paddingTop","box","docElem","getBoundingClientRect","scrollLeftTop","clientLeft","clientTop","makeElementUnselectable","onselectstart","userSelect","StaticCanvasDOMManager","createLowerCanvas","lower","getElementById","hasAttribute","_originalCanvasStyle","cssText","classList","cleanupDOM","removeAttribute","setDimensions","calcOffset","staticCanvasDefaults","backgroundVpt","backgroundColor","overlayVpt","overlayColor","includeDefaultValues","svgViewportTransformation","renderOnAddRemove","skipOffscreen","enableRetinaScaling","imageSmoothingEnabled","controlsAboveOverlay","allowTouchScrolling","viewportTransform","StaticCanvas","lowerCanvasEl","_this$elements$lower","elements","contextContainer","_this$elements$lower2","getDefaults","ownDefaults","initElements","_setDimensionsImpl","skipControlsDrawing","calcViewportBoundaries","requestRenderAll","setCoords","getRetinaScaling","_offset","getWidth","getHeight","setWidth","setHeight","dimensions","cssOnly","backstoreOnly","hasLostContext","getZoom","setViewportTransform","vpt","zoomToPoint","point","before","newPoint","after","setZoom","absolutePan","relativePan","getElement","clearContext","clearRect","clear","backgroundImage","overlayImage","renderAll","cancelRequestedRender","destroyed","renderCanvas","renderAndReset","nextRenderHandle","disposed","iVpt","vptCoords","tr","bl","drawControls","_ctx","v","path","clipPath","patternQuality","_renderBackground","save","_renderObjects","restore","shouldCache","_transformDone","renderCache","forClipping","drawClipPathOnCanvas","_renderOverlay","__cleanupTask","globalCompositeOperation","zoomX","zoomY","_cacheCanvas","cacheTranslationX","cacheTranslationY","len","render","_renderBackgroundOrOverlay","fill","needsVpt","isAFiller","beginPath","moveTo","lineTo","closePath","fillStyle","offsetY","m","gradientTransform","patternTransform","getCenter","getCenterPoint","centerObjectH","_centerObject","centerObjectV","centerObject","viewportCenterObject","getVpCenter","viewportCenterObjectH","viewportCenterObjectV","center","toDatalessJSON","propertiesToInclude","toDatalessObject","_toObjectMethod","toJSON","methodName","clipPathData","excludeFromExport","_toObject","__serializeBgOverlay","originalValue","data","bgImage","bgColor","background","overlay","toSVG","markup","_setSVGPreamble","_setSVGHeader","clipPathId","_setSVGBgOverlayColor","_setSVGBgOverlayImage","_setSVGObjects","suppressPreamble","encoding","optViewBox","viewBox","createSVGFontFacesMarkup","createSVGRefElementsMarkup","createSVGClipPathMarkup","toClipPathSVG","shouldTransform","additionalTransform","fontList","styles","styleRow","fontListMarkup","_setSVGObject","bgOrOverlay","repeat","finalWidth","finalHeight","shouldInvert","loadFromJSON","json","serialized","parse","enlivedMap","properties","cloneWithoutData","multiplier","finalMultiplier","toCanvasElement","scaledWidth","scaledHeight","zoom","originalWidth","originalHeight","originalSkipControlsDrawing","newZoom","vp","newVp","originalRetina","objectsToRender","task","destroy","kill","touchEvents","getTouchInfo","event","touchProp","changedTouches","getPointer","scroll","_evt","clientX","clientY","isTouchEvent","pointerType","stopEvent","e","preventDefault","stopPropagation","makeBoundingBoxFromPoints","points","removeTransformFromObject","inverted","finalTransform","calcOwnMatrix","applyTransformToObject","addTransformToObject","_qrDecompose","otherOptions","_objectWithoutProperties","_excluded","setPositionByOrigin","resetObjectTransform","saveObjectTransform","sizeAfterTransform","dimX","dimY","bbox","calcPlaneChangeMatrix","from","to","sendPointToPlane","sendVectorToPlane","sendObjectToPlane","fireEvent","_target$canvas","originOffset","bottom","right","resolveOrigin","originValue","NOT_ALLOWED_CURSOR","getActionFromCorner","alreadySelected","corner","control","controls","getActionName","isTransformCentered","originX","originY","invertOrigin","isLocked","lockingKey","commonEventInfo","eventData","pointer","findCornerQuadrant","getTotalAngle","cornerAngle","normalizePoint","getRelativeCenterPoint","translateToGivenOrigin","p2","getLocalPoint","padding","localPoint","dragHandler","newLeft","newTop","moveX","moveY","FabricObjectSVGExportMixin","getSvgStyles","skipShadow","fillRule","strokeWidth","strokeDashArray","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","visibility","getSvgFilter","stroke","shadow","getSvgCommons","getSvgTransform","full","calcTransformMatrix","svgTransform","_toSVG","_reviver","_createBaseSVGMarkup","_createBaseClipPathSVGMarkup","objectMarkup","commonPieces","noStyle","withShadow","styleInfo","shadowInfo","vectorEffect","strokeUniform","absoluteClipPath","absolutePositioned","clipPathMarkup","addPaintOrder","paintFirst","getSvgRegex","arr","RegExp","reNum","String","raw","_templateObject","_taggedTemplateLiteral","svgNS","reFontDeclaration","svgValidTagNames","svgViewBoxElements","svgInvalidAncestors","svgValidParents","attributesMap","cx","cy","display","fSize","cPath","svgValidTagNamesRegEx","svgViewBoxElementsRegEx","svgValidParentsRegEx","reViewBoxAttrValue","unitVectorX","zero","rotateVector","vector","createVector","magnitude","calcAngleBetweenVectors","crossProduct","dotProduct","calcVectorRotation","getUnitVector","getOrthonormalVector","counterClockwise","isBetweenVectors","AxB","AxT","BxT","shadowOffsetRegex","reOffsetsAndBlur","shadowDefaultValues","blur","affectStroke","nonScaling","Shadow","parseShadow","shadowStr","replace","BLUR_BOX","fBoxX","fBoxY","capValue","stateProperties","cacheProperties","fabricObjectDefaultValues","minScaleLimit","objectCaching","centeredRotation","centeredScaling","dirty","interactiveObjectDefaultValues","noScaleCache","lockMovementX","lockMovementY","lockRotation","lockScalingX","lockScalingY","lockSkewingX","lockSkewingY","lockScalingFlip","cornerSize","touchCornerSize","transparentCorners","cornerColor","cornerStrokeColor","cornerStyle","cornerDashArray","hasControls","borderColor","borderDashArray","borderOpacityWhenMoving","borderScaleFactor","hasBorders","selectionBackgroundColor","evented","perPixelTargetFind","activeOn","hoverCursor","moveCursor","normalize","c","asin","elastic","defaultEasing","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","normA","normS","normP","easeOutElastic","normC","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeOutBounce","easeInBounce","easeInOutBounce","easeInQuad","easeOutQuad","easeInOutQuad","defaultAbort","AnimationBase","startValue","byValue","duration","delay","easing","onStart","onChange","onComplete","tick","bind","_onStart","_onChange","_onComplete","_abort","endValue","calculate","state","_state","isDone","start","firstTick","timestamp","startTime","Date","register","setTimeout","durationMs","boundDurationMs","durationProgress","valueProgress","unregister","ValueAnimation","timeElapsed","ArrayAnimation","defaultColorEasing","wrapColorCallback","rgba","ColorAnimation","startColor","endColor","isArrayAnimation","animate","animateColor","Intersection","status","append","isPointContained","T","A","infinite","AB","AT","isPointInPolygon","other","hits","inter","intersectSegmentSegment","intersectLineLine","a1","a2","b1","b2","aInfinite","bInfinite","a2xa1x","a2ya1y","b2xb1x","b2yb1y","a1xb1x","a1yb1y","uaT","ubT","uB","ua","ub","segmentsCoincide","intersectSegmentLine","s1","s2","l1","l2","intersectLinePolygon","result","intersectSegmentPolygon","intersectPolygonPolygon","points1","points2","coincidences","intersectPolygonRectangle","r1","r2","topRight","bottomLeft","ObjectGeometry","getX","getXY","getY","getRelativeX","setRelativeX","getRelativeY","setRelativeY","relativePosition","getRelativeXY","group","setRelativeXY","isStrokeAccountedForInDimensions","getCoords","aCoords","calcACoords","coords","intersection","intersectsWithObject","isContainedWithinObject","getBoundingRect","isOnScreen","isPartiallyOnScreen","allPointsAreOutside","getScaledWidth","_getTransformedDimensions","getScaledHeight","scaleToWidth","boundingRectFactor","scaleToHeight","getCanvasRetinaScaling","_this$canvas","getViewportTransform","_this$canvas2","rotateMatrix","tMatrix","finalMatrix","dim","transformMatrixKey","skipGroup","prefix","matrixCache","ownMatrixCache","_getNonTransformedDimensions","_calculateCurrentDimensions","dimOptions","preScalingStrokeValue","postScalingStrokeValue","noSkew","finalDimensions","fromOriginX","fromOriginY","toOriginX","toOriginY","translateToCenterPoint","translateToOriginPoint","relCenter","getPointByOrigin","pos","_getLeftTopCoords","FabricObject","name","setOptions","_createCacheCanvas","_cacheContext","_updateCacheCanvas","_limitCacheSize","dims","maxCacheSideLimit","minCacheSideLimit","limX","limY","capped","_getCacheCanvasDimensions","objectScale","getTotalObjectScaling","neededX","neededY","minCacheSize","dimensionsChanged","zoomChanged","drawingWidth","drawingHeight","shouldRedraw","additionalWidth","additionalHeight","shouldResizeCanvas","canvasWidth","canvasHeight","sizeGrowing","sizeShrinking","getHeightOfLine","ceil","setTransform","translate","needFullTransform","contextTop","getObjectScaling","retina","getObjectOpacity","_constrainScale","isChanged","parent","isNotVisible","_setupCompositeOperation","drawSelectionBackground","_setOpacity","_setShadow","drawCacheOnCanvas","_removeCacheCanvas","drawObject","isCacheDirty","parentClipPaths","hasStroke","hasFill","needsItsOwnCache","ownCaching","isOnACache","willDrawShadow","drawClipPathOnCache","canvasWithClipPath","originalFill","originalStroke","_setClippingProperties","_render","_drawClipPath","createClipPathLayer","prevClipPath","skipCanvas","fillRect","_removeShadow","globalAlpha","_setStrokeStyles","decl","lineWidth","lineCap","lineDashOffset","lineJoin","miterLimit","gradientUnits","_applyPatternForTransformedGradient","strokeStyle","_applyPatternGradientTransform","_setFillStyles","_setLineDash","dashArray","setLineDash","sx","sy","multX","multY","scaling","shadowColor","shadowBlur","browserShadowBlurConstant","shadowOffsetX","shadowOffsetY","_renderPaintInOrder","_renderStroke","_renderFill","_pCtx$createPattern","pCanvas","pCtx","createPattern","_findCenterFromElement","objectForm","cloneAsImage","ImageClass","origParams","originalGroup","originalShadow","canvasProvider","withoutTransform","withoutShadow","boundingRect","shadowOffset","originalCanvas","setOnGroup","animatable","_animate","propIsColor","colorProperties","animationOptions","isDescendantOf","getAncestors","ancestors","findCommonAncestors","fork","otherFork","common","otherAncestors","ancestor","j","hasCommonAncestors","commonAncestors","isInFrontOf","ancestorData","firstCommonAncestor","headOfFork","pop","headOfOtherFork","thisIndex","otherIndex","propertiesToSerialize","customProperties","toFixedBound","val","_removeDefaultValues","hasStaticDefaultValues","baseValues","getPrototypeOf","baseValue","_fromObject","serializedObjectOptions","_ref4","extraParam","_excluded2","enlivedObjectOptions","wrapWithFireEvent","actionHandler","extraEventInfo","actionPerformed","wrapWithFixedAnchor","centerPoint","constraint","changeObjectWidth","strokePadding","oldWidth","newWidth","changeWidth","renderCircleControl","styleOverride","xSize","sizeX","ySize","sizeY","myLeft","myTop","arc","renderSquareControl","xSizeBy2","ySizeBy2","strokeRect","Control","shouldActivate","controlKey","_fabricObject$canvas","getActiveObject","isControlVisible","getActionHandler","getMouseDownHandler","mouseDownHandler","getMouseUpHandler","mouseUpHandler","cursorStyleHandler","cursorStyle","actionName","getVisibility","_fabricObject$_contro","_fabricObject$_contro2","_controlsVisibility","setVisibility","positionHandler","currentControl","calcCornerCoords","objectCornerSize","centerX","centerY","isTouch","touchSizeX","touchSizeY","rotationStyleHandler","rotateObjectWithSnapping","ex","ey","theta","pivotPoint","lastAngle","curAngle","snapAngle","snapThreshold","rightAngleLocked","leftAngleLocked","hasRotated","rotationWithSnapping","scaleIsProportional","uniformIsToggled","uniScaleKey","uniformScaling","scalingIsForbidden","by","scaleProportionally","lockX","lockY","scaleMap","scaleCursorStyleHandler","n","scaleObject","forbidScaling","signX","signY","gestureScale","distance","original","originalDistance","oldScaleX","oldScaleY","scaleObjectFromCorner","scaleObjectX","scaleObjectY","scalingEqually","scalingX","scalingY","AXIS_KEYS","counterAxis","skew","lockSkewing","flip","skewMap","skewCursorStyleHandler","skewObject","axis","skewingSide","skewKey","skewingBefore","skewingStart","shearingStart","shearing","skewing","atan","changed","dimBefore","dimAfter","compensationFactor","skewHandler","originKey","lockSkewingKey","flipKey","counterOriginKey","counterFlipKey","counterOriginFactor","skewingDirection","finalHandler","skewHandlerX","skewHandlerY","isAltAction","altActionKey","scaleOrSkewActionName","isAlternative","scaleSkewCursorStyleHandler","scalingXOrSkewingY","scalingYOrSkewingX","createObjectDefaultControls","ml","mr","mb","mt","mtr","withConnection","createResizeControls","createTextboxDefaultControls","InteractiveFabricObject","createControls","targetCanvas","_currentTransform","action","startsWith","getActiveControl","__corner","coord","oCoords","findControl","forTouch","cornerEntries","touchCorner","calcOCoords","rMatrix","positionMatrix","startMatrix","transformOptions","forEachControl","_calcCornerCoords","fn","_activeObject","wh","strokeBorders","_drawBorders","drawControlsConnectingLines","_renderControls","styleOptions","shouldDrawBorders","shouldDrawControls","isMoving","drawBorders","forActiveSelection","shouldStroke","setControlVisible","setControlsVisibility","clearContextTop","restoreManually","onDeselect","_options","onSelect","shouldStartDragging","_e","onDragStart","canDrop","renderDragSourceEffect","renderDropTargetEffect","applyMixins","derivedCtor","constructors","baseCtor","getOwnPropertyNames","prototype","defineProperty","getOwnPropertyDescriptor","create","isTransparent","tolerance","getImageData","alphaChannel","rotatePoint","findIndexRight","StrokeProjectionsBase","strokeProjectionMagnitude","strokeUniformScalar","createSideVector","projectOrthogonally","applySkew","calcOrthogonalProjection","isSkewed","scaleUnitVector","unitVector","zeroVector","StrokeLineJoinProjections","getOrthogonalRotationFactor","vector1","vector2","C","AC","bisector","orthogonalProjection","correctSide","projectBevel","projections","projectMiter","hypotUnitScalar","miterVector","projectRoundNoSkew","startCircle","endCircle","radiusOnAxisX","radiusOnAxisY","projectRoundWithSkew","circleRadius","newY","furthestY","newX","furthestX","projectRound","isStraightLine","newOrigin","proj0","proj1","comparisonVector","isProj0Start","projectPoints","project","originPoint","projectedPoint","StrokeLineCapProjections","projectButt","projection","projectSquare","strokePointingOut","projectedA","projectStrokeOnPoints","openPath","reduced","cloneStyles","newObj","keyInner","capitalize","string","firstLetterOnly","charAt","escapeXml","graphemeSplit","textstring","graphemes","chr","getWholeChar","str","code","charCodeAt","isNaN","next","prev","hasStyleChanged","prevStyle","thisStyle","forTextSpans","textBackgroundColor","deltaY","overline","underline","linethrough","stylesToArray","text","textLines","stylesArray","charIndex","chars","end","stylesFromArray","stylesObject","styleIndex","SHARED_ATTRIBUTES","selectorMatches","selector","nodeName","classNames","getAttribute","azAz","matcher","splitClassNames","doesSomeParentMatch","selectors","parentMatching","parentElement","elementMatchesRule","firstMatching","getGlobalStylesForElement","cssRules","rule","normalizeAttr","attr","_attributesMap","regex","cleanupSvgAttribute","attributeValue","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","transforms","transformList","_templateObject7","reTransformList","reTransform","reTransformAll","parseTransformAttribute","test","matchAll","transformMatch","matchedParams","operation","rawArgs","arg1","arg2","arg3","arg4","arg5","arg","normalizeValue","parentAttributes","parsed","ouputValue","transformMatrix","fillIndex","strokeIndex","parseFontDeclaration","oStyle","lineHeight","parseStyleObject","parseStyleString","chunk","parseStyleAttribute","colorAttributesMap","setStrokeFillOpacity","attributes","colorAttr","parseAttributes","parentFontSize","ownAttributes","normalizedStyle","normalizedAttr","normalizedValue","font","mergedAttrs","rectDefaultValues","rx","ry","RECT_PROPS","Rect","_initRxRy","isRounded","bezierCurveTo","fromElement","_parseAttributes","ATTRIBUTE_NAMES","restOfparsedAttributes","Boolean","LAYOUT_TYPE_INITIALIZATION","LAYOUT_TYPE_ADDED","LAYOUT_TYPE_REMOVED","LAYOUT_TYPE_IMPERATIVE","LAYOUT_TYPE_OBJECT_MODIFIED","LAYOUT_TYPE_OBJECT_MODIFYING","getObjectBounds","destinationGroup","currentGroup","objectCenter","accountForStroke","strokeUniformVector","scalingStrokeWidth","sizeVector","LayoutStrategy","calcLayoutResult","shouldPerformLayout","calcBoundingBox","prevStrategy","strategy","shouldLayoutClipPath","getInitialSize","overrides","bboxSize","bboxLeftTop","bboxCenter","actualSize","relativeCorrection","FitContentLayout","LAYOUT_MANAGER","LayoutManager","_subscriptions","performLayout","strictContext","bubbles","_prevLayoutStrategy","onBeforeLayout","layoutResult","getLayoutResult","commitLayout","onAfterLayout","attachHandlers","trigger","subscribe","unsubscribe","_context","delete","unsubscribeTargets","targets","subscribeTargets","tricklingContext","layoutManager","prevCenter","nextCenter","correction","layoutObjects","_context$x","_context$y","layoutObject","_","bubblingContext","NoopLayoutManager","groupDefaultValues","subTargetCheck","interactive","Group","groupInit","_options$layoutManage","__objectSelectionTracker","__objectSelectionMonitor","__objectSelectionDisposer","enterGroup","canEnterGroup","_filterObjectsBeforeEnteringGroup","allowedObjects","_onAfterObjectsChange","removeParentTransform","exitGroup","_shouldSetNestedCoords","removeAll","_activeObjects","selected","activeObjects","_watchObject","watch","_enterGroup","activeObject","_exitGroup","ownCache","preserveObjectStacking","triggerLayout","__serializeObjects","method","_includeDefaultValues","originalDefaults","_createSVGBgRect","fillStroke","commons","svgString","bg","abortable","hydratedOptions","layoutClass","strategyClass","groupSVGElements","findScaleToFit","destination","findScaleToCover","commaWsp","reArcCommandPoints","rePathCommand","repeatedCommands","M","segmentToBezier","theta1","theta2","cosTh","sinTh","cx1","cy1","mT","fromX","fromY","costh1","sinth1","costh2","sinth2","toX","toY","cp1X","cp1Y","cp2X","cp2Y","arcToSegments","large","sweep","rotateX","root","sinTheta","px","py","rx2","ry2","py2","px2","pl","_rx","_ry","mTheta","calcVectorAngle","dtheta","segments","mDelta","th3","ux","uy","vx","vy","ta","tb","CB1","CB2","CB3","CB4","getBoundsOfCurve","begx","begy","cp1x","cp1y","cp2x","cp2y","endx","endy","argsString","cachesBoundsOfCurve","boundsOfCurveCache","tvalues","bounds","b2ac","sqrtb2ac","t1","t2","jlen","iterator","getPointOnCubicBezierIterator","fromArcToBeziers","fx","fy","rot","tx","ty","segsNorm","makePathSimpler","x1","y1","destinationPath","previous","controlX","controlY","parsedCommand","converted","calcLineLength","x2","y2","pct","c1","c2","c3","c4","QB1","QB2","QB3","getTangentCubicIterator","p1x","p1y","p2x","p2y","p3x","p3y","p4x","p4y","qb1","qb2","qb3","tangentX","tangentY","getPointOnQuadraticBezierIterator","getTangentQuadraticIterator","invT","pathIterator","tempP","tmpLen","perc","findPercentageForDistance","segInfo","nextLen","nextStep","lastPerc","angleFinder","getPathSegmentsInfo","totalLength","tempInfo","info","basicInfo","command","destX","destY","getPointOnPath","infos","segPercent","segment","rePathCmdAll","regExpArcCommandPoints","reMyNum","commandLengths","parsePath","pathString","_pathString$match","chain","matchStr","commandLetter","commandLength","paramArr","lastIndex","out","newCommand","transformedCommand","getSmoothPathFromPoints","p1","multSignX","multSignY","manyPoints","midPoint","transformPath","pathOffset","pathSegment","newSegment","getRegularPolygonPath","numVertexes","radius","interiorAngle","rotationAdjustment","rad","joinPath","pathData","setStyle","elementStyle","setProperty","mergeClipPaths","_b$group","getRandomInt","random","request","xhr","XMLHttpRequest","removeListener","ontimeout","onreadystatechange","readyState","open","send","_assignTransformMatrixProps","removeTransformMatrixForSvgParsing","preserveAspectRatioOptions","cropX","cropY","offsetLeft","offsetTop","CanvasDOMManager","containerClass","upperCanvasEl","createUpperCanvas","upper","applyCanvasStyle","container","createContainerElement","replaceChild","className","removeChild","canvasDefaults","centeredKey","selection","selectionKey","selectionColor","selectionDashArray","selectionBorderColor","selectionLineWidth","selectionFullyContained","defaultCursor","freeDrawingCursor","notAllowedCursor","targetFindTolerance","skipTargetFind","stopContextMenu","fireRightClick","fireMiddleClick","enablePointerEvents","SelectableCanvas","_this$elements$upper","_this$elements$upper2","wrapperEl","_objectsToRender","deselected","_discardActiveObject","_hoveredTarget","_hoveredTargets","_chooseObjectsToRender","contextTopDirty","_groupSelector","isDrawingMode","renderTopLayer","_isCurrentlyDrawing","freeDrawingBrush","_drawSelection","renderTop","setTargetFindTolerance","pixelFindCanvasEl","pixelFindContext","isTargetTransparent","selectionBgc","enhancedTolerance","_isSelectionKeyPressed","sKey","_shouldClearSelection","getActiveObjects","_shouldCenterTransform","modifierKeyPressed","centerTransform","_getOriginFromCorner","controlName","_setupCurrentTransform","_control$getActionHan","getScenePoint","altKey","lastX","lastY","shiftKey","setCursor","cursor","deltaX","extent","strokeOffset","minX","minY","maxX","maxY","findTarget","getViewportPoint","aObjects","searchPossibleTargets","subTargets","altSelectionKey","_pointIsInObjectSelectionArea","viewportZoom","angleRadians","cosP","sinP","cosPSinP","cosPMinusSinP","_checkTarget","isEditing","_searchPossibleTargets","subTarget","_pointer","_absolutePointer","fromViewport","boundsWidth","boundsHeight","cssScale","_resetTransformEventData","_setBrushStyles","willReadFrequently","getTopContext","getSelectionContext","getSelectionElement","active","_fireSelectionEvents","oldObjects","somethingChanged","invalidate","added","setActiveObject","currentActives","_setActiveObject","prevActiveObject","endCurrentTransform","discardActiveObject","discarded","_finalizeCurrentTransform","_scaling","originalProperties","_realizeGroupTransformOnObject","layoutProps","originalValues","TextEditingManager","cb","hiddenTextarea","focus","__disposer","exitTextEditing","exitEditing","onMouseMove","_this$target","updateSelectionOnMouseMove","addEventOptions","passive","getEventPoints","viewportPoint","scenePoint","absolutePointer","addListener","syntheticEventConfig","mouse","in","targetIn","targetOut","canvasIn","canvasOut","drag","Canvas","eventHandler","addOrRemove","_getEventPrefix","functor","_eventjsFunctor","canvasElement","eventTypePrefix","_onResize","_onMouseDown","_onMouseMove","_onMouseOut","_onMouseEnter","_onMouseWheel","_onContextMenu","_onDoubleClick","_onDragStart","_onDragEnd","_onDragOver","_onDragEnter","_onDragLeave","_onDrop","_onTouchStart","removeListeners","_onMouseUp","_onTouchEnd","__onMouseWheel","shared","nestedTarget","_isClick","_dragSource","_onDragProgress","_renderDragEffects","dropTarget","_dropTarget","didDrop","dataTransfer","dropEffect","dragSource","_draggedoverTarget","findDragTargets","eventType","_fireEnterLeaveEvents","_basicEventHandler","_cacheTransformEventData","_handleEvent","getPointerId","evt","identifier","pointerId","_isMainEvent","isPrimary","touches","mainTouchId","shouldPreventScrolling","currentActiveObject","__onMouseDown","_target","__onMouseUp","_willAddMouseDown","clearTimeout","__onMouseMove","_shouldRender","_this$_activeObject","isClick","button","_onMouseUpInDrawingMode","shouldRender","targetWasActive","handleSelection","found","originalControl","originalMouseUpHandler","_setCursorFromEvent","currentTarget","currentSubTargets","_onMouseDownInDrawingMode","onMouseDown","_onMouseMoveInDrawingMode","onMouseUp","grouped","handleMultiSelection","groupSelector","_fireOverOutEvents","_transformObject","textEditingManager","fireSyntheticInOutEvents","oldTarget","fireCanvas","draggedoverTarget","targetChanged","outOpt","nextTarget","inOpt","previousTarget","localPointer","_performTransformAction","activeSelection","reverse","isAS","prevActiveObjects","multiSelectAdd","klass","newActiveSelection","point1","point2","collectedObjects","linearDefaultCoords","radialDefaultCoords","ifNaN","valueIfNaN","RE_PERCENT","isPercent","parsePercent","NaN","RE_KEY_VALUE_PAIRS","RE_KEY_VALUE","parseColorStop","keyValuePairs","parseColorStops","opacityAttr","colorStops","colorStopEls","getElementsByTagName","parseType","parseGradientUnits","convertPercentUnitsToValues","valuesToConvert","finalValue","propValue","getValue","parseLinearCoords","parseRadialCoords","parseCoords","Gradient","addColorStop","colorStop","preTransform","sort","needsSwap","minRadius","maxRadius","percentageShift","gradient","createLinearGradient","createRadialGradient","svgOptions","viewBoxWidth","viewBoxHeight","Pattern","isImageSource","isCanvasSource","sourceToString","complete","naturalWidth","naturalHeight","patternSource","patternOffsetX","patternOffsetY","patternWidth","patternHeight","BaseBrush","_saveAndTransform","needsFullRender","_resetShadow","_isOutSideCanvas","Path","_setPath","adjustPosition","setBoundingBox","_calcBoundsFromPath","quadraticCurveTo","pathCmd","sourcePath","_getOffsetTransform","digits","_calcDimensions","subpathStartX","subpathStartY","parsedAttributes","isEmptySVGPath","PencilBrush","_points","_hasStraightLine","drawSegment","drawStraightLine","straightLineKey","_prepareForDrawing","_addPoint","limitedToCanvasSize","oldEnd","_finalizeAndAddPath","_reset","convertPointsToSVGPath","createPath","decimatePoints","lastPoint","cDistance","adjustedDistance","newPoints","decimate","CIRCLE_PROPS","circleDefaultValues","startAngle","endAngle","Circle","setRadius","getRadiusX","getRadiusY","startX","startY","endX","endY","largeFlag","sweepFlag","otherParsedAttributes","CircleBrush","drawDot","addPoint","dot","originalRenderOnAddRemove","circles","circle","pointerPoint","getUniqueRects","rects","uniqueRects","uniqueRectsArray","SprayBrush","sprayChunks","sprayChunk","addSprayChunk","renderChunck","chunck","rect","optimizeOverlapping","sprayChunck","density","dotWidthVariance","dotWidth","randomOpacity","PatternBrush","getPatternSrc","dotDistance","patternCanvas","patternCtx","getPattern","pattern","topLeft","coordProps","Line","_setWidthHeight","calcLinePoints","origStrokeStyle","_this$stroke","_x1","_x2","_y1","_y2","xMult","yMult","triangleDefaultValues","Triangle","widthBy2","heightBy2","ellipseDefaultValues","ELLIPSE_PROPS","Ellipse","getRx","getRy","parsePointsAttribute","pointsSplit","parsedPoints","polylineDefaultValues","exactBoundingBox","Polyline","initialized","isOpen","_projectStrokeOnPoints","strokeDiff","bboxNoStroke","layoutProperties","_options$width","_options$height","_options$width2","_options$height2","output","diffX","diffY","Polygon","fontProperties","textDecorationProperties","textLayoutProperties","additionalProps","styleProperties","textDefaultValues","_reNewline","_reSpacesAndTabs","_reSpaceAndTab","_reWords","textAlign","superscript","baseline","subscript","pathStartOffset","pathSide","pathAlign","_fontSizeFraction","offsets","_fontSizeMult","charSpacing","direction","CACHE_FONT_SIZE","MIN_TEXT_WIDTH","JUSTIFY","JUSTIFY_LEFT","JUSTIFY_RIGHT","JUSTIFY_CENTER","StyledText","isEmptyStyles","lineIndex","line","p3","styleHas","cleanStyle","stylesCount","letterCount","stylePropertyValue","allStyleObjectPropertiesMatch","graphemeCount","styleObject","stylePropertyHasBeenSet","_textLines","removeStyle","lineNum","charNum","_extendStyles","get2DCursorLocation","_getLineStyle","_setLineStyle","newStyle","_getStyleDeclaration","_setStyleDeclaration","getSelectionStyles","startIndex","endIndex","getStyleAtPosition","getCompleteStyleDeclaration","setSelectionStyles","_forceClearCache","_lineStyle$charIndex","lineStyle","_styleProperties","_deleteStyleDeclaration","_deleteLineStyle","multipleSpacesRegex","dblQuoteRegex","createSVGInlineRect","TextSVGExportMixin","_getSVGLeftTopOffsets","textAndBg","_getSVGTextAndBg","textTop","textLeft","_wrapSVGTextAndBg","lineTop","textBgRects","textSpans","noShadow","textDecoration","getSvgTextDecoration","textTopOffset","textLeftOffset","lineOffset","_getLineLeftOffset","_setSVGTextLineBg","_setSVGTextLineText","_createTextCharSpan","char","styleDecl","styleProps","getSvgSpanStyles","fillStyles","dySpan","isJustify","actualStyle","nextStyle","charsToRender","charBox","boxWidth","timeToRender","__charBounds","kernedWidth","leftOffset","heightOfLine","boxStart","currentColor","lastColor","getValueOfPropertyAt","_getSVGLineTopOffset","lineTopOffset","lastHeight","useWhiteSpace","decoration","measuringContext","getMeasuringContext","FabricText","setPathInfo","initDimensions","segmentsInfo","_splitText","newLines","_splitTextIntoLines","lines","graphemeLines","_unwrappedTextLines","_unwrappedLines","_text","graphemeText","_clearCache","calcTextWidth","lineBoxes","renderLeft","wBy2","cursorWidth","calcTextHeight","enlargeSpaces","diffSpace","currentLineWidth","numberOfSpaces","accumulatedSpace","charBound","spaces","isEndOfWrapping","getLineWidth","missingNewlineOffset","_lineIndex","selectionStart","skipWrapping","_setTextStyles","_renderTextLinesBackground","_renderTextDecoration","_renderTextStroke","_renderTextFill","charStyle","forMeasuring","textBaseline","_getFontDeclaration","maxWidth","_renderTextLine","_renderChars","_getLeftOffset","_getTopOffset","lineLeftOffset","drawStart","_measureChar","_char","previousChar","prevCharStyle","fontDeclaration","couple","stylesAreEqual","fontMultiplier","coupleWidth","previousWidth","measureText","getHeightOfChar","measureLine","lineInfo","_measureLine","_getWidthOfCharSpacing","prevGrapheme","graphemeInfo","llength","lineBounds","grapheme","_getGraphemeBox","positionInPath","totalPathLength","_setGraphemeOnPath","numOfSpaces","centerPosition","skipLeft","previousBox","__lineHeights","maxHeight","_renderTextCommon","lineHeights","shortCut","isLtr","currentDirection","drawingLeft","_renderChar","_applyPatternGradientTransformText","handleFiller","fullDecl","shouldFill","fillOffsets","fillText","strokeOffsets","strokeText","setSuperscript","_setScript","setSubscript","schema","loc","lineDiff","__lineWidths","_charStyle$property","topOffset","lastDecoration","lastFill","currentDecoration","currentFill","currentSize","currentDy","parsedFontFamily","genericFonts","newLine","newText","needsDims","isAddingPath","_options$parsedAttrib","textAnchor","restOfOptions","textContent","textHeightScaleFactor","lineHeightDiff","scaledDiff","textHeight","offX","DraggableTextDelegate","dragEnterHandler","dragOverHandler","dragLeaveHandler","dragEndHandler","dropHandler","_dispose","isPointerOverSelection","newSelection","getSelectionStartFromPointer","selectionEnd","__mouseDownInPlace","isActive","__dragStartFired","setCursorByClick","initDelayedCursor","__isDraggingOver","getDragStartSelection","__dragStartSelection","setDragImage","_e$dataTransfer","flipFactor","boundaries","_getCursorBoundaries","selectionPosition","diff","bgc","dragImage","border","__dragImageDisposer","appendChild","setData","stringify","effectAllowed","abortCursorAnimation","editable","defaultPrevented","dragStartSelection","targetCanDrop","ev","_e$dataTransfer2","insert","getData","trailing","selectionStartOffset","removeChars","trimEnd","insertChars","enterEditing","_updateTextarea","_e$dataTransfer3","reNonWord","ITextBehavior","initBehavior","_tick","_onTickComplete","_animateCursor","toValue","_currentCursorOpacity","renderCursorOrSelection","_currentTickState","cursorDuration","_this$_currentTickCom","_currentTickCompleteState","restart","cursorDelay","shouldClear","cursorAnimation","restartCursorIfNeeded","selectAll","_fireSelectionChanged","getSelectedText","findWordBoundaryLeft","startFrom","_reSpace","findWordBoundaryRight","findLineBoundaryLeft","findLineBoundaryRight","searchWordBoundary","selectWord","newSelectionStart","newSelectionEnd","selectLine","enterEditingImpl","initHiddenTextarea","_saveEditingProps","_setEditingProps","_textBeforeEdit","activeElement","currentStart","currentEnd","__selectionStartOnMouseDown","editingBorderColor","fromStringToGraphemeSelection","smallerTextStart","graphemeStart","smallerTextEnd","graphemeEnd","fromGraphemeToStringSelection","cursorOffsetCache","inCompositionMode","updateTextareaPosition","updateFromTextArea","textarea","_calcTextareaPosition","desiredPosition","compositionStart","cursorLocation","charHeight","upperCanvas","upperCanvasWidth","upperCanvasHeight","clientWidth","clientHeight","_savedProps","_restoreEditingProps","_exitEditing","exitEditingImpl","isTextChanged","_removeExtraneousStyles","removeStyleFromTo","lineStart","charStart","lineEnd","charEnd","styleObj","shiftLineStyles","numericChar","clonedStyles","numericLine","insertNewlineStyleObject","qty","copiedStyle","newLineStyles","originalLineLength","isEndOfLine","someStyleIsCarryingOver","currentCharStyle","numIndex","styleCarriedOver","insertCharStyleObject","quantity","currentLineStyles","currentLineStylesCloned","numericIndex","insertNewStyleBlock","insertedText","cursorLoc","addedLines","linesLength","setSelectionStartEndWithShift","_selectionDirection","ITextKeyBehavior","autocapitalize","autocorrect","autocomplete","spellcheck","wrap","hiddenTextareaContainer","keydown","keyup","input","copy","cut","paste","compositionstart","compositionupdate","compositionend","onKeyDown","keyMap","keysMapRtl","keysMap","keyCode","ctrlKeysMapDown","ctrlKey","metaKey","stopImmediatePropagation","onKeyUp","_copyDone","ctrlKeysMapUp","onInput","fromPaste","updateAndFire","nextText","charCount","nextCharCount","removedText","charDiff","removeFrom","removeTo","textareaSelection","backDelete","copiedText","disableStyleCopyPaste","copiedTextStyle","onCompositionStart","onCompositionEnd","onCompositionUpdate","compositionEnd","_getWidthBeforeCursor","widthBeforeCursor","bound","getDownCursorOffset","isRight","selectionProp","_getSelectionForOffset","indexOnOtherLine","_getIndexOnLine","textAfterCursor","getUpCursorOffset","textBeforeCursor","widthOfCharsOnLine","indexOnLine","charWidth","foundMatch","leftEdge","rightEdge","offsetFromLeftEdge","offsetFromRightEdge","moveCursorDown","_moveCursorUpOrDown","moveCursorUp","moveCursorWithShift","moveCursorWithoutShift","moveCursorLeft","_moveCursorLeftOrRight","_move","newValue","_moveLeft","_moveRight","moveCursorLeftWithoutShift","change","moveCursorLeftWithShift","moveCursorRight","moveCursorRightWithShift","moveCursorRightWithoutShift","notALeftClick","ITextClickBehavior","_mouseDownHandler","_mouseDownHandlerBefore","doubleClickHandler","tripleClickHandler","__lastClickTime","__lastLastClickTime","__lastPointer","draggableTextDelegate","__newClickTime","newPointer","isTripleClick","__lastSelected","didDrag","mouseOffset","charLength","widthAfter","MOVE_CURSOR_UP","MOVE_CURSOR_DOWN","MOVE_CURSOR_LEFT","MOVE_CURSOR_RIGHT","EXIT_EDITING","protectedDefaultValues","iTextDefaultValues","cursorColor","caching","IText","setSelectionStart","_updateAndFire","setSelectionEnd","renderCursor","renderSelection","skipCaching","_getCursorBoundariesOffsets","__getCursorBoundariesOffsets","renderCursorAt","_renderCursor","getCursorRenderingData","_renderSelection","dragSelection","startLine","endLine","startChar","endChar","realLineHeight","boxEnd","drawHeight","extraTop","drawWidth","compositionColor","getCurrentCharFontSize","cp","_getCurrentCharIndex","getCurrentCharColor","cursorPosition","textboxDefaultValues","minWidth","dynamicMinWidth","_wordJoiners","splitByGrapheme","Textbox","_styleMap","_generateStyleMap","textInfo","realLineCount","realLineCharCount","isWrapping","nextLineIndex","nextOffset","shouldLimit","mapNextLine","p2Number","_wrapText","desiredWidth","getGraphemeDataForRender","wrapped","wordsData","_wrapLine","infix","largestWordWidth","wordsOrGraphemes","wordSplit","word","graphemeArray","_measureWord","charOffset","reservedSpace","additionalSpace","infixWidth","lineJustStarted","wordWidth","getMinWidth","linesToKeep","propNumber","ClipPathLayout","clipPathCenter","FixedLayout","ActiveSelectionLayoutManager","parents","Set","selectedObjects","activeSelectionDefaultValues","multiSelectionStacking","ActiveSelection","findIndex","groups","childrenOverride","Canvas2dFilterBackend","applyFilters","filters","sourceElement","sourceWidth","sourceHeight","imageData","originalImageData","pipelineState","originalEl","filterBackend","applyTo","imageDataPostFilter","putImageData","WebGLFilterBackend","tileSize","Float32Array","setupGLContext","captureGPUInfo","createWebGLCanvas","glOptions","premultipliedAlpha","depth","stencil","antialias","clearColor","cachedTexture","getCachedTexture","destinationWidth","destinationHeight","sourceTexture","createTexture","targetTexture","originalTexture","passes","webgl","aPosition","programCache","pass","tempFbo","createFramebuffer","bindFramebuffer","FRAMEBUFFER","resizeCanvasIfNeeded","copyGLTo2D","bindTexture","TEXTURE_2D","deleteTexture","deleteFramebuffer","clearWebGLCaches","textureCache","textureImageSource","NEAREST","RGBA","UNSIGNED_BYTE","CLAMP_TO_EDGE","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","texture","texParameteri","texImage2D","uniqueId","evictCachesForKey","glCanvas","sourceY","copyGLTo2DPutImageData","dWidth","dHeight","numBytes","u8","Uint8Array","imageBuffer","u8Clamped","Uint8ClampedArray","readPixels","imgData","ImageData","gpuInfo","renderer","vendor","ext","UNMASKED_RENDERER_WEBGL","UNMASKED_VENDOR_WEBGL","initFilterBackend","enableGLFiltering","getFilterBackend","strict","setFilterBackend","backend","imageDefaultValues","srcFromAttribute","minimumScaleTrigger","imageSmoothing","IMAGE_PROPS","FabricImage","setElement","_element","removeTexture","_originalElement","CSS_CANVAS","resizeFilter","applyResizeFilters","elementKey","getCrossOrigin","getOriginalSize","_stroke","filterObj","getSrc","hasCrop","imageMarkup","strokeSvg","imageRendering","getSvgSrc","origFill","filtered","setSrc","minimumScale","elementToFilter","_filteredEl","_filterScalingX","_filterScalingY","_lastScaleX","_lastScaleY","isNeutralState","imgElement","_needsResize","elementToDraw","elWidth","elHeight","sX","sY","sW","sH","maxDestW","maxDestH","_resetWidthHeight","pAR","preserveAspectRatio","pWidth","pHeight","rWidth","rHeight","f","rf","hydratedProps","fromURL","imageOptions","applyViewboxTransform","viewBoxAttr","widthAttr","heightAttr","goodViewbox","missingViewBox","missingDimAttr","translateMatrix","widthDiff","heightDiff","parsedDim","pasedViewBox","createElementNS","firstChild","getTagName","node","tagName","svgInvalidAncestorsRegEx","hasInvalidAncestor","getMultipleNodes","nodeNames","nodeArray","nodeList","getElementsByTagNameNS","parseUseDirectives","nodelist","skipAttributes","useElement","useAttributes","useAttrMap","xlink","href","referencedElement","clonedOriginal","cloneNode","originalAttributes","originalAttrMap","currentTrans","el3","setAttributeNS","childNodes","styleRecord","mergedStyles","entry","gradientsAttrs","xlinkAttr","recursivelyParseGradientsXlink","_gradient$getAttribut","xLink","referencedGradient","children","referenceClone","tagArray","getGradientDefs","elList","gradientDefs","getCSSRules","allRules","styleContents","ruleObj","declaration","propertyValuePairs","pair","_rule","findTag","ElementsParser","clipPaths","regexUrl","createObject","resolveGradient","resolveClipPath","extractPropertyDefinition","storage","gradientDef","usingElement","exactOwner","clipPathElements","objTransformInv","clipPathTag","clipPathOwner","clipPathElement","enlivedClippath","clipRule","gTransform","isValidSvgTag","createEmptyResponse","allElements","parseSVGDocument","descendants","localClipPaths","elementParser","loadSVGFromString","parser","DOMParser","parseFromString","loadSVGFromURL","xml","responseXML","parsedDoc","ACTION_NAME","createPolyPositionHandler","pointIndex","polyObject","polyActionHandler","poly","mouseLocalPosition","factoryPolyActionHandler","anchorPoint","anchorPointInParentPlane","newAnchorPointInParentPlane","createPolyActionHandler","createPolyControls","calcPathPointPosition","pathObject","commandIndex","movePathPoint","anchorCommand","pathPositionHandler","pathActionHandler","indexFromPrevCommand","previousCommandType","PathPointControl","controlFill","controlStroke","PathControlPointControl","connectToCommandIndex","connectToPointIndex","connectionDashArray","commandType","createControl","commandIndexPos","pointIndexPos","isControlPoint","controlPointStyle","pointStyle","createPathControls","isWebGLPipelineState","isPutImageFaster","sourceCanvas","ArrayBuffer","testContext","testPipelineState","performance","now","drawImageTime","putImageDataTime","highPsourceCode","identityFragmentShader","vertexSource","BaseFilter","getFragmentSource","getVertexSource","createProgram","vertexShader","VERTEX_SHADER","program","getShaderInfoLog","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","uniformLocations","getUniformLocations","uStepW","getUniformLocation","uStepH","attributeLocations","getAttributeLocations","getAttribLocation","locations","sendAttributeData","aPositionData","attributeLocation","buffer","createBuffer","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bufferData","STATIC_DRAW","_setupFrameBuffer","framebufferTexture2D","COLOR_ATTACHMENT0","finish","_swapTextures","temp","applyToWebGL","applyTo2d","getCacheKey","retrieveShader","shader","useProgram","uniform1f","sendUniformData","viewport","drawArrays","TRIANGLE_STRIP","bindAdditionalTexture","textureUnit","activeTexture","TEXTURE0","unbindAdditionalTexture","_gl","_uniformLocations","createHelpLayer","helpLayer","defaultKeys","filterOptions","blendColorFragmentSource","screen","difference","lighten","darken","exclusion","tint","blendColorDefaultValues","mode","BlendColor","tg","alpha1","uniform4fv","uColor","mask","blendImageDefaultValues","BlendImage","image","TEXTURE1","calculateMatrix","resources","blendImage","canvas1","blendData","uniform1i","uImage","uniformMatrix3fv","uTransformMatrix","enlivedImage","blurDefaultValues","Blur","aspectRatio","horizontal","simpleBlur","blurLayer1","blurLayer2","canvas2","ctx1","ctx2","nSamples","percent","newImageData","delta","chooseRightDelta","uniform2fv","uDelta","blurScale","brightnessDefaultValues","brightness","Brightness","uBrightness","colorMatrixDefaultValues","colorsOnly","ColorMatrix","constants","uniformMatrix4fv","uColorMatrix","uConstants","createColorMatrixFilter","_Class","newClass","Brownie","Vintage","Kodachrome","Technicolor","Polaroid","Sepia","BlackWhite","Composed","subFilters","enlivedFilters","contrastDefaultValues","contrast","Contrast","contrastF","uContrast","Convolute_3_1","Convolute_3_0","Convolute_5_1","Convolute_5_0","Convolute_7_1","Convolute_7_0","Convolute_9_1","Convolute_9_0","convoluteDefaultValues","opaque","Convolute","weights","side","halfSide","sw","sh","createImageData","dst","alphaFac","dstOff","scx","scy","srcOff","wt","uniform1fv","uMatrix","GAMMA","gammaDefaultValues","gamma","Gamma","rInv","gInv","bInv","rgbValues","rgb","uniform3fv","uGamma","lightness","luminosity","grayscaleDefaultValues","Grayscale","uMode","hueRotationDefaultValues","rotation","HueRotation","cosine","sine","aThird","aThirdSqtSin","OneMinusCos","invertDefaultValues","invert","Invert","uInvert","uAlpha","noiseDefaultValues","noise","Noise","rand","uNoise","uSeed","pixelateDefaultValues","blocksize","Pixelate","_i","_j","uBlocksize","removeColorDefaultValues","useAlpha","RemoveColor","lowC","highC","uLow","uHigh","resizeDefaultValues","resizeType","lanczosLobes","Resize","uTaps","taps","getFilterWindow","tempScale","filterWindow","generateShader","getTaps","lobeFunction","lanczosCreate","applyToForWebgl","dW","dH","lobes","xx","rcpScaleX","rcpScaleY","oW","oH","newData","sliceByTwo","hermiteFastResize","bilinearFiltering","lanczosResize","mult","doneW","doneH","stepW","stepH","dX","dY","tmpCanvas","process","u","weight","fX","fY","ratioX","icenter","ratioY","range2X","cacheLanc","range2Y","lanczos","rcpRatioX","rcpRatioY","srcData","destData","destImg","xDiff","yDiff","chnl","origPix","w4","pixels","destImage","destPixels","ratioW","ratioH","ratioWHalf","ratioHHalf","img2","data2","weightsAlpha","gxR","gxG","gxB","gxA","yy","w0","saturationDefaultValues","saturation","Saturation","adjust","uSaturation","vibranceDefaultValues","vibrance","Vibrance","amt","uVibrance"],"mappings":"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EAAAA,UAAU,EAAE,SAAS;AACrBC,EAAAA,QAAQ,EAAE,SAAS;AACnBC,EAAAA,QAAQ,EAAE,SAAS;AACnBC,EAAAA,MAAM,EAAE,SAAS;AACjBC,EAAAA,MAAM,EAAE,SAAS;AACjBC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,IAAI,EAAE,SAAS;AACfC,EAAAA,WAAW,EAAE,SAAS;AACtBC,EAAAA,SAAS,EAAE,SAAS;AACpBxL,EAAAA,GAAG,EAAE,SAAS;AACdyL,EAAAA,IAAI,EAAE,SAAS;AACfC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,MAAM,EAAE,SAAS;AACjBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,MAAM,EAAE,SAAS;AACjBC,EAAAA,KAAK,EAAE,SAAS;AAChBC,EAAAA,KAAK,EAAE,MAAM;AACbC,EAAAA,UAAU,EAAE,SAAS;AACrBC,EAAAA,MAAM,EAAE,MAAM;AACdC,EAAAA,WAAW,EAAE,SAAA;AACf,CAAC;;ACzJD;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,MAAM,GAAGA,MACpB,kJAAkJ,CAAA;;AAEpJ;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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AAA,WAAW,EAAE,QAAQ;AACrBnkB,EAAAA,YAAY,EAAE,UAAU;AAExBokB,EAAAA,SAAS,EAAE,IAAI;AACfC,EAAAA,YAAY,EAAE,UAAU;AACxBC,EAAAA,cAAc,EAAE,0BAA0B;AAC1CC,EAAAA,kBAAkB,EAAE,EAAE;AACtBC,EAAAA,oBAAoB,EAAE,0BAA0B;AAChDC,EAAAA,kBAAkB,EAAE,CAAC;AACrBC,EAAAA,uBAAuB,EAAE,KAAK;AAE9B5iC,EAAAA,WAAW,EAAE,MAAM;AACnBC,EAAAA,UAAU,EAAE,MAAM;AAClB4iC,EAAAA,aAAa,EAAE,SAAS;AACxBC,EAAAA,iBAAiB,EAAE,WAAW;AAC9BC,EAAAA,gBAAgB,EAAE,aAAa;AAE/BjjC,EAAAA,kBAAkB,EAAE,KAAK;AACzBkjC,EAAAA,mBAAmB,EAAE,CAAC;AACtBC,EAAAA,cAAc,EAAE,KAAK;AAErBC,EAAAA,eAAe,EAAE,KAAK;AACtBC,EAAAA,cAAc,EAAE,KAAK;AACrBC,EAAAA,eAAe,EAAE,KAAK;AACtBC,EAAAA,mBAAmB,EAAE,KAAK;AAE1B3B,EAAAA,cAAc,EAAE,kBAAkB;AAElC5N,EAAAA,sBAAsB,EAAE,KAAA;AAC1B,CAAC;;ACnPD;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMwP,gBAAgB,SACnB56C,YAAY,CAEtB;EAAA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"} \ No newline at end of file diff --git a/dist/index.node.mjs b/dist/index.node.mjs index 1bed5a95328..8f6d3490749 100644 --- a/dist/index.node.mjs +++ b/dist/index.node.mjs @@ -1612,10 +1612,14 @@ const createImage = () => getFabricDocument().createElement('img'); */ const copyCanvasElement = canvas => { var _newCanvas$getContext; + const newCanvas = createCanvasElementFor(canvas); + (_newCanvas$getContext = newCanvas.getContext('2d')) === null || _newCanvas$getContext === void 0 || _newCanvas$getContext.drawImage(canvas, 0, 0); + return newCanvas; +}; +const createCanvasElementFor = canvas => { const newCanvas = createCanvasElement(); newCanvas.width = canvas.width; newCanvas.height = canvas.height; - (_newCanvas$getContext = newCanvas.getContext('2d')) === null || _newCanvas$getContext === void 0 || _newCanvas$getContext.drawImage(canvas, 0, 0); return newCanvas; }; @@ -3520,6 +3524,7 @@ let StaticCanvas$1 = class StaticCanvas extends createCollectionMixin(CommonMeth if (path) { path._set('canvas', this); // needed to setup a couple of variables + // todo migrate to the newer one path.shouldCache(); path._transformDone = true; path.renderCache({ @@ -4137,9 +4142,7 @@ let StaticCanvas$1 = class StaticCanvas extends createCollectionMixin(CommonMeth * This essentially copies canvas dimensions since loadFromJSON does not affect canvas size. */ cloneWithoutData() { - const el = createCanvasElement(); - el.width = this.width; - el.height = this.height; + const el = createCanvasElementFor(this); return new this.constructor(el); } @@ -4228,10 +4231,11 @@ let StaticCanvas$1 = class StaticCanvas extends createCollectionMixin(CommonMeth translateY = (vp[5] - (top || 0)) * multiplier, newVp = [newZoom, 0, 0, newZoom, translateX, translateY], originalRetina = this.enableRetinaScaling, - canvasEl = createCanvasElement(), + canvasEl = createCanvasElementFor({ + width: scaledWidth, + height: scaledHeight + }), objectsToRender = filter ? this._objects.filter(obj => filter(obj)) : this._objects; - canvasEl.width = scaledWidth; - canvasEl.height = scaledHeight; this.enableRetinaScaling = false; this.viewportTransform = newVp; this.width = scaledWidth; @@ -6779,6 +6783,7 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { * Legacy identifier of the class. Prefer using utils like isType or instanceOf * Will be removed in fabric 7 or 8. * The setter exists to avoid type errors in old code and possibly current deserialization code. + * DO NOT build new code around this type value * @TODO add sustainable warning message * @type string * @deprecated @@ -7120,7 +7125,7 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { this.drawCacheOnCanvas(ctx); } else { this._removeCacheCanvas(); - this.drawObject(ctx); + this.drawObject(ctx, false, {}); this.dirty = false; } ctx.restore(); @@ -7134,7 +7139,25 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { this._createCacheCanvas(); } if (this.isCacheDirty() && this._cacheContext) { - this.drawObject(this._cacheContext, options.forClipping); + const { + zoomX, + zoomY, + cacheTranslationX, + cacheTranslationY + } = this; + const { + width, + height + } = this._cacheCanvas; + this.drawObject(this._cacheContext, options.forClipping, { + zoomX, + zoomY, + cacheTranslationX, + cacheTranslationY, + width, + height, + parentClipPaths: [] + }); this.dirty = false; } } @@ -7222,7 +7245,7 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { * @param {CanvasRenderingContext2D} ctx Context to render on * @param {FabricObject} clipPath */ - drawClipPathOnCache(ctx, clipPath) { + drawClipPathOnCache(ctx, clipPath, canvasWithClipPath) { ctx.save(); // DEBUG: uncomment this line, comment the following // ctx.globalAlpha = 0.4 @@ -7231,14 +7254,9 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { } else { ctx.globalCompositeOperation = 'destination-in'; } + ctx.setTransform(1, 0, 0, 1, 0, 0); //ctx.scale(1 / 2, 1 / 2); - if (clipPath.absolutePositioned) { - const m = invertTransform(this.calcTransformMatrix()); - ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]); - } - clipPath.transform(ctx); - ctx.scale(1 / clipPath.zoomX, 1 / clipPath.zoomY); - ctx.drawImage(clipPath._cacheCanvas, -clipPath.cacheTranslationX, -clipPath.cacheTranslationY); + ctx.drawImage(canvasWithClipPath, 0, 0); ctx.restore(); } @@ -7246,8 +7264,9 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { * Execute the drawing operation for an object on a specified context * @param {CanvasRenderingContext2D} ctx Context to render on * @param {boolean} forClipping apply clipping styles + * @param {DrawContext} context additional context for rendering */ - drawObject(ctx, forClipping) { + drawObject(ctx, forClipping, context) { const originalFill = this.fill, originalStroke = this.stroke; if (forClipping) { @@ -7258,30 +7277,43 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { this._renderBackground(ctx); } this._render(ctx); - this._drawClipPath(ctx, this.clipPath); + this._drawClipPath(ctx, this.clipPath, context); this.fill = originalFill; this.stroke = originalStroke; } + createClipPathLayer(clipPath, context) { + const canvas = createCanvasElementFor(context); + const ctx = canvas.getContext('2d'); + ctx.translate(context.cacheTranslationX, context.cacheTranslationY); + ctx.scale(context.zoomX, context.zoomY); + clipPath._cacheCanvas = canvas; + context.parentClipPaths.forEach(prevClipPath => { + prevClipPath.transform(ctx); + }); + context.parentClipPaths.push(clipPath); + if (clipPath.absolutePositioned) { + const m = invertTransform(this.calcTransformMatrix()); + ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]); + } + clipPath.transform(ctx); + clipPath.drawObject(ctx, true, context); + return canvas; + } /** * Prepare clipPath state and cache and draw it on instance's cache * @param {CanvasRenderingContext2D} ctx * @param {FabricObject} clipPath */ - _drawClipPath(ctx, clipPath) { + _drawClipPath(ctx, clipPath, context) { if (!clipPath) { return; } - // needed to setup a couple of variables - // path canvas gets overridden with this one. + // needed to setup _transformDone // TODO find a better solution? - clipPath._set('canvas', this.canvas); - clipPath.shouldCache(); clipPath._transformDone = true; - clipPath.renderCache({ - forClipping: true - }); - this.drawClipPathOnCache(ctx, clipPath); + const canvas = this.createClipPathLayer(clipPath, context); + this.drawClipPathOnCache(ctx, clipPath, canvas); } /** @@ -7553,14 +7585,15 @@ let FabricObject$1 = class FabricObject extends ObjectGeometry { _applyPatternForTransformedGradient(ctx, filler) { var _pCtx$createPattern; const dims = this._limitCacheSize(this._getCacheCanvasDimensions()), - pCanvas = createCanvasElement(), retinaScaling = this.getCanvasRetinaScaling(), width = dims.x / this.scaleX / retinaScaling, - height = dims.y / this.scaleY / retinaScaling; - // in case width and height are less than 1px, we have to round up. - // since the pattern is no-repeat, this is fine - pCanvas.width = Math.ceil(width); - pCanvas.height = Math.ceil(height); + height = dims.y / this.scaleY / retinaScaling, + pCanvas = createCanvasElementFor({ + // in case width and height are less than 1px, we have to round up. + // since the pattern is no-repeat, this is fine + width: Math.ceil(width), + height: Math.ceil(height) + }); const pCtx = pCanvas.getContext('2d'); if (!pCtx) { return; @@ -11377,7 +11410,6 @@ const _excluded$a = ["type", "objects", "layoutManager"]; * This layout manager doesn't do anything and therefore keeps the exact layout the group had when {@link Group#toObject} was called. */ class NoopLayoutManager extends LayoutManager { - // eslint-disable-next-line @typescript-eslint/no-empty-function performLayout() {} } const groupDefaultValues = { @@ -11761,21 +11793,22 @@ class Group extends createCollectionMixin(FabricObject) { * Execute the drawing operation for an object on a specified context * @param {CanvasRenderingContext2D} ctx Context to render on */ - drawObject(ctx) { + drawObject(ctx, forClipping, context) { this._renderBackground(ctx); for (let i = 0; i < this._objects.length; i++) { var _this$canvas; + const obj = this._objects[i]; // TODO: handle rendering edge case somehow - if ((_this$canvas = this.canvas) !== null && _this$canvas !== void 0 && _this$canvas.preserveObjectStacking && this._objects[i].group !== this) { + if ((_this$canvas = this.canvas) !== null && _this$canvas !== void 0 && _this$canvas.preserveObjectStacking && obj.group !== this) { ctx.save(); ctx.transform(...invertTransform(this.calcTransformMatrix())); - this._objects[i].render(ctx); + obj.render(ctx); ctx.restore(); - } else if (this._objects[i].group === this) { - this._objects[i].render(ctx); + } else if (obj.group === this) { + obj.render(ctx); } } - this._drawClipPath(ctx, this.clipPath); + this._drawClipPath(ctx, this.clipPath, context); } /** @@ -14908,17 +14941,28 @@ let Canvas$1 = class Canvas extends SelectableCanvas { * @param {Event} e Event object fired on mousedown */ _onTouchStart(e) { - e.preventDefault(); + // we will prevent scrolling if allowTouchScrolling is not enabled and + let shouldPreventScrolling = !this.allowTouchScrolling; + const currentActiveObject = this._activeObject; if (this.mainTouchId === undefined) { this.mainTouchId = this.getPointerId(e); } this.__onMouseDown(e); + // after executing fabric logic for mouse down let's see + // if we didn't change target or if we are drawing + // we want to prevent scrolling anyway + if (this.isDrawingMode || currentActiveObject && this._target === currentActiveObject) { + shouldPreventScrolling = true; + } + // prevent default, will block scrolling from start + shouldPreventScrolling && e.preventDefault(); this._resetTransformEventData(); const canvasElement = this.upperCanvasEl, eventTypePrefix = this._getEventPrefix(); const doc = getDocumentFromElement(canvasElement); addListener(doc, 'touchend', this._onTouchEnd, addEventOptions); - addListener(doc, 'touchmove', this._onMouseMove, addEventOptions); + // if we scroll don't register the touch move event + shouldPreventScrolling && addListener(doc, 'touchmove', this._onMouseMove, addEventOptions); // Unbind mousedown to prevent double triggers from touch devices removeListener(canvasElement, "".concat(eventTypePrefix, "down"), this._onMouseDown); } @@ -18914,8 +18958,10 @@ let measuringContext; */ function getMeasuringContext() { if (!measuringContext) { - const canvas = createCanvasElement(); - canvas.width = canvas.height = 0; + const canvas = createCanvasElementFor({ + width: 0, + height: 0 + }); measuringContext = canvas.getContext('2d'); } return measuringContext; @@ -18994,11 +19040,36 @@ class FabricText extends StyledText { this._clearCache(); this.dirty = true; if (this.path) { - this.width = this.path.width; - this.height = this.path.height; + this.calcTextWidth(); + // gets all the charboxes and transform by the path angle + const points = []; + this.__charBounds.forEach(lineBoxes => { + lineBoxes.forEach(_ref => { + let { + width, + height, + renderLeft, + renderTop, + angle + } = _ref; + const wBy2 = width / 2; + const h = height * 0.75; + const m = createRotateMatrix({ + angle: radiansToDegrees(angle) + }); + m[4] = renderLeft; + m[5] = renderTop; + points.push(new Point(-wBy2, -h).transform(m), new Point(wBy2, -h).transform(m), new Point(wBy2, h).transform(m), new Point(-wBy2, h).transform(m)); + }); + }); + const bbox = makeBoundingBoxFromPoints(points); + this.pathOffset = new Point(bbox.width / 2 + bbox.left, bbox.height / 2 + bbox.top); + this.width = bbox.width; + this.height = bbox.height; } else { this.width = this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH; this.height = this.calcTextHeight(); + this.pathOffset = new Point(0, 0); } if (this.textAlign.includes(JUSTIFY)) { // once text is measured we need to make space fatter to make justified text. @@ -19112,6 +19183,7 @@ class FabricText extends StyledText { */ _render(ctx) { const path = this.path; + ctx.translate(-this.pathOffset.x, -this.pathOffset.y); path && !path.isNotVisible() && path._render(ctx); this._setTextStyles(ctx); this._renderTextLinesBackground(ctx); @@ -19648,10 +19720,13 @@ class FabricText extends StyledText { * @return {CanvasPattern} a pattern to use as fill/stroke style */ _applyPatternGradientTransformText(filler) { - const pCanvas = createCanvasElement(), - // TODO: verify compatibility with strokeUniform - width = this.width + this.strokeWidth, + // TODO: verify compatibility with strokeUniform + const width = this.width + this.strokeWidth, height = this.height + this.strokeWidth, + pCanvas = createCanvasElementFor({ + width, + height + }), pCtx = pCanvas.getContext('2d'); pCanvas.width = width; pCanvas.height = height; @@ -19705,11 +19780,11 @@ class FabricText extends StyledText { * @param {CompleteTextStyleDeclaration} style with stroke and strokeWidth defined * @returns */ - _setStrokeStyles(ctx, _ref) { + _setStrokeStyles(ctx, _ref2) { let { stroke, strokeWidth - } = _ref; + } = _ref2; ctx.lineWidth = strokeWidth; ctx.lineCap = this.strokeLineCap; ctx.lineDashOffset = this.strokeDashOffset; @@ -19725,10 +19800,10 @@ class FabricText extends StyledText { * @param {CompleteTextStyleDeclaration} style with ill defined * @returns */ - _setFillStyles(ctx, _ref2) { + _setFillStyles(ctx, _ref3) { let { fill - } = _ref2; + } = _ref3; return this.handleFiller(ctx, 'fillStyle', fill); } @@ -20811,6 +20886,24 @@ class ITextBehavior extends FabricText { if (this.isEditing || !this.editable) { return; } + this.enterEditingImpl(); + this.fire('editing:entered', e ? { + e + } : undefined); + this._fireSelectionChanged(); + if (this.canvas) { + this.canvas.fire('text:editing:entered', { + target: this, + e + }); + this.canvas.requestRenderAll(); + } + } + + /** + * runs the actual logic that enter from editing state, see {@link enterEditing} + */ + enterEditingImpl() { if (this.canvas) { this.canvas.calcOffset(); this.canvas.textEditingManager.exitTextEditing(); @@ -20824,17 +20917,6 @@ class ITextBehavior extends FabricText { this._setEditingProps(); this._textBeforeEdit = this.text; this._tick(); - this.fire('editing:entered', e ? { - e - } : undefined); - this._fireSelectionChanged(); - if (this.canvas) { - this.canvas.fire('text:editing:entered', { - target: this, - e - }); - this.canvas.requestRenderAll(); - } } /** @@ -21055,6 +21137,9 @@ class ITextBehavior extends FabricText { /** * runs the actual logic that exits from editing state, see {@link exitEditing} + * Please use exitEditingImpl, this function was kept to avoid breaking changes. + * Will be removed in fabric 7.0 + * @deprecated use "exitEditingImpl" */ _exitEditing() { const hiddenTextarea = this.hiddenTextarea; @@ -21070,10 +21155,10 @@ class ITextBehavior extends FabricText { } /** - * Exits from editing state and fires relevant events + * runs the actual logic that exits from editing state, see {@link exitEditing} + * But it does not fire events */ - exitEditing() { - const isTextChanged = this._textBeforeEdit !== this.text; + exitEditingImpl() { this._exitEditing(); this.selectionEnd = this.selectionStart; this._restoreEditingProps(); @@ -21081,6 +21166,14 @@ class ITextBehavior extends FabricText { this.initDimensions(); this.setCoords(); } + } + + /** + * Exits from editing state and fires relevant events + */ + exitEditing() { + const isTextChanged = this._textBeforeEdit !== this.text; + this.exitEditingImpl(); this.fire('editing:exited'); isTextChanged && this.fire(MODIFIED); if (this.canvas) { @@ -22546,7 +22639,7 @@ class IText extends ITextClickBehavior { return; } const boundaries = this._getCursorBoundaries(); - if (this.selectionStart === this.selectionEnd) { + if (this.selectionStart === this.selectionEnd && !this.inCompositionMode) { this.renderCursor(ctx, boundaries); } else { this.renderSelection(ctx, boundaries); @@ -22636,8 +22729,7 @@ class IText extends ITextClickBehavior { * If contextTop is not available, do nothing. */ renderCursorAt(selectionStart) { - const boundaries = this._getCursorBoundaries(selectionStart, true); - this._renderCursor(this.canvas.contextTop, boundaries, selectionStart); + this._renderCursor(this.canvas.contextTop, this._getCursorBoundaries(selectionStart, true), selectionStart); } /** @@ -22648,7 +22740,16 @@ class IText extends ITextClickBehavior { renderCursor(ctx, boundaries) { this._renderCursor(ctx, boundaries, this.selectionStart); } - _renderCursor(ctx, boundaries, selectionStart) { + + /** + * Return the data needed to render the cursor for given selection start + * The left,top are relative to the object, while width and height are prescaled + * to look think with canvas zoom and object scaling, + * so they depend on canvas and object scaling + */ + getCursorRenderingData() { + let selectionStart = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.selectionStart; + let boundaries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._getCursorBoundaries(selectionStart); const cursorLocation = this.get2DCursorLocation(selectionStart), lineIndex = cursorLocation.lineIndex, charIndex = cursorLocation.charIndex > 0 ? cursorLocation.charIndex - 1 : 0, @@ -22657,14 +22758,32 @@ class IText extends ITextClickBehavior { cursorWidth = this.cursorWidth / multiplier, dy = this.getValueOfPropertyAt(lineIndex, charIndex, 'deltaY'), topOffset = boundaries.topOffset + (1 - this._fontSizeFraction) * this.getHeightOfLine(lineIndex) / this.lineHeight - charHeight * (1 - this._fontSizeFraction); - if (this.inCompositionMode) { - // TODO: investigate why there isn't a return inside the if, - // and why can't happen at the top of the function - this.renderSelection(ctx, boundaries); - } - ctx.fillStyle = this.cursorColor || this.getValueOfPropertyAt(lineIndex, charIndex, FILL); - ctx.globalAlpha = this._currentCursorOpacity; - ctx.fillRect(boundaries.left + boundaries.leftOffset - cursorWidth / 2, topOffset + boundaries.top + dy, cursorWidth, charHeight); + return { + color: this.cursorColor || this.getValueOfPropertyAt(lineIndex, charIndex, 'fill'), + opacity: this._currentCursorOpacity, + left: boundaries.left + boundaries.leftOffset - cursorWidth / 2, + top: topOffset + boundaries.top + dy, + width: cursorWidth, + height: charHeight + }; + } + + /** + * Render the cursor at the given selectionStart. + * + */ + _renderCursor(ctx, boundaries, selectionStart) { + const { + color, + opacity, + left, + top, + width, + height + } = this.getCursorRenderingData(selectionStart, boundaries); + ctx.fillStyle = color; + ctx.globalAlpha = opacity; + ctx.fillRect(left, top, width, height); } /** @@ -22795,7 +22914,7 @@ class IText extends ITextClickBehavior { }; } dispose() { - this._exitEditing(); + this.exitEditingImpl(); this.draggableTextDelegate.dispose(); super.dispose(); } @@ -23800,9 +23919,10 @@ class WebGLFilterBackend { * class properties to the GLFilterBackend class. */ createWebGLCanvas(width, height) { - const canvas = createCanvasElement(); - canvas.width = width; - canvas.height = height; + const canvas = createCanvasElementFor({ + width, + height + }); const glOptions = { alpha: true, premultipliedAlpha: false, @@ -24432,15 +24552,15 @@ class FabricImage extends FabricObject { this._lastScaleY = scaleY; return; } - const canvasEl = createCanvasElement(), - sourceWidth = elementToFilter.width, - sourceHeight = elementToFilter.height; - canvasEl.width = sourceWidth; - canvasEl.height = sourceHeight; + const canvasEl = createCanvasElementFor(elementToFilter), + { + width, + height + } = elementToFilter; this._element = canvasEl; this._lastScaleX = filter.scaleX = scaleX; this._lastScaleY = filter.scaleY = scaleY; - getFilterBackend().applyFilters([filter], elementToFilter, sourceWidth, sourceHeight, this._element); + getFilterBackend().applyFilters([filter], elementToFilter, width, height, this._element); this._filterScalingX = canvasEl.width / this._originalElement.width; this._filterScalingY = canvasEl.height / this._originalElement.height; } @@ -24472,9 +24592,10 @@ class FabricImage extends FabricObject { if (this._element === this._originalElement) { // if the _element a reference to _originalElement // we need to create a new element to host the filtered pixels - const canvasEl = createCanvasElement(); - canvasEl.width = sourceWidth; - canvasEl.height = sourceHeight; + const canvasEl = createCanvasElementFor({ + width: sourceWidth, + height: sourceHeight + }); this._element = canvasEl; this._filteredEl = canvasEl; } else if (this._filteredEl) { @@ -25149,13 +25270,13 @@ class ElementsParser { // TODO: resolveClipPath could be run once per clippath with minor work per object. // is a refactor that i m not sure is worth on this code - async resolveClipPath(obj, usingElement) { + async resolveClipPath(obj, usingElement, exactOwner) { const clipPathElements = this.extractPropertyDefinition(obj, 'clipPath', this.clipPaths); if (clipPathElements) { const objTransformInv = invertTransform(obj.calcTransformMatrix()); const clipPathTag = clipPathElements[0].parentElement; let clipPathOwner = usingElement; - while (clipPathOwner.parentElement && clipPathOwner.getAttribute('clip-path') !== obj.clipPath) { + while (!exactOwner && clipPathOwner.parentElement && clipPathOwner.getAttribute('clip-path') !== obj.clipPath) { clipPathOwner = clipPathOwner.parentElement; } // move the clipPath tag as sibling to the real element that is using it @@ -25178,7 +25299,11 @@ class ElementsParser { const clipPath = container.length === 1 ? container[0] : new Group(container); const gTransform = multiplyTransformMatrices(objTransformInv, clipPath.calcTransformMatrix()); if (clipPath.clipPath) { - await this.resolveClipPath(clipPath, clipPathOwner); + await this.resolveClipPath(clipPath, clipPathOwner, + // this is tricky. + // it tries to differentiate from when clipPaths are inherited by outside groups + // or when are really clipPaths referencing other clipPaths + clipPathTag.getAttribute('clip-path') ? clipPathOwner : undefined); } const { scaleX, @@ -25592,7 +25717,10 @@ const isWebGLPipelineState = options => { * putImageData is faster than drawImage for that specific operation. */ const isPutImageFaster = (width, height) => { - const targetCanvas = createCanvasElement(); + const targetCanvas = createCanvasElementFor({ + width, + height + }); const sourceCanvas = createCanvasElement(); const gl = sourceCanvas.getContext('webgl'); // eslint-disable-next-line no-undef @@ -25606,8 +25734,6 @@ const isPutImageFaster = (width, height) => { targetCanvas: targetCanvas }; let startTime; - targetCanvas.width = width; - targetCanvas.height = height; startTime = getFabricWindow().performance.now(); WebGLFilterBackend.prototype.copyGLTo2D.call(testContext, gl, testPipelineState); const drawImageTime = getFabricWindow().performance.now() - startTime; @@ -25895,9 +26021,14 @@ class BaseFilter { */ createHelpLayer(options) { if (!options.helpLayer) { - const helpLayer = createCanvasElement(); - helpLayer.width = options.sourceWidth; - helpLayer.height = options.sourceHeight; + const { + sourceWidth, + sourceHeight + } = options; + const helpLayer = createCanvasElementFor({ + width: sourceWidth, + height: sourceHeight + }); options.helpLayer = helpLayer; } } diff --git a/dist/index.node.mjs.map b/dist/index.node.mjs.map index fb5194143a9..6d2c832372a 100644 --- a/dist/index.node.mjs.map +++ b/dist/index.node.mjs.map @@ -1 +1 @@ -{"version":3,"file":"index.node.mjs","sources":["../src/config.ts","../src/util/internals/console.ts","../src/filters/GLProbes/GLProbe.ts","../src/filters/GLProbes/WebGLProbe.ts","../src/env/browser.ts","../src/env/index.ts","../src/filters/GLProbes/NodeGLProbe.ts","../src/env/node.ts","../src/cache.ts","../src/constants.ts","../src/ClassRegistry.ts","../src/util/animation/AnimationRegistry.ts","../src/Observable.ts","../src/util/internals/removeFromArray.ts","../src/util/misc/cos.ts","../src/util/misc/sin.ts","../src/Point.ts","../src/Collection.ts","../src/CommonMethods.ts","../src/util/animation/AnimationFrameProvider.ts","../src/util/internals/uid.ts","../src/util/misc/dom.ts","../src/util/misc/radiansDegreesConversion.ts","../src/util/misc/matrix.ts","../src/util/misc/objectEnlive.ts","../src/util/misc/pick.ts","../src/color/color_map.ts","../src/color/constants.ts","../src/color/util.ts","../src/color/Color.ts","../src/util/misc/toFixed.ts","../src/util/misc/svgParsing.ts","../src/util/typeAssertions.ts","../src/util/dom_misc.ts","../src/canvas/DOMManagers/util.ts","../src/canvas/DOMManagers/StaticCanvasDOMManager.ts","../src/canvas/StaticCanvasOptions.ts","../src/canvas/StaticCanvas.ts","../src/util/dom_event.ts","../src/util/misc/boundingBoxFromPoints.ts","../src/util/misc/objectTransforms.ts","../src/util/misc/planeChange.ts","../src/controls/fireEvent.ts","../src/util/misc/resolveOrigin.ts","../src/controls/util.ts","../src/controls/drag.ts","../src/shapes/Object/FabricObjectSVGExportMixin.ts","../src/parser/getSvgRegex.ts","../src/parser/constants.ts","../src/util/misc/vectors.ts","../src/Shadow.ts","../src/util/misc/capValue.ts","../src/shapes/Object/defaultValues.ts","../src/util/animation/easing.ts","../src/util/animation/AnimationBase.ts","../src/util/animation/ValueAnimation.ts","../src/util/animation/ArrayAnimation.ts","../src/util/animation/ColorAnimation.ts","../src/util/animation/animate.ts","../src/Intersection.ts","../src/shapes/Object/ObjectGeometry.ts","../src/shapes/Object/Object.ts","../src/controls/wrapWithFireEvent.ts","../src/controls/wrapWithFixedAnchor.ts","../src/controls/changeWidth.ts","../src/controls/controlRendering.ts","../src/controls/Control.ts","../src/controls/rotate.ts","../src/controls/scale.ts","../src/controls/skew.ts","../src/controls/scaleSkew.ts","../src/controls/commonControls.ts","../src/shapes/Object/InteractiveObject.ts","../src/util/applyMixins.ts","../src/shapes/Object/FabricObject.ts","../src/util/misc/isTransparent.ts","../src/util/misc/rotatePoint.ts","../src/util/internals/findRight.ts","../src/util/misc/projectStroke/StrokeProjectionsBase.ts","../src/util/misc/projectStroke/StrokeLineJoinProjections.ts","../src/util/misc/projectStroke/StrokeLineCapProjections.ts","../src/util/misc/projectStroke/index.ts","../src/util/internals/cloneStyles.ts","../src/util/lang_string.ts","../src/util/misc/textStyles.ts","../src/parser/attributes.ts","../src/parser/selectorMatches.ts","../src/parser/doesSomeParentMatch.ts","../src/parser/elementMatchesRule.ts","../src/parser/getGlobalStylesForElement.ts","../src/parser/normalizeAttr.ts","../src/util/internals/cleanupSvgAttribute.ts","../src/parser/parseTransformAttribute.ts","../src/parser/normalizeValue.ts","../src/parser/parseFontDeclaration.ts","../src/parser/parseStyleObject.ts","../src/parser/parseStyleString.ts","../src/parser/parseStyleAttribute.ts","../src/parser/setStrokeFillOpacity.ts","../src/parser/parseAttributes.ts","../src/shapes/Rect.ts","../src/LayoutManager/constants.ts","../src/LayoutManager/LayoutStrategies/utils.ts","../src/LayoutManager/LayoutStrategies/LayoutStrategy.ts","../src/LayoutManager/LayoutStrategies/FitContentLayout.ts","../src/LayoutManager/LayoutManager.ts","../src/shapes/Group.ts","../src/util/misc/groupSVGElements.ts","../src/util/misc/findScaleTo.ts","../src/util/path/regex.ts","../src/util/path/index.ts","../src/util/dom_style.ts","../src/util/misc/mergeClipPaths.ts","../src/util/internals/getRandomInt.ts","../src/util/internals/dom_request.ts","../src/util/transform_matrix_removal.ts","../src/canvas/DOMManagers/CanvasDOMManager.ts","../src/canvas/CanvasOptions.ts","../src/canvas/SelectableCanvas.ts","../src/canvas/TextEditingManager.ts","../src/canvas/Canvas.ts","../src/gradient/constants.ts","../src/util/internals/ifNaN.ts","../src/parser/percent.ts","../src/gradient/parser/parseColorStops.ts","../src/gradient/parser/misc.ts","../src/gradient/parser/parseCoords.ts","../src/gradient/Gradient.ts","../src/Pattern/Pattern.ts","../src/brushes/BaseBrush.ts","../src/shapes/Path.ts","../src/brushes/PencilBrush.ts","../src/shapes/Circle.ts","../src/brushes/CircleBrush.ts","../src/brushes/SprayBrush.ts","../src/brushes/PatternBrush.ts","../src/shapes/Line.ts","../src/shapes/Triangle.ts","../src/shapes/Ellipse.ts","../src/parser/parsePointsAttribute.ts","../src/shapes/Polyline.ts","../src/shapes/Polygon.ts","../src/shapes/Text/constants.ts","../src/shapes/Text/StyledText.ts","../src/shapes/Text/TextSVGExportMixin.ts","../src/shapes/Text/Text.ts","../src/shapes/IText/DraggableTextDelegate.ts","../src/shapes/IText/ITextBehavior.ts","../src/shapes/IText/ITextKeyBehavior.ts","../src/shapes/IText/ITextClickBehavior.ts","../src/shapes/IText/constants.ts","../src/shapes/IText/IText.ts","../src/shapes/Textbox.ts","../src/LayoutManager/LayoutStrategies/ClipPathLayout.ts","../src/LayoutManager/LayoutStrategies/FixedLayout.ts","../src/LayoutManager/ActiveSelectionLayoutManager.ts","../src/shapes/ActiveSelection.ts","../src/filters/Canvas2dFilterBackend.ts","../src/filters/WebGLFilterBackend.ts","../src/filters/FilterBackend.ts","../src/shapes/Image.ts","../src/parser/applyViewboxTransform.ts","../src/parser/getTagName.ts","../src/parser/hasInvalidAncestor.ts","../src/parser/getMultipleNodes.ts","../src/parser/parseUseDirectives.ts","../src/parser/recursivelyParseGradientsXlink.ts","../src/parser/getGradientDefs.ts","../src/parser/getCSSRules.ts","../src/parser/elements_parser.ts","../src/parser/parseSVGDocument.ts","../src/parser/loadSVGFromString.ts","../src/parser/loadSVGFromURL.ts","../src/controls/polyControl.ts","../src/controls/pathControl.ts","../src/filters/utils.ts","../src/filters/shaders/baseFilter.ts","../src/filters/BaseFilter.ts","../src/filters/shaders/blendColor.ts","../src/filters/BlendColor.ts","../src/filters/shaders/blendImage.ts","../src/filters/BlendImage.ts","../src/filters/shaders/blur.ts","../src/filters/Blur.ts","../src/filters/shaders/brightness.ts","../src/filters/Brightness.ts","../src/filters/shaders/colorMatrix.ts","../src/filters/ColorMatrix.ts","../src/filters/ColorMatrixFilters.ts","../src/filters/Composed.ts","../src/filters/shaders/constrast.ts","../src/filters/Contrast.ts","../src/filters/shaders/convolute.ts","../src/filters/Convolute.ts","../src/filters/shaders/gamma.ts","../src/filters/Gamma.ts","../src/filters/shaders/grayscale.ts","../src/filters/Grayscale.ts","../src/filters/HueRotation.ts","../src/filters/shaders/invert.ts","../src/filters/Invert.ts","../src/filters/shaders/noise.ts","../src/filters/Noise.ts","../src/filters/shaders/pixelate.ts","../src/filters/Pixelate.ts","../src/filters/shaders/removeColor.ts","../src/filters/RemoveColor.ts","../src/filters/Resize.ts","../src/filters/shaders/saturation.ts","../src/filters/Saturation.ts","../src/filters/shaders/vibrance.ts","../src/filters/Vibrance.ts","../index.node.ts"],"sourcesContent":["export type TConfiguration = Partial;\n\nclass BaseConfiguration {\n /**\n * Browser-specific constant to adjust CanvasRenderingContext2D.shadowBlur value,\n * which is unitless and not rendered equally across browsers.\n *\n * Values that work quite well (as of October 2017) are:\n * - Chrome: 1.5\n * - Edge: 1.75\n * - Firefox: 0.9\n * - Safari: 0.95\n *\n * @since 2.0.0\n * @type Number\n * @default 1\n */\n browserShadowBlurConstant = 1;\n\n /**\n * Pixel per Inch as a default value set to 96. Can be changed for more realistic conversion.\n */\n DPI = 96;\n\n /**\n * Device Pixel Ratio\n * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\n */\n devicePixelRatio =\n typeof window !== 'undefined' ? window.devicePixelRatio : 1; // eslint-disable-line no-restricted-globals\n\n /**\n * Pixel limit for cache canvases. 1Mpx , 4Mpx should be fine.\n * @since 1.7.14\n * @type Number\n * @default\n */\n perfLimitSizeTotal = 2097152;\n\n /**\n * Pixel limit for cache canvases width or height. IE fixes the maximum at 5000\n * @since 1.7.14\n * @type Number\n * @default\n */\n maxCacheSideLimit = 4096;\n\n /**\n * Lowest pixel limit for cache canvases, set at 256PX\n * @since 1.7.14\n * @type Number\n * @default\n */\n minCacheSideLimit = 256;\n\n /**\n * When 'true', style information is not retained when copy/pasting text, making\n * pasted text use destination style.\n * Defaults to 'false'.\n * @type Boolean\n * @default\n * @deprecated\n */\n disableStyleCopyPaste = false;\n\n /**\n * Enable webgl for filtering picture is available\n * A filtering backend will be initialized, this will both take memory and\n * time since a default 2048x2048 canvas will be created for the gl context\n * @since 2.0.0\n * @type Boolean\n * @default\n */\n enableGLFiltering = true;\n\n /**\n * if webgl is enabled and available, textureSize will determine the size\n * of the canvas backend\n *\n * In order to support old hardware set to `2048` to avoid OOM\n *\n * @since 2.0.0\n * @type Number\n * @default\n */\n textureSize = 4096;\n\n /**\n * Skip performance testing of setupGLContext and force the use of putImageData that seems to be the one that works best on\n * Chrome + old hardware. if your users are experiencing empty images after filtering you may try to force this to true\n * this has to be set before instantiating the filtering backend ( before filtering the first image )\n * @type Boolean\n * @default false\n */\n forceGLPutImageData = false;\n\n /**\n * If disabled boundsOfCurveCache is not used. For apps that make heavy usage of pencil drawing probably disabling it is better\n * With the standard behaviour of fabric to translate all curves in absolute commands and by not subtracting the starting point from\n * the curve is very hard to hit any cache.\n * Enable only if you know why it could be useful.\n * Candidate for removal/simplification\n * @default false\n */\n cachesBoundsOfCurve = false;\n\n /**\n * Map of font files\n * Map of font files\n */\n fontPaths: Record = {};\n\n /**\n * Defines the number of fraction digits to use when serializing object values.\n * Used in exporting methods (`toObject`, `toJSON`, `toSVG`)\n * You can use it to increase/decrease precision of such values like left, top, scaleX, scaleY, etc.\n */\n NUM_FRACTION_DIGITS = 4;\n}\n\nexport class Configuration extends BaseConfiguration {\n constructor(config?: TConfiguration) {\n super();\n this.configure(config);\n }\n\n configure(config: TConfiguration = {}) {\n Object.assign(this, config);\n }\n\n /**\n * Map of font files\n */\n addFonts(\n paths: Record = {},\n ) {\n this.fontPaths = {\n ...this.fontPaths,\n ...paths,\n };\n }\n\n removeFonts(fontFamilys: string[] = []) {\n fontFamilys.forEach((fontFamily) => {\n delete this.fontPaths[fontFamily];\n });\n }\n\n clearFonts() {\n this.fontPaths = {};\n }\n\n restoreDefaults(keys?: (keyof T)[]) {\n const defaults = new BaseConfiguration() as T;\n const config =\n keys?.reduce((acc, key) => {\n acc[key] = defaults[key];\n return acc;\n }, {} as T) || defaults;\n this.configure(config);\n }\n}\n\nexport const config = new Configuration();\n","export const log = (\n severity: 'log' | 'warn' | 'error',\n ...optionalParams: any[]\n) =>\n // eslint-disable-next-line no-restricted-syntax\n console[severity]('fabric', ...optionalParams);\n\nexport class FabricError extends Error {\n constructor(message?: string, options?: ErrorOptions) {\n super(`fabric: ${message}`, options);\n }\n}\n\nexport class SignalAbortedError extends FabricError {\n constructor(context: string) {\n super(`${context} 'options.signal' is in 'aborted' state`);\n }\n}\n","export type GLPrecision = 'lowp' | 'mediump' | 'highp';\n\nexport abstract class GLProbe {\n declare GLPrecision: GLPrecision | undefined;\n abstract queryWebGL(canvas: HTMLCanvasElement): void;\n abstract isSupported(textureSize: number): boolean;\n}\n","import { log } from '../../util/internals/console';\nimport { GLProbe } from './GLProbe';\nimport type { GLPrecision } from './GLProbe';\n\n/**\n * Lazy initialize WebGL constants\n */\nexport class WebGLProbe extends GLProbe {\n declare maxTextureSize?: number;\n\n /**\n * Tests if webgl supports certain precision\n * @param {WebGL} Canvas WebGL context to test on\n * @param {GLPrecision} Precision to test can be any of following\n * @returns {Boolean} Whether the user's browser WebGL supports given precision.\n */\n private testPrecision(\n gl: WebGLRenderingContext,\n precision: GLPrecision,\n ): boolean {\n const fragmentSource = `precision ${precision} float;\\nvoid main(){}`;\n const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n if (!fragmentShader) {\n return false;\n }\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n return !!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS);\n }\n\n /**\n * query browser for WebGL\n */\n queryWebGL(canvas: HTMLCanvasElement) {\n const gl = canvas.getContext('webgl');\n if (gl) {\n this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n this.GLPrecision = (['highp', 'mediump', 'lowp'] as const).find(\n (precision) => this.testPrecision(gl, precision),\n );\n gl.getExtension('WEBGL_lose_context')!.loseContext();\n log('log', `WebGL: max texture size ${this.maxTextureSize}`);\n }\n }\n\n isSupported(textureSize: number) {\n return !!this.maxTextureSize && this.maxTextureSize >= textureSize;\n }\n}\n","/* eslint-disable no-restricted-globals */\nimport { WebGLProbe } from '../filters/GLProbes/WebGLProbe';\nimport type { TCopyPasteData, TFabricEnv } from './types';\n\nconst copyPasteData: TCopyPasteData = {};\n\nexport const getEnv = (): TFabricEnv => {\n return {\n document,\n window,\n isTouchSupported:\n 'ontouchstart' in window ||\n 'ontouchstart' in document ||\n (window && window.navigator && window.navigator.maxTouchPoints > 0),\n WebGLProbe: new WebGLProbe(),\n dispose() {\n // noop\n },\n copyPasteData,\n };\n};\n","/**\n * This file is consumed by fabric.\n * The `./node` and `./browser` files define the env variable that is used by this module.\n * The `./browser` module is defined to be the default env and doesn't set the env at all.\n * This is done in order to support isomorphic usage for browser and node applications\n * since window and document aren't defined at time of import in SSR, we can't set env so we avoid it by deferring to the default env.\n */\n\nimport { config } from '../config';\nimport { getEnv as getBrowserEnv } from './browser';\nimport type { TFabricEnv } from './types';\nimport type { DOMWindow } from 'jsdom';\n\nlet env: TFabricEnv;\n\n/**\n * Sets the environment variables used by fabric.\\\n * This is exposed for special cases, such as configuring a test environment, and should be used with care.\n *\n * **CAUTION**: Must be called before using the package.\n *\n * @example\n * Passing `window` and `document` objects to fabric (in case they are mocked or something)\n * import { getEnv, setEnv } from 'fabric';\n * // we want fabric to use the `window` and `document` objects exposed by the environment we are running in.\n * setEnv({ ...getEnv(), window, document });\n * // done with setup, using fabric is now safe\n */\nexport const setEnv = (value: TFabricEnv) => {\n env = value;\n};\n\n/**\n * In order to support SSR we **MUST** access the browser env only after the window has loaded\n */\nexport const getEnv = () => env || (env = getBrowserEnv());\n\nexport const getFabricDocument = (): Document => getEnv().document;\n\nexport const getFabricWindow = (): (Window & typeof globalThis) | DOMWindow =>\n getEnv().window;\n\n/**\n * @returns the config value if defined, fallbacks to the environment value\n */\nexport const getDevicePixelRatio = () =>\n Math.max(config.devicePixelRatio ?? getFabricWindow().devicePixelRatio, 1);\n","import { GLProbe } from './GLProbe';\n\n/**\n * @todo GL rendering in node is possible:\n * - https://github.com/stackgl/headless-gl\n * - https://github.com/akira-cn/node-canvas-webgl\n */\nexport class NodeGLProbe extends GLProbe {\n queryWebGL() {\n // noop\n }\n isSupported() {\n return false;\n }\n}\n","/* eslint-disable no-restricted-globals */\nimport type { Canvas as NodeCanvas } from 'canvas';\nimport { JSDOM } from 'jsdom';\n// @ts-expect-error internal import\nimport utils from 'jsdom/lib/jsdom/living/generated/utils.js';\nimport { NodeGLProbe } from '../filters/GLProbes/NodeGLProbe';\nimport type { TCopyPasteData, TFabricEnv } from './types';\n\nconst { implForWrapper: jsdomImplForWrapper } = utils;\n\nconst copyPasteData: TCopyPasteData = {};\n\nconst { window: JSDOMWindow } = new JSDOM(\n decodeURIComponent(\n '%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E',\n ),\n {\n resources: 'usable',\n // needed for `requestAnimationFrame`\n pretendToBeVisual: true,\n },\n);\n\nexport const getNodeCanvas = (canvasEl: HTMLCanvasElement) => {\n const impl = jsdomImplForWrapper(canvasEl);\n return (impl._canvas || impl._image) as NodeCanvas;\n};\n\nexport const dispose = (element: Element) => {\n const impl = jsdomImplForWrapper(element);\n if (impl) {\n impl._image = null;\n impl._canvas = null;\n // unsure if necessary\n impl._currentSrc = null;\n impl._attributes = null;\n impl._classList = null;\n }\n};\n\nexport const getEnv = (): TFabricEnv => {\n return {\n document: JSDOMWindow.document,\n window: JSDOMWindow,\n isTouchSupported: false,\n WebGLProbe: new NodeGLProbe(),\n dispose,\n copyPasteData,\n };\n};\n","import { config } from './config';\nimport type { TRectBounds } from './typedefs';\n\nexport class Cache {\n /**\n * Cache of widths of chars in text rendering.\n */\n charWidthsCache: Record<\n /** fontFamily */ string,\n Record<\n /** fontStyleCacheKey */ string,\n Record\n >\n > = {};\n\n /**\n * @return {Object} reference to cache\n */\n getFontCache({\n fontFamily,\n fontStyle,\n fontWeight,\n }: {\n fontFamily: string;\n fontStyle: string;\n fontWeight: string | number;\n }) {\n fontFamily = fontFamily.toLowerCase();\n if (!this.charWidthsCache[fontFamily]) {\n this.charWidthsCache[fontFamily] = {};\n }\n const fontCache = this.charWidthsCache[fontFamily];\n const cacheKey = `${fontStyle.toLowerCase()}_${(\n fontWeight + ''\n ).toLowerCase()}`;\n if (!fontCache[cacheKey]) {\n fontCache[cacheKey] = {};\n }\n return fontCache[cacheKey];\n }\n\n /**\n * Clear char widths cache for the given font family or all the cache if no\n * fontFamily is specified.\n * Use it if you know you are loading fonts in a lazy way and you are not waiting\n * for custom fonts to load properly when adding text objects to the canvas.\n * If a text object is added when its own font is not loaded yet, you will get wrong\n * measurement and so wrong bounding boxes.\n * After the font cache is cleared, either change the textObject text content or call\n * initDimensions() to trigger a recalculation\n * @param {String} [fontFamily] font family to clear\n */\n clearFontCache(fontFamily?: string) {\n fontFamily = (fontFamily || '').toLowerCase();\n if (!fontFamily) {\n this.charWidthsCache = {};\n } else if (this.charWidthsCache[fontFamily]) {\n delete this.charWidthsCache[fontFamily];\n }\n }\n\n /**\n * Given current aspect ratio, determines the max width and height that can\n * respect the total allowed area for the cache.\n * @param {number} ar aspect ratio\n * @return {number[]} Limited dimensions X and Y\n */\n limitDimsByArea(ar: number) {\n const { perfLimitSizeTotal } = config;\n const roughWidth = Math.sqrt(perfLimitSizeTotal * ar);\n // we are not returning a point on purpose, to avoid circular dependencies\n // this is an internal utility\n return [\n Math.floor(roughWidth),\n Math.floor(perfLimitSizeTotal / roughWidth),\n ];\n }\n\n /**\n * This object keeps the results of the boundsOfCurve calculation mapped by the joined arguments necessary to calculate it.\n * It does speed up calculation, if you parse and add always the same paths, but in case of heavy usage of freedrawing\n * you do not get any speed benefit and you get a big object in memory.\n * The object was a private variable before, while now is appended to the lib so that you have access to it and you\n * can eventually clear it.\n * It was an internal variable, is accessible since version 2.3.4\n */\n boundsOfCurveCache: Record = {};\n}\n\nexport const cache = new Cache();\n","import type { TMat2D } from './typedefs';\n// use this syntax so babel plugin see this import here\nimport { version } from '../package.json';\n\nexport const VERSION = version;\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop() {}\n\nexport const halfPI = Math.PI / 2;\nexport const twoMathPi = Math.PI * 2;\nexport const PiBy180 = Math.PI / 180;\n\nexport const iMatrix = Object.freeze([1, 0, 0, 1, 0, 0]) as TMat2D;\nexport const DEFAULT_SVG_FONT_SIZE = 16;\nexport const ALIASING_LIMIT = 2;\n\n/* \"magic number\" for bezier approximations of arcs (http://itc.ktu.lt/itc354/Riskus354.pdf) */\nexport const kRect = 1 - 0.5522847498;\n\nexport const CENTER = 'center';\nexport const LEFT = 'left';\nexport const TOP = 'top';\nexport const BOTTOM = 'bottom';\nexport const RIGHT = 'right';\nexport const NONE = 'none';\n\nexport const reNewline = /\\r?\\n/;\n\nexport const MOVING = 'moving';\nexport const SCALING = 'scaling';\nexport const ROTATING = 'rotating';\nexport const ROTATE = 'rotate';\nexport const SKEWING = 'skewing';\nexport const RESIZING = 'resizing';\nexport const MODIFY_POLY = 'modifyPoly';\nexport const MODIFY_PATH = 'modifyPath';\nexport const CHANGED = 'changed';\nexport const SCALE = 'scale';\nexport const SCALE_X = 'scaleX';\nexport const SCALE_Y = 'scaleY';\nexport const SKEW_X = 'skewX';\nexport const SKEW_Y = 'skewY';\nexport const FILL = 'fill';\nexport const STROKE = 'stroke';\nexport const MODIFIED = 'modified';\n","import { FabricError } from './util/internals/console';\n\n/*\n * This Map connects the objects type value with their\n * class implementation. It used from any object to understand which are\n * the classes to enlive when requesting a object.type = 'path' for example.\n * Objects uses it for clipPath, Canvas uses it for everything.\n * This is necessary for generic code to run and enlive instances from serialized representation.\n * You can customize which classes get enlived from SVG parsing using this classRegistry.\n * The Registry start empty and gets filled in depending which files you import.\n * If you want to be able to parse arbitrary SVGs or JSON representation of canvases, coming from\n * different sources you will need to import all fabric because you may need all classes.\n */\n\nexport const JSON = 'json';\nexport const SVG = 'svg';\n\nexport class ClassRegistry {\n declare [JSON]: Map;\n declare [SVG]: Map;\n\n constructor() {\n this[JSON] = new Map();\n this[SVG] = new Map();\n }\n\n has(classType: string): boolean {\n return this[JSON].has(classType);\n }\n\n getClass(classType: string): T {\n const constructor = this[JSON].get(classType);\n if (!constructor) {\n throw new FabricError(`No class registered for ${classType}`);\n }\n return constructor;\n }\n\n setClass(classConstructor: any, classType?: string) {\n if (classType) {\n this[JSON].set(classType, classConstructor);\n } else {\n this[JSON].set(classConstructor.type, classConstructor);\n // legacy\n // @TODO: needs to be removed in fabric 7 or 8\n this[JSON].set(classConstructor.type.toLowerCase(), classConstructor);\n }\n }\n\n getSVGClass(SVGTagName: string): any {\n return this[SVG].get(SVGTagName);\n }\n\n setSVGClass(classConstructor: any, SVGTagName?: string) {\n this[SVG].set(\n SVGTagName ?? classConstructor.type.toLowerCase(),\n classConstructor,\n );\n }\n}\n\nexport const classRegistry = new ClassRegistry();\n","import type { StaticCanvas } from '../../canvas/StaticCanvas';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport type { AnimationBase } from './AnimationBase';\n\n/**\n * Array holding all running animations\n */\nclass AnimationRegistry extends Array {\n /**\n * Remove a single animation using an animation context\n * @param {AnimationBase} context\n */\n remove(context: AnimationBase) {\n const index = this.indexOf(context);\n index > -1 && this.splice(index, 1);\n }\n\n /**\n * Cancel all running animations on the next frame\n */\n cancelAll() {\n const animations = this.splice(0);\n animations.forEach((animation) => animation.abort());\n return animations;\n }\n\n /**\n * Cancel all running animations attached to a canvas on the next frame\n * @param {StaticCanvas} canvas\n */\n cancelByCanvas(canvas: StaticCanvas) {\n if (!canvas) {\n return [];\n }\n const animations = this.filter(\n (animation) =>\n animation.target === canvas ||\n (typeof animation.target === 'object' &&\n (animation.target as FabricObject)?.canvas === canvas),\n );\n animations.forEach((animation) => animation.abort());\n return animations;\n }\n\n /**\n * Cancel all running animations for target on the next frame\n * @param target\n */\n cancelByTarget(target: AnimationBase['target']) {\n if (!target) {\n return [];\n }\n const animations = this.filter((animation) => animation.target === target);\n animations.forEach((animation) => animation.abort());\n return animations;\n }\n}\n\nexport const runningAnimations = new AnimationRegistry();\n","export type TEventCallback = (options: T) => any;\n\ntype EventRegistryObject = {\n [K in keyof E]?: TEventCallback;\n};\n\n/**\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#events}\n * @see {@link http://fabricjs.com/events|Events demo}\n */\nexport class Observable {\n private __eventListeners: Record =\n {} as Record;\n\n /**\n * Observes specified event\n * @alias on\n * @param {string} eventName Event name (eg. 'after:render')\n * @param {EventRegistryObject} handlers key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function that receives a notification when an event of the specified type occurs\n * @return {Function} disposer\n */\n on(\n eventName: K,\n handler: TEventCallback,\n ): VoidFunction;\n on(handlers: EventRegistryObject): VoidFunction;\n on(\n arg0: K | EventRegistryObject,\n handler?: TEventCallback,\n ): VoidFunction {\n if (!this.__eventListeners) {\n this.__eventListeners = {} as Record;\n }\n if (typeof arg0 === 'object') {\n // one object with key/value pairs was passed\n Object.entries(arg0).forEach(([eventName, handler]) => {\n this.on(eventName as K, handler as TEventCallback);\n });\n return () => this.off(arg0);\n } else if (handler) {\n const eventName = arg0;\n if (!this.__eventListeners[eventName]) {\n this.__eventListeners[eventName] = [];\n }\n this.__eventListeners[eventName].push(handler);\n return () => this.off(eventName, handler);\n } else {\n // noop\n return () => false;\n }\n }\n\n /**\n * Observes specified event **once**\n * @alias once\n * @param {string} eventName Event name (eg. 'after:render')\n * @param {EventRegistryObject} handlers key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function that receives a notification when an event of the specified type occurs\n * @return {Function} disposer\n */\n once(\n eventName: K,\n handler: TEventCallback,\n ): VoidFunction;\n once(handlers: EventRegistryObject): VoidFunction;\n once(\n arg0: K | EventRegistryObject,\n handler?: TEventCallback,\n ): VoidFunction {\n if (typeof arg0 === 'object') {\n // one object with key/value pairs was passed\n const disposers: VoidFunction[] = [];\n Object.entries(arg0).forEach(([eventName, handler]) => {\n disposers.push(this.once(eventName as K, handler as TEventCallback));\n });\n return () => disposers.forEach((d) => d());\n } else if (handler) {\n const disposer = this.on(\n arg0,\n function onceHandler(this: Observable, ...args) {\n handler.call(this, ...args);\n disposer();\n },\n );\n return disposer;\n } else {\n // noop\n return () => false;\n }\n }\n\n /**\n * @private\n * @param {string} eventName\n * @param {Function} [handler]\n */\n private _removeEventListener(\n eventName: K,\n handler?: TEventCallback,\n ) {\n if (!this.__eventListeners[eventName]) {\n return;\n }\n\n if (handler) {\n const eventListener = this.__eventListeners[eventName];\n const index = eventListener.indexOf(handler);\n index > -1 && eventListener.splice(index, 1);\n } else {\n this.__eventListeners[eventName] = [];\n }\n }\n\n /**\n * Unsubscribe all event listeners for eventname.\n * Do not use this pattern. You could kill internal fabricJS events.\n * We know we should have protected events for internal flows, but we don't have yet\n * @deprecated\n * @param {string} eventName event name (eg. 'after:render')\n */\n off(eventName: K): void;\n /**\n * unsubscribe an event listener\n * @param {string} eventName event name (eg. 'after:render')\n * @param {TEventCallback} handler event listener to unsubscribe\n */\n off(eventName: K, handler: TEventCallback): void;\n /**\n * unsubscribe event listeners\n * @param handlers handlers key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n */\n off(handlers: EventRegistryObject): void;\n /**\n * unsubscribe all event listeners\n */\n off(): void;\n off(\n arg0?: K | EventRegistryObject,\n handler?: TEventCallback,\n ) {\n if (!this.__eventListeners) {\n return;\n }\n\n // remove all key/value pairs (event name -> event handler)\n if (typeof arg0 === 'undefined') {\n for (const eventName in this.__eventListeners) {\n this._removeEventListener(eventName);\n }\n }\n // one object with key/value pairs was passed\n else if (typeof arg0 === 'object') {\n Object.entries(arg0).forEach(([eventName, handler]) => {\n this._removeEventListener(eventName as K, handler as TEventCallback);\n });\n } else {\n this._removeEventListener(arg0, handler);\n }\n }\n\n /**\n * Fires event with an optional options object\n * @param {String} eventName Event name to fire\n * @param {Object} [options] Options object\n */\n fire(eventName: K, options?: EventSpec[K]) {\n if (!this.__eventListeners) {\n return;\n }\n\n const listenersForEvent = this.__eventListeners[eventName]?.concat();\n if (listenersForEvent) {\n for (let i = 0; i < listenersForEvent.length; i++) {\n listenersForEvent[i].call(this, options || {});\n }\n }\n }\n}\n","/**\n * Removes value from an array.\n * Presence of value (and its position in an array) is determined via `Array.prototype.indexOf`\n * @param {Array} array\n * @param {*} value\n * @return {Array} original array\n */\nexport const removeFromArray = (array: T[], value: T): T[] => {\n const idx = array.indexOf(value);\n if (idx !== -1) {\n array.splice(idx, 1);\n }\n return array;\n};\n","import type { TRadian } from '../../typedefs';\nimport { halfPI } from '../../constants';\n\n/**\n * Calculate the cos of an angle, avoiding returning floats for known results\n * This function is here just to avoid getting 0.999999999999999 when dealing\n * with numbers that are really 1 or 0.\n * @param {TRadian} angle the angle\n * @return {Number} the cosin value for angle.\n */\nexport const cos = (angle: TRadian): number => {\n if (angle === 0) {\n return 1;\n }\n const angleSlice = Math.abs(angle) / halfPI;\n switch (angleSlice) {\n case 1:\n case 3:\n return 0;\n case 2:\n return -1;\n }\n return Math.cos(angle);\n};\n","import type { TRadian } from '../../typedefs';\nimport { halfPI } from '../../constants';\n\n/**\n * Calculate the cos of an angle, avoiding returning floats for known results\n * This function is here just to avoid getting 0.999999999999999 when dealing\n * with numbers that are really 1 or 0.\n * @param {TRadian} angle the angle\n * @return {Number} the sin value for angle.\n */\nexport const sin = (angle: TRadian): number => {\n if (angle === 0) {\n return 0;\n }\n const angleSlice = angle / halfPI;\n const value = Math.sign(angle);\n switch (angleSlice) {\n case 1:\n return value;\n case 2:\n return 0;\n case 3:\n return -value;\n }\n return Math.sin(angle);\n};\n","import type { TMat2D, TRadian } from './typedefs';\nimport { cos } from './util/misc/cos';\nimport { sin } from './util/misc/sin';\n\nexport interface XY {\n x: number;\n y: number;\n}\n\n/**\n * Adaptation of work of Kevin Lindsey(kevin@kevlindev.com)\n */\nexport class Point implements XY {\n declare x: number;\n\n declare y: number;\n\n constructor();\n constructor(x: number, y: number);\n constructor(point?: XY);\n constructor(arg0: number | XY = 0, y = 0) {\n if (typeof arg0 === 'object') {\n this.x = arg0.x;\n this.y = arg0.y;\n } else {\n this.x = arg0;\n this.y = y;\n }\n }\n\n /**\n * Adds another point to this one and returns another one\n * @param {XY} that\n * @return {Point} new Point instance with added values\n */\n add(that: XY): Point {\n return new Point(this.x + that.x, this.y + that.y);\n }\n\n /**\n * Adds another point to this one\n * @param {XY} that\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n addEquals(that: XY): Point {\n this.x += that.x;\n this.y += that.y;\n return this;\n }\n\n /**\n * Adds value to this point and returns a new one\n * @param {Number} scalar\n * @return {Point} new Point with added value\n */\n scalarAdd(scalar: number): Point {\n return new Point(this.x + scalar, this.y + scalar);\n }\n\n /**\n * Adds value to this point\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarAddEquals(scalar: number): Point {\n this.x += scalar;\n this.y += scalar;\n return this;\n }\n\n /**\n * Subtracts another point from this point and returns a new one\n * @param {XY} that\n * @return {Point} new Point object with subtracted values\n */\n subtract(that: XY): Point {\n return new Point(this.x - that.x, this.y - that.y);\n }\n\n /**\n * Subtracts another point from this point\n * @param {XY} that\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n subtractEquals(that: XY): Point {\n this.x -= that.x;\n this.y -= that.y;\n return this;\n }\n\n /**\n * Subtracts value from this point and returns a new one\n * @param {Number} scalar\n * @return {Point}\n */\n scalarSubtract(scalar: number): Point {\n return new Point(this.x - scalar, this.y - scalar);\n }\n\n /**\n * Subtracts value from this point\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarSubtractEquals(scalar: number): Point {\n this.x -= scalar;\n this.y -= scalar;\n return this;\n }\n\n /**\n * Multiplies this point by another value and returns a new one\n * @param {XY} that\n * @return {Point}\n */\n multiply(that: XY): Point {\n return new Point(this.x * that.x, this.y * that.y);\n }\n\n /**\n * Multiplies this point by a value and returns a new one\n * @param {Number} scalar\n * @return {Point}\n */\n scalarMultiply(scalar: number): Point {\n return new Point(this.x * scalar, this.y * scalar);\n }\n\n /**\n * Multiplies this point by a value\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarMultiplyEquals(scalar: number): Point {\n this.x *= scalar;\n this.y *= scalar;\n return this;\n }\n\n /**\n * Divides this point by another and returns a new one\n * @param {XY} that\n * @return {Point}\n */\n divide(that: XY): Point {\n return new Point(this.x / that.x, this.y / that.y);\n }\n\n /**\n * Divides this point by a value and returns a new one\n * @param {Number} scalar\n * @return {Point}\n */\n scalarDivide(scalar: number): Point {\n return new Point(this.x / scalar, this.y / scalar);\n }\n\n /**\n * Divides this point by a value\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarDivideEquals(scalar: number): Point {\n this.x /= scalar;\n this.y /= scalar;\n return this;\n }\n\n /**\n * Returns true if this point is equal to another one\n * @param {XY} that\n * @return {Boolean}\n */\n eq(that: XY): boolean {\n return this.x === that.x && this.y === that.y;\n }\n\n /**\n * Returns true if this point is less than another one\n * @param {XY} that\n * @return {Boolean}\n */\n lt(that: XY): boolean {\n return this.x < that.x && this.y < that.y;\n }\n\n /**\n * Returns true if this point is less than or equal to another one\n * @param {XY} that\n * @return {Boolean}\n */\n lte(that: XY): boolean {\n return this.x <= that.x && this.y <= that.y;\n }\n\n /**\n\n * Returns true if this point is greater another one\n * @param {XY} that\n * @return {Boolean}\n */\n gt(that: XY): boolean {\n return this.x > that.x && this.y > that.y;\n }\n\n /**\n * Returns true if this point is greater than or equal to another one\n * @param {XY} that\n * @return {Boolean}\n */\n gte(that: XY): boolean {\n return this.x >= that.x && this.y >= that.y;\n }\n\n /**\n * Returns new point which is the result of linear interpolation with this one and another one\n * @param {XY} that\n * @param {Number} t , position of interpolation, between 0 and 1 default 0.5\n * @return {Point}\n */\n lerp(that: XY, t = 0.5): Point {\n t = Math.max(Math.min(1, t), 0);\n return new Point(\n this.x + (that.x - this.x) * t,\n this.y + (that.y - this.y) * t,\n );\n }\n\n /**\n * Returns distance from this point and another one\n * @param {XY} that\n * @return {Number}\n */\n distanceFrom(that: XY): number {\n const dx = this.x - that.x,\n dy = this.y - that.y;\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n /**\n * Returns the point between this point and another one\n * @param {XY} that\n * @return {Point}\n */\n midPointFrom(that: XY): Point {\n return this.lerp(that);\n }\n\n /**\n * Returns a new point which is the min of this and another one\n * @param {XY} that\n * @return {Point}\n */\n min(that: XY): Point {\n return new Point(Math.min(this.x, that.x), Math.min(this.y, that.y));\n }\n\n /**\n * Returns a new point which is the max of this and another one\n * @param {XY} that\n * @return {Point}\n */\n max(that: XY): Point {\n return new Point(Math.max(this.x, that.x), Math.max(this.y, that.y));\n }\n\n /**\n * Returns string representation of this point\n * @return {String}\n */\n toString(): string {\n return `${this.x},${this.y}`;\n }\n\n /**\n * Sets x/y of this point\n * @param {Number} x\n * @param {Number} y\n * @chainable\n */\n setXY(x: number, y: number) {\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * Sets x of this point\n * @param {Number} x\n * @chainable\n */\n setX(x: number) {\n this.x = x;\n return this;\n }\n\n /**\n * Sets y of this point\n * @param {Number} y\n * @chainable\n */\n setY(y: number) {\n this.y = y;\n return this;\n }\n\n /**\n * Sets x/y of this point from another point\n * @param {XY} that\n * @chainable\n */\n setFromPoint(that: XY) {\n this.x = that.x;\n this.y = that.y;\n return this;\n }\n\n /**\n * Swaps x/y of this point and another point\n * @param {XY} that\n */\n swap(that: XY) {\n const x = this.x,\n y = this.y;\n this.x = that.x;\n this.y = that.y;\n that.x = x;\n that.y = y;\n }\n\n /**\n * return a cloned instance of the point\n * @return {Point}\n */\n clone(): Point {\n return new Point(this.x, this.y);\n }\n\n /**\n * Rotates `point` around `origin` with `radians`\n * @static\n * @memberOf fabric.util\n * @param {XY} origin The origin of the rotation\n * @param {TRadian} radians The radians of the angle for the rotation\n * @return {Point} The new rotated point\n */\n rotate(radians: TRadian, origin: XY = ZERO): Point {\n // TODO benchmark and verify the add and subtract how much cost\n // and then in case early return if no origin is passed\n const sinus = sin(radians),\n cosinus = cos(radians);\n const p = this.subtract(origin);\n const rotated = new Point(\n p.x * cosinus - p.y * sinus,\n p.x * sinus + p.y * cosinus,\n );\n return rotated.add(origin);\n }\n\n /**\n * Apply transform t to point p\n * @static\n * @memberOf fabric.util\n * @param {TMat2D} t The transform\n * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied\n * @return {Point} The transformed point\n */\n transform(t: TMat2D, ignoreOffset = false): Point {\n return new Point(\n t[0] * this.x + t[2] * this.y + (ignoreOffset ? 0 : t[4]),\n t[1] * this.x + t[3] * this.y + (ignoreOffset ? 0 : t[5]),\n );\n }\n}\n\nexport const ZERO = new Point(0, 0);\n","import type { Constructor, TBBox } from './typedefs';\nimport { removeFromArray } from './util/internals/removeFromArray';\nimport { Point } from './Point';\nimport type { ActiveSelection } from './shapes/ActiveSelection';\nimport type { Group } from './shapes/Group';\nimport type { InteractiveFabricObject } from './shapes/Object/InteractiveObject';\nimport type { FabricObject } from './shapes/Object/FabricObject';\n\nexport const isCollection = (\n fabricObject?: FabricObject,\n): fabricObject is Group | ActiveSelection => {\n return !!fabricObject && Array.isArray((fabricObject as Group)._objects);\n};\n\nexport function createCollectionMixin(Base: TBase) {\n class Collection extends Base {\n /**\n * @type {FabricObject[]}\n * @TODO needs to end up in the constructor too\n */\n _objects: FabricObject[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectAdded(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectRemoved(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onStackOrderChanged(object: FabricObject) {\n // subclasses should override this method\n }\n\n /**\n * Adds objects to collection\n * Objects should be instances of (or inherit from) FabricObject\n * @param {...FabricObject[]} objects to add\n * @returns {number} new array length\n */\n add(...objects: FabricObject[]): number {\n const size = this._objects.push(...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return size;\n }\n\n /**\n * Inserts an object into collection at specified index\n * @param {number} index Index to insert object at\n * @param {...FabricObject[]} objects Object(s) to insert\n * @returns {number} new array length\n */\n insertAt(index: number, ...objects: FabricObject[]) {\n this._objects.splice(index, 0, ...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return this._objects.length;\n }\n\n /**\n * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n * @private\n * @param {...FabricObject[]} objects objects to remove\n * @returns {FabricObject[]} removed objects\n */\n remove(...objects: FabricObject[]) {\n const array = this._objects,\n removed: FabricObject[] = [];\n objects.forEach((object) => {\n const index = array.indexOf(object);\n // only call onObjectRemoved if an object was actually removed\n if (index !== -1) {\n array.splice(index, 1);\n removed.push(object);\n this._onObjectRemoved(object);\n }\n });\n return removed;\n }\n\n /**\n * Executes given function for each object in this group\n * A simple shortcut for getObjects().forEach, before es6 was more complicated,\n * now is just a shortcut.\n * @param {Function} callback\n * Callback invoked with current object as first argument,\n * index - as second and an array of all objects - as third.\n */\n forEachObject(\n callback: (\n object: FabricObject,\n index: number,\n array: FabricObject[],\n ) => any,\n ) {\n this.getObjects().forEach((object, index, objects) =>\n callback(object, index, objects),\n );\n }\n\n /**\n * Returns an array of children objects of this instance\n * @param {...String} [types] When specified, only objects of these types are returned\n * @return {Array}\n */\n getObjects(...types: string[]) {\n if (types.length === 0) {\n return [...this._objects];\n }\n return this._objects.filter((o) => o.isType(...types));\n }\n\n /**\n * Returns object at specified index\n * @param {Number} index\n * @return {Object} object at index\n */\n item(index: number) {\n return this._objects[index];\n }\n\n /**\n * Returns true if collection contains no objects\n * @return {Boolean} true if collection is empty\n */\n isEmpty() {\n return this._objects.length === 0;\n }\n\n /**\n * Returns a size of a collection (i.e: length of an array containing its objects)\n * @return {Number} Collection size\n */\n size() {\n return this._objects.length;\n }\n\n /**\n * Returns true if collection contains an object.\\\n * **Prefer using {@link FabricObject#isDescendantOf} for performance reasons**\n * instead of `a.contains(b)` use `b.isDescendantOf(a)`\n * @param {Object} object Object to check against\n * @param {Boolean} [deep=false] `true` to check all descendants, `false` to check only `_objects`\n * @return {Boolean} `true` if collection contains an object\n */\n contains(object: FabricObject, deep?: boolean): boolean {\n if (this._objects.includes(object)) {\n return true;\n } else if (deep) {\n return this._objects.some(\n (obj) =>\n obj instanceof Collection &&\n (obj as unknown as Collection).contains(object, true),\n );\n }\n return false;\n }\n\n /**\n * Returns number representation of a collection complexity\n * @return {Number} complexity\n */\n complexity() {\n return this._objects.reduce((memo, current) => {\n memo += current.complexity ? current.complexity() : 0;\n return memo;\n }, 0);\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the bottom of the stack of drawn objects\n * @param {fabric.Object} object Object to send to back\n * @returns {boolean} true if change occurred\n */\n sendObjectToBack(object: FabricObject) {\n if (!object || object === this._objects[0]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.unshift(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the top of the stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @returns {boolean} true if change occurred\n */\n bringObjectToFront(object: FabricObject) {\n if (!object || object === this._objects[this._objects.length - 1]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.push(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or a selection down in stack of drawn objects\n * An optional parameter, `intersecting` allows to move the object in behind\n * the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @returns {boolean} true if change occurred\n */\n sendObjectBackwards(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== 0) {\n // if object is not on the bottom of stack\n const newIdx = this.findNewLowerIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object or a selection up in stack of drawn objects\n * An optional parameter, intersecting allows to move the object in front\n * of the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @returns {boolean} true if change occurred\n */\n bringObjectForward(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== this._objects.length - 1) {\n // if object is not on top of stack (last item in an array)\n const newIdx = this.findNewUpperIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @param {number} index Position to move to\n * @returns {boolean} true if change occurred\n */\n moveObjectTo(object: FabricObject, index: number) {\n if (object === this._objects[index]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.splice(index, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n findNewLowerIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean,\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse down the stack looking for the nearest intersecting object\n for (let i = idx - 1; i >= 0; --i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx - 1;\n }\n\n return newIdx;\n }\n\n findNewUpperIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean,\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse up the stack looking for the nearest intersecting object\n for (let i = idx + 1; i < this._objects.length; ++i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx + 1;\n }\n\n return newIdx;\n }\n\n /**\n * Given a bounding box, return all the objects of the collection that are contained in the bounding box.\n * If `includeIntersecting` is true, return also the objects that intersect the bounding box as well.\n * This is meant to work with selection. Is not a generic method.\n * @param {TBBox} bbox a bounding box in scene coordinates\n * @param {{ includeIntersecting?: boolean }} options an object with includeIntersecting\n * @returns array of objects contained in the bounding box, ordered from top to bottom stacking wise\n */\n collectObjects(\n { left, top, width, height }: TBBox,\n { includeIntersecting = true }: { includeIntersecting?: boolean } = {},\n ) {\n const objects: InteractiveFabricObject[] = [],\n tl = new Point(left, top),\n br = tl.add(new Point(width, height));\n\n // we iterate reverse order to collect top first in case of click.\n for (let i = this._objects.length - 1; i >= 0; i--) {\n const object = this._objects[i] as unknown as InteractiveFabricObject;\n if (\n object.selectable &&\n object.visible &&\n ((includeIntersecting && object.intersectsWithRect(tl, br)) ||\n object.isContainedWithinRect(tl, br) ||\n (includeIntersecting && object.containsPoint(tl)) ||\n (includeIntersecting && object.containsPoint(br)))\n ) {\n objects.push(object);\n }\n }\n\n return objects;\n }\n }\n\n // https://github.com/microsoft/TypeScript/issues/32080\n return Collection as typeof Collection & TBase;\n}\n","import { Observable } from './Observable';\n\nexport class CommonMethods extends Observable {\n /**\n * Sets object's properties from options, for initialization only\n * @protected\n * @param {Object} [options] Options object\n */\n protected _setOptions(options: any = {}) {\n for (const prop in options) {\n this.set(prop, options[prop]);\n }\n }\n\n /**\n * @private\n */\n _setObject(obj: Record) {\n for (const prop in obj) {\n this._set(prop, obj[prop]);\n }\n }\n\n /**\n * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\n * @param {String|Object} key Property name or object (if object, iterate over the object properties)\n * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\n */\n set(key: string | Record, value?: any) {\n if (typeof key === 'object') {\n this._setObject(key);\n } else {\n this._set(key, value);\n }\n return this;\n }\n\n _set(key: string, value: any) {\n this[key as keyof this] = value;\n }\n\n /**\n * Toggles specified property from `true` to `false` or from `false` to `true`\n * @param {String} property Property to toggle\n */\n toggle(property: string) {\n const value = this.get(property);\n if (typeof value === 'boolean') {\n this.set(property, !value);\n }\n return this;\n }\n\n /**\n * Basic getter\n * @param {String} property Property name\n * @return {*} value of a property\n */\n get(property: string): any {\n return this[property as keyof this];\n }\n}\n","import { getFabricWindow } from '../../env';\n\nexport function requestAnimFrame(callback: FrameRequestCallback): number {\n return getFabricWindow().requestAnimationFrame(callback);\n}\n\nexport function cancelAnimFrame(handle: number): void {\n return getFabricWindow().cancelAnimationFrame(handle);\n}\n","let id = 0;\n\nexport const uid = () => id++;\n","import { getFabricDocument } from '../../env';\nimport type { ImageFormat } from '../../typedefs';\nimport { FabricError } from '../internals/console';\n/**\n * Creates canvas element\n * @return {CanvasElement} initialized canvas element\n */\nexport const createCanvasElement = (): HTMLCanvasElement => {\n const element = getFabricDocument().createElement('canvas');\n if (!element || typeof element.getContext === 'undefined') {\n throw new FabricError('Failed to create `canvas` element');\n }\n return element;\n};\n\n/**\n * Creates image element (works on client and node)\n * @return {HTMLImageElement} HTML image element\n */\nexport const createImage = (): HTMLImageElement =>\n getFabricDocument().createElement('img');\n\n/**\n * Creates a canvas element that is a copy of another and is also painted\n * @param {CanvasElement} canvas to copy size and content of\n * @return {CanvasElement} initialized canvas element\n */\nexport const copyCanvasElement = (\n canvas: HTMLCanvasElement,\n): HTMLCanvasElement => {\n const newCanvas = createCanvasElement();\n newCanvas.width = canvas.width;\n newCanvas.height = canvas.height;\n newCanvas.getContext('2d')?.drawImage(canvas, 0, 0);\n return newCanvas;\n};\n\n/**\n * since 2.6.0 moved from canvas instance to utility.\n * possibly useless\n * @param {CanvasElement} canvasEl to copy size and content of\n * @param {String} format 'jpeg' or 'png', in some browsers 'webp' is ok too\n * @param {Number} quality <= 1 and > 0\n * @return {String} data url\n */\nexport const toDataURL = (\n canvasEl: HTMLCanvasElement,\n format: ImageFormat,\n quality: number,\n) => canvasEl.toDataURL(`image/${format}`, quality);\n\nexport const isHTMLCanvas = (\n canvas?: HTMLCanvasElement | string,\n): canvas is HTMLCanvasElement => {\n return !!canvas && (canvas as HTMLCanvasElement).getContext !== undefined;\n};\n","import type { TRadian, TDegree } from '../../typedefs';\nimport { PiBy180 } from '../../constants';\n\n/**\n * Transforms degrees to radians.\n * @param {TDegree} degrees value in degrees\n * @return {TRadian} value in radians\n */\nexport const degreesToRadians = (degrees: TDegree): TRadian =>\n (degrees * PiBy180) as TRadian;\n\n/**\n * Transforms radians to degrees.\n * @param {TRadian} radians value in radians\n * @return {TDegree} value in degrees\n */\nexport const radiansToDegrees = (radians: TRadian): TDegree =>\n (radians / PiBy180) as TDegree;\n","import { iMatrix } from '../../constants';\nimport type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport type { TDegree, TRadian, TMat2D } from '../../typedefs';\nimport { cos } from './cos';\nimport { degreesToRadians, radiansToDegrees } from './radiansDegreesConversion';\nimport { sin } from './sin';\n\nexport type TRotateMatrixArgs = {\n angle?: TDegree;\n};\n\nexport type TTranslateMatrixArgs = {\n translateX?: number;\n translateY?: number;\n};\n\nexport type TScaleMatrixArgs = {\n scaleX?: number;\n scaleY?: number;\n flipX?: boolean;\n flipY?: boolean;\n skewX?: TDegree;\n skewY?: TDegree;\n};\n\nexport type TComposeMatrixArgs = TTranslateMatrixArgs &\n TRotateMatrixArgs &\n TScaleMatrixArgs;\n\nexport type TQrDecomposeOut = Required<\n Omit\n>;\n\nexport const isIdentityMatrix = (mat: TMat2D) =>\n mat.every((value, index) => value === iMatrix[index]);\n\n/**\n * Apply transform t to point p\n * @deprecated use {@link Point#transform}\n * @param {Point | XY} p The point to transform\n * @param {Array} t The transform\n * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied\n * @return {Point} The transformed point\n */\nexport const transformPoint = (\n p: XY,\n t: TMat2D,\n ignoreOffset?: boolean,\n): Point => new Point(p).transform(t, ignoreOffset);\n\n/**\n * Invert transformation t\n * @param {Array} t The transform\n * @return {Array} The inverted transform\n */\nexport const invertTransform = (t: TMat2D): TMat2D => {\n const a = 1 / (t[0] * t[3] - t[1] * t[2]),\n r = [a * t[3], -a * t[1], -a * t[2], a * t[0], 0, 0] as TMat2D,\n { x, y } = new Point(t[4], t[5]).transform(r, true);\n r[4] = -x;\n r[5] = -y;\n return r;\n};\n\n/**\n * Multiply matrix A by matrix B to nest transformations\n * @param {TMat2D} a First transformMatrix\n * @param {TMat2D} b Second transformMatrix\n * @param {Boolean} is2x2 flag to multiply matrices as 2x2 matrices\n * @return {TMat2D} The product of the two transform matrices\n */\nexport const multiplyTransformMatrices = (\n a: TMat2D,\n b: TMat2D,\n is2x2?: boolean,\n): TMat2D =>\n [\n a[0] * b[0] + a[2] * b[1],\n a[1] * b[0] + a[3] * b[1],\n a[0] * b[2] + a[2] * b[3],\n a[1] * b[2] + a[3] * b[3],\n is2x2 ? 0 : a[0] * b[4] + a[2] * b[5] + a[4],\n is2x2 ? 0 : a[1] * b[4] + a[3] * b[5] + a[5],\n ] as TMat2D;\n\n/**\n * Multiplies {@link matrices} such that a matrix defines the plane for the rest of the matrices **after** it\n *\n * `multiplyTransformMatrixArray([A, B, C, D])` is equivalent to `A(B(C(D)))`\n *\n * @param matrices an array of matrices\n * @param [is2x2] flag to multiply matrices as 2x2 matrices\n * @returns the multiplication product\n */\nexport const multiplyTransformMatrixArray = (\n matrices: (TMat2D | undefined | null | false)[],\n is2x2?: boolean,\n) =>\n matrices.reduceRight(\n (product: TMat2D, curr) =>\n curr && product\n ? multiplyTransformMatrices(curr, product, is2x2)\n : curr || product,\n undefined as unknown as TMat2D,\n ) || iMatrix.concat();\n\nexport const calcPlaneRotation = ([a, b]: TMat2D) =>\n Math.atan2(b, a) as TRadian;\n\n/**\n * Decomposes standard 2x3 matrix into transform components\n * @param {TMat2D} a transformMatrix\n * @return {Object} Components of transform\n */\nexport const qrDecompose = (a: TMat2D): TQrDecomposeOut => {\n const angle = calcPlaneRotation(a),\n denom = Math.pow(a[0], 2) + Math.pow(a[1], 2),\n scaleX = Math.sqrt(denom),\n scaleY = (a[0] * a[3] - a[2] * a[1]) / scaleX,\n skewX = Math.atan2(a[0] * a[2] + a[1] * a[3], denom);\n return {\n angle: radiansToDegrees(angle),\n scaleX,\n scaleY,\n skewX: radiansToDegrees(skewX),\n skewY: 0 as TDegree,\n translateX: a[4] || 0,\n translateY: a[5] || 0,\n };\n};\n\n/**\n * Generate a translation matrix\n *\n * A translation matrix in the form of\n * [ 1 0 x ]\n * [ 0 1 y ]\n * [ 0 0 1 ]\n *\n * See @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#translate for more details\n *\n * @param {number} x translation on X axis\n * @param {number} [y] translation on Y axis\n * @returns {TMat2D} matrix\n */\nexport const createTranslateMatrix = (x: number, y = 0): TMat2D => [\n 1,\n 0,\n 0,\n 1,\n x,\n y,\n];\n\n/**\n * Generate a rotation matrix around around a point (x,y), defaulting to (0,0)\n *\n * A matrix in the form of\n * [cos(a) -sin(a) -x*cos(a)+y*sin(a)+x]\n * [sin(a) cos(a) -x*sin(a)-y*cos(a)+y]\n * [0 0 1 ]\n *\n *\n * @param {TDegree} angle rotation in degrees\n * @param {XY} [pivotPoint] pivot point to rotate around\n * @returns {TMat2D} matrix\n */\nexport function createRotateMatrix(\n { angle = 0 }: TRotateMatrixArgs = {},\n { x = 0, y = 0 }: Partial = {},\n): TMat2D {\n const angleRadiant = degreesToRadians(angle),\n cosValue = cos(angleRadiant),\n sinValue = sin(angleRadiant);\n return [\n cosValue,\n sinValue,\n -sinValue,\n cosValue,\n x ? x - (cosValue * x - sinValue * y) : 0,\n y ? y - (sinValue * x + cosValue * y) : 0,\n ];\n}\n\n/**\n * Generate a scale matrix around the point (0,0)\n *\n * A matrix in the form of\n * [x 0 0]\n * [0 y 0]\n * [0 0 1]\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#scale\n *\n * @param {number} x scale on X axis\n * @param {number} [y] scale on Y axis\n * @returns {TMat2D} matrix\n */\nexport const createScaleMatrix = (x: number, y: number = x): TMat2D => [\n x,\n 0,\n 0,\n y,\n 0,\n 0,\n];\n\nexport const angleToSkew = (angle: TDegree) =>\n Math.tan(degreesToRadians(angle));\n\nexport const skewToAngle = (value: TRadian) =>\n radiansToDegrees(Math.atan(value));\n\n/**\n * Generate a skew matrix for the X axis\n *\n * A matrix in the form of\n * [1 x 0]\n * [0 1 0]\n * [0 0 1]\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#skewx\n *\n * @param {TDegree} skewValue translation on X axis\n * @returns {TMat2D} matrix\n */\nexport const createSkewXMatrix = (skewValue: TDegree): TMat2D => [\n 1,\n 0,\n angleToSkew(skewValue),\n 1,\n 0,\n 0,\n];\n\n/**\n * Generate a skew matrix for the Y axis\n *\n * A matrix in the form of\n * [1 0 0]\n * [y 1 0]\n * [0 0 1]\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#skewy\n *\n * @param {TDegree} skewValue translation on Y axis\n * @returns {TMat2D} matrix\n */\nexport const createSkewYMatrix = (skewValue: TDegree): TMat2D => [\n 1,\n angleToSkew(skewValue),\n 0,\n 1,\n 0,\n 0,\n];\n\n/**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet.\n * is called DimensionsTransformMatrix because those properties are the one that influence\n * the size of the resulting box of the object.\n * @param {Object} options\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewY]\n * @return {Number[]} transform matrix\n */\nexport const calcDimensionsMatrix = ({\n scaleX = 1,\n scaleY = 1,\n flipX = false,\n flipY = false,\n skewX = 0 as TDegree,\n skewY = 0 as TDegree,\n}: TScaleMatrixArgs) => {\n let matrix = createScaleMatrix(\n flipX ? -scaleX : scaleX,\n flipY ? -scaleY : scaleY,\n );\n if (skewX) {\n matrix = multiplyTransformMatrices(matrix, createSkewXMatrix(skewX), true);\n }\n if (skewY) {\n matrix = multiplyTransformMatrices(matrix, createSkewYMatrix(skewY), true);\n }\n return matrix;\n};\n\n/**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet\n * Before changing this function look at: src/benchmarks/calcTransformMatrix.mjs\n * @param {Object} options\n * @param {Number} [options.angle]\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewY]\n * @param {Number} [options.translateX]\n * @param {Number} [options.translateY]\n * @return {Number[]} transform matrix\n */\nexport const composeMatrix = (options: TComposeMatrixArgs): TMat2D => {\n const { translateX = 0, translateY = 0, angle = 0 as TDegree } = options;\n let matrix = createTranslateMatrix(translateX, translateY);\n if (angle) {\n matrix = multiplyTransformMatrices(matrix, createRotateMatrix({ angle }));\n }\n const scaleMatrix = calcDimensionsMatrix(options);\n if (!isIdentityMatrix(scaleMatrix)) {\n matrix = multiplyTransformMatrices(matrix, scaleMatrix);\n }\n return matrix;\n};\n","import { noop } from '../../constants';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport type {\n Abortable,\n Constructor,\n TCrossOrigin,\n TFiller,\n} from '../../typedefs';\nimport { createImage } from './dom';\nimport { classRegistry } from '../../ClassRegistry';\nimport type { BaseFilter } from '../../filters/BaseFilter';\nimport type { FabricObject as BaseFabricObject } from '../../shapes/Object/Object';\nimport { FabricError, SignalAbortedError } from '../internals/console';\nimport type { Shadow } from '../../Shadow';\n\nexport type LoadImageOptions = Abortable & {\n /**\n * cors value for the image loading, default to anonymous\n */\n crossOrigin?: TCrossOrigin;\n};\n\n/**\n * Loads image element from given url and resolve it, or catch.\n * @param {String} url URL representing an image\n * @param {LoadImageOptions} [options] image loading options\n * @returns {Promise} the loaded image.\n */\nexport const loadImage = (\n url: string,\n { signal, crossOrigin = null }: LoadImageOptions = {},\n) =>\n new Promise(function (resolve, reject) {\n if (signal && signal.aborted) {\n return reject(new SignalAbortedError('loadImage'));\n }\n const img = createImage();\n let abort: EventListenerOrEventListenerObject;\n if (signal) {\n abort = function (err: Event) {\n img.src = '';\n reject(err);\n };\n signal.addEventListener('abort', abort, { once: true });\n }\n const done = function () {\n img.onload = img.onerror = null;\n abort && signal?.removeEventListener('abort', abort);\n resolve(img);\n };\n if (!url) {\n done();\n return;\n }\n img.onload = done;\n img.onerror = function () {\n abort && signal?.removeEventListener('abort', abort);\n reject(new FabricError(`Error loading ${img.src}`));\n };\n crossOrigin && (img.crossOrigin = crossOrigin);\n img.src = url;\n });\n\nexport type EnlivenObjectOptions = Abortable & {\n /**\n * Method for further parsing of object elements,\n * called after each fabric object created.\n */\n reviver?: <\n T extends\n | BaseFabricObject\n | FabricObject\n | BaseFilter\n | Shadow\n | TFiller,\n >(\n serializedObj: Record,\n instance: T,\n ) => void;\n};\n\n/**\n * @TODO type this correctly.\n * Creates corresponding fabric instances from their object representations\n * @param {Object[]} objects Objects to enliven\n * @param {EnlivenObjectOptions} [options]\n * @param {(serializedObj: object, instance: FabricObject) => any} [options.reviver] Method for further parsing of object elements,\n * called after each fabric object created.\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\nexport const enlivenObjects = <\n T extends\n | BaseFabricObject\n | FabricObject\n | BaseFilter\n | Shadow\n | TFiller,\n>(\n objects: any[],\n { signal, reviver = noop }: EnlivenObjectOptions = {},\n) =>\n new Promise((resolve, reject) => {\n const instances: T[] = [];\n signal && signal.addEventListener('abort', reject, { once: true });\n Promise.all(\n objects.map((obj) =>\n classRegistry\n .getClass<\n Constructor & {\n fromObject(options: any, context: Abortable): Promise;\n }\n >(obj.type)\n .fromObject(obj, { signal })\n .then((fabricInstance) => {\n reviver(obj, fabricInstance);\n instances.push(fabricInstance);\n return fabricInstance;\n }),\n ),\n )\n .then(resolve)\n .catch((error) => {\n // cleanup\n instances.forEach((instance) => {\n (instance as FabricObject).dispose &&\n (instance as FabricObject).dispose();\n });\n reject(error);\n })\n .finally(() => {\n signal && signal.removeEventListener('abort', reject);\n });\n });\n\n/**\n * Creates corresponding fabric instances residing in an object, e.g. `clipPath`\n * @param {Object} object with properties to enlive ( fill, stroke, clipPath, path )\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise>} the input object with enlived values\n */\nexport const enlivenObjectEnlivables = <\n R = Record,\n>(\n serializedObject: any,\n { signal }: Abortable = {},\n) =>\n new Promise((resolve, reject) => {\n const instances: (FabricObject | TFiller | Shadow)[] = [];\n signal && signal.addEventListener('abort', reject, { once: true });\n // enlive every possible property\n const promises = Object.values(serializedObject).map((value: any) => {\n if (!value) {\n return value;\n }\n /**\n * clipPath or shadow or gradient or text on a path or a pattern,\n * or the backgroundImage or overlayImage of canvas\n * If we have a type and there is a classe registered for it, we enlive it.\n * If there is no class registered for it we return the value as is\n * */\n if (value.type && classRegistry.has(value.type)) {\n return enlivenObjects([value], {\n signal,\n }).then(([enlived]) => {\n instances.push(enlived);\n return enlived;\n });\n }\n return value;\n });\n const keys = Object.keys(serializedObject);\n Promise.all(promises)\n .then((enlived) => {\n return enlived.reduce((acc, instance, index) => {\n acc[keys[index]] = instance;\n return acc;\n }, {});\n })\n .then(resolve)\n .catch((error) => {\n // cleanup\n instances.forEach((instance: any) => {\n instance.dispose && instance.dispose();\n });\n reject(error);\n })\n .finally(() => {\n signal && signal.removeEventListener('abort', reject);\n });\n });\n","/**\n * Populates an object with properties of another object\n * @param {Object} source Source object\n * @param {string[]} properties Properties names to include\n * @returns object populated with the picked keys\n */\nexport const pick = >(\n source: T,\n keys: (keyof T)[] = [],\n) => {\n return keys.reduce((o, key) => {\n if (key in source) {\n o[key] = source[key];\n }\n return o;\n }, {} as Partial);\n};\n\nexport const pickBy = >(\n source: T,\n predicate: (value: T[K], key: K, collection: T) => boolean,\n) => {\n return (Object.keys(source) as (keyof T)[]).reduce((o, key) => {\n if (predicate(source[key], key, source)) {\n o[key] = source[key];\n }\n return o;\n }, {} as Partial);\n};\n","/**\n * Map of the 148 color names with HEX code\n * @see: https://www.w3.org/TR/css3-color/#svg-color\n */\nexport const ColorNameMap = {\n aliceblue: '#F0F8FF',\n antiquewhite: '#FAEBD7',\n aqua: '#0FF',\n aquamarine: '#7FFFD4',\n azure: '#F0FFFF',\n beige: '#F5F5DC',\n bisque: '#FFE4C4',\n black: '#000',\n blanchedalmond: '#FFEBCD',\n blue: '#00F',\n blueviolet: '#8A2BE2',\n brown: '#A52A2A',\n burlywood: '#DEB887',\n cadetblue: '#5F9EA0',\n chartreuse: '#7FFF00',\n chocolate: '#D2691E',\n coral: '#FF7F50',\n cornflowerblue: '#6495ED',\n cornsilk: '#FFF8DC',\n crimson: '#DC143C',\n cyan: '#0FF',\n darkblue: '#00008B',\n darkcyan: '#008B8B',\n darkgoldenrod: '#B8860B',\n darkgray: '#A9A9A9',\n darkgrey: '#A9A9A9',\n darkgreen: '#006400',\n darkkhaki: '#BDB76B',\n darkmagenta: '#8B008B',\n darkolivegreen: '#556B2F',\n darkorange: '#FF8C00',\n darkorchid: '#9932CC',\n darkred: '#8B0000',\n darksalmon: '#E9967A',\n darkseagreen: '#8FBC8F',\n darkslateblue: '#483D8B',\n darkslategray: '#2F4F4F',\n darkslategrey: '#2F4F4F',\n darkturquoise: '#00CED1',\n darkviolet: '#9400D3',\n deeppink: '#FF1493',\n deepskyblue: '#00BFFF',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1E90FF',\n firebrick: '#B22222',\n floralwhite: '#FFFAF0',\n forestgreen: '#228B22',\n fuchsia: '#F0F',\n gainsboro: '#DCDCDC',\n ghostwhite: '#F8F8FF',\n gold: '#FFD700',\n goldenrod: '#DAA520',\n gray: '#808080',\n grey: '#808080',\n green: '#008000',\n greenyellow: '#ADFF2F',\n honeydew: '#F0FFF0',\n hotpink: '#FF69B4',\n indianred: '#CD5C5C',\n indigo: '#4B0082',\n ivory: '#FFFFF0',\n khaki: '#F0E68C',\n lavender: '#E6E6FA',\n lavenderblush: '#FFF0F5',\n lawngreen: '#7CFC00',\n lemonchiffon: '#FFFACD',\n lightblue: '#ADD8E6',\n lightcoral: '#F08080',\n lightcyan: '#E0FFFF',\n lightgoldenrodyellow: '#FAFAD2',\n lightgray: '#D3D3D3',\n lightgrey: '#D3D3D3',\n lightgreen: '#90EE90',\n lightpink: '#FFB6C1',\n lightsalmon: '#FFA07A',\n lightseagreen: '#20B2AA',\n lightskyblue: '#87CEFA',\n lightslategray: '#789',\n lightslategrey: '#789',\n lightsteelblue: '#B0C4DE',\n lightyellow: '#FFFFE0',\n lime: '#0F0',\n limegreen: '#32CD32',\n linen: '#FAF0E6',\n magenta: '#F0F',\n maroon: '#800000',\n mediumaquamarine: '#66CDAA',\n mediumblue: '#0000CD',\n mediumorchid: '#BA55D3',\n mediumpurple: '#9370DB',\n mediumseagreen: '#3CB371',\n mediumslateblue: '#7B68EE',\n mediumspringgreen: '#00FA9A',\n mediumturquoise: '#48D1CC',\n mediumvioletred: '#C71585',\n midnightblue: '#191970',\n mintcream: '#F5FFFA',\n mistyrose: '#FFE4E1',\n moccasin: '#FFE4B5',\n navajowhite: '#FFDEAD',\n navy: '#000080',\n oldlace: '#FDF5E6',\n olive: '#808000',\n olivedrab: '#6B8E23',\n orange: '#FFA500',\n orangered: '#FF4500',\n orchid: '#DA70D6',\n palegoldenrod: '#EEE8AA',\n palegreen: '#98FB98',\n paleturquoise: '#AFEEEE',\n palevioletred: '#DB7093',\n papayawhip: '#FFEFD5',\n peachpuff: '#FFDAB9',\n peru: '#CD853F',\n pink: '#FFC0CB',\n plum: '#DDA0DD',\n powderblue: '#B0E0E6',\n purple: '#800080',\n rebeccapurple: '#639',\n red: '#F00',\n rosybrown: '#BC8F8F',\n royalblue: '#4169E1',\n saddlebrown: '#8B4513',\n salmon: '#FA8072',\n sandybrown: '#F4A460',\n seagreen: '#2E8B57',\n seashell: '#FFF5EE',\n sienna: '#A0522D',\n silver: '#C0C0C0',\n skyblue: '#87CEEB',\n slateblue: '#6A5ACD',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#FFFAFA',\n springgreen: '#00FF7F',\n steelblue: '#4682B4',\n tan: '#D2B48C',\n teal: '#008080',\n thistle: '#D8BFD8',\n tomato: '#FF6347',\n turquoise: '#40E0D0',\n violet: '#EE82EE',\n wheat: '#F5DEB3',\n white: '#FFF',\n whitesmoke: '#F5F5F5',\n yellow: '#FF0',\n yellowgreen: '#9ACD32',\n};\n","/**\n * Regex matching color in RGB or RGBA formats (ex: `rgb(0, 0, 0)`, `rgba(255, 100, 10, 0.5)`, `rgba( 255 , 100 , 10 , 0.5 )`, `rgb(1,1,1)`, `rgba(100%, 60%, 10%, 0.5)`)\n * Also matching rgba(r g b / a) as per new specs\n * https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/rgb\n * Formal syntax at the time of writing:\n * =\n * rgb( [ | none ]{3} [ / [ | none ] ]? ) |\n * rgb( [ | none ]{3} [ / [ | none ] ]? )\n * = | \n *\n * For learners this is how you can read this regex\n * Regular expression for matching an rgba or rgb CSS color value\n *\n * /^ # Beginning of the string\n * rgba? # \"rgb\" or \"rgba\"\n * \\(\\s* # Opening parenthesis and optional whitespace\n * (\\d{0,3} # 0 to three digits R channel\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for the first color component\n * %? # Optional percent sign after the first color component\n * \\s* # Optional whitespace\n * [\\s|,] # Separator between color components can be a space or comma\n * \\s* # Optional whitespace\n * (\\d{0,3} # 0 to three digits G channel\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for the second color component\n * %? # Optional percent sign after the second color component\n * \\s* # Optional whitespace\n * [\\s|,] # Separator between color components can be a space or comma\n * \\s* # Optional whitespace\n * (\\d{0,3} # 0 to three digits B channel\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for the third color component\n * %? # Optional percent sign after the third color component\n * \\s* # Optional whitespace\n * (?: # Beginning of non-capturing group for alpha value\n * \\s* # Optional whitespace\n * [,/] # Comma or slash separator for alpha value\n * \\s* # Optional whitespace\n * (\\d{0,3} # Zero to three digits\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for alpha value\n * %? # Optional percent sign after alpha value\n * \\s* # Optional whitespace\n * )? # End of non-capturing group for alpha value (optional)\n * \\) # Closing parenthesis\n * $ # End of the string\n *\n * The alpha channel can be in the format 0.4 .7 or 1 or 73%\n *\n * WARNING this regex doesn't fail on off spec colors. it matches everything that could be a color.\n * So the spec does not allow for `rgba(30 , 45% 35, 49%)` but this will work anyways for us\n */\nexport const reRGBa = () =>\n /^rgba?\\(\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*(?:\\s*[,/]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*)?\\)$/i;\n\n/**\n * Regex matching color in HSL or HSLA formats (ex: hsl(0, 0, 0), rgba(255, 100, 10, 0.5), rgba( 255 , 100 , 10 , 0.5 ), rgb(1,1,1), rgba(100%, 60%, 10%, 0.5))\n * Also matching rgba(r g b / a) as per new specs\n * https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/hsl\n * Formal syntax at the time of writing:\n * =\n * hsl( [ | none ] [ | none ] [ | none ] [ / [ | none ] ]? )\n *\n * =\n * |\n * \n *\n * =\n * |\n * \n *\n * For learners this is how you can read this regex\n * Regular expression for matching an hsla or hsl CSS color value\n *\n * /^hsla?\\( // Matches the beginning of the string and the opening parenthesis of \"hsl\" or \"hsla\"\n * \\s* // Matches any whitespace characters (space, tab, etc.) zero or more times\n * (\\d{0,3} // Hue: 0 to three digits - start capture in a group\n * (?:\\.\\d+)? // Hue: Optional (non capture group) decimal with one or more digits.\n * (?:deg|turn|rad)? // Hue: Optionally include suffix deg or turn or rad\n * ) // Hue: End capture group\n * \\s* // Matches any whitespace characters zero or more times\n * [\\s|,] // Matches a space, tab or comma\n * \\s* // Matches any whitespace characters zero or more times\n * (\\d{0,3} // Saturation: 0 to three digits - start capture in a group\n * (?:\\.\\d+)? // Saturation: Optional decimal with one or more digits in a non-capturing group\n * %?) // Saturation: match optional % character and end capture group\n * \\s* // Matches any whitespace characters zero or more times\n * [\\s|,] // Matches a space, tab or comma\n * \\s* // Matches any whitespace characters zero or more times\n * (\\d{0,3} // Lightness: 0 to three digits - start capture in a group\n * (?:\\.\\d+)? // Lightness: Optional decimal with one or more digits in a non-capturing group\n * %?) // Lightness: match % character and end capture group\n * \\s* // Matches any whitespace characters zero or more times\n * (?: // Alpha: Begins a non-capturing group for the alpha value\n * \\s* // Matches any whitespace characters zero or more times\n * [,/] // Matches a comma or forward slash\n * \\s* // Matches any whitespace characters zero or more times\n * (\\d*(?:\\.\\d+)?%?) // Matches zero or more digits, optionally followed by a decimal point and one or more digits, followed by an optional percentage sign and captures it in a group\n * \\s* // Matches any whitespace characters zero or more times\n * )? // Makes the alpha value group optional\n * \\) // Matches the closing parenthesis\n * $/i // Matches the end of the string and sets the regular expression to case-insensitive mode\n *\n * WARNING this regex doesn't fail on off spec colors. It matches everything that could be a color.\n * So the spec does not allow `hsl(30 , 45% 35, 49%)` but this will work anyways for us.\n */\nexport const reHSLa = () =>\n /^hsla?\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?(?:deg|turn|rad)?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*(?:\\s*[,/]\\s*(\\d*(?:\\.\\d+)?%?)\\s*)?\\)$/i;\n\n/**\n * Regex matching color in HEX format (ex: #FF5544CC, #FF5555, 010155, aff)\n */\nexport const reHex = () => /^#?(([0-9a-f]){3,4}|([0-9a-f]{2}){3,4})$/i;\n","import type { TRGBAColorSource } from './typedefs';\n\n/**\n * @param {Number} p\n * @param {Number} q\n * @param {Number} t\n * @return {Number}\n */\nexport const hue2rgb = (p: number, q: number, t: number): number => {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n};\n\n/**\n * Adapted from {@link https://gist.github.com/mjackson/5311256 https://gist.github.com/mjackson}\n * @param {Number} r Red color value\n * @param {Number} g Green color value\n * @param {Number} b Blue color value\n * @param {Number} a Alpha color value pass through\n * @return {TRGBColorSource} Hsl color\n */\nexport const rgb2Hsl = (\n r: number,\n g: number,\n b: number,\n a: number,\n): TRGBAColorSource => {\n r /= 255;\n g /= 255;\n b /= 255;\n const maxValue = Math.max(r, g, b),\n minValue = Math.min(r, g, b);\n\n let h!: number, s: number;\n const l = (maxValue + minValue) / 2;\n\n if (maxValue === minValue) {\n h = s = 0; // achromatic\n } else {\n const d = maxValue - minValue;\n s = l > 0.5 ? d / (2 - maxValue - minValue) : d / (maxValue + minValue);\n switch (maxValue) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return [Math.round(h * 360), Math.round(s * 100), Math.round(l * 100), a];\n};\n\nexport const fromAlphaToFloat = (value = '1') =>\n parseFloat(value) / (value.endsWith('%') ? 100 : 1);\n\n/**\n * Convert a value in the inclusive range [0, 255] to hex\n */\nexport const hexify = (value: number) =>\n Math.min(Math.round(value), 255).toString(16).toUpperCase().padStart(2, '0');\n\n/**\n * Calculate the grey average value for rgb and pass through alpha\n */\nexport const greyAverage = ([\n r,\n g,\n b,\n a = 1,\n]: TRGBAColorSource): TRGBAColorSource => {\n const avg = Math.round(r * 0.3 + g * 0.59 + b * 0.11);\n return [avg, avg, avg, a];\n};\n","import { radiansToDegrees } from '../util/misc/radiansDegreesConversion';\nimport { ColorNameMap } from './color_map';\nimport { reHSLa, reHex, reRGBa } from './constants';\nimport type { TRGBAColorSource, TColorArg } from './typedefs';\nimport {\n hue2rgb,\n hexify,\n rgb2Hsl,\n fromAlphaToFloat,\n greyAverage,\n} from './util';\n\n/**\n * @class Color common color operations\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2/#colors colors}\n */\nexport class Color {\n private declare _source: TRGBAColorSource;\n isUnrecognised = false;\n\n /**\n *\n * @param {string} [color] optional in hex or rgb(a) or hsl format or from known color list\n */\n constructor(color?: TColorArg) {\n if (!color) {\n // we default to black as canvas does\n this.setSource([0, 0, 0, 1]);\n } else if (color instanceof Color) {\n this.setSource([...color._source]);\n } else if (Array.isArray(color)) {\n const [r, g, b, a = 1] = color;\n this.setSource([r, g, b, a]);\n } else {\n this.setSource(this._tryParsingColor(color));\n }\n }\n\n /**\n * @private\n * @param {string} [color] Color value to parse\n * @returns {TRGBAColorSource}\n */\n protected _tryParsingColor(color: string) {\n if (color in ColorNameMap) {\n color = ColorNameMap[color as keyof typeof ColorNameMap];\n }\n return color === 'transparent'\n ? ([255, 255, 255, 0] as TRGBAColorSource)\n : Color.sourceFromHex(color) ||\n Color.sourceFromRgb(color) ||\n Color.sourceFromHsl(color) ||\n // color is not recognized\n // we default to black as canvas does\n // eslint-disable-next-line no-constant-binary-expression\n ((this.isUnrecognised = true) && ([0, 0, 0, 1] as TRGBAColorSource));\n }\n\n /**\n * Returns source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n * @return {TRGBAColorSource}\n */\n getSource() {\n return this._source;\n }\n\n /**\n * Sets source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n * @param {TRGBAColorSource} source\n */\n setSource(source: TRGBAColorSource) {\n this._source = source;\n }\n\n /**\n * Returns color representation in RGB format\n * @return {String} ex: rgb(0-255,0-255,0-255)\n */\n toRgb() {\n const [r, g, b] = this.getSource();\n return `rgb(${r},${g},${b})`;\n }\n\n /**\n * Returns color representation in RGBA format\n * @return {String} ex: rgba(0-255,0-255,0-255,0-1)\n */\n toRgba() {\n return `rgba(${this.getSource().join(',')})`;\n }\n\n /**\n * Returns color representation in HSL format\n * @return {String} ex: hsl(0-360,0%-100%,0%-100%)\n */\n toHsl() {\n const [h, s, l] = rgb2Hsl(...this.getSource());\n return `hsl(${h},${s}%,${l}%)`;\n }\n\n /**\n * Returns color representation in HSLA format\n * @return {String} ex: hsla(0-360,0%-100%,0%-100%,0-1)\n */\n toHsla() {\n const [h, s, l, a] = rgb2Hsl(...this.getSource());\n return `hsla(${h},${s}%,${l}%,${a})`;\n }\n\n /**\n * Returns color representation in HEX format\n * @return {String} ex: FF5555\n */\n toHex() {\n const fullHex = this.toHexa();\n return fullHex.slice(0, 6);\n }\n\n /**\n * Returns color representation in HEXA format\n * @return {String} ex: FF5555CC\n */\n toHexa() {\n const [r, g, b, a] = this.getSource();\n return `${hexify(r)}${hexify(g)}${hexify(b)}${hexify(Math.round(a * 255))}`;\n }\n\n /**\n * Gets value of alpha channel for this color\n * @return {Number} 0-1\n */\n getAlpha() {\n return this.getSource()[3];\n }\n\n /**\n * Sets value of alpha channel for this color\n * @param {Number} alpha Alpha value 0-1\n * @return {Color} thisArg\n */\n setAlpha(alpha: number) {\n this._source[3] = alpha;\n return this;\n }\n\n /**\n * Transforms color to its grayscale representation\n * @return {Color} thisArg\n */\n toGrayscale() {\n this.setSource(greyAverage(this.getSource()));\n return this;\n }\n\n /**\n * Transforms color to its black and white representation\n * @param {Number} threshold\n * @return {Color} thisArg\n */\n toBlackWhite(threshold: number) {\n const [average, , , a] = greyAverage(this.getSource()),\n bOrW = average < (threshold || 127) ? 0 : 255;\n this.setSource([bOrW, bOrW, bOrW, a]);\n return this;\n }\n\n /**\n * Overlays color with another color\n * @param {String|Color} otherColor\n * @return {Color} thisArg\n */\n overlayWith(otherColor: string | Color) {\n if (!(otherColor instanceof Color)) {\n otherColor = new Color(otherColor);\n }\n\n const source = this.getSource(),\n otherAlpha = 0.5,\n otherSource = otherColor.getSource(),\n [R, G, B] = source.map((value, index) =>\n Math.round(value * (1 - otherAlpha) + otherSource[index] * otherAlpha),\n );\n\n this.setSource([R, G, B, source[3]]);\n return this;\n }\n\n /**\n * Returns new color object, when given a color in RGB format\n * @memberOf Color\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255)\n * @return {Color}\n */\n static fromRgb(color: string): Color {\n return Color.fromRgba(color);\n }\n\n /**\n * Returns new color object, when given a color in RGBA format\n * @static\n * @function\n * @memberOf Color\n * @param {String} color\n * @return {Color}\n */\n static fromRgba(color: string): Color {\n return new Color(Color.sourceFromRgb(color));\n }\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in RGB or RGBA format\n * @memberOf Color\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255), rgb(0%-100%,0%-100%,0%-100%)\n * @return {TRGBAColorSource | undefined} source\n */\n static sourceFromRgb(color: string): TRGBAColorSource | undefined {\n const match = color.match(reRGBa());\n if (match) {\n const [r, g, b] = match.slice(1, 4).map((value) => {\n const parsedValue = parseFloat(value);\n return value.endsWith('%')\n ? Math.round(parsedValue * 2.55)\n : parsedValue;\n });\n return [r, g, b, fromAlphaToFloat(match[4])];\n }\n }\n\n /**\n * Returns new color object, when given a color in HSL format\n * @param {String} color Color value ex: hsl(0-260,0%-100%,0%-100%)\n * @memberOf Color\n * @return {Color}\n */\n static fromHsl(color: string): Color {\n return Color.fromHsla(color);\n }\n\n /**\n * Returns new color object, when given a color in HSLA format\n * @static\n * @function\n * @memberOf Color\n * @param {String} color\n * @return {Color}\n */\n static fromHsla(color: string): Color {\n return new Color(Color.sourceFromHsl(color));\n }\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HSL or HSLA format.\n * Adapted from https://github.com/mjijackson\n * @memberOf Color\n * @param {String} color Color value ex: hsl(0-360,0%-100%,0%-100%) or hsla(0-360,0%-100%,0%-100%, 0-1)\n * @return {TRGBAColorSource | undefined} source\n * @see http://http://www.w3.org/TR/css3-color/#hsl-color\n */\n static sourceFromHsl(color: string): TRGBAColorSource | undefined {\n const match = color.match(reHSLa());\n if (!match) {\n return;\n }\n const match1degrees = Color.parseAngletoDegrees(match[1]);\n\n const h = (((match1degrees % 360) + 360) % 360) / 360,\n s = parseFloat(match[2]) / 100,\n l = parseFloat(match[3]) / 100;\n let r: number, g: number, b: number;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const q = l <= 0.5 ? l * (s + 1) : l + s - l * s,\n p = l * 2 - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n fromAlphaToFloat(match[4]),\n ];\n }\n\n /**\n * Returns new color object, when given a color in HEX format\n * @static\n * @memberOf Color\n * @param {String} color Color value ex: FF5555\n * @return {Color}\n */\n static fromHex(color: string): Color {\n return new Color(Color.sourceFromHex(color));\n }\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HEX format\n * @static\n * @memberOf Color\n * @param {String} color ex: FF5555 or FF5544CC (RGBa)\n * @return {TRGBAColorSource | undefined} source\n */\n static sourceFromHex(color: string): TRGBAColorSource | undefined {\n if (color.match(reHex())) {\n const value = color.slice(color.indexOf('#') + 1),\n isShortNotation = value.length <= 4;\n let expandedValue: string[];\n if (isShortNotation) {\n expandedValue = value.split('').map((hex) => hex + hex);\n } else {\n expandedValue = value.match(/.{2}/g)!;\n }\n const [r, g, b, a = 255] = expandedValue.map((hexCouple) =>\n parseInt(hexCouple, 16),\n );\n return [r, g, b, a / 255];\n }\n }\n\n /**\n * Converts a string that could be any angle notation (50deg, 0.5turn, 2rad)\n * into degrees without the 'deg' suffix\n * @static\n * @memberOf Color\n * @param {String} value ex: 0deg, 0.5turn, 2rad\n * @return {Number} number in degrees or NaN if inputs are invalid\n */\n static parseAngletoDegrees(value: string): number {\n const lowercase = value.toLowerCase();\n const numeric = parseFloat(lowercase);\n\n if (lowercase.includes('rad')) {\n return radiansToDegrees(numeric);\n }\n\n if (lowercase.includes('turn')) {\n return numeric * 360;\n }\n\n // Value is probably just a number already in degrees eg '50'\n return numeric;\n }\n}\n","/**\n * A wrapper around Number#toFixed, which contrary to native method returns number, not string.\n * @param {number|string} number number to operate on\n * @param {number} fractionDigits number of fraction digits to \"leave\"\n * @return {number}\n */\nexport const toFixed = (number: number | string, fractionDigits: number) =>\n parseFloat(Number(number).toFixed(fractionDigits));\n","import { Color } from '../../color/Color';\nimport { config } from '../../config';\nimport { DEFAULT_SVG_FONT_SIZE, FILL, NONE } from '../../constants';\nimport type {\n TBBox,\n TMat2D,\n SVGElementName,\n SupportedSVGUnit,\n} from '../../typedefs';\nimport { toFixed } from './toFixed';\n\n/**\n * Returns array of attributes for given svg that fabric parses\n * @param {SVGElementName} type Type of svg element (eg. 'circle')\n * @return {Array} string names of supported attributes\n */\nexport const getSvgAttributes = (type: SVGElementName) => {\n const commonAttributes = ['instantiated_by_use', 'style', 'id', 'class'];\n switch (type) {\n case 'linearGradient':\n return commonAttributes.concat([\n 'x1',\n 'y1',\n 'x2',\n 'y2',\n 'gradientUnits',\n 'gradientTransform',\n ]);\n case 'radialGradient':\n return commonAttributes.concat([\n 'gradientUnits',\n 'gradientTransform',\n 'cx',\n 'cy',\n 'r',\n 'fx',\n 'fy',\n 'fr',\n ]);\n case 'stop':\n return commonAttributes.concat(['offset', 'stop-color', 'stop-opacity']);\n }\n return commonAttributes;\n};\n\n/**\n * Converts from attribute value to pixel value if applicable.\n * Returns converted pixels or original value not converted.\n * @param {string} value number to operate on\n * @param {number} fontSize\n * @return {number}\n */\nexport const parseUnit = (value: string, fontSize = DEFAULT_SVG_FONT_SIZE) => {\n const unit = /\\D{0,2}$/.exec(value),\n number = parseFloat(value);\n const dpi = config.DPI;\n switch (unit?.[0] as SupportedSVGUnit) {\n case 'mm':\n return (number * dpi) / 25.4;\n\n case 'cm':\n return (number * dpi) / 2.54;\n\n case 'in':\n return number * dpi;\n\n case 'pt':\n return (number * dpi) / 72; // or * 4 / 3\n\n case 'pc':\n return ((number * dpi) / 72) * 12; // or * 16\n\n case 'em':\n return number * fontSize;\n\n default:\n return number;\n }\n};\n\nexport type MeetOrSlice = 'meet' | 'slice';\n\nexport type MinMidMax = 'Min' | 'Mid' | 'Max' | 'none';\n\nexport type TPreserveArParsed = {\n meetOrSlice: MeetOrSlice;\n alignX: MinMidMax;\n alignY: MinMidMax;\n};\n\n// align can be either none or undefined or a combination of mid/max\nconst parseAlign = (align: string): MinMidMax[] => {\n //divide align in alignX and alignY\n if (align && align !== NONE) {\n return [align.slice(1, 4) as MinMidMax, align.slice(5, 8) as MinMidMax];\n } else if (align === NONE) {\n return [align, align];\n }\n return ['Mid', 'Mid'];\n};\n\n/**\n * Parse preserveAspectRatio attribute from element\n * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio\n * @param {string} attribute to be parsed\n * @return {Object} an object containing align and meetOrSlice attribute\n */\nexport const parsePreserveAspectRatioAttribute = (\n attribute: string,\n): TPreserveArParsed => {\n const [firstPart, secondPart] = attribute.trim().split(' ') as [\n MinMidMax,\n MeetOrSlice | undefined,\n ];\n const [alignX, alignY] = parseAlign(firstPart);\n return {\n meetOrSlice: secondPart || 'meet',\n alignX,\n alignY,\n };\n};\n\n/**\n * given an array of 6 number returns something like `\"matrix(...numbers)\"`\n * @param {TMat2D} transform an array with 6 numbers\n * @return {String} transform matrix for svg\n */\nexport const matrixToSVG = (transform: TMat2D) =>\n 'matrix(' +\n transform\n .map((value) => toFixed(value, config.NUM_FRACTION_DIGITS))\n .join(' ') +\n ')';\n\n/**\n * Adobe Illustrator (at least CS5) is unable to render rgba()-based fill values\n * we work around it by \"moving\" alpha channel into opacity attribute and setting fill's alpha to 1\n * @param prop\n * @param value\n * @param {boolean} inlineStyle The default is inline style, the separator used is \":\", The other is \"=\"\n * @returns\n */\nexport const colorPropToSVG = (\n prop: string,\n value?: any,\n inlineStyle = true,\n) => {\n let colorValue;\n let opacityValue;\n if (!value) {\n colorValue = 'none';\n } else if (value.toLive) {\n colorValue = `url(#SVGID_${value.id})`;\n } else {\n const color = new Color(value),\n opacity = color.getAlpha();\n\n colorValue = color.toRgb();\n if (opacity !== 1) {\n opacityValue = opacity.toString();\n }\n }\n if (inlineStyle) {\n return `${prop}: ${colorValue}; ${\n opacityValue ? `${prop}-opacity: ${opacityValue}; ` : ''\n }`;\n } else {\n return `${prop}=\"${colorValue}\" ${\n opacityValue ? `${prop}-opacity=\"${opacityValue}\" ` : ''\n }`;\n }\n};\n\nexport const createSVGRect = (\n color: string,\n { left, top, width, height }: TBBox,\n precision = config.NUM_FRACTION_DIGITS,\n) => {\n const svgColor = colorPropToSVG(FILL, color, false);\n const [x, y, w, h] = [left, top, width, height].map((value) =>\n toFixed(value, precision),\n );\n return ``;\n};\n","import type { FabricObject } from '../shapes/Object/Object';\nimport type { TFiller } from '../typedefs';\nimport type { FabricText } from '../shapes/Text/Text';\nimport type { Pattern } from '../Pattern';\nimport type { Path } from '../shapes/Path';\nimport type { ActiveSelection } from '../shapes/ActiveSelection';\n\nexport const isFiller = (\n filler: TFiller | string | null,\n): filler is TFiller => {\n return !!filler && (filler as TFiller).toLive !== undefined;\n};\n\nexport const isSerializableFiller = (\n filler: TFiller | string | null,\n): filler is TFiller => {\n return !!filler && typeof (filler as TFiller).toObject === 'function';\n};\n\nexport const isPattern = (filler: TFiller): filler is Pattern => {\n return (\n !!filler && (filler as Pattern).offsetX !== undefined && 'source' in filler\n );\n};\n\nexport const isTextObject = (\n fabricObject?: FabricObject,\n): fabricObject is FabricText => {\n return (\n !!fabricObject &&\n typeof (fabricObject as FabricText)._renderText === 'function'\n );\n};\n\nexport const isPath = (fabricObject?: FabricObject): fabricObject is Path => {\n // we could use instanceof but that would mean pulling in Text code for a simple check\n // @todo discuss what to do and how to do\n return (\n !!fabricObject &&\n typeof (fabricObject as Path)._renderPathCommands === 'function'\n );\n};\n\nexport const isActiveSelection = (\n fabricObject?: FabricObject,\n): fabricObject is ActiveSelection =>\n !!fabricObject && 'multiSelectionStacking' in fabricObject;\n","/**\n * Returns element scroll offsets\n * @param {HTMLElement} element Element to operate on\n * @return {Object} Object with left/top values\n */\nexport function getScrollLeftTop(element: HTMLElement | null) {\n const doc = element && getDocumentFromElement(element);\n let left = 0,\n top = 0;\n if (!element || !doc) {\n return { left, top };\n }\n let elementLoop: HTMLElement | Document | ShadowRoot = element;\n const docElement = doc.documentElement,\n body = doc.body || {\n scrollLeft: 0,\n scrollTop: 0,\n };\n // While loop checks (and then sets element to) .parentNode OR .host\n // to account for ShadowDOM. We still want to traverse up out of ShadowDOM,\n // but the .parentNode of a root ShadowDOM node will always be null, instead\n // it should be accessed through .host. See http://stackoverflow.com/a/24765528/4383938\n while (\n elementLoop &&\n (elementLoop.parentNode || (elementLoop as unknown as ShadowRoot).host)\n ) {\n elementLoop = (elementLoop.parentNode ||\n (elementLoop as unknown as ShadowRoot).host) as\n | HTMLElement\n | Document\n | ShadowRoot;\n if (elementLoop === doc) {\n left = body.scrollLeft || docElement.scrollLeft || 0;\n top = body.scrollTop || docElement.scrollTop || 0;\n } else {\n left += (elementLoop as HTMLElement).scrollLeft || 0;\n top += (elementLoop as HTMLElement).scrollTop || 0;\n }\n\n if (\n elementLoop.nodeType === 1 &&\n (elementLoop as HTMLElement).style.position === 'fixed'\n ) {\n break;\n }\n }\n\n return { left, top };\n}\n\nexport const getDocumentFromElement = (el: HTMLElement) =>\n el.ownerDocument || null;\n\nexport const getWindowFromElement = (el: HTMLElement) =>\n el.ownerDocument?.defaultView || null;\n","import { NONE } from '../../constants';\nimport type { TSize } from '../../typedefs';\nimport {\n getDocumentFromElement,\n getWindowFromElement,\n getScrollLeftTop,\n} from '../../util/dom_misc';\n\nexport const setCanvasDimensions = (\n el: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D,\n { width, height }: 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\nexport type CSSDimensions = {\n width: number | string;\n height: number | string;\n};\n\nexport const setCSSDimensions = (\n el: HTMLElement,\n { width, height }: Partial,\n) => {\n width && (el.style.width = typeof width === 'number' ? `${width}px` : width);\n height &&\n (el.style.height = typeof height === 'number' ? `${height}px` : height);\n};\n\n/**\n * Returns offset for a given element\n * @param {HTMLElement} element Element to get offset for\n * @return {Object} Object with \"left\" and \"top\" properties\n */\nexport function getElementOffset(element: HTMLElement) {\n const doc = element && getDocumentFromElement(element),\n offset = { left: 0, top: 0 };\n\n if (!doc) {\n return offset;\n }\n const elemStyle: CSSStyleDeclaration =\n getWindowFromElement(element)?.getComputedStyle(element, null) ||\n ({} as CSSStyleDeclaration);\n offset.left += parseInt(elemStyle.borderLeftWidth, 10) || 0;\n offset.top += parseInt(elemStyle.borderTopWidth, 10) || 0;\n offset.left += parseInt(elemStyle.paddingLeft, 10) || 0;\n offset.top += parseInt(elemStyle.paddingTop, 10) || 0;\n\n let box = { left: 0, top: 0 };\n\n const docElem = doc.documentElement;\n if (typeof element.getBoundingClientRect !== 'undefined') {\n box = element.getBoundingClientRect();\n }\n\n const scrollLeftTop = getScrollLeftTop(element);\n\n return {\n left:\n box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,\n top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top,\n };\n}\n\n/**\n * Makes element unselectable\n * @param {HTMLElement} element Element to make unselectable\n * @return {HTMLElement} Element that was passed in\n */\nexport function makeElementUnselectable(element: HTMLElement) {\n if (typeof element.onselectstart !== 'undefined') {\n element.onselectstart = () => false;\n }\n element.style.userSelect = NONE;\n return element;\n}\n","import { getEnv, getFabricDocument } from '../../env';\nimport type { TSize } from '../../typedefs';\nimport type { CSSDimensions } from './util';\nimport { setCSSDimensions, getElementOffset } from './util';\nimport { createCanvasElement, isHTMLCanvas } from '../../util/misc/dom';\nimport { setCanvasDimensions } from './util';\nimport { FabricError } from '../../util/internals/console';\n\nexport type CanvasItem = {\n el: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n};\n\nexport class StaticCanvasDOMManager {\n /**\n * Keeps a copy of the canvas style before setting retina scaling and other potions\n * in order to return it to original state on dispose\n * @type string\n */\n private _originalCanvasStyle?: string;\n\n lower: CanvasItem;\n\n constructor(arg0?: string | HTMLCanvasElement) {\n const el = this.createLowerCanvas(arg0);\n this.lower = { el, ctx: el.getContext('2d')! };\n }\n\n protected createLowerCanvas(arg0?: HTMLCanvasElement | string) {\n // canvasEl === 'HTMLCanvasElement' does not work on jsdom/node\n const el = isHTMLCanvas(arg0)\n ? arg0\n : (arg0 &&\n (getFabricDocument().getElementById(arg0) as HTMLCanvasElement)) ||\n createCanvasElement();\n if (el.hasAttribute('data-fabric')) {\n throw new FabricError(\n 'Trying to initialize a canvas that has already been initialized. Did you forget to dispose the canvas?',\n );\n }\n this._originalCanvasStyle = el.style.cssText;\n el.setAttribute('data-fabric', 'main');\n el.classList.add('lower-canvas');\n return el;\n }\n\n cleanupDOM({ width, height }: TSize) {\n const { el } = this.lower;\n // restore canvas style and attributes\n el.classList.remove('lower-canvas');\n el.removeAttribute('data-fabric');\n // restore canvas size to original size in case retina scaling was applied\n el.setAttribute('width', `${width}`);\n el.setAttribute('height', `${height}`);\n el.style.cssText = this._originalCanvasStyle || '';\n this._originalCanvasStyle = undefined;\n }\n\n setDimensions(size: TSize, retinaScaling: number) {\n const { el, ctx } = this.lower;\n setCanvasDimensions(el, ctx, size, retinaScaling);\n }\n\n setCSSDimensions(size: Partial) {\n setCSSDimensions(this.lower.el, size);\n }\n\n /**\n * Calculates canvas element offset relative to the document\n */\n calcOffset() {\n return getElementOffset(this.lower.el);\n }\n\n dispose() {\n getEnv().dispose(this.lower.el);\n // @ts-expect-error disposing\n delete this.lower;\n }\n}\n","import { iMatrix } from '../constants';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TFiller, TMat2D, TOptions } from '../typedefs';\n\ninterface CanvasDrawableOptions {\n /**\n * if set to false background image is not affected by viewport transform\n * @since 1.6.3\n * @type Boolean\n * @todo we should really find a different way to do this\n * @default\n */\n backgroundVpt: boolean;\n\n /**\n * Background color of canvas instance.\n * @type {(String|TFiller)}\n * @default\n */\n backgroundColor: TFiller | string;\n\n /**\n * Background image of canvas instance.\n * since 2.4.0 image caching is active, please when putting an image as background, add to the\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n * vale. As an alternative you can disable image objectCaching\n * @type FabricObject\n * @default\n */\n backgroundImage?: FabricObject;\n\n /**\n * if set to false overlay image is not affected by viewport transform\n * @since 1.6.3\n * @type Boolean\n * @todo we should really find a different way to do this\n * @default\n */\n overlayVpt: boolean;\n\n /**\n * Overlay color of canvas instance.\n * @since 1.3.9\n * @type {(String|TFiller)}\n * @default\n */\n overlayColor: TFiller | string;\n\n /**\n * Overlay image of canvas instance.\n * since 2.4.0 image caching is active, please when putting an image as overlay, add to the\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n * vale. As an alternative you can disable image objectCaching\n * @type FabricObject\n * @default\n */\n overlayImage?: FabricObject;\n}\n\ninterface CanvasRenderingOptions {\n /**\n * Indicates whether {@link StaticCanvas#add}, {@link StaticCanvas#insertAt} and {@link StaticCanvas#remove},\n * {@link StaticCanvas#moveTo}, {@link StaticCanvas#clear} and many more, should also re-render canvas.\n * Disabling this option will not give a performance boost when adding/removing a lot of objects to/from canvas at once\n * since the renders are queued and executed one per frame.\n * Disabling is suggested anyway and managing the renders of the app manually is not a big effort ( canvas.requestRenderAll() )\n * Left default to true to do not break documentation and old app, fiddles.\n * @type Boolean\n * @default\n */\n renderOnAddRemove: boolean;\n\n /**\n * Based on vptCoords and object.aCoords, skip rendering of objects that\n * are not included in current viewport.\n * May greatly help in applications with crowded canvas and use of zoom/pan\n * If One of the corner of the bounding box of the object is on the canvas\n * the objects get rendered.\n * @type Boolean\n * @default true\n */\n skipOffscreen: boolean;\n\n /**\n * When true, canvas is scaled by devicePixelRatio for better rendering on retina screens\n * @type Boolean\n * @default\n */\n enableRetinaScaling: boolean;\n\n /**\n * Indicates whether this canvas will use image smoothing, this is on by default in browsers\n * @type Boolean\n * @default\n */\n imageSmoothingEnabled: boolean;\n\n /**\n * a fabricObject that, without stroke define a clipping area with their shape. filled in black\n * the clipPath object gets used when the canvas has rendered, and the context is placed in the\n * top left corner of the canvas.\n * clipPath will clip away controls, if you do not want this to happen use controlsAboveOverlay = true\n * @type FabricObject\n */\n clipPath?: FabricObject;\n}\n\nexport interface CanvasExportOptions {\n /**\n * Indicates whether toObject/toDatalessObject should include default values\n * if set to false, takes precedence over the object value.\n * @type Boolean\n * @default\n */\n includeDefaultValues: boolean;\n\n /**\n * When true, getSvgTransform() will apply the StaticCanvas.viewportTransform to the SVG transformation. When true,\n * a zoomed canvas will then produce zoomed SVG output.\n * @type Boolean\n * @default\n */\n svgViewportTransformation: boolean;\n}\n\nexport interface StaticCanvasOptions\n extends CanvasDrawableOptions,\n CanvasRenderingOptions,\n CanvasExportOptions {\n /**\n * Width in virtual/logical pixels of the canvas.\n * The canvas can be larger than width if retina scaling is active\n * @type number\n */\n width: number;\n\n /**\n * Height in virtual/logical pixels of the canvas.\n * The canvas can be taller than width if retina scaling is active\n * @type height\n */\n height: number;\n\n /**\n * Indicates whether object controls (borders/controls) are rendered above overlay image\n * @type Boolean\n * @default\n *\n * @todo move to Canvas\n */\n controlsAboveOverlay: boolean;\n\n /**\n * Indicates whether the browser can be scrolled when using a touchscreen and dragging on the canvas\n * @type Boolean\n * @default\n *\n * @todo move to Canvas\n */\n allowTouchScrolling: boolean;\n\n /**\n * The transformation (a Canvas 2D API transform matrix) which focuses the viewport\n * @type Array\n * @example Default transform\n * canvas.viewportTransform = [1, 0, 0, 1, 0, 0];\n * @example Scale by 70% and translate toward bottom-right by 50, without skewing\n * canvas.viewportTransform = [0.7, 0, 0, 0.7, 50, 50];\n * @default\n */\n viewportTransform: TMat2D;\n}\n\nexport const staticCanvasDefaults: TOptions = {\n backgroundVpt: true,\n backgroundColor: '',\n overlayVpt: true,\n overlayColor: '',\n\n includeDefaultValues: true,\n svgViewportTransformation: true,\n\n renderOnAddRemove: true,\n skipOffscreen: true,\n enableRetinaScaling: true,\n imageSmoothingEnabled: true,\n\n /**\n * @todo move to Canvas\n */\n controlsAboveOverlay: false,\n /**\n * @todo move to Canvas\n */\n allowTouchScrolling: false,\n\n viewportTransform: [...iMatrix],\n};\n","import { config } from '../config';\nimport { CENTER, VERSION } from '../constants';\nimport type { CanvasEvents, StaticCanvasEvents } from '../EventTypeDefs';\nimport type { Gradient } from '../gradient/Gradient';\nimport { createCollectionMixin, isCollection } from '../Collection';\nimport { CommonMethods } from '../CommonMethods';\nimport type { Pattern } from '../Pattern';\nimport { Point } from '../Point';\nimport type { TCachedFabricObject } from '../shapes/Object/Object';\nimport type {\n Abortable,\n Constructor,\n TCornerPoint,\n TDataUrlOptions,\n TFiller,\n TMat2D,\n TSize,\n TSVGReviver,\n TToCanvasElementOptions,\n TValidToObjectMethod,\n TOptions,\n} from '../typedefs';\nimport {\n cancelAnimFrame,\n requestAnimFrame,\n} from '../util/animation/AnimationFrameProvider';\nimport { runningAnimations } from '../util/animation/AnimationRegistry';\nimport { uid } from '../util/internals/uid';\nimport { createCanvasElement, toDataURL } from '../util/misc/dom';\nimport { invertTransform, transformPoint } from '../util/misc/matrix';\nimport type { EnlivenObjectOptions } from '../util/misc/objectEnlive';\nimport {\n enlivenObjectEnlivables,\n enlivenObjects,\n} from '../util/misc/objectEnlive';\nimport { pick } from '../util/misc/pick';\nimport { matrixToSVG } from '../util/misc/svgParsing';\nimport { toFixed } from '../util/misc/toFixed';\nimport { isFiller, isPattern, isTextObject } from '../util/typeAssertions';\nimport { StaticCanvasDOMManager } from './DOMManagers/StaticCanvasDOMManager';\nimport type { CSSDimensions } from './DOMManagers/util';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { StaticCanvasOptions } from './StaticCanvasOptions';\nimport { staticCanvasDefaults } from './StaticCanvasOptions';\nimport { log, FabricError } from '../util/internals/console';\nimport { getDevicePixelRatio } from '../env';\n\n/**\n * Having both options in TCanvasSizeOptions set to true transform the call in a calcOffset\n * Better try to restrict with types to avoid confusion.\n */\nexport type TCanvasSizeOptions =\n | {\n backstoreOnly?: true;\n cssOnly?: false;\n }\n | {\n backstoreOnly?: false;\n cssOnly?: true;\n };\n\nexport type TSVGExportOptions = {\n suppressPreamble?: boolean;\n viewBox?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n encoding?: 'UTF-8'; // test Encoding type and see what happens\n width?: string;\n height?: string;\n reviver?: TSVGReviver;\n};\n\n/**\n * Static canvas class\n * @see {@link http://fabricjs.com/static_canvas|StaticCanvas demo}\n * @fires before:render\n * @fires after:render\n * @fires canvas:cleared\n * @fires object:added\n * @fires object:removed\n */\n// TODO: fix `EventSpec` inheritance https://github.com/microsoft/TypeScript/issues/26154#issuecomment-1366616260\nexport class StaticCanvas<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n EventSpec extends StaticCanvasEvents = StaticCanvasEvents,\n >\n extends createCollectionMixin(CommonMethods)\n implements StaticCanvasOptions\n{\n declare width: number;\n declare height: number;\n\n // background\n declare backgroundVpt: boolean;\n declare backgroundColor: TFiller | string;\n declare backgroundImage?: FabricObject;\n // overlay\n declare overlayVpt: boolean;\n declare overlayColor: TFiller | string;\n declare overlayImage?: FabricObject;\n\n declare clipPath?: FabricObject;\n\n declare includeDefaultValues: boolean;\n\n // rendering config\n declare renderOnAddRemove: boolean;\n declare skipOffscreen: boolean;\n declare enableRetinaScaling: boolean;\n declare imageSmoothingEnabled: boolean;\n\n /**\n * @todo move to Canvas\n */\n declare controlsAboveOverlay: boolean;\n\n /**\n * @todo move to Canvas\n */\n declare allowTouchScrolling: boolean;\n\n declare viewportTransform: TMat2D;\n\n /**\n * The viewport bounding box in scene plane coordinates, see {@link calcViewportBoundaries}\n */\n declare vptCoords: TCornerPoint;\n\n /**\n * A reference to the canvas actual HTMLCanvasElement.\n * Can be use to read the raw pixels, but never write or manipulate\n * @type HTMLCanvasElement\n */\n get lowerCanvasEl() {\n return this.elements.lower?.el;\n }\n\n get contextContainer() {\n return this.elements.lower?.ctx;\n }\n\n /**\n * If true the Canvas is in the process or has been disposed/destroyed.\n * No more rendering operation will be executed on this canvas.\n * @type boolean\n */\n declare destroyed?: boolean;\n\n /**\n * Started the process of disposing but not done yet.\n * WIll likely complete the render cycle already scheduled but stopping adding more.\n * @type boolean\n */\n declare disposed?: boolean;\n\n declare _offset: { left: number; top: number };\n protected declare hasLostContext: boolean;\n protected declare nextRenderHandle: number;\n\n declare elements: StaticCanvasDOMManager;\n\n /**\n * When true control drawing is skipped.\n * This boolean is used to avoid toDataURL to export controls.\n * Usage of this boolean to build up other flows and features is not supported\n * @type Boolean\n * @default false\n */\n protected declare skipControlsDrawing: boolean;\n\n static ownDefaults = staticCanvasDefaults;\n\n // reference to\n protected declare __cleanupTask?: {\n (): void;\n kill: (reason?: any) => void;\n };\n\n static getDefaults(): Record {\n return StaticCanvas.ownDefaults;\n }\n\n constructor(\n el?: string | HTMLCanvasElement,\n options: TOptions = {},\n ) {\n super();\n Object.assign(\n this,\n (this.constructor as typeof StaticCanvas).getDefaults(),\n );\n this.set(options);\n this.initElements(el);\n this._setDimensionsImpl({\n width: this.width || this.elements.lower.el.width || 0,\n height: this.height || this.elements.lower.el.height || 0,\n });\n this.skipControlsDrawing = false;\n this.viewportTransform = [...this.viewportTransform];\n this.calcViewportBoundaries();\n }\n\n protected initElements(el?: string | HTMLCanvasElement) {\n this.elements = new StaticCanvasDOMManager(el);\n }\n\n add(...objects: FabricObject[]) {\n const size = super.add(...objects);\n objects.length > 0 && this.renderOnAddRemove && this.requestRenderAll();\n return size;\n }\n\n insertAt(index: number, ...objects: FabricObject[]) {\n const size = super.insertAt(index, ...objects);\n objects.length > 0 && this.renderOnAddRemove && this.requestRenderAll();\n return size;\n }\n\n remove(...objects: FabricObject[]) {\n const removed = super.remove(...objects);\n removed.length > 0 && this.renderOnAddRemove && this.requestRenderAll();\n return removed;\n }\n\n _onObjectAdded(obj: FabricObject) {\n if (obj.canvas && (obj.canvas as StaticCanvas) !== this) {\n log(\n 'warn',\n 'Canvas is trying to add an object that belongs to a different canvas.\\n' +\n 'Resulting to default behavior: removing object from previous canvas and adding to new canvas',\n );\n obj.canvas.remove(obj);\n }\n obj._set('canvas', this);\n obj.setCoords();\n this.fire('object:added', { target: obj });\n obj.fire('added', { target: this });\n }\n\n _onObjectRemoved(obj: FabricObject) {\n obj._set('canvas', undefined);\n this.fire('object:removed', { target: obj });\n obj.fire('removed', { target: this });\n }\n\n _onStackOrderChanged() {\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * @private\n * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\n * @return {Number} retinaScaling if applied, otherwise 1;\n */\n getRetinaScaling() {\n return this.enableRetinaScaling ? getDevicePixelRatio() : 1;\n }\n\n /**\n * Calculates canvas element offset relative to the document\n * This method is also attached as \"resize\" event handler of window\n */\n calcOffset() {\n return (this._offset = this.elements.calcOffset());\n }\n\n /**\n * Returns canvas width (in px)\n * @return {Number}\n */\n getWidth(): number {\n return this.width;\n }\n\n /**\n * Returns canvas height (in px)\n * @return {Number}\n */\n getHeight(): number {\n return this.height;\n }\n\n /**\n * Sets width of this canvas instance\n * @param {Number|String} value Value to set width to\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @deprecated will be removed in 7.0\n */\n setWidth(\n value: TSize['width'],\n options?: { backstoreOnly?: true; cssOnly?: false },\n ): void;\n setWidth(\n value: CSSDimensions['width'],\n options?: { cssOnly?: true; backstoreOnly?: false },\n ): void;\n setWidth(value: number, options?: never) {\n return this.setDimensions({ width: value }, options);\n }\n\n /**s\n * Sets height of this canvas instance\n * @param {Number|String} value Value to set height to\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @deprecated will be removed in 7.0\n */\n setHeight(\n value: TSize['height'],\n options?: { backstoreOnly?: true; cssOnly?: false },\n ): void;\n setHeight(\n value: CSSDimensions['height'],\n options?: { cssOnly?: true; backstoreOnly?: false },\n ): void;\n setHeight(value: CSSDimensions['height'], options?: never) {\n return this.setDimensions({ height: value }, options);\n }\n\n /**\n * Internal use only\n * @protected\n */\n protected _setDimensionsImpl(\n dimensions: Partial,\n { cssOnly = false, backstoreOnly = false }: TCanvasSizeOptions = {},\n ) {\n if (!cssOnly) {\n const size = {\n width: this.width,\n height: this.height,\n ...(dimensions as Partial),\n };\n this.elements.setDimensions(size, this.getRetinaScaling());\n this.hasLostContext = true;\n this.width = size.width;\n this.height = size.height;\n }\n if (!backstoreOnly) {\n this.elements.setCSSDimensions(dimensions);\n }\n\n this.calcOffset();\n }\n\n /**\n * Sets dimensions (width, height) of this canvas instance. when options.cssOnly flag active you should also supply the unit of measure (px/%/em)\n * @param {Object} dimensions Object with width/height properties\n * @param {Number|String} [dimensions.width] Width of canvas element\n * @param {Number|String} [dimensions.height] Height of canvas element\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n */\n setDimensions(\n dimensions: Partial,\n options?: { cssOnly?: true; backstoreOnly?: false },\n ): void;\n setDimensions(\n dimensions: Partial,\n options?: { backstoreOnly?: true; cssOnly?: false },\n ): void;\n setDimensions(dimensions: Partial, options?: never): void;\n setDimensions(\n dimensions: Partial,\n options?: TCanvasSizeOptions,\n ) {\n this._setDimensionsImpl(dimensions, options);\n if (!options || !options.cssOnly) {\n this.requestRenderAll();\n }\n }\n\n /**\n * Returns canvas zoom level\n * @return {Number}\n */\n getZoom() {\n return this.viewportTransform[0];\n }\n\n /**\n * Sets viewport transformation of this canvas instance\n * @param {Array} vpt a Canvas 2D API transform matrix\n */\n setViewportTransform(vpt: TMat2D) {\n this.viewportTransform = vpt;\n this.calcViewportBoundaries();\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * Sets zoom level of this canvas instance, the zoom centered around point\n * meaning that following zoom to point with the same point will have the visual\n * effect of the zoom originating from that point. The point won't move.\n * It has nothing to do with canvas center or visual center of the viewport.\n * @param {Point} point to zoom with respect to\n * @param {Number} value to set zoom to, less than 1 zooms out\n */\n zoomToPoint(point: Point, value: number) {\n // TODO: just change the scale, preserve other transformations\n const before = point,\n vpt: TMat2D = [...this.viewportTransform];\n const newPoint = transformPoint(point, invertTransform(vpt));\n vpt[0] = value;\n vpt[3] = value;\n const after = transformPoint(newPoint, vpt);\n vpt[4] += before.x - after.x;\n vpt[5] += before.y - after.y;\n this.setViewportTransform(vpt);\n }\n\n /**\n * Sets zoom level of this canvas instance\n * @param {Number} value to set zoom to, less than 1 zooms out\n */\n setZoom(value: number) {\n this.zoomToPoint(new Point(0, 0), value);\n }\n\n /**\n * Pan viewport so as to place point at top left corner of canvas\n * @param {Point} point to move to\n */\n absolutePan(point: Point) {\n const vpt: TMat2D = [...this.viewportTransform];\n vpt[4] = -point.x;\n vpt[5] = -point.y;\n return this.setViewportTransform(vpt);\n }\n\n /**\n * Pans viewpoint relatively\n * @param {Point} point (position vector) to move by\n */\n relativePan(point: Point) {\n return this.absolutePan(\n new Point(\n -point.x - this.viewportTransform[4],\n -point.y - this.viewportTransform[5],\n ),\n );\n }\n\n /**\n * Returns <canvas> element corresponding to this instance\n * @return {HTMLCanvasElement}\n */\n getElement(): HTMLCanvasElement {\n return this.elements.lower.el;\n }\n\n /**\n * Clears specified context of canvas element\n * @param {CanvasRenderingContext2D} ctx Context to clear\n */\n clearContext(ctx: CanvasRenderingContext2D) {\n ctx.clearRect(0, 0, this.width, this.height);\n }\n\n /**\n * Returns context of canvas where objects are drawn\n * @return {CanvasRenderingContext2D}\n */\n getContext(): CanvasRenderingContext2D {\n return this.elements.lower.ctx;\n }\n\n /**\n * Clears all contexts (background, main, top) of an instance\n */\n clear() {\n this.remove(...this.getObjects());\n this.backgroundImage = undefined;\n this.overlayImage = undefined;\n this.backgroundColor = '';\n this.overlayColor = '';\n this.clearContext(this.getContext());\n this.fire('canvas:cleared');\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * Renders the canvas\n */\n renderAll() {\n this.cancelRequestedRender();\n if (this.destroyed) {\n return;\n }\n this.renderCanvas(this.getContext(), this._objects);\n }\n\n /**\n * Function created to be instance bound at initialization\n * used in requestAnimationFrame rendering\n * Let the fabricJS call it. If you call it manually you could have more\n * animationFrame stacking on to of each other\n * for an imperative rendering, use canvas.renderAll\n * @private\n */\n renderAndReset() {\n this.nextRenderHandle = 0;\n this.renderAll();\n }\n\n /**\n * Append a renderAll request to next animation frame.\n * unless one is already in progress, in that case nothing is done\n * a boolean flag will avoid appending more.\n */\n requestRenderAll() {\n if (!this.nextRenderHandle && !this.disposed && !this.destroyed) {\n this.nextRenderHandle = requestAnimFrame(() => this.renderAndReset());\n }\n }\n\n /**\n * Calculate the position of the 4 corner of canvas with current viewportTransform.\n * helps to determinate when an object is in the current rendering viewport\n */\n calcViewportBoundaries(): TCornerPoint {\n const width = this.width,\n height = this.height,\n iVpt = invertTransform(this.viewportTransform),\n a = transformPoint({ x: 0, y: 0 }, iVpt),\n b = transformPoint({ x: width, y: height }, iVpt),\n // we don't support vpt flipping\n // but the code is robust enough to mostly work with flipping\n min = a.min(b),\n max = a.max(b);\n return (this.vptCoords = {\n tl: min,\n tr: new Point(max.x, min.y),\n bl: new Point(min.x, max.y),\n br: max,\n });\n }\n\n cancelRequestedRender() {\n if (this.nextRenderHandle) {\n cancelAnimFrame(this.nextRenderHandle);\n this.nextRenderHandle = 0;\n }\n }\n\n drawControls(_ctx: CanvasRenderingContext2D) {\n // Static canvas has no controls\n }\n\n /**\n * Renders background, objects, overlay and controls.\n * @param {CanvasRenderingContext2D} ctx\n * @param {Array} objects to render\n */\n renderCanvas(ctx: CanvasRenderingContext2D, objects: FabricObject[]) {\n if (this.destroyed) {\n return;\n }\n\n const v = this.viewportTransform,\n path = this.clipPath;\n this.calcViewportBoundaries();\n this.clearContext(ctx);\n ctx.imageSmoothingEnabled = this.imageSmoothingEnabled;\n // @ts-expect-error node-canvas stuff\n ctx.patternQuality = 'best';\n this.fire('before:render', { ctx });\n this._renderBackground(ctx);\n\n ctx.save();\n //apply viewport transform once for all rendering process\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n this._renderObjects(ctx, objects);\n ctx.restore();\n if (!this.controlsAboveOverlay && !this.skipControlsDrawing) {\n this.drawControls(ctx);\n }\n if (path) {\n path._set('canvas', this);\n // needed to setup a couple of variables\n path.shouldCache();\n path._transformDone = true;\n path.renderCache({ forClipping: true });\n this.drawClipPathOnCanvas(ctx, path as TCachedFabricObject);\n }\n this._renderOverlay(ctx);\n if (this.controlsAboveOverlay && !this.skipControlsDrawing) {\n this.drawControls(ctx);\n }\n this.fire('after:render', { ctx });\n\n if (this.__cleanupTask) {\n this.__cleanupTask();\n this.__cleanupTask = undefined;\n }\n }\n\n /**\n * Paint the cached clipPath on the lowerCanvasEl\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawClipPathOnCanvas(\n ctx: CanvasRenderingContext2D,\n clipPath: TCachedFabricObject,\n ) {\n const v = this.viewportTransform;\n ctx.save();\n ctx.transform(...v);\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4;\n ctx.globalCompositeOperation = 'destination-in';\n clipPath.transform(ctx);\n ctx.scale(1 / clipPath.zoomX, 1 / clipPath.zoomY);\n ctx.drawImage(\n clipPath._cacheCanvas,\n -clipPath.cacheTranslationX,\n -clipPath.cacheTranslationY,\n );\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Array} objects to render\n */\n _renderObjects(ctx: CanvasRenderingContext2D, objects: FabricObject[]) {\n for (let i = 0, len = objects.length; i < len; ++i) {\n objects[i] && objects[i].render(ctx);\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {string} property 'background' or 'overlay'\n */\n _renderBackgroundOrOverlay(\n ctx: CanvasRenderingContext2D,\n property: 'background' | 'overlay',\n ) {\n const fill = this[`${property}Color`],\n object = this[`${property}Image`],\n v = this.viewportTransform,\n needsVpt = this[`${property}Vpt`];\n if (!fill && !object) {\n return;\n }\n const isAFiller = isFiller(fill);\n if (fill) {\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.width, 0);\n ctx.lineTo(this.width, this.height);\n ctx.lineTo(0, this.height);\n ctx.closePath();\n ctx.fillStyle = isAFiller ? fill.toLive(ctx /* this */)! : fill;\n if (needsVpt) {\n ctx.transform(...v);\n }\n if (isAFiller) {\n ctx.transform(1, 0, 0, 1, fill.offsetX || 0, fill.offsetY || 0);\n const m = ((fill as Gradient<'linear'>).gradientTransform ||\n (fill as Pattern).patternTransform) as TMat2D;\n m && ctx.transform(...m);\n }\n ctx.fill();\n ctx.restore();\n }\n if (object) {\n ctx.save();\n const { skipOffscreen } = this;\n // if the object doesn't move with the viewport,\n // the offscreen concept does not apply;\n this.skipOffscreen = needsVpt;\n if (needsVpt) {\n ctx.transform(...v);\n }\n object.render(ctx);\n this.skipOffscreen = skipOffscreen;\n ctx.restore();\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground(ctx: CanvasRenderingContext2D) {\n this._renderBackgroundOrOverlay(ctx, 'background');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderOverlay(ctx: CanvasRenderingContext2D) {\n this._renderBackgroundOrOverlay(ctx, 'overlay');\n }\n\n /**\n * Returns coordinates of a center of canvas.\n * Returned value is an object with top and left properties\n * @return {Object} object with \"top\" and \"left\" number values\n * @deprecated migrate to `getCenterPoint`\n */\n getCenter() {\n return {\n top: this.height / 2,\n left: this.width / 2,\n };\n }\n\n /**\n * Returns coordinates of a center of canvas.\n * @return {Point}\n */\n getCenterPoint() {\n return new Point(this.width / 2, this.height / 2);\n }\n\n /**\n * Centers object horizontally in the canvas\n */\n centerObjectH(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(this.getCenterPoint().x, object.getCenterPoint().y),\n );\n }\n\n /**\n * Centers object vertically in the canvas\n * @param {FabricObject} object Object to center vertically\n */\n centerObjectV(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(object.getCenterPoint().x, this.getCenterPoint().y),\n );\n }\n\n /**\n * Centers object vertically and horizontally in the canvas\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n centerObject(object: FabricObject) {\n return this._centerObject(object, this.getCenterPoint());\n }\n\n /**\n * Centers object vertically and horizontally in the viewport\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n viewportCenterObject(object: FabricObject) {\n return this._centerObject(object, this.getVpCenter());\n }\n\n /**\n * Centers object horizontally in the viewport, object.top is unchanged\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n viewportCenterObjectH(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(this.getVpCenter().x, object.getCenterPoint().y),\n );\n }\n\n /**\n * Centers object Vertically in the viewport, object.top is unchanged\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n viewportCenterObjectV(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(object.getCenterPoint().x, this.getVpCenter().y),\n );\n }\n\n /**\n * Calculate the point in canvas that correspond to the center of actual viewport.\n * @return {Point} vpCenter, viewport center\n */\n getVpCenter(): Point {\n return transformPoint(\n this.getCenterPoint(),\n invertTransform(this.viewportTransform),\n );\n }\n\n /**\n * @private\n * @param {FabricObject} object Object to center\n * @param {Point} center Center point\n */\n _centerObject(object: FabricObject, center: Point) {\n object.setXY(center, CENTER, CENTER);\n object.setCoords();\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * Returns dataless JSON representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {String} json string\n */\n toDatalessJSON(propertiesToInclude?: string[]) {\n return this.toDatalessObject(propertiesToInclude);\n }\n\n /**\n * Returns object representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject(propertiesToInclude?: string[]) {\n return this._toObjectMethod('toObject', propertiesToInclude);\n }\n\n /**\n * Returns Object representation of canvas\n * this alias is provided because if you call JSON.stringify on an instance,\n * the toJSON object will be invoked if it exists.\n * Having a toJSON method means you can do JSON.stringify(myCanvas)\n * @return {Object} JSON compatible object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n * @see {@link http://jsfiddle.net/fabricjs/pec86/|jsFiddle demo}\n * @example JSON without additional properties\n * var json = canvas.toJSON();\n * @example JSON with additional properties included\n * var json = canvas.toJSON(['lockMovementX', 'lockMovementY', 'lockRotation', 'lockScalingX', 'lockScalingY']);\n * @example JSON without default values\n * var json = canvas.toJSON();\n */\n toJSON() {\n return this.toObject();\n }\n\n /**\n * Returns dataless object representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject(propertiesToInclude?: string[]) {\n return this._toObjectMethod('toDatalessObject', propertiesToInclude);\n }\n\n /**\n * @private\n */\n _toObjectMethod(\n methodName: TValidToObjectMethod,\n propertiesToInclude?: string[],\n ) {\n const clipPath = this.clipPath;\n const clipPathData =\n clipPath && !clipPath.excludeFromExport\n ? this._toObject(clipPath, methodName, propertiesToInclude)\n : null;\n return {\n version: VERSION,\n ...pick(this, propertiesToInclude as (keyof this)[]),\n objects: this._objects\n .filter((object) => !object.excludeFromExport)\n .map((instance) =>\n this._toObject(instance, methodName, propertiesToInclude),\n ),\n ...this.__serializeBgOverlay(methodName, propertiesToInclude),\n ...(clipPathData ? { clipPath: clipPathData } : null),\n };\n }\n\n /**\n * @private\n */\n protected _toObject(\n instance: FabricObject,\n methodName: TValidToObjectMethod,\n propertiesToInclude?: string[],\n ) {\n let originalValue;\n\n if (!this.includeDefaultValues) {\n originalValue = instance.includeDefaultValues;\n instance.includeDefaultValues = false;\n }\n\n const object = instance[methodName](propertiesToInclude);\n if (!this.includeDefaultValues) {\n instance.includeDefaultValues = !!originalValue;\n }\n return object;\n }\n\n /**\n * @private\n */\n __serializeBgOverlay(\n methodName: TValidToObjectMethod,\n propertiesToInclude?: string[],\n ) {\n const data: any = {},\n bgImage = this.backgroundImage,\n overlayImage = this.overlayImage,\n bgColor = this.backgroundColor,\n overlayColor = this.overlayColor;\n\n if (isFiller(bgColor)) {\n if (!bgColor.excludeFromExport) {\n data.background = bgColor.toObject(propertiesToInclude);\n }\n } else if (bgColor) {\n data.background = bgColor;\n }\n\n if (isFiller(overlayColor)) {\n if (!overlayColor.excludeFromExport) {\n data.overlay = overlayColor.toObject(propertiesToInclude);\n }\n } else if (overlayColor) {\n data.overlay = overlayColor;\n }\n\n if (bgImage && !bgImage.excludeFromExport) {\n data.backgroundImage = this._toObject(\n bgImage,\n methodName,\n propertiesToInclude,\n );\n }\n if (overlayImage && !overlayImage.excludeFromExport) {\n data.overlayImage = this._toObject(\n overlayImage,\n methodName,\n propertiesToInclude,\n );\n }\n\n return data;\n }\n\n /* _TO_SVG_START_ */\n\n declare svgViewportTransformation: boolean;\n\n /**\n * Returns SVG representation of canvas\n * @function\n * @param {Object} [options] Options object for SVG output\n * @param {Boolean} [options.suppressPreamble=false] If true xml tag is not included\n * @param {Object} [options.viewBox] SVG viewbox object\n * @param {Number} [options.viewBox.x] x-coordinate of viewbox\n * @param {Number} [options.viewBox.y] y-coordinate of viewbox\n * @param {Number} [options.viewBox.width] Width of viewbox\n * @param {Number} [options.viewBox.height] Height of viewbox\n * @param {String} [options.encoding=UTF-8] Encoding of SVG output\n * @param {String} [options.width] desired width of svg with or without units\n * @param {String} [options.height] desired height of svg with or without units\n * @param {Function} [reviver] Method for further parsing of svg elements, called after each fabric object converted into svg representation.\n * @return {String} SVG string\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n * @see {@link http://jsfiddle.net/fabricjs/jQ3ZZ/|jsFiddle demo}\n * @example Normal SVG output\n * var svg = canvas.toSVG();\n * @example SVG output without preamble (without <?xml ../>)\n * var svg = canvas.toSVG({suppressPreamble: true});\n * @example SVG output with viewBox attribute\n * var svg = canvas.toSVG({\n * viewBox: {\n * x: 100,\n * y: 100,\n * width: 200,\n * height: 300\n * }\n * });\n * @example SVG output with different encoding (default: UTF-8)\n * var svg = canvas.toSVG({encoding: 'ISO-8859-1'});\n * @example Modify SVG output with reviver function\n * var svg = canvas.toSVG(null, function(svg) {\n * return svg.replace('stroke-dasharray: ; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; ', '');\n * });\n */\n toSVG(options: TSVGExportOptions = {}, reviver?: TSVGReviver) {\n options.reviver = reviver;\n const markup: string[] = [];\n\n this._setSVGPreamble(markup, options);\n this._setSVGHeader(markup, options);\n if (this.clipPath) {\n markup.push(`\\n`);\n }\n this._setSVGBgOverlayColor(markup, 'background');\n this._setSVGBgOverlayImage(markup, 'backgroundImage', reviver);\n this._setSVGObjects(markup, reviver);\n if (this.clipPath) {\n markup.push('\\n');\n }\n this._setSVGBgOverlayColor(markup, 'overlay');\n this._setSVGBgOverlayImage(markup, 'overlayImage', reviver);\n\n markup.push('');\n\n return markup.join('');\n }\n\n /**\n * @private\n */\n _setSVGPreamble(markup: string[], options: TSVGExportOptions): void {\n if (options.suppressPreamble) {\n return;\n }\n markup.push(\n '\\n',\n '\\n',\n );\n }\n\n /**\n * @private\n */\n _setSVGHeader(markup: string[], options: TSVGExportOptions): void {\n const width = options.width || `${this.width}`,\n height = options.height || `${this.height}`,\n NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS,\n optViewBox = options.viewBox;\n let viewBox: string;\n if (optViewBox) {\n viewBox = `viewBox=\"${optViewBox.x} ${optViewBox.y} ${optViewBox.width} ${optViewBox.height}\" `;\n } else if (this.svgViewportTransformation) {\n const vpt = this.viewportTransform;\n viewBox = `viewBox=\"${toFixed(\n -vpt[4] / vpt[0],\n NUM_FRACTION_DIGITS,\n )} ${toFixed(-vpt[5] / vpt[3], NUM_FRACTION_DIGITS)} ${toFixed(\n this.width / vpt[0],\n NUM_FRACTION_DIGITS,\n )} ${toFixed(this.height / vpt[3], NUM_FRACTION_DIGITS)}\" `;\n } else {\n viewBox = `viewBox=\"0 0 ${this.width} ${this.height}\" `;\n }\n\n markup.push(\n '\\n',\n 'Created with Fabric.js ',\n VERSION,\n '\\n',\n '\\n',\n this.createSVGFontFacesMarkup(),\n this.createSVGRefElementsMarkup(),\n this.createSVGClipPathMarkup(options),\n '\\n',\n );\n }\n\n createSVGClipPathMarkup(options: TSVGExportOptions): string {\n const clipPath = this.clipPath;\n if (clipPath) {\n clipPath.clipPathId = `CLIPPATH_${uid()}`;\n return `\\n${clipPath.toClipPathSVG(\n options.reviver,\n )}\\n`;\n }\n return '';\n }\n\n /**\n * Creates markup containing SVG referenced elements like patterns, gradients etc.\n * @return {String}\n */\n createSVGRefElementsMarkup(): string {\n return (['background', 'overlay'] as const)\n .map((prop) => {\n const fill = this[`${prop}Color`];\n if (isFiller(fill)) {\n const shouldTransform = this[`${prop}Vpt`],\n vpt = this.viewportTransform,\n object = {\n // otherwise circular dependency\n isType: () => false,\n width: this.width / (shouldTransform ? vpt[0] : 1),\n height: this.height / (shouldTransform ? vpt[3] : 1),\n };\n return fill.toSVG(object as FabricObject, {\n additionalTransform: shouldTransform ? matrixToSVG(vpt) : '',\n });\n }\n })\n .join('');\n }\n\n /**\n * Creates markup containing SVG font faces,\n * font URLs for font faces must be collected by developers\n * and are not extracted from the DOM by fabricjs\n * @param {Array} objects Array of fabric objects\n * @return {String}\n */\n createSVGFontFacesMarkup(): string {\n const objects: FabricObject[] = [],\n fontList: Record = {},\n fontPaths = config.fontPaths;\n\n this._objects.forEach(function add(object) {\n objects.push(object);\n if (isCollection(object)) {\n object._objects.forEach(add);\n }\n });\n\n objects.forEach((obj) => {\n if (!isTextObject(obj)) {\n return;\n }\n const { styles, fontFamily } = obj;\n if (fontList[fontFamily] || !fontPaths[fontFamily]) {\n return;\n }\n fontList[fontFamily] = true;\n if (!styles) {\n return;\n }\n Object.values(styles).forEach((styleRow) => {\n Object.values(styleRow).forEach(({ fontFamily = '' }) => {\n if (!fontList[fontFamily] && fontPaths[fontFamily]) {\n fontList[fontFamily] = true;\n }\n });\n });\n });\n\n const fontListMarkup = Object.keys(fontList)\n .map(\n (fontFamily) =>\n `\\t\\t@font-face {\\n\\t\\t\\tfont-family: '${fontFamily}';\\n\\t\\t\\tsrc: url('${fontPaths[fontFamily]}');\\n\\t\\t}\\n`,\n )\n .join('');\n\n if (fontListMarkup) {\n return `\\t\\n`;\n }\n return '';\n }\n\n /**\n * @private\n */\n _setSVGObjects(markup: string[], reviver?: TSVGReviver) {\n this.forEachObject((fabricObject) => {\n if (fabricObject.excludeFromExport) {\n return;\n }\n this._setSVGObject(markup, fabricObject, reviver);\n });\n }\n\n /**\n * This is its own function because the Canvas ( non static ) requires extra code here\n * @private\n */\n _setSVGObject(\n markup: string[],\n instance: FabricObject,\n reviver?: TSVGReviver,\n ) {\n markup.push(instance.toSVG(reviver));\n }\n\n /**\n * @private\n */\n _setSVGBgOverlayImage(\n markup: string[],\n property: 'overlayImage' | 'backgroundImage',\n reviver?: TSVGReviver,\n ) {\n const bgOrOverlay = this[property];\n if (bgOrOverlay && !bgOrOverlay.excludeFromExport && bgOrOverlay.toSVG) {\n markup.push(bgOrOverlay.toSVG(reviver));\n }\n }\n\n /**\n * @TODO this seems to handle patterns but fail at gradients.\n * @private\n */\n _setSVGBgOverlayColor(markup: string[], property: 'background' | 'overlay') {\n const filler = this[`${property}Color`];\n if (!filler) {\n return;\n }\n if (isFiller(filler)) {\n const repeat = (filler as Pattern).repeat || '',\n finalWidth = this.width,\n finalHeight = this.height,\n shouldInvert = this[`${property}Vpt`],\n additionalTransform = shouldInvert\n ? matrixToSVG(invertTransform(this.viewportTransform))\n : '';\n markup.push(\n `\\n`,\n );\n } else {\n markup.push(\n '\\n',\n );\n }\n }\n /* _TO_SVG_END_ */\n\n /**\n * Populates canvas with data from the specified JSON.\n * JSON format must conform to the one of {@link fabric.Canvas#toJSON}\n *\n * **IMPORTANT**: It is recommended to abort loading tasks before calling this method to prevent race conditions and unnecessary networking\n *\n * @param {String|Object} json JSON string or object\n * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created.\n * @param {Object} [options] options\n * @param {AbortSignal} [options.signal] see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @return {Promise} instance\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#deserialization}\n * @see {@link http://jsfiddle.net/fabricjs/fmgXt/|jsFiddle demo}\n * @example loadFromJSON\n * canvas.loadFromJSON(json).then((canvas) => canvas.requestRenderAll());\n * @example loadFromJSON with reviver\n * canvas.loadFromJSON(json, function(o, object) {\n * // `o` = json object\n * // `object` = fabric.Object instance\n * // ... do some stuff ...\n * }).then((canvas) => {\n * ... canvas is restored, add your code.\n * });\n *\n */\n loadFromJSON(\n json: string | Record,\n reviver?: EnlivenObjectOptions['reviver'],\n { signal }: Abortable = {},\n ): Promise {\n if (!json) {\n return Promise.reject(new FabricError('`json` is undefined'));\n }\n\n // parse json if it wasn't already\n const serialized = typeof json === 'string' ? JSON.parse(json) : json;\n const {\n objects = [],\n backgroundImage,\n background,\n overlayImage,\n overlay,\n clipPath,\n } = serialized;\n const renderOnAddRemove = this.renderOnAddRemove;\n this.renderOnAddRemove = false;\n\n return Promise.all([\n enlivenObjects(objects, {\n reviver,\n signal,\n }),\n enlivenObjectEnlivables(\n {\n backgroundImage,\n backgroundColor: background,\n overlayImage,\n overlayColor: overlay,\n clipPath,\n },\n { signal },\n ),\n ]).then(([enlived, enlivedMap]) => {\n this.clear();\n this.add(...enlived);\n this.set(serialized);\n this.set(enlivedMap);\n this.renderOnAddRemove = renderOnAddRemove;\n return this;\n });\n }\n\n /**\n * Clones canvas instance\n * @param {string[]} [properties] Array of properties to include in the cloned canvas and children\n */\n clone(properties: string[]) {\n const data = this.toObject(properties);\n const canvas = this.cloneWithoutData();\n return canvas.loadFromJSON(data);\n }\n\n /**\n * Clones canvas instance without cloning existing data.\n * This essentially copies canvas dimensions since loadFromJSON does not affect canvas size.\n */\n cloneWithoutData() {\n const el = createCanvasElement();\n el.width = this.width;\n el.height = this.height;\n return new (this.constructor as Constructor)(el);\n }\n\n /**\n * Exports canvas element to a dataurl image. Note that when multiplier is used, cropping is scaled appropriately\n * @param {Object} [options] Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by, to have consistent\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 2.0.0\n * @param {(object: fabric.Object) => boolean} [options.filter] Function to filter objects.\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n * @see {@link https://jsfiddle.net/xsjua1rd/ demo}\n * @example Generate jpeg dataURL with lower quality\n * var dataURL = canvas.toDataURL({\n * format: 'jpeg',\n * quality: 0.8\n * });\n * @example Generate cropped png dataURL (clipping of canvas)\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * left: 100,\n * top: 100,\n * width: 200,\n * height: 200\n * });\n * @example Generate double scaled png dataURL\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * multiplier: 2\n * });\n * @example Generate dataURL with objects that overlap a specified object\n * var myObject;\n * var dataURL = canvas.toDataURL({\n * filter: (object) => object.isContainedWithinObject(myObject) || object.intersectsWithObject(myObject)\n * });\n */\n toDataURL(options = {} as TDataUrlOptions): string {\n const {\n format = 'png',\n quality = 1,\n multiplier = 1,\n enableRetinaScaling = false,\n } = options;\n const finalMultiplier =\n multiplier * (enableRetinaScaling ? this.getRetinaScaling() : 1);\n\n return toDataURL(\n this.toCanvasElement(finalMultiplier, options),\n format,\n quality,\n );\n }\n\n /**\n * Create a new HTMLCanvas element painted with the current canvas content.\n * No need to resize the actual one or repaint it.\n * Will transfer object ownership to a new canvas, paint it, and set everything back.\n * This is an intermediary step used to get to a dataUrl but also it is useful to\n * create quick image copies of a canvas without passing for the dataUrl string\n * @param {Number} [multiplier] a zoom factor.\n * @param {Object} [options] Cropping informations\n * @param {Number} [options.left] Cropping left offset.\n * @param {Number} [options.top] Cropping top offset.\n * @param {Number} [options.width] Cropping width.\n * @param {Number} [options.height] Cropping height.\n * @param {(object: fabric.Object) => boolean} [options.filter] Function to filter objects.\n */\n toCanvasElement(\n multiplier = 1,\n { width, height, left, top, filter } = {} as TToCanvasElementOptions,\n ): HTMLCanvasElement {\n const scaledWidth = (width || this.width) * multiplier,\n scaledHeight = (height || this.height) * multiplier,\n zoom = this.getZoom(),\n originalWidth = this.width,\n originalHeight = this.height,\n originalSkipControlsDrawing = this.skipControlsDrawing,\n newZoom = zoom * multiplier,\n vp = this.viewportTransform,\n translateX = (vp[4] - (left || 0)) * multiplier,\n translateY = (vp[5] - (top || 0)) * multiplier,\n newVp = [newZoom, 0, 0, newZoom, translateX, translateY] as TMat2D,\n originalRetina = this.enableRetinaScaling,\n canvasEl = createCanvasElement(),\n objectsToRender = filter\n ? this._objects.filter((obj) => filter(obj))\n : this._objects;\n canvasEl.width = scaledWidth;\n canvasEl.height = scaledHeight;\n this.enableRetinaScaling = false;\n this.viewportTransform = newVp;\n this.width = scaledWidth;\n this.height = scaledHeight;\n this.skipControlsDrawing = true;\n this.calcViewportBoundaries();\n this.renderCanvas(canvasEl.getContext('2d')!, objectsToRender);\n this.viewportTransform = vp;\n this.width = originalWidth;\n this.height = originalHeight;\n this.calcViewportBoundaries();\n this.enableRetinaScaling = originalRetina;\n this.skipControlsDrawing = originalSkipControlsDrawing;\n return canvasEl;\n }\n\n /**\n * Waits until rendering has settled to destroy the canvas\n * @returns {Promise} a promise resolving to `true` once the canvas has been destroyed or to `false` if the canvas has was already destroyed\n * @throws if aborted by a consequent call\n */\n dispose() {\n !this.disposed &&\n this.elements.cleanupDOM({ width: this.width, height: this.height });\n runningAnimations.cancelByCanvas(this);\n this.disposed = true;\n return new Promise((resolve, reject) => {\n const task = () => {\n this.destroy();\n resolve(true);\n };\n task.kill = reject;\n if (this.__cleanupTask) {\n this.__cleanupTask.kill('aborted');\n }\n\n if (this.destroyed) {\n resolve(false);\n } else if (this.nextRenderHandle) {\n this.__cleanupTask = task;\n } else {\n task();\n }\n });\n }\n\n /**\n * Clears the canvas element, disposes objects and frees resources.\n *\n * Invoked as part of the **async** operation of {@link dispose}.\n *\n * **CAUTION**:\n *\n * This method is **UNSAFE**.\n * You may encounter a race condition using it if there's a requested render.\n * Call this method only if you are sure rendering has settled.\n * Consider using {@link dispose} as it is **SAFE**\n *\n * @private\n */\n destroy() {\n this.destroyed = true;\n this.cancelRequestedRender();\n this.forEachObject((object) => object.dispose());\n this._objects = [];\n if (this.backgroundImage) {\n this.backgroundImage.dispose();\n }\n this.backgroundImage = undefined;\n if (this.overlayImage) {\n this.overlayImage.dispose();\n }\n this.overlayImage = undefined;\n this.elements.dispose();\n }\n\n /**\n * Returns a string representation of an instance\n * @return {String} string representation of an instance\n */\n toString() {\n return `#`;\n }\n}\n","import type { TPointerEvent } from '../EventTypeDefs';\nimport { Point } from '../Point';\nimport { getScrollLeftTop } from './dom_misc';\n\nconst touchEvents = ['touchstart', 'touchmove', 'touchend'];\n\nfunction getTouchInfo(event: TouchEvent | MouseEvent): MouseEvent | Touch {\n const touchProp = (event as TouchEvent).changedTouches;\n if (touchProp && touchProp[0]) {\n return touchProp[0];\n }\n return event as MouseEvent;\n}\n\nexport const getPointer = (event: TPointerEvent): Point => {\n const element = event.target as HTMLElement,\n scroll = getScrollLeftTop(element),\n _evt = getTouchInfo(event);\n return new Point(_evt.clientX + scroll.left, _evt.clientY + scroll.top);\n};\n\nexport const isTouchEvent = (event: TPointerEvent) =>\n touchEvents.includes(event.type) ||\n (event as PointerEvent).pointerType === 'touch';\n\nexport const stopEvent = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n};\n","import type { XY } from '../../Point';\nimport type { TBBox } from '../../typedefs';\n\n/**\n * Calculates bounding box (left, top, width, height) from given `points`\n * @param {XY[]} points\n * @return {Object} Object with left, top, width, height properties\n */\nexport const makeBoundingBoxFromPoints = (points: XY[]): TBBox => {\n let left = 0,\n top = 0,\n width = 0,\n height = 0;\n\n for (let i = 0, len = points.length; i < len; i++) {\n const { x, y } = points[i];\n if (x > width || !i) width = x;\n if (x < left || !i) left = x;\n if (y > height || !i) height = y;\n if (y < top || !i) top = y;\n }\n\n return {\n left,\n top,\n width: width - left,\n height: height - top,\n };\n};\n","import { Point } from '../../Point';\nimport { CENTER } from '../../constants';\nimport type { FabricObject } from '../../shapes/Object/Object';\nimport type { TMat2D } from '../../typedefs';\nimport { makeBoundingBoxFromPoints } from './boundingBoxFromPoints';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n qrDecompose,\n} from './matrix';\n\n/**\n * given an object and a transform, apply the inverse transform to the object,\n * this is equivalent to remove from that object that transformation, so that\n * added in a space with the removed transform, the object will be the same as before.\n * Removing from an object a transform that scale by 2 is like scaling it by 1/2.\n * Removing from an object a transform that rotate by 30deg is like rotating by 30deg\n * in the opposite direction.\n * This util is used to add objects inside transformed groups or nested groups.\n * @param {FabricObject} object the object you want to transform\n * @param {TMat2D} transform the destination transform\n */\nexport const removeTransformFromObject = (\n object: FabricObject,\n transform: TMat2D,\n) => {\n const inverted = invertTransform(transform),\n finalTransform = multiplyTransformMatrices(\n inverted,\n object.calcOwnMatrix(),\n );\n applyTransformToObject(object, finalTransform);\n};\n\n/**\n * given an object and a transform, apply the transform to the object.\n * this is equivalent to change the space where the object is drawn.\n * Adding to an object a transform that scale by 2 is like scaling it by 2.\n * This is used when removing an object from an active selection for example.\n * @param {FabricObject} object the object you want to transform\n * @param {Array} transform the destination transform\n */\nexport const addTransformToObject = (object: FabricObject, transform: TMat2D) =>\n applyTransformToObject(\n object,\n multiplyTransformMatrices(transform, object.calcOwnMatrix()),\n );\n\n/**\n * discard an object transform state and apply the one from the matrix.\n * @param {FabricObject} object the object you want to transform\n * @param {Array} transform the destination transform\n */\nexport const applyTransformToObject = (\n object: FabricObject,\n transform: TMat2D,\n) => {\n const { translateX, translateY, scaleX, scaleY, ...otherOptions } =\n qrDecompose(transform),\n center = new Point(translateX, translateY);\n object.flipX = false;\n object.flipY = false;\n Object.assign(object, otherOptions);\n object.set({ scaleX, scaleY });\n object.setPositionByOrigin(center, CENTER, CENTER);\n};\n/**\n * reset an object transform state to neutral. Top and left are not accounted for\n * @param {FabricObject} target object to transform\n */\nexport const resetObjectTransform = (target: FabricObject) => {\n target.scaleX = 1;\n target.scaleY = 1;\n target.skewX = 0;\n target.skewY = 0;\n target.flipX = false;\n target.flipY = false;\n target.rotate(0);\n};\n\n/**\n * Extract Object transform values\n * @param {FabricObject} target object to read from\n * @return {Object} Components of transform\n */\nexport const saveObjectTransform = (target: FabricObject) => ({\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n angle: target.angle,\n left: target.left,\n flipX: target.flipX,\n flipY: target.flipY,\n top: target.top,\n});\n\n/**\n * given a width and height, return the size of the bounding box\n * that can contains the box with width/height with applied transform.\n * Use to calculate the boxes around objects for controls.\n * @param {Number} width\n * @param {Number} height\n * @param {TMat2D} t\n * @returns {Point} size\n */\nexport const sizeAfterTransform = (\n width: number,\n height: number,\n t: TMat2D,\n) => {\n const dimX = width / 2,\n dimY = height / 2,\n points = [\n new Point(-dimX, -dimY),\n new Point(dimX, -dimY),\n new Point(-dimX, dimY),\n new Point(dimX, dimY),\n ].map((p) => p.transform(t)),\n bbox = makeBoundingBoxFromPoints(points);\n return new Point(bbox.width, bbox.height);\n};\n","import { iMatrix } from '../../constants';\nimport type { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/Object';\nimport type { TMat2D } from '../../typedefs';\nimport { invertTransform, multiplyTransformMatrices } from './matrix';\nimport { applyTransformToObject } from './objectTransforms';\n\n/**\n * We are actually looking for the transformation from the destination plane to the source plane (change of basis matrix)\\\n * The object will exist on the destination plane and we want it to seem unchanged by it so we invert the destination matrix (`to`) and then apply the source matrix (`from`)\n * @param [from]\n * @param [to]\n * @returns\n */\nexport const calcPlaneChangeMatrix = (\n from: TMat2D = iMatrix,\n to: TMat2D = iMatrix,\n) => multiplyTransformMatrices(invertTransform(to), from);\n\n/**\n * Sends a point from the source coordinate plane to the destination coordinate plane.\\\n * From the canvas/viewer's perspective the point remains unchanged.\n *\n * @example Send point from canvas plane to group plane\n * var obj = new Rect({ left: 20, top: 20, width: 60, height: 60, strokeWidth: 0 });\n * var group = new Group([obj], { strokeWidth: 0 });\n * var sentPoint1 = sendPointToPlane(new Point(50, 50), undefined, group.calcTransformMatrix());\n * var sentPoint2 = sendPointToPlane(new Point(50, 50), iMatrix, group.calcTransformMatrix());\n * console.log(sentPoint1, sentPoint2) // both points print (0,0) which is the center of group\n *\n * @param {Point} point\n * @param {TMat2D} [from] plane matrix containing object. Passing `undefined` is equivalent to passing the identity matrix, which means `point` exists in the canvas coordinate plane.\n * @param {TMat2D} [to] destination plane matrix to contain object. Passing `undefined` means `point` should be sent to the canvas coordinate plane.\n * @returns {Point} transformed point\n */\nexport const sendPointToPlane = (\n point: Point,\n from: TMat2D = iMatrix,\n to: TMat2D = iMatrix,\n): Point => point.transform(calcPlaneChangeMatrix(from, to));\n\n/**\n * See {@link sendPointToPlane}\n */\nexport const sendVectorToPlane = (\n point: Point,\n from: TMat2D = iMatrix,\n to: TMat2D = iMatrix,\n): Point => point.transform(calcPlaneChangeMatrix(from, to), true);\n\n/**\n *\n * A util that abstracts applying transform to objects.\\\n * Sends `object` to the destination coordinate plane by applying the relevant transformations.\\\n * Changes the space/plane where `object` is drawn.\\\n * From the canvas/viewer's perspective `object` remains unchanged.\n *\n * @example Move clip path from one object to another while preserving it's appearance as viewed by canvas/viewer\n * let obj, obj2;\n * let clipPath = new Circle({ radius: 50 });\n * obj.clipPath = clipPath;\n * // render\n * sendObjectToPlane(clipPath, obj.calcTransformMatrix(), obj2.calcTransformMatrix());\n * obj.clipPath = undefined;\n * obj2.clipPath = clipPath;\n * // render, clipPath now clips obj2 but seems unchanged from the eyes of the viewer\n *\n * @example Clip an object's clip path with an existing object\n * let obj, existingObj;\n * let clipPath = new Circle({ radius: 50 });\n * obj.clipPath = clipPath;\n * let transformTo = multiplyTransformMatrices(obj.calcTransformMatrix(), clipPath.calcTransformMatrix());\n * sendObjectToPlane(existingObj, existingObj.group?.calcTransformMatrix(), transformTo);\n * clipPath.clipPath = existingObj;\n *\n * @param {FabricObject} object\n * @param {Matrix} [from] plane matrix containing object. Passing `undefined` is equivalent to passing the identity matrix, which means `object` is a direct child of canvas.\n * @param {Matrix} [to] destination plane matrix to contain object. Passing `undefined` means `object` should be sent to the canvas coordinate plane.\n * @returns {Matrix} the transform matrix that was applied to `object`\n */\nexport const sendObjectToPlane = (\n object: FabricObject,\n from?: TMat2D,\n to?: TMat2D,\n): TMat2D => {\n const t = calcPlaneChangeMatrix(from, to);\n applyTransformToObject(\n object,\n multiplyTransformMatrices(t, object.calcOwnMatrix()),\n );\n return t;\n};\n","import type {\n ObjectModificationEvents,\n TModificationEvents,\n} from '../EventTypeDefs';\n\nexport const fireEvent = (\n eventName: TModificationEvents,\n options: ObjectModificationEvents[typeof eventName],\n) => {\n const {\n transform: { target },\n } = options;\n target.canvas?.fire(`object:${eventName}`, {\n ...options,\n target,\n });\n target.fire(eventName, options);\n};\n","import type { TOriginX, TOriginY } from '../../typedefs';\n\nconst originOffset = {\n left: -0.5,\n top: -0.5,\n center: 0,\n bottom: 0.5,\n right: 0.5,\n};\n/**\n * Resolves origin value relative to center\n * @private\n * @param {TOriginX | TOriginY} originValue originX / originY\n * @returns number\n */\n\nexport const resolveOrigin = (\n originValue: TOriginX | TOriginY | number,\n): number =>\n typeof originValue === 'string'\n ? originOffset[originValue]\n : originValue - 0.5;\n","import type {\n TPointerEvent,\n Transform,\n TransformAction,\n BasicTransformEvent,\n} from '../EventTypeDefs';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { Point } from '../Point';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TOriginX, TOriginY } from '../typedefs';\nimport {\n degreesToRadians,\n radiansToDegrees,\n} from '../util/misc/radiansDegreesConversion';\nimport type { Control } from './Control';\nimport { CENTER } from '../constants';\n\nexport const NOT_ALLOWED_CURSOR = 'not-allowed';\n\n/**\n * @param {Boolean} alreadySelected true if target is already selected\n * @param {String} corner a string representing the corner ml, mr, tl ...\n * @param {Event} e Event object\n * @param {FabricObject} [target] inserted back to help overriding. Unused\n */\nexport const getActionFromCorner = (\n alreadySelected: boolean,\n corner: string | undefined,\n e: TPointerEvent,\n target: FabricObject,\n) => {\n if (!corner || !alreadySelected) {\n return 'drag';\n }\n const control = target.controls[corner];\n return control.getActionName(e, control, target);\n};\n\n/**\n * Checks if transform is centered\n * @param {Object} transform transform data\n * @return {Boolean} true if transform is centered\n */\nexport function isTransformCentered(transform: Transform) {\n return (\n resolveOrigin(transform.originX) === resolveOrigin(CENTER) &&\n resolveOrigin(transform.originY) === resolveOrigin(CENTER)\n );\n}\n\nexport function invertOrigin(origin: TOriginX | TOriginY) {\n return -resolveOrigin(origin) + 0.5;\n}\n\nexport const isLocked = (\n target: FabricObject,\n lockingKey:\n | 'lockMovementX'\n | 'lockMovementY'\n | 'lockRotation'\n | 'lockScalingX'\n | 'lockScalingY'\n | 'lockSkewingX'\n | 'lockSkewingY'\n | 'lockScalingFlip',\n) => target[lockingKey];\n\nexport const commonEventInfo: TransformAction<\n Transform,\n BasicTransformEvent\n> = (eventData, transform, x, y) => {\n return {\n e: eventData,\n transform,\n pointer: new Point(x, y),\n };\n};\n\n/**\n * Combine control position and object angle to find the control direction compared\n * to the object center.\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n * @param {Control} control the control class\n * @return {Number} 0 - 7 a quadrant number\n */\nexport function findCornerQuadrant(\n fabricObject: FabricObject,\n control: Control,\n): number {\n // angle is relative to canvas plane\n const angle = fabricObject.getTotalAngle(),\n cornerAngle =\n angle + radiansToDegrees(Math.atan2(control.y, control.x)) + 360;\n return Math.round((cornerAngle % 360) / 45);\n}\n\n/**\n * @returns the normalized point (rotated relative to center) in local coordinates\n */\nfunction normalizePoint(\n target: FabricObject,\n point: Point,\n originX: TOriginX,\n originY: TOriginY,\n): Point {\n const center = target.getRelativeCenterPoint(),\n p =\n typeof originX !== 'undefined' && typeof originY !== 'undefined'\n ? target.translateToGivenOrigin(\n center,\n CENTER,\n CENTER,\n originX,\n originY,\n )\n : new Point(target.left, target.top),\n p2 = target.angle\n ? point.rotate(-degreesToRadians(target.angle), center)\n : point;\n return p2.subtract(p);\n}\n\n/**\n * Transforms a point to the offset from the given origin\n * @param {Object} transform\n * @param {String} originX\n * @param {String} originY\n * @param {number} x\n * @param {number} y\n * @return {Fabric.Point} the normalized point\n */\nexport function getLocalPoint(\n { target, corner }: Transform,\n originX: TOriginX,\n originY: TOriginY,\n x: number,\n y: number,\n) {\n const control = target.controls[corner],\n zoom = target.canvas?.getZoom() || 1,\n padding = target.padding / zoom,\n localPoint = normalizePoint(target, new Point(x, y), originX, originY);\n if (localPoint.x >= padding) {\n localPoint.x -= padding;\n }\n if (localPoint.x <= -padding) {\n localPoint.x += padding;\n }\n if (localPoint.y >= padding) {\n localPoint.y -= padding;\n }\n if (localPoint.y <= padding) {\n localPoint.y += padding;\n }\n localPoint.x -= control.offsetX;\n localPoint.y -= control.offsetY;\n return localPoint;\n}\n","import type { TransformActionHandler } from '../EventTypeDefs';\nimport { LEFT, TOP, MOVING } from '../constants';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo, isLocked } from './util';\n\n/**\n * Action handler\n * @private\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if the translation occurred\n */\nexport const dragHandler: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target, offsetX, offsetY } = transform,\n newLeft = x - offsetX,\n newTop = y - offsetY,\n moveX = !isLocked(target, 'lockMovementX') && target.left !== newLeft,\n moveY = !isLocked(target, 'lockMovementY') && target.top !== newTop;\n moveX && target.set(LEFT, newLeft);\n moveY && target.set(TOP, newTop);\n if (moveX || moveY) {\n fireEvent(MOVING, commonEventInfo(eventData, transform, x, y));\n }\n return moveX || moveY;\n};\n","import type { TSVGReviver } from '../../typedefs';\nimport { uid } from '../../util/internals/uid';\nimport { colorPropToSVG, matrixToSVG } from '../../util/misc/svgParsing';\nimport { FILL, NONE, STROKE } from '../../constants';\nimport type { FabricObject } from './FabricObject';\nimport { isFiller } from '../../util/typeAssertions';\n\nexport class FabricObjectSVGExportMixin {\n /**\n * When an object is being exported as SVG as a clippath, a reference inside the SVG is needed.\n * This reference is a UID in the fabric namespace and is temporary stored here.\n * @type {String}\n */\n declare clipPathId?: string;\n\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles(\n this: FabricObjectSVGExportMixin & FabricObject,\n skipShadow?: boolean,\n ) {\n const fillRule = this.fillRule ? this.fillRule : 'nonzero',\n strokeWidth = this.strokeWidth ? this.strokeWidth : '0',\n strokeDashArray = this.strokeDashArray\n ? this.strokeDashArray.join(' ')\n : NONE,\n strokeDashOffset = this.strokeDashOffset ? this.strokeDashOffset : '0',\n strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt',\n strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter',\n strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4',\n opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1',\n visibility = this.visible ? '' : ' visibility: hidden;',\n filter = skipShadow ? '' : this.getSvgFilter(),\n fill = colorPropToSVG(FILL, this.fill),\n stroke = colorPropToSVG(STROKE, this.stroke);\n\n return [\n stroke,\n 'stroke-width: ',\n strokeWidth,\n '; ',\n 'stroke-dasharray: ',\n strokeDashArray,\n '; ',\n 'stroke-linecap: ',\n strokeLineCap,\n '; ',\n 'stroke-dashoffset: ',\n strokeDashOffset,\n '; ',\n 'stroke-linejoin: ',\n strokeLineJoin,\n '; ',\n 'stroke-miterlimit: ',\n strokeMiterLimit,\n '; ',\n fill,\n 'fill-rule: ',\n fillRule,\n '; ',\n 'opacity: ',\n opacity,\n ';',\n filter,\n visibility,\n ].join('');\n }\n\n /**\n * Returns filter for svg shadow\n * @return {String}\n */\n getSvgFilter(this: FabricObjectSVGExportMixin & FabricObject) {\n return this.shadow ? `filter: url(#SVGID_${this.shadow.id});` : '';\n }\n\n /**\n * Returns id attribute for svg output\n * @return {String}\n */\n getSvgCommons(\n this: FabricObjectSVGExportMixin & FabricObject & { id?: string },\n ) {\n return [\n this.id ? `id=\"${this.id}\" ` : '',\n this.clipPath\n ? `clip-path=\"url(#${\n (this.clipPath as FabricObjectSVGExportMixin & FabricObject)\n .clipPathId\n })\" `\n : '',\n ].join('');\n }\n\n /**\n * Returns transform-string for svg-export\n * @param {Boolean} use the full transform or the single object one.\n * @return {String}\n */\n getSvgTransform(\n this: FabricObjectSVGExportMixin & FabricObject,\n full?: boolean,\n additionalTransform = '',\n ) {\n const transform = full ? this.calcTransformMatrix() : this.calcOwnMatrix(),\n svgTransform = `transform=\"${matrixToSVG(transform)}`;\n return `${svgTransform}${additionalTransform}\" `;\n }\n\n /**\n * Returns svg representation of an instance\n * This function is implemented in each subclass\n * This is just because typescript otherwise cryies all the time\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG(_reviver?: TSVGReviver): string[] {\n return [''];\n }\n\n /**\n * Returns svg representation of an instance\n * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG(\n this: FabricObjectSVGExportMixin & FabricObject,\n reviver?: TSVGReviver,\n ) {\n return this._createBaseSVGMarkup(this._toSVG(reviver), {\n reviver,\n });\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG(\n this: FabricObjectSVGExportMixin & FabricObject,\n reviver?: TSVGReviver,\n ) {\n return (\n '\\t' +\n this._createBaseClipPathSVGMarkup(this._toSVG(reviver), {\n reviver,\n })\n );\n }\n\n /**\n * @private\n */\n _createBaseClipPathSVGMarkup(\n this: FabricObjectSVGExportMixin & FabricObject,\n objectMarkup: string[],\n {\n reviver,\n additionalTransform = '',\n }: { reviver?: TSVGReviver; additionalTransform?: string } = {},\n ) {\n const commonPieces = [\n this.getSvgTransform(true, additionalTransform),\n this.getSvgCommons(),\n ].join(''),\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS');\n objectMarkup[index] = commonPieces;\n return reviver ? reviver(objectMarkup.join('')) : objectMarkup.join('');\n }\n\n /**\n * @private\n */\n _createBaseSVGMarkup(\n this: FabricObjectSVGExportMixin & FabricObject,\n objectMarkup: string[],\n {\n noStyle,\n reviver,\n withShadow,\n additionalTransform,\n }: {\n noStyle?: boolean;\n reviver?: TSVGReviver;\n withShadow?: boolean;\n additionalTransform?: string;\n } = {},\n ): string {\n const styleInfo = noStyle ? '' : `style=\"${this.getSvgStyles()}\" `,\n shadowInfo = withShadow ? `style=\"${this.getSvgFilter()}\" ` : '',\n clipPath = this.clipPath as FabricObjectSVGExportMixin & FabricObject,\n vectorEffect = this.strokeUniform\n ? 'vector-effect=\"non-scaling-stroke\" '\n : '',\n absoluteClipPath = clipPath && clipPath.absolutePositioned,\n stroke = this.stroke,\n fill = this.fill,\n shadow = this.shadow,\n markup = [],\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS');\n let clipPathMarkup;\n if (clipPath) {\n clipPath.clipPathId = `CLIPPATH_${uid()}`;\n clipPathMarkup = `\\n${clipPath.toClipPathSVG(reviver)}\\n`;\n }\n if (absoluteClipPath) {\n markup.push('\\n');\n }\n markup.push(\n '\\n',\n );\n const commonPieces = [\n styleInfo,\n vectorEffect,\n noStyle ? '' : this.addPaintOrder(),\n ' ',\n additionalTransform ? `transform=\"${additionalTransform}\" ` : '',\n ].join('');\n objectMarkup[index] = commonPieces;\n if (isFiller(fill)) {\n markup.push(fill.toSVG(this));\n }\n if (isFiller(stroke)) {\n markup.push(stroke.toSVG(this));\n }\n if (shadow) {\n markup.push(shadow.toSVG(this));\n }\n if (clipPath) {\n markup.push(clipPathMarkup);\n }\n markup.push(objectMarkup.join(''));\n markup.push('\\n');\n absoluteClipPath && markup.push('\\n');\n return reviver ? reviver(markup.join('')) : markup.join('');\n }\n\n addPaintOrder(this: FabricObjectSVGExportMixin & FabricObject) {\n return this.paintFirst !== FILL ? ` paint-order=\"${this.paintFirst}\" ` : '';\n }\n}\n","export function getSvgRegex(arr: string[]) {\n return new RegExp('^(' + arr.join('|') + ')\\\\b', 'i');\n}\n","import { getSvgRegex } from './getSvgRegex';\nimport { LEFT, TOP } from '../constants';\n\nexport const reNum = String.raw`(?:[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?)`;\n\nexport const svgNS = 'http://www.w3.org/2000/svg';\n\nexport const reFontDeclaration = new RegExp(\n '(normal|italic)?\\\\s*(normal|small-caps)?\\\\s*' +\n '(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\\\s*(' +\n reNum +\n '(?:px|cm|mm|em|pt|pc|in)*)(?:\\\\/(normal|' +\n reNum +\n '))?\\\\s+(.*)',\n);\n\nexport const svgValidTagNames = [\n 'path',\n 'circle',\n 'polygon',\n 'polyline',\n 'ellipse',\n 'rect',\n 'line',\n 'image',\n 'text',\n ],\n svgViewBoxElements = ['symbol', 'image', 'marker', 'pattern', 'view', 'svg'],\n svgInvalidAncestors = [\n 'pattern',\n 'defs',\n 'symbol',\n 'metadata',\n 'clipPath',\n 'mask',\n 'desc',\n ],\n svgValidParents = ['symbol', 'g', 'a', 'svg', 'clipPath', 'defs'],\n attributesMap = {\n cx: LEFT,\n x: LEFT,\n r: 'radius',\n cy: TOP,\n y: TOP,\n display: 'visible',\n visibility: 'visible',\n transform: 'transformMatrix',\n 'fill-opacity': 'fillOpacity',\n 'fill-rule': 'fillRule',\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-style': 'fontStyle',\n 'font-weight': 'fontWeight',\n 'letter-spacing': 'charSpacing',\n 'paint-order': 'paintFirst',\n 'stroke-dasharray': 'strokeDashArray',\n 'stroke-dashoffset': 'strokeDashOffset',\n 'stroke-linecap': 'strokeLineCap',\n 'stroke-linejoin': 'strokeLineJoin',\n 'stroke-miterlimit': 'strokeMiterLimit',\n 'stroke-opacity': 'strokeOpacity',\n 'stroke-width': 'strokeWidth',\n 'text-decoration': 'textDecoration',\n 'text-anchor': 'textAnchor',\n opacity: 'opacity',\n 'clip-path': 'clipPath',\n 'clip-rule': 'clipRule',\n 'vector-effect': 'strokeUniform',\n 'image-rendering': 'imageSmoothing',\n },\n fSize = 'font-size',\n cPath = 'clip-path';\n\nexport const svgValidTagNamesRegEx = getSvgRegex(svgValidTagNames);\n\nexport const svgViewBoxElementsRegEx = getSvgRegex(svgViewBoxElements);\n\nexport const svgValidParentsRegEx = getSvgRegex(svgValidParents);\n\n// http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute\n// matches, e.g.: +14.56e-12, etc.\nexport const reViewBoxAttrValue = new RegExp(\n '^' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*,?' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*,?' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*,?' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*' +\n '$',\n);\n","import type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport type { TRadian } from '../../typedefs';\n\nconst unitVectorX = new Point(1, 0);\nconst zero = new Point();\n\n/**\n * Rotates `vector` with `radians`\n * @param {Point} vector The vector to rotate (x and y)\n * @param {Number} radians The radians of the angle for the rotation\n * @return {Point} The new rotated point\n */\nexport const rotateVector = (vector: Point, radians: TRadian) =>\n vector.rotate(radians);\n\n/**\n * Creates a vector from points represented as a point\n *\n * @param {Point} from\n * @param {Point} to\n * @returns {Point} vector\n */\nexport const createVector = (from: XY, to: XY): Point =>\n new Point(to).subtract(from);\n\n/**\n * return the magnitude of a vector\n * @return {number}\n */\nexport const magnitude = (point: Point) => point.distanceFrom(zero);\n\n/**\n * Calculates the angle between 2 vectors\n * @param {Point} a\n * @param {Point} b\n * @returns the angle in radians from `a` to `b`\n */\nexport const calcAngleBetweenVectors = (a: Point, b: Point): TRadian =>\n Math.atan2(crossProduct(a, b), dotProduct(a, b)) as TRadian;\n\n/**\n * Calculates the angle between the x axis and the vector\n * @param {Point} v\n * @returns the angle in radians of `v`\n */\nexport const calcVectorRotation = (v: Point) =>\n calcAngleBetweenVectors(unitVectorX, v);\n\n/**\n * @param {Point} v\n * @returns {Point} vector representing the unit vector pointing to the direction of `v`\n */\nexport const getUnitVector = (v: Point): Point =>\n v.eq(zero) ? v : v.scalarDivide(magnitude(v));\n\n/**\n * @param {Point} v\n * @param {Boolean} [counterClockwise] the direction of the orthogonal vector, defaults to `true`\n * @returns {Point} the unit orthogonal vector\n */\nexport const getOrthonormalVector = (\n v: Point,\n counterClockwise = true,\n): Point =>\n getUnitVector(new Point(-v.y, v.x).scalarMultiply(counterClockwise ? 1 : -1));\n\n/**\n * Cross product of two vectors in 2D\n * @param {Point} a\n * @param {Point} b\n * @returns {number} the magnitude of Z vector\n */\nexport const crossProduct = (a: Point, b: Point): number =>\n a.x * b.y - a.y * b.x;\n\n/**\n * Dot product of two vectors in 2D\n * @param {Point} a\n * @param {Point} b\n * @returns {number}\n */\nexport const dotProduct = (a: Point, b: Point): number => a.x * b.x + a.y * b.y;\n\n/**\n * Checks if the vector is between two others. It is considered\n * to be inside when the vector to be tested is between the\n * initial vector and the final vector (included) in a counterclockwise direction.\n * @param {Point} t vector to be tested\n * @param {Point} a initial vector\n * @param {Point} b final vector\n * @returns {boolean} true if the vector is among the others\n */\nexport const isBetweenVectors = (t: Point, a: Point, b: Point): boolean => {\n if (t.eq(a) || t.eq(b)) return true;\n const AxB = crossProduct(a, b),\n AxT = crossProduct(a, t),\n BxT = crossProduct(b, t);\n return AxB >= 0 ? AxT >= 0 && BxT <= 0 : !(AxT <= 0 && BxT >= 0);\n};\n","import { classRegistry } from './ClassRegistry';\nimport { Color } from './color/Color';\nimport { config } from './config';\nimport { reNum } from './parser/constants';\nimport { Point } from './Point';\nimport type { FabricObject } from './shapes/Object/FabricObject';\nimport type { TClassProperties } from './typedefs';\nimport { uid } from './util/internals/uid';\nimport { pickBy } from './util/misc/pick';\nimport { degreesToRadians } from './util/misc/radiansDegreesConversion';\nimport { toFixed } from './util/misc/toFixed';\nimport { rotateVector } from './util/misc/vectors';\n\n/**\n * Regex matching shadow offsetX, offsetY and blur (ex: \"2px 2px 10px rgba(0,0,0,0.2)\", \"rgb(0,255,0) 2px 2px\")\n * - (?:\\s|^): This part captures either a whitespace character (\\s) or the beginning of a line (^). It's non-capturing (due to (?:...)), meaning it doesn't create a capturing group.\n * - (-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?: This captures the first component of the shadow, which is the horizontal offset. Breaking it down:\n * - (-?\\d+): Captures an optional minus sign followed by one or more digits (integer part of the number).\n * - (?:\\.\\d*)?: Optionally captures a decimal point followed by zero or more digits (decimal part of the number).\n * - (?:px)?: Optionally captures the \"px\" unit.\n * - (?:\\s?|$): Captures either an optional whitespace or the end of the line. This whole part is wrapped in a non-capturing group and marked as optional with ?.\n * - (-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?: Similar to the previous step, this captures the vertical offset.\n\n(\\d+(?:\\.\\d*)?(?:px)?)?: This captures the blur radius. It's similar to the horizontal offset but without the optional minus sign.\n\n(?:\\s+(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?){0,1}: This captures an optional part for the color. It allows for whitespace followed by a component with an optional minus sign, digits, decimal point, and \"px\" unit.\n\n(?:$|\\s): This captures either the end of the line or a whitespace character. It ensures that the match ends either at the end of the string or with a whitespace character.\n */\n// eslint-disable-next-line max-len\n\nconst shadowOffsetRegex = '(-?\\\\d+(?:\\\\.\\\\d*)?(?:px)?(?:\\\\s?|$))?';\n\nconst reOffsetsAndBlur = new RegExp(\n '(?:\\\\s|^)' +\n shadowOffsetRegex +\n shadowOffsetRegex +\n '(' +\n reNum +\n '?(?:px)?)?(?:\\\\s?|$)(?:$|\\\\s)',\n);\n\nexport const shadowDefaultValues: Partial> = {\n color: 'rgb(0,0,0)',\n blur: 0,\n offsetX: 0,\n offsetY: 0,\n affectStroke: false,\n includeDefaultValues: true,\n nonScaling: false,\n};\n\nexport type SerializedShadowOptions = {\n color: string;\n blur: number;\n offsetX: number;\n offsetY: number;\n affectStroke: boolean;\n nonScaling: boolean;\n type: string;\n};\n\nexport class Shadow {\n /**\n * Shadow color\n * @type String\n * @default\n */\n declare color: string;\n\n /**\n * Shadow blur\n * @type Number\n */\n declare blur: number;\n\n /**\n * Shadow horizontal offset\n * @type Number\n * @default\n */\n declare offsetX: number;\n\n /**\n * Shadow vertical offset\n * @type Number\n * @default\n */\n declare offsetY: number;\n\n /**\n * Whether the shadow should affect stroke operations\n * @type Boolean\n * @default\n */\n declare affectStroke: boolean;\n\n /**\n * Indicates whether toObject should include default values\n * @type Boolean\n * @default\n */\n declare includeDefaultValues: boolean;\n\n /**\n * When `false`, the shadow will scale with the object.\n * When `true`, the shadow's offsetX, offsetY, and blur will not be affected by the object's scale.\n * default to false\n * @type Boolean\n * @default\n */\n declare nonScaling: boolean;\n\n declare id: number;\n\n static ownDefaults = shadowDefaultValues;\n\n static type = 'shadow';\n\n /**\n * @see {@link http://fabricjs.com/shadows|Shadow demo}\n * @param {Object|String} [options] Options object with any of color, blur, offsetX, offsetY properties or string (e.g. \"rgba(0,0,0,0.2) 2px 2px 10px\")\n */\n constructor(options: Partial>);\n constructor(svgAttribute: string);\n constructor(arg0: string | Partial>) {\n const options: Partial> =\n typeof arg0 === 'string' ? Shadow.parseShadow(arg0) : arg0;\n Object.assign(this, Shadow.ownDefaults, options);\n this.id = uid();\n }\n\n /**\n * @param {String} value Shadow value to parse\n * @return {Object} Shadow object with color, offsetX, offsetY and blur\n */\n static parseShadow(value: string) {\n const shadowStr = value.trim(),\n [, offsetX = 0, offsetY = 0, blur = 0] = (\n reOffsetsAndBlur.exec(shadowStr) || []\n ).map((value) => parseFloat(value) || 0),\n color = (shadowStr.replace(reOffsetsAndBlur, '') || 'rgb(0,0,0)').trim();\n\n return {\n color,\n offsetX,\n offsetY,\n blur,\n };\n }\n\n /**\n * Returns a string representation of an instance\n * @see http://www.w3.org/TR/css-text-decor-3/#text-shadow\n * @return {String} Returns CSS3 text-shadow declaration\n */\n toString() {\n return [this.offsetX, this.offsetY, this.blur, this.color].join('px ');\n }\n\n /**\n * Returns SVG representation of a shadow\n * @param {FabricObject} object\n * @return {String} SVG representation of a shadow\n */\n toSVG(object: FabricObject) {\n const offset = rotateVector(\n new Point(this.offsetX, this.offsetY),\n degreesToRadians(-object.angle),\n ),\n BLUR_BOX = 20,\n color = new Color(this.color);\n let fBoxX = 40,\n fBoxY = 40;\n\n if (object.width && object.height) {\n //http://www.w3.org/TR/SVG/filters.html#FilterEffectsRegion\n // we add some extra space to filter box to contain the blur ( 20 )\n fBoxX =\n toFixed(\n (Math.abs(offset.x) + this.blur) / object.width,\n config.NUM_FRACTION_DIGITS,\n ) *\n 100 +\n BLUR_BOX;\n fBoxY =\n toFixed(\n (Math.abs(offset.y) + this.blur) / object.height,\n config.NUM_FRACTION_DIGITS,\n ) *\n 100 +\n BLUR_BOX;\n }\n if (object.flipX) {\n offset.x *= -1;\n }\n if (object.flipY) {\n offset.y *= -1;\n }\n\n return `\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\t\\n\\t\\t\\n\\t\\n\\n`;\n }\n\n /**\n * Returns object representation of a shadow\n * @return {Object} Object representation of a shadow instance\n */\n toObject() {\n const data: SerializedShadowOptions = {\n color: this.color,\n blur: this.blur,\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n affectStroke: this.affectStroke,\n nonScaling: this.nonScaling,\n type: (this.constructor as typeof Shadow).type,\n };\n const defaults = Shadow.ownDefaults as SerializedShadowOptions;\n return !this.includeDefaultValues\n ? pickBy(data, (value, key) => value !== defaults[key])\n : data;\n }\n\n static async fromObject(options: Partial>) {\n return new this(options);\n }\n}\n\nclassRegistry.setClass(Shadow, 'shadow');\n","export const capValue = (min: number, value: number, max: number) =>\n Math.max(min, Math.min(value, max));\n","import {\n TOP,\n LEFT,\n SCALE_Y,\n SCALE_X,\n SKEW_X,\n SKEW_Y,\n FILL,\n STROKE,\n} from '../../constants';\nimport type { TClassProperties } from '../../typedefs';\nimport type { InteractiveFabricObject } from './InteractiveObject';\nimport type { FabricObject } from './Object';\n\nexport const stateProperties = [\n TOP,\n LEFT,\n SCALE_X,\n SCALE_Y,\n 'flipX',\n 'flipY',\n 'originX',\n 'originY',\n 'angle',\n 'opacity',\n 'globalCompositeOperation',\n 'shadow',\n 'visible',\n SKEW_X,\n SKEW_Y,\n];\n\nexport const cacheProperties = [\n FILL,\n STROKE,\n 'strokeWidth',\n 'strokeDashArray',\n 'width',\n 'height',\n 'paintFirst',\n 'strokeUniform',\n 'strokeLineCap',\n 'strokeDashOffset',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'backgroundColor',\n 'clipPath',\n];\n\nexport const fabricObjectDefaultValues: Partial<\n TClassProperties\n> = {\n // see composeMatrix() to see order of transforms. First defaults listed based on this\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n angle: 0,\n flipX: false,\n flipY: false,\n scaleX: 1,\n scaleY: 1,\n minScaleLimit: 0,\n skewX: 0,\n skewY: 0,\n originX: LEFT,\n originY: TOP,\n strokeWidth: 1,\n strokeUniform: false,\n padding: 0,\n opacity: 1,\n paintFirst: FILL,\n fill: 'rgb(0,0,0)',\n fillRule: 'nonzero',\n stroke: null,\n strokeDashArray: null,\n strokeDashOffset: 0,\n strokeLineCap: 'butt',\n strokeLineJoin: 'miter',\n strokeMiterLimit: 4,\n globalCompositeOperation: 'source-over',\n backgroundColor: '',\n shadow: null,\n visible: true,\n includeDefaultValues: true,\n excludeFromExport: false,\n objectCaching: true,\n clipPath: undefined,\n inverted: false,\n absolutePositioned: false,\n centeredRotation: true,\n centeredScaling: false,\n dirty: true,\n} as const;\n\nexport const interactiveObjectDefaultValues: Partial<\n TClassProperties\n> = {\n noScaleCache: true,\n lockMovementX: false,\n lockMovementY: false,\n lockRotation: false,\n lockScalingX: false,\n lockScalingY: false,\n lockSkewingX: false,\n lockSkewingY: false,\n lockScalingFlip: false,\n cornerSize: 13,\n touchCornerSize: 24,\n transparentCorners: true,\n cornerColor: 'rgb(178,204,255)',\n cornerStrokeColor: '',\n cornerStyle: 'rect',\n cornerDashArray: null,\n hasControls: true,\n borderColor: 'rgb(178,204,255)',\n borderDashArray: null,\n borderOpacityWhenMoving: 0.4,\n borderScaleFactor: 1,\n hasBorders: true,\n selectionBackgroundColor: '',\n selectable: true,\n evented: true,\n perPixelTargetFind: false,\n activeOn: 'down',\n hoverCursor: null,\n moveCursor: null,\n};\n","/**\n * Easing functions\n * @see {@link http://gizma.com/easing/ Easing Equations by Robert Penner}\n */\n\nimport { twoMathPi, halfPI } from '../../constants';\nimport type { TEasingFunction } from './types';\n\nconst normalize = (a: number, c: number, p: number, s: number) => {\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n //handle the 0/0 case:\n if (c === 0 && a === 0) {\n s = (p / twoMathPi) * Math.asin(1);\n } else {\n s = (p / twoMathPi) * Math.asin(c / a);\n }\n }\n return { a, c, p, s };\n};\n\nconst elastic = (\n a: number,\n s: number,\n p: number,\n t: number,\n d: number,\n): number =>\n a * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t * d - s) * twoMathPi) / p);\n\n/**\n * Default sinusoidal easing\n */\nexport const defaultEasing: TEasingFunction = (t, b, c, d) =>\n -c * Math.cos((t / d) * halfPI) + c + b;\n\n/**\n * Cubic easing in\n */\nexport const easeInCubic: TEasingFunction = (t, b, c, d) =>\n c * (t / d) ** 3 + b;\n\n/**\n * Cubic easing out\n */\nexport const easeOutCubic: TEasingFunction = (t, b, c, d) =>\n c * ((t / d - 1) ** 3 + 1) + b;\n\n/**\n * Cubic easing in and out\n */\nexport const easeInOutCubic: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 3 + b;\n }\n return (c / 2) * ((t - 2) ** 3 + 2) + b;\n};\n\n/**\n * Quartic easing in\n */\nexport const easeInQuart: TEasingFunction = (t, b, c, d) =>\n c * (t /= d) * t ** 3 + b;\n\n/**\n * Quartic easing out\n */\nexport const easeOutQuart: TEasingFunction = (t, b, c, d) =>\n -c * ((t = t / d - 1) * t ** 3 - 1) + b;\n\n/**\n * Quartic easing in and out\n */\nexport const easeInOutQuart: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 4 + b;\n }\n return (-c / 2) * ((t -= 2) * t ** 3 - 2) + b;\n};\n\n/**\n * Quintic easing in\n */\nexport const easeInQuint: TEasingFunction = (t, b, c, d) =>\n c * (t / d) ** 5 + b;\n\n/**\n * Quintic easing out\n */\nexport const easeOutQuint: TEasingFunction = (t, b, c, d) =>\n c * ((t / d - 1) ** 5 + 1) + b;\n\n/**\n * Quintic easing in and out\n */\nexport const easeInOutQuint: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 5 + b;\n }\n return (c / 2) * ((t - 2) ** 5 + 2) + b;\n};\n\n/**\n * Sinusoidal easing in\n */\nexport const easeInSine: TEasingFunction = (t, b, c, d) =>\n -c * Math.cos((t / d) * halfPI) + c + b;\n\n/**\n * Sinusoidal easing out\n */\nexport const easeOutSine: TEasingFunction = (t, b, c, d) =>\n c * Math.sin((t / d) * halfPI) + b;\n\n/**\n * Sinusoidal easing in and out\n */\nexport const easeInOutSine: TEasingFunction = (t, b, c, d) =>\n (-c / 2) * (Math.cos((Math.PI * t) / d) - 1) + b;\n\n/**\n * Exponential easing in\n */\nexport const easeInExpo: TEasingFunction = (t, b, c, d) =>\n t === 0 ? b : c * 2 ** (10 * (t / d - 1)) + b;\n\n/**\n * Exponential easing out\n */\nexport const easeOutExpo: TEasingFunction = (t, b, c, d) =>\n t === d ? b + c : c * -(2 ** ((-10 * t) / d) + 1) + b;\n\n/**\n * Exponential easing in and out\n */\nexport const easeInOutExpo: TEasingFunction = (t, b, c, d) => {\n if (t === 0) {\n return b;\n }\n if (t === d) {\n return b + c;\n }\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * 2 ** (10 * (t - 1)) + b;\n }\n return (c / 2) * -(2 ** (-10 * --t) + 2) + b;\n};\n\n/**\n * Circular easing in\n */\nexport const easeInCirc: TEasingFunction = (t, b, c, d) =>\n -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n\n/**\n * Circular easing out\n */\nexport const easeOutCirc: TEasingFunction = (t, b, c, d) =>\n c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n\n/**\n * Circular easing in and out\n */\nexport const easeInOutCirc: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (-c / 2) * (Math.sqrt(1 - t ** 2) - 1) + b;\n }\n return (c / 2) * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n};\n\n/**\n * Elastic easing in\n */\nexport const easeInElastic: TEasingFunction = (t, b, c, d) => {\n const s = 1.70158,\n a = c;\n let p = 0;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n const { a: normA, s: normS, p: normP } = normalize(a, c, p, s);\n return -elastic(normA, normS, normP, t, d) + b;\n};\n\n/**\n * Elastic easing out\n */\nexport const easeOutElastic: TEasingFunction = (t, b, c, d) => {\n const s = 1.70158,\n a = c;\n let p = 0;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);\n return (\n normA * 2 ** (-10 * t) * Math.sin(((t * d - normS) * twoMathPi) / normP) +\n normC +\n b\n );\n};\n\n/**\n * Elastic easing in and out\n */\nexport const easeInOutElastic: TEasingFunction = (t, b, c, d) => {\n const s = 1.70158,\n a = c;\n let p = 0;\n if (t === 0) {\n return b;\n }\n t /= d / 2;\n if (t === 2) {\n return b + c;\n }\n if (!p) {\n p = d * (0.3 * 1.5);\n }\n const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);\n if (t < 1) {\n return -0.5 * elastic(normA, normS, normP, t, d) + b;\n }\n return (\n normA *\n Math.pow(2, -10 * (t -= 1)) *\n Math.sin(((t * d - normS) * twoMathPi) / normP) *\n 0.5 +\n normC +\n b\n );\n};\n\n/**\n * Backwards easing in\n */\nexport const easeInBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>\n c * (t /= d) * t * ((s + 1) * t - s) + b;\n\n/**\n * Backwards easing out\n */\nexport const easeOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>\n c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n\n/**\n * Backwards easing in and out\n */\nexport const easeInOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n }\n return (c / 2) * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n};\n\n/**\n * Bouncing easing out\n */\nexport const easeOutBounce: TEasingFunction = (t, b, c, d) => {\n if ((t /= d) < 1 / 2.75) {\n return c * (7.5625 * t * t) + b;\n } else if (t < 2 / 2.75) {\n return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;\n } else if (t < 2.5 / 2.75) {\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;\n } else {\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;\n }\n};\n\n/**\n * Bouncing easing in\n */\nexport const easeInBounce: TEasingFunction = (t, b, c, d) =>\n c - easeOutBounce(d - t, 0, c, d) + b;\n\n/**\n * Bouncing easing in and out\n */\nexport const easeInOutBounce: TEasingFunction = (t, b, c, d) =>\n t < d / 2\n ? easeInBounce(t * 2, 0, c, d) * 0.5 + b\n : easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n\n/**\n * Quadratic easing in\n */\nexport const easeInQuad: TEasingFunction = (t, b, c, d) => c * (t /= d) * t + b;\n\n/**\n * Quadratic easing out\n */\nexport const easeOutQuad: TEasingFunction = (t, b, c, d) =>\n -c * (t /= d) * (t - 2) + b;\n\n/**\n * Quadratic easing in and out\n */\nexport const easeInOutQuad: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 2 + b;\n }\n return (-c / 2) * (--t * (t - 2) - 1) + b;\n};\n","import { noop } from '../../constants';\nimport { requestAnimFrame } from './AnimationFrameProvider';\nimport { runningAnimations } from './AnimationRegistry';\nimport { defaultEasing } from './easing';\nimport type {\n AnimationState,\n TAbortCallback,\n TBaseAnimationOptions,\n TEasingFunction,\n TOnAnimationChangeCallback,\n} from './types';\n\nconst defaultAbort = () => false;\n\nexport abstract class AnimationBase<\n T extends number | number[] = number | number[],\n> {\n declare readonly startValue: T;\n declare readonly endValue: T;\n declare readonly duration: number;\n declare readonly delay: number;\n\n protected declare readonly byValue: T;\n protected declare readonly easing: TEasingFunction;\n\n private declare readonly _onStart: VoidFunction;\n private declare readonly _onChange: TOnAnimationChangeCallback;\n private declare readonly _onComplete: TOnAnimationChangeCallback;\n private declare readonly _abort: TAbortCallback;\n\n /**\n * Used to register the animation to a target object\n * so that it can be cancelled within the object context\n */\n declare readonly target?: unknown;\n\n private _state: AnimationState = 'pending';\n /**\n * Time %, or the ratio of `timeElapsed / duration`\n * @see tick\n */\n durationProgress = 0;\n /**\n * Value %, or the ratio of `(currentValue - startValue) / (endValue - startValue)`\n */\n valueProgress = 0;\n /**\n * Current value\n */\n declare value: T;\n /**\n * Animation start time ms\n */\n private declare startTime: number;\n\n constructor({\n startValue,\n byValue,\n duration = 500,\n delay = 0,\n easing = defaultEasing,\n onStart = noop,\n onChange = noop,\n onComplete = noop,\n abort = defaultAbort,\n target,\n }: TBaseAnimationOptions) {\n this.tick = this.tick.bind(this);\n\n this.duration = duration;\n this.delay = delay;\n this.easing = easing;\n this._onStart = onStart;\n this._onChange = onChange;\n this._onComplete = onComplete;\n this._abort = abort;\n this.target = target;\n\n this.startValue = startValue;\n this.byValue = byValue;\n this.value = this.startValue;\n this.endValue = Object.freeze(this.calculate(this.duration).value);\n }\n\n get state() {\n return this._state;\n }\n\n isDone() {\n return this._state === 'aborted' || this._state === 'completed';\n }\n\n /**\n * Calculate the current value based on the easing parameters\n * @param timeElapsed in ms\n * @protected\n */\n protected abstract calculate(timeElapsed: number): {\n value: T;\n valueProgress: number;\n };\n\n start() {\n const firstTick: FrameRequestCallback = (timestamp) => {\n if (this._state !== 'pending') return;\n this.startTime = timestamp || +new Date();\n this._state = 'running';\n this._onStart();\n this.tick(this.startTime);\n };\n\n this.register();\n\n // setTimeout(cb, 0) will run cb on the next frame, causing a delay\n // we don't want that\n if (this.delay > 0) {\n setTimeout(() => requestAnimFrame(firstTick), this.delay);\n } else {\n requestAnimFrame(firstTick);\n }\n }\n\n private tick(t: number) {\n const durationMs = (t || +new Date()) - this.startTime;\n const boundDurationMs = Math.min(durationMs, this.duration);\n this.durationProgress = boundDurationMs / this.duration;\n const { value, valueProgress } = this.calculate(boundDurationMs);\n this.value = Object.freeze(value);\n this.valueProgress = valueProgress;\n\n if (this._state === 'aborted') {\n return;\n } else if (\n this._abort(this.value, this.valueProgress, this.durationProgress)\n ) {\n this._state = 'aborted';\n this.unregister();\n } else if (durationMs >= this.duration) {\n this.durationProgress = this.valueProgress = 1;\n this._onChange(this.endValue, this.valueProgress, this.durationProgress);\n this._state = 'completed';\n this._onComplete(\n this.endValue,\n this.valueProgress,\n this.durationProgress,\n );\n this.unregister();\n } else {\n this._onChange(this.value, this.valueProgress, this.durationProgress);\n requestAnimFrame(this.tick);\n }\n }\n\n private register() {\n runningAnimations.push(this as unknown as AnimationBase);\n }\n\n private unregister() {\n runningAnimations.remove(this as unknown as AnimationBase);\n }\n\n abort() {\n this._state = 'aborted';\n this.unregister();\n }\n}\n","import { AnimationBase } from './AnimationBase';\nimport type { ValueAnimationOptions } from './types';\n\nexport class ValueAnimation extends AnimationBase {\n constructor({\n startValue = 0,\n endValue = 100,\n ...otherOptions\n }: ValueAnimationOptions) {\n super({\n ...otherOptions,\n startValue,\n byValue: endValue - startValue,\n });\n }\n\n protected calculate(timeElapsed: number) {\n const value = this.easing(\n timeElapsed,\n this.startValue,\n this.byValue,\n this.duration,\n );\n return {\n value,\n valueProgress: Math.abs((value - this.startValue) / this.byValue),\n };\n }\n}\n","import { AnimationBase } from './AnimationBase';\nimport type { ArrayAnimationOptions } from './types';\n\nexport class ArrayAnimation extends AnimationBase {\n constructor({\n startValue = [0],\n endValue = [100],\n ...options\n }: ArrayAnimationOptions) {\n super({\n ...options,\n startValue,\n byValue: endValue.map((value, i) => value - startValue[i]),\n });\n }\n protected calculate(timeElapsed: number) {\n const values = this.startValue.map((value, i) =>\n this.easing(timeElapsed, value, this.byValue[i], this.duration, i),\n );\n return {\n value: values,\n valueProgress: Math.abs(\n (values[0] - this.startValue[0]) / this.byValue[0],\n ),\n };\n }\n}\n","import { Color } from '../../color/Color';\nimport type { TRGBAColorSource } from '../../color/typedefs';\nimport { halfPI } from '../../constants';\nimport { capValue } from '../misc/capValue';\nimport { AnimationBase } from './AnimationBase';\nimport type {\n ColorAnimationOptions,\n TEasingFunction,\n TOnAnimationChangeCallback,\n} from './types';\n\nconst defaultColorEasing: TEasingFunction = (\n timeElapsed,\n startValue,\n byValue,\n duration,\n) => {\n const durationProgress = 1 - Math.cos((timeElapsed / duration) * halfPI);\n return startValue + byValue * durationProgress;\n};\n\nconst wrapColorCallback = (\n callback?: TOnAnimationChangeCallback,\n) =>\n callback &&\n ((rgba: TRGBAColorSource, valueProgress: number, durationProgress: number) =>\n callback(new Color(rgba).toRgba(), valueProgress, durationProgress));\n\nexport class ColorAnimation extends AnimationBase {\n constructor({\n startValue,\n endValue,\n easing = defaultColorEasing,\n onChange,\n onComplete,\n abort,\n ...options\n }: ColorAnimationOptions) {\n const startColor = new Color(startValue).getSource();\n const endColor = new Color(endValue).getSource();\n super({\n ...options,\n startValue: startColor,\n byValue: endColor.map(\n (value, i) => value - startColor[i],\n ) as TRGBAColorSource,\n easing,\n onChange: wrapColorCallback(onChange),\n onComplete: wrapColorCallback(onComplete),\n abort: wrapColorCallback(abort),\n });\n }\n protected calculate(timeElapsed: number) {\n const [r, g, b, a] = this.startValue.map((value, i) =>\n this.easing(timeElapsed, value, this.byValue[i], this.duration, i),\n ) as TRGBAColorSource;\n const value = [\n ...[r, g, b].map(Math.round),\n capValue(0, a, 1),\n ] as TRGBAColorSource;\n return {\n value,\n valueProgress:\n // to correctly calculate the change ratio we must find a changed value\n value\n .map((p, i) =>\n this.byValue[i] !== 0\n ? Math.abs((p - this.startValue[i]) / this.byValue[i])\n : 0,\n )\n .find((p) => p !== 0) || 0,\n };\n }\n}\n","import { ValueAnimation } from './ValueAnimation';\nimport { ArrayAnimation } from './ArrayAnimation';\nimport { ColorAnimation } from './ColorAnimation';\nimport type {\n ValueAnimationOptions,\n ArrayAnimationOptions,\n ColorAnimationOptions,\n} from './types';\nimport type { TColorArg } from '../../color/typedefs';\n\nexport type TAnimation =\n T extends TColorArg\n ? ColorAnimation\n : T extends number[]\n ? ArrayAnimation\n : ValueAnimation;\n\nconst isArrayAnimation = (\n options: ArrayAnimationOptions | ValueAnimationOptions,\n): options is ArrayAnimationOptions => {\n return Array.isArray(options.startValue) || Array.isArray(options.endValue);\n};\n\n/**\n * Changes value(s) from startValue to endValue within a certain period of time,\n * invoking callbacks as the value(s) change.\n *\n * @example\n * animate({\n * startValue: 1,\n * endValue: 0,\n * onChange: (v) => {\n * obj.set('opacity', v);\n * // since we are running in a requested frame we should call `renderAll` and not `requestRenderAll`\n * canvas.renderAll();\n * }\n * });\n *\n * @example Using lists:\n * animate({\n * startValue: [1, 2, 3],\n * endValue: [2, 4, 6],\n * onChange: ([x, y, zoom]) => {\n * canvas.zoomToPoint(new Point(x, y), zoom);\n * canvas.renderAll();\n * }\n * });\n *\n */\nexport function animate(options: ArrayAnimationOptions): ArrayAnimation;\nexport function animate(options: ValueAnimationOptions): ValueAnimation;\nexport function animate<\n T extends ValueAnimationOptions | ArrayAnimationOptions,\n>(\n options: T,\n): T extends ArrayAnimationOptions ? ArrayAnimation : ValueAnimation;\nexport function animate<\n T extends ValueAnimationOptions | ArrayAnimationOptions,\n R extends T extends ArrayAnimationOptions ? ArrayAnimation : ValueAnimation,\n>(options: T): R {\n const animation = (\n isArrayAnimation(options)\n ? new ArrayAnimation(options)\n : new ValueAnimation(options)\n ) as R;\n animation.start();\n return animation;\n}\n\nexport function animateColor(options: ColorAnimationOptions) {\n const animation = new ColorAnimation(options);\n animation.start();\n return animation;\n}\n","import { Point } from './Point';\nimport { createVector } from './util/misc/vectors';\n\n/* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n\nexport type IntersectionType = 'Intersection' | 'Coincident' | 'Parallel';\n\nexport class Intersection {\n declare points: Point[];\n\n declare status?: IntersectionType;\n\n constructor(status?: IntersectionType) {\n this.status = status;\n this.points = [];\n }\n\n /**\n * Used to verify if a point is alredy in the collection\n * @param {Point} point\n * @returns {boolean}\n */\n private includes(point: Point): boolean {\n return this.points.some((p) => p.eq(point));\n }\n\n /**\n * Appends points of intersection\n * @param {...Point[]} points\n * @return {Intersection} thisArg\n * @chainable\n */\n private append(...points: Point[]): Intersection {\n this.points = this.points.concat(\n points.filter((point) => {\n return !this.includes(point);\n }),\n );\n return this;\n }\n\n /**\n * check if point T is on the segment or line defined between A and B\n *\n * @param {Point} T the point we are checking for\n * @param {Point} A one extremity of the segment\n * @param {Point} B the other extremity of the segment\n * @param [infinite] if true checks if `T` is on the line defined by `A` and `B`\n * @returns true if `T` is contained\n */\n static isPointContained(T: Point, A: Point, B: Point, infinite = false) {\n if (A.eq(B)) {\n // Edge case: the segment is a point, we check for coincidence,\n // infinite param has no meaning because there are infinite lines to consider\n return T.eq(A);\n } else if (A.x === B.x) {\n // Edge case: horizontal line.\n // we first check if T.x has the same value, and then if T.y is contained between A.y and B.y\n return (\n T.x === A.x &&\n (infinite || (T.y >= Math.min(A.y, B.y) && T.y <= Math.max(A.y, B.y)))\n );\n } else if (A.y === B.y) {\n // Edge case: vertical line.\n // we first check if T.y has the same value, and then if T.x is contained between A.x and B.x\n return (\n T.y === A.y &&\n (infinite || (T.x >= Math.min(A.x, B.x) && T.x <= Math.max(A.x, B.x)))\n );\n } else {\n // Generic case: sloped line.\n // we check that AT has the same slope as AB\n // for the segment case we need both the vectors to have the same direction and for AT to be lte AB in size\n // for the infinite case we check the absolute value of the slope, since direction is meaningless\n const AB = createVector(A, B);\n const AT = createVector(A, T);\n const s = AT.divide(AB);\n return infinite\n ? Math.abs(s.x) === Math.abs(s.y)\n : s.x === s.y && s.x >= 0 && s.x <= 1;\n }\n }\n\n /**\n * Use the ray casting algorithm to determine if {@link point} is in the polygon defined by {@link points}\n * @see https://en.wikipedia.org/wiki/Point_in_polygon\n * @param point\n * @param points polygon points\n * @returns\n */\n static isPointInPolygon(point: Point, points: Point[]) {\n const other = new Point(point).setX(\n Math.min(point.x - 1, ...points.map((p) => p.x)),\n );\n let hits = 0;\n for (let index = 0; index < points.length; index++) {\n const inter = this.intersectSegmentSegment(\n // polygon side\n points[index],\n points[(index + 1) % points.length],\n // ray\n point,\n other,\n );\n if (inter.includes(point)) {\n // point is on the polygon side\n return true;\n }\n hits += Number(inter.status === 'Intersection');\n }\n return hits % 2 === 1;\n }\n\n /**\n * Checks if a line intersects another\n * @see {@link https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection line intersection}\n * @see {@link https://en.wikipedia.org/wiki/Cramer%27s_rule Cramer's rule}\n * @static\n * @param {Point} a1\n * @param {Point} a2\n * @param {Point} b1\n * @param {Point} b2\n * @param {boolean} [aInfinite=true] check segment intersection by passing `false`\n * @param {boolean} [bInfinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLineLine(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point,\n aInfinite = true,\n bInfinite = true,\n ): Intersection {\n const a2xa1x = a2.x - a1.x,\n a2ya1y = a2.y - a1.y,\n b2xb1x = b2.x - b1.x,\n b2yb1y = b2.y - b1.y,\n a1xb1x = a1.x - b1.x,\n a1yb1y = a1.y - b1.y,\n uaT = b2xb1x * a1yb1y - b2yb1y * a1xb1x,\n ubT = a2xa1x * a1yb1y - a2ya1y * a1xb1x,\n uB = b2yb1y * a2xa1x - b2xb1x * a2ya1y;\n if (uB !== 0) {\n const ua = uaT / uB,\n ub = ubT / uB;\n if (\n (aInfinite || (0 <= ua && ua <= 1)) &&\n (bInfinite || (0 <= ub && ub <= 1))\n ) {\n return new Intersection('Intersection').append(\n new Point(a1.x + ua * a2xa1x, a1.y + ua * a2ya1y),\n );\n } else {\n return new Intersection();\n }\n } else {\n if (uaT === 0 || ubT === 0) {\n const segmentsCoincide =\n aInfinite ||\n bInfinite ||\n Intersection.isPointContained(a1, b1, b2) ||\n Intersection.isPointContained(a2, b1, b2) ||\n Intersection.isPointContained(b1, a1, a2) ||\n Intersection.isPointContained(b2, a1, a2);\n return new Intersection(segmentsCoincide ? 'Coincident' : undefined);\n } else {\n return new Intersection('Parallel');\n }\n }\n }\n\n /**\n * Checks if a segment intersects a line\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} s1 boundary point of segment\n * @param {Point} s2 other boundary point of segment\n * @param {Point} l1 point on line\n * @param {Point} l2 other point on line\n * @return {Intersection}\n */\n static intersectSegmentLine(\n s1: Point,\n s2: Point,\n l1: Point,\n l2: Point,\n ): Intersection {\n return Intersection.intersectLineLine(s1, s2, l1, l2, false, true);\n }\n\n /**\n * Checks if a segment intersects another\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point} b1 boundary point of segment\n * @param {Point} b2 other boundary point of segment\n * @return {Intersection}\n */\n static intersectSegmentSegment(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point,\n ): Intersection {\n return Intersection.intersectLineLine(a1, a2, b1, b2, false, false);\n }\n\n /**\n * Checks if line intersects polygon\n *\n * @todo account for stroke\n *\n * @static\n * @see {@link intersectSegmentPolygon} for segment intersection\n * @param {Point} a1 point on line\n * @param {Point} a2 other point on line\n * @param {Point[]} points polygon points\n * @param {boolean} [infinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLinePolygon(\n a1: Point,\n a2: Point,\n points: Point[],\n infinite = true,\n ): Intersection {\n const result = new Intersection();\n const length = points.length;\n\n for (let i = 0, b1, b2, inter; i < length; i++) {\n b1 = points[i];\n b2 = points[(i + 1) % length];\n inter = Intersection.intersectLineLine(a1, a2, b1, b2, infinite, false);\n if (inter.status === 'Coincident') {\n return inter;\n }\n result.append(...inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if segment intersects polygon\n * @static\n * @see {@link intersectLinePolygon} for line intersection\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point[]} points polygon points\n * @return {Intersection}\n */\n static intersectSegmentPolygon(\n a1: Point,\n a2: Point,\n points: Point[],\n ): Intersection {\n return Intersection.intersectLinePolygon(a1, a2, points, false);\n }\n\n /**\n * Checks if polygon intersects another polygon\n *\n * @todo account for stroke\n *\n * @static\n * @param {Point[]} points1\n * @param {Point[]} points2\n * @return {Intersection}\n */\n static intersectPolygonPolygon(\n points1: Point[],\n points2: Point[],\n ): Intersection {\n const result = new Intersection(),\n length = points1.length;\n const coincidences: Intersection[] = [];\n\n for (let i = 0; i < length; i++) {\n const a1 = points1[i],\n a2 = points1[(i + 1) % length],\n inter = Intersection.intersectSegmentPolygon(a1, a2, points2);\n if (inter.status === 'Coincident') {\n coincidences.push(inter);\n result.append(a1, a2);\n } else {\n result.append(...inter.points);\n }\n }\n\n if (coincidences.length > 0 && coincidences.length === points1.length) {\n return new Intersection('Coincident');\n } else if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if polygon intersects rectangle\n * @static\n * @see {@link intersectPolygonPolygon} for polygon intersection\n * @param {Point[]} points polygon points\n * @param {Point} r1 top left point of rect\n * @param {Point} r2 bottom right point of rect\n * @return {Intersection}\n */\n static intersectPolygonRectangle(\n points: Point[],\n r1: Point,\n r2: Point,\n ): Intersection {\n const min = r1.min(r2),\n max = r1.max(r2),\n topRight = new Point(max.x, min.y),\n bottomLeft = new Point(min.x, max.y);\n\n return Intersection.intersectPolygonPolygon(points, [\n min,\n topRight,\n max,\n bottomLeft,\n ]);\n }\n}\n","import type {\n TBBox,\n TCornerPoint,\n TDegree,\n TMat2D,\n TOriginX,\n TOriginY,\n} from '../../typedefs';\nimport { SCALE_X, SCALE_Y, iMatrix } from '../../constants';\nimport { Intersection } from '../../Intersection';\nimport { Point } from '../../Point';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport {\n createRotateMatrix,\n createTranslateMatrix,\n composeMatrix,\n invertTransform,\n multiplyTransformMatrices,\n transformPoint,\n calcPlaneRotation,\n} from '../../util/misc/matrix';\nimport { radiansToDegrees } from '../../util/misc/radiansDegreesConversion';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { StaticCanvas } from '../../canvas/StaticCanvas';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport type { ControlProps } from './types/ControlProps';\nimport { resolveOrigin } from '../../util/misc/resolveOrigin';\nimport type { Group } from '../Group';\nimport { calcDimensionsMatrix } from '../../util/misc/matrix';\nimport { sizeAfterTransform } from '../../util/misc/objectTransforms';\nimport { degreesToRadians } from '../../util/misc/radiansDegreesConversion';\nimport { CommonMethods } from '../../CommonMethods';\nimport type { BaseProps } from './types/BaseProps';\nimport type { FillStrokeProps } from './types/FillStrokeProps';\nimport { CENTER, LEFT, TOP } from '../../constants';\n\ntype TMatrixCache = {\n key: number[];\n value: TMat2D;\n};\n\ntype TACoords = TCornerPoint;\n\nexport class ObjectGeometry\n extends CommonMethods\n implements\n Pick,\n BaseProps,\n Pick\n{\n // #region Geometry\n\n declare padding: number;\n\n /**\n * Describe object's corner position in scene coordinates.\n * The coordinates are derived from the following:\n * left, top, width, height, scaleX, scaleY, skewX, skewY, angle, strokeWidth.\n * The coordinates do not depend on viewport changes.\n * The coordinates get updated with {@link setCoords}.\n * You can calculate them without updating with {@link calcACoords()}\n */\n declare aCoords: TACoords;\n\n /**\n * storage cache for object transform matrix\n */\n declare ownMatrixCache?: TMatrixCache;\n\n /**\n * storage cache for object full transform matrix\n */\n declare matrixCache?: TMatrixCache;\n\n /**\n * A Reference of the Canvas where the object is actually added\n * @type StaticCanvas | Canvas;\n * @default undefined\n * @private\n */\n declare canvas?: StaticCanvas | Canvas;\n\n /**\n * @returns {number} x position according to object's {@link originX} property in canvas coordinate plane\n */\n getX(): number {\n return this.getXY().x;\n }\n\n /**\n * @param {number} value x position according to object's {@link originX} property in canvas coordinate plane\n */\n setX(value: number) {\n this.setXY(this.getXY().setX(value));\n }\n\n /**\n * @returns {number} y position according to object's {@link originY} property in canvas coordinate plane\n */\n getY(): number {\n return this.getXY().y;\n }\n\n /**\n * @param {number} value y position according to object's {@link originY} property in canvas coordinate plane\n */\n setY(value: number) {\n this.setXY(this.getXY().setY(value));\n }\n\n /**\n * @returns {number} x position according to object's {@link originX} property in parent's coordinate plane\\\n * if parent is canvas then this property is identical to {@link getX}\n */\n getRelativeX(): number {\n return this.left;\n }\n\n /**\n * @param {number} value x position according to object's {@link originX} property in parent's coordinate plane\\\n * if parent is canvas then this method is identical to {@link setX}\n */\n setRelativeX(value: number) {\n this.left = value;\n }\n\n /**\n * @returns {number} y position according to object's {@link originY} property in parent's coordinate plane\\\n * if parent is canvas then this property is identical to {@link getY}\n */\n getRelativeY(): number {\n return this.top;\n }\n\n /**\n * @param {number} value y position according to object's {@link originY} property in parent's coordinate plane\\\n * if parent is canvas then this property is identical to {@link setY}\n */\n setRelativeY(value: number) {\n this.top = value;\n }\n\n /**\n * @returns {Point} x position according to object's {@link originX} {@link originY} properties in canvas coordinate plane\n */\n getXY(): Point {\n const relativePosition = this.getRelativeXY();\n return this.group\n ? transformPoint(relativePosition, this.group.calcTransformMatrix())\n : relativePosition;\n }\n\n /**\n * Set an object position to a particular point, the point is intended in absolute ( canvas ) coordinate.\n * You can specify {@link originX} and {@link originY} values,\n * that otherwise are the object's current values.\n * @example Set object's bottom left corner to point (5,5) on canvas\n * object.setXY(new Point(5, 5), 'left', 'bottom').\n * @param {Point} point position in scene coordinate plane\n * @param {TOriginX} [originX] Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} [originY] Vertical origin: 'top', 'center' or 'bottom'\n */\n setXY(point: Point, originX?: TOriginX, originY?: TOriginY) {\n if (this.group) {\n point = transformPoint(\n point,\n invertTransform(this.group.calcTransformMatrix()),\n );\n }\n this.setRelativeXY(point, originX, originY);\n }\n\n /**\n * @returns {Point} x,y position according to object's {@link originX} {@link originY} properties in parent's coordinate plane\n */\n getRelativeXY(): Point {\n return new Point(this.left, this.top);\n }\n\n /**\n * As {@link setXY}, but in current parent's coordinate plane (the current group if any or the canvas)\n * @param {Point} point position according to object's {@link originX} {@link originY} properties in parent's coordinate plane\n * @param {TOriginX} [originX] Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} [originY] Vertical origin: 'top', 'center' or 'bottom'\n */\n setRelativeXY(\n point: Point,\n originX: TOriginX = this.originX,\n originY: TOriginY = this.originY,\n ) {\n this.setPositionByOrigin(point, originX, originY);\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return false;\n }\n\n /**\n * @return {Point[]} [tl, tr, br, bl] in the scene plane\n */\n getCoords(): Point[] {\n const { tl, tr, br, bl } =\n this.aCoords || (this.aCoords = this.calcACoords());\n const coords = [tl, tr, br, bl];\n if (this.group) {\n const t = this.group.calcTransformMatrix();\n return coords.map((p) => transformPoint(p, t));\n }\n return coords;\n }\n\n /**\n * Checks if object intersects with the scene rect formed by {@link tl} and {@link br}\n */\n intersectsWithRect(tl: Point, br: Point): boolean {\n const intersection = Intersection.intersectPolygonRectangle(\n this.getCoords(),\n tl,\n br,\n );\n return intersection.status === 'Intersection';\n }\n\n /**\n * Checks if object intersects with another object\n * @param {Object} other Object to test\n * @return {Boolean} true if object intersects with another object\n */\n intersectsWithObject(other: ObjectGeometry): boolean {\n const intersection = Intersection.intersectPolygonPolygon(\n this.getCoords(),\n other.getCoords(),\n );\n\n return (\n intersection.status === 'Intersection' ||\n intersection.status === 'Coincident' ||\n other.isContainedWithinObject(this) ||\n this.isContainedWithinObject(other)\n );\n }\n\n /**\n * Checks if object is fully contained within area of another object\n * @param {Object} other Object to test\n * @return {Boolean} true if object is fully contained within area of another object\n */\n isContainedWithinObject(other: ObjectGeometry): boolean {\n const points = this.getCoords();\n return points.every((point) => other.containsPoint(point));\n }\n\n /**\n * Checks if object is fully contained within the scene rect formed by {@link tl} and {@link br}\n */\n isContainedWithinRect(tl: Point, br: Point): boolean {\n const { left, top, width, height } = this.getBoundingRect();\n return (\n left >= tl.x &&\n left + width <= br.x &&\n top >= tl.y &&\n top + height <= br.y\n );\n }\n\n isOverlapping(other: T): boolean {\n return (\n this.intersectsWithObject(other) ||\n this.isContainedWithinObject(other) ||\n other.isContainedWithinObject(this)\n );\n }\n\n /**\n * Checks if point is inside the object\n * @param {Point} point Point to check against\n * @return {Boolean} true if point is inside the object\n */\n containsPoint(point: Point): boolean {\n return Intersection.isPointInPolygon(point, this.getCoords());\n }\n\n /**\n * Checks if object is contained within the canvas with current viewportTransform\n * the check is done stopping at first point that appears on screen\n * @return {Boolean} true if object is fully or partially contained within canvas\n */\n isOnScreen(): boolean {\n if (!this.canvas) {\n return false;\n }\n const { tl, br } = this.canvas.vptCoords;\n const points = this.getCoords();\n // if some point is on screen, the object is on screen.\n if (\n points.some(\n (point) =>\n point.x <= br.x &&\n point.x >= tl.x &&\n point.y <= br.y &&\n point.y >= tl.y,\n )\n ) {\n return true;\n }\n // no points on screen, check intersection with absolute coordinates\n if (this.intersectsWithRect(tl, br)) {\n return true;\n }\n // check if the object is so big that it contains the entire viewport\n return this.containsPoint(tl.midPointFrom(br));\n }\n\n /**\n * Checks if object is partially contained within the canvas with current viewportTransform\n * @return {Boolean} true if object is partially contained within canvas\n */\n isPartiallyOnScreen(): boolean {\n if (!this.canvas) {\n return false;\n }\n const { tl, br } = this.canvas.vptCoords;\n if (this.intersectsWithRect(tl, br)) {\n return true;\n }\n const allPointsAreOutside = this.getCoords().every(\n (point) =>\n (point.x >= br.x || point.x <= tl.x) &&\n (point.y >= br.y || point.y <= tl.y),\n );\n // check if the object is so big that it contains the entire viewport\n return allPointsAreOutside && this.containsPoint(tl.midPointFrom(br));\n }\n\n /**\n * Returns coordinates of object's bounding rectangle (left, top, width, height)\n * the box is intended as aligned to axis of canvas.\n * @return {Object} Object with left, top, width, height properties\n */\n getBoundingRect(): TBBox {\n return makeBoundingBoxFromPoints(this.getCoords());\n }\n\n /**\n * Returns width of an object's bounding box counting transformations\n * @todo shouldn't this account for group transform and return the actual size in canvas coordinate plane?\n * @return {Number} width value\n */\n getScaledWidth(): number {\n return this._getTransformedDimensions().x;\n }\n\n /**\n * Returns height of an object bounding box counting transformations\n * @todo shouldn't this account for group transform and return the actual size in canvas coordinate plane?\n * @return {Number} height value\n */\n getScaledHeight(): number {\n return this._getTransformedDimensions().y;\n }\n\n /**\n * Scales an object (equally by x and y)\n * @param {Number} value Scale factor\n * @return {void}\n */\n scale(value: number): void {\n this._set(SCALE_X, value);\n this._set(SCALE_Y, value);\n this.setCoords();\n }\n\n /**\n * Scales an object to a given width, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New width value\n * @return {void}\n */\n scaleToWidth(value: number) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n const boundingRectFactor =\n this.getBoundingRect().width / this.getScaledWidth();\n return this.scale(value / this.width / boundingRectFactor);\n }\n\n /**\n * Scales an object to a given height, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New height value\n * @return {void}\n */\n scaleToHeight(value: number) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n const boundingRectFactor =\n this.getBoundingRect().height / this.getScaledHeight();\n return this.scale(value / this.height / boundingRectFactor);\n }\n\n getCanvasRetinaScaling() {\n return this.canvas?.getRetinaScaling() || 1;\n }\n\n /**\n * Returns the object angle relative to canvas counting also the group property\n * @returns {TDegree}\n */\n getTotalAngle(): TDegree {\n return this.group\n ? radiansToDegrees(calcPlaneRotation(this.calcTransformMatrix()))\n : this.angle;\n }\n\n /**\n * Retrieves viewportTransform from Object's canvas if available\n * @return {TMat2D}\n */\n getViewportTransform(): TMat2D {\n return this.canvas?.viewportTransform || (iMatrix.concat() as TMat2D);\n }\n\n /**\n * Calculates the coordinates of the 4 corner of the bbox, in absolute coordinates.\n * those never change with zoom or viewport changes.\n * @return {TCornerPoint}\n */\n calcACoords(): TCornerPoint {\n const rotateMatrix = createRotateMatrix({ angle: this.angle }),\n { x, y } = this.getRelativeCenterPoint(),\n tMatrix = createTranslateMatrix(x, y),\n finalMatrix = multiplyTransformMatrices(tMatrix, rotateMatrix),\n dim = this._getTransformedDimensions(),\n w = dim.x / 2,\n h = dim.y / 2;\n return {\n // corners\n tl: transformPoint({ x: -w, y: -h }, finalMatrix),\n tr: transformPoint({ x: w, y: -h }, finalMatrix),\n bl: transformPoint({ x: -w, y: h }, finalMatrix),\n br: transformPoint({ x: w, y: h }, finalMatrix),\n };\n }\n\n /**\n * Sets corner and controls position coordinates based on current angle, width and height, left and top.\n * aCoords are used to quickly find an object on the canvas.\n * See {@link https://github.com/fabricjs/fabric.js/wiki/When-to-call-setCoords} and {@link http://fabricjs.com/fabric-gotchas}\n */\n setCoords(): void {\n this.aCoords = this.calcACoords();\n }\n\n transformMatrixKey(skipGroup = false): number[] {\n let prefix: number[] = [];\n if (!skipGroup && this.group) {\n prefix = this.group.transformMatrixKey(skipGroup);\n }\n prefix.push(\n this.top,\n this.left,\n this.width,\n this.height,\n this.scaleX,\n this.scaleY,\n this.angle,\n this.strokeWidth,\n this.skewX,\n this.skewY,\n +this.flipX,\n +this.flipY,\n resolveOrigin(this.originX),\n resolveOrigin(this.originY),\n );\n\n return prefix;\n }\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties.\n * @param {Boolean} [skipGroup] return transform matrix for object not counting parent transformations\n * There are some situation in which this is useful to avoid the fake rotation.\n * @return {TMat2D} transform matrix for the object\n */\n calcTransformMatrix(skipGroup = false): TMat2D {\n let matrix = this.calcOwnMatrix();\n if (skipGroup || !this.group) {\n return matrix;\n }\n const key = this.transformMatrixKey(skipGroup),\n cache = this.matrixCache;\n if (cache && cache.key.every((x, i) => x === key[i])) {\n return cache.value;\n }\n if (this.group) {\n matrix = multiplyTransformMatrices(\n this.group.calcTransformMatrix(false),\n matrix,\n );\n }\n this.matrixCache = {\n key,\n value: matrix,\n };\n return matrix;\n }\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties, this matrix does not include the group transformation\n * @return {TMat2D} transform matrix for the object\n */\n calcOwnMatrix(): TMat2D {\n const key = this.transformMatrixKey(true),\n cache = this.ownMatrixCache;\n if (cache && cache.key === key) {\n return cache.value;\n }\n const center = this.getRelativeCenterPoint(),\n options = {\n angle: this.angle,\n translateX: center.x,\n translateY: center.y,\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n flipX: this.flipX,\n flipY: this.flipY,\n },\n value = composeMatrix(options);\n this.ownMatrixCache = {\n key,\n value,\n };\n return value;\n }\n\n /**\n * Calculate object dimensions from its properties\n * @private\n * @returns {Point} dimensions\n */\n _getNonTransformedDimensions(): Point {\n return new Point(this.width, this.height).scalarAdd(this.strokeWidth);\n }\n\n /**\n * Calculate object dimensions for controls box, including padding and canvas zoom.\n * and active selection\n * @private\n * @param {object} [options] transform options\n * @returns {Point} dimensions\n */\n _calculateCurrentDimensions(options?: any): Point {\n return this._getTransformedDimensions(options)\n .transform(this.getViewportTransform(), true)\n .scalarAdd(2 * this.padding);\n }\n\n // #region Origin\n\n declare top: number;\n declare left: number;\n declare width: number;\n declare height: number;\n declare flipX: boolean;\n declare flipY: boolean;\n declare scaleX: number;\n declare scaleY: number;\n declare skewX: number;\n declare skewY: number;\n /**\n * @deprecated please use 'center' as value in new projects\n * */\n declare originX: TOriginX;\n /**\n * @deprecated please use 'center' as value in new projects\n * */\n declare originY: TOriginY;\n declare angle: TDegree;\n declare strokeWidth: number;\n declare strokeUniform: boolean;\n\n /**\n * Object containing this object.\n * can influence its size and position\n */\n declare group?: Group;\n\n /**\n * Calculate object bounding box dimensions from its properties scale, skew.\n * This bounding box is aligned with object angle and not with canvas axis or screen.\n * @param {Object} [options]\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewY]\n * @private\n * @returns {Point} dimensions\n */\n _getTransformedDimensions(options: any = {}): Point {\n const dimOptions = {\n // if scaleX or scaleY are negative numbers,\n // this will return dimensions that are negative.\n // and this will break assumptions around the codebase\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n width: this.width,\n height: this.height,\n strokeWidth: this.strokeWidth,\n ...options,\n };\n // stroke is applied before/after transformations are applied according to `strokeUniform`\n const strokeWidth = dimOptions.strokeWidth;\n let preScalingStrokeValue = strokeWidth,\n postScalingStrokeValue = 0;\n\n if (this.strokeUniform) {\n preScalingStrokeValue = 0;\n postScalingStrokeValue = strokeWidth;\n }\n const dimX = dimOptions.width + preScalingStrokeValue,\n dimY = dimOptions.height + preScalingStrokeValue,\n noSkew = dimOptions.skewX === 0 && dimOptions.skewY === 0;\n let finalDimensions;\n if (noSkew) {\n finalDimensions = new Point(\n dimX * dimOptions.scaleX,\n dimY * dimOptions.scaleY,\n );\n } else {\n finalDimensions = sizeAfterTransform(\n dimX,\n dimY,\n calcDimensionsMatrix(dimOptions),\n );\n }\n\n return finalDimensions.scalarAdd(postScalingStrokeValue);\n }\n\n /**\n * Translates the coordinates from a set of origin to another (based on the object's dimensions)\n * @param {Point} point The point which corresponds to the originX and originY params\n * @param {TOriginX} fromOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} fromOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @param {TOriginX} toOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} toOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n translateToGivenOrigin(\n point: Point,\n fromOriginX: TOriginX,\n fromOriginY: TOriginY,\n toOriginX: TOriginX,\n toOriginY: TOriginY,\n ): Point {\n let x = point.x,\n y = point.y;\n const offsetX = resolveOrigin(toOriginX) - resolveOrigin(fromOriginX),\n offsetY = resolveOrigin(toOriginY) - resolveOrigin(fromOriginY);\n\n if (offsetX || offsetY) {\n const dim = this._getTransformedDimensions();\n x += offsetX * dim.x;\n y += offsetY * dim.y;\n }\n\n return new Point(x, y);\n }\n\n /**\n * Translates the coordinates from origin to center coordinates (based on the object's dimensions)\n * @param {Point} point The point which corresponds to the originX and originY params\n * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n translateToCenterPoint(\n point: Point,\n originX: TOriginX,\n originY: TOriginY,\n ): Point {\n if (originX === CENTER && originY === CENTER) {\n return point;\n }\n const p = this.translateToGivenOrigin(\n point,\n originX,\n originY,\n CENTER,\n CENTER,\n );\n if (this.angle) {\n return p.rotate(degreesToRadians(this.angle), point);\n }\n return p;\n }\n\n /**\n * Translates the coordinates from center to origin coordinates (based on the object's dimensions)\n * @param {Point} center The point which corresponds to center of the object\n * @param {OriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {OriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n translateToOriginPoint(\n center: Point,\n originX: TOriginX,\n originY: TOriginY,\n ): Point {\n const p = this.translateToGivenOrigin(\n center,\n CENTER,\n CENTER,\n originX,\n originY,\n );\n if (this.angle) {\n return p.rotate(degreesToRadians(this.angle), center);\n }\n return p;\n }\n\n /**\n * Returns the center coordinates of the object relative to canvas\n * @return {Point}\n */\n getCenterPoint(): Point {\n const relCenter = this.getRelativeCenterPoint();\n return this.group\n ? transformPoint(relCenter, this.group.calcTransformMatrix())\n : relCenter;\n }\n\n /**\n * Returns the center coordinates of the object relative to it's parent\n * @return {Point}\n */\n getRelativeCenterPoint(): Point {\n return this.translateToCenterPoint(\n new Point(this.left, this.top),\n this.originX,\n this.originY,\n );\n }\n\n /**\n * Returns the position of the object as if it has a different origin.\n * Take an object that has left, top set to 100, 100 with origin 'left', 'top'.\n * Return the values of left top ( wrapped in a point ) that you would need to keep\n * the same position if origin where different.\n * Alternatively you can use this to also find which point in the parent plane is a specific origin\n * ( where is the bottom right corner of my object? )\n * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n getPointByOrigin(originX: TOriginX, originY: TOriginY): Point {\n return this.translateToOriginPoint(\n this.getRelativeCenterPoint(),\n originX,\n originY,\n );\n }\n\n /**\n * Sets the position of the object taking into consideration the object's origin\n * @param {Point} pos The new position of the object\n * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {void}\n */\n setPositionByOrigin(pos: Point, originX: TOriginX, originY: TOriginY) {\n const center = this.translateToCenterPoint(pos, originX, originY),\n position = this.translateToOriginPoint(\n center,\n this.originX,\n this.originY,\n );\n this.set({ left: position.x, top: position.y });\n }\n\n /**\n * @private\n */\n _getLeftTopCoords() {\n return this.translateToOriginPoint(\n this.getRelativeCenterPoint(),\n LEFT,\n TOP,\n );\n }\n}\n","import { cache } from '../../cache';\nimport { config } from '../../config';\nimport {\n ALIASING_LIMIT,\n CENTER,\n iMatrix,\n LEFT,\n SCALE_X,\n SCALE_Y,\n STROKE,\n FILL,\n TOP,\n VERSION,\n} from '../../constants';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport { Shadow } from '../../Shadow';\nimport type {\n TDegree,\n TFiller,\n TSize,\n TCacheCanvasDimensions,\n Abortable,\n TOptions,\n ImageFormat,\n} from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { runningAnimations } from '../../util/animation/AnimationRegistry';\nimport { capValue } from '../../util/misc/capValue';\nimport { createCanvasElement, toDataURL } from '../../util/misc/dom';\nimport { invertTransform, qrDecompose } from '../../util/misc/matrix';\nimport { enlivenObjectEnlivables } from '../../util/misc/objectEnlive';\nimport {\n resetObjectTransform,\n saveObjectTransform,\n} from '../../util/misc/objectTransforms';\nimport { sendObjectToPlane } from '../../util/misc/planeChange';\nimport { pick, pickBy } from '../../util/misc/pick';\nimport { toFixed } from '../../util/misc/toFixed';\nimport type { Group } from '../Group';\nimport { StaticCanvas } from '../../canvas/StaticCanvas';\nimport {\n isFiller,\n isSerializableFiller,\n isTextObject,\n} from '../../util/typeAssertions';\nimport type { FabricImage } from '../Image';\nimport {\n cacheProperties,\n fabricObjectDefaultValues,\n stateProperties,\n} from './defaultValues';\nimport type { Gradient } from '../../gradient/Gradient';\nimport type { Pattern } from '../../Pattern';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { SerializedObjectProps } from './types/SerializedObjectProps';\nimport type { ObjectProps } from './types/ObjectProps';\nimport { getDevicePixelRatio, getEnv } from '../../env';\nimport { log } from '../../util/internals/console';\nimport type { TColorArg } from '../../color/typedefs';\nimport type { TAnimation } from '../../util/animation/animate';\nimport { animate, animateColor } from '../../util/animation/animate';\nimport type {\n AnimationOptions,\n ArrayAnimationOptions,\n ColorAnimationOptions,\n ValueAnimationOptions,\n} from '../../util/animation/types';\nimport { ObjectGeometry } from './ObjectGeometry';\n\ntype TAncestor = FabricObject;\ntype TCollection = Group;\n\nexport type Ancestors =\n | [FabricObject | Group]\n | [FabricObject | Group, ...Group[]]\n | Group[];\n\nexport type AncestryComparison = {\n /**\n * common ancestors of `this` and`other`(may include`this` | `other`)\n */\n common: Ancestors;\n /**\n * ancestors that are of `this` only\n */\n fork: Ancestors;\n /**\n * ancestors that are of `other` only\n */\n otherFork: Ancestors;\n};\n\nexport type TCachedFabricObject = T &\n Required<\n Pick<\n T,\n | 'zoomX'\n | 'zoomY'\n | '_cacheCanvas'\n | '_cacheContext'\n | 'cacheTranslationX'\n | 'cacheTranslationY'\n >\n > & {\n _cacheContext: CanvasRenderingContext2D;\n };\n\nexport type ObjectToCanvasElementOptions = {\n format?: ImageFormat;\n /** Multiplier to scale by */\n multiplier?: number;\n /** Cropping left offset. Introduced in v1.2.14 */\n left?: number;\n /** Cropping top offset. Introduced in v1.2.14 */\n top?: number;\n /** Cropping width. Introduced in v1.2.14 */\n width?: number;\n /** Cropping height. Introduced in v1.2.14 */\n height?: number;\n /** Enable retina scaling for clone image. Introduce in 1.6.4 */\n enableRetinaScaling?: boolean;\n /** Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4 */\n withoutTransform?: boolean;\n /** Remove current object shadow. Introduced in 2.4.2 */\n withoutShadow?: boolean;\n /** Account for canvas viewport transform */\n viewportTransform?: boolean;\n /** Function to create the output canvas to export onto */\n canvasProvider?: (el?: HTMLCanvasElement) => T;\n};\n\ntype toDataURLOptions = ObjectToCanvasElementOptions & {\n quality?: number;\n};\n\n/**\n * Root object class from which all 2d shape classes inherit from\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#objects}\n *\n * @fires added\n * @fires removed\n *\n * @fires selected\n * @fires deselected\n *\n * @fires rotating\n * @fires scaling\n * @fires moving\n * @fires skewing\n * @fires modified\n *\n * @fires mousedown\n * @fires mouseup\n * @fires mouseover\n * @fires mouseout\n * @fires mousewheel\n * @fires mousedblclick\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop\n */\nexport class FabricObject<\n Props extends TOptions = Partial,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends ObjectGeometry\n implements ObjectProps\n{\n declare minScaleLimit: number;\n\n declare opacity: number;\n\n declare paintFirst: 'fill' | 'stroke';\n declare fill: string | TFiller | null;\n declare fillRule: CanvasFillRule;\n declare stroke: string | TFiller | null;\n declare strokeDashArray: number[] | null;\n declare strokeDashOffset: number;\n declare strokeLineCap: CanvasLineCap;\n declare strokeLineJoin: CanvasLineJoin;\n declare strokeMiterLimit: number;\n\n declare globalCompositeOperation: GlobalCompositeOperation;\n declare backgroundColor: string;\n\n declare shadow: Shadow | null;\n\n declare visible: boolean;\n\n declare includeDefaultValues: boolean;\n declare excludeFromExport: boolean;\n\n declare objectCaching: boolean;\n\n declare clipPath?: FabricObject;\n declare inverted: boolean;\n declare absolutePositioned: boolean;\n declare centeredRotation: boolean;\n declare centeredScaling: boolean;\n\n /**\n * This list of properties is used to check if the state of an object is changed.\n * This state change now is only used for children of groups to understand if a group\n * needs its cache regenerated during a .set call\n * @type Array\n */\n static stateProperties: string[] = stateProperties;\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * Those properties are checked by\n * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n * and refreshed at the next render\n * @type Array\n */\n static cacheProperties: string[] = cacheProperties;\n\n /**\n * When set to `true`, object's cache will be rerendered next render call.\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n declare dirty: boolean;\n\n /**\n * Quick access for the _cacheCanvas rendering context\n * This is part of the objectCaching feature\n * since 1.7.0\n * @type boolean\n * @default undefined\n * @private\n */\n _cacheContext: CanvasRenderingContext2D | null = null;\n\n /**\n * A reference to the HTMLCanvasElement that is used to contain the cache of the object\n * this canvas element is resized and cleared as needed\n * Is marked private, you can read it, don't use it since it is handled by fabric\n * since 1.7.0\n * @type HTMLCanvasElement\n * @default undefined\n * @private\n */\n declare _cacheCanvas?: HTMLCanvasElement;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, X axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare zoomX?: number;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, Y axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare zoomY?: number;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, Y axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare cacheTranslationX?: number;\n\n /**\n * translation of the cacheCanvas away from the center, for subpixel accuracy and crispness\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare cacheTranslationY?: number;\n\n /**\n * A reference to the parent of the object, usually a Group\n * @type number\n * @default undefined\n * @private\n */\n declare group?: Group;\n\n /**\n * Indicate if the object is sitting on a cache dedicated to it\n * or is part of a larger cache for many object ( a group for example)\n * @type number\n * @default undefined\n * @private\n */\n declare ownCaching?: boolean;\n\n /**\n * Private. indicates if the object inside a group is on a transformed context or not\n * or is part of a larger cache for many object ( a group for example)\n * @type boolean\n * @default undefined\n * @private\n */\n declare _transformDone?: boolean;\n\n static ownDefaults = fabricObjectDefaultValues;\n\n static getDefaults(): Record {\n return FabricObject.ownDefaults;\n }\n\n /**\n * The class type.\n * This is used for serialization and deserialization purposes and internally it can be used\n * to identify classes.\n * When we transform a class in a plain JS object we need a way to recognize which class it was,\n * and the type is the way we do that. It has no other purposes and you should not give one.\n * Hard to reach on instances and please do not use to drive instance's logic (this.constructor.type).\n * To idenfity a class use instanceof class ( instanceof Rect ).\n * We do not do that in fabricJS code because we want to try to have code splitting possible.\n */\n static type = 'FabricObject';\n\n /**\n * Legacy identifier of the class. Prefer using utils like isType or instanceOf\n * Will be removed in fabric 7 or 8.\n * The setter exists to avoid type errors in old code and possibly current deserialization code.\n * @TODO add sustainable warning message\n * @type string\n * @deprecated\n */\n get type() {\n const name = (this.constructor as typeof FabricObject).type;\n if (name === 'FabricObject') {\n return 'object';\n }\n return name.toLowerCase();\n }\n\n set type(value) {\n log('warn', 'Setting type has no effect', value);\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, FabricObject.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * Create a the canvas used to keep the cached copy of the object\n * @private\n */\n _createCacheCanvas() {\n this._cacheCanvas = createCanvasElement();\n this._cacheContext = this._cacheCanvas.getContext('2d');\n this._updateCacheCanvas();\n // if canvas gets created, is empty, so dirty.\n this.dirty = true;\n }\n\n /**\n * Limit the cache dimensions so that X * Y do not cross config.perfLimitSizeTotal\n * and each side do not cross fabric.cacheSideLimit\n * those numbers are configurable so that you can get as much detail as you want\n * making bargain with performances.\n * @param {Object} dims\n * @param {Object} dims.width width of canvas\n * @param {Object} dims.height height of canvas\n * @param {Object} dims.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @param {Object} dims.zoomY zoomY zoom value to unscale the canvas before drawing cache\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _limitCacheSize(\n dims: TSize & { zoomX: number; zoomY: number; capped: boolean } & any,\n ) {\n const width = dims.width,\n height = dims.height,\n max = config.maxCacheSideLimit,\n min = config.minCacheSideLimit;\n if (\n width <= max &&\n height <= max &&\n width * height <= config.perfLimitSizeTotal\n ) {\n if (width < min) {\n dims.width = min;\n }\n if (height < min) {\n dims.height = min;\n }\n return dims;\n }\n const ar = width / height,\n [limX, limY] = cache.limitDimsByArea(ar),\n x = capValue(min, limX, max),\n y = capValue(min, limY, max);\n if (width > x) {\n dims.zoomX /= width / x;\n dims.width = x;\n dims.capped = true;\n }\n if (height > y) {\n dims.zoomY /= height / y;\n dims.height = y;\n dims.capped = true;\n }\n return dims;\n }\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @return {Object}.x width of object to be cached\n * @return {Object}.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions(): TCacheCanvasDimensions {\n const objectScale = this.getTotalObjectScaling(),\n // calculate dimensions without skewing\n dim = this._getTransformedDimensions({ skewX: 0, skewY: 0 }),\n neededX = (dim.x * objectScale.x) / this.scaleX,\n neededY = (dim.y * objectScale.y) / this.scaleY;\n return {\n // for sure this ALIASING_LIMIT is slightly creating problem\n // in situation in which the cache canvas gets an upper limit\n // also objectScale contains already scaleX and scaleY\n width: neededX + ALIASING_LIMIT,\n height: neededY + ALIASING_LIMIT,\n zoomX: objectScale.x,\n zoomY: objectScale.y,\n x: neededX,\n y: neededY,\n };\n }\n\n /**\n * Update width and height of the canvas for cache\n * returns true or false if canvas needed resize.\n * @private\n * @return {Boolean} true if the canvas has been resized\n */\n _updateCacheCanvas() {\n const canvas = this._cacheCanvas!,\n context = this._cacheContext,\n dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n minCacheSize = config.minCacheSideLimit,\n width = dims.width,\n height = dims.height,\n zoomX = dims.zoomX,\n zoomY = dims.zoomY,\n dimensionsChanged = width !== canvas.width || height !== canvas.height,\n zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY;\n\n if (!canvas || !context) {\n return false;\n }\n\n let drawingWidth,\n drawingHeight,\n shouldRedraw = dimensionsChanged || zoomChanged,\n additionalWidth = 0,\n additionalHeight = 0,\n shouldResizeCanvas = false;\n\n if (dimensionsChanged) {\n const canvasWidth = (this._cacheCanvas as HTMLCanvasElement).width,\n canvasHeight = (this._cacheCanvas as HTMLCanvasElement).height,\n sizeGrowing = width > canvasWidth || height > canvasHeight,\n sizeShrinking =\n (width < canvasWidth * 0.9 || height < canvasHeight * 0.9) &&\n canvasWidth > minCacheSize &&\n canvasHeight > minCacheSize;\n shouldResizeCanvas = sizeGrowing || sizeShrinking;\n if (\n sizeGrowing &&\n !dims.capped &&\n (width > minCacheSize || height > minCacheSize)\n ) {\n additionalWidth = width * 0.1;\n additionalHeight = height * 0.1;\n }\n }\n if (isTextObject(this) && this.path) {\n shouldRedraw = true;\n shouldResizeCanvas = true;\n // IMHO in those lines we are using zoomX and zoomY not the this version.\n additionalWidth += this.getHeightOfLine(0) * this.zoomX!;\n additionalHeight += this.getHeightOfLine(0) * this.zoomY!;\n }\n if (shouldRedraw) {\n if (shouldResizeCanvas) {\n canvas.width = Math.ceil(width + additionalWidth);\n canvas.height = Math.ceil(height + additionalHeight);\n } else {\n context.setTransform(1, 0, 0, 1, 0, 0);\n context.clearRect(0, 0, canvas.width, canvas.height);\n }\n drawingWidth = dims.x / 2;\n drawingHeight = dims.y / 2;\n this.cacheTranslationX =\n Math.round(canvas.width / 2 - drawingWidth) + drawingWidth;\n this.cacheTranslationY =\n Math.round(canvas.height / 2 - drawingHeight) + drawingHeight;\n context.translate(this.cacheTranslationX, this.cacheTranslationY);\n context.scale(zoomX, zoomY);\n this.zoomX = zoomX;\n this.zoomY = zoomY;\n return true;\n }\n return false;\n }\n\n /**\n * Sets object's properties from options, for class constructor only.\n * Needs to be overridden for different defaults.\n * @protected\n * @param {Object} [options] Options object\n */\n protected setOptions(options: Record = {}) {\n this._setOptions(options);\n }\n\n /**\n * Transforms context when rendering an object\n * @param {CanvasRenderingContext2D} ctx Context\n */\n transform(ctx: CanvasRenderingContext2D) {\n const needFullTransform =\n (this.group && !this.group._transformDone) ||\n (this.group && this.canvas && ctx === (this.canvas as Canvas).contextTop);\n const m = this.calcTransformMatrix(!needFullTransform);\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n\n /**\n * Return the object scale factor counting also the group scaling\n * @return {Point}\n */\n getObjectScaling() {\n // if the object is a top level one, on the canvas, we go for simple aritmetic\n // otherwise the complex method with angles will return approximations and decimals\n // and will likely kill the cache when not needed\n // https://github.com/fabricjs/fabric.js/issues/7157\n if (!this.group) {\n return new Point(Math.abs(this.scaleX), Math.abs(this.scaleY));\n }\n // if we are inside a group total zoom calculation is complex, we defer to generic matrices\n const options = qrDecompose(this.calcTransformMatrix());\n return new Point(Math.abs(options.scaleX), Math.abs(options.scaleY));\n }\n\n /**\n * Return the object scale factor counting also the group scaling, zoom and retina\n * @return {Object} object with scaleX and scaleY properties\n */\n getTotalObjectScaling() {\n const scale = this.getObjectScaling();\n if (this.canvas) {\n const zoom = this.canvas.getZoom();\n const retina = this.getCanvasRetinaScaling();\n return scale.scalarMultiply(zoom * retina);\n }\n return scale;\n }\n\n /**\n * Return the object opacity counting also the group property\n * @return {Number}\n */\n getObjectOpacity() {\n let opacity = this.opacity;\n if (this.group) {\n opacity *= this.group.getObjectOpacity();\n }\n return opacity;\n }\n\n /**\n * Makes sure the scale is valid and modifies it if necessary\n * @todo: this is a control action issue, not a geometry one\n * @private\n * @param {Number} value, unconstrained\n * @return {Number} constrained value;\n */\n _constrainScale(value: number): number {\n if (Math.abs(value) < this.minScaleLimit) {\n if (value < 0) {\n return -this.minScaleLimit;\n } else {\n return this.minScaleLimit;\n }\n } else if (value === 0) {\n return 0.0001;\n }\n return value;\n }\n\n /**\n * Handles setting values on the instance and handling internal side effects\n * @protected\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n if (key === SCALE_X || key === SCALE_Y) {\n value = this._constrainScale(value);\n }\n if (key === SCALE_X && value < 0) {\n this.flipX = !this.flipX;\n value *= -1;\n } else if (key === 'scaleY' && value < 0) {\n this.flipY = !this.flipY;\n value *= -1;\n // i don't like this automatic initialization here\n } else if (key === 'shadow' && value && !(value instanceof Shadow)) {\n value = new Shadow(value);\n }\n\n const isChanged = this[key as keyof this] !== value;\n this[key as keyof this] = value;\n\n // invalidate caches\n if (\n isChanged &&\n (this.constructor as typeof FabricObject).cacheProperties.includes(key)\n ) {\n this.dirty = true;\n }\n // a dirty child makes the parent dirty.\n // but a non dirty child does not make the parent not dirty.\n // the parent could be dirty for some other reason.\n this.parent &&\n (this.dirty ||\n (isChanged &&\n (this.constructor as typeof FabricObject).stateProperties.includes(\n key,\n ))) &&\n this.parent._set('dirty', true);\n\n return this;\n }\n\n /*\n * @private\n * return if the object would be visible in rendering\n * @memberOf FabricObject.prototype\n * @return {Boolean}\n */\n isNotVisible() {\n return (\n this.opacity === 0 ||\n (!this.width && !this.height && this.strokeWidth === 0) ||\n !this.visible\n );\n }\n\n /**\n * Renders an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n // do not render if width/height are zeros or object is not visible\n if (this.isNotVisible()) {\n return;\n }\n if (\n this.canvas &&\n this.canvas.skipOffscreen &&\n !this.group &&\n !this.isOnScreen()\n ) {\n return;\n }\n ctx.save();\n this._setupCompositeOperation(ctx);\n this.drawSelectionBackground(ctx);\n this.transform(ctx);\n this._setOpacity(ctx);\n this._setShadow(ctx);\n if (this.shouldCache()) {\n this.renderCache();\n (this as TCachedFabricObject).drawCacheOnCanvas(ctx);\n } else {\n this._removeCacheCanvas();\n this.drawObject(ctx);\n this.dirty = false;\n }\n ctx.restore();\n }\n\n drawSelectionBackground(_ctx: CanvasRenderingContext2D) {\n /* no op */\n }\n\n renderCache(options?: any) {\n options = options || {};\n if (!this._cacheCanvas || !this._cacheContext) {\n this._createCacheCanvas();\n }\n if (this.isCacheDirty() && this._cacheContext) {\n this.drawObject(this._cacheContext, options.forClipping);\n this.dirty = false;\n }\n }\n\n /**\n * Remove cacheCanvas and its dimensions from the objects\n */\n _removeCacheCanvas() {\n this._cacheCanvas = undefined;\n this._cacheContext = null;\n }\n\n /**\n * return true if the object will draw a stroke\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when stroke happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the stroke is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasStroke() {\n return (\n this.stroke && this.stroke !== 'transparent' && this.strokeWidth !== 0\n );\n }\n\n /**\n * return true if the object will draw a fill\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when fill happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the fill is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasFill() {\n return this.fill && this.fill !== 'transparent';\n }\n\n /**\n * When set to `true`, force the object to have its own cache, even if it is inside a group\n * it may be needed when your object behave in a particular way on the cache and always needs\n * its own isolated canvas to render correctly.\n * Created to be overridden\n * since 1.7.12\n * @returns Boolean\n */\n needsItsOwnCache() {\n if (\n this.paintFirst === STROKE &&\n this.hasFill() &&\n this.hasStroke() &&\n !!this.shadow\n ) {\n return true;\n }\n if (this.clipPath) {\n return true;\n }\n return false;\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * Read as: cache if is needed, or if the feature is enabled but we are not already caching.\n * @return {Boolean}\n */\n shouldCache() {\n this.ownCaching =\n this.needsItsOwnCache() ||\n (this.objectCaching && (!this.parent || !this.parent.isOnACache()));\n return this.ownCaching;\n }\n\n /**\n * Check if this object will cast a shadow with an offset.\n * used by Group.shouldCache to know if child has a shadow recursively\n * @return {Boolean}\n * @deprecated\n */\n willDrawShadow() {\n return (\n !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0)\n );\n }\n\n /**\n * Execute the drawing operation for an object clipPath\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {FabricObject} clipPath\n */\n drawClipPathOnCache(\n ctx: CanvasRenderingContext2D,\n clipPath: TCachedFabricObject,\n ) {\n ctx.save();\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4\n if (clipPath.inverted) {\n ctx.globalCompositeOperation = 'destination-out';\n } else {\n ctx.globalCompositeOperation = 'destination-in';\n }\n //ctx.scale(1 / 2, 1 / 2);\n if (clipPath.absolutePositioned) {\n const m = invertTransform(this.calcTransformMatrix());\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n clipPath.transform(ctx);\n ctx.scale(1 / clipPath.zoomX, 1 / clipPath.zoomY);\n ctx.drawImage(\n clipPath._cacheCanvas,\n -clipPath.cacheTranslationX,\n -clipPath.cacheTranslationY,\n );\n ctx.restore();\n }\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {boolean} forClipping apply clipping styles\n */\n drawObject(ctx: CanvasRenderingContext2D, forClipping?: boolean) {\n const originalFill = this.fill,\n originalStroke = this.stroke;\n if (forClipping) {\n this.fill = 'black';\n this.stroke = '';\n this._setClippingProperties(ctx);\n } else {\n this._renderBackground(ctx);\n }\n this._render(ctx);\n this._drawClipPath(ctx, this.clipPath);\n this.fill = originalFill;\n this.stroke = originalStroke;\n }\n\n /**\n * Prepare clipPath state and cache and draw it on instance's cache\n * @param {CanvasRenderingContext2D} ctx\n * @param {FabricObject} clipPath\n */\n _drawClipPath(ctx: CanvasRenderingContext2D, clipPath?: FabricObject) {\n if (!clipPath) {\n return;\n }\n // needed to setup a couple of variables\n // path canvas gets overridden with this one.\n // TODO find a better solution?\n clipPath._set('canvas', this.canvas);\n clipPath.shouldCache();\n clipPath._transformDone = true;\n clipPath.renderCache({ forClipping: true });\n this.drawClipPathOnCache(ctx, clipPath as TCachedFabricObject);\n }\n\n /**\n * Paint the cached copy of the object on the target context.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas(this: TCachedFabricObject, ctx: CanvasRenderingContext2D) {\n ctx.scale(1 / this.zoomX, 1 / this.zoomY);\n ctx.drawImage(\n this._cacheCanvas,\n -this.cacheTranslationX,\n -this.cacheTranslationY,\n );\n }\n\n /**\n * Check if cache is dirty\n * @param {Boolean} skipCanvas skip canvas checks because this object is painted\n * on parent canvas.\n */\n isCacheDirty(skipCanvas = false) {\n if (this.isNotVisible()) {\n return false;\n }\n const canvas = this._cacheCanvas;\n const ctx = this._cacheContext;\n if (canvas && ctx && !skipCanvas && this._updateCacheCanvas()) {\n // in this case the context is already cleared.\n return true;\n } else {\n if (this.dirty || (this.clipPath && this.clipPath.absolutePositioned)) {\n if (canvas && ctx && !skipCanvas) {\n ctx.save();\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n }\n return true;\n }\n }\n return false;\n }\n\n /**\n * Draws a background for the object big as its untransformed dimensions\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground(ctx: CanvasRenderingContext2D) {\n if (!this.backgroundColor) {\n return;\n }\n const dim = this._getNonTransformedDimensions();\n ctx.fillStyle = this.backgroundColor;\n\n ctx.fillRect(-dim.x / 2, -dim.y / 2, dim.x, dim.y);\n // if there is background color no other shadows\n // should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setOpacity(ctx: CanvasRenderingContext2D) {\n if (this.group && !this.group._transformDone) {\n ctx.globalAlpha = this.getObjectOpacity();\n } else {\n ctx.globalAlpha *= this.opacity;\n }\n }\n\n _setStrokeStyles(\n ctx: CanvasRenderingContext2D,\n decl: Pick<\n this,\n | 'stroke'\n | 'strokeWidth'\n | 'strokeLineCap'\n | 'strokeDashOffset'\n | 'strokeLineJoin'\n | 'strokeMiterLimit'\n >,\n ) {\n const stroke = decl.stroke;\n if (stroke) {\n ctx.lineWidth = decl.strokeWidth;\n ctx.lineCap = decl.strokeLineCap;\n ctx.lineDashOffset = decl.strokeDashOffset;\n ctx.lineJoin = decl.strokeLineJoin;\n ctx.miterLimit = decl.strokeMiterLimit;\n if (isFiller(stroke)) {\n if (\n (stroke as Gradient<'linear'>).gradientUnits === 'percentage' ||\n (stroke as Gradient<'linear'>).gradientTransform ||\n (stroke as Pattern).patternTransform\n ) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n this._applyPatternForTransformedGradient(ctx, stroke);\n } else {\n // is a simple gradient or pattern\n ctx.strokeStyle = stroke.toLive(ctx)!;\n this._applyPatternGradientTransform(ctx, stroke);\n }\n } else {\n // is a color\n ctx.strokeStyle = decl.stroke as string;\n }\n }\n }\n\n _setFillStyles(ctx: CanvasRenderingContext2D, { fill }: Pick) {\n if (fill) {\n if (isFiller(fill)) {\n ctx.fillStyle = fill.toLive(ctx)!;\n this._applyPatternGradientTransform(ctx, fill);\n } else {\n ctx.fillStyle = fill;\n }\n }\n }\n\n _setClippingProperties(ctx: CanvasRenderingContext2D) {\n ctx.globalAlpha = 1;\n ctx.strokeStyle = 'transparent';\n ctx.fillStyle = '#000000';\n }\n\n /**\n * @private\n * Sets line dash\n * @param {CanvasRenderingContext2D} ctx Context to set the dash line on\n * @param {Array} dashArray array representing dashes\n */\n _setLineDash(ctx: CanvasRenderingContext2D, dashArray?: number[] | null) {\n if (!dashArray || dashArray.length === 0) {\n return;\n }\n // Spec requires the concatenation of two copies of the dash array when the number of elements is odd\n if (1 & dashArray.length) {\n dashArray.push(...dashArray);\n }\n ctx.setLineDash(dashArray);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setShadow(ctx: CanvasRenderingContext2D) {\n if (!this.shadow) {\n return;\n }\n\n const shadow = this.shadow,\n canvas = this.canvas,\n retinaScaling = this.getCanvasRetinaScaling(),\n [sx, , , sy] = canvas?.viewportTransform || iMatrix,\n multX = sx * retinaScaling,\n multY = sy * retinaScaling,\n scaling = shadow.nonScaling ? new Point(1, 1) : this.getObjectScaling();\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur =\n (shadow.blur *\n config.browserShadowBlurConstant *\n (multX + multY) *\n (scaling.x + scaling.y)) /\n 4;\n ctx.shadowOffsetX = shadow.offsetX * multX * scaling.x;\n ctx.shadowOffsetY = shadow.offsetY * multY * scaling.y;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _removeShadow(ctx: CanvasRenderingContext2D) {\n if (!this.shadow) {\n return;\n }\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {TFiller} filler {@link Pattern} or {@link Gradient}\n */\n _applyPatternGradientTransform(\n ctx: CanvasRenderingContext2D,\n filler: TFiller,\n ) {\n if (!isFiller(filler)) {\n return { offsetX: 0, offsetY: 0 };\n }\n const t =\n (filler as Gradient<'linear'>).gradientTransform ||\n (filler as Pattern).patternTransform;\n const offsetX = -this.width / 2 + filler.offsetX || 0,\n offsetY = -this.height / 2 + filler.offsetY || 0;\n\n if ((filler as Gradient<'linear'>).gradientUnits === 'percentage') {\n ctx.transform(this.width, 0, 0, this.height, offsetX, offsetY);\n } else {\n ctx.transform(1, 0, 0, 1, offsetX, offsetY);\n }\n if (t) {\n ctx.transform(t[0], t[1], t[2], t[3], t[4], t[5]);\n }\n return { offsetX: offsetX, offsetY: offsetY };\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderPaintInOrder(ctx: CanvasRenderingContext2D) {\n if (this.paintFirst === STROKE) {\n this._renderStroke(ctx);\n this._renderFill(ctx);\n } else {\n this._renderFill(ctx);\n this._renderStroke(ctx);\n }\n }\n\n /**\n * @private\n * function that actually render something on the context.\n * empty here to allow Obects to work on tests to benchmark fabric functionalites\n * not related to rendering\n * @param {CanvasRenderingContext2D} _ctx Context to render on\n */\n _render(_ctx: CanvasRenderingContext2D) {\n // placeholder to be overridden\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderFill(ctx: CanvasRenderingContext2D) {\n if (!this.fill) {\n return;\n }\n\n ctx.save();\n this._setFillStyles(ctx, this);\n if (this.fillRule === 'evenodd') {\n ctx.fill('evenodd');\n } else {\n ctx.fill();\n }\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderStroke(ctx: CanvasRenderingContext2D) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n if (this.strokeUniform) {\n const scaling = this.getObjectScaling();\n ctx.scale(1 / scaling.x, 1 / scaling.y);\n }\n this._setLineDash(ctx, this.strokeDashArray);\n this._setStrokeStyles(ctx, this);\n ctx.stroke();\n ctx.restore();\n }\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Gradient} filler\n */\n _applyPatternForTransformedGradient(\n ctx: CanvasRenderingContext2D,\n filler: TFiller,\n ) {\n const dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n pCanvas = createCanvasElement(),\n retinaScaling = this.getCanvasRetinaScaling(),\n width = dims.x / this.scaleX / retinaScaling,\n height = dims.y / this.scaleY / retinaScaling;\n // in case width and height are less than 1px, we have to round up.\n // since the pattern is no-repeat, this is fine\n pCanvas.width = Math.ceil(width);\n pCanvas.height = Math.ceil(height);\n const pCtx = pCanvas.getContext('2d');\n if (!pCtx) {\n return;\n }\n pCtx.beginPath();\n pCtx.moveTo(0, 0);\n pCtx.lineTo(width, 0);\n pCtx.lineTo(width, height);\n pCtx.lineTo(0, height);\n pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.scale(\n dims.zoomX / this.scaleX / retinaScaling,\n dims.zoomY / this.scaleY / retinaScaling,\n );\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fillStyle = filler.toLive(ctx)!;\n pCtx.fill();\n ctx.translate(\n -this.width / 2 - this.strokeWidth / 2,\n -this.height / 2 - this.strokeWidth / 2,\n );\n ctx.scale(\n (retinaScaling * this.scaleX) / dims.zoomX,\n (retinaScaling * this.scaleY) / dims.zoomY,\n );\n ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat') ?? '';\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement() {\n return new Point(this.left + this.width / 2, this.top + this.height / 2);\n }\n\n /**\n * Clones an instance.\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @returns {Promise}\n */\n clone(propertiesToInclude?: string[]): Promise {\n const objectForm = this.toObject(propertiesToInclude);\n return (this.constructor as typeof FabricObject).fromObject(\n objectForm,\n ) as unknown as Promise;\n }\n\n /**\n * Creates an instance of Image out of an object\n * makes use of toCanvasElement.\n * Once this method was based on toDataUrl and loadImage, so it also had a quality\n * and format option. toCanvasElement is faster and produce no loss of quality.\n * If you need to get a real Jpeg or Png from an object, using toDataURL is the right way to do it.\n * toCanvasElement and then toBlob from the obtained canvas is also a good option.\n * @todo fix the export type, it could not be Image but the type that getClass return for 'image'.\n * @param {ObjectToCanvasElementOptions} [options] for clone as image, passed to toDataURL\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {FabricImage} Object cloned as image.\n */\n cloneAsImage(options: ObjectToCanvasElementOptions): FabricImage {\n const canvasEl = this.toCanvasElement(options);\n // TODO: how to import Image w/o an import cycle?\n const ImageClass = classRegistry.getClass('image');\n return new ImageClass(canvasEl);\n }\n\n /**\n * Converts an object into a HTMLCanvas element\n * @param {ObjectToCanvasElementOptions} options Options object\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @param {Boolean} [options.viewportTransform] Account for canvas viewport transform\n * @param {(el?: HTMLCanvasElement) => StaticCanvas} [options.canvasProvider] Create the output canvas\n * @return {HTMLCanvasElement} Returns DOM element with the FabricObject\n */\n toCanvasElement(options: ObjectToCanvasElementOptions = {}) {\n const origParams = saveObjectTransform(this),\n originalGroup = this.group,\n originalShadow = this.shadow,\n abs = Math.abs,\n retinaScaling = options.enableRetinaScaling ? getDevicePixelRatio() : 1,\n multiplier = (options.multiplier || 1) * retinaScaling,\n canvasProvider: (el: HTMLCanvasElement) => StaticCanvas =\n options.canvasProvider ||\n ((el: HTMLCanvasElement) =>\n new StaticCanvas(el, {\n enableRetinaScaling: false,\n renderOnAddRemove: false,\n skipOffscreen: false,\n }));\n delete this.group;\n if (options.withoutTransform) {\n resetObjectTransform(this);\n }\n if (options.withoutShadow) {\n this.shadow = null;\n }\n if (options.viewportTransform) {\n sendObjectToPlane(this, this.getViewportTransform());\n }\n\n this.setCoords();\n const el = createCanvasElement(),\n boundingRect = this.getBoundingRect(),\n shadow = this.shadow,\n shadowOffset = new Point();\n\n if (shadow) {\n const shadowBlur = shadow.blur;\n const scaling = shadow.nonScaling\n ? new Point(1, 1)\n : this.getObjectScaling();\n // consider non scaling shadow.\n shadowOffset.x =\n 2 * Math.round(abs(shadow.offsetX) + shadowBlur) * abs(scaling.x);\n shadowOffset.y =\n 2 * Math.round(abs(shadow.offsetY) + shadowBlur) * abs(scaling.y);\n }\n const width = boundingRect.width + shadowOffset.x,\n height = boundingRect.height + shadowOffset.y;\n // if the current width/height is not an integer\n // we need to make it so.\n el.width = Math.ceil(width);\n el.height = Math.ceil(height);\n const canvas = canvasProvider(el);\n if (options.format === 'jpeg') {\n canvas.backgroundColor = '#fff';\n }\n this.setPositionByOrigin(\n new Point(canvas.width / 2, canvas.height / 2),\n CENTER,\n CENTER,\n );\n const originalCanvas = this.canvas;\n // static canvas and canvas have both an array of InteractiveObjects\n // @ts-expect-error this needs to be fixed somehow, or ignored globally\n canvas._objects = [this];\n this.set('canvas', canvas);\n this.setCoords();\n const canvasEl = canvas.toCanvasElement(multiplier || 1, options);\n this.set('canvas', originalCanvas);\n this.shadow = originalShadow;\n if (originalGroup) {\n this.group = originalGroup;\n }\n this.set(origParams);\n this.setCoords();\n // canvas.dispose will call image.dispose that will nullify the elements\n // since this canvas is a simple element for the process, we remove references\n // to objects in this way in order to avoid object trashing.\n canvas._objects = [];\n // since render has settled it is safe to destroy canvas\n canvas.destroy();\n return canvasEl;\n }\n\n /**\n * Converts an object into a data-url-like string\n * @param {Object} options Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n */\n toDataURL(options: toDataURLOptions = {}) {\n return toDataURL(\n this.toCanvasElement(options),\n options.format || 'png',\n options.quality || 1,\n );\n }\n\n /**\n * Returns true if any of the specified types is identical to the type of an instance\n * @param {String} type Type to check against\n * @return {Boolean}\n */\n isType(...types: string[]) {\n return (\n types.includes((this.constructor as typeof FabricObject).type) ||\n types.includes(this.type)\n );\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance (is 1 unless subclassed)\n */\n complexity() {\n return 1;\n }\n\n /**\n * Returns a JSON representation of an instance\n * @return {Object} JSON\n */\n toJSON() {\n // delegate, not alias\n return this.toObject();\n }\n\n /**\n * Sets \"angle\" of an instance with centered rotation\n * @param {TDegree} angle Angle value (in degrees)\n */\n rotate(angle: TDegree) {\n const { centeredRotation, originX, originY } = this;\n\n if (centeredRotation) {\n const { x, y } = this.getRelativeCenterPoint();\n this.originX = CENTER;\n this.originY = CENTER;\n this.left = x;\n this.top = y;\n }\n\n this.set('angle', angle);\n\n if (centeredRotation) {\n const { x, y } = this.translateToOriginPoint(\n this.getRelativeCenterPoint(),\n originX,\n originY,\n );\n this.left = x;\n this.top = y;\n this.originX = originX;\n this.originY = originY;\n }\n }\n\n /**\n * This callback function is called by the parent group of an object every\n * time a non-delegated property changes on the group. It is passed the key\n * and value as parameters. Not adding in this function's signature to avoid\n * Travis build error about unused variables.\n */\n setOnGroup() {\n // implemented by sub-classes, as needed.\n }\n\n /**\n * Sets canvas globalCompositeOperation for specific object\n * custom composition operation for the particular object can be specified using globalCompositeOperation property\n * @param {CanvasRenderingContext2D} ctx Rendering canvas context\n */\n _setupCompositeOperation(ctx: CanvasRenderingContext2D) {\n if (this.globalCompositeOperation) {\n ctx.globalCompositeOperation = this.globalCompositeOperation;\n }\n }\n\n /**\n * cancel instance's running animations\n * override if necessary to dispose artifacts such as `clipPath`\n */\n dispose() {\n runningAnimations.cancelByTarget(this);\n this.off();\n this._set('canvas', undefined);\n // clear caches\n this._cacheCanvas && getEnv().dispose(this._cacheCanvas);\n this._cacheCanvas = undefined;\n this._cacheContext = null;\n }\n\n // #region Animation methods\n /**\n * List of properties to consider for animating colors.\n * @type String[]\n */\n static colorProperties: string[] = [FILL, STROKE, 'backgroundColor'];\n\n /**\n * Animates object's properties\n * @param {Record} animatable map of keys and end values\n * @param {Partial>} options\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#animation}\n * @return {Record>} map of animation contexts\n *\n * As object — multiple properties\n *\n * object.animate({ left: ..., top: ... });\n * object.animate({ left: ..., top: ... }, { duration: ... });\n */\n animate(\n animatable: Record,\n options?: Partial>,\n ): Record> {\n return Object.entries(animatable).reduce(\n (acc, [key, endValue]) => {\n acc[key] = this._animate(key, endValue, options);\n return acc;\n },\n {} as Record>,\n );\n }\n\n /**\n * @private\n * @param {String} key Property to animate\n * @param {String} to Value to animate to\n * @param {Object} [options] Options object\n */\n _animate(\n key: string,\n endValue: T,\n options: Partial> = {},\n ): TAnimation {\n const path = key.split('.');\n const propIsColor = (\n this.constructor as typeof FabricObject\n ).colorProperties.includes(path[path.length - 1]);\n const { abort, startValue, onChange, onComplete } = options;\n const animationOptions = {\n ...options,\n target: this,\n // path.reduce... is the current value in case start value isn't provided\n startValue:\n startValue ?? path.reduce((deep: any, key) => deep[key], this),\n endValue,\n abort: abort?.bind(this),\n onChange: (\n value: number | number[] | string,\n valueProgress: number,\n durationProgress: number,\n ) => {\n path.reduce((deep: Record, key, index) => {\n if (index === path.length - 1) {\n deep[key] = value;\n }\n return deep[key];\n }, this);\n onChange &&\n // @ts-expect-error generic callback arg0 is wrong\n onChange(value, valueProgress, durationProgress);\n },\n onComplete: (\n value: number | number[] | string,\n valueProgress: number,\n durationProgress: number,\n ) => {\n this.setCoords();\n onComplete &&\n // @ts-expect-error generic callback arg0 is wrong\n onComplete(value, valueProgress, durationProgress);\n },\n } as AnimationOptions;\n\n return (\n propIsColor\n ? animateColor(animationOptions as ColorAnimationOptions)\n : animate(\n animationOptions as ValueAnimationOptions | ArrayAnimationOptions,\n )\n ) as TAnimation;\n }\n\n // #region Object stacking methods\n\n /**\n * A reference to the parent of the object\n * Used to keep the original parent ref when the object has been added to an ActiveSelection, hence loosing the `group` ref\n */\n declare parent?: Group;\n\n /**\n * Checks if object is descendant of target\n * Should be used instead of {@link Group.contains} or {@link StaticCanvas.contains} for performance reasons\n * @param {TAncestor} target\n * @returns {boolean}\n */\n isDescendantOf(target: TAncestor): boolean {\n const { parent, group } = this;\n return (\n parent === target ||\n group === target ||\n // walk up\n (!!parent && parent.isDescendantOf(target)) ||\n (!!group && group !== parent && group.isDescendantOf(target))\n );\n }\n\n /**\n * @returns {Ancestors} ancestors (excluding `ActiveSelection`) from bottom to top\n */\n getAncestors(): Ancestors {\n const ancestors: TAncestor[] = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let parent: TAncestor | undefined = this;\n do {\n parent = parent.parent;\n parent && ancestors.push(parent);\n } while (parent);\n return ancestors as Ancestors;\n }\n\n /**\n * Compare ancestors\n *\n * @param {StackedObject} other\n * @returns {AncestryComparison} an object that represent the ancestry situation.\n */\n findCommonAncestors(other: T): AncestryComparison {\n if (this === other) {\n return {\n fork: [],\n otherFork: [],\n common: [this, ...this.getAncestors()],\n } as AncestryComparison;\n }\n const ancestors = this.getAncestors();\n const otherAncestors = other.getAncestors();\n // if `this` has no ancestors and `this` is top ancestor of `other` we must handle the following case\n if (\n ancestors.length === 0 &&\n otherAncestors.length > 0 &&\n this === otherAncestors[otherAncestors.length - 1]\n ) {\n return {\n fork: [],\n otherFork: [\n other,\n ...otherAncestors.slice(0, otherAncestors.length - 1),\n ],\n common: [this],\n } as AncestryComparison;\n }\n // compare ancestors\n for (let i = 0, ancestor; i < ancestors.length; i++) {\n ancestor = ancestors[i];\n if (ancestor === other) {\n return {\n fork: [this, ...ancestors.slice(0, i)],\n otherFork: [],\n common: ancestors.slice(i),\n } as AncestryComparison;\n }\n for (let j = 0; j < otherAncestors.length; j++) {\n if (this === otherAncestors[j]) {\n return {\n fork: [],\n otherFork: [other, ...otherAncestors.slice(0, j)],\n common: [this, ...ancestors],\n } as AncestryComparison;\n }\n if (ancestor === otherAncestors[j]) {\n return {\n fork: [this, ...ancestors.slice(0, i)],\n otherFork: [other, ...otherAncestors.slice(0, j)],\n common: ancestors.slice(i),\n } as AncestryComparison;\n }\n }\n }\n // nothing shared\n return {\n fork: [this, ...ancestors],\n otherFork: [other, ...otherAncestors],\n common: [],\n } as AncestryComparison;\n }\n\n /**\n *\n * @param {StackedObject} other\n * @returns {boolean}\n */\n hasCommonAncestors(other: T): boolean {\n const commonAncestors = this.findCommonAncestors(other);\n return commonAncestors && !!commonAncestors.common.length;\n }\n\n /**\n *\n * @param {FabricObject} other object to compare against\n * @returns {boolean | undefined} if objects do not share a common ancestor or they are strictly equal it is impossible to determine which is in front of the other; in such cases the function returns `undefined`\n */\n isInFrontOf(other: T): boolean | undefined {\n if (this === other) {\n return undefined;\n }\n const ancestorData = this.findCommonAncestors(other);\n\n if (ancestorData.fork.includes(other as any)) {\n return true;\n }\n if (ancestorData.otherFork.includes(this as any)) {\n return false;\n }\n // if there isn't a common ancestor, we take the canvas.\n // if there is no canvas, there is nothing to compare\n const firstCommonAncestor = ancestorData.common[0] || this.canvas;\n if (!firstCommonAncestor) {\n return undefined;\n }\n const headOfFork = ancestorData.fork.pop(),\n headOfOtherFork = ancestorData.otherFork.pop(),\n thisIndex = (firstCommonAncestor as TCollection)._objects.indexOf(\n headOfFork as any,\n ),\n otherIndex = (firstCommonAncestor as TCollection)._objects.indexOf(\n headOfOtherFork as any,\n );\n return thisIndex > -1 && thisIndex > otherIndex;\n }\n\n // #region Serialization\n /**\n * Define a list of custom properties that will be serialized when\n * instance.toObject() gets called\n */\n static customProperties: string[] = [];\n\n /**\n * Returns an object representation of an instance\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject(propertiesToInclude: any[] = []): any {\n const propertiesToSerialize = propertiesToInclude.concat(\n FabricObject.customProperties,\n (this.constructor as typeof FabricObject).customProperties || [],\n );\n let clipPathData: Partial | undefined;\n const NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n const {\n clipPath,\n fill,\n stroke,\n shadow,\n strokeDashArray,\n left,\n top,\n originX,\n originY,\n width,\n height,\n strokeWidth,\n strokeLineCap,\n strokeDashOffset,\n strokeLineJoin,\n strokeUniform,\n strokeMiterLimit,\n scaleX,\n scaleY,\n angle,\n flipX,\n flipY,\n opacity,\n visible,\n backgroundColor,\n fillRule,\n paintFirst,\n globalCompositeOperation,\n skewX,\n skewY,\n } = this;\n if (clipPath && !clipPath.excludeFromExport) {\n clipPathData = clipPath.toObject(\n propertiesToSerialize.concat('inverted', 'absolutePositioned'),\n );\n }\n const toFixedBound = (val: number) => toFixed(val, NUM_FRACTION_DIGITS);\n const object = {\n ...pick(this, propertiesToSerialize as (keyof this)[]),\n type: (this.constructor as typeof FabricObject).type,\n version: VERSION,\n originX,\n originY,\n left: toFixedBound(left),\n top: toFixedBound(top),\n width: toFixedBound(width),\n height: toFixedBound(height),\n fill: isSerializableFiller(fill) ? fill.toObject() : fill,\n stroke: isSerializableFiller(stroke) ? stroke.toObject() : stroke,\n strokeWidth: toFixedBound(strokeWidth),\n strokeDashArray: strokeDashArray\n ? strokeDashArray.concat()\n : strokeDashArray,\n strokeLineCap,\n strokeDashOffset,\n strokeLineJoin,\n strokeUniform,\n strokeMiterLimit: toFixedBound(strokeMiterLimit),\n scaleX: toFixedBound(scaleX),\n scaleY: toFixedBound(scaleY),\n angle: toFixedBound(angle),\n flipX,\n flipY,\n opacity: toFixedBound(opacity),\n shadow: shadow ? shadow.toObject() : shadow,\n visible,\n backgroundColor,\n fillRule,\n paintFirst,\n globalCompositeOperation,\n skewX: toFixedBound(skewX),\n skewY: toFixedBound(skewY),\n ...(clipPathData ? { clipPath: clipPathData } : null),\n };\n\n return !this.includeDefaultValues\n ? this._removeDefaultValues(object)\n : object;\n }\n\n /**\n * Returns (dataless) object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toDatalessObject(propertiesToInclude?: any[]): any {\n // will be overwritten by subclasses\n return this.toObject(propertiesToInclude);\n }\n\n /**\n * @private\n * @param {Object} object\n */\n _removeDefaultValues(object: T): Partial {\n // getDefaults() ( get from static ownDefaults ) should win over prototype since anyway they get assigned to instance\n // ownDefault vs prototype is swappable only if you change all the fabric objects consistently.\n const defaults = (this.constructor as typeof FabricObject).getDefaults();\n const hasStaticDefaultValues = Object.keys(defaults).length > 0;\n const baseValues = hasStaticDefaultValues\n ? defaults\n : Object.getPrototypeOf(this);\n\n return pickBy(object, (value, key) => {\n if (key === LEFT || key === TOP || key === 'type') {\n return true;\n }\n const baseValue = baseValues[key];\n return (\n value !== baseValue &&\n // basically a check for [] === []\n !(\n Array.isArray(value) &&\n Array.isArray(baseValue) &&\n value.length === 0 &&\n baseValue.length === 0\n )\n );\n });\n }\n\n /**\n * Returns a string representation of an instance\n * @return {String}\n */\n toString() {\n return `#<${(this.constructor as typeof FabricObject).type}>`;\n }\n\n /**\n *\n * @param {Function} klass\n * @param {object} object\n * @param {object} [options]\n * @param {string} [options.extraParam] property to pass as first argument to the constructor\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static _fromObject(\n { type, ...serializedObjectOptions }: Record,\n { extraParam, ...options }: Abortable & { extraParam?: string } = {},\n ): Promise {\n return enlivenObjectEnlivables(serializedObjectOptions, options).then(\n (enlivedObjectOptions) => {\n // from the resulting enlived options, extract options.extraParam to arg0\n // to avoid accidental overrides later\n if (extraParam) {\n delete enlivedObjectOptions[extraParam];\n return new this(\n serializedObjectOptions[extraParam],\n // @ts-expect-error different signature\n enlivedObjectOptions,\n );\n } else {\n return new this(enlivedObjectOptions);\n }\n },\n ) as Promise;\n }\n\n /**\n *\n * @param {object} object\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static fromObject>(\n object: T,\n options?: Abortable,\n ) {\n return this._fromObject(object, options);\n }\n}\n\nclassRegistry.setClass(FabricObject);\nclassRegistry.setClass(FabricObject, 'object');\n","import type {\n TModificationEvents,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo } from './util';\n\n/**\n * Wrap an action handler with firing an event if the action is performed\n * @param {TModificationEvents} eventName the event we want to fire\n * @param {TransformActionHandler} actionHandler the function to wrap\n * @param {object} extraEventInfo extra information to pas to the event handler\n * @return {TransformActionHandler} a function with an action handler signature\n */\nexport const wrapWithFireEvent = <\n T extends Transform,\n P extends object = Record,\n>(\n eventName: TModificationEvents,\n actionHandler: TransformActionHandler,\n extraEventInfo?: P,\n) => {\n return ((eventData, transform, x, y) => {\n const actionPerformed = actionHandler(eventData, transform, x, y);\n if (actionPerformed) {\n fireEvent(eventName, {\n ...commonEventInfo(eventData, transform, x, y),\n ...extraEventInfo,\n });\n }\n return actionPerformed;\n }) as TransformActionHandler;\n};\n","import type { Transform, TransformActionHandler } from '../EventTypeDefs';\n\n/**\n * Wrap an action handler with saving/restoring object position on the transform.\n * this is the code that permits to objects to keep their position while transforming.\n * @param {Function} actionHandler the function to wrap\n * @return {Function} a function with an action handler signature\n */\nexport function wrapWithFixedAnchor(\n actionHandler: TransformActionHandler,\n) {\n return ((eventData, transform, x, y) => {\n const { target, originX, originY } = transform,\n centerPoint = target.getRelativeCenterPoint(),\n constraint = target.translateToOriginPoint(centerPoint, originX, originY),\n actionPerformed = actionHandler(eventData, transform, x, y);\n // flipping requires to change the transform origin, so we read from the mutated transform\n // instead of leveraging the one destructured before\n target.setPositionByOrigin(\n constraint,\n transform.originX,\n transform.originY,\n );\n return actionPerformed;\n }) as TransformActionHandler;\n}\n","import type { TransformActionHandler } from '../EventTypeDefs';\nimport { CENTER, LEFT, RESIZING, RIGHT } from '../constants';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { getLocalPoint, isTransformCentered } from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\n\n/**\n * Action handler to change object's width\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const changeObjectWidth: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const localPoint = getLocalPoint(\n transform,\n transform.originX,\n transform.originY,\n x,\n y,\n );\n // make sure the control changes width ONLY from it's side of target\n if (\n resolveOrigin(transform.originX) === resolveOrigin(CENTER) ||\n (resolveOrigin(transform.originX) === resolveOrigin(RIGHT) &&\n localPoint.x < 0) ||\n (resolveOrigin(transform.originX) === resolveOrigin(LEFT) &&\n localPoint.x > 0)\n ) {\n const { target } = transform,\n strokePadding =\n target.strokeWidth / (target.strokeUniform ? target.scaleX : 1),\n multiplier = isTransformCentered(transform) ? 2 : 1,\n oldWidth = target.width,\n newWidth =\n Math.abs((localPoint.x * multiplier) / target.scaleX) - strokePadding;\n target.set('width', Math.max(newWidth, 1));\n // check against actual target width in case `newWidth` was rejected\n return oldWidth !== target.width;\n }\n return false;\n};\n\nexport const changeWidth = wrapWithFireEvent(\n RESIZING,\n wrapWithFixedAnchor(changeObjectWidth),\n);\n","import { FILL, STROKE, twoMathPi } from '../constants';\nimport type { InteractiveFabricObject } from '../shapes/Object/InteractiveObject';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport type { Control } from './Control';\n\nexport type ControlRenderingStyleOverride = Partial<\n Pick<\n InteractiveFabricObject,\n | 'cornerStyle'\n | 'cornerSize'\n | 'cornerColor'\n | 'cornerStrokeColor'\n | 'cornerDashArray'\n | 'transparentCorners'\n >\n>;\n\nexport type ControlRenderer<\n O extends InteractiveFabricObject = InteractiveFabricObject,\n> = (\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: O,\n) => void;\n\n/**\n * Render a round control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for FabricObject controls style\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n */\nexport function renderCircleControl(\n this: Control,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: InteractiveFabricObject,\n) {\n styleOverride = styleOverride || {};\n const xSize =\n this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners =\n typeof styleOverride.transparentCorners !== 'undefined'\n ? styleOverride.transparentCorners\n : fabricObject.transparentCorners,\n methodName = transparentCorners ? STROKE : FILL,\n stroke =\n !transparentCorners &&\n (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor);\n let myLeft = left,\n myTop = top,\n size;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor || '';\n ctx.strokeStyle =\n styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor || '';\n // TODO: use proper ellipse code.\n if (xSize > ySize) {\n size = xSize;\n ctx.scale(1.0, ySize / xSize);\n myTop = (top * xSize) / ySize;\n } else if (ySize > xSize) {\n size = ySize;\n ctx.scale(xSize / ySize, 1.0);\n myLeft = (left * ySize) / xSize;\n } else {\n size = xSize;\n }\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.arc(myLeft, myTop, size / 2, 0, twoMathPi, false);\n ctx[methodName]();\n if (stroke) {\n ctx.stroke();\n }\n ctx.restore();\n}\n\n/**\n * Render a square control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for FabricObject controls style\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n */\nexport function renderSquareControl(\n this: Control,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: InteractiveFabricObject,\n) {\n styleOverride = styleOverride || {};\n const xSize =\n this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners =\n typeof styleOverride.transparentCorners !== 'undefined'\n ? styleOverride.transparentCorners\n : fabricObject.transparentCorners,\n methodName = transparentCorners ? STROKE : FILL,\n stroke =\n !transparentCorners &&\n (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor),\n xSizeBy2 = xSize / 2,\n ySizeBy2 = ySize / 2;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor || '';\n ctx.strokeStyle =\n styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor || '';\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.translate(left, top);\n // angle is relative to canvas plane\n const angle = fabricObject.getTotalAngle();\n ctx.rotate(degreesToRadians(angle));\n // this does not work, and fixed with ( && ) does not make sense.\n // to have real transparent corners we need the controls on upperCanvas\n // transparentCorners || ctx.clearRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n ctx[`${methodName}Rect`](-xSizeBy2, -ySizeBy2, xSize, ySize);\n if (stroke) {\n ctx.strokeRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n }\n ctx.restore();\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type {\n ControlActionHandler,\n TPointerEvent,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { Intersection } from '../Intersection';\nimport { Point } from '../Point';\nimport { SCALE } from '../constants';\nimport type { InteractiveFabricObject } from '../shapes/Object/InteractiveObject';\nimport type { TCornerPoint, TDegree, TMat2D } from '../typedefs';\nimport {\n createRotateMatrix,\n createScaleMatrix,\n createTranslateMatrix,\n multiplyTransformMatrixArray,\n} from '../util/misc/matrix';\nimport type { ControlRenderingStyleOverride } from './controlRendering';\nimport { renderCircleControl, renderSquareControl } from './controlRendering';\n\nexport class Control {\n /**\n * keep track of control visibility.\n * mainly for backward compatibility.\n * if you do not want to see a control, you can remove it\n * from the control set.\n * @type {Boolean}\n * @default true\n */\n visible = true;\n\n /**\n * Name of the action that the control will likely execute.\n * This is optional. FabricJS uses to identify what the user is doing for some\n * extra optimizations. If you are writing a custom control and you want to know\n * somewhere else in the code what is going on, you can use this string here.\n * you can also provide a custom getActionName if your control run multiple actions\n * depending on some external state.\n * default to scale since is the most common, used on 4 corners by default\n * @type {String}\n * @default 'scale'\n */\n actionName = SCALE;\n\n /**\n * Drawing angle of the control.\n * NOT used for now, but name marked as needed for internal logic\n * example: to reuse the same drawing function for different rotated controls\n * @type {Number}\n * @default 0\n */\n angle = 0;\n\n /**\n * Relative position of the control. X\n * 0,0 is the center of the Object, while -0.5 (left) or 0.5 (right) are the extremities\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n x = 0;\n\n /**\n * Relative position of the control. Y\n * 0,0 is the center of the Object, while -0.5 (top) or 0.5 (bottom) are the extremities\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n y = 0;\n\n /**\n * Horizontal offset of the control from the defined position. In pixels\n * Positive offset moves the control to the right, negative to the left.\n * It used when you want to have position of control that does not scale with\n * the bounding box. Example: rotation control is placed at x:0, y: 0.5 on\n * the boundind box, with an offset of 30 pixels vertically. Those 30 pixels will\n * stay 30 pixels no matter how the object is big. Another example is having 2\n * controls in the corner, that stay in the same position when the object scale.\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n offsetX = 0;\n\n /**\n * Vertical offset of the control from the defined position. In pixels\n * Positive offset moves the control to the bottom, negative to the top.\n * @type {Number}\n * @default 0\n */\n offsetY = 0;\n\n /**\n * Sets the length of the control. If null, defaults to object's cornerSize.\n * Expects both sizeX and sizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n sizeX = 0;\n\n /**\n * Sets the height of the control. If null, defaults to object's cornerSize.\n * Expects both sizeX and sizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n sizeY = 0;\n\n /**\n * Sets the length of the touch area of the control. If null, defaults to object's touchCornerSize.\n * Expects both touchSizeX and touchSizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n touchSizeX = 0;\n\n /**\n * Sets the height of the touch area of the control. If null, defaults to object's touchCornerSize.\n * Expects both touchSizeX and touchSizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n touchSizeY = 0;\n\n /**\n * Css cursor style to display when the control is hovered.\n * if the method `cursorStyleHandler` is provided, this property is ignored.\n * @type {String}\n * @default 'crosshair'\n */\n cursorStyle = 'crosshair';\n\n /**\n * If controls has an offsetY or offsetX, draw a line that connects\n * the control to the bounding box\n * @type {Boolean}\n * @default false\n */\n withConnection = false;\n\n constructor(options?: Partial) {\n Object.assign(this, options);\n }\n\n /**\n * The control actionHandler, provide one to handle action ( control being moved )\n * @param {Event} eventData the native mouse event\n * @param {Transform} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n declare actionHandler: TransformActionHandler;\n\n /**\n * The control handler for mouse down, provide one to handle mouse down on control\n * @param {Event} eventData the native mouse event\n * @param {Transform} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n declare mouseDownHandler?: ControlActionHandler;\n\n /**\n * The control mouseUpHandler, provide one to handle an effect on mouse up.\n * @param {Event} eventData the native mouse event\n * @param {Transform} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n declare mouseUpHandler?: ControlActionHandler;\n\n shouldActivate(\n controlKey: string,\n fabricObject: InteractiveFabricObject,\n pointer: Point,\n { tl, tr, br, bl }: TCornerPoint,\n ) {\n // TODO: locking logic can be handled here instead of in the control handler logic\n return (\n fabricObject.canvas?.getActiveObject() === fabricObject &&\n fabricObject.isControlVisible(controlKey) &&\n Intersection.isPointInPolygon(pointer, [tl, tr, br, bl])\n );\n }\n\n /**\n * Returns control actionHandler\n * @param {Event} eventData the native mouse event\n * @param {FabricObject} fabricObject on which the control is displayed\n * @param {Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getActionHandler(\n eventData: TPointerEvent,\n fabricObject: InteractiveFabricObject,\n control: Control,\n ): TransformActionHandler | undefined {\n return this.actionHandler;\n }\n\n /**\n * Returns control mouseDown handler\n * @param {Event} eventData the native mouse event\n * @param {FabricObject} fabricObject on which the control is displayed\n * @param {Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getMouseDownHandler(\n eventData: TPointerEvent,\n fabricObject: InteractiveFabricObject,\n control: Control,\n ): ControlActionHandler | undefined {\n return this.mouseDownHandler;\n }\n\n /**\n * Returns control mouseUp handler.\n * During actions the fabricObject or the control can be of different obj\n * @param {Event} eventData the native mouse event\n * @param {FabricObject} fabricObject on which the control is displayed\n * @param {Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getMouseUpHandler(\n eventData: TPointerEvent,\n fabricObject: InteractiveFabricObject,\n control: Control,\n ): ControlActionHandler | undefined {\n return this.mouseUpHandler;\n }\n\n /**\n * Returns control cursorStyle for css using cursorStyle. If you need a more elaborate\n * function you can pass one in the constructor\n * the cursorStyle property\n * @param {Event} eventData the native mouse event\n * @param {Control} control the current control ( likely this)\n * @param {FabricObject} object on which the control is displayed\n * @return {String}\n */\n cursorStyleHandler(\n eventData: TPointerEvent,\n control: Control,\n fabricObject: InteractiveFabricObject,\n ) {\n return control.cursorStyle;\n }\n\n /**\n * Returns the action name. The basic implementation just return the actionName property.\n * @param {Event} eventData the native mouse event\n * @param {Control} control the current control ( likely this)\n * @param {FabricObject} object on which the control is displayed\n * @return {String}\n */\n getActionName(\n eventData: TPointerEvent,\n control: Control,\n fabricObject: InteractiveFabricObject,\n ) {\n return control.actionName;\n }\n\n /**\n * Returns controls visibility\n * @param {FabricObject} object on which the control is displayed\n * @param {String} controlKey key where the control is memorized on the\n * @return {Boolean}\n */\n getVisibility(fabricObject: InteractiveFabricObject, controlKey: string) {\n return fabricObject._controlsVisibility?.[controlKey] ?? this.visible;\n }\n\n /**\n * Sets controls visibility\n * @param {Boolean} visibility for the object\n * @return {Void}\n */\n setVisibility(\n visibility: boolean,\n name: string,\n fabricObject: InteractiveFabricObject,\n ) {\n this.visible = visibility;\n }\n\n positionHandler(\n dim: Point,\n finalMatrix: TMat2D,\n fabricObject: InteractiveFabricObject,\n currentControl: Control,\n ) {\n return new Point(\n this.x * dim.x + this.offsetX,\n this.y * dim.y + this.offsetY,\n ).transform(finalMatrix);\n }\n\n /**\n * Returns the coords for this control based on object values.\n * @param {Number} objectAngle angle from the fabric object holding the control\n * @param {Number} objectCornerSize cornerSize from the fabric object holding the control (or touchCornerSize if\n * isTouch is true)\n * @param {Number} centerX x coordinate where the control center should be\n * @param {Number} centerY y coordinate where the control center should be\n * @param {boolean} isTouch true if touch corner, false if normal corner\n */\n calcCornerCoords(\n angle: TDegree,\n objectCornerSize: number,\n centerX: number,\n centerY: number,\n isTouch: boolean,\n fabricObject: InteractiveFabricObject,\n ) {\n const t = multiplyTransformMatrixArray([\n createTranslateMatrix(centerX, centerY),\n createRotateMatrix({ angle }),\n createScaleMatrix(\n (isTouch ? this.touchSizeX : this.sizeX) || objectCornerSize,\n (isTouch ? this.touchSizeY : this.sizeY) || objectCornerSize,\n ),\n ]);\n return {\n tl: new Point(-0.5, -0.5).transform(t),\n tr: new Point(0.5, -0.5).transform(t),\n br: new Point(0.5, 0.5).transform(t),\n bl: new Point(-0.5, 0.5).transform(t),\n };\n }\n\n /**\n * Render function for the control.\n * When this function runs the context is unscaled. unrotate. Just retina scaled.\n * all the functions will have to translate to the point left,top before starting Drawing\n * if they want to draw a control where the position is detected.\n * left and top are the result of the positionHandler function\n * @param {RenderingContext2D} ctx the context where the control will be drawn\n * @param {Number} left position of the canvas where we are about to render the control.\n * @param {Number} top position of the canvas where we are about to render the control.\n * @param {Object} styleOverride\n * @param {FabricObject} fabricObject the object where the control is about to be rendered\n */\n render(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: InteractiveFabricObject,\n ) {\n styleOverride = styleOverride || {};\n switch (styleOverride.cornerStyle || fabricObject.cornerStyle) {\n case 'circle':\n renderCircleControl.call(\n this,\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n );\n break;\n default:\n renderSquareControl.call(\n this,\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n );\n }\n }\n}\n","import type {\n ControlCursorCallback,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { ROTATING } from '../constants';\nimport { radiansToDegrees } from '../util/misc/radiansDegreesConversion';\nimport { isLocked, NOT_ALLOWED_CURSOR } from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\n\n/**\n * Find the correct style for the control that is used for rotation.\n * this function is very simple and it just take care of not-allowed or standard cursor\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const rotationStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n if (fabricObject.lockRotation) {\n return NOT_ALLOWED_CURSOR;\n }\n return control.cursorStyle;\n};\n\n/**\n * Action handler for rotation and snapping, without anchor point.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n * @private\n */\nconst rotateObjectWithSnapping: TransformActionHandler = (\n eventData,\n { target, ex, ey, theta, originX, originY },\n x,\n y,\n) => {\n const pivotPoint = target.translateToOriginPoint(\n target.getRelativeCenterPoint(),\n originX,\n originY,\n );\n\n if (isLocked(target, 'lockRotation')) {\n return false;\n }\n\n const lastAngle = Math.atan2(ey - pivotPoint.y, ex - pivotPoint.x),\n curAngle = Math.atan2(y - pivotPoint.y, x - pivotPoint.x);\n let angle = radiansToDegrees(curAngle - lastAngle + theta);\n\n if (target.snapAngle && target.snapAngle > 0) {\n const snapAngle = target.snapAngle,\n snapThreshold = target.snapThreshold || snapAngle,\n rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle,\n leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle;\n\n if (Math.abs(angle - leftAngleLocked) < snapThreshold) {\n angle = leftAngleLocked;\n } else if (Math.abs(angle - rightAngleLocked) < snapThreshold) {\n angle = rightAngleLocked;\n }\n }\n\n // normalize angle to positive value\n if (angle < 0) {\n angle = 360 + angle;\n }\n angle %= 360;\n\n const hasRotated = target.angle !== angle;\n // TODO: why aren't we using set?\n target.angle = angle;\n return hasRotated;\n};\n\nexport const rotationWithSnapping = wrapWithFireEvent(\n ROTATING,\n wrapWithFixedAnchor(rotateObjectWithSnapping),\n);\n","import type {\n ControlCursorCallback,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TAxis } from '../typedefs';\nimport type { Canvas } from '../canvas/Canvas';\nimport {\n findCornerQuadrant,\n getLocalPoint,\n invertOrigin,\n isLocked,\n isTransformCentered,\n NOT_ALLOWED_CURSOR,\n} from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\nimport { SCALE_X, SCALE_Y, SCALING } from '../constants';\n\ntype ScaleTransform = Transform & {\n gestureScale?: number;\n signX?: number;\n signY?: number;\n};\n\ntype ScaleBy = TAxis | 'equally' | '' | undefined;\n\n/**\n * Inspect event and fabricObject properties to understand if the scaling action\n * @param {Event} eventData from the user action\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @return {Boolean} true if scale is proportional\n */\nexport function scaleIsProportional(\n eventData: TPointerEvent,\n fabricObject: FabricObject,\n): boolean {\n const canvas = fabricObject.canvas as Canvas,\n uniformIsToggled = eventData[canvas.uniScaleKey!];\n return (\n (canvas.uniformScaling && !uniformIsToggled) ||\n (!canvas.uniformScaling && uniformIsToggled)\n );\n}\n\n/**\n * Inspect fabricObject to understand if the current scaling action is allowed\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @param {String} by 'x' or 'y' or ''\n * @param {Boolean} scaleProportionally true if we are trying to scale proportionally\n * @return {Boolean} true if scaling is not allowed at current conditions\n */\nexport function scalingIsForbidden(\n fabricObject: FabricObject,\n by: ScaleBy,\n scaleProportionally: boolean,\n) {\n const lockX = isLocked(fabricObject, 'lockScalingX'),\n lockY = isLocked(fabricObject, 'lockScalingY');\n if (lockX && lockY) {\n return true;\n }\n if (!by && (lockX || lockY) && scaleProportionally) {\n return true;\n }\n if (lockX && by === 'x') {\n return true;\n }\n if (lockY && by === 'y') {\n return true;\n }\n // code crashes because of a division by 0 if a 0 sized object is scaled\n // forbid to prevent scaling to happen. ISSUE-9475\n const { width, height, strokeWidth } = fabricObject;\n if (width === 0 && strokeWidth === 0 && by !== 'y') {\n return true;\n }\n if (height === 0 && strokeWidth === 0 && by !== 'x') {\n return true;\n }\n return false;\n}\n\nconst scaleMap = ['e', 'se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'];\n\n/**\n * return the correct cursor style for the scale action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const scaleCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n const scaleProportionally = scaleIsProportional(eventData, fabricObject),\n by =\n control.x !== 0 && control.y === 0\n ? 'x'\n : control.x === 0 && control.y !== 0\n ? 'y'\n : '';\n if (scalingIsForbidden(fabricObject, by, scaleProportionally)) {\n return NOT_ALLOWED_CURSOR;\n }\n const n = findCornerQuadrant(fabricObject, control);\n return `${scaleMap[n]}-resize`;\n};\n\n/**\n * Basic scaling logic, reused with different constrain for scaling X,Y, freely or equally.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @param {Object} options additional information for scaling\n * @param {String} options.by 'x', 'y', 'equally' or '' to indicate type of scaling\n * @return {Boolean} true if some change happened\n * @private\n */\nfunction scaleObject(\n eventData: TPointerEvent,\n transform: ScaleTransform,\n x: number,\n y: number,\n options: { by?: ScaleBy } = {},\n) {\n const target = transform.target,\n by = options.by,\n scaleProportionally = scaleIsProportional(eventData, target),\n forbidScaling = scalingIsForbidden(target, by, scaleProportionally);\n let newPoint, scaleX, scaleY, dim, signX, signY;\n\n if (forbidScaling) {\n return false;\n }\n if (transform.gestureScale) {\n scaleX = transform.scaleX * transform.gestureScale;\n scaleY = transform.scaleY * transform.gestureScale;\n } else {\n newPoint = getLocalPoint(\n transform,\n transform.originX,\n transform.originY,\n x,\n y,\n );\n // use of sign: We use sign to detect change of direction of an action. sign usually change when\n // we cross the origin point with the mouse. So a scale flip for example. There is an issue when scaling\n // by center and scaling using one middle control ( default: mr, mt, ml, mb), the mouse movement can easily\n // cross many time the origin point and flip the object. so we need a way to filter out the noise.\n // This ternary here should be ok to filter out X scaling when we want Y only and vice versa.\n signX = by !== 'y' ? Math.sign(newPoint.x || transform.signX || 1) : 1;\n signY = by !== 'x' ? Math.sign(newPoint.y || transform.signY || 1) : 1;\n if (!transform.signX) {\n transform.signX = signX;\n }\n if (!transform.signY) {\n transform.signY = signY;\n }\n\n if (\n isLocked(target, 'lockScalingFlip') &&\n (transform.signX !== signX || transform.signY !== signY)\n ) {\n return false;\n }\n\n dim = target._getTransformedDimensions();\n // missing detection of flip and logic to switch the origin\n if (scaleProportionally && !by) {\n // uniform scaling\n const distance = Math.abs(newPoint.x) + Math.abs(newPoint.y),\n { original } = transform,\n originalDistance =\n Math.abs((dim.x * original.scaleX) / target.scaleX) +\n Math.abs((dim.y * original.scaleY) / target.scaleY),\n scale = distance / originalDistance;\n scaleX = original.scaleX * scale;\n scaleY = original.scaleY * scale;\n } else {\n scaleX = Math.abs((newPoint.x * target.scaleX) / dim.x);\n scaleY = Math.abs((newPoint.y * target.scaleY) / dim.y);\n }\n // if we are scaling by center, we need to double the scale\n if (isTransformCentered(transform)) {\n scaleX *= 2;\n scaleY *= 2;\n }\n if (transform.signX !== signX && by !== 'y') {\n transform.originX = invertOrigin(transform.originX);\n scaleX *= -1;\n transform.signX = signX;\n }\n if (transform.signY !== signY && by !== 'x') {\n transform.originY = invertOrigin(transform.originY);\n scaleY *= -1;\n transform.signY = signY;\n }\n }\n // minScale is taken care of in the setter.\n const oldScaleX = target.scaleX,\n oldScaleY = target.scaleY;\n if (!by) {\n !isLocked(target, 'lockScalingX') && target.set(SCALE_X, scaleX);\n !isLocked(target, 'lockScalingY') && target.set(SCALE_Y, scaleY);\n } else {\n // forbidden cases already handled on top here.\n by === 'x' && target.set(SCALE_X, scaleX);\n by === 'y' && target.set(SCALE_Y, scaleY);\n }\n return oldScaleX !== target.scaleX || oldScaleY !== target.scaleY;\n}\n\n/**\n * Generic scaling logic, to scale from corners either equally or freely.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scaleObjectFromCorner: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y);\n};\n\n/**\n * Scaling logic for the X axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'x' });\n};\n\n/**\n * Scaling logic for the Y axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'y' });\n};\n\nexport const scalingEqually = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectFromCorner),\n);\n\nexport const scalingX = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectX),\n);\n\nexport const scalingY = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectY),\n);\n","import type {\n ControlCursorCallback,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { Point } from '../Point';\nimport type { TAxis, TAxisKey } from '../typedefs';\nimport {\n degreesToRadians,\n radiansToDegrees,\n} from '../util/misc/radiansDegreesConversion';\nimport {\n findCornerQuadrant,\n getLocalPoint,\n isLocked,\n NOT_ALLOWED_CURSOR,\n} from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\nimport {\n CENTER,\n SCALE_X,\n SCALE_Y,\n SKEWING,\n SKEW_X,\n SKEW_Y,\n} from '../constants';\n\nexport type SkewTransform = Transform & { skewingSide: -1 | 1 };\n\nconst AXIS_KEYS: Record<\n TAxis,\n {\n counterAxis: TAxis;\n scale: TAxisKey<'scale'>;\n skew: TAxisKey<'skew'>;\n lockSkewing: TAxisKey<'lockSkewing'>;\n origin: TAxisKey<'origin'>;\n flip: TAxisKey<'flip'>;\n }\n> = {\n x: {\n counterAxis: 'y',\n scale: SCALE_X,\n skew: SKEW_X,\n lockSkewing: 'lockSkewingX',\n origin: 'originX',\n flip: 'flipX',\n },\n y: {\n counterAxis: 'x',\n scale: SCALE_Y,\n skew: SKEW_Y,\n lockSkewing: 'lockSkewingY',\n origin: 'originY',\n flip: 'flipY',\n },\n};\n\nconst skewMap = ['ns', 'nesw', 'ew', 'nwse'];\n\n/**\n * return the correct cursor style for the skew action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const skewCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n if (control.x !== 0 && isLocked(fabricObject, 'lockSkewingY')) {\n return NOT_ALLOWED_CURSOR;\n }\n if (control.y !== 0 && isLocked(fabricObject, 'lockSkewingX')) {\n return NOT_ALLOWED_CURSOR;\n }\n const n = findCornerQuadrant(fabricObject, control) % 4;\n return `${skewMap[n]}-resize`;\n};\n\n/**\n * Since skewing is applied before scaling, calculations are done in a scaleless plane\n * @see https://github.com/fabricjs/fabric.js/pull/8380\n */\nfunction skewObject(\n axis: TAxis,\n { target, ex, ey, skewingSide, ...transform }: SkewTransform,\n pointer: Point,\n) {\n const { skew: skewKey } = AXIS_KEYS[axis],\n offset = pointer\n .subtract(new Point(ex, ey))\n .divide(new Point(target.scaleX, target.scaleY))[axis],\n skewingBefore = target[skewKey],\n skewingStart = transform[skewKey],\n shearingStart = Math.tan(degreesToRadians(skewingStart)),\n // let a, b be the size of target\n // let a' be the value of a after applying skewing\n // then:\n // a' = a + b * skewA => skewA = (a' - a) / b\n // the value b is tricky since skewY is applied before skewX\n b =\n axis === 'y'\n ? target._getTransformedDimensions({\n scaleX: 1,\n scaleY: 1,\n // since skewY is applied before skewX, b (=width) is not affected by skewX\n skewX: 0,\n }).x\n : target._getTransformedDimensions({\n scaleX: 1,\n scaleY: 1,\n }).y;\n\n const shearing =\n (2 * offset * skewingSide) /\n // we max out fractions to safeguard from asymptotic behavior\n Math.max(b, 1) +\n // add starting state\n shearingStart;\n\n const skewing = radiansToDegrees(Math.atan(shearing));\n\n target.set(skewKey, skewing);\n const changed = skewingBefore !== target[skewKey];\n\n if (changed && axis === 'y') {\n // we don't want skewing to affect scaleX\n // so we factor it by the inverse skewing diff to make it seem unchanged to the viewer\n const { skewX, scaleX } = target,\n dimBefore = target._getTransformedDimensions({ skewY: skewingBefore }),\n dimAfter = target._getTransformedDimensions(),\n compensationFactor = skewX !== 0 ? dimBefore.x / dimAfter.x : 1;\n compensationFactor !== 1 &&\n target.set(SCALE_X, compensationFactor * scaleX);\n }\n\n return changed;\n}\n\n/**\n * Wrapped Action handler for skewing on a given axis, takes care of the\n * skew direction and determines the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nfunction skewHandler(\n axis: TAxis,\n eventData: TPointerEvent,\n transform: Transform,\n x: number,\n y: number,\n) {\n const { target } = transform,\n {\n counterAxis,\n origin: originKey,\n lockSkewing: lockSkewingKey,\n skew: skewKey,\n flip: flipKey,\n } = AXIS_KEYS[axis];\n if (isLocked(target, lockSkewingKey)) {\n return false;\n }\n\n const { origin: counterOriginKey, flip: counterFlipKey } =\n AXIS_KEYS[counterAxis],\n counterOriginFactor =\n resolveOrigin(transform[counterOriginKey]) *\n (target[counterFlipKey] ? -1 : 1),\n // if the counter origin is top/left (= -0.5) then we are skewing x/y values on the bottom/right side of target respectively.\n // if the counter origin is bottom/right (= 0.5) then we are skewing x/y values on the top/left side of target respectively.\n // skewing direction on the top/left side of target is OPPOSITE to the direction of the movement of the pointer,\n // so we factor skewing direction by this value.\n skewingSide = (-Math.sign(counterOriginFactor) *\n (target[flipKey] ? -1 : 1)) as 1 | -1,\n skewingDirection =\n ((target[skewKey] === 0 &&\n // in case skewing equals 0 we use the pointer offset from target center to determine the direction of skewing\n getLocalPoint(transform, CENTER, CENTER, x, y)[axis] > 0) ||\n // in case target has skewing we use that as the direction\n target[skewKey] > 0\n ? 1\n : -1) * skewingSide,\n // anchor to the opposite side of the skewing direction\n // normalize value from [-1, 1] to origin value [0, 1]\n origin = -skewingDirection * 0.5 + 0.5;\n\n const finalHandler = wrapWithFireEvent(\n SKEWING,\n wrapWithFixedAnchor((eventData, transform, x, y) =>\n skewObject(axis, transform, new Point(x, y)),\n ),\n );\n\n return finalHandler(\n eventData,\n {\n ...transform,\n [originKey]: origin,\n skewingSide,\n },\n x,\n y,\n );\n}\n\n/**\n * Wrapped Action handler for skewing on the X axis, takes care of the\n * skew direction and determines the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const skewHandlerX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return skewHandler('x', eventData, transform, x, y);\n};\n\n/**\n * Wrapped Action handler for skewing on the Y axis, takes care of the\n * skew direction and determines the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const skewHandlerY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return skewHandler('y', eventData, transform, x, y);\n};\n","import type {\n ControlCallback,\n ControlCursorCallback,\n TPointerEvent,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { SCALE_X, SCALE_Y, SKEW_X, SKEW_Y } from '../constants';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TAxisKey } from '../typedefs';\nimport { scaleCursorStyleHandler, scalingX, scalingY } from './scale';\nimport { skewCursorStyleHandler, skewHandlerX, skewHandlerY } from './skew';\n\nfunction isAltAction(eventData: TPointerEvent, target: FabricObject) {\n return eventData[target.canvas!.altActionKey!];\n}\n\n/**\n * Inspect event, control and fabricObject to return the correct action name\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} an action name\n */\nexport const scaleOrSkewActionName: ControlCallback<\n TAxisKey<'skew' | 'scale'> | ''\n> = (eventData, control, fabricObject) => {\n const isAlternative = isAltAction(eventData, fabricObject);\n if (control.x === 0) {\n // then is scaleY or skewX\n return isAlternative ? SKEW_X : SCALE_Y;\n }\n if (control.y === 0) {\n // then is scaleY or skewX\n return isAlternative ? SKEW_Y : SCALE_X;\n }\n return '';\n};\n\n/**\n * Combine skew and scale style handlers to cover fabric standard use case\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const scaleSkewCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n return isAltAction(eventData, fabricObject)\n ? skewCursorStyleHandler(eventData, control, fabricObject)\n : scaleCursorStyleHandler(eventData, control, fabricObject);\n};\n/**\n * Composed action handler to either scale X or skew Y\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scalingXOrSkewingY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return isAltAction(eventData, transform.target)\n ? skewHandlerY(eventData, transform, x, y)\n : scalingX(eventData, transform, x, y);\n};\n\n/**\n * Composed action handler to either scale Y or skew X\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scalingYOrSkewingX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return isAltAction(eventData, transform.target)\n ? skewHandlerX(eventData, transform, x, y)\n : scalingY(eventData, transform, x, y);\n};\n","import { RESIZING, ROTATE } from '../constants';\nimport { changeWidth } from './changeWidth';\nimport { Control } from './Control';\nimport { rotationStyleHandler, rotationWithSnapping } from './rotate';\nimport { scaleCursorStyleHandler, scalingEqually } from './scale';\nimport {\n scaleOrSkewActionName,\n scaleSkewCursorStyleHandler,\n scalingXOrSkewingY,\n scalingYOrSkewingX,\n} from './scaleSkew';\n\n// use this function if you want to generate new controls for every instance\nexport const createObjectDefaultControls = () => ({\n ml: new Control({\n x: -0.5,\n y: 0,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingXOrSkewingY,\n getActionName: scaleOrSkewActionName,\n }),\n\n mr: new Control({\n x: 0.5,\n y: 0,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingXOrSkewingY,\n getActionName: scaleOrSkewActionName,\n }),\n\n mb: new Control({\n x: 0,\n y: 0.5,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingYOrSkewingX,\n getActionName: scaleOrSkewActionName,\n }),\n\n mt: new Control({\n x: 0,\n y: -0.5,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingYOrSkewingX,\n getActionName: scaleOrSkewActionName,\n }),\n\n tl: new Control({\n x: -0.5,\n y: -0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n tr: new Control({\n x: 0.5,\n y: -0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n bl: new Control({\n x: -0.5,\n y: 0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n br: new Control({\n x: 0.5,\n y: 0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n mtr: new Control({\n x: 0,\n y: -0.5,\n actionHandler: rotationWithSnapping,\n cursorStyleHandler: rotationStyleHandler,\n offsetY: -40,\n withConnection: true,\n actionName: ROTATE,\n }),\n});\n\nexport const createResizeControls = () => ({\n mr: new Control({\n x: 0.5,\n y: 0,\n actionHandler: changeWidth,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionName: RESIZING,\n }),\n ml: new Control({\n x: -0.5,\n y: 0,\n actionHandler: changeWidth,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionName: RESIZING,\n }),\n});\n\nexport const createTextboxDefaultControls = () => ({\n ...createObjectDefaultControls(),\n ...createResizeControls(),\n});\n","import { Point, ZERO } from '../../Point';\nimport type { TCornerPoint, TDegree } from '../../typedefs';\nimport { FabricObject } from './Object';\nimport { degreesToRadians } from '../../util/misc/radiansDegreesConversion';\nimport type { TQrDecomposeOut } from '../../util/misc/matrix';\nimport {\n calcDimensionsMatrix,\n createRotateMatrix,\n createTranslateMatrix,\n multiplyTransformMatrices,\n qrDecompose,\n} from '../../util/misc/matrix';\nimport type { Control } from '../../controls/Control';\nimport { sizeAfterTransform } from '../../util/misc/objectTransforms';\nimport type { ObjectEvents, TPointerEvent } from '../../EventTypeDefs';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { ControlRenderingStyleOverride } from '../../controls/controlRendering';\nimport type { FabricObjectProps } from './types/FabricObjectProps';\nimport type { TFabricObjectProps, SerializedObjectProps } from './types';\nimport { createObjectDefaultControls } from '../../controls/commonControls';\nimport { interactiveObjectDefaultValues } from './defaultValues';\nimport { SCALE } from '../../constants';\n\nexport type TOCoord = Point & {\n corner: TCornerPoint;\n touchCorner: TCornerPoint;\n};\n\nexport type TControlSet = Record;\n\nexport type TBorderRenderingStyleOverride = Partial<\n Pick\n>;\n\nexport type TStyleOverride = ControlRenderingStyleOverride &\n TBorderRenderingStyleOverride &\n Partial<\n Pick & {\n forActiveSelection: boolean;\n }\n >;\n\nexport class InteractiveFabricObject<\n Props extends TFabricObjectProps = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements FabricObjectProps\n{\n declare noScaleCache: boolean;\n\n declare snapAngle?: TDegree;\n declare snapThreshold?: TDegree;\n\n declare lockMovementX: boolean;\n declare lockMovementY: boolean;\n declare lockRotation: boolean;\n declare lockScalingX: boolean;\n declare lockScalingY: boolean;\n declare lockSkewingX: boolean;\n declare lockSkewingY: boolean;\n declare lockScalingFlip: boolean;\n\n declare cornerSize: number;\n declare touchCornerSize: number;\n declare transparentCorners: boolean;\n declare cornerColor: string;\n declare cornerStrokeColor: string;\n declare cornerStyle: 'rect' | 'circle';\n declare cornerDashArray: number[] | null;\n declare hasControls: boolean;\n\n declare borderColor: string;\n declare borderDashArray: number[] | null;\n declare borderOpacityWhenMoving: number;\n declare borderScaleFactor: number;\n declare hasBorders: boolean;\n declare selectionBackgroundColor: string;\n\n declare selectable: boolean;\n declare evented: boolean;\n declare perPixelTargetFind: boolean;\n declare activeOn: 'down' | 'up';\n\n declare hoverCursor: CSSStyleDeclaration['cursor'] | null;\n declare moveCursor: CSSStyleDeclaration['cursor'] | null;\n\n /**\n * The object's controls' position in viewport coordinates\n * Calculated by {@link Control#positionHandler} and {@link Control#calcCornerCoords}, depending on {@link padding}.\n * `corner/touchCorner` describe the 4 points forming the interactive area of the corner.\n * Used to draw and locate controls.\n */\n declare oCoords: Record;\n\n /**\n * keeps the value of the last hovered corner during mouse move.\n * 0 is no corner, or 'mt', 'ml', 'mtr' etc..\n * It should be private, but there is no harm in using it as\n * a read-only property.\n * this isn't cleaned automatically. Non selected objects may have wrong values\n * @type [string]\n */\n declare __corner?: string;\n\n /**\n * a map of control visibility for this object.\n * this was left when controls were introduced to not break the api too much\n * this takes priority over the generic control visibility\n */\n declare _controlsVisibility: Record;\n\n /**\n * holds the controls for the object.\n * controls are added by default_controls.js\n */\n declare controls: TControlSet;\n\n /**\n * internal boolean to signal the code that the object is\n * part of the move action.\n */\n declare isMoving?: boolean;\n\n /**\n * A boolean used from the gesture module to keep tracking of a scaling\n * action when there is no scaling transform in place.\n * This is an edge case and is used twice in all codebase.\n * Probably added to keep track of some performance issues\n * @TODO use git blame to investigate why it was added\n * DON'T USE IT. WE WILL TRY TO REMOVE IT\n */\n declare _scaling?: boolean;\n\n declare canvas?: Canvas;\n\n static ownDefaults = interactiveObjectDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...InteractiveFabricObject.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(\n this,\n (this.constructor as typeof InteractiveFabricObject).createControls(),\n InteractiveFabricObject.ownDefaults,\n );\n this.setOptions(options);\n }\n\n /**\n * Creates the default control object.\n * If you prefer to have on instance of controls shared among all objects\n * make this function return an empty object and add controls to the ownDefaults\n * @param {Object} [options] Options object\n */\n static createControls(): { controls: Record } {\n return { controls: createObjectDefaultControls() };\n }\n\n /**\n * Update width and height of the canvas for cache\n * returns true or false if canvas needed resize.\n * @private\n * @return {Boolean} true if the canvas has been resized\n */\n _updateCacheCanvas() {\n const targetCanvas = this.canvas;\n if (this.noScaleCache && targetCanvas && targetCanvas._currentTransform) {\n const transform = targetCanvas._currentTransform,\n target = transform.target,\n action = transform.action;\n if (\n this === (target as unknown as this) &&\n action &&\n action.startsWith(SCALE)\n ) {\n return false;\n }\n }\n return super._updateCacheCanvas();\n }\n\n getActiveControl() {\n const key = this.__corner;\n return key\n ? {\n key,\n control: this.controls[key],\n coord: this.oCoords[key],\n }\n : undefined;\n }\n\n /**\n * Determines which corner is under the mouse cursor, represented by `pointer`.\n * This function is return a corner only if the object is the active one.\n * This is done to avoid selecting corner of non active object and activating transformations\n * rather than drag action. The default behavior of fabricJS is that if you want to transform\n * an object, first you select it to show the control set\n * @private\n * @param {Object} pointer The pointer indicating the mouse position\n * @param {boolean} forTouch indicates if we are looking for interaction area with a touch action\n * @return {String|Boolean} corner code (tl, tr, bl, br, etc.), or 0 if nothing is found.\n */\n findControl(\n pointer: Point,\n forTouch = false,\n ): { key: string; control: Control; coord: TOCoord } | undefined {\n if (!this.hasControls || !this.canvas) {\n return undefined;\n }\n\n this.__corner = undefined;\n const cornerEntries = Object.entries(this.oCoords);\n for (let i = cornerEntries.length - 1; i >= 0; i--) {\n const [key, corner] = cornerEntries[i];\n const control = this.controls[key];\n\n if (\n control.shouldActivate(\n key,\n this,\n pointer,\n forTouch ? corner.touchCorner : corner.corner,\n )\n ) {\n // this.canvas.contextTop.fillRect(pointer.x - 1, pointer.y - 1, 2, 2);\n this.__corner = key;\n\n return { key, control, coord: this.oCoords[key] };\n }\n }\n\n return undefined;\n }\n\n /**\n * Calculates the coordinates of the center of each control plus the corners of the control itself\n * This basically just delegates to each control positionHandler\n * WARNING: changing what is passed to positionHandler is a breaking change, since position handler\n * is a public api and should be done just if extremely necessary\n * @return {Record}\n */\n calcOCoords(): Record {\n const vpt = this.getViewportTransform(),\n center = this.getCenterPoint(),\n tMatrix = createTranslateMatrix(center.x, center.y),\n rMatrix = createRotateMatrix({\n angle: this.getTotalAngle() - (!!this.group && this.flipX ? 180 : 0),\n }),\n positionMatrix = multiplyTransformMatrices(tMatrix, rMatrix),\n startMatrix = multiplyTransformMatrices(vpt, positionMatrix),\n finalMatrix = multiplyTransformMatrices(startMatrix, [\n 1 / vpt[0],\n 0,\n 0,\n 1 / vpt[3],\n 0,\n 0,\n ]),\n transformOptions = this.group\n ? qrDecompose(this.calcTransformMatrix())\n : undefined;\n // decomposing could bring negative scaling and `_calculateCurrentDimensions` can't take it\n if (transformOptions) {\n transformOptions.scaleX = Math.abs(transformOptions.scaleX);\n transformOptions.scaleY = Math.abs(transformOptions.scaleY);\n }\n const dim = this._calculateCurrentDimensions(transformOptions),\n coords: Record = {};\n\n this.forEachControl((control, key) => {\n const position = control.positionHandler(dim, finalMatrix, this, control);\n // coords[key] are sometimes used as points. Those are points to which we add\n // the property corner and touchCorner from `_calcCornerCoords`.\n // don't remove this assign for an object spread.\n coords[key] = Object.assign(\n position,\n this._calcCornerCoords(control, position),\n );\n });\n\n // debug code\n /*\n const canvas = this.canvas;\n setTimeout(function () {\n if (!canvas) return;\n canvas.contextTop.clearRect(0, 0, 700, 700);\n canvas.contextTop.fillStyle = 'green';\n Object.keys(coords).forEach(function(key) {\n const control = coords[key];\n canvas.contextTop.fillRect(control.x, control.y, 3, 3);\n });\n } 50);\n */\n return coords;\n }\n\n /**\n * Sets the coordinates that determine the interaction area of each control\n * note: if we would switch to ROUND corner area, all of this would disappear.\n * everything would resolve to a single point and a pythagorean theorem for the distance\n * @todo evaluate simplification of code switching to circle interaction area at runtime\n * @private\n */\n private _calcCornerCoords(control: Control, position: Point) {\n const angle = this.getTotalAngle();\n const corner = control.calcCornerCoords(\n angle,\n this.cornerSize,\n position.x,\n position.y,\n false,\n this,\n );\n const touchCorner = control.calcCornerCoords(\n angle,\n this.touchCornerSize,\n position.x,\n position.y,\n true,\n this,\n );\n return { corner, touchCorner };\n }\n\n /**\n * @override set controls' coordinates as well\n * See {@link https://github.com/fabricjs/fabric.js/wiki/When-to-call-setCoords} and {@link http://fabricjs.com/fabric-gotchas}\n * @return {void}\n */\n setCoords(): void {\n super.setCoords();\n this.canvas && (this.oCoords = this.calcOCoords());\n }\n\n /**\n * Calls a function for each control. The function gets called,\n * with the control, the control's key and the object that is calling the iterator\n * @param {Function} fn function to iterate over the controls over\n */\n forEachControl(\n fn: (\n control: Control,\n key: string,\n fabricObject: InteractiveFabricObject,\n ) => any,\n ) {\n for (const i in this.controls) {\n fn(this.controls[i], i, this);\n }\n }\n\n /**\n * Draws a colored layer behind the object, inside its selection borders.\n * Requires public options: padding, selectionBackgroundColor\n * this function is called when the context is transformed\n * has checks to be skipped when the object is on a staticCanvas\n * @todo evaluate if make this disappear in favor of a pre-render hook for objects\n * this was added by Andrea Bogazzi to make possible some feature for work reasons\n * it seemed a good option, now is an edge case\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n */\n drawSelectionBackground(ctx: CanvasRenderingContext2D): void {\n if (\n !this.selectionBackgroundColor ||\n (this.canvas && (this.canvas._activeObject as unknown as this) !== this)\n ) {\n return;\n }\n ctx.save();\n const center = this.getRelativeCenterPoint(),\n wh = this._calculateCurrentDimensions(),\n vpt = this.getViewportTransform();\n ctx.translate(center.x, center.y);\n ctx.scale(1 / vpt[0], 1 / vpt[3]);\n ctx.rotate(degreesToRadians(this.angle));\n ctx.fillStyle = this.selectionBackgroundColor;\n ctx.fillRect(-wh.x / 2, -wh.y / 2, wh.x, wh.y);\n ctx.restore();\n }\n\n /**\n * @public override this function in order to customize the drawing of the control box, e.g. rounded corners, different border style.\n * @param {CanvasRenderingContext2D} ctx ctx is rotated and translated so that (0,0) is at object's center\n * @param {Point} size the control box size used\n */\n strokeBorders(ctx: CanvasRenderingContext2D, size: Point): void {\n ctx.strokeRect(-size.x / 2, -size.y / 2, size.x, size.y);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Point} size\n * @param {TStyleOverride} styleOverride object to override the object style\n */\n _drawBorders(\n ctx: CanvasRenderingContext2D,\n size: Point,\n styleOverride: TStyleOverride = {},\n ): void {\n const options = {\n hasControls: this.hasControls,\n borderColor: this.borderColor,\n borderDashArray: this.borderDashArray,\n ...styleOverride,\n };\n ctx.save();\n ctx.strokeStyle = options.borderColor;\n this._setLineDash(ctx, options.borderDashArray);\n this.strokeBorders(ctx, size);\n options.hasControls && this.drawControlsConnectingLines(ctx, size);\n ctx.restore();\n }\n\n /**\n * Renders controls and borders for the object\n * the context here is not transformed\n * @todo move to interactivity\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {TStyleOverride} [styleOverride] properties to override the object style\n */\n _renderControls(\n ctx: CanvasRenderingContext2D,\n styleOverride: TStyleOverride = {},\n ) {\n const { hasBorders, hasControls } = this;\n const styleOptions = {\n hasBorders,\n hasControls,\n ...styleOverride,\n };\n const vpt = this.getViewportTransform(),\n shouldDrawBorders = styleOptions.hasBorders,\n shouldDrawControls = styleOptions.hasControls;\n const matrix = multiplyTransformMatrices(vpt, this.calcTransformMatrix());\n const options = qrDecompose(matrix);\n ctx.save();\n ctx.translate(options.translateX, options.translateY);\n ctx.lineWidth = 1 * this.borderScaleFactor;\n // since interactive groups have been introduced, an object could be inside a group and needing controls\n // the following equality check `this.group === this.parent` covers:\n // object without a group ( undefined === undefined )\n // object inside a group\n // excludes object inside a group but multi selected since group and parent will differ in value\n if (this.group === this.parent) {\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n }\n if (this.flipX) {\n options.angle -= 180;\n }\n ctx.rotate(degreesToRadians(this.group ? options.angle : this.angle));\n shouldDrawBorders && this.drawBorders(ctx, options, styleOverride);\n shouldDrawControls && this.drawControls(ctx, styleOverride);\n ctx.restore();\n }\n\n /**\n * Draws borders of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {object} options object representing current object parameters\n * @param {TStyleOverride} [styleOverride] object to override the object style\n */\n drawBorders(\n ctx: CanvasRenderingContext2D,\n options: TQrDecomposeOut,\n styleOverride: TStyleOverride,\n ): void {\n let size;\n if ((styleOverride && styleOverride.forActiveSelection) || this.group) {\n const bbox = sizeAfterTransform(\n this.width,\n this.height,\n calcDimensionsMatrix(options),\n ),\n stroke = !this.isStrokeAccountedForInDimensions()\n ? (this.strokeUniform\n ? new Point().scalarAdd(this.canvas ? this.canvas.getZoom() : 1)\n : // this is extremely confusing. options comes from the upper function\n // and is the qrDecompose of a matrix that takes in account zoom too\n new Point(options.scaleX, options.scaleY)\n ).scalarMultiply(this.strokeWidth)\n : ZERO;\n size = bbox\n .add(stroke)\n .scalarAdd(this.borderScaleFactor)\n .scalarAdd(this.padding * 2);\n } else {\n size = this._calculateCurrentDimensions().scalarAdd(\n this.borderScaleFactor,\n );\n }\n this._drawBorders(ctx, size, styleOverride);\n }\n\n /**\n * Draws lines from a borders of an object's bounding box to controls that have `withConnection` property set.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Point} size object size x = width, y = height\n */\n drawControlsConnectingLines(\n ctx: CanvasRenderingContext2D,\n size: Point,\n ): void {\n let shouldStroke = false;\n\n ctx.beginPath();\n this.forEachControl((control, key) => {\n // in this moment, the ctx is centered on the object.\n // width and height of the above function are the size of the bbox.\n if (control.withConnection && control.getVisibility(this, key)) {\n // reset movement for each control\n shouldStroke = true;\n ctx.moveTo(control.x * size.x, control.y * size.y);\n ctx.lineTo(\n control.x * size.x + control.offsetX,\n control.y * size.y + control.offsetY,\n );\n }\n });\n shouldStroke && ctx.stroke();\n }\n\n /**\n * Draws corners of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: cornerSize, padding\n * Be aware that since fabric 6.0 this function does not call setCoords anymore.\n * setCoords needs to be called manually if the object of which we are rendering controls\n * is outside the standard selection and transform process.\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {ControlRenderingStyleOverride} styleOverride object to override the object style\n */\n drawControls(\n ctx: CanvasRenderingContext2D,\n styleOverride: ControlRenderingStyleOverride = {},\n ) {\n ctx.save();\n const retinaScaling = this.getCanvasRetinaScaling();\n const { cornerStrokeColor, cornerDashArray, cornerColor } = this;\n const options = {\n cornerStrokeColor,\n cornerDashArray,\n cornerColor,\n ...styleOverride,\n };\n ctx.setTransform(retinaScaling, 0, 0, retinaScaling, 0, 0);\n ctx.strokeStyle = ctx.fillStyle = options.cornerColor;\n if (!this.transparentCorners) {\n ctx.strokeStyle = options.cornerStrokeColor;\n }\n this._setLineDash(ctx, options.cornerDashArray);\n this.forEachControl((control, key) => {\n if (control.getVisibility(this, key)) {\n const p = this.oCoords[key];\n control.render(ctx, p.x, p.y, options, this);\n }\n });\n ctx.restore();\n }\n\n /**\n * Returns true if the specified control is visible, false otherwise.\n * @param {string} controlKey The key of the control. Possible values are usually 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr',\n * but since the control api allow for any control name, can be any string.\n * @returns {boolean} true if the specified control is visible, false otherwise\n */\n isControlVisible(controlKey: string): boolean {\n return (\n this.controls[controlKey] &&\n this.controls[controlKey].getVisibility(this, controlKey)\n );\n }\n\n /**\n * Sets the visibility of the specified control.\n * please do not use.\n * @param {String} controlKey The key of the control. Possible values are 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr'.\n * but since the control api allow for any control name, can be any string.\n * @param {Boolean} visible true to set the specified control visible, false otherwise\n * @todo discuss this overlap of priority here with the team. Andrea Bogazzi for details\n */\n setControlVisible(controlKey: string, visible: boolean) {\n if (!this._controlsVisibility) {\n this._controlsVisibility = {};\n }\n this._controlsVisibility[controlKey] = visible;\n }\n\n /**\n * Sets the visibility state of object controls, this is just a bulk option for setControlVisible;\n * @param {Record} [options] with an optional key per control\n * example: {Boolean} [options.bl] true to enable the bottom-left control, false to disable it\n */\n setControlsVisibility(options: Record = {}) {\n Object.entries(options).forEach(([controlKey, visibility]) =>\n this.setControlVisible(controlKey, visibility),\n );\n }\n\n /**\n * Clears the canvas.contextTop in a specific area that corresponds to the object's bounding box\n * that is in the canvas.contextContainer.\n * This function is used to clear pieces of contextTop where we render ephemeral effects on top of the object.\n * Example: blinking cursor text selection, drag effects.\n * @todo discuss swapping restoreManually with a renderCallback, but think of async issues\n * @param {Boolean} [restoreManually] When true won't restore the context after clear, in order to draw something else.\n * @return {CanvasRenderingContext2D|undefined} canvas.contextTop that is either still transformed\n * with the object transformMatrix, or restored to neutral transform\n */\n clearContextTop(\n restoreManually?: boolean,\n ): CanvasRenderingContext2D | undefined {\n if (!this.canvas) {\n return;\n }\n const ctx = this.canvas.contextTop;\n if (!ctx) {\n return;\n }\n const v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n this.transform(ctx);\n // we add 4 pixel, to be sure to do not leave any pixel out\n const width = this.width + 4,\n height = this.height + 4;\n ctx.clearRect(-width / 2, -height / 2, width, height);\n\n restoreManually || ctx.restore();\n return ctx;\n }\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to deselect this object. If the function returns true, the process is cancelled\n * @param {Object} [_options] options sent from the upper functions\n * @param {TPointerEvent} [options.e] event if the process is generated by an event\n * @param {FabricObject} [options.object] next object we are setting as active, and reason why\n * this is being deselected\n */\n onDeselect(_options?: {\n e?: TPointerEvent;\n object?: InteractiveFabricObject;\n }): boolean {\n // implemented by sub-classes, as needed.\n return false;\n }\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to select this object. If the function returns true, the process is cancelled\n * @param {Object} [_options] options sent from the upper functions\n * @param {Event} [_options.e] event if the process is generated by an event\n */\n onSelect(_options?: { e?: TPointerEvent }): boolean {\n // implemented by sub-classes, as needed.\n return false;\n }\n\n /**\n * Override to customize Drag behavior\n * Fired from {@link Canvas#_onMouseMove}\n * @returns true in order for the window to start a drag session\n */\n shouldStartDragging(_e: TPointerEvent) {\n return false;\n }\n\n /**\n * Override to customize Drag behavior\\\n * Fired once a drag session has started\n * @returns true to handle the drag event\n */\n onDragStart(_e: DragEvent) {\n return false;\n }\n\n /**\n * Override to customize drag and drop behavior\n * @public\n * @param {DragEvent} _e\n * @returns {boolean} true if the object currently dragged can be dropped on the target\n */\n canDrop(_e: DragEvent): boolean {\n return false;\n }\n\n /**\n * Override to customize drag and drop behavior\n * render a specific effect when an object is the source of a drag event\n * example: render the selection status for the part of text that is being dragged from a text object\n * @public\n * @param {DragEvent} _e\n */\n renderDragSourceEffect(_e: DragEvent) {\n // for subclasses\n }\n\n /**\n * Override to customize drag and drop behavior\n * render a specific effect when an object is the target of a drag event\n * used to show that the underly object can receive a drop, or to show how the\n * object will change when dropping. example: show the cursor where the text is about to be dropped\n * @public\n * @param {DragEvent} _e\n */\n renderDropTargetEffect(_e: DragEvent) {\n // for subclasses\n }\n}\n","import type { Constructor } from '../typedefs';\n\n/***\n * https://www.typescriptlang.org/docs/handbook/mixins.html#alternative-pattern\n */\nexport function applyMixins(\n derivedCtor: T,\n constructors: S[],\n) {\n constructors.forEach((baseCtor) => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\n name !== 'constructor' &&\n Object.defineProperty(\n derivedCtor.prototype,\n name,\n Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||\n Object.create(null),\n );\n });\n });\n return derivedCtor as T & { prototype: InstanceType };\n}\n","import type { ObjectEvents } from '../../EventTypeDefs';\nimport { FabricObjectSVGExportMixin } from './FabricObjectSVGExportMixin';\nimport { InteractiveFabricObject } from './InteractiveObject';\nimport { applyMixins } from '../../util/applyMixins';\nimport type { FabricObjectProps } from './types/FabricObjectProps';\nimport type { TFabricObjectProps, SerializedObjectProps } from './types';\nimport { classRegistry } from '../../ClassRegistry';\n\n// TODO somehow we have to make a tree-shakeable import\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface FabricObject<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Props extends TFabricObjectProps = Partial,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n SProps extends SerializedObjectProps = SerializedObjectProps,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObjectSVGExportMixin {}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class FabricObject<\n Props extends TFabricObjectProps = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends InteractiveFabricObject {}\n\napplyMixins(FabricObject, [FabricObjectSVGExportMixin]);\n\nclassRegistry.setClass(FabricObject);\nclassRegistry.setClass(FabricObject, 'object');\n\nexport { cacheProperties } from './defaultValues';\n","/**\n * Returns true if context has transparent pixel\n * at specified location (taking tolerance into account)\n * @param {CanvasRenderingContext2D} ctx context\n * @param {Number} x x coordinate in canvasElementCoordinate, not fabric space. integer\n * @param {Number} y y coordinate in canvasElementCoordinate, not fabric space. integer\n * @param {Number} tolerance Tolerance pixels around the point, not alpha tolerance, integer\n * @return {boolean} true if transparent\n */\nexport const isTransparent = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n tolerance: number,\n): boolean => {\n tolerance = Math.round(tolerance);\n const size = tolerance * 2 + 1;\n const { data } = ctx.getImageData(x - tolerance, y - tolerance, size, size);\n\n // Split image data - for tolerance > 1, pixelDataSize = 4;\n for (let i = 3; i < data.length; i += 4) {\n const alphaChannel = data[i];\n if (alphaChannel > 0) {\n return false;\n }\n }\n return true;\n};\n","import type { Point } from '../../Point';\nimport type { TRadian } from '../../typedefs';\n/**\n * Rotates `point` around `origin` with `radians`\n * @deprecated use the Point.rotate\n * @param {Point} origin The origin of the rotation\n * @param {Point} origin The origin of the rotation\n * @param {TRadian} radians The radians of the angle for the rotation\n * @return {Point} The new rotated point\n */\nexport const rotatePoint = (\n point: Point,\n origin: Point,\n radians: TRadian,\n): Point => point.rotate(radians, origin);\n","export const findIndexRight = (\n array: T[],\n predicate: (value: T, index: number, array: T[]) => boolean,\n) => {\n for (let index = array.length - 1; index >= 0; index--) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\n","import type { XY } from '../../../Point';\nimport { Point } from '../../../Point';\nimport { degreesToRadians } from '../radiansDegreesConversion';\nimport { createVector } from '../vectors';\nimport type { TProjectStrokeOnPointsOptions, TProjection } from './types';\n\n/**\n * @see https://github.com/fabricjs/fabric.js/pull/8344\n * @todo consider removing skewing from points before calculating stroke projection,\n * see https://github.com/fabricjs/fabric.js/commit/494a10ee2f8c2278ae9a55b20bf50cf6ee25b064#commitcomment-94751537\n */\nexport abstract class StrokeProjectionsBase {\n declare options: TProjectStrokeOnPointsOptions;\n declare scale: Point;\n declare strokeUniformScalar: Point;\n declare strokeProjectionMagnitude: number;\n\n constructor(options: TProjectStrokeOnPointsOptions) {\n this.options = options;\n this.strokeProjectionMagnitude = this.options.strokeWidth / 2;\n this.scale = new Point(this.options.scaleX, this.options.scaleY);\n this.strokeUniformScalar = this.options.strokeUniform\n ? new Point(1 / this.options.scaleX, 1 / this.options.scaleY)\n : new Point(1, 1);\n }\n\n /**\n * When the stroke is uniform, scaling affects the arrangement of points. So we must take it into account.\n */\n protected createSideVector(from: XY, to: XY) {\n const v = createVector(from, to);\n return this.options.strokeUniform ? v.multiply(this.scale) : v;\n }\n\n protected abstract calcOrthogonalProjection(\n from: Point,\n to: Point,\n magnitude?: number,\n ): Point;\n\n protected projectOrthogonally(from: Point, to: Point, magnitude?: number) {\n return this.applySkew(\n from.add(this.calcOrthogonalProjection(from, to, magnitude)),\n );\n }\n\n protected isSkewed() {\n return this.options.skewX !== 0 || this.options.skewY !== 0;\n }\n\n protected applySkew(point: Point) {\n const p = new Point(point);\n // skewY must be applied before skewX as this distortion affects skewX calculation\n p.y += p.x * Math.tan(degreesToRadians(this.options.skewY));\n p.x += p.y * Math.tan(degreesToRadians(this.options.skewX));\n return p;\n }\n\n protected scaleUnitVector(unitVector: Point, scalar: number) {\n return unitVector.multiply(this.strokeUniformScalar).scalarMultiply(scalar);\n }\n\n protected abstract projectPoints(): Point[];\n\n public abstract project(): TProjection[];\n}\n","import type { XY } from '../../../Point';\nimport { Point } from '../../../Point';\nimport { halfPI, twoMathPi } from '../../../constants';\nimport type { TRadian } from '../../../typedefs';\nimport { degreesToRadians } from '../radiansDegreesConversion';\nimport {\n calcAngleBetweenVectors,\n calcVectorRotation,\n crossProduct,\n getOrthonormalVector,\n getUnitVector,\n isBetweenVectors,\n magnitude,\n rotateVector,\n} from '../vectors';\nimport { StrokeProjectionsBase } from './StrokeProjectionsBase';\nimport type { TProjection, TProjectStrokeOnPointsOptions } from './types';\n\nconst zeroVector = new Point();\n\n/**\n * class in charge of finding projections for each type of line join\n * @see {@link [Closed path projections at #8344](https://github.com/fabricjs/fabric.js/pull/8344#2-closed-path)}\n *\n * - MDN:\n * - https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin\n * - https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin\n * - Spec: https://svgwg.org/svg2-draft/painting.html#StrokeLinejoinProperty\n * - Playground to understand how the line joins works: https://hypertolosana.github.io/efficient-webgl-stroking/index.html\n * - View the calculated projections for each of the control points: https://codesandbox.io/s/project-stroke-points-with-context-to-trace-b8jc4j?file=/src/index.js\n *\n */\nexport class StrokeLineJoinProjections extends StrokeProjectionsBase {\n /**\n * The point being projected (the angle ∠BAC)\n */\n declare A: Point;\n /**\n * The point before A\n */\n declare B: Point;\n /**\n * The point after A\n */\n declare C: Point;\n /**\n * The AB vector\n */\n AB: Point;\n /**\n * The AC vector\n */\n AC: Point;\n /**\n * The angle of A (∠BAC)\n */\n alpha: TRadian;\n /**\n * The bisector of A (∠BAC)\n */\n bisector: Point;\n\n static getOrthogonalRotationFactor(vector1: Point, vector2?: Point) {\n const angle = vector2\n ? calcAngleBetweenVectors(vector1, vector2)\n : calcVectorRotation(vector1);\n return Math.abs(angle) < halfPI ? -1 : 1;\n }\n\n constructor(A: XY, B: XY, C: XY, options: TProjectStrokeOnPointsOptions) {\n super(options);\n this.A = new Point(A);\n this.B = new Point(B);\n this.C = new Point(C);\n this.AB = this.createSideVector(this.A, this.B);\n this.AC = this.createSideVector(this.A, this.C);\n this.alpha = calcAngleBetweenVectors(this.AB, this.AC);\n this.bisector = getUnitVector(\n // if AC is also the zero vector nothing will be projected\n // in that case the next point will handle the projection\n rotateVector(this.AB.eq(zeroVector) ? this.AC : this.AB, this.alpha / 2),\n );\n }\n\n calcOrthogonalProjection(\n from: Point,\n to: Point,\n magnitude: number = this.strokeProjectionMagnitude,\n ) {\n const vector = this.createSideVector(from, to);\n const orthogonalProjection = getOrthonormalVector(vector);\n const correctSide = StrokeLineJoinProjections.getOrthogonalRotationFactor(\n orthogonalProjection,\n this.bisector,\n );\n return this.scaleUnitVector(orthogonalProjection, magnitude * correctSide);\n }\n\n /**\n * BEVEL\n * Calculation: the projection points are formed by the vector orthogonal to the vertex.\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-2-bevel\n */\n projectBevel() {\n const projections: Point[] = [];\n // if `alpha` equals 0 or 2*PI, the projections are the same for `B` and `C`\n (this.alpha % twoMathPi === 0 ? [this.B] : [this.B, this.C]).forEach(\n (to) => {\n projections.push(this.projectOrthogonally(this.A, to));\n projections.push(\n this.projectOrthogonally(this.A, to, -this.strokeProjectionMagnitude),\n );\n },\n );\n return projections;\n }\n\n /**\n * MITER\n * Calculation: the corner is formed by extending the outer edges of the stroke\n * at the tangents of the path segments until they intersect.\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-1-miter\n */\n projectMiter() {\n const projections: Point[] = [],\n alpha = Math.abs(this.alpha),\n hypotUnitScalar = 1 / Math.sin(alpha / 2),\n miterVector = this.scaleUnitVector(\n this.bisector,\n -this.strokeProjectionMagnitude * hypotUnitScalar,\n );\n\n // When two line segments meet at a sharp angle, it is possible for the join to extend,\n // far beyond the thickness of the line stroking the path. The stroke-miterlimit imposes\n // a limit on the extent of the line join.\n // MDN: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit\n // When the stroke is uniform, scaling changes the arrangement of points, this changes the miter-limit\n const strokeMiterLimit = this.options.strokeUniform\n ? magnitude(\n this.scaleUnitVector(this.bisector, this.options.strokeMiterLimit),\n )\n : this.options.strokeMiterLimit;\n\n if (\n magnitude(miterVector) / this.strokeProjectionMagnitude <=\n strokeMiterLimit\n ) {\n projections.push(this.applySkew(this.A.add(miterVector)));\n }\n /* when the miter-limit is reached, the stroke line join becomes of type bevel.\n We always need two orthogonal projections which are basically bevel-type projections,\n so regardless of whether the miter-limit was reached or not, we include these projections.\n */\n projections.push(...this.projectBevel());\n\n return projections;\n }\n\n /**\n * ROUND (without skew)\n * Calculation: the projections are the two vectors parallel to X and Y axes\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-3-1-round-without-skew\n */\n private projectRoundNoSkew(startCircle: Point, endCircle: Point) {\n const projections: Point[] = [],\n // correctSide is used to only consider projecting for the outer side\n correctSide = new Point(\n StrokeLineJoinProjections.getOrthogonalRotationFactor(this.bisector),\n StrokeLineJoinProjections.getOrthogonalRotationFactor(\n new Point(this.bisector.y, this.bisector.x),\n ),\n ),\n radiusOnAxisX = new Point(1, 0)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar)\n .multiply(correctSide),\n radiusOnAxisY = new Point(0, 1)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar)\n .multiply(correctSide);\n\n [radiusOnAxisX, radiusOnAxisY].forEach((vector) => {\n if (isBetweenVectors(vector, startCircle, endCircle)) {\n projections.push(this.A.add(vector));\n }\n });\n return projections;\n }\n\n /**\n * ROUND (with skew)\n * Calculation: the projections are the points furthest from the vertex in\n * the direction of the X and Y axes after distortion.\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-3-2-round-skew\n */\n private projectRoundWithSkew(startCircle: Point, endCircle: Point) {\n const projections: Point[] = [];\n\n const { skewX, skewY, scaleX, scaleY, strokeUniform } = this.options,\n shearing = new Point(\n Math.tan(degreesToRadians(skewX)),\n Math.tan(degreesToRadians(skewY)),\n );\n // The points furthest from the vertex in the direction of the X and Y axes after distortion\n const circleRadius = this.strokeProjectionMagnitude,\n newY = strokeUniform\n ? circleRadius /\n scaleY /\n Math.sqrt(1 / scaleY ** 2 + (1 / scaleX ** 2) * shearing.y ** 2)\n : circleRadius / Math.sqrt(1 + shearing.y ** 2),\n furthestY = new Point(\n // Safe guard due to floating point precision. In some situations the square root\n // was returning NaN because of a negative number close to zero.\n Math.sqrt(Math.max(circleRadius ** 2 - newY ** 2, 0)),\n newY,\n ),\n newX = strokeUniform\n ? circleRadius /\n Math.sqrt(\n 1 +\n (shearing.x ** 2 * (1 / scaleY) ** 2) /\n (1 / scaleX + (1 / scaleX) * shearing.x * shearing.y) ** 2,\n )\n : circleRadius /\n Math.sqrt(1 + shearing.x ** 2 / (1 + shearing.x * shearing.y) ** 2),\n furthestX = new Point(\n newX,\n Math.sqrt(Math.max(circleRadius ** 2 - newX ** 2, 0)),\n );\n\n [\n furthestX,\n furthestX.scalarMultiply(-1),\n furthestY,\n furthestY.scalarMultiply(-1),\n ]\n // We need to skew the vector here as this information is used to check if\n // it is between the start and end of the circle segment\n .map((vector) =>\n this.applySkew(\n strokeUniform ? vector.multiply(this.strokeUniformScalar) : vector,\n ),\n )\n .forEach((vector) => {\n if (isBetweenVectors(vector, startCircle, endCircle)) {\n projections.push(this.applySkew(this.A).add(vector));\n }\n });\n\n return projections;\n }\n\n projectRound() {\n const projections: Point[] = [];\n /* Include the start and end points of the circle segment, so that only\n the projections contained within it are included */\n // add the orthogonal projections (start and end points of circle segment)\n projections.push(...this.projectBevel());\n // let's determines which one of the orthogonal projection is the beginning and end of the circle segment.\n // when `alpha` equals 0 or 2*PI, we have a straight line, so the way to find the start/end is different.\n const isStraightLine = this.alpha % twoMathPi === 0,\n // change the origin of the projections to point A\n // so that the cross product calculation is correct\n newOrigin = this.applySkew(this.A),\n proj0 = projections[isStraightLine ? 0 : 2].subtract(newOrigin),\n proj1 = projections[isStraightLine ? 1 : 0].subtract(newOrigin),\n // when `isStraightLine` === true, we compare with the vector opposite AB, otherwise we compare with the bisector.\n comparisonVector = isStraightLine\n ? this.applySkew(this.AB.scalarMultiply(-1))\n : this.applySkew(\n this.bisector.multiply(this.strokeUniformScalar).scalarMultiply(-1),\n ),\n // the beginning of the circle segment is always to the right of the comparison vector (cross product > 0)\n isProj0Start = crossProduct(proj0, comparisonVector) > 0,\n startCircle = isProj0Start ? proj0 : proj1,\n endCircle = isProj0Start ? proj1 : proj0;\n if (!this.isSkewed()) {\n projections.push(...this.projectRoundNoSkew(startCircle, endCircle));\n } else {\n projections.push(...this.projectRoundWithSkew(startCircle, endCircle));\n }\n return projections;\n }\n\n /**\n * Project stroke width on points returning projections for each point as follows:\n * - `miter`: 1 point corresponding to the outer boundary. If the miter limit is exceeded, it will be 2 points (becomes bevel)\n * - `bevel`: 2 points corresponding to the bevel possible boundaries, orthogonal to the stroke.\n * - `round`: same as `bevel` when it has no skew, with skew are 4 points.\n */\n protected projectPoints() {\n switch (this.options.strokeLineJoin) {\n case 'miter':\n return this.projectMiter();\n case 'round':\n return this.projectRound();\n default:\n return this.projectBevel();\n }\n }\n\n public project(): TProjection[] {\n return this.projectPoints().map((point) => ({\n originPoint: this.A,\n projectedPoint: point,\n angle: this.alpha,\n bisector: this.bisector,\n }));\n }\n}\n","import type { XY } from '../../../Point';\nimport { Point } from '../../../Point';\nimport { getOrthonormalVector, getUnitVector } from '../vectors';\nimport { StrokeLineJoinProjections } from './StrokeLineJoinProjections';\nimport { StrokeProjectionsBase } from './StrokeProjectionsBase';\nimport type { TProjection, TProjectStrokeOnPointsOptions } from './types';\n\n/**\n * class in charge of finding projections for each type of line cap for start/end of an open path\n * @see {@link [Open path projections at #8344](https://github.com/fabricjs/fabric.js/pull/8344#1-open-path)}\n *\n * Reference:\n * - MDN:\n * - https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap\n * - https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap\n * - Spec: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-linecap-dev\n * - Playground to understand how the line joins works: https://hypertolosana.github.io/efficient-webgl-stroking/index.html\n * - View the calculated projections for each of the control points: https://codesandbox.io/s/project-stroke-points-with-context-to-trace-b8jc4j?file=/src/index.js\n */\nexport class StrokeLineCapProjections extends StrokeProjectionsBase {\n /**\n * edge point\n */\n declare A: Point;\n /**\n * point next to edge point\n */\n declare T: Point;\n\n constructor(A: XY, T: XY, options: TProjectStrokeOnPointsOptions) {\n super(options);\n this.A = new Point(A);\n this.T = new Point(T);\n }\n\n calcOrthogonalProjection(\n from: Point,\n to: Point,\n magnitude: number = this.strokeProjectionMagnitude,\n ) {\n const vector = this.createSideVector(from, to);\n return this.scaleUnitVector(getOrthonormalVector(vector), magnitude);\n }\n\n /**\n * OPEN PATH START/END - Line cap: Butt\n * Calculation: to find the projections, just find the points orthogonal to the stroke\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#1-1-butt\n */\n projectButt() {\n return [\n this.projectOrthogonally(this.A, this.T, this.strokeProjectionMagnitude),\n this.projectOrthogonally(this.A, this.T, -this.strokeProjectionMagnitude),\n ];\n }\n\n /**\n * OPEN PATH START/END - Line cap: Round\n * Calculation: same as stroke line join `round`\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#1-2-round\n */\n projectRound() {\n const projections: Point[] = [];\n\n if (!this.isSkewed() && this.A.eq(this.T)) {\n /* 1 point case without `skew`\n When `strokeUniform` is true, scaling has no effect.\n So we divide by scale, to remove its effect.\n */\n const projection = new Point(1, 1)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar);\n projections.push(\n this.applySkew(this.A.add(projection)),\n this.applySkew(this.A.subtract(projection)),\n );\n } else {\n projections.push(\n ...new StrokeLineJoinProjections(\n this.A,\n this.T,\n this.T,\n this.options,\n ).projectRound(),\n );\n }\n\n return projections;\n }\n\n /**\n * OPEN PATH START/END - Line cap: Square\n * Calculation: project a rectangle of points on the stroke in the opposite direction of the vector `AT`\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#1-3-square\n */\n projectSquare() {\n const projections: Point[] = [];\n\n if (this.A.eq(this.T)) {\n /* 1 point case without `skew`\n When `strokeUniform` is true, scaling has no effect.\n So we divide by scale, to remove its effect.\n */\n const projection = new Point(1, 1)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar);\n projections.push(this.A.add(projection), this.A.subtract(projection));\n } else {\n const orthogonalProjection = this.calcOrthogonalProjection(\n this.A,\n this.T,\n this.strokeProjectionMagnitude,\n );\n const strokePointingOut = this.scaleUnitVector(\n getUnitVector(this.createSideVector(this.A, this.T)),\n -this.strokeProjectionMagnitude,\n );\n const projectedA = this.A.add(strokePointingOut);\n projections.push(\n projectedA.add(orthogonalProjection),\n projectedA.subtract(orthogonalProjection),\n );\n }\n\n return projections.map((p) => this.applySkew(p));\n }\n\n protected projectPoints() {\n switch (this.options.strokeLineCap) {\n case 'round':\n return this.projectRound();\n case 'square':\n return this.projectSquare();\n default:\n return this.projectButt();\n }\n }\n\n public project(): TProjection[] {\n return this.projectPoints().map((point) => ({\n originPoint: this.A,\n projectedPoint: point,\n }));\n }\n}\n","import { Point, type XY } from '../../../Point';\nimport { findIndexRight } from '../../internals/findRight';\nimport { StrokeLineCapProjections } from './StrokeLineCapProjections';\nimport { StrokeLineJoinProjections } from './StrokeLineJoinProjections';\nimport type { TProjection, TProjectStrokeOnPointsOptions } from './types';\n\nexport * from './types';\n\n/**\n *\n * Used to calculate object's bounding box\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344\n *\n */\nexport const projectStrokeOnPoints = (\n points: XY[],\n options: TProjectStrokeOnPointsOptions,\n openPath = false,\n): TProjection[] => {\n const projections: TProjection[] = [];\n\n if (points.length === 0) {\n return projections;\n }\n\n // first we remove duplicate neighboring points\n const reduced = points.reduce(\n (reduced, point) => {\n if (!reduced[reduced.length - 1].eq(point)) {\n reduced.push(new Point(point));\n }\n return reduced;\n },\n [new Point(points[0])],\n );\n\n if (reduced.length === 1) {\n openPath = true;\n } else if (!openPath) {\n // remove points from end in case they equal the first point\n // in order to correctly project the first point\n const start = reduced[0];\n const index = findIndexRight(reduced, (point) => !point.eq(start));\n reduced.splice(index + 1);\n }\n\n reduced.forEach((A, index, points) => {\n let B: XY, C: XY;\n if (index === 0) {\n C = points[1];\n B = openPath ? A : points[points.length - 1];\n } else if (index === points.length - 1) {\n B = points[index - 1];\n C = openPath ? A : points[0];\n } else {\n B = points[index - 1];\n C = points[index + 1];\n }\n\n if (openPath && points.length === 1) {\n projections.push(\n ...new StrokeLineCapProjections(A, A, options).project(),\n );\n } else if (openPath && (index === 0 || index === points.length - 1)) {\n projections.push(\n ...new StrokeLineCapProjections(\n A,\n index === 0 ? C : B,\n options,\n ).project(),\n );\n } else {\n projections.push(\n ...new StrokeLineJoinProjections(A, B, C, options).project(),\n );\n }\n });\n\n return projections;\n};\n","import type { TextStyle } from '../../shapes/Text/StyledText';\n\nexport const cloneStyles = (style: TextStyle): TextStyle => {\n const newObj: TextStyle = {};\n Object.keys(style).forEach((key) => {\n newObj[key] = {};\n Object.keys(style[key]).forEach((keyInner) => {\n newObj[key][keyInner] = { ...style[key][keyInner] };\n });\n });\n return newObj;\n};\n","/**\n * Capitalizes a string\n * @param {String} string String to capitalize\n * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized\n * and other letters stay untouched, if false first letter is capitalized\n * and other letters are converted to lowercase.\n * @return {String} Capitalized version of a string\n */\nexport const capitalize = (string: string, firstLetterOnly = false): string =>\n `${string.charAt(0).toUpperCase()}${\n firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase()\n }`;\n\n/**\n * Escapes XML in a string\n * @param {String} string String to escape\n * @return {String} Escaped version of a string\n */\nexport const escapeXml = (string: string): string =>\n string\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(//g, '>');\n\n/**\n * Divide a string in the user perceived single units\n * @param {String} textstring String to escape\n * @return {Array} array containing the graphemes\n */\nexport const graphemeSplit = (textstring: string): string[] => {\n const graphemes = [];\n for (let i = 0, chr; i < textstring.length; i++) {\n if ((chr = getWholeChar(textstring, i)) === false) {\n continue;\n }\n graphemes.push(chr as string);\n }\n return graphemes;\n};\n\n// taken from mdn in the charAt doc page.\nconst getWholeChar = (str: string, i: number): string | boolean => {\n const code = str.charCodeAt(i);\n if (isNaN(code)) {\n return ''; // Position not found\n }\n if (code < 0xd800 || code > 0xdfff) {\n return str.charAt(i);\n }\n\n // High surrogate (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xd800 <= code && code <= 0xdbff) {\n if (str.length <= i + 1) {\n throw 'High surrogate without following low surrogate';\n }\n const next = str.charCodeAt(i + 1);\n if (0xdc00 > next || next > 0xdfff) {\n throw 'High surrogate without following low surrogate';\n }\n return str.charAt(i) + str.charAt(i + 1);\n }\n // Low surrogate (0xDC00 <= code && code <= 0xDFFF)\n if (i === 0) {\n throw 'Low surrogate without preceding high surrogate';\n }\n const prev = str.charCodeAt(i - 1);\n\n // (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xd800 > prev || prev > 0xdbff) {\n throw 'Low surrogate without preceding high surrogate';\n }\n // We can pass over low surrogates now as the second component\n // in a pair which we have already processed\n return false;\n};\n","import { reNewline } from '../../constants';\nimport type {\n TextStyle,\n TextStyleDeclaration,\n} from '../../shapes/Text/StyledText';\nimport { cloneStyles } from '../internals/cloneStyles';\nimport { graphemeSplit } from '../lang_string';\n\nexport type TextStyleArray = {\n start: number;\n end: number;\n style: TextStyleDeclaration;\n}[];\n\n/**\n * @param {Object} prevStyle first style to compare\n * @param {Object} thisStyle second style to compare\n * @param {boolean} forTextSpans whether to check overline, underline, and line-through properties\n * @return {boolean} true if the style changed\n */\nexport const hasStyleChanged = (\n prevStyle: TextStyleDeclaration,\n thisStyle: TextStyleDeclaration,\n forTextSpans = false,\n) =>\n prevStyle.fill !== thisStyle.fill ||\n prevStyle.stroke !== thisStyle.stroke ||\n prevStyle.strokeWidth !== thisStyle.strokeWidth ||\n prevStyle.fontSize !== thisStyle.fontSize ||\n prevStyle.fontFamily !== thisStyle.fontFamily ||\n prevStyle.fontWeight !== thisStyle.fontWeight ||\n prevStyle.fontStyle !== thisStyle.fontStyle ||\n prevStyle.textBackgroundColor !== thisStyle.textBackgroundColor ||\n prevStyle.deltaY !== thisStyle.deltaY ||\n (forTextSpans &&\n (prevStyle.overline !== thisStyle.overline ||\n prevStyle.underline !== thisStyle.underline ||\n prevStyle.linethrough !== thisStyle.linethrough));\n\n/**\n * Returns the array form of a text object's inline styles property with styles grouped in ranges\n * rather than per character. This format is less verbose, and is better suited for storage\n * so it is used in serialization (not during runtime).\n * @param {object} styles per character styles for a text object\n * @param {String} text the text string that the styles are applied to\n * @return {{start: number, end: number, style: object}[]}\n */\nexport const stylesToArray = (\n styles: TextStyle,\n text: string,\n): TextStyleArray => {\n const textLines = text.split('\\n'),\n stylesArray = [];\n let charIndex = -1,\n prevStyle = {};\n // clone style structure to prevent mutation\n styles = cloneStyles(styles);\n\n //loop through each textLine\n for (let i = 0; i < textLines.length; i++) {\n const chars = graphemeSplit(textLines[i]);\n if (!styles[i]) {\n //no styles exist for this line, so add the line's length to the charIndex total and reset prevStyle\n charIndex += chars.length;\n prevStyle = {};\n continue;\n }\n //loop through each character of the current line\n for (let c = 0; c < chars.length; c++) {\n charIndex++;\n const thisStyle = styles[i][c];\n //check if style exists for this character\n if (thisStyle && Object.keys(thisStyle).length > 0) {\n if (hasStyleChanged(prevStyle, thisStyle, true)) {\n stylesArray.push({\n start: charIndex,\n end: charIndex + 1,\n style: thisStyle,\n });\n } else {\n //if style is the same as previous character, increase end index\n stylesArray[stylesArray.length - 1].end++;\n }\n }\n prevStyle = thisStyle || {};\n }\n }\n return stylesArray;\n};\n\n/**\n * Returns the object form of the styles property with styles that are assigned per\n * character rather than grouped by range. This format is more verbose, and is\n * only used during runtime (not for serialization/storage)\n * @param {Array} styles the serialized form of a text object's styles\n * @param {String} text the text string that the styles are applied to\n * @return {Object}\n */\nexport const stylesFromArray = (\n styles: TextStyleArray | TextStyle,\n text: string,\n): TextStyle => {\n if (!Array.isArray(styles)) {\n // clone to prevent mutation\n return cloneStyles(styles);\n }\n const textLines = text.split(reNewline),\n stylesObject: TextStyle = {};\n let charIndex = -1,\n styleIndex = 0;\n //loop through each textLine\n for (let i = 0; i < textLines.length; i++) {\n const chars = graphemeSplit(textLines[i]);\n\n //loop through each character of the current line\n for (let c = 0; c < chars.length; c++) {\n charIndex++;\n //check if there's a style collection that includes the current character\n if (\n styles[styleIndex] &&\n styles[styleIndex].start <= charIndex &&\n charIndex < styles[styleIndex].end\n ) {\n //create object for line index if it doesn't exist\n stylesObject[i] = stylesObject[i] || {};\n //assign a style at this character's index\n stylesObject[i][c] = { ...styles[styleIndex].style };\n //if character is at the end of the current style collection, move to the next\n if (charIndex === styles[styleIndex].end - 1) {\n styleIndex++;\n }\n }\n }\n }\n return stylesObject;\n};\n","import { FILL, STROKE } from '../constants';\n\n/**\n * Attributes parsed from all SVG elements\n * @type array\n */\nexport const SHARED_ATTRIBUTES = [\n 'display',\n 'transform',\n FILL,\n 'fill-opacity',\n 'fill-rule',\n 'opacity',\n STROKE,\n 'stroke-dasharray',\n 'stroke-linecap',\n 'stroke-dashoffset',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'id',\n 'paint-order',\n 'vector-effect',\n 'instantiated_by_use',\n 'clip-path',\n];\n","export function selectorMatches(element: HTMLElement, selector: string) {\n const nodeName = element.nodeName;\n const classNames = element.getAttribute('class');\n const id = element.getAttribute('id');\n const azAz = '(?![a-zA-Z\\\\-]+)';\n let matcher;\n // i check if a selector matches slicing away part from it.\n // if i get empty string i should match\n matcher = new RegExp('^' + nodeName, 'i');\n selector = selector.replace(matcher, '');\n if (id && selector.length) {\n matcher = new RegExp('#' + id + azAz, 'i');\n selector = selector.replace(matcher, '');\n }\n if (classNames && selector.length) {\n const splitClassNames = classNames.split(' ');\n for (let i = splitClassNames.length; i--; ) {\n matcher = new RegExp('\\\\.' + splitClassNames[i] + azAz, 'i');\n selector = selector.replace(matcher, '');\n }\n }\n return selector.length === 0;\n}\n","import { selectorMatches } from './selectorMatches';\n\nexport function doesSomeParentMatch(element: HTMLElement, selectors: string[]) {\n let selector: string,\n parentMatching = true;\n while (\n element.parentElement &&\n element.parentElement.nodeType === 1 &&\n selectors.length\n ) {\n if (parentMatching) {\n selector = selectors.pop()!;\n }\n element = element.parentElement;\n parentMatching = selectorMatches(element, selector!);\n }\n return selectors.length === 0;\n}\n","import { selectorMatches } from './selectorMatches';\nimport { doesSomeParentMatch } from './doesSomeParentMatch';\n\n/**\n * @private\n */\n\nexport function elementMatchesRule(element: HTMLElement, selectors: string[]) {\n let parentMatching = true;\n // start from rightmost selector.\n const firstMatching = selectorMatches(element, selectors.pop()!);\n if (firstMatching && selectors.length) {\n parentMatching = doesSomeParentMatch(element, selectors);\n }\n return firstMatching && parentMatching && selectors.length === 0;\n}\n","import { elementMatchesRule } from './elementMatchesRule';\nimport type { CSSRules } from './typedefs';\n\n/**\n * @private\n */\n\nexport function getGlobalStylesForElement(\n element: HTMLElement,\n cssRules: CSSRules = {},\n) {\n let styles: Record = {};\n for (const rule in cssRules) {\n if (elementMatchesRule(element, rule.split(' '))) {\n styles = {\n ...styles,\n ...cssRules[rule],\n };\n }\n }\n return styles;\n}\n","import { attributesMap } from './constants';\n\nexport const normalizeAttr = (\n attr: keyof typeof attributesMap | string,\n): string => attributesMap[attr as keyof typeof attributesMap] ?? attr;\n","import { reNum } from '../../parser/constants';\n\nconst regex = new RegExp(`(${reNum})`, 'gi');\n\nexport const cleanupSvgAttribute = (attributeValue: string) =>\n attributeValue\n .replace(regex, ' $1 ')\n // replace annoying commas and arbitrary whitespace with single spaces\n .replace(/,/gi, ' ')\n .replace(/\\s+/gi, ' ');\n","import { ROTATE, SCALE, SKEW_X, SKEW_Y, iMatrix } from '../constants';\nimport { reNum } from './constants';\nimport type { TMat2D } from '../typedefs';\nimport { cleanupSvgAttribute } from '../util/internals/cleanupSvgAttribute';\nimport {\n createRotateMatrix,\n createScaleMatrix,\n createSkewXMatrix,\n createSkewYMatrix,\n createTranslateMatrix,\n multiplyTransformMatrixArray,\n} from '../util/misc/matrix';\n\n// == begin transform regexp\nconst p = `(${reNum})`;\nconst skewX = String.raw`(skewX)\\(${p}\\)`;\nconst skewY = String.raw`(skewY)\\(${p}\\)`;\nconst rotate = String.raw`(rotate)\\(${p}(?: ${p} ${p})?\\)`;\nconst scale = String.raw`(scale)\\(${p}(?: ${p})?\\)`;\nconst translate = String.raw`(translate)\\(${p}(?: ${p})?\\)`;\nconst matrix = String.raw`(matrix)\\(${p} ${p} ${p} ${p} ${p} ${p}\\)`;\nconst transform = `(?:${matrix}|${translate}|${rotate}|${scale}|${skewX}|${skewY})`;\nconst transforms = `(?:${transform}*)`;\nconst transformList = String.raw`^\\s*(?:${transforms}?)\\s*$`;\n// http://www.w3.org/TR/SVG/coords.html#TransformAttribute\nconst reTransformList = new RegExp(transformList);\nconst reTransform = new RegExp(transform);\nconst reTransformAll = new RegExp(transform, 'g');\n// == end transform regexp\n\n/**\n * Parses \"transform\" attribute, returning an array of values\n * @static\n * @function\n * @memberOf fabric\n * @param {String} attributeValue String containing attribute value\n * @return {TTransformMatrix} Array of 6 elements representing transformation matrix\n */\nexport function parseTransformAttribute(attributeValue: string): TMat2D {\n // first we clean the string\n attributeValue = cleanupSvgAttribute(attributeValue)\n // remove spaces around front parentheses\n .replace(/\\s*([()])\\s*/gi, '$1');\n\n // start with identity matrix\n const matrices: TMat2D[] = [];\n\n // return if no argument was given or\n // an argument does not match transform attribute regexp\n if (\n !attributeValue ||\n (attributeValue && !reTransformList.test(attributeValue))\n ) {\n return [...iMatrix];\n }\n\n for (const match of attributeValue.matchAll(reTransformAll)) {\n const transformMatch = reTransform.exec(match[0]);\n if (!transformMatch) {\n continue;\n }\n let matrix: TMat2D = iMatrix;\n const matchedParams = transformMatch.filter((m) => !!m);\n const [, operation, ...rawArgs] = matchedParams;\n const [arg0, arg1, arg2, arg3, arg4, arg5] = rawArgs.map((arg) =>\n parseFloat(arg),\n );\n\n switch (operation) {\n case 'translate':\n matrix = createTranslateMatrix(arg0, arg1);\n break;\n case ROTATE:\n matrix = createRotateMatrix({ angle: arg0 }, { x: arg1, y: arg2 });\n break;\n case SCALE:\n matrix = createScaleMatrix(arg0, arg1);\n break;\n case SKEW_X:\n matrix = createSkewXMatrix(arg0);\n break;\n case SKEW_Y:\n matrix = createSkewYMatrix(arg0);\n break;\n case 'matrix':\n matrix = [arg0, arg1, arg2, arg3, arg4, arg5];\n break;\n }\n\n // snapshot current matrix into matrices array\n matrices.push(matrix);\n }\n\n return multiplyTransformMatrixArray(matrices);\n}\n","import { multiplyTransformMatrices } from '../util/misc/matrix';\nimport { parseUnit } from '../util/misc/svgParsing';\nimport { parseTransformAttribute } from './parseTransformAttribute';\nimport { CENTER, LEFT, RIGHT, NONE, FILL, STROKE } from '../constants';\n\nexport function normalizeValue(\n attr: string,\n value: any,\n parentAttributes: Record,\n fontSize: number,\n): string | null | boolean | number[] | number {\n const isArray = Array.isArray(value);\n let parsed: number | number[];\n let ouputValue: string | null | boolean | number[] | number = value;\n if ((attr === FILL || attr === STROKE) && value === NONE) {\n ouputValue = '';\n } else if (attr === 'strokeUniform') {\n return value === 'non-scaling-stroke';\n } else if (attr === 'strokeDashArray') {\n if (value === NONE) {\n ouputValue = null;\n } else {\n ouputValue = value.replace(/,/g, ' ').split(/\\s+/).map(parseFloat);\n }\n } else if (attr === 'transformMatrix') {\n if (parentAttributes && parentAttributes.transformMatrix) {\n ouputValue = multiplyTransformMatrices(\n parentAttributes.transformMatrix,\n parseTransformAttribute(value),\n );\n } else {\n ouputValue = parseTransformAttribute(value);\n }\n } else if (attr === 'visible') {\n ouputValue = value !== NONE && value !== 'hidden';\n // display=none on parent element always takes precedence over child element\n if (parentAttributes && parentAttributes.visible === false) {\n ouputValue = false;\n }\n } else if (attr === 'opacity') {\n ouputValue = parseFloat(value);\n if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {\n ouputValue *= parentAttributes.opacity as number;\n }\n } else if (attr === 'textAnchor' /* text-anchor */) {\n ouputValue = value === 'start' ? LEFT : value === 'end' ? RIGHT : CENTER;\n } else if (attr === 'charSpacing') {\n // parseUnit returns px and we convert it to em\n parsed = (parseUnit(value, fontSize) / fontSize) * 1000;\n } else if (attr === 'paintFirst') {\n const fillIndex = value.indexOf(FILL);\n const strokeIndex = value.indexOf(STROKE);\n ouputValue = FILL;\n if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {\n ouputValue = STROKE;\n } else if (fillIndex === -1 && strokeIndex > -1) {\n ouputValue = STROKE;\n }\n } else if (\n attr === 'href' ||\n attr === 'xlink:href' ||\n attr === 'font' ||\n attr === 'id'\n ) {\n return value;\n } else if (attr === 'imageSmoothing') {\n return value === 'optimizeQuality';\n } else {\n parsed = isArray\n ? (value as string[]).map(parseUnit)\n : parseUnit(value, fontSize);\n }\n\n return !isArray && isNaN(parsed! as number) ? ouputValue : parsed!;\n}\n","import { parseUnit } from '../util/misc/svgParsing';\nimport { reFontDeclaration } from './constants';\n\n/**\n * Parses a short font declaration, building adding its properties to a style object\n * @static\n * @function\n * @memberOf fabric\n * @param {String} value font declaration\n * @param {Object} oStyle definition\n */\nexport function parseFontDeclaration(\n value: string,\n oStyle: Record,\n): void {\n const match = value.match(reFontDeclaration);\n\n if (!match) {\n return;\n }\n const fontStyle = match[1],\n // font variant is not used\n // fontVariant = match[2],\n fontWeight = match[3],\n fontSize = match[4],\n lineHeight = match[5],\n fontFamily = match[6];\n\n if (fontStyle) {\n oStyle.fontStyle = fontStyle;\n }\n if (fontWeight) {\n oStyle.fontWeight = isNaN(parseFloat(fontWeight))\n ? fontWeight\n : parseFloat(fontWeight);\n }\n if (fontSize) {\n oStyle.fontSize = parseUnit(fontSize);\n }\n if (fontFamily) {\n oStyle.fontFamily = fontFamily;\n }\n if (lineHeight) {\n oStyle.lineHeight = lineHeight === 'normal' ? 1 : lineHeight;\n }\n}\n","/**\n * Takes a style object and parses it in one that has only defined values\n * and lowercases properties\n * @param style\n * @param oStyle\n */\nexport function parseStyleObject(\n style: Record,\n oStyle: Record,\n): void {\n Object.entries(style).forEach(([prop, value]) => {\n if (value === undefined) {\n return;\n }\n oStyle[prop.toLowerCase()] = value;\n });\n}\n","/**\n * Takes a style string and parses it in one that has only defined values\n * and lowercases properties\n * @param style\n * @param oStyle\n */\nexport function parseStyleString(\n style: string,\n oStyle: Record,\n): void {\n style\n .replace(/;\\s*$/, '')\n .split(';')\n .forEach((chunk) => {\n if (!chunk) return;\n const [attr, value] = chunk.split(':');\n oStyle[attr.trim().toLowerCase()] = value.trim();\n });\n}\n","import { parseStyleObject } from './parseStyleObject';\nimport { parseStyleString } from './parseStyleString';\n\n/**\n * Parses \"style\" attribute, retuning an object with values\n * @static\n * @memberOf fabric\n * @param {SVGElement} element Element to parse\n * @return {Object} Objects with values parsed from style attribute of an element\n */\nexport function parseStyleAttribute(element: HTMLElement): Record {\n const oStyle: Record = {},\n style = element.getAttribute('style');\n\n if (!style) {\n return oStyle;\n }\n\n if (typeof style === 'string') {\n parseStyleString(style, oStyle);\n } else {\n parseStyleObject(style, oStyle);\n }\n\n return oStyle;\n}\n","import { Color } from '../color/Color';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject } from '../shapes/Object/FabricObject';\n\nconst colorAttributesMap = {\n stroke: 'strokeOpacity',\n fill: 'fillOpacity',\n};\n\n/**\n * @private\n * @param {Object} attributes Array of attributes to parse\n */\n\nexport function setStrokeFillOpacity(\n attributes: Record,\n): Record {\n const defaults = FabricObject.getDefaults();\n Object.entries(colorAttributesMap).forEach(([attr, colorAttr]) => {\n if (\n typeof attributes[colorAttr] === 'undefined' ||\n attributes[attr] === ''\n ) {\n return;\n }\n if (typeof attributes[attr] === 'undefined') {\n if (!defaults[attr]) {\n return;\n }\n attributes[attr] = defaults[attr];\n }\n if (attributes[attr].indexOf('url(') === 0) {\n return;\n }\n const color = new Color(attributes[attr]);\n attributes[attr] = color\n .setAlpha(toFixed(color.getAlpha() * attributes[colorAttr], 2))\n .toRgba();\n });\n return attributes;\n}\n","import { DEFAULT_SVG_FONT_SIZE } from '../constants';\nimport { parseUnit } from '../util/misc/svgParsing';\nimport { cPath, fSize, svgValidParentsRegEx } from './constants';\nimport { getGlobalStylesForElement } from './getGlobalStylesForElement';\nimport { normalizeAttr } from './normalizeAttr';\nimport { normalizeValue } from './normalizeValue';\nimport { parseFontDeclaration } from './parseFontDeclaration';\nimport { parseStyleAttribute } from './parseStyleAttribute';\nimport { setStrokeFillOpacity } from './setStrokeFillOpacity';\nimport type { CSSRules } from './typedefs';\n\n/**\n * Returns an object of attributes' name/value, given element and an array of attribute names;\n * Parses parent \"g\" nodes recursively upwards.\n * @param {SVGElement | HTMLElement} element Element to parse\n * @param {Array} attributes Array of attributes to parse\n * @return {Object} object containing parsed attributes' names/values\n */\nexport function parseAttributes(\n element: HTMLElement | null,\n attributes: string[],\n cssRules?: CSSRules,\n): Record {\n if (!element) {\n return {};\n }\n\n let parentAttributes: Record = {},\n fontSize: number,\n parentFontSize = DEFAULT_SVG_FONT_SIZE;\n\n // if there's a parent container (`g` or `a` or `symbol` node), parse its attributes recursively upwards\n if (\n element.parentNode &&\n svgValidParentsRegEx.test(element.parentNode.nodeName)\n ) {\n parentAttributes = parseAttributes(\n element.parentElement,\n attributes,\n cssRules,\n );\n if (parentAttributes.fontSize) {\n fontSize = parentFontSize = parseUnit(parentAttributes.fontSize);\n }\n }\n\n const ownAttributes: Record = {\n ...attributes.reduce>((memo, attr) => {\n const value = element.getAttribute(attr);\n if (value) {\n memo[attr] = value;\n }\n return memo;\n }, {}),\n // add values parsed from style, which take precedence over attributes\n // (see: http://www.w3.org/TR/SVG/styling.html#UsingPresentationAttributes)\n ...getGlobalStylesForElement(element, cssRules),\n ...parseStyleAttribute(element),\n };\n\n if (ownAttributes[cPath]) {\n element.setAttribute(cPath, ownAttributes[cPath]);\n }\n if (ownAttributes[fSize]) {\n // looks like the minimum should be 9px when dealing with ems. this is what looks like in browsers.\n fontSize = parseUnit(ownAttributes[fSize], parentFontSize);\n ownAttributes[fSize] = `${fontSize}`;\n }\n\n // this should have its own complex type\n const normalizedStyle: Record<\n string,\n string | boolean | number | number[] | null\n > = {};\n for (const attr in ownAttributes) {\n const normalizedAttr = normalizeAttr(attr);\n const normalizedValue = normalizeValue(\n normalizedAttr,\n ownAttributes[attr],\n parentAttributes,\n fontSize!,\n );\n normalizedStyle[normalizedAttr] = normalizedValue;\n }\n if (normalizedStyle && normalizedStyle.font) {\n parseFontDeclaration(normalizedStyle.font as string, normalizedStyle);\n }\n const mergedAttrs = { ...parentAttributes, ...normalizedStyle };\n return svgValidParentsRegEx.test(element.nodeName)\n ? mergedAttrs\n : setStrokeFillOpacity(mergedAttrs);\n}\n","import { kRect } from '../constants';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const rectDefaultValues: Partial> = {\n rx: 0,\n ry: 0,\n};\n\ninterface UniqueRectProps {\n rx: number;\n ry: number;\n}\n\nexport interface SerializedRectProps\n extends SerializedObjectProps,\n UniqueRectProps {}\n\nexport interface RectProps extends FabricObjectProps, UniqueRectProps {}\n\nconst RECT_PROPS = ['rx', 'ry'] as const;\n\nexport class Rect<\n Props extends TOptions = Partial,\n SProps extends SerializedRectProps = SerializedRectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements RectProps\n{\n /**\n * Horizontal border radius\n * @type Number\n * @default\n */\n declare rx: number;\n\n /**\n * Vertical border radius\n * @type Number\n * @default\n */\n declare ry: number;\n\n static type = 'Rect';\n\n static cacheProperties = [...cacheProperties, ...RECT_PROPS];\n\n static ownDefaults = rectDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Rect.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Rect.ownDefaults);\n this.setOptions(options);\n this._initRxRy();\n }\n /**\n * Initializes rx/ry attributes\n * @private\n */\n _initRxRy() {\n const { rx, ry } = this;\n if (rx && !ry) {\n this.ry = rx;\n } else if (ry && !rx) {\n this.rx = ry;\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const { width: w, height: h } = this;\n const x = -w / 2;\n const y = -h / 2;\n const rx = this.rx ? Math.min(this.rx, w / 2) : 0;\n const ry = this.ry ? Math.min(this.ry, h / 2) : 0;\n const isRounded = rx !== 0 || ry !== 0;\n\n ctx.beginPath();\n\n ctx.moveTo(x + rx, y);\n\n ctx.lineTo(x + w - rx, y);\n isRounded &&\n ctx.bezierCurveTo(\n x + w - kRect * rx,\n y,\n x + w,\n y + kRect * ry,\n x + w,\n y + ry,\n );\n\n ctx.lineTo(x + w, y + h - ry);\n isRounded &&\n ctx.bezierCurveTo(\n x + w,\n y + h - kRect * ry,\n x + w - kRect * rx,\n y + h,\n x + w - rx,\n y + h,\n );\n\n ctx.lineTo(x + rx, y + h);\n isRounded &&\n ctx.bezierCurveTo(\n x + kRect * rx,\n y + h,\n x,\n y + h - kRect * ry,\n x,\n y + h - ry,\n );\n\n ctx.lineTo(x, y + ry);\n isRounded &&\n ctx.bezierCurveTo(x, y + kRect * ry, x + kRect * rx, y, x + rx, y);\n\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([...RECT_PROPS, ...propertiesToInclude]);\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const { width, height, rx, ry } = this;\n return [\n '\\n`,\n ];\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `Rect.fromElement`)\n * @static\n * @memberOf Rect\n * @see: http://www.w3.org/TR/SVG/shapes.html#RectElement\n */\n static ATTRIBUTE_NAMES = [\n ...SHARED_ATTRIBUTES,\n 'x',\n 'y',\n 'rx',\n 'ry',\n 'width',\n 'height',\n ];\n\n /* _FROM_SVG_START_ */\n\n /**\n * Returns {@link Rect} instance from an SVG element\n * @static\n * @memberOf Rect\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const {\n left = 0,\n top = 0,\n width = 0,\n height = 0,\n visible = true,\n ...restOfparsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n\n return new this({\n ...options,\n ...restOfparsedAttributes,\n left,\n top,\n width,\n height,\n visible: Boolean(visible && width && height),\n });\n }\n\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Rect);\nclassRegistry.setSVGClass(Rect);\n","export const LAYOUT_TYPE_INITIALIZATION = 'initialization';\nexport const LAYOUT_TYPE_ADDED = 'added';\nexport const LAYOUT_TYPE_REMOVED = 'removed';\nexport const LAYOUT_TYPE_IMPERATIVE = 'imperative';\nexport const LAYOUT_TYPE_OBJECT_MODIFIED = 'object_modified';\nexport const LAYOUT_TYPE_OBJECT_MODIFYING = 'object_modifying';\n","import { Point, ZERO } from '../../Point';\nimport type { Group } from '../../shapes/Group';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { multiplyTransformMatrixArray } from '../../util/misc/matrix';\nimport { sizeAfterTransform } from '../../util/misc/objectTransforms';\nimport {\n calcPlaneChangeMatrix,\n sendVectorToPlane,\n} from '../../util/misc/planeChange';\n\n/**\n * @returns 2 points, the tl and br corners of the non rotated bounding box of an object\n * in the {@link group} plane, taking into account objects that {@link group} is their parent\n * but also belong to the active selection.\n */\nexport const getObjectBounds = (\n destinationGroup: Group,\n object: FabricObject,\n): Point[] => {\n const {\n strokeUniform,\n strokeWidth,\n width,\n height,\n group: currentGroup,\n } = object;\n const t =\n currentGroup && currentGroup !== destinationGroup\n ? calcPlaneChangeMatrix(\n currentGroup.calcTransformMatrix(),\n destinationGroup.calcTransformMatrix(),\n )\n : null;\n const objectCenter = t\n ? object.getRelativeCenterPoint().transform(t)\n : object.getRelativeCenterPoint();\n const accountForStroke = !object['isStrokeAccountedForInDimensions']();\n const strokeUniformVector =\n strokeUniform && accountForStroke\n ? sendVectorToPlane(\n new Point(strokeWidth, strokeWidth),\n undefined,\n destinationGroup.calcTransformMatrix(),\n )\n : ZERO;\n const scalingStrokeWidth =\n !strokeUniform && accountForStroke ? strokeWidth : 0;\n const sizeVector = sizeAfterTransform(\n width + scalingStrokeWidth,\n height + scalingStrokeWidth,\n multiplyTransformMatrixArray([t, object.calcOwnMatrix()], true),\n )\n .add(strokeUniformVector)\n .scalarDivide(2);\n return [objectCenter.subtract(sizeVector), objectCenter.add(sizeVector)];\n};\n","import { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_IMPERATIVE,\n} from '../constants';\nimport type {\n InitializationLayoutContext,\n LayoutStrategyResult,\n StrictLayoutContext,\n} from '../types';\nimport { getObjectBounds } from './utils';\n\n/**\n * Exposes a main public method {@link calcLayoutResult} that is used by the `LayoutManager` to perform layout.\n * Returning `undefined` signals the `LayoutManager` to skip the layout.\n *\n * In charge of calculating the bounding box of the passed objects.\n */\nexport abstract class LayoutStrategy {\n /**\n * override by subclass for persistence (TS does not support `static abstract`)\n */\n static type = 'strategy';\n\n /**\n * Used by the `LayoutManager` to perform layout\n * @TODO/fix: if this method is calcResult, should calc unconditionally.\n * the condition to not calc should be evaluated by the layoutManager.\n * @returns layout result **OR** `undefined` to skip layout\n */\n public calcLayoutResult(\n context: StrictLayoutContext,\n objects: FabricObject[],\n ): LayoutStrategyResult | undefined {\n if (this.shouldPerformLayout(context)) {\n return this.calcBoundingBox(objects, context);\n }\n }\n\n shouldPerformLayout({ type, prevStrategy, strategy }: StrictLayoutContext) {\n return (\n type === LAYOUT_TYPE_INITIALIZATION ||\n type === LAYOUT_TYPE_IMPERATIVE ||\n (!!prevStrategy && strategy !== prevStrategy)\n );\n }\n\n shouldLayoutClipPath({ type, target: { clipPath } }: StrictLayoutContext) {\n return (\n type !== LAYOUT_TYPE_INITIALIZATION &&\n clipPath &&\n !clipPath.absolutePositioned\n );\n }\n\n getInitialSize(\n context: StrictLayoutContext & InitializationLayoutContext,\n result: Pick,\n ) {\n return result.size;\n }\n\n /**\n * Override this method to customize layout.\n */\n calcBoundingBox(\n objects: FabricObject[],\n context: StrictLayoutContext,\n ): LayoutStrategyResult | undefined {\n const { type, target } = context;\n if (type === LAYOUT_TYPE_IMPERATIVE && context.overrides) {\n return context.overrides;\n }\n if (objects.length === 0) {\n return;\n }\n const { left, top, width, height } = makeBoundingBoxFromPoints(\n objects\n .map((object) => getObjectBounds(target, object))\n .reduce((coords, curr) => coords.concat(curr), []),\n );\n const bboxSize = new Point(width, height);\n const bboxLeftTop = new Point(left, top);\n const bboxCenter = bboxLeftTop.add(bboxSize.scalarDivide(2));\n\n if (type === LAYOUT_TYPE_INITIALIZATION) {\n const actualSize = this.getInitialSize(context, {\n size: bboxSize,\n center: bboxCenter,\n });\n return {\n // in `initialization` we do not account for target's transformation matrix\n center: bboxCenter,\n // TODO: investigate if this is still necessary\n relativeCorrection: new Point(0, 0),\n size: actualSize,\n };\n } else {\n // we send `relativeCenter` up to group's containing plane\n const center = bboxCenter.transform(target.calcOwnMatrix());\n return {\n center,\n size: bboxSize,\n };\n }\n }\n}\n","import type { StrictLayoutContext } from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will adjust the bounding box to fit target's objects.\n */\nexport class FitContentLayout extends LayoutStrategy {\n static readonly type = 'fit-content';\n\n /**\n * @override layout on all triggers\n * Override at will\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n shouldPerformLayout(context: StrictLayoutContext) {\n return true;\n }\n}\n\nclassRegistry.setClass(FitContentLayout);\n","import { Point } from '../Point';\nimport {\n CENTER,\n CHANGED,\n MODIFIED,\n MODIFY_PATH,\n MODIFY_POLY,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n iMatrix,\n} from '../constants';\nimport type { Group } from '../shapes/Group';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { invertTransform } from '../util/misc/matrix';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { FitContentLayout } from './LayoutStrategies/FitContentLayout';\nimport type { LayoutStrategy } from './LayoutStrategies/LayoutStrategy';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_OBJECT_MODIFIED,\n LAYOUT_TYPE_OBJECT_MODIFYING,\n} from './constants';\nimport type {\n LayoutContext,\n LayoutResult,\n RegistrationContext,\n StrictLayoutContext,\n} from './types';\nimport { classRegistry } from '../ClassRegistry';\nimport type { TModificationEvents } from '../EventTypeDefs';\n\nconst LAYOUT_MANAGER = 'layoutManager';\n\nexport type SerializedLayoutManager = {\n type: string;\n strategy: string;\n};\n\nexport class LayoutManager {\n private declare _prevLayoutStrategy?: LayoutStrategy;\n protected declare _subscriptions: Map;\n\n strategy: LayoutStrategy;\n\n constructor(strategy: LayoutStrategy = new FitContentLayout()) {\n this.strategy = strategy;\n this._subscriptions = new Map();\n }\n\n public performLayout(context: LayoutContext) {\n const strictContext: StrictLayoutContext = {\n bubbles: true,\n strategy: this.strategy,\n ...context,\n prevStrategy: this._prevLayoutStrategy,\n stopPropagation() {\n this.bubbles = false;\n },\n };\n\n this.onBeforeLayout(strictContext);\n\n const layoutResult = this.getLayoutResult(strictContext);\n if (layoutResult) {\n this.commitLayout(strictContext, layoutResult);\n }\n\n this.onAfterLayout(strictContext, layoutResult);\n this._prevLayoutStrategy = strictContext.strategy;\n }\n\n /**\n * Attach handlers for events that we know will invalidate the layout when\n * performed on child objects ( general transforms ).\n * Returns the disposers for later unsubscribing and cleanup\n * @param {FabricObject} object\n * @param {RegistrationContext & Partial} context\n * @returns {VoidFunction[]} disposers remove the handlers\n */\n protected attachHandlers(\n object: FabricObject,\n context: RegistrationContext & Partial,\n ): VoidFunction[] {\n const { target } = context;\n return (\n [\n MODIFIED,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n CHANGED,\n MODIFY_POLY,\n MODIFY_PATH,\n ] as (TModificationEvents & 'modified')[]\n ).map((key) =>\n object.on(key, (e) =>\n this.performLayout(\n key === MODIFIED\n ? {\n type: LAYOUT_TYPE_OBJECT_MODIFIED,\n trigger: key,\n e,\n target,\n }\n : {\n type: LAYOUT_TYPE_OBJECT_MODIFYING,\n trigger: key,\n e,\n target,\n },\n ),\n ),\n );\n }\n\n /**\n * Subscribe an object to transform events that will trigger a layout change on the parent\n * This is important only for interactive groups.\n * @param object\n * @param context\n */\n protected subscribe(\n object: FabricObject,\n context: RegistrationContext & Partial,\n ) {\n this.unsubscribe(object, context);\n const disposers = this.attachHandlers(object, context);\n this._subscriptions.set(object, disposers);\n }\n\n /**\n * unsubscribe object layout triggers\n */\n protected unsubscribe(\n object: FabricObject,\n _context?: RegistrationContext & Partial,\n ) {\n (this._subscriptions.get(object) || []).forEach((d) => d());\n this._subscriptions.delete(object);\n }\n\n unsubscribeTargets(\n context: RegistrationContext & Partial,\n ) {\n context.targets.forEach((object) => this.unsubscribe(object, context));\n }\n\n subscribeTargets(\n context: RegistrationContext & Partial,\n ) {\n context.targets.forEach((object) => this.subscribe(object, context));\n }\n\n protected onBeforeLayout(context: StrictLayoutContext) {\n const { target, type } = context;\n const { canvas } = target;\n // handle layout triggers subscription\n // @TODO: gate the registration when the group is interactive\n if (type === LAYOUT_TYPE_INITIALIZATION || type === LAYOUT_TYPE_ADDED) {\n this.subscribeTargets(context);\n } else if (type === LAYOUT_TYPE_REMOVED) {\n this.unsubscribeTargets(context);\n }\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:before', {\n context,\n });\n canvas &&\n canvas.fire('object:layout:before', {\n target,\n context,\n });\n\n if (type === LAYOUT_TYPE_IMPERATIVE && context.deep) {\n const { strategy: _, ...tricklingContext } = context;\n // traverse the tree\n target.forEachObject(\n (object) =>\n (object as Group).layoutManager &&\n (object as Group).layoutManager.performLayout({\n ...tricklingContext,\n bubbles: false,\n target: object as Group,\n }),\n );\n }\n }\n\n protected getLayoutResult(\n context: StrictLayoutContext,\n ): Required | undefined {\n const { target, strategy, type } = context;\n\n const result = strategy.calcLayoutResult(context, target.getObjects());\n\n if (!result) {\n return;\n }\n\n const prevCenter =\n type === LAYOUT_TYPE_INITIALIZATION\n ? new Point()\n : target.getRelativeCenterPoint();\n\n const {\n center: nextCenter,\n correction = new Point(),\n relativeCorrection = new Point(),\n } = result;\n const offset = prevCenter\n .subtract(nextCenter)\n .add(correction)\n .transform(\n // in `initialization` we do not account for target's transformation matrix\n type === LAYOUT_TYPE_INITIALIZATION\n ? iMatrix\n : invertTransform(target.calcOwnMatrix()),\n true,\n )\n .add(relativeCorrection);\n\n return {\n result,\n prevCenter,\n nextCenter,\n offset,\n };\n }\n\n protected commitLayout(\n context: StrictLayoutContext,\n layoutResult: Required,\n ) {\n const { target } = context;\n const {\n result: { size },\n nextCenter,\n } = layoutResult;\n // set dimensions\n target.set({ width: size.x, height: size.y });\n // layout descendants\n this.layoutObjects(context, layoutResult);\n // set position\n // in `initialization` we do not account for target's transformation matrix\n if (context.type === LAYOUT_TYPE_INITIALIZATION) {\n // TODO: what about strokeWidth?\n target.set({\n left:\n context.x ?? nextCenter.x + size.x * resolveOrigin(target.originX),\n top: context.y ?? nextCenter.y + size.y * resolveOrigin(target.originY),\n });\n } else {\n target.setPositionByOrigin(nextCenter, CENTER, CENTER);\n // invalidate\n target.setCoords();\n target.set('dirty', true);\n }\n }\n\n protected layoutObjects(\n context: StrictLayoutContext,\n layoutResult: Required,\n ) {\n const { target } = context;\n // adjust objects to account for new center\n target.forEachObject((object) => {\n object.group === target &&\n this.layoutObject(context, layoutResult, object);\n });\n // adjust clip path to account for new center\n context.strategy.shouldLayoutClipPath(context) &&\n this.layoutObject(context, layoutResult, target.clipPath as FabricObject);\n }\n\n /**\n * @param {FabricObject} object\n * @param {Point} offset\n */\n protected layoutObject(\n context: StrictLayoutContext,\n { offset }: Required,\n object: FabricObject,\n ) {\n // TODO: this is here for cache invalidation.\n // verify if this is necessary since we have explicit\n // cache invalidation at the end of commitLayout\n object.set({\n left: object.left + offset.x,\n top: object.top + offset.y,\n });\n }\n\n protected onAfterLayout(\n context: StrictLayoutContext,\n layoutResult?: LayoutResult,\n ) {\n const {\n target,\n strategy,\n bubbles,\n prevStrategy: _,\n ...bubblingContext\n } = context;\n const { canvas } = target;\n\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:after', {\n context,\n result: layoutResult,\n });\n canvas &&\n canvas.fire('object:layout:after', {\n context,\n result: layoutResult,\n target,\n });\n\n // bubble\n const parent = target.parent;\n if (bubbles && parent?.layoutManager) {\n // add target to context#path\n (bubblingContext.path || (bubblingContext.path = [])).push(target);\n // all parents should invalidate their layout\n parent.layoutManager.performLayout({\n ...bubblingContext,\n target: parent,\n });\n }\n target.set('dirty', true);\n }\n\n dispose() {\n const { _subscriptions } = this;\n _subscriptions.forEach((disposers) => disposers.forEach((d) => d()));\n _subscriptions.clear();\n }\n\n toObject() {\n return {\n type: LAYOUT_MANAGER,\n strategy: (this.strategy.constructor as typeof LayoutStrategy).type,\n };\n }\n\n toJSON() {\n return this.toObject();\n }\n}\n\nclassRegistry.setClass(LayoutManager, LAYOUT_MANAGER);\n","import type { CollectionEvents, ObjectEvents } from '../EventTypeDefs';\nimport { createCollectionMixin } from '../Collection';\nimport type {\n TClassProperties,\n TSVGReviver,\n TOptions,\n Abortable,\n} from '../typedefs';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n} from '../util/misc/matrix';\nimport {\n enlivenObjectEnlivables,\n enlivenObjects,\n} from '../util/misc/objectEnlive';\nimport { applyTransformToObject } from '../util/misc/objectTransforms';\nimport { FabricObject } from './Object/FabricObject';\nimport { Rect } from './Rect';\nimport { classRegistry } from '../ClassRegistry';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport { log } from '../util/internals/console';\nimport type {\n ImperativeLayoutOptions,\n LayoutBeforeEvent,\n LayoutAfterEvent,\n} from '../LayoutManager/types';\nimport { LayoutManager } from '../LayoutManager/LayoutManager';\nimport {\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_REMOVED,\n} from '../LayoutManager/constants';\nimport type { SerializedLayoutManager } from '../LayoutManager/LayoutManager';\nimport type { FitContentLayout } from '../LayoutManager';\n\n/**\n * This class handles the specific case of creating a group using {@link Group#fromObject} and is not meant to be used in any other case.\n * We could have used a boolean in the constructor, as we did previously, but we think the boolean\n * would stay in the group's constructor interface and create confusion, therefore it was removed.\n * This layout manager doesn't do anything and therefore keeps the exact layout the group had when {@link Group#toObject} was called.\n */\nclass NoopLayoutManager extends LayoutManager {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n performLayout() {}\n}\n\nexport interface GroupEvents extends ObjectEvents, CollectionEvents {\n 'layout:before': LayoutBeforeEvent;\n 'layout:after': LayoutAfterEvent;\n}\n\nexport interface GroupOwnProps {\n subTargetCheck: boolean;\n interactive: boolean;\n}\n\nexport interface SerializedGroupProps\n extends SerializedObjectProps,\n GroupOwnProps {\n objects: SerializedObjectProps[];\n layoutManager: SerializedLayoutManager;\n}\n\nexport interface GroupProps extends FabricObjectProps, GroupOwnProps {\n layoutManager: LayoutManager;\n}\n\nexport const groupDefaultValues: Partial> = {\n strokeWidth: 0,\n subTargetCheck: false,\n interactive: false,\n};\n\n/**\n * @fires object:added\n * @fires object:removed\n * @fires layout:before\n * @fires layout:after\n */\nexport class Group\n extends createCollectionMixin(\n FabricObject,\n )\n implements GroupProps\n{\n /**\n * Used to optimize performance\n * set to `false` if you don't need contained objects to be targets of events\n * @default\n * @type boolean\n */\n declare subTargetCheck: boolean;\n\n /**\n * Used to allow targeting of object inside groups.\n * set to true if you want to select an object inside a group.\\\n * **REQUIRES** `subTargetCheck` set to true\n * This will be not removed but slowly replaced with a method setInteractive\n * that will take care of enabling subTargetCheck and necessary object events.\n * There is too much attached to group interactivity to just be evaluated by a\n * boolean in the code\n * @default\n * @deprecated\n * @type boolean\n */\n declare interactive: boolean;\n\n declare layoutManager: LayoutManager;\n\n /**\n * Used internally to optimize performance\n * Once an object is selected, instance is rendered without the selected object.\n * This way instance is cached only once for the entire interaction with the selected object.\n * @private\n */\n protected _activeObjects: FabricObject[] = [];\n\n static type = 'Group';\n\n static ownDefaults: Record = groupDefaultValues;\n private __objectSelectionTracker: (ev: ObjectEvents['selected']) => void;\n private __objectSelectionDisposer: (ev: ObjectEvents['deselected']) => void;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Group.ownDefaults,\n };\n }\n\n /**\n * Constructor\n *\n * @param {FabricObject[]} [objects] instance objects\n * @param {Object} [options] Options object\n */\n constructor(objects: FabricObject[] = [], options: Partial = {}) {\n super();\n Object.assign(this, Group.ownDefaults);\n this.setOptions(options);\n this.groupInit(objects, options);\n }\n\n /**\n * Shared code between group and active selection\n * Meant to be used by the constructor.\n */\n protected groupInit(\n objects: FabricObject[],\n options: {\n layoutManager?: LayoutManager;\n top?: number;\n left?: number;\n },\n ) {\n this._objects = [...objects]; // Avoid unwanted mutations of Collection to affect the caller\n\n this.__objectSelectionTracker = this.__objectSelectionMonitor.bind(\n this,\n true,\n );\n this.__objectSelectionDisposer = this.__objectSelectionMonitor.bind(\n this,\n false,\n );\n\n this.forEachObject((object) => {\n this.enterGroup(object, false);\n });\n\n // perform initial layout\n this.layoutManager = options.layoutManager ?? new LayoutManager();\n this.layoutManager.performLayout({\n type: LAYOUT_TYPE_INITIALIZATION,\n target: this,\n targets: [...objects],\n // @TODO remove this concept from the layout manager.\n // Layout manager will calculate the correct position,\n // group options can override it later.\n x: options.left,\n y: options.top,\n });\n }\n\n /**\n * Checks if object can enter group and logs relevant warnings\n * @private\n * @param {FabricObject} object\n * @returns\n */\n canEnterGroup(object: FabricObject) {\n if (object === this || this.isDescendantOf(object)) {\n // prevent circular object tree\n log(\n 'error',\n 'Group: circular object trees are not supported, this call has no effect',\n );\n return false;\n } else if (this._objects.indexOf(object) !== -1) {\n // is already in the objects array\n log(\n 'error',\n 'Group: duplicate objects are not supported inside group, this call has no effect',\n );\n return false;\n }\n return true;\n }\n\n /**\n * Override this method to enhance performance (for groups with a lot of objects).\n * If Overriding, be sure not pass illegal objects to group - it will break your app.\n * @private\n */\n protected _filterObjectsBeforeEnteringGroup(objects: FabricObject[]) {\n return objects.filter((object, index, array) => {\n // can enter AND is the first occurrence of the object in the passed args (to prevent adding duplicates)\n return this.canEnterGroup(object) && array.indexOf(object) === index;\n });\n }\n\n /**\n * Add objects\n * @param {...FabricObject[]} objects\n */\n add(...objects: FabricObject[]) {\n const allowedObjects = this._filterObjectsBeforeEnteringGroup(objects);\n const size = super.add(...allowedObjects);\n this._onAfterObjectsChange(LAYOUT_TYPE_ADDED, allowedObjects);\n return size;\n }\n\n /**\n * Inserts an object into collection at specified index\n * @param {FabricObject[]} objects Object to insert\n * @param {Number} index Index to insert object at\n */\n insertAt(index: number, ...objects: FabricObject[]) {\n const allowedObjects = this._filterObjectsBeforeEnteringGroup(objects);\n const size = super.insertAt(index, ...allowedObjects);\n this._onAfterObjectsChange(LAYOUT_TYPE_ADDED, allowedObjects);\n return size;\n }\n\n /**\n * Remove objects\n * @param {...FabricObject[]} objects\n * @returns {FabricObject[]} removed objects\n */\n remove(...objects: FabricObject[]) {\n const removed = super.remove(...objects);\n this._onAfterObjectsChange(LAYOUT_TYPE_REMOVED, removed);\n return removed;\n }\n\n _onObjectAdded(object: FabricObject) {\n this.enterGroup(object, true);\n this.fire('object:added', { target: object });\n object.fire('added', { target: this });\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n _onObjectRemoved(object: FabricObject, removeParentTransform?: boolean) {\n this.exitGroup(object, removeParentTransform);\n this.fire('object:removed', { target: object });\n object.fire('removed', { target: this });\n }\n\n /**\n * @private\n * @param {'added'|'removed'} type\n * @param {FabricObject[]} targets\n */\n _onAfterObjectsChange(type: 'added' | 'removed', targets: FabricObject[]) {\n this.layoutManager.performLayout({\n type,\n targets,\n target: this,\n });\n }\n\n _onStackOrderChanged() {\n this._set('dirty', true);\n }\n\n /**\n * @private\n * @param {string} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n const prev = this[key as keyof this];\n super._set(key, value);\n if (key === 'canvas' && prev !== value) {\n (this._objects || []).forEach((object) => {\n object._set(key, value);\n });\n }\n return this;\n }\n\n /**\n * @private\n */\n _shouldSetNestedCoords() {\n return this.subTargetCheck;\n }\n\n /**\n * Remove all objects\n * @returns {FabricObject[]} removed objects\n */\n removeAll() {\n this._activeObjects = [];\n return this.remove(...this._objects);\n }\n\n /**\n * keeps track of the selected objects\n * @private\n */\n __objectSelectionMonitor(\n selected: T,\n {\n target: object,\n }: ObjectEvents[T extends true ? 'selected' : 'deselected'],\n ) {\n const activeObjects = this._activeObjects;\n if (selected) {\n activeObjects.push(object);\n this._set('dirty', true);\n } else if (activeObjects.length > 0) {\n const index = activeObjects.indexOf(object);\n if (index > -1) {\n activeObjects.splice(index, 1);\n this._set('dirty', true);\n }\n }\n }\n\n /**\n * @private\n * @param {boolean} watch\n * @param {FabricObject} object\n */\n _watchObject(watch: boolean, object: FabricObject) {\n // make sure we listen only once\n watch && this._watchObject(false, object);\n if (watch) {\n object.on('selected', this.__objectSelectionTracker);\n object.on('deselected', this.__objectSelectionDisposer);\n } else {\n object.off('selected', this.__objectSelectionTracker);\n object.off('deselected', this.__objectSelectionDisposer);\n }\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n object.group && object.group.remove(object);\n object._set('parent', this);\n this._enterGroup(object, removeParentTransform);\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n _enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n if (removeParentTransform) {\n // can this be converted to utils (sendObjectToPlane)?\n applyTransformToObject(\n object,\n multiplyTransformMatrices(\n invertTransform(this.calcTransformMatrix()),\n object.calcTransformMatrix(),\n ),\n );\n }\n this._shouldSetNestedCoords() && object.setCoords();\n object._set('group', this);\n object._set('canvas', this.canvas);\n this._watchObject(true, object);\n const activeObject =\n this.canvas &&\n this.canvas.getActiveObject &&\n this.canvas.getActiveObject();\n // if we are adding the activeObject in a group\n if (\n activeObject &&\n (activeObject === object || object.isDescendantOf(activeObject))\n ) {\n this._activeObjects.push(object);\n }\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n this._exitGroup(object, removeParentTransform);\n object._set('parent', undefined);\n object._set('canvas', undefined);\n }\n\n /**\n * Executes the inner fabric logic of exiting a group.\n * - Stop watching the object\n * - Remove the object from the optimization map this._activeObjects\n * - unset the group property of the object\n * @protected\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n _exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n object._set('group', undefined);\n if (!removeParentTransform) {\n applyTransformToObject(\n object,\n multiplyTransformMatrices(\n this.calcTransformMatrix(),\n object.calcTransformMatrix(),\n ),\n );\n object.setCoords();\n }\n this._watchObject(false, object);\n const index =\n this._activeObjects.length > 0 ? this._activeObjects.indexOf(object) : -1;\n if (index > -1) {\n this._activeObjects.splice(index, 1);\n }\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group is already cached.\n * @return {Boolean}\n */\n shouldCache() {\n const ownCache = FabricObject.prototype.shouldCache.call(this);\n if (ownCache) {\n for (let i = 0; i < this._objects.length; i++) {\n if (this._objects[i].willDrawShadow()) {\n this.ownCaching = false;\n return false;\n }\n }\n }\n return ownCache;\n }\n\n /**\n * Check if this object or a child object will cast a shadow\n * @return {Boolean}\n */\n willDrawShadow() {\n if (super.willDrawShadow()) {\n return true;\n }\n for (let i = 0; i < this._objects.length; i++) {\n if (this._objects[i].willDrawShadow()) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Check if instance or its group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache(): boolean {\n return this.ownCaching || (!!this.parent && this.parent.isOnACache());\n }\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawObject(ctx: CanvasRenderingContext2D) {\n this._renderBackground(ctx);\n for (let i = 0; i < this._objects.length; i++) {\n // TODO: handle rendering edge case somehow\n if (\n this.canvas?.preserveObjectStacking &&\n this._objects[i].group !== this\n ) {\n ctx.save();\n ctx.transform(...invertTransform(this.calcTransformMatrix()));\n this._objects[i].render(ctx);\n ctx.restore();\n } else if (this._objects[i].group === this) {\n this._objects[i].render(ctx);\n }\n }\n this._drawClipPath(ctx, this.clipPath);\n }\n\n /**\n * @override\n * @return {Boolean}\n */\n setCoords() {\n super.setCoords();\n this._shouldSetNestedCoords() &&\n this.forEachObject((object) => object.setCoords());\n }\n\n triggerLayout(options: ImperativeLayoutOptions = {}) {\n this.layoutManager.performLayout({\n target: this,\n type: LAYOUT_TYPE_IMPERATIVE,\n ...options,\n });\n }\n\n /**\n * Renders instance on a given context\n * @param {CanvasRenderingContext2D} ctx context to render instance on\n */\n render(ctx: CanvasRenderingContext2D) {\n this._transformDone = true;\n super.render(ctx);\n this._transformDone = false;\n }\n\n /**\n *\n * @private\n * @param {'toObject'|'toDatalessObject'} [method]\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @returns {FabricObject[]} serialized objects\n */\n __serializeObjects(\n method: 'toObject' | 'toDatalessObject',\n propertiesToInclude?: string[],\n ) {\n const _includeDefaultValues = this.includeDefaultValues;\n return this._objects\n .filter(function (obj) {\n return !obj.excludeFromExport;\n })\n .map(function (obj) {\n const originalDefaults = obj.includeDefaultValues;\n obj.includeDefaultValues = _includeDefaultValues;\n const data = obj[method || 'toObject'](propertiesToInclude);\n obj.includeDefaultValues = originalDefaults;\n // delete data.version;\n return data;\n });\n }\n\n /**\n * Returns object representation of an instance\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit<\n GroupProps & TClassProperties,\n keyof SerializedGroupProps\n >,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SerializedGroupProps {\n const layoutManager = this.layoutManager.toObject();\n\n return {\n ...super.toObject([\n 'subTargetCheck',\n 'interactive',\n ...propertiesToInclude,\n ]),\n ...(layoutManager.strategy !== 'fit-content' || this.includeDefaultValues\n ? { layoutManager }\n : {}),\n objects: this.__serializeObjects(\n 'toObject',\n propertiesToInclude as string[],\n ),\n };\n }\n\n toString() {\n return `#`;\n }\n\n dispose() {\n this.layoutManager.unsubscribeTargets({\n targets: this.getObjects(),\n target: this,\n });\n this._activeObjects = [];\n this.forEachObject((object) => {\n this._watchObject(false, object);\n object.dispose();\n });\n super.dispose();\n }\n\n /**\n * @private\n */\n _createSVGBgRect(reviver?: TSVGReviver) {\n if (!this.backgroundColor) {\n return '';\n }\n const fillStroke = Rect.prototype._toSVG.call(this);\n const commons = fillStroke.indexOf('COMMON_PARTS');\n fillStroke[commons] = 'for=\"group\" ';\n const markup = fillStroke.join('');\n return reviver ? reviver(markup) : markup;\n }\n\n /**\n * Returns svg representation of an instance\n * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n _toSVG(reviver?: TSVGReviver) {\n const svgString = ['\\n'];\n const bg = this._createSVGBgRect(reviver);\n bg && svgString.push('\\t\\t', bg);\n for (let i = 0; i < this._objects.length; i++) {\n svgString.push('\\t\\t', this._objects[i].toSVG(reviver));\n }\n svgString.push('\\n');\n return svgString;\n }\n\n /**\n * Returns styles-string for svg-export, specific version for group\n * @return {String}\n */\n getSvgStyles(): string {\n const opacity =\n typeof this.opacity !== 'undefined' && this.opacity !== 1\n ? `opacity: ${this.opacity};`\n : '',\n visibility = this.visible ? '' : ' visibility: hidden;';\n return [opacity, this.getSvgFilter(), visibility].join('');\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG(reviver?: TSVGReviver): string {\n const svgString = [];\n const bg = this._createSVGBgRect(reviver);\n bg && svgString.push('\\t', bg);\n for (let i = 0; i < this._objects.length; i++) {\n svgString.push('\\t', this._objects[i].toClipPathSVG(reviver));\n }\n return this._createBaseClipPathSVGMarkup(svgString, {\n reviver,\n });\n }\n\n /**\n * @todo support loading from svg\n * @private\n * @static\n * @memberOf Group\n * @param {Object} object Object to create a group from\n * @returns {Promise}\n */\n static fromObject>(\n { type, objects = [], layoutManager, ...options }: T,\n abortable?: Abortable,\n ) {\n return Promise.all([\n enlivenObjects(objects, abortable),\n enlivenObjectEnlivables(options, abortable),\n ]).then(([objects, hydratedOptions]) => {\n const group = new this(objects, {\n ...options,\n ...hydratedOptions,\n layoutManager: new NoopLayoutManager(),\n });\n if (layoutManager) {\n const layoutClass = classRegistry.getClass(\n layoutManager.type,\n );\n const strategyClass = classRegistry.getClass(\n layoutManager.strategy,\n );\n group.layoutManager = new layoutClass(new strategyClass());\n } else {\n group.layoutManager = new LayoutManager();\n }\n group.layoutManager.subscribeTargets({\n type: LAYOUT_TYPE_INITIALIZATION,\n target: group,\n targets: group.getObjects(),\n });\n group.setCoords();\n return group;\n });\n }\n}\n\nclassRegistry.setClass(Group);\n","import type { GroupProps } from '../../shapes/Group';\nimport { Group } from '../../shapes/Group';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\n\n/**\n * TODO experiment with different layout manager and svg results ( fixed fit content )\n * Groups SVG elements (usually those retrieved from SVG document)\n * @static\n * @param {FabricObject[]} elements FabricObject(s) parsed from svg, to group\n * @return {FabricObject | Group}\n */\nexport const groupSVGElements = (\n elements: FabricObject[],\n options?: Partial,\n) => {\n if (elements && elements.length === 1) {\n return elements[0];\n }\n return new Group(elements, options);\n};\n","import type { TSize } from '../../typedefs';\n\n/**\n * Finds the scale for the object source to fit inside the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @param {TSize} source natural unscaled size of the object\n * @param {TSize} destination natural unscaled size of the object\n * @return {Number} scale factor to apply to source to fit into destination\n */\nexport const findScaleToFit = (source: TSize, destination: TSize) =>\n Math.min(\n destination.width / source.width,\n destination.height / source.height,\n );\n\n/**\n * Finds the scale for the object source to cover entirely the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @param {TSize} source natural unscaled size of the object\n * @param {TSize} destination natural unscaled size of the object\n * @return {Number} scale factor to apply to source to cover destination\n */\nexport const findScaleToCover = (source: TSize, destination: TSize) =>\n Math.max(\n destination.width / source.width,\n destination.height / source.height,\n );\n","import { reNum } from '../../parser/constants';\n\nconst commaWsp = `\\\\s*,?\\\\s*`;\n\n/**\n * p for param\n * using \"bad naming\" here because it makes the regex much easier to read\n * p is a number that is preceded by an arbitary number of spaces, maybe 0,\n * a comma or not, and then possibly more spaces or not.\n */\nconst p = `${commaWsp}(${reNum})`;\n\n// const reMoveToCommand = `(M) ?(?:${p}${p} ?)+`;\n\n// const reLineCommand = `(L) ?(?:${p}${p} ?)+`;\n\n// const reHorizontalLineCommand = `(H) ?(?:${p} ?)+`;\n\n// const reVerticalLineCommand = `(V) ?(?:${p} ?)+`;\n\n// const reClosePathCommand = String.raw`(Z)\\s*`;\n\n// const reCubicCurveCommand = `(C) ?(?:${p}${p}${p}${p}${p}${p} ?)+`;\n\n// const reCubicCurveShortcutCommand = `(S) ?(?:${p}${p}${p}${p} ?)+`;\n\n// const reQuadraticCurveCommand = `(Q) ?(?:${p}${p}${p}${p} ?)+`;\n\n// const reQuadraticCurveShortcutCommand = `(T) ?(?:${p}${p} ?)+`;\n\nexport const reArcCommandPoints = `${p}${p}${p}${commaWsp}([01])${commaWsp}([01])${p}${p}`;\n// const reArcCommand = `(A) ?(?:${reArcCommandPoints} ?)+`;\n\n// export const rePathCommandGroups =\n// `(?:(?:${reMoveToCommand})` +\n// `|(?:${reLineCommand})` +\n// `|(?:${reHorizontalLineCommand})` +\n// `|(?:${reVerticalLineCommand})` +\n// `|(?:${reClosePathCommand})` +\n// `|(?:${reCubicCurveCommand})` +\n// `|(?:${reCubicCurveShortcutCommand})` +\n// `|(?:${reQuadraticCurveCommand})` +\n// `|(?:${reQuadraticCurveShortcutCommand})` +\n// `|(?:${reArcCommand}))`;\n\nexport const rePathCommand = '[mzlhvcsqta][^mzlhvcsqta]*';\n","import { cache } from '../../cache';\nimport { config } from '../../config';\nimport { halfPI, PiBy180 } from '../../constants';\nimport type { TMat2D, TRadian, TRectBounds } from '../../typedefs';\nimport { cos } from '../misc/cos';\nimport { multiplyTransformMatrices, transformPoint } from '../misc/matrix';\nimport { sin } from '../misc/sin';\nimport { toFixed } from '../misc/toFixed';\nimport type {\n TCurveInfo,\n TComplexPathData,\n TParsedAbsoluteCubicCurveCommand,\n TPathSegmentInfo,\n TPointAngle,\n TSimpleParsedCommand,\n TSimplePathData,\n TPathSegmentCommandInfo,\n TComplexParsedCommand,\n TPathSegmentInfoCommon,\n TEndPathInfo,\n TParsedArcCommand,\n TComplexParsedCommandType,\n} from './typedefs';\nimport type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport { reArcCommandPoints, rePathCommand } from './regex';\nimport { reNum } from '../../parser/constants';\n\n/**\n * Commands that may be repeated\n */\nconst repeatedCommands: Record = {\n m: 'l',\n M: 'L',\n};\n\n/**\n * Convert an arc of a rotated ellipse to a Bezier Curve\n * @param {TRadian} theta1 start of the arc\n * @param {TRadian} theta2 end of the arc\n * @param cosTh cosine of the angle of rotation\n * @param sinTh sine of the angle of rotation\n * @param rx x-axis radius (before rotation)\n * @param ry y-axis radius (before rotation)\n * @param cx1 center x of the ellipse\n * @param cy1 center y of the ellipse\n * @param mT\n * @param fromX starting point of arc x\n * @param fromY starting point of arc y\n */\nconst segmentToBezier = (\n theta1: TRadian,\n theta2: TRadian,\n cosTh: number,\n sinTh: number,\n rx: number,\n ry: number,\n cx1: number,\n cy1: number,\n mT: number,\n fromX: number,\n fromY: number,\n): TParsedAbsoluteCubicCurveCommand => {\n const costh1 = cos(theta1),\n sinth1 = sin(theta1),\n costh2 = cos(theta2),\n sinth2 = sin(theta2),\n toX = cosTh * rx * costh2 - sinTh * ry * sinth2 + cx1,\n toY = sinTh * rx * costh2 + cosTh * ry * sinth2 + cy1,\n cp1X = fromX + mT * (-cosTh * rx * sinth1 - sinTh * ry * costh1),\n cp1Y = fromY + mT * (-sinTh * rx * sinth1 + cosTh * ry * costh1),\n cp2X = toX + mT * (cosTh * rx * sinth2 + sinTh * ry * costh2),\n cp2Y = toY + mT * (sinTh * rx * sinth2 - cosTh * ry * costh2);\n\n return ['C', cp1X, cp1Y, cp2X, cp2Y, toX, toY];\n};\n\n/**\n * Adapted from {@link http://dxr.mozilla.org/mozilla-central/source/dom/svg/SVGPathDataParser.cpp}\n * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here\n * http://mozilla.org/MPL/2.0/\n * @param toX\n * @param toY\n * @param rx\n * @param ry\n * @param {number} large 0 or 1 flag\n * @param {number} sweep 0 or 1 flag\n * @param rotateX\n */\nconst arcToSegments = (\n toX: number,\n toY: number,\n rx: number,\n ry: number,\n large: number,\n sweep: number,\n rotateX: TRadian,\n): TParsedAbsoluteCubicCurveCommand[] => {\n if (rx === 0 || ry === 0) {\n return [];\n }\n let fromX = 0,\n fromY = 0,\n root = 0;\n const PI = Math.PI,\n theta = rotateX * PiBy180,\n sinTheta = sin(theta),\n cosTh = cos(theta),\n px = 0.5 * (-cosTh * toX - sinTheta * toY),\n py = 0.5 * (-cosTh * toY + sinTheta * toX),\n rx2 = rx ** 2,\n ry2 = ry ** 2,\n py2 = py ** 2,\n px2 = px ** 2,\n pl = rx2 * ry2 - rx2 * py2 - ry2 * px2;\n let _rx = Math.abs(rx);\n let _ry = Math.abs(ry);\n\n if (pl < 0) {\n const s = Math.sqrt(1 - pl / (rx2 * ry2));\n _rx *= s;\n _ry *= s;\n } else {\n root =\n (large === sweep ? -1.0 : 1.0) * Math.sqrt(pl / (rx2 * py2 + ry2 * px2));\n }\n\n const cx = (root * _rx * py) / _ry,\n cy = (-root * _ry * px) / _rx,\n cx1 = cosTh * cx - sinTheta * cy + toX * 0.5,\n cy1 = sinTheta * cx + cosTh * cy + toY * 0.5;\n let mTheta = calcVectorAngle(1, 0, (px - cx) / _rx, (py - cy) / _ry);\n let dtheta = calcVectorAngle(\n (px - cx) / _rx,\n (py - cy) / _ry,\n (-px - cx) / _rx,\n (-py - cy) / _ry,\n );\n\n if (sweep === 0 && dtheta > 0) {\n dtheta -= 2 * PI;\n } else if (sweep === 1 && dtheta < 0) {\n dtheta += 2 * PI;\n }\n\n // Convert into cubic bezier segments <= 90deg\n const segments = Math.ceil(Math.abs((dtheta / PI) * 2)),\n result = [],\n mDelta = dtheta / segments,\n mT =\n ((8 / 3) * Math.sin(mDelta / 4) * Math.sin(mDelta / 4)) /\n Math.sin(mDelta / 2);\n let th3 = mTheta + mDelta;\n\n for (let i = 0; i < segments; i++) {\n result[i] = segmentToBezier(\n mTheta,\n th3,\n cosTh,\n sinTheta,\n _rx,\n _ry,\n cx1,\n cy1,\n mT,\n fromX,\n fromY,\n );\n fromX = result[i][5];\n fromY = result[i][6];\n mTheta = th3;\n th3 += mDelta;\n }\n return result;\n};\n\n/**\n * @private\n * Calculate the angle between two vectors\n * @param ux u endpoint x\n * @param uy u endpoint y\n * @param vx v endpoint x\n * @param vy v endpoint y\n */\nconst calcVectorAngle = (\n ux: number,\n uy: number,\n vx: number,\n vy: number,\n): TRadian => {\n const ta = Math.atan2(uy, ux),\n tb = Math.atan2(vy, vx);\n if (tb >= ta) {\n return tb - ta;\n } else {\n return 2 * Math.PI - (ta - tb);\n }\n};\n\n// functions for the Cubic beizer\n// taken from: https://github.com/konvajs/konva/blob/7.0.5/src/shapes/Path.ts#L350\nconst CB1 = (t: number) => t ** 3;\nconst CB2 = (t: number) => 3 * t ** 2 * (1 - t);\nconst CB3 = (t: number) => 3 * t * (1 - t) ** 2;\nconst CB4 = (t: number) => (1 - t) ** 3;\n\n/**\n * Calculate bounding box of a cubic Bezier curve\n * Taken from http://jsbin.com/ivomiq/56/edit (no credits available)\n * TODO: can we normalize this with the starting points set at 0 and then translated the bbox?\n * @param {number} begx starting point\n * @param {number} begy\n * @param {number} cp1x first control point\n * @param {number} cp1y\n * @param {number} cp2x second control point\n * @param {number} cp2y\n * @param {number} endx end of bezier\n * @param {number} endy\n * @return {TRectBounds} the rectangular bounds\n */\nexport function getBoundsOfCurve(\n begx: number,\n begy: number,\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n endx: number,\n endy: number,\n): TRectBounds {\n let argsString: string;\n if (config.cachesBoundsOfCurve) {\n // eslint-disable-next-line\n argsString = [...arguments].join();\n if (cache.boundsOfCurveCache[argsString]) {\n return cache.boundsOfCurveCache[argsString];\n }\n }\n\n const sqrt = Math.sqrt,\n abs = Math.abs,\n tvalues = [],\n bounds: [[x: number, y: number], [x: number, y: number]] = [\n [0, 0],\n [0, 0],\n ];\n\n let b = 6 * begx - 12 * cp1x + 6 * cp2x;\n let a = -3 * begx + 9 * cp1x - 9 * cp2x + 3 * endx;\n let c = 3 * cp1x - 3 * begx;\n\n for (let i = 0; i < 2; ++i) {\n if (i > 0) {\n b = 6 * begy - 12 * cp1y + 6 * cp2y;\n a = -3 * begy + 9 * cp1y - 9 * cp2y + 3 * endy;\n c = 3 * cp1y - 3 * begy;\n }\n\n if (abs(a) < 1e-12) {\n if (abs(b) < 1e-12) {\n continue;\n }\n const t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n const b2ac = b * b - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n const sqrtb2ac = sqrt(b2ac);\n const t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n const t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n let j = tvalues.length;\n const jlen = j;\n const iterator = getPointOnCubicBezierIterator(\n begx,\n begy,\n cp1x,\n cp1y,\n cp2x,\n cp2y,\n endx,\n endy,\n );\n while (j--) {\n const { x, y } = iterator(tvalues[j]);\n bounds[0][j] = x;\n bounds[1][j] = y;\n }\n\n bounds[0][jlen] = begx;\n bounds[1][jlen] = begy;\n bounds[0][jlen + 1] = endx;\n bounds[1][jlen + 1] = endy;\n const result: TRectBounds = [\n new Point(Math.min(...bounds[0]), Math.min(...bounds[1])),\n new Point(Math.max(...bounds[0]), Math.max(...bounds[1])),\n ];\n if (config.cachesBoundsOfCurve) {\n cache.boundsOfCurveCache[argsString!] = result;\n }\n return result;\n}\n\n/**\n * Converts arc to a bunch of cubic Bezier curves\n * @param {number} fx starting point x\n * @param {number} fy starting point y\n * @param {TParsedArcCommand} coords Arc command\n */\nexport const fromArcToBeziers = (\n fx: number,\n fy: number,\n [_, rx, ry, rot, large, sweep, tx, ty]: TParsedArcCommand,\n): TParsedAbsoluteCubicCurveCommand[] => {\n const segsNorm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\n\n for (let i = 0, len = segsNorm.length; i < len; i++) {\n segsNorm[i][1] += fx;\n segsNorm[i][2] += fy;\n segsNorm[i][3] += fx;\n segsNorm[i][4] += fy;\n segsNorm[i][5] += fx;\n segsNorm[i][6] += fy;\n }\n return segsNorm;\n};\n\n/**\n * This function takes a parsed SVG path and makes it simpler for fabricJS logic.\n * Simplification consist of:\n * - All commands converted to absolute (lowercase to uppercase)\n * - S converted to C\n * - T converted to Q\n * - A converted to C\n * @param {TComplexPathData} path the array of commands of a parsed SVG path for `Path`\n * @return {TSimplePathData} the simplified array of commands of a parsed SVG path for `Path`\n * TODO: figure out how to remove the type assertions in a nice way\n */\nexport const makePathSimpler = (path: TComplexPathData): TSimplePathData => {\n // x and y represent the last point of the path, AKA the previous command point.\n // we add them to each relative command to make it an absolute comment.\n // we also swap the v V h H with L, because are easier to transform.\n let x = 0,\n y = 0;\n // x1 and y1 represent the last point of the subpath. the subpath is started with\n // m or M command. When a z or Z command is drawn, x and y need to be resetted to\n // the last x1 and y1.\n let x1 = 0,\n y1 = 0;\n // previous will host the letter of the previous command, to handle S and T.\n // controlX and controlY will host the previous reflected control point\n const destinationPath: TSimplePathData = [];\n let previous,\n // placeholders\n controlX = 0,\n controlY = 0;\n for (const parsedCommand of path) {\n const current: TComplexParsedCommand = [...parsedCommand];\n let converted: TSimpleParsedCommand | undefined;\n switch (\n current[0] // first letter\n ) {\n case 'l': // lineto, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'L':\n x = current[1];\n y = current[2];\n converted = ['L', x, y];\n break;\n case 'h': // horizontal lineto, relative\n current[1] += x;\n // falls through\n case 'H':\n x = current[1];\n converted = ['L', x, y];\n break;\n case 'v': // vertical lineto, relative\n current[1] += y;\n // falls through\n case 'V':\n y = current[1];\n converted = ['L', x, y];\n break;\n case 'm': // moveTo, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'M':\n x = current[1];\n y = current[2];\n x1 = current[1];\n y1 = current[2];\n converted = ['M', x, y];\n break;\n case 'c': // bezierCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n current[5] += x;\n current[6] += y;\n // falls through\n case 'C':\n controlX = current[3];\n controlY = current[4];\n x = current[5];\n y = current[6];\n converted = ['C', current[1], current[2], controlX, controlY, x, y];\n break;\n case 's': // shorthand cubic bezierCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'S':\n // would be sScC but since we are swapping sSc for C, we check just that.\n if (previous === 'C') {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n } else {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n x = current[3];\n y = current[4];\n converted = ['C', controlX, controlY, current[1], current[2], x, y];\n // converted[3] and converted[4] are NOW the second control point.\n // we keep it for the next reflection.\n controlX = converted[3];\n controlY = converted[4];\n break;\n case 'q': // quadraticCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'Q':\n controlX = current[1];\n controlY = current[2];\n x = current[3];\n y = current[4];\n converted = ['Q', controlX, controlY, x, y];\n break;\n case 't': // shorthand quadraticCurveTo, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'T':\n if (previous === 'Q') {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n } else {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n x = current[1];\n y = current[2];\n converted = ['Q', controlX, controlY, x, y];\n break;\n case 'a':\n current[6] += x;\n current[7] += y;\n // falls through\n case 'A':\n fromArcToBeziers(x, y, current).forEach((b) => destinationPath.push(b));\n x = current[6];\n y = current[7];\n break;\n case 'z':\n case 'Z':\n x = x1;\n y = y1;\n converted = ['Z'];\n break;\n default:\n }\n if (converted) {\n destinationPath.push(converted);\n previous = converted[0];\n } else {\n previous = '';\n }\n }\n return destinationPath;\n};\n\n// todo verify if we can just use the point class here\n/**\n * Calc length from point x1,y1 to x2,y2\n * @param {number} x1 starting point x\n * @param {number} y1 starting point y\n * @param {number} x2 starting point x\n * @param {number} y2 starting point y\n * @return {number} length of segment\n */\nconst calcLineLength = (\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n): number => Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n\n/**\n * Get an iterator that takes a percentage and returns a point\n * @param {number} begx\n * @param {number} begy\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} endx\n * @param {number} endy\n */\nconst getPointOnCubicBezierIterator =\n (\n begx: number,\n begy: number,\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n endx: number,\n endy: number,\n ) =>\n (pct: number) => {\n const c1 = CB1(pct),\n c2 = CB2(pct),\n c3 = CB3(pct),\n c4 = CB4(pct);\n return new Point(\n endx * c1 + cp2x * c2 + cp1x * c3 + begx * c4,\n endy * c1 + cp2y * c2 + cp1y * c3 + begy * c4,\n );\n };\n\nconst QB1 = (t: number) => t ** 2;\nconst QB2 = (t: number) => 2 * t * (1 - t);\nconst QB3 = (t: number) => (1 - t) ** 2;\n\nconst getTangentCubicIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n p4x: number,\n p4y: number,\n ) =>\n (pct: number) => {\n const qb1 = QB1(pct),\n qb2 = QB2(pct),\n qb3 = QB3(pct),\n tangentX =\n 3 * (qb3 * (p2x - p1x) + qb2 * (p3x - p2x) + qb1 * (p4x - p3x)),\n tangentY =\n 3 * (qb3 * (p2y - p1y) + qb2 * (p3y - p2y) + qb1 * (p4y - p3y));\n return Math.atan2(tangentY, tangentX);\n };\n\nconst getPointOnQuadraticBezierIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n ) =>\n (pct: number) => {\n const c1 = QB1(pct),\n c2 = QB2(pct),\n c3 = QB3(pct);\n return new Point(\n p3x * c1 + p2x * c2 + p1x * c3,\n p3y * c1 + p2y * c2 + p1y * c3,\n );\n };\n\nconst getTangentQuadraticIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n ) =>\n (pct: number) => {\n const invT = 1 - pct,\n tangentX = 2 * (invT * (p2x - p1x) + pct * (p3x - p2x)),\n tangentY = 2 * (invT * (p2y - p1y) + pct * (p3y - p2y));\n return Math.atan2(tangentY, tangentX);\n };\n\n// this will run over a path segment (a cubic or quadratic segment) and approximate it\n// with 100 segments. This will good enough to calculate the length of the curve\nconst pathIterator = (\n iterator: (pct: number) => Point,\n x1: number,\n y1: number,\n) => {\n let tempP = new Point(x1, y1),\n tmpLen = 0;\n for (let perc = 1; perc <= 100; perc += 1) {\n const p = iterator(perc / 100);\n tmpLen += calcLineLength(tempP.x, tempP.y, p.x, p.y);\n tempP = p;\n }\n return tmpLen;\n};\n\n/**\n * Given a pathInfo, and a distance in pixels, find the percentage from 0 to 1\n * that correspond to that pixels run over the path.\n * The percentage will be then used to find the correct point on the canvas for the path.\n * @param {Array} segInfo fabricJS collection of information on a parsed path\n * @param {number} distance from starting point, in pixels.\n * @return {TPointAngle} info object with x and y ( the point on canvas ) and angle, the tangent on that point;\n */\nconst findPercentageForDistance = (\n segInfo: TCurveInfo<'Q' | 'C'>,\n distance: number,\n): TPointAngle => {\n let perc = 0,\n tmpLen = 0,\n tempP: XY = { x: segInfo.x, y: segInfo.y },\n p: XY = { ...tempP },\n nextLen: number,\n nextStep = 0.01,\n lastPerc = 0;\n // nextStep > 0.0001 covers 0.00015625 that 1/64th of 1/100\n // the path\n const iterator = segInfo.iterator,\n angleFinder = segInfo.angleFinder;\n while (tmpLen < distance && nextStep > 0.0001) {\n p = iterator(perc);\n lastPerc = perc;\n nextLen = calcLineLength(tempP.x, tempP.y, p.x, p.y);\n // compare tmpLen each cycle with distance, decide next perc to test.\n if (nextLen + tmpLen > distance) {\n // we discard this step and we make smaller steps.\n perc -= nextStep;\n nextStep /= 2;\n } else {\n tempP = p;\n perc += nextStep;\n tmpLen += nextLen;\n }\n }\n return { ...p, angle: angleFinder(lastPerc) };\n};\n\n/**\n * Run over a parsed and simplified path and extract some information (length of each command and starting point)\n * @param {TSimplePathData} path parsed path commands\n * @return {TPathSegmentInfo[]} path commands information\n */\nexport const getPathSegmentsInfo = (\n path: TSimplePathData,\n): TPathSegmentInfo[] => {\n let totalLength = 0,\n //x2 and y2 are the coords of segment start\n //x1 and y1 are the coords of the current point\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n iterator,\n tempInfo: TPathSegmentInfo;\n const info: TPathSegmentInfo[] = [];\n for (const current of path) {\n const basicInfo: TPathSegmentInfoCommon = {\n x: x1,\n y: y1,\n command: current[0],\n length: 0,\n };\n switch (\n current[0] //first letter\n ) {\n case 'M':\n tempInfo = >basicInfo;\n tempInfo.x = x2 = x1 = current[1];\n tempInfo.y = y2 = y1 = current[2];\n break;\n case 'L':\n tempInfo = >basicInfo;\n tempInfo.length = calcLineLength(x1, y1, current[1], current[2]);\n x1 = current[1];\n y1 = current[2];\n break;\n case 'C':\n iterator = getPointOnCubicBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6],\n );\n tempInfo = >basicInfo;\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = getTangentCubicIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6],\n );\n tempInfo.length = pathIterator(iterator, x1, y1);\n\n x1 = current[5];\n y1 = current[6];\n break;\n case 'Q':\n iterator = getPointOnQuadraticBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n );\n tempInfo = >basicInfo;\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = getTangentQuadraticIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n );\n tempInfo.length = pathIterator(iterator, x1, y1);\n x1 = current[3];\n y1 = current[4];\n break;\n case 'Z':\n // we add those in order to ease calculations later\n tempInfo = basicInfo;\n tempInfo.destX = x2;\n tempInfo.destY = y2;\n tempInfo.length = calcLineLength(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n break;\n }\n totalLength += tempInfo.length;\n info.push(tempInfo);\n }\n info.push({ length: totalLength, x: x1, y: y1 });\n return info;\n};\n\n/**\n * Get the point on the path that is distance along the path\n * @param path\n * @param distance\n * @param infos\n */\nexport const getPointOnPath = (\n path: TSimplePathData,\n distance: number,\n infos: TPathSegmentInfo[] = getPathSegmentsInfo(path),\n): TPointAngle | undefined => {\n let i = 0;\n while (distance - infos[i].length > 0 && i < infos.length - 2) {\n distance -= infos[i].length;\n i++;\n }\n const segInfo = infos[i],\n segPercent = distance / segInfo.length,\n segment = path[i];\n\n switch (segInfo.command) {\n case 'M':\n return { x: segInfo.x, y: segInfo.y, angle: 0 };\n case 'Z':\n return {\n ...new Point(segInfo.x, segInfo.y).lerp(\n new Point(segInfo.destX, segInfo.destY),\n segPercent,\n ),\n angle: Math.atan2(segInfo.destY - segInfo.y, segInfo.destX - segInfo.x),\n };\n case 'L':\n return {\n ...new Point(segInfo.x, segInfo.y).lerp(\n new Point(segment[1]!, segment[2]!),\n segPercent,\n ),\n angle: Math.atan2(segment[2]! - segInfo.y, segment[1]! - segInfo.x),\n };\n case 'C':\n return findPercentageForDistance(segInfo, distance);\n case 'Q':\n return findPercentageForDistance(segInfo, distance);\n default:\n // throw Error('Invalid command');\n }\n};\n\nconst rePathCmdAll = new RegExp(rePathCommand, 'gi');\nconst regExpArcCommandPoints = new RegExp(reArcCommandPoints, 'g');\nconst reMyNum = new RegExp(reNum, 'gi');\nconst commandLengths = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7,\n} as const;\n/**\n *\n * @param {string} pathString\n * @return {TComplexPathData} An array of SVG path commands\n * @example Usage\n * parsePath('M 3 4 Q 3 5 2 1 4 0 Q 9 12 2 1 4 0') === [\n * ['M', 3, 4],\n * ['Q', 3, 5, 2, 1, 4, 0],\n * ['Q', 9, 12, 2, 1, 4, 0],\n * ];\n */\nexport const parsePath = (pathString: string): TComplexPathData => {\n const chain: TComplexPathData = [];\n const all = pathString.match(rePathCmdAll) ?? [];\n for (const matchStr of all) {\n // take match string and save the first letter as the command\n const commandLetter = matchStr[0] as TComplexParsedCommandType;\n // in case of Z we have very little to do\n if (commandLetter === 'z' || commandLetter === 'Z') {\n chain.push([commandLetter]);\n continue;\n }\n const commandLength =\n commandLengths[\n commandLetter.toLowerCase() as keyof typeof commandLengths\n ];\n\n let paramArr = [];\n if (commandLetter === 'a' || commandLetter === 'A') {\n // the arc command ha some peculariaties that requires a special regex other than numbers\n // it is possible to avoid using a space between the sweep and large arc flags, making them either\n // 00, 01, 10 or 11, making them identical to a plain number for the regex reMyNum\n // reset the regexp\n regExpArcCommandPoints.lastIndex = 0;\n for (let out = null; (out = regExpArcCommandPoints.exec(matchStr)); ) {\n paramArr.push(...out.slice(1));\n }\n } else {\n paramArr = matchStr.match(reMyNum) || [];\n }\n\n // inspect the length of paramArr, if is longer than commandLength\n // we are dealing with repeated commands\n for (let i = 0; i < paramArr.length; i += commandLength) {\n const newCommand = new Array(commandLength) as TComplexParsedCommand;\n const transformedCommand = repeatedCommands[commandLetter];\n newCommand[0] =\n i > 0 && transformedCommand ? transformedCommand : commandLetter;\n for (let j = 0; j < commandLength; j++) {\n newCommand[j + 1] = parseFloat(paramArr[i + j]);\n }\n chain.push(newCommand);\n }\n }\n return chain;\n};\n\n/**\n *\n * Converts points to a smooth SVG path\n * @param {XY[]} points Array of points\n * @param {number} [correction] Apply a correction to the path (usually we use `width / 1000`). If value is undefined 0 is used as the correction value.\n * @return {(string|number)[][]} An array of SVG path commands\n */\nexport const getSmoothPathFromPoints = (\n points: Point[],\n correction = 0,\n): TSimplePathData => {\n let p1 = new Point(points[0]),\n p2 = new Point(points[1]),\n multSignX = 1,\n multSignY = 0;\n const path: TSimplePathData = [],\n len = points.length,\n manyPoints = len > 2;\n\n if (manyPoints) {\n multSignX = points[2].x < p2.x ? -1 : points[2].x === p2.x ? 0 : 1;\n multSignY = points[2].y < p2.y ? -1 : points[2].y === p2.y ? 0 : 1;\n }\n path.push([\n 'M',\n p1.x - multSignX * correction,\n p1.y - multSignY * correction,\n ]);\n let i;\n for (i = 1; i < len; i++) {\n if (!p1.eq(p2)) {\n const midPoint = p1.midPointFrom(p2);\n // p1 is our bezier control point\n // midpoint is our endpoint\n // start point is p(i-1) value.\n path.push(['Q', p1.x, p1.y, midPoint.x, midPoint.y]);\n }\n p1 = points[i];\n if (i + 1 < points.length) {\n p2 = points[i + 1];\n }\n }\n if (manyPoints) {\n multSignX = p1.x > points[i - 2].x ? 1 : p1.x === points[i - 2].x ? 0 : -1;\n multSignY = p1.y > points[i - 2].y ? 1 : p1.y === points[i - 2].y ? 0 : -1;\n }\n path.push([\n 'L',\n p1.x + multSignX * correction,\n p1.y + multSignY * correction,\n ]);\n return path;\n};\n\n/**\n * Transform a path by transforming each segment.\n * it has to be a simplified path or it won't work.\n * WARNING: this depends from pathOffset for correct operation\n * @param {TSimplePathData} path fabricJS parsed and simplified path commands\n * @param {TMat2D} transform matrix that represent the transformation\n * @param {Point} [pathOffset] `Path.pathOffset`\n * @returns {TSimplePathData} the transformed path\n */\nexport const transformPath = (\n path: TSimplePathData,\n transform: TMat2D,\n pathOffset: Point,\n): TSimplePathData => {\n if (pathOffset) {\n transform = multiplyTransformMatrices(transform, [\n 1,\n 0,\n 0,\n 1,\n -pathOffset.x,\n -pathOffset.y,\n ]);\n }\n return path.map((pathSegment) => {\n const newSegment: TSimpleParsedCommand = [...pathSegment];\n for (let i = 1; i < pathSegment.length - 1; i += 2) {\n // TODO: is there a way to get around casting to any?\n const { x, y } = transformPoint(\n {\n x: pathSegment[i] as number,\n y: pathSegment[i + 1] as number,\n },\n transform,\n );\n newSegment[i] = x;\n newSegment[i + 1] = y;\n }\n return newSegment;\n });\n};\n\n/**\n * Returns an array of path commands to create a regular polygon\n * @param {number} numVertexes\n * @param {number} radius\n * @returns {TSimplePathData} An array of SVG path commands\n */\nexport const getRegularPolygonPath = (\n numVertexes: number,\n radius: number,\n): TSimplePathData => {\n const interiorAngle = (Math.PI * 2) / numVertexes;\n // rotationAdjustment rotates the path by 1/2 the interior angle so that the polygon always has a flat side on the bottom\n // This isn't strictly necessary, but it's how we tend to think of and expect polygons to be drawn\n let rotationAdjustment = -halfPI;\n if (numVertexes % 2 === 0) {\n rotationAdjustment += interiorAngle / 2;\n }\n const d = new Array(numVertexes + 1);\n for (let i = 0; i < numVertexes; i++) {\n const rad = i * interiorAngle + rotationAdjustment;\n const { x, y } = new Point(cos(rad), sin(rad)).scalarMultiply(radius);\n d[i] = [i === 0 ? 'M' : 'L', x, y];\n }\n d[numVertexes] = ['Z'];\n return d;\n};\n\n/**\n * Join path commands to go back to svg format\n * @param {TSimplePathData} pathData fabricJS parsed path commands\n * @param {number} fractionDigits number of fraction digits to \"leave\"\n * @return {String} joined path 'M 0 0 L 20 30'\n */\nexport const joinPath = (pathData: TSimplePathData, fractionDigits?: number) =>\n pathData\n .map((segment) => {\n return segment\n .map((arg, i) => {\n if (i === 0) return arg;\n return fractionDigits === undefined\n ? arg\n : toFixed(arg, fractionDigits);\n })\n .join(' ');\n })\n .join(' ');\n","// TODO this file needs to go away, cross browser style support is not fabricjs domain.\n\n/**\n * wrapper for setting element's style\n * @param {HTMLElement} element\n * @param {Object | string} styles\n */\nexport function setStyle(\n element: HTMLElement,\n styles: string | Record,\n) {\n const elementStyle = element.style;\n if (!elementStyle || !styles) {\n return;\n } else if (typeof styles === 'string') {\n elementStyle.cssText += ';' + styles;\n } else {\n Object.entries(styles).forEach(([property, value]) =>\n elementStyle.setProperty(property, value),\n );\n }\n}\n","import type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { sendObjectToPlane } from './planeChange';\nimport { Group } from '../../shapes/Group';\n/**\n * Merges 2 clip paths into one visually equal clip path\n *\n * **IMPORTANT**:\\\n * Does **NOT** clone the arguments, clone them proir if necessary.\n *\n * Creates a wrapper (group) that contains one clip path and is clipped by the other so content is kept where both overlap.\n * Use this method if both the clip paths may have nested clip paths of their own, so assigning one to the other's clip path property is not possible.\n *\n * In order to handle the `inverted` property we follow logic described in the following cases:\\\n * **(1)** both clip paths are inverted - the clip paths pass the inverted prop to the wrapper and loose it themselves.\\\n * **(2)** one is inverted and the other isn't - the wrapper shouldn't become inverted and the inverted clip path must clip the non inverted one to produce an identical visual effect.\\\n * **(3)** both clip paths are not inverted - wrapper and clip paths remain unchanged.\n *\n * @memberOf fabric.util\n * @param {fabric.Object} c1\n * @param {fabric.Object} c2\n * @returns {fabric.Object} merged clip path\n */\nexport const mergeClipPaths = (c1: FabricObject, c2: FabricObject) => {\n let a = c1,\n b = c2;\n if (a.inverted && !b.inverted) {\n // case (2)\n a = c2;\n b = c1;\n }\n // `b` becomes `a`'s clip path so we transform `b` to `a` coordinate plane\n sendObjectToPlane(b, b.group?.calcTransformMatrix(), a.calcTransformMatrix());\n // assign the `inverted` prop to the wrapping group\n const inverted = a.inverted && b.inverted;\n if (inverted) {\n // case (1)\n a.inverted = b.inverted = false;\n }\n return new Group([a], { clipPath: b, inverted });\n};\n","/**\n * Returns random number between 2 specified ones.\n * @param {Number} min lower limit\n * @param {Number} max upper limit\n * @return {Number} random value (between min and max)\n */\nexport const getRandomInt = (min: number, max: number): number =>\n Math.floor(Math.random() * (max - min + 1)) + min;\n","import { getFabricWindow } from '../../env';\nimport { noop } from '../../constants';\nimport type { Abortable } from '../../typedefs';\nimport { SignalAbortedError } from './console';\n\ntype requestOptions = Abortable & {\n onComplete?: (xhr: XMLHttpRequest) => void;\n};\n\n/**\n * Cross-browser abstraction for sending XMLHttpRequest\n * @deprecated this has to go away, we can use a modern browser method to do the same.\n * @param {String} url URL to send XMLHttpRequest to\n * @param {Object} [options] Options object\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @param {Function} options.onComplete Callback to invoke when request is completed\n * @return {XMLHttpRequest} request\n */\n\nexport function request(url: string, options: requestOptions = {}) {\n const onComplete = options.onComplete || noop,\n xhr = new (getFabricWindow().XMLHttpRequest)(),\n signal = options.signal,\n abort = function () {\n xhr.abort();\n },\n removeListener = function () {\n signal && signal.removeEventListener('abort', abort);\n xhr.onerror = xhr.ontimeout = noop;\n };\n\n if (signal && signal.aborted) {\n throw new SignalAbortedError('request');\n } else if (signal) {\n signal.addEventListener('abort', abort, { once: true });\n }\n\n /** @ignore */\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n removeListener();\n onComplete(xhr);\n xhr.onreadystatechange = noop;\n }\n };\n\n xhr.onerror = xhr.ontimeout = removeListener;\n\n xhr.open('get', url, true);\n\n xhr.send();\n return xhr;\n}\n","import { CENTER, SCALE_X, SCALE_Y } from '../constants';\nimport type { FabricImage } from '../shapes/Image';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { qrDecompose } from './misc/matrix';\n\ntype FabricObjectWithTransformMatrix = FabricObject & {\n transformMatrix?: TMat2D;\n};\n\n/**\n * This function is an helper for svg import. it decompose the transformMatrix\n * and assign properties to object.\n * untransformed coordinates\n * @private\n */\nconst _assignTransformMatrixProps = (\n object: FabricObjectWithTransformMatrix,\n) => {\n if (object.transformMatrix) {\n const { scaleX, scaleY, angle, skewX } = qrDecompose(\n object.transformMatrix,\n );\n object.flipX = false;\n object.flipY = false;\n object.set(SCALE_X, scaleX);\n object.set(SCALE_Y, scaleY);\n object.angle = angle;\n object.skewX = skewX;\n object.skewY = 0;\n }\n};\n\n/**\n * This function is an helper for svg import. it removes the transform matrix\n * and set to object properties that fabricjs can handle\n * @private\n * @param {Object} preserveAspectRatioOptions\n */\nexport const removeTransformMatrixForSvgParsing = (\n object: FabricObjectWithTransformMatrix,\n preserveAspectRatioOptions?: any,\n) => {\n let center = object._findCenterFromElement();\n if (object.transformMatrix) {\n _assignTransformMatrixProps(object);\n center = center.transform(object.transformMatrix);\n }\n delete object.transformMatrix;\n if (preserveAspectRatioOptions) {\n object.scaleX *= preserveAspectRatioOptions.scaleX;\n object.scaleY *= preserveAspectRatioOptions.scaleY;\n (object as FabricImage).cropX = preserveAspectRatioOptions.cropX;\n (object as FabricImage).cropY = preserveAspectRatioOptions.cropY;\n center.x += preserveAspectRatioOptions.offsetLeft;\n center.y += preserveAspectRatioOptions.offsetTop;\n object.width = preserveAspectRatioOptions.width;\n object.height = preserveAspectRatioOptions.height;\n }\n object.setPositionByOrigin(center, CENTER, CENTER);\n};\n","import { getEnv, getFabricDocument } from '../../env';\nimport type { TSize } from '../../typedefs';\nimport { createCanvasElement, setStyle } from '../../util';\nimport type { CSSDimensions } from './util';\nimport { makeElementUnselectable, setCSSDimensions } from './util';\nimport type { CanvasItem } from './StaticCanvasDOMManager';\nimport { StaticCanvasDOMManager } from './StaticCanvasDOMManager';\nimport { setCanvasDimensions } from './util';\nimport { NONE } from '../../constants';\n\nexport class CanvasDOMManager extends StaticCanvasDOMManager {\n upper: CanvasItem;\n container: HTMLDivElement;\n\n constructor(\n arg0?: string | HTMLCanvasElement,\n {\n allowTouchScrolling = false,\n containerClass = '',\n }: {\n allowTouchScrolling?: boolean;\n /**\n * @deprecated here only for backward compatibility\n */\n containerClass?: string;\n } = {},\n ) {\n super(arg0);\n const { el: lowerCanvasEl } = this.lower;\n const upperCanvasEl = this.createUpperCanvas();\n this.upper = { el: upperCanvasEl, ctx: upperCanvasEl.getContext('2d')! };\n this.applyCanvasStyle(lowerCanvasEl, {\n allowTouchScrolling,\n });\n this.applyCanvasStyle(upperCanvasEl, {\n allowTouchScrolling,\n styles: {\n position: 'absolute',\n left: '0',\n top: '0',\n },\n });\n const container = this.createContainerElement();\n container.classList.add(containerClass);\n if (lowerCanvasEl.parentNode) {\n lowerCanvasEl.parentNode.replaceChild(container, lowerCanvasEl);\n }\n container.append(lowerCanvasEl, upperCanvasEl);\n this.container = container;\n }\n\n protected createUpperCanvas() {\n const { el: lowerCanvasEl } = this.lower;\n const el = createCanvasElement();\n // we assign the same classname of the lowerCanvas\n el.className = lowerCanvasEl.className;\n // but then we remove the lower-canvas specific className\n el.classList.remove('lower-canvas');\n // we add the specific upper-canvas class\n el.classList.add('upper-canvas');\n el.setAttribute('data-fabric', 'top');\n el.style.cssText = lowerCanvasEl.style.cssText;\n el.setAttribute('draggable', 'true');\n return el;\n }\n\n protected createContainerElement() {\n const container = getFabricDocument().createElement('div');\n container.setAttribute('data-fabric', 'wrapper');\n setStyle(container, {\n position: 'relative',\n });\n makeElementUnselectable(container);\n return container;\n }\n\n /**\n * @private\n * @param {HTMLCanvasElement} element canvas element to apply styles on\n */\n protected applyCanvasStyle(\n element: HTMLCanvasElement,\n options: {\n allowTouchScrolling?: boolean;\n styles?: Record;\n },\n ) {\n const { styles, allowTouchScrolling } = options;\n setStyle(element, {\n ...styles,\n 'touch-action': allowTouchScrolling ? 'manipulation' : NONE,\n });\n makeElementUnselectable(element);\n }\n\n setDimensions(size: TSize, retinaScaling: number) {\n super.setDimensions(size, retinaScaling);\n const { el, ctx } = this.upper;\n setCanvasDimensions(el, ctx, size, retinaScaling);\n }\n\n setCSSDimensions(size: Partial): void {\n super.setCSSDimensions(size);\n setCSSDimensions(this.upper.el, size);\n setCSSDimensions(this.container, size);\n }\n\n cleanupDOM(size: TSize) {\n const container = this.container,\n { el: lowerCanvasEl } = this.lower,\n { el: upperCanvasEl } = this.upper;\n super.cleanupDOM(size);\n container.removeChild(upperCanvasEl);\n container.removeChild(lowerCanvasEl);\n if (container.parentNode) {\n container.parentNode.replaceChild(lowerCanvasEl, container);\n }\n }\n\n dispose() {\n super.dispose();\n getEnv().dispose(this.upper.el);\n // @ts-expect-error disposing\n delete this.upper;\n // @ts-expect-error disposing\n delete this.container;\n }\n}\n","import type { ModifierKey, TOptionalModifierKey } from '../EventTypeDefs';\nimport type { TOptions } from '../typedefs';\nimport type { StaticCanvasOptions } from './StaticCanvasOptions';\n\nexport interface CanvasTransformOptions {\n /**\n * When true, objects can be transformed by one side (unproportionately)\n * when dragged on the corners that normally would not do that.\n * @type Boolean\n * @default\n * @since fabric 4.0 // changed name and default value\n */\n uniformScaling: boolean;\n\n /**\n * Indicates which key switches uniform scaling.\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * totally wrong named. this sounds like `uniform scaling`\n * if Canvas.uniformScaling is true, pressing this will set it to false\n * and viceversa.\n * @since 1.6.2\n * @type ModifierKey\n * @default\n */\n uniScaleKey: TOptionalModifierKey;\n\n /**\n * When true, objects use center point as the origin of scale transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredScaling: boolean;\n\n /**\n * When true, objects use center point as the origin of rotate transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredRotation: boolean;\n\n /**\n * Indicates which key enable centered Transform\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type ModifierKey\n * @default\n */\n centeredKey: TOptionalModifierKey;\n\n /**\n * Indicates which key enable alternate action on corner\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type ModifierKey\n * @default\n */\n altActionKey: TOptionalModifierKey;\n}\n\nexport interface CanvasSelectionOptions {\n /**\n * Indicates whether group selection should be enabled\n * @type Boolean\n * @default\n */\n selection: boolean;\n\n /**\n * Indicates which key or keys enable multiple click selection\n * Pass value as a string or array of strings\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or empty or containing any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.2\n * @type ModifierKey|ModifierKey[]\n * @default\n */\n selectionKey: TOptionalModifierKey | ModifierKey[];\n\n /**\n * Indicates which key enable alternative selection\n * in case of target overlapping with active object\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * For a series of reason that come from the general expectations on how\n * things should work, this feature works only for preserveObjectStacking true.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.5\n * @type null|ModifierKey\n * @default\n */\n altSelectionKey: TOptionalModifierKey;\n\n /**\n * Color of selection\n * @type String\n * @default\n */\n selectionColor: string;\n\n /**\n * Default dash array pattern\n * If not empty the selection border is dashed\n * @type Array\n */\n selectionDashArray: number[];\n\n /**\n * Color of the border of selection (usually slightly darker than color of selection itself)\n * @type String\n * @default\n */\n selectionBorderColor: string;\n\n /**\n * Width of a line used in object/group selection\n * @type Number\n * @default\n */\n selectionLineWidth: number;\n\n /**\n * Select only shapes that are fully contained in the dragged selection rectangle.\n * @type Boolean\n * @default\n */\n selectionFullyContained: boolean;\n}\n\nexport interface CanvasCursorOptions {\n /**\n * Default cursor value used when hovering over an object on canvas\n * @type CSSStyleDeclaration['cursor']\n * @default move\n */\n hoverCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Default cursor value used when moving an object on canvas\n * @type CSSStyleDeclaration['cursor']\n * @default move\n */\n moveCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Default cursor value used for the entire canvas\n * @type String\n * @default default\n */\n defaultCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Cursor value used during free drawing\n * @type String\n * @default crosshair\n */\n freeDrawingCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Cursor value used for disabled elements ( corners with disabled action )\n * @type String\n * @since 2.0.0\n * @default not-allowed\n */\n notAllowedCursor: CSSStyleDeclaration['cursor'];\n}\n\nexport interface TargetFindOptions {\n /**\n * When true, object detection happens on per-pixel basis rather than on per-bounding-box\n * @type Boolean\n * @default\n */\n perPixelTargetFind: boolean;\n\n /**\n * Number of pixels around target pixel to tolerate (consider active) during object detection\n * @type Number\n * @default\n */\n targetFindTolerance: number;\n\n /**\n * When true, target detection is skipped. Target detection will return always undefined.\n * click selection won't work anymore, events will fire with no targets.\n * if something is selected before setting it to true, it will be deselected at the first click.\n * area selection will still work. check the `selection` property too.\n * if you deactivate both, you should look into staticCanvas.\n * @type Boolean\n * @default\n */\n skipTargetFind: boolean;\n}\n\nexport interface CanvasEventsOptions {\n /**\n * Indicates if the right click on canvas can output the context menu or not\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n stopContextMenu: boolean;\n\n /**\n * Indicates if the canvas can fire right click events\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n fireRightClick: boolean;\n\n /**\n * Indicates if the canvas can fire middle click events\n * @type Boolean\n * @since 1.7.8\n * @default\n */\n fireMiddleClick: boolean;\n\n /**\n * When the option is enabled, PointerEvent is used instead of TPointerEvent.\n * @type Boolean\n * @default\n */\n enablePointerEvents: boolean;\n}\n\nexport interface CanvasOptions\n extends StaticCanvasOptions,\n CanvasTransformOptions,\n CanvasSelectionOptions,\n CanvasCursorOptions,\n TargetFindOptions,\n CanvasEventsOptions {\n /**\n * Default element class that's given to wrapper (div) element of canvas\n * @type String\n * @default\n * @deprecated customize {@link CanvasDOMManager} instead or access {@link elements} directly\n */\n containerClass: string;\n\n /**\n * Indicates whether objects should remain in current stack position when selected.\n * When false objects are brought to top and rendered as part of the selection group\n * @type Boolean\n * @default\n */\n preserveObjectStacking: boolean;\n}\n\nexport type TCanvasOptions = TOptions;\n\nexport const canvasDefaults: TOptions = {\n uniformScaling: true,\n uniScaleKey: 'shiftKey',\n centeredScaling: false,\n centeredRotation: false,\n centeredKey: 'altKey',\n altActionKey: 'shiftKey',\n\n selection: true,\n selectionKey: 'shiftKey',\n selectionColor: 'rgba(100, 100, 255, 0.3)',\n selectionDashArray: [],\n selectionBorderColor: 'rgba(255, 255, 255, 0.3)',\n selectionLineWidth: 1,\n selectionFullyContained: false,\n\n hoverCursor: 'move',\n moveCursor: 'move',\n defaultCursor: 'default',\n freeDrawingCursor: 'crosshair',\n notAllowedCursor: 'not-allowed',\n\n perPixelTargetFind: false,\n targetFindTolerance: 0,\n skipTargetFind: false,\n\n stopContextMenu: false,\n fireRightClick: false,\n fireMiddleClick: false,\n enablePointerEvents: false,\n\n containerClass: 'canvas-container',\n\n preserveObjectStacking: false,\n};\n","import { dragHandler } from '../controls/drag';\nimport { getActionFromCorner } from '../controls/util';\nimport { Point } from '../Point';\nimport { FabricObject } from '../shapes/Object/FabricObject';\nimport type {\n CanvasEvents,\n ModifierKey,\n TOptionalModifierKey,\n TPointerEvent,\n Transform,\n} from '../EventTypeDefs';\nimport {\n addTransformToObject,\n saveObjectTransform,\n} from '../util/misc/objectTransforms';\nimport type { TCanvasSizeOptions } from './StaticCanvas';\nimport { StaticCanvas } from './StaticCanvas';\nimport { isCollection } from '../Collection';\nimport { isTransparent } from '../util/misc/isTransparent';\nimport type {\n TMat2D,\n TOriginX,\n TOriginY,\n TSize,\n TSVGReviver,\n} from '../typedefs';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { getPointer, isTouchEvent } from '../util/dom_event';\nimport type { IText } from '../shapes/IText/IText';\nimport type { BaseBrush } from '../brushes/BaseBrush';\nimport { pick } from '../util/misc/pick';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { cos, createCanvasElement, sin } from '../util';\nimport { CanvasDOMManager } from './DOMManagers/CanvasDOMManager';\nimport {\n BOTTOM,\n CENTER,\n LEFT,\n MODIFIED,\n RESIZING,\n RIGHT,\n ROTATE,\n SCALE,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CanvasOptions } from './CanvasOptions';\nimport { canvasDefaults } from './CanvasOptions';\nimport { Intersection } from '../Intersection';\nimport { isActiveSelection } from '../util/typeAssertions';\n\n/**\n * Canvas class\n * @class Canvas\n * @extends StaticCanvas\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#canvas}\n *\n * @fires object:modified at the end of a transform\n * @fires object:rotating while an object is being rotated from the control\n * @fires object:scaling while an object is being scaled by controls\n * @fires object:moving while an object is being dragged\n * @fires object:skewing while an object is being skewed from the controls\n *\n * @fires before:transform before a transform is is started\n * @fires before:selection:cleared\n * @fires selection:cleared\n * @fires selection:updated\n * @fires selection:created\n *\n * @fires path:created after a drawing operation ends and the path is added\n * @fires mouse:down\n * @fires mouse:move\n * @fires mouse:up\n * @fires mouse:down:before on mouse down, before the inner fabric logic runs\n * @fires mouse:move:before on mouse move, before the inner fabric logic runs\n * @fires mouse:up:before on mouse up, before the inner fabric logic runs\n * @fires mouse:over\n * @fires mouse:out\n * @fires mouse:dblclick whenever a native dbl click event fires on the canvas.\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drag:enter object drag enter\n * @fires drag:leave object drag leave\n * @fires drop:before before drop event. Prepare for the drop event (same native event).\n * @fires drop\n * @fires drop:after after drop event. Run logic on canvas after event has been accepted/declined (same native event).\n * @example\n * let a: fabric.Object, b: fabric.Object;\n * let flag = false;\n * canvas.add(a, b);\n * a.on('drop:before', opt => {\n * // we want a to accept the drop even though it's below b in the stack\n * flag = this.canDrop(opt.e);\n * });\n * b.canDrop = function(e) {\n * !flag && this.draggableTextDelegate.canDrop(e);\n * }\n * b.on('dragover', opt => b.set('fill', opt.dropTarget === b ? 'pink' : 'black'));\n * a.on('drop', opt => {\n * opt.e.defaultPrevented // drop occurred\n * opt.didDrop // drop occurred on canvas\n * opt.target // drop target\n * opt.target !== a && a.set('text', 'I lost');\n * });\n * canvas.on('drop:after', opt => {\n * // inform user who won\n * if(!opt.e.defaultPrevented) {\n * // no winners\n * }\n * else if(!opt.didDrop) {\n * // my objects didn't win, some other lucky object\n * }\n * else {\n * // we have a winner it's opt.target!!\n * }\n * })\n *\n * @fires after:render at the end of the render process, receives the context in the callback\n * @fires before:render at start the render process, receives the context in the callback\n *\n * @fires contextmenu:before\n * @fires contextmenu\n * @example\n * let handler;\n * targets.forEach(target => {\n * target.on('contextmenu:before', opt => {\n * // decide which target should handle the event before canvas hijacks it\n * if (someCaseHappens && opt.targets.includes(target)) {\n * handler = target;\n * }\n * });\n * target.on('contextmenu', opt => {\n * // do something fantastic\n * });\n * });\n * canvas.on('contextmenu', opt => {\n * if (!handler) {\n * // no one takes responsibility, it's always left to me\n * // let's show them how it's done!\n * }\n * });\n *\n */\nexport class SelectableCanvas\n extends StaticCanvas\n implements Omit\n{\n declare _objects: FabricObject[];\n\n // transform config\n declare uniformScaling: boolean;\n declare uniScaleKey: TOptionalModifierKey;\n declare centeredScaling: boolean;\n declare centeredRotation: boolean;\n declare centeredKey: TOptionalModifierKey;\n declare altActionKey: TOptionalModifierKey;\n\n // selection config\n declare selection: boolean;\n declare selectionKey: TOptionalModifierKey | ModifierKey[];\n declare altSelectionKey: TOptionalModifierKey;\n declare selectionColor: string;\n declare selectionDashArray: number[];\n declare selectionBorderColor: string;\n declare selectionLineWidth: number;\n declare selectionFullyContained: boolean;\n\n // cursors\n declare hoverCursor: CSSStyleDeclaration['cursor'];\n declare moveCursor: CSSStyleDeclaration['cursor'];\n declare defaultCursor: CSSStyleDeclaration['cursor'];\n declare freeDrawingCursor: CSSStyleDeclaration['cursor'];\n declare notAllowedCursor: CSSStyleDeclaration['cursor'];\n\n declare containerClass: string;\n\n // target find config\n declare perPixelTargetFind: boolean;\n declare targetFindTolerance: number;\n declare skipTargetFind: boolean;\n\n /**\n * When true, mouse events on canvas (mousedown/mousemove/mouseup) result in free drawing.\n * After mousedown, mousemove creates a shape,\n * and then mouseup finalizes it and adds an instance of `fabric.Path` onto canvas.\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-4#free_drawing}\n * @type Boolean\n * @default\n */\n declare isDrawingMode: boolean;\n\n declare preserveObjectStacking: boolean;\n\n // event config\n declare stopContextMenu: boolean;\n declare fireRightClick: boolean;\n declare fireMiddleClick: boolean;\n\n /**\n * Keep track of the subTargets for Mouse Events, ordered bottom up from innermost nested subTarget\n * @type FabricObject[]\n */\n targets: FabricObject[] = [];\n\n /**\n * Keep track of the hovered target\n * @type FabricObject | null\n * @private\n */\n declare _hoveredTarget?: FabricObject;\n\n /**\n * hold the list of nested targets hovered\n * @type FabricObject[]\n * @private\n */\n _hoveredTargets: FabricObject[] = [];\n\n /**\n * hold the list of objects to render\n * @type FabricObject[]\n * @private\n */\n _objectsToRender?: FabricObject[];\n\n /**\n * hold a reference to a data structure that contains information\n * on the current on going transform\n * @type\n * @private\n */\n _currentTransform: Transform | null = null;\n\n /**\n * hold a reference to a data structure used to track the selection\n * box on canvas drag\n * on the current on going transform\n * x, y, deltaX and deltaY are in scene plane\n * @type\n * @private\n */\n protected _groupSelector: {\n x: number;\n y: number;\n deltaX: number;\n deltaY: number;\n } | null = null;\n\n /**\n * internal flag used to understand if the context top requires a cleanup\n * in case this is true, the contextTop will be cleared at the next render\n * @type boolean\n * @private\n */\n contextTopDirty = false;\n\n /**\n * During a mouse event we may need the pointer multiple times in multiple functions.\n * _absolutePointer holds a reference to the pointer in fabricCanvas/design coordinates that is valid for the event\n * lifespan. Every fabricJS mouse event create and delete the cache every time\n * We do this because there are some HTML DOM inspection functions to get the actual pointer coordinates\n * @type {Point}\n */\n protected declare _absolutePointer?: Point;\n\n /**\n * During a mouse event we may need the pointer multiple times in multiple functions.\n * _pointer holds a reference to the pointer in html coordinates that is valid for the event\n * lifespan. Every fabricJS mouse event create and delete the cache every time\n * We do this because there are some HTML DOM inspection functions to get the actual pointer coordinates\n * @type {Point}\n */\n protected declare _pointer?: Point;\n\n /**\n * During a mouse event we may need the target multiple times in multiple functions.\n * _target holds a reference to the target that is valid for the event\n * lifespan. Every fabricJS mouse event create and delete the cache every time\n * @type {FabricObject}\n */\n protected declare _target?: FabricObject;\n\n static ownDefaults = canvasDefaults;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...SelectableCanvas.ownDefaults };\n }\n\n declare elements: CanvasDOMManager;\n get upperCanvasEl() {\n return this.elements.upper?.el;\n }\n get contextTop() {\n return this.elements.upper?.ctx;\n }\n get wrapperEl() {\n return this.elements.container;\n }\n private declare pixelFindCanvasEl: HTMLCanvasElement;\n private declare pixelFindContext: CanvasRenderingContext2D;\n\n protected declare _isCurrentlyDrawing: boolean;\n declare freeDrawingBrush?: BaseBrush;\n declare _activeObject?: FabricObject;\n\n protected initElements(el?: string | HTMLCanvasElement) {\n this.elements = new CanvasDOMManager(el, {\n allowTouchScrolling: this.allowTouchScrolling,\n containerClass: this.containerClass,\n });\n this._createCacheCanvas();\n }\n\n /**\n * @private\n * @param {FabricObject} obj Object that was added\n */\n _onObjectAdded(obj: FabricObject) {\n this._objectsToRender = undefined;\n super._onObjectAdded(obj);\n }\n\n /**\n * @private\n * @param {FabricObject} obj Object that was removed\n */\n _onObjectRemoved(obj: FabricObject) {\n this._objectsToRender = undefined;\n // removing active object should fire \"selection:cleared\" events\n if (obj === this._activeObject) {\n this.fire('before:selection:cleared', { deselected: [obj] });\n this._discardActiveObject();\n this.fire('selection:cleared', { deselected: [obj] });\n obj.fire('deselected', {\n target: obj,\n });\n }\n if (obj === this._hoveredTarget) {\n this._hoveredTarget = undefined;\n this._hoveredTargets = [];\n }\n super._onObjectRemoved(obj);\n }\n\n _onStackOrderChanged() {\n this._objectsToRender = undefined;\n super._onStackOrderChanged();\n }\n\n /**\n * Divides objects in two groups, one to render immediately\n * and one to render as activeGroup.\n * @return {Array} objects to render immediately and pushes the other in the activeGroup.\n */\n _chooseObjectsToRender(): FabricObject[] {\n const activeObject = this._activeObject;\n return !this.preserveObjectStacking && activeObject\n ? this._objects\n .filter((object) => !object.group && object !== activeObject)\n .concat(activeObject)\n : this._objects;\n }\n\n /**\n * Renders both the top canvas and the secondary container canvas.\n */\n renderAll() {\n this.cancelRequestedRender();\n if (this.destroyed) {\n return;\n }\n if (this.contextTopDirty && !this._groupSelector && !this.isDrawingMode) {\n this.clearContext(this.contextTop);\n this.contextTopDirty = false;\n }\n if (this.hasLostContext) {\n this.renderTopLayer(this.contextTop);\n this.hasLostContext = false;\n }\n !this._objectsToRender &&\n (this._objectsToRender = this._chooseObjectsToRender());\n this.renderCanvas(this.getContext(), this._objectsToRender);\n }\n\n /**\n * text selection is rendered by the active text instance during the rendering cycle\n */\n renderTopLayer(ctx: CanvasRenderingContext2D): void {\n ctx.save();\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this.freeDrawingBrush && this.freeDrawingBrush._render();\n this.contextTopDirty = true;\n }\n // we render the top context - last object\n if (this.selection && this._groupSelector) {\n this._drawSelection(ctx);\n this.contextTopDirty = true;\n }\n ctx.restore();\n }\n\n /**\n * Method to render only the top canvas.\n * Also used to render the group selection box.\n * Does not render text selection.\n */\n renderTop() {\n const ctx = this.contextTop;\n this.clearContext(ctx);\n this.renderTopLayer(ctx);\n // todo: how do i know if the after:render is for the top or normal contex?\n this.fire('after:render', { ctx });\n }\n\n /**\n * Set the canvas tolerance value for pixel taret find.\n * Use only integer numbers.\n * @private\n */\n setTargetFindTolerance(value: number) {\n value = Math.round(value);\n this.targetFindTolerance = value;\n const retina = this.getRetinaScaling();\n const size = Math.ceil((value * 2 + 1) * retina);\n this.pixelFindCanvasEl.width = this.pixelFindCanvasEl.height = size;\n this.pixelFindContext.scale(retina, retina);\n }\n\n /**\n * Returns true if object is transparent at a certain location\n * Clarification: this is `is target transparent at location X or are controls there`\n * @TODO this seems dumb that we treat controls with transparency. we can find controls\n * programmatically without painting them, the cache canvas optimization is always valid\n * @param {FabricObject} target Object to check\n * @param {Number} x Left coordinate in viewport space\n * @param {Number} y Top coordinate in viewport space\n * @return {Boolean}\n */\n isTargetTransparent(target: FabricObject, x: number, y: number): boolean {\n const tolerance = this.targetFindTolerance;\n const ctx = this.pixelFindContext;\n this.clearContext(ctx);\n ctx.save();\n ctx.translate(-x + tolerance, -y + tolerance);\n ctx.transform(...this.viewportTransform);\n const selectionBgc = target.selectionBackgroundColor;\n target.selectionBackgroundColor = '';\n target.render(ctx);\n target.selectionBackgroundColor = selectionBgc;\n ctx.restore();\n // our canvas is square, and made around tolerance.\n // so tolerance in this case also represent the center of the canvas.\n const enhancedTolerance = Math.round(tolerance * this.getRetinaScaling());\n return isTransparent(\n ctx,\n enhancedTolerance,\n enhancedTolerance,\n enhancedTolerance,\n );\n }\n\n /**\n * takes an event and determines if selection key has been pressed\n * @private\n * @param {TPointerEvent} e Event object\n */\n _isSelectionKeyPressed(e: TPointerEvent): boolean {\n const sKey = this.selectionKey;\n if (!sKey) {\n return false;\n }\n if (Array.isArray(sKey)) {\n return !!sKey.find((key) => !!key && e[key] === true);\n } else {\n return e[sKey];\n }\n }\n\n /**\n * @private\n * @param {TPointerEvent} e Event object\n * @param {FabricObject} target\n */\n _shouldClearSelection(\n e: TPointerEvent,\n target?: FabricObject,\n ): target is undefined {\n const activeObjects = this.getActiveObjects(),\n activeObject = this._activeObject;\n\n return !!(\n !target ||\n (target &&\n activeObject &&\n activeObjects.length > 1 &&\n activeObjects.indexOf(target) === -1 &&\n activeObject !== target &&\n !this._isSelectionKeyPressed(e)) ||\n (target && !target.evented) ||\n (target && !target.selectable && activeObject && activeObject !== target)\n );\n }\n\n /**\n * This method will take in consideration a modifier key pressed and the control we are\n * about to drag, and try to guess the anchor point ( origin ) of the transormation.\n * This should be really in the realm of controls, and we should remove specific code for legacy\n * embedded actions.\n * @TODO this probably deserve discussion/rediscovery and change/refactor\n * @private\n * @deprecated\n * @param {FabricObject} target\n * @param {string} action\n * @param {boolean} altKey\n * @returns {boolean} true if the transformation should be centered\n */\n private _shouldCenterTransform(\n target: FabricObject,\n action: string,\n modifierKeyPressed: boolean,\n ) {\n if (!target) {\n return;\n }\n\n let centerTransform;\n\n if (\n action === SCALE ||\n action === SCALE_X ||\n action === SCALE_Y ||\n action === RESIZING\n ) {\n centerTransform = this.centeredScaling || target.centeredScaling;\n } else if (action === ROTATE) {\n centerTransform = this.centeredRotation || target.centeredRotation;\n }\n\n return centerTransform ? !modifierKeyPressed : modifierKeyPressed;\n }\n\n /**\n * Given the control clicked, determine the origin of the transform.\n * This is bad because controls can totally have custom names\n * should disappear before release 4.0\n * @private\n * @deprecated\n */\n _getOriginFromCorner(\n target: FabricObject,\n controlName: string,\n ): { x: TOriginX; y: TOriginY } {\n const origin = {\n x: target.originX,\n y: target.originY,\n };\n\n if (!controlName) {\n return origin;\n }\n\n // is a left control ?\n if (['ml', 'tl', 'bl'].includes(controlName)) {\n origin.x = RIGHT;\n // is a right control ?\n } else if (['mr', 'tr', 'br'].includes(controlName)) {\n origin.x = LEFT;\n }\n // is a top control ?\n if (['tl', 'mt', 'tr'].includes(controlName)) {\n origin.y = BOTTOM;\n // is a bottom control ?\n } else if (['bl', 'mb', 'br'].includes(controlName)) {\n origin.y = TOP;\n }\n return origin;\n }\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {FabricObject} target\n * @param {boolean} [alreadySelected] pass true to setup the active control\n */\n _setupCurrentTransform(\n e: TPointerEvent,\n target: FabricObject,\n alreadySelected: boolean,\n ): void {\n const pointer = target.group\n ? // transform pointer to target's containing coordinate plane\n sendPointToPlane(\n this.getScenePoint(e),\n undefined,\n target.group.calcTransformMatrix(),\n )\n : this.getScenePoint(e);\n const { key: corner = '', control } = target.getActiveControl() || {},\n actionHandler =\n alreadySelected && control\n ? control.getActionHandler(e, target, control)?.bind(control)\n : dragHandler,\n action = getActionFromCorner(alreadySelected, corner, e, target),\n altKey = e[this.centeredKey as ModifierKey],\n origin = this._shouldCenterTransform(target, action, altKey)\n ? ({ x: CENTER, y: CENTER } as const)\n : this._getOriginFromCorner(target, corner),\n /**\n * relative to target's containing coordinate plane\n * both agree on every point\n **/\n transform: Transform = {\n target: target,\n action,\n actionHandler,\n actionPerformed: false,\n corner,\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n offsetX: pointer.x - target.left,\n offsetY: pointer.y - target.top,\n originX: origin.x,\n originY: origin.y,\n ex: pointer.x,\n ey: pointer.y,\n lastX: pointer.x,\n lastY: pointer.y,\n theta: degreesToRadians(target.angle),\n width: target.width,\n height: target.height,\n shiftKey: e.shiftKey,\n altKey,\n original: {\n ...saveObjectTransform(target),\n originX: origin.x,\n originY: origin.y,\n },\n };\n\n this._currentTransform = transform;\n\n this.fire('before:transform', {\n e,\n transform,\n });\n }\n\n /**\n * Set the cursor type of the canvas element\n * @param {String} value Cursor type of the canvas element.\n * @see http://www.w3.org/TR/css3-ui/#cursor\n */\n setCursor(value: CSSStyleDeclaration['cursor']): void {\n this.upperCanvasEl.style.cursor = value;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx to draw the selection on\n */\n _drawSelection(ctx: CanvasRenderingContext2D): void {\n const { x, y, deltaX, deltaY } = this._groupSelector!,\n start = new Point(x, y).transform(this.viewportTransform),\n extent = new Point(x + deltaX, y + deltaY).transform(\n this.viewportTransform,\n ),\n strokeOffset = this.selectionLineWidth / 2;\n let minX = Math.min(start.x, extent.x),\n minY = Math.min(start.y, extent.y),\n maxX = Math.max(start.x, extent.x),\n maxY = Math.max(start.y, extent.y);\n\n if (this.selectionColor) {\n ctx.fillStyle = this.selectionColor;\n ctx.fillRect(minX, minY, maxX - minX, maxY - minY);\n }\n\n if (!this.selectionLineWidth || !this.selectionBorderColor) {\n return;\n }\n ctx.lineWidth = this.selectionLineWidth;\n ctx.strokeStyle = this.selectionBorderColor;\n\n minX += strokeOffset;\n minY += strokeOffset;\n maxX -= strokeOffset;\n maxY -= strokeOffset;\n // selection border\n // @TODO: is _setLineDash still necessary on modern canvas?\n FabricObject.prototype._setLineDash.call(\n this,\n ctx,\n this.selectionDashArray,\n );\n ctx.strokeRect(minX, minY, maxX - minX, maxY - minY);\n }\n\n /**\n * Method that determines what object we are clicking on\n * 11/09/2018 TODO: would be cool if findTarget could discern between being a full target\n * or the outside part of the corner.\n * @param {Event} e mouse event\n * @return {FabricObject | null} the target found\n */\n findTarget(e: TPointerEvent): FabricObject | undefined {\n if (this.skipTargetFind) {\n return undefined;\n }\n\n const pointer = this.getViewportPoint(e),\n activeObject = this._activeObject,\n aObjects = this.getActiveObjects();\n\n this.targets = [];\n\n if (activeObject && aObjects.length >= 1) {\n if (activeObject.findControl(pointer, isTouchEvent(e))) {\n // if we hit the corner of the active object, let's return that.\n return activeObject;\n } else if (\n aObjects.length > 1 &&\n // check pointer is over active selection and possibly perform `subTargetCheck`\n this.searchPossibleTargets([activeObject], pointer)\n ) {\n // active selection does not select sub targets like normal groups\n return activeObject;\n } else if (\n activeObject === this.searchPossibleTargets([activeObject], pointer)\n ) {\n // active object is not an active selection\n if (!this.preserveObjectStacking) {\n return activeObject;\n } else {\n const subTargets = this.targets;\n this.targets = [];\n const target = this.searchPossibleTargets(this._objects, pointer);\n if (\n e[this.altSelectionKey as ModifierKey] &&\n target &&\n target !== activeObject\n ) {\n // alt selection: select active object even though it is not the top most target\n // restore targets\n this.targets = subTargets;\n return activeObject;\n }\n return target;\n }\n }\n }\n\n return this.searchPossibleTargets(this._objects, pointer);\n }\n\n /**\n * Checks if the point is inside the object selection area including padding\n * @param {FabricObject} obj Object to test against\n * @param {Object} [pointer] point in scene coordinates\n * @return {Boolean} true if point is contained within an area of given object\n * @private\n */\n private _pointIsInObjectSelectionArea(obj: FabricObject, point: Point) {\n // getCoords will already take care of group de-nesting\n let coords = obj.getCoords();\n const viewportZoom = this.getZoom();\n const padding = obj.padding / viewportZoom;\n if (padding) {\n const [tl, tr, br, bl] = coords;\n // what is the angle of the object?\n // we could use getTotalAngle, but is way easier to look at it\n // from how coords are oriented, since if something went wrong\n // at least we are consistent.\n const angleRadians = Math.atan2(tr.y - tl.y, tr.x - tl.x),\n cosP = cos(angleRadians) * padding,\n sinP = sin(angleRadians) * padding,\n cosPSinP = cosP + sinP,\n cosPMinusSinP = cosP - sinP;\n\n coords = [\n new Point(tl.x - cosPMinusSinP, tl.y - cosPSinP),\n new Point(tr.x + cosPSinP, tr.y - cosPMinusSinP),\n new Point(br.x + cosPMinusSinP, br.y + cosPSinP),\n new Point(bl.x - cosPSinP, bl.y + cosPMinusSinP),\n ];\n // in case of padding we calculate the new coords on the fly.\n // otherwise we have to maintain 2 sets of coordinates for everything.\n // we can reiterate on storing them.\n // if this is slow, for now the semplification is large and doesn't impact\n // rendering.\n // the idea behind this is that outside target check we don't need ot know\n // where those coords are\n }\n return Intersection.isPointInPolygon(point, coords);\n }\n\n /**\n * Checks point is inside the object selection condition. Either area with padding\n * or over pixels if perPixelTargetFind is enabled\n * @param {FabricObject} obj Object to test against\n * @param {Object} [pointer] point from viewport.\n * @return {Boolean} true if point is contained within an area of given object\n * @private\n */\n _checkTarget(obj: FabricObject, pointer: Point): boolean {\n if (\n obj &&\n obj.visible &&\n obj.evented &&\n this._pointIsInObjectSelectionArea(\n obj,\n sendPointToPlane(pointer, undefined, this.viewportTransform),\n )\n ) {\n if (\n (this.perPixelTargetFind || obj.perPixelTargetFind) &&\n !(obj as unknown as IText).isEditing\n ) {\n if (!this.isTargetTransparent(obj, pointer.x, pointer.y)) {\n return true;\n }\n } else {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Internal Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted\n * @param {Array} [objects] objects array to look into\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\n * @return {FabricObject} **top most object from given `objects`** that contains pointer\n * @private\n */\n _searchPossibleTargets(\n objects: FabricObject[],\n pointer: Point,\n ): FabricObject | undefined {\n // Cache all targets where their bounding box contains point.\n let i = objects.length;\n // Do not check for currently grouped objects, since we check the parent group itself.\n // until we call this function specifically to search inside the activeGroup\n while (i--) {\n const target = objects[i];\n if (this._checkTarget(target, pointer)) {\n if (isCollection(target) && target.subTargetCheck) {\n const subTarget = this._searchPossibleTargets(\n target._objects as FabricObject[],\n pointer,\n );\n subTarget && this.targets.push(subTarget);\n }\n return target;\n }\n }\n }\n\n /**\n * Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted\n * @see {@link _searchPossibleTargets}\n * @param {FabricObject[]} [objects] objects array to look into\n * @param {Point} [pointer] coordinates from viewport to check.\n * @return {FabricObject} **top most object on screen** that contains pointer\n */\n searchPossibleTargets(\n objects: FabricObject[],\n pointer: Point,\n ): FabricObject | undefined {\n const target = this._searchPossibleTargets(objects, pointer);\n\n // if we found something in this.targets, and the group is interactive, return the innermost subTarget\n // that is still interactive\n // TODO: reverify why interactive. the target should be returned always, but selected only\n // if interactive.\n if (\n target &&\n isCollection(target) &&\n target.interactive &&\n this.targets[0]\n ) {\n /** targets[0] is the innermost nested target, but it could be inside non interactive groups and so not a selection target */\n const targets = this.targets;\n for (let i = targets.length - 1; i > 0; i--) {\n const t = targets[i];\n if (!(isCollection(t) && t.interactive)) {\n // one of the subtargets was not interactive. that is the last subtarget we can return.\n // we can't dig more deep;\n return t;\n }\n }\n return targets[0];\n }\n\n return target;\n }\n\n /**\n * @returns point existing in the same plane as the {@link HTMLCanvasElement},\n * `(0, 0)` being the top left corner of the {@link HTMLCanvasElement}.\n * This means that changes to the {@link viewportTransform} do not change the values of the point\n * and it remains unchanged from the viewer's perspective.\n *\n * @example\n * const scenePoint = sendPointToPlane(\n * this.getViewportPoint(e),\n * undefined,\n * canvas.viewportTransform\n * );\n *\n */\n getViewportPoint(e: TPointerEvent) {\n if (this._pointer) {\n return this._pointer;\n }\n return this.getPointer(e, true);\n }\n\n /**\n * @returns point existing in the scene (the same plane as the plane {@link FabricObject#getCenterPoint} exists in).\n * This means that changes to the {@link viewportTransform} do not change the values of the point,\n * however, from the viewer's perspective, the point is changed.\n *\n * @example\n * const viewportPoint = sendPointToPlane(\n * this.getScenePoint(e),\n * canvas.viewportTransform\n * );\n *\n */\n getScenePoint(e: TPointerEvent) {\n if (this._absolutePointer) {\n return this._absolutePointer;\n }\n return this.getPointer(e);\n }\n\n /**\n * Returns pointer relative to canvas.\n *\n * @deprecated This method is deprecated since v6 to protect you from misuse.\n * Use {@link getViewportPoint} or {@link getScenePoint} instead.\n *\n * @param {Event} e\n * @param {Boolean} [fromViewport] whether to return the point from the viewport or in the scene\n * @return {Point}\n */\n getPointer(e: TPointerEvent, fromViewport = false): Point {\n const upperCanvasEl = this.upperCanvasEl,\n bounds = upperCanvasEl.getBoundingClientRect();\n let pointer = getPointer(e),\n boundsWidth = bounds.width || 0,\n boundsHeight = bounds.height || 0;\n\n if (!boundsWidth || !boundsHeight) {\n if (TOP in bounds && BOTTOM in bounds) {\n boundsHeight = Math.abs(bounds.top - bounds.bottom);\n }\n if (RIGHT in bounds && LEFT in bounds) {\n boundsWidth = Math.abs(bounds.right - bounds.left);\n }\n }\n\n this.calcOffset();\n pointer.x = pointer.x - this._offset.left;\n pointer.y = pointer.y - this._offset.top;\n if (!fromViewport) {\n pointer = sendPointToPlane(pointer, undefined, this.viewportTransform);\n }\n\n const retinaScaling = this.getRetinaScaling();\n if (retinaScaling !== 1) {\n pointer.x /= retinaScaling;\n pointer.y /= retinaScaling;\n }\n\n // If bounds are not available (i.e. not visible), do not apply scale.\n const cssScale =\n boundsWidth === 0 || boundsHeight === 0\n ? new Point(1, 1)\n : new Point(\n upperCanvasEl.width / boundsWidth,\n upperCanvasEl.height / boundsHeight,\n );\n\n return pointer.multiply(cssScale);\n }\n\n /**\n * Internal use only\n * @protected\n */\n protected _setDimensionsImpl(\n dimensions: TSize,\n options?: TCanvasSizeOptions,\n ) {\n // @ts-expect-error this method exists in the subclass - should be moved or declared as abstract\n this._resetTransformEventData();\n super._setDimensionsImpl(dimensions, options);\n if (this._isCurrentlyDrawing) {\n this.freeDrawingBrush &&\n this.freeDrawingBrush._setBrushStyles(this.contextTop);\n }\n }\n\n protected _createCacheCanvas() {\n this.pixelFindCanvasEl = createCanvasElement();\n this.pixelFindContext = this.pixelFindCanvasEl.getContext('2d', {\n willReadFrequently: true,\n })!;\n this.setTargetFindTolerance(this.targetFindTolerance);\n }\n\n /**\n * Returns context of top canvas where interactions are drawn\n * @returns {CanvasRenderingContext2D}\n */\n getTopContext(): CanvasRenderingContext2D {\n return this.elements.upper.ctx;\n }\n\n /**\n * Returns context of canvas where object selection is drawn\n * @alias\n * @return {CanvasRenderingContext2D}\n */\n getSelectionContext(): CanvasRenderingContext2D {\n return this.elements.upper.ctx;\n }\n\n /**\n * Returns <canvas> element on which object selection is drawn\n * @return {HTMLCanvasElement}\n */\n getSelectionElement(): HTMLCanvasElement {\n return this.elements.upper.el;\n }\n\n /**\n * Returns currently active object\n * @return {FabricObject | null} active object\n */\n getActiveObject(): FabricObject | undefined {\n return this._activeObject;\n }\n\n /**\n * Returns an array with the current selected objects\n * @return {FabricObject[]} active objects array\n */\n getActiveObjects(): FabricObject[] {\n const active = this._activeObject;\n return isActiveSelection(active)\n ? active.getObjects()\n : active\n ? [active]\n : [];\n }\n\n /**\n * @private\n * Compares the old activeObject with the current one and fires correct events\n * @param {FabricObject[]} oldObjects old activeObject\n * @param {TPointerEvent} e mouse event triggering the selection events\n */\n _fireSelectionEvents(oldObjects: FabricObject[], e?: TPointerEvent) {\n let somethingChanged = false,\n invalidate = false;\n const objects = this.getActiveObjects(),\n added: FabricObject[] = [],\n removed: FabricObject[] = [];\n\n oldObjects.forEach((target) => {\n if (!objects.includes(target)) {\n somethingChanged = true;\n target.fire('deselected', {\n e,\n target,\n });\n removed.push(target);\n }\n });\n\n objects.forEach((target) => {\n if (!oldObjects.includes(target)) {\n somethingChanged = true;\n target.fire('selected', {\n e,\n target,\n });\n added.push(target);\n }\n });\n\n if (oldObjects.length > 0 && objects.length > 0) {\n invalidate = true;\n somethingChanged &&\n this.fire('selection:updated', {\n e,\n selected: added,\n deselected: removed,\n });\n } else if (objects.length > 0) {\n invalidate = true;\n this.fire('selection:created', {\n e,\n selected: added,\n });\n } else if (oldObjects.length > 0) {\n invalidate = true;\n this.fire('selection:cleared', {\n e,\n deselected: removed,\n });\n }\n invalidate && (this._objectsToRender = undefined);\n }\n\n /**\n * Sets given object as the only active object on canvas\n * @param {FabricObject} object Object to set as an active one\n * @param {TPointerEvent} [e] Event (passed along when firing \"object:selected\")\n * @return {Boolean} true if the object has been selected\n */\n setActiveObject(object: FabricObject, e?: TPointerEvent) {\n // we can't inline this, since _setActiveObject will change what getActiveObjects returns\n const currentActives = this.getActiveObjects();\n const selected = this._setActiveObject(object, e);\n this._fireSelectionEvents(currentActives, e);\n return selected;\n }\n\n /**\n * This is supposed to be equivalent to setActiveObject but without firing\n * any event. There is commitment to have this stay this way.\n * This is the functional part of setActiveObject.\n * @param {Object} object to set as active\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\n * @return {Boolean} true if the object has been selected\n */\n _setActiveObject(object: FabricObject, e?: TPointerEvent) {\n const prevActiveObject = this._activeObject;\n if (prevActiveObject === object) {\n return false;\n }\n // after calling this._discardActiveObject, this,_activeObject could be undefined\n if (!this._discardActiveObject(e, object) && this._activeObject) {\n // refused to deselect\n return false;\n }\n if (object.onSelect({ e })) {\n return false;\n }\n\n this._activeObject = object;\n\n if (isActiveSelection(object) && prevActiveObject !== object) {\n object.set('canvas', this);\n }\n object.setCoords();\n\n return true;\n }\n\n /**\n * This is supposed to be equivalent to discardActiveObject but without firing\n * any selection events ( can still fire object transformation events ). There is commitment to have this stay this way.\n * This is the functional part of discardActiveObject.\n * @param {Event} [e] Event (passed along when firing \"object:deselected\")\n * @param {Object} object the next object to set as active, reason why we are discarding this\n * @return {Boolean} true if the active object has been discarded\n */\n _discardActiveObject(\n e?: TPointerEvent,\n object?: FabricObject,\n ): this is { _activeObject: undefined } {\n const obj = this._activeObject;\n if (obj) {\n // onDeselect return TRUE to cancel selection;\n if (obj.onDeselect({ e, object })) {\n return false;\n }\n if (this._currentTransform && this._currentTransform.target === obj) {\n this.endCurrentTransform(e);\n }\n if (isActiveSelection(obj) && obj === this._hoveredTarget) {\n this._hoveredTarget = undefined;\n }\n this._activeObject = undefined;\n return true;\n }\n return false;\n }\n\n /**\n * Discards currently active object and fire events. If the function is called by fabric\n * as a consequence of a mouse event, the event is passed as a parameter and\n * sent to the fire function for the custom events. When used as a method the\n * e param does not have any application.\n * @param {event} e\n * @return {Boolean} true if the active object has been discarded\n */\n discardActiveObject(e?: TPointerEvent): this is { _activeObject: undefined } {\n const currentActives = this.getActiveObjects(),\n activeObject = this.getActiveObject();\n if (currentActives.length) {\n this.fire('before:selection:cleared', {\n e,\n deselected: [activeObject!],\n });\n }\n const discarded = this._discardActiveObject(e);\n this._fireSelectionEvents(currentActives, e);\n return discarded;\n }\n\n /**\n * End the current transform.\n * You don't usually need to call this method unless you are interrupting a user initiated transform\n * because of some other event ( a press of key combination, or something that block the user UX )\n * @param {Event} [e] send the mouse event that generate the finalize down, so it can be used in the event\n */\n endCurrentTransform(e?: TPointerEvent) {\n const transform = this._currentTransform;\n this._finalizeCurrentTransform(e);\n if (transform && transform.target) {\n // this could probably go inside _finalizeCurrentTransform\n transform.target.isMoving = false;\n }\n this._currentTransform = null;\n }\n\n /**\n * @private\n * @param {Event} e send the mouse event that generate the finalize down, so it can be used in the event\n */\n _finalizeCurrentTransform(e?: TPointerEvent) {\n const transform = this._currentTransform!,\n target = transform.target,\n options = {\n e,\n target,\n transform,\n action: transform.action,\n };\n\n if (target._scaling) {\n target._scaling = false;\n }\n\n target.setCoords();\n\n if (transform.actionPerformed) {\n this.fire('object:modified', options);\n target.fire(MODIFIED, options);\n }\n }\n\n /**\n * Sets viewport transformation of this canvas instance\n * @param {Array} vpt a Canvas 2D API transform matrix\n */\n setViewportTransform(vpt: TMat2D) {\n super.setViewportTransform(vpt);\n const activeObject = this._activeObject;\n if (activeObject) {\n activeObject.setCoords();\n }\n }\n\n /**\n * @override clears active selection ref and interactive canvas elements and contexts\n */\n destroy() {\n // dispose of active selection\n const activeObject = this._activeObject;\n if (isActiveSelection(activeObject)) {\n activeObject.removeAll();\n activeObject.dispose();\n }\n\n delete this._activeObject;\n\n super.destroy();\n\n // free resources\n\n // pixel find canvas\n // @ts-expect-error disposing\n this.pixelFindContext = null;\n // @ts-expect-error disposing\n this.pixelFindCanvasEl = undefined;\n }\n\n /**\n * Clears all contexts (background, main, top) of an instance\n */\n clear() {\n // discard active object and fire events\n this.discardActiveObject();\n // make sure we clear the active object in case it refused to be discarded\n this._activeObject = undefined;\n this.clearContext(this.contextTop);\n super.clear();\n }\n\n /**\n * Draws objects' controls (borders/controls)\n * @param {CanvasRenderingContext2D} ctx Context to render controls on\n */\n drawControls(ctx: CanvasRenderingContext2D) {\n const activeObject = this._activeObject;\n\n if (activeObject) {\n activeObject._renderControls(ctx);\n }\n }\n\n /**\n * @private\n */\n protected _toObject(\n instance: FabricObject,\n methodName: 'toObject' | 'toDatalessObject',\n propertiesToInclude: string[],\n ): Record {\n // If the object is part of the current selection group, it should\n // be transformed appropriately\n // i.e. it should be serialised as it would appear if the selection group\n // were to be destroyed.\n const originalProperties = this._realizeGroupTransformOnObject(instance),\n object = super._toObject(instance, methodName, propertiesToInclude);\n //Undo the damage we did by changing all of its properties\n instance.set(originalProperties);\n return object;\n }\n\n /**\n * Realizes an object's group transformation on it\n * @private\n * @param {FabricObject} [instance] the object to transform (gets mutated)\n * @returns the original values of instance which were changed\n */\n private _realizeGroupTransformOnObject(\n instance: FabricObject,\n ): Partial {\n const { group } = instance;\n if (group && isActiveSelection(group) && this._activeObject === group) {\n const layoutProps = [\n 'angle',\n 'flipX',\n 'flipY',\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n ] as (keyof typeof instance)[];\n const originalValues = pick(instance, layoutProps);\n addTransformToObject(instance, group.calcOwnMatrix());\n return originalValues;\n } else {\n return {};\n }\n }\n\n /**\n * @private\n */\n _setSVGObject(\n markup: string[],\n instance: FabricObject,\n reviver?: TSVGReviver,\n ) {\n // If the object is in a selection group, simulate what would happen to that\n // object when the group is deselected\n const originalProperties = this._realizeGroupTransformOnObject(instance);\n super._setSVGObject(markup, instance, reviver);\n instance.set(originalProperties);\n }\n}\n","import type { TPointerEvent } from '../EventTypeDefs';\nimport type { ITextBehavior } from '../shapes/IText/ITextBehavior';\nimport { removeFromArray } from '../util/internals/removeFromArray';\nimport type { Canvas } from './Canvas';\n\n/**\n * In charge of synchronizing all interactive text instances of a canvas\n */\nexport class TextEditingManager {\n private targets: ITextBehavior[] = [];\n private declare target?: ITextBehavior;\n private __disposer: VoidFunction;\n\n constructor(canvas: Canvas) {\n const cb = () => {\n const { hiddenTextarea } =\n (canvas.getActiveObject() as ITextBehavior) || {};\n hiddenTextarea && hiddenTextarea.focus();\n };\n const el = canvas.upperCanvasEl;\n el.addEventListener('click', cb);\n this.__disposer = () => el.removeEventListener('click', cb);\n }\n\n exitTextEditing() {\n this.target = undefined;\n this.targets.forEach((target) => {\n if (target.isEditing) {\n target.exitEditing();\n }\n });\n }\n\n add(target: ITextBehavior) {\n this.targets.push(target);\n }\n\n remove(target: ITextBehavior) {\n this.unregister(target);\n removeFromArray(this.targets, target);\n }\n\n register(target: ITextBehavior) {\n this.target = target;\n }\n\n unregister(target: ITextBehavior) {\n if (target === this.target) {\n this.target = undefined;\n }\n }\n\n onMouseMove(e: TPointerEvent) {\n this.target?.isEditing && this.target.updateSelectionOnMouseMove(e);\n }\n\n clear() {\n this.targets = [];\n this.target = undefined;\n }\n\n dispose() {\n this.clear();\n this.__disposer();\n // @ts-expect-error disposing\n delete this.__disposer;\n }\n}\n","import { classRegistry } from '../ClassRegistry';\nimport { NONE } from '../constants';\nimport type {\n CanvasEvents,\n DragEventData,\n ObjectEvents,\n TPointerEvent,\n TPointerEventNames,\n Transform,\n} from '../EventTypeDefs';\nimport { Point } from '../Point';\nimport type { ActiveSelection } from '../shapes/ActiveSelection';\nimport type { Group } from '../shapes/Group';\nimport type { IText } from '../shapes/IText/IText';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { isTouchEvent, stopEvent } from '../util/dom_event';\nimport { getDocumentFromElement, getWindowFromElement } from '../util/dom_misc';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { isActiveSelection } from '../util/typeAssertions';\nimport type { CanvasOptions, TCanvasOptions } from './CanvasOptions';\nimport { SelectableCanvas } from './SelectableCanvas';\nimport { TextEditingManager } from './TextEditingManager';\n\nconst addEventOptions = { passive: false } as EventListenerOptions;\n\nconst getEventPoints = (canvas: Canvas, e: TPointerEvent) => {\n const viewportPoint = canvas.getViewportPoint(e);\n const scenePoint = canvas.getScenePoint(e);\n return {\n viewportPoint,\n scenePoint,\n pointer: viewportPoint,\n absolutePointer: scenePoint,\n };\n};\n\n// just to be clear, the utils are now deprecated and those are here exactly as minifier helpers\n// because el.addEventListener can't me be minified while a const yes and we use it 47 times in this file.\n// few bytes but why give it away.\nconst addListener = (\n el: HTMLElement | Document,\n ...args: Parameters\n) => el.addEventListener(...args);\nconst removeListener = (\n el: HTMLElement | Document,\n ...args: Parameters\n) => el.removeEventListener(...args);\n\nconst syntheticEventConfig = {\n mouse: {\n in: 'over',\n out: 'out',\n targetIn: 'mouseover',\n targetOut: 'mouseout',\n canvasIn: 'mouse:over',\n canvasOut: 'mouse:out',\n },\n drag: {\n in: 'enter',\n out: 'leave',\n targetIn: 'dragenter',\n targetOut: 'dragleave',\n canvasIn: 'drag:enter',\n canvasOut: 'drag:leave',\n },\n} as const;\n\ntype TSyntheticEventContext = {\n mouse: { e: TPointerEvent };\n drag: DragEventData;\n};\n\nexport class Canvas extends SelectableCanvas implements CanvasOptions {\n /**\n * Contains the id of the touch event that owns the fabric transform\n * @type Number\n * @private\n */\n declare mainTouchId?: number;\n\n declare enablePointerEvents: boolean;\n\n /**\n * Holds a reference to a setTimeout timer for event synchronization\n * @type number\n * @private\n */\n private declare _willAddMouseDown: number;\n\n /**\n * Holds a reference to an object on the canvas that is receiving the drag over event.\n * @type FabricObject\n * @private\n */\n private declare _draggedoverTarget?: FabricObject;\n\n /**\n * Holds a reference to an object on the canvas from where the drag operation started\n * @type FabricObject\n * @private\n */\n private declare _dragSource?: FabricObject;\n\n /**\n * Holds a reference to an object on the canvas that is the current drop target\n * May differ from {@link _draggedoverTarget}\n * @todo inspect whether {@link _draggedoverTarget} and {@link _dropTarget} should be merged somehow\n * @type FabricObject\n * @private\n */\n private declare _dropTarget: FabricObject | undefined;\n\n private _isClick: boolean;\n\n textEditingManager = new TextEditingManager(this);\n\n constructor(el?: string | HTMLCanvasElement, options: TCanvasOptions = {}) {\n super(el, options);\n // bind event handlers\n (\n [\n '_onMouseDown',\n '_onTouchStart',\n '_onMouseMove',\n '_onMouseUp',\n '_onTouchEnd',\n '_onResize',\n // '_onGesture',\n // '_onDrag',\n // '_onShake',\n // '_onLongPress',\n // '_onOrientationChange',\n '_onMouseWheel',\n '_onMouseOut',\n '_onMouseEnter',\n '_onContextMenu',\n '_onDoubleClick',\n '_onDragStart',\n '_onDragEnd',\n '_onDragProgress',\n '_onDragOver',\n '_onDragEnter',\n '_onDragLeave',\n '_onDrop',\n ] as (keyof this)[]\n ).forEach((eventHandler) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n this[eventHandler] = (this[eventHandler] as Function).bind(this);\n });\n // register event handlers\n this.addOrRemove(addListener, 'add');\n }\n\n /**\n * return an event prefix pointer or mouse.\n * @private\n */\n private _getEventPrefix() {\n return this.enablePointerEvents ? 'pointer' : 'mouse';\n }\n\n addOrRemove(functor: any, _eventjsFunctor: 'add' | 'remove') {\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n functor(getWindowFromElement(canvasElement), 'resize', this._onResize);\n functor(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n functor(\n canvasElement,\n `${eventTypePrefix}move`,\n this._onMouseMove,\n addEventOptions,\n );\n functor(canvasElement, `${eventTypePrefix}out`, this._onMouseOut);\n functor(canvasElement, `${eventTypePrefix}enter`, this._onMouseEnter);\n functor(canvasElement, 'wheel', this._onMouseWheel);\n functor(canvasElement, 'contextmenu', this._onContextMenu);\n functor(canvasElement, 'dblclick', this._onDoubleClick);\n functor(canvasElement, 'dragstart', this._onDragStart);\n functor(canvasElement, 'dragend', this._onDragEnd);\n functor(canvasElement, 'dragover', this._onDragOver);\n functor(canvasElement, 'dragenter', this._onDragEnter);\n functor(canvasElement, 'dragleave', this._onDragLeave);\n functor(canvasElement, 'drop', this._onDrop);\n if (!this.enablePointerEvents) {\n functor(canvasElement, 'touchstart', this._onTouchStart, addEventOptions);\n }\n // if (typeof eventjs !== 'undefined' && eventjsFunctor in eventjs) {\n // eventjs[eventjsFunctor](canvasElement, 'gesture', this._onGesture);\n // eventjs[eventjsFunctor](canvasElement, 'drag', this._onDrag);\n // eventjs[eventjsFunctor](\n // canvasElement,\n // 'orientation',\n // this._onOrientationChange\n // );\n // eventjs[eventjsFunctor](canvasElement, 'shake', this._onShake);\n // eventjs[eventjsFunctor](canvasElement, 'longpress', this._onLongPress);\n // }\n }\n\n /**\n * Removes all event listeners\n */\n removeListeners() {\n this.addOrRemove(removeListener, 'remove');\n // if you dispose on a mouseDown, before mouse up, you need to clean document to...\n const eventTypePrefix = this._getEventPrefix();\n const doc = getDocumentFromElement(this.upperCanvasEl);\n removeListener(\n doc,\n `${eventTypePrefix}up`,\n this._onMouseUp as EventListener,\n );\n removeListener(\n doc,\n 'touchend',\n this._onTouchEnd as EventListener,\n addEventOptions,\n );\n removeListener(\n doc,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n removeListener(\n doc,\n 'touchmove',\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n }\n\n /**\n * @private\n * @param {Event} [e] Event object fired on wheel event\n */\n private _onMouseWheel(e: MouseEvent) {\n this.__onMouseWheel(e);\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n private _onMouseOut(e: TPointerEvent) {\n const target = this._hoveredTarget;\n const shared = {\n e,\n ...getEventPoints(this, e),\n };\n this.fire('mouse:out', { ...shared, target });\n this._hoveredTarget = undefined;\n target && target.fire('mouseout', { ...shared });\n this._hoveredTargets.forEach((nestedTarget) => {\n this.fire('mouse:out', { ...shared, target: nestedTarget });\n nestedTarget && nestedTarget.fire('mouseout', { ...shared });\n });\n this._hoveredTargets = [];\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseenter\n */\n private _onMouseEnter(e: TPointerEvent) {\n // This find target and consequent 'mouse:over' is used to\n // clear old instances on hovered target.\n // calling findTarget has the side effect of killing target.__corner.\n // as a short term fix we are not firing this if we are currently transforming.\n // as a long term fix we need to separate the action of finding a target with the\n // side effects we added to it.\n if (!this._currentTransform && !this.findTarget(e)) {\n this.fire('mouse:over', {\n e,\n ...getEventPoints(this, e),\n });\n this._hoveredTarget = undefined;\n this._hoveredTargets = [];\n }\n }\n\n /**\n * supports native like text dragging\n * @private\n * @param {DragEvent} e\n */\n private _onDragStart(e: DragEvent) {\n this._isClick = false;\n const activeObject = this.getActiveObject();\n if (activeObject && activeObject.onDragStart(e)) {\n this._dragSource = activeObject;\n const options = { e, target: activeObject };\n this.fire('dragstart', options);\n activeObject.fire('dragstart', options);\n addListener(\n this.upperCanvasEl,\n 'drag',\n this._onDragProgress as EventListener,\n );\n return;\n }\n stopEvent(e);\n }\n\n /**\n * First we clear top context where the effects are being rendered.\n * Then we render the effects.\n * Doing so will render the correct effect for all cases including an overlap between `source` and `target`.\n * @private\n */\n private _renderDragEffects(\n e: DragEvent,\n source?: FabricObject,\n target?: FabricObject,\n ) {\n let dirty = false;\n // clear top context\n const dropTarget = this._dropTarget;\n if (dropTarget && dropTarget !== source && dropTarget !== target) {\n dropTarget.clearContextTop();\n dirty = true;\n }\n source?.clearContextTop();\n target !== source && target?.clearContextTop();\n // render effects\n const ctx = this.contextTop;\n ctx.save();\n ctx.transform(...this.viewportTransform);\n if (source) {\n ctx.save();\n source.transform(ctx);\n source.renderDragSourceEffect(e);\n ctx.restore();\n dirty = true;\n }\n if (target) {\n ctx.save();\n target.transform(ctx);\n target.renderDropTargetEffect(e);\n ctx.restore();\n dirty = true;\n }\n ctx.restore();\n dirty && (this.contextTopDirty = true);\n }\n\n /**\n * supports native like text dragging\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#finishing_a_drag\n * @private\n * @param {DragEvent} e\n */\n private _onDragEnd(e: DragEvent) {\n const didDrop = !!e.dataTransfer && e.dataTransfer.dropEffect !== NONE,\n dropTarget = didDrop ? this._activeObject : undefined,\n options = {\n e,\n target: this._dragSource as FabricObject,\n subTargets: this.targets,\n dragSource: this._dragSource as FabricObject,\n didDrop,\n dropTarget: dropTarget as FabricObject,\n };\n removeListener(\n this.upperCanvasEl,\n 'drag',\n this._onDragProgress as EventListener,\n );\n this.fire('dragend', options);\n this._dragSource && this._dragSource.fire('dragend', options);\n delete this._dragSource;\n // we need to call mouse up synthetically because the browser won't\n this._onMouseUp(e);\n }\n\n /**\n * fire `drag` event on canvas and drag source\n * @private\n * @param {DragEvent} e\n */\n private _onDragProgress(e: DragEvent) {\n const options = {\n e,\n target: this._dragSource as FabricObject | undefined,\n dragSource: this._dragSource as FabricObject | undefined,\n dropTarget: this._draggedoverTarget as FabricObject,\n };\n this.fire('drag', options);\n this._dragSource && this._dragSource.fire('drag', options);\n }\n\n /**\n * As opposed to {@link findTarget} we want the top most object to be returned w/o the active object cutting in line.\n * Override at will\n */\n protected findDragTargets(e: DragEvent) {\n this.targets = [];\n const target = this._searchPossibleTargets(\n this._objects,\n this.getViewportPoint(e),\n );\n return {\n target,\n targets: [...this.targets],\n };\n }\n\n /**\n * prevent default to allow drop event to be fired\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#specifying_drop_targets\n * @private\n * @param {DragEvent} [e] Event object fired on Event.js shake\n */\n private _onDragOver(e: DragEvent) {\n const eventType = 'dragover';\n const { target, targets } = this.findDragTargets(e);\n const dragSource = this._dragSource as FabricObject;\n const options = {\n e,\n target,\n subTargets: targets,\n dragSource,\n canDrop: false,\n dropTarget: undefined,\n };\n let dropTarget;\n // fire on canvas\n this.fire(eventType, options);\n // make sure we fire dragenter events before dragover\n // if dragleave is needed, object will not fire dragover so we don't need to trouble ourselves with it\n this._fireEnterLeaveEvents(target, options);\n if (target) {\n if (target.canDrop(e)) {\n dropTarget = target;\n }\n target.fire(eventType, options);\n }\n // propagate the event to subtargets\n for (let i = 0; i < targets.length; i++) {\n const subTarget = targets[i];\n // accept event only if previous targets didn't (the accepting target calls `preventDefault` to inform that the event is taken)\n // TODO: verify if those should loop in inverse order then?\n // what is the order of subtargets?\n if (subTarget.canDrop(e)) {\n dropTarget = subTarget;\n }\n subTarget.fire(eventType, options);\n }\n // render drag effects now that relations between source and target is clear\n this._renderDragEffects(e, dragSource, dropTarget);\n this._dropTarget = dropTarget;\n }\n\n /**\n * fire `dragleave` on `dragover` targets\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n */\n private _onDragEnter(e: DragEvent) {\n const { target, targets } = this.findDragTargets(e);\n const options = {\n e,\n target,\n subTargets: targets,\n dragSource: this._dragSource,\n };\n this.fire('dragenter', options);\n // fire dragenter on targets\n this._fireEnterLeaveEvents(target, options);\n }\n\n /**\n * fire `dragleave` on `dragover` targets\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n */\n private _onDragLeave(e: DragEvent) {\n const options = {\n e,\n target: this._draggedoverTarget,\n subTargets: this.targets,\n dragSource: this._dragSource,\n };\n this.fire('dragleave', options);\n\n // fire dragleave on targets\n this._fireEnterLeaveEvents(undefined, options);\n this._renderDragEffects(e, this._dragSource);\n this._dropTarget = undefined;\n // clear targets\n this.targets = [];\n this._hoveredTargets = [];\n }\n\n /**\n * `drop:before` is a an event that allows you to schedule logic\n * before the `drop` event. Prefer `drop` event always, but if you need\n * to run some drop-disabling logic on an event, since there is no way\n * to handle event handlers ordering, use `drop:before`\n * @private\n * @param {Event} e\n */\n private _onDrop(e: DragEvent) {\n const { target, targets } = this.findDragTargets(e);\n const options = this._basicEventHandler('drop:before', {\n e,\n target,\n subTargets: targets,\n dragSource: this._dragSource,\n ...getEventPoints(this, e),\n });\n // will be set by the drop target\n options.didDrop = false;\n // will be set by the drop target, used in case options.target refuses the drop\n options.dropTarget = undefined;\n // fire `drop`\n this._basicEventHandler('drop', options);\n // inform canvas of the drop\n // we do this because canvas was unaware of what happened at the time the `drop` event was fired on it\n // use for side effects\n this.fire('drop:after', options);\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n private _onContextMenu(e: TPointerEvent): false {\n const target = this.findTarget(e),\n subTargets = this.targets || [];\n const options = this._basicEventHandler('contextmenu:before', {\n e,\n target,\n subTargets,\n });\n // TODO: this line is silly because the dev can subscribe to the event and prevent it themselves\n this.stopContextMenu && stopEvent(e);\n this._basicEventHandler('contextmenu', options);\n return false;\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n private _onDoubleClick(e: TPointerEvent) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'dblclick');\n this._resetTransformEventData();\n }\n\n /**\n * Return a the id of an event.\n * returns either the pointerId or the identifier or 0 for the mouse event\n * @private\n * @param {Event} evt Event object\n */\n getPointerId(evt: TouchEvent | PointerEvent): number {\n const changedTouches = (evt as TouchEvent).changedTouches;\n\n if (changedTouches) {\n return changedTouches[0] && changedTouches[0].identifier;\n }\n\n if (this.enablePointerEvents) {\n return (evt as PointerEvent).pointerId;\n }\n\n return -1;\n }\n\n /**\n * Determines if an event has the id of the event that is considered main\n * @private\n * @param {evt} event Event object\n */\n _isMainEvent(evt: TPointerEvent): boolean {\n if ((evt as PointerEvent).isPrimary === true) {\n return true;\n }\n if ((evt as PointerEvent).isPrimary === false) {\n return false;\n }\n if (evt.type === 'touchend' && (evt as TouchEvent).touches.length === 0) {\n return true;\n }\n if ((evt as TouchEvent).changedTouches) {\n return (\n (evt as TouchEvent).changedTouches[0].identifier === this.mainTouchId\n );\n }\n return true;\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchStart(e: TouchEvent) {\n e.preventDefault();\n if (this.mainTouchId === undefined) {\n this.mainTouchId = this.getPointerId(e);\n }\n this.__onMouseDown(e);\n this._resetTransformEventData();\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n const doc = getDocumentFromElement(canvasElement);\n addListener(\n doc,\n 'touchend',\n this._onTouchEnd as EventListener,\n addEventOptions,\n );\n addListener(\n doc,\n 'touchmove',\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n // Unbind mousedown to prevent double triggers from touch devices\n removeListener(\n canvasElement,\n `${eventTypePrefix}down`,\n this._onMouseDown as EventListener,\n );\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDown(e: TPointerEvent) {\n this.__onMouseDown(e);\n this._resetTransformEventData();\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n removeListener(\n canvasElement,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n const doc = getDocumentFromElement(canvasElement);\n addListener(doc, `${eventTypePrefix}up`, this._onMouseUp as EventListener);\n addListener(\n doc,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchEnd(e: TouchEvent) {\n if (e.touches.length > 0) {\n // if there are still touches stop here\n return;\n }\n this.__onMouseUp(e);\n this._resetTransformEventData();\n delete this.mainTouchId;\n const eventTypePrefix = this._getEventPrefix();\n const doc = getDocumentFromElement(this.upperCanvasEl);\n removeListener(\n doc,\n 'touchend',\n this._onTouchEnd as EventListener,\n addEventOptions,\n );\n removeListener(\n doc,\n 'touchmove',\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n if (this._willAddMouseDown) {\n clearTimeout(this._willAddMouseDown);\n }\n this._willAddMouseDown = setTimeout(() => {\n // Wait 400ms before rebinding mousedown to prevent double triggers\n // from touch devices\n addListener(\n this.upperCanvasEl,\n `${eventTypePrefix}down`,\n this._onMouseDown as EventListener,\n );\n this._willAddMouseDown = 0;\n }, 400) as unknown as number;\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUp(e: TPointerEvent) {\n this.__onMouseUp(e);\n this._resetTransformEventData();\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n if (this._isMainEvent(e)) {\n const doc = getDocumentFromElement(this.upperCanvasEl);\n removeListener(\n doc,\n `${eventTypePrefix}up`,\n this._onMouseUp as EventListener,\n );\n removeListener(\n doc,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n addListener(\n canvasElement,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n }\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMove(e: TPointerEvent) {\n const activeObject = this.getActiveObject();\n !this.allowTouchScrolling &&\n (!activeObject ||\n // a drag event sequence is started by the active object flagging itself on mousedown / mousedown:before\n // we must not prevent the event's default behavior in order for the window to start dragging\n !activeObject.shouldStartDragging(e)) &&\n e.preventDefault &&\n e.preventDefault();\n this.__onMouseMove(e);\n }\n\n /**\n * @private\n */\n _onResize() {\n this.calcOffset();\n this._resetTransformEventData();\n }\n\n /**\n * Decides whether the canvas should be redrawn in mouseup and mousedown events.\n * @private\n * @param {Object} target\n */\n _shouldRender(target: FabricObject | undefined) {\n const activeObject = this.getActiveObject();\n // if just one of them is available or if they are both but are different objects\n // this covers: switch of target, from target to no target, selection of target\n // multiSelection with key and mouse\n return (\n !!activeObject !== !!target ||\n (activeObject && target && activeObject !== target)\n );\n }\n\n /**\n * Method that defines the actions when mouse is released on canvas.\n * The method resets the currentTransform parameters, store the image corner\n * position in the image object and render the canvas on top.\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseUp(e: TPointerEvent) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'up:before');\n\n const transform = this._currentTransform;\n const isClick = this._isClick;\n const target = this._target;\n\n // if right/middle click just fire events and return\n // target undefined will make the _handleEvent search the target\n const { button } = e as MouseEvent;\n if (button) {\n ((this.fireMiddleClick && button === 1) ||\n (this.fireRightClick && button === 2)) &&\n this._handleEvent(e, 'up');\n this._resetTransformEventData();\n return;\n }\n\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this._onMouseUpInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n let shouldRender = false;\n if (transform) {\n this._finalizeCurrentTransform(e);\n shouldRender = transform.actionPerformed;\n }\n if (!isClick) {\n const targetWasActive = target === this._activeObject;\n this.handleSelection(e);\n if (!shouldRender) {\n shouldRender =\n this._shouldRender(target) ||\n (!targetWasActive && target === this._activeObject);\n }\n }\n let pointer, corner;\n if (target) {\n const found = target.findControl(\n this.getViewportPoint(e),\n isTouchEvent(e),\n );\n const { key, control } = found || {};\n corner = key;\n if (\n target.selectable &&\n target !== this._activeObject &&\n target.activeOn === 'up'\n ) {\n this.setActiveObject(target, e);\n shouldRender = true;\n } else if (control) {\n const mouseUpHandler = control.getMouseUpHandler(e, target, control);\n if (mouseUpHandler) {\n pointer = this.getScenePoint(e);\n mouseUpHandler.call(control, e, transform!, pointer.x, pointer.y);\n }\n }\n target.isMoving = false;\n }\n // if we are ending up a transform on a different control or a new object\n // fire the original mouse up from the corner that started the transform\n if (\n transform &&\n (transform.target !== target || transform.corner !== corner)\n ) {\n const originalControl =\n transform.target && transform.target.controls[transform.corner],\n originalMouseUpHandler =\n originalControl &&\n originalControl.getMouseUpHandler(\n e,\n transform.target,\n originalControl,\n );\n pointer = pointer || this.getScenePoint(e);\n originalMouseUpHandler &&\n originalMouseUpHandler.call(\n originalControl,\n e,\n transform,\n pointer.x,\n pointer.y,\n );\n }\n this._setCursorFromEvent(e, target);\n this._handleEvent(e, 'up');\n this._groupSelector = null;\n this._currentTransform = null;\n // reset the target information about which corner is selected\n target && (target.__corner = undefined);\n if (shouldRender) {\n this.requestRenderAll();\n } else if (!isClick && !(this._activeObject as IText)?.isEditing) {\n this.renderTop();\n }\n }\n\n _basicEventHandler(\n eventType: T,\n options: (CanvasEvents & ObjectEvents)[T],\n ) {\n const { target, subTargets = [] } = options as {\n target?: FabricObject;\n subTargets: FabricObject[];\n };\n this.fire(eventType, options);\n target && target.fire(eventType, options);\n for (let i = 0; i < subTargets.length; i++) {\n subTargets[i] !== target && subTargets[i].fire(eventType, options);\n }\n return options;\n }\n\n /**\n * @private\n * Handle event firing for target and subtargets\n * @param {TPointerEvent} e event from mouse\n * @param {TPointerEventNames} eventType\n */\n _handleEvent(e: TPointerEvent, eventType: T) {\n const target = this._target,\n targets = this.targets || [],\n options: CanvasEvents[`mouse:${T}`] = {\n e,\n target,\n subTargets: targets,\n ...getEventPoints(this, e),\n transform: this._currentTransform,\n ...(eventType === 'up:before' || eventType === 'up'\n ? {\n isClick: this._isClick,\n currentTarget: this.findTarget(e),\n // set by the preceding `findTarget` call\n currentSubTargets: this.targets,\n }\n : {}),\n } as CanvasEvents[`mouse:${T}`];\n this.fire(`mouse:${eventType}`, options);\n // this may be a little be more complicated of what we want to handle\n target && target.fire(`mouse${eventType}`, options);\n for (let i = 0; i < targets.length; i++) {\n targets[i] !== target && targets[i].fire(`mouse${eventType}`, options);\n }\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDownInDrawingMode(e: TPointerEvent) {\n this._isCurrentlyDrawing = true;\n if (this.getActiveObject()) {\n this.discardActiveObject(e);\n this.requestRenderAll();\n }\n // TODO: this is a scene point so it should be renamed\n const pointer = this.getScenePoint(e);\n this.freeDrawingBrush &&\n this.freeDrawingBrush.onMouseDown(pointer, { e, pointer });\n this._handleEvent(e, 'down');\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMoveInDrawingMode(e: TPointerEvent) {\n if (this._isCurrentlyDrawing) {\n const pointer = this.getScenePoint(e);\n this.freeDrawingBrush &&\n this.freeDrawingBrush.onMouseMove(pointer, {\n e,\n // this is an absolute pointer, the naming is wrong\n pointer,\n });\n }\n this.setCursor(this.freeDrawingCursor);\n this._handleEvent(e, 'move');\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUpInDrawingMode(e: TPointerEvent) {\n const pointer = this.getScenePoint(e);\n if (this.freeDrawingBrush) {\n this._isCurrentlyDrawing = !!this.freeDrawingBrush.onMouseUp({\n e: e,\n // this is an absolute pointer, the naming is wrong\n pointer,\n });\n } else {\n this._isCurrentlyDrawing = false;\n }\n this._handleEvent(e, 'up');\n }\n\n /**\n * Method that defines the actions when mouse is clicked on canvas.\n * The method inits the currentTransform parameters and renders all the\n * canvas so the current image can be placed on the top canvas and the rest\n * in on the container one.\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n __onMouseDown(e: TPointerEvent) {\n this._isClick = true;\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'down:before');\n\n let target: FabricObject | undefined = this._target;\n\n // if right/middle click just fire events\n const { button } = e as MouseEvent;\n if (button) {\n ((this.fireMiddleClick && button === 1) ||\n (this.fireRightClick && button === 2)) &&\n this._handleEvent(e, 'down');\n this._resetTransformEventData();\n return;\n }\n\n if (this.isDrawingMode) {\n this._onMouseDownInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n // ignore if some object is being transformed at this moment\n if (this._currentTransform) {\n return;\n }\n\n let shouldRender = this._shouldRender(target);\n let grouped = false;\n if (this.handleMultiSelection(e, target)) {\n // active object might have changed while grouping\n target = this._activeObject;\n grouped = true;\n shouldRender = true;\n } else if (this._shouldClearSelection(e, target)) {\n this.discardActiveObject(e);\n }\n // we start a group selector rectangle if\n // selection is enabled\n // and there is no target, or the following 3 conditions are satisfied:\n // target is not selectable ( otherwise we selected it )\n // target is not editing\n // target is not already selected ( otherwise we drag )\n if (\n this.selection &&\n (!target ||\n (!target.selectable &&\n !(target as IText).isEditing &&\n target !== this._activeObject))\n ) {\n const p = this.getScenePoint(e);\n this._groupSelector = {\n x: p.x,\n y: p.y,\n deltaY: 0,\n deltaX: 0,\n };\n }\n\n if (target) {\n const alreadySelected = target === this._activeObject;\n if (target.selectable && target.activeOn === 'down') {\n this.setActiveObject(target, e);\n }\n const handle = target.findControl(\n this.getViewportPoint(e),\n isTouchEvent(e),\n );\n if (target === this._activeObject && (handle || !grouped)) {\n this._setupCurrentTransform(e, target, alreadySelected);\n const control = handle ? handle.control : undefined,\n pointer = this.getScenePoint(e),\n mouseDownHandler =\n control && control.getMouseDownHandler(e, target, control);\n mouseDownHandler &&\n mouseDownHandler.call(\n control,\n e,\n this._currentTransform!,\n pointer.x,\n pointer.y,\n );\n }\n }\n // we clear `_objectsToRender` in case of a change in order to repopulate it at rendering\n // run before firing the `down` event to give the dev a chance to populate it themselves\n shouldRender && (this._objectsToRender = undefined);\n this._handleEvent(e, 'down');\n // we must renderAll so that we update the visuals\n shouldRender && this.requestRenderAll();\n }\n\n /**\n * reset cache form common information needed during event processing\n * @private\n */\n _resetTransformEventData() {\n this._target = undefined;\n this._pointer = undefined;\n this._absolutePointer = undefined;\n }\n\n /**\n * Cache common information needed during event processing\n * @private\n * @param {Event} e Event object fired on event\n */\n _cacheTransformEventData(e: TPointerEvent) {\n // reset in order to avoid stale caching\n this._resetTransformEventData();\n this._pointer = this.getViewportPoint(e);\n this._absolutePointer = sendPointToPlane(\n this._pointer,\n undefined,\n this.viewportTransform,\n );\n this._target = this._currentTransform\n ? this._currentTransform.target\n : this.findTarget(e);\n }\n\n /**\n * Method that defines the actions when mouse is hovering the canvas.\n * The currentTransform parameter will define whether the user is rotating/scaling/translating\n * an image or neither of them (only hovering). A group selection is also possible and would cancel\n * all any other type of action.\n * In case of an image transformation only the top canvas will be rendered.\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n __onMouseMove(e: TPointerEvent) {\n this._isClick = false;\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'move:before');\n\n if (this.isDrawingMode) {\n this._onMouseMoveInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n const groupSelector = this._groupSelector;\n\n // We initially clicked in an empty area, so we draw a box for multiple selection\n if (groupSelector) {\n const pointer = this.getScenePoint(e);\n\n groupSelector.deltaX = pointer.x - groupSelector.x;\n groupSelector.deltaY = pointer.y - groupSelector.y;\n\n this.renderTop();\n } else if (!this._currentTransform) {\n const target = this.findTarget(e);\n this._setCursorFromEvent(e, target);\n this._fireOverOutEvents(e, target);\n } else {\n this._transformObject(e);\n }\n this.textEditingManager.onMouseMove(e);\n this._handleEvent(e, 'move');\n this._resetTransformEventData();\n }\n\n /**\n * Manage the mouseout, mouseover events for the fabric object on the canvas\n * @param {Fabric.Object} target the target where the target from the mousemove event\n * @param {Event} e Event object fired on mousemove\n * @private\n */\n _fireOverOutEvents(e: TPointerEvent, target?: FabricObject) {\n const _hoveredTarget = this._hoveredTarget,\n _hoveredTargets = this._hoveredTargets,\n targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents('mouse', {\n e,\n target,\n oldTarget: _hoveredTarget,\n fireCanvas: true,\n });\n for (let i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents('mouse', {\n e,\n target: targets[i],\n oldTarget: _hoveredTargets[i],\n });\n }\n this._hoveredTarget = target;\n this._hoveredTargets = this.targets.concat();\n }\n\n /**\n * Manage the dragEnter, dragLeave events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the onDrag event\n * @param {Object} data Event object fired on dragover\n * @private\n */\n _fireEnterLeaveEvents(target: FabricObject | undefined, data: DragEventData) {\n const draggedoverTarget = this._draggedoverTarget,\n _hoveredTargets = this._hoveredTargets,\n targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents('drag', {\n ...data,\n target,\n oldTarget: draggedoverTarget,\n fireCanvas: true,\n });\n for (let i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents('drag', {\n ...data,\n target: targets[i],\n oldTarget: _hoveredTargets[i],\n });\n }\n this._draggedoverTarget = target;\n }\n\n /**\n * Manage the synthetic in/out events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the supported events\n * @param {Object} data Event object fired\n * @param {Object} config configuration for the function to work\n * @param {String} config.targetName property on the canvas where the old target is stored\n * @param {String} [config.canvasEvtOut] name of the event to fire at canvas level for out\n * @param {String} config.evtOut name of the event to fire for out\n * @param {String} [config.canvasEvtIn] name of the event to fire at canvas level for in\n * @param {String} config.evtIn name of the event to fire for in\n * @private\n */\n fireSyntheticInOutEvents(\n type: T,\n {\n target,\n oldTarget,\n fireCanvas,\n e,\n ...data\n }: TSyntheticEventContext[T] & {\n target?: FabricObject;\n oldTarget?: FabricObject;\n fireCanvas?: boolean;\n },\n ) {\n const { targetIn, targetOut, canvasIn, canvasOut } =\n syntheticEventConfig[type];\n const targetChanged = oldTarget !== target;\n\n if (oldTarget && targetChanged) {\n const outOpt: CanvasEvents[typeof canvasOut] = {\n ...data,\n e,\n target: oldTarget,\n nextTarget: target,\n ...getEventPoints(this, e),\n };\n fireCanvas && this.fire(canvasOut, outOpt);\n oldTarget.fire(targetOut, outOpt);\n }\n if (target && targetChanged) {\n const inOpt: CanvasEvents[typeof canvasIn] = {\n ...data,\n e,\n target,\n previousTarget: oldTarget,\n ...getEventPoints(this, e),\n };\n fireCanvas && this.fire(canvasIn, inOpt);\n target.fire(targetIn, inOpt);\n }\n }\n\n /**\n * Method that defines actions when an Event Mouse Wheel\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseWheel(e: TPointerEvent) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'wheel');\n this._resetTransformEventData();\n }\n\n /**\n * @private\n * @param {Event} e Event fired on mousemove\n */\n _transformObject(e: TPointerEvent) {\n const scenePoint = this.getScenePoint(e),\n transform = this._currentTransform!,\n target = transform.target,\n // transform pointer to target's containing coordinate plane\n // both pointer and object should agree on every point\n localPointer = target.group\n ? sendPointToPlane(\n scenePoint,\n undefined,\n target.group.calcTransformMatrix(),\n )\n : scenePoint;\n transform.shiftKey = e.shiftKey;\n transform.altKey = !!this.centeredKey && e[this.centeredKey];\n\n this._performTransformAction(e, transform, localPointer);\n transform.actionPerformed && this.requestRenderAll();\n }\n\n /**\n * @private\n */\n _performTransformAction(\n e: TPointerEvent,\n transform: Transform,\n pointer: Point,\n ) {\n const { action, actionHandler, target } = transform;\n\n const actionPerformed =\n !!actionHandler && actionHandler(e, transform, pointer.x, pointer.y);\n actionPerformed && target.setCoords();\n\n // this object could be created from the function in the control handlers\n if (action === 'drag' && actionPerformed) {\n transform.target.isMoving = true;\n this.setCursor(transform.target.moveCursor || this.moveCursor);\n }\n transform.actionPerformed = transform.actionPerformed || actionPerformed;\n }\n\n /**\n * Sets the cursor depending on where the canvas is being hovered.\n * Note: very buggy in Opera\n * @param {Event} e Event object\n * @param {Object} target Object that the mouse is hovering, if so.\n */\n _setCursorFromEvent(e: TPointerEvent, target?: FabricObject) {\n if (!target) {\n this.setCursor(this.defaultCursor);\n return;\n }\n let hoverCursor = target.hoverCursor || this.hoverCursor;\n const activeSelection = isActiveSelection(this._activeObject)\n ? this._activeObject\n : null,\n // only show proper corner when group selection is not active\n corner =\n (!activeSelection || target.group !== activeSelection) &&\n // here we call findTargetCorner always with undefined for the touch parameter.\n // we assume that if you are using a cursor you do not need to interact with\n // the bigger touch area.\n target.findControl(this.getViewportPoint(e));\n\n if (!corner) {\n if ((target as Group).subTargetCheck) {\n // hoverCursor should come from top-most subTarget,\n // so we walk the array backwards\n this.targets\n .concat()\n .reverse()\n .map((_target) => {\n hoverCursor = _target.hoverCursor || hoverCursor;\n });\n }\n this.setCursor(hoverCursor);\n } else {\n const control = corner.control;\n this.setCursor(control.cursorStyleHandler(e, control, target));\n }\n }\n\n /**\n * ## Handles multiple selection\n * - toggles `target` selection (selects/deselects `target` if it isn't/is selected respectively)\n * - sets the active object in case it is not set or in case there is a single active object left under active selection.\n * ---\n * - If the active object is the active selection we add/remove `target` from it\n * - If not, add the active object and `target` to the active selection and make it the active object.\n * @private\n * @param {TPointerEvent} e Event object\n * @param {FabricObject} target target of event to select/deselect\n * @returns true if grouping occurred\n */\n protected handleMultiSelection(e: TPointerEvent, target?: FabricObject) {\n const activeObject = this._activeObject;\n const isAS = isActiveSelection(activeObject);\n if (\n // check if an active object exists on canvas and if the user is pressing the `selectionKey` while canvas supports multi selection.\n !!activeObject &&\n this._isSelectionKeyPressed(e) &&\n this.selection &&\n // on top of that the user also has to hit a target that is selectable.\n !!target &&\n target.selectable &&\n // group target and active object only if they are different objects\n // else we try to find a subtarget of `ActiveSelection`\n (activeObject !== target || isAS) &&\n // make sure `activeObject` and `target` aren't ancestors of each other in case `activeObject` is not `ActiveSelection`\n // if it is then we want to remove `target` from it\n (isAS ||\n (!target.isDescendantOf(activeObject) &&\n !activeObject.isDescendantOf(target))) &&\n // target accepts selection\n !target.onSelect({ e }) &&\n // make sure we are not on top of a control\n !activeObject.getActiveControl()\n ) {\n if (isAS) {\n const prevActiveObjects = activeObject.getObjects();\n if (target === activeObject) {\n const pointer = this.getViewportPoint(e);\n target =\n // first search active objects for a target to remove\n this.searchPossibleTargets(prevActiveObjects, pointer) ||\n // if not found, search under active selection for a target to add\n // `prevActiveObjects` will be searched but we already know they will not be found\n this.searchPossibleTargets(this._objects, pointer);\n // if nothing is found bail out\n if (!target || !target.selectable) {\n return false;\n }\n }\n if (target.group === activeObject) {\n // `target` is part of active selection => remove it\n activeObject.remove(target);\n this._hoveredTarget = target;\n this._hoveredTargets = [...this.targets];\n // if after removing an object we are left with one only...\n if (activeObject.size() === 1) {\n // activate last remaining object\n // deselecting the active selection will remove the remaining object from it\n this._setActiveObject(activeObject.item(0), e);\n }\n } else {\n // `target` isn't part of active selection => add it\n activeObject.multiSelectAdd(target);\n this._hoveredTarget = activeObject;\n this._hoveredTargets = [...this.targets];\n }\n this._fireSelectionEvents(prevActiveObjects, e);\n } else {\n (activeObject as IText).exitEditing &&\n (activeObject as IText).exitEditing();\n // add the active object and the target to the active selection and set it as the active object\n const klass =\n classRegistry.getClass('ActiveSelection');\n const newActiveSelection = new klass([], {\n /**\n * it is crucial to pass the canvas ref before calling {@link ActiveSelection#multiSelectAdd}\n * since it uses {@link FabricObject#isInFrontOf} which relies on the canvas ref\n */\n canvas: this,\n });\n newActiveSelection.multiSelectAdd(activeObject, target);\n this._hoveredTarget = newActiveSelection;\n // ISSUE 4115: should we consider subTargets here?\n // this._hoveredTargets = [];\n // this._hoveredTargets = this.targets.concat();\n this._setActiveObject(newActiveSelection, e);\n this._fireSelectionEvents([activeObject], e);\n }\n return true;\n }\n return false;\n }\n\n /**\n * ## Handles selection\n * - selects objects that are contained in (and possibly intersecting) the selection bounding box\n * - sets the active object\n * ---\n * runs on mouse up after a mouse move\n */\n protected handleSelection(e: TPointerEvent) {\n if (!this.selection || !this._groupSelector) {\n return false;\n }\n const { x, y, deltaX, deltaY } = this._groupSelector,\n point1 = new Point(x, y),\n point2 = point1.add(new Point(deltaX, deltaY)),\n tl = point1.min(point2),\n br = point1.max(point2),\n size = br.subtract(tl);\n\n const collectedObjects = this.collectObjects(\n {\n left: tl.x,\n top: tl.y,\n width: size.x,\n height: size.y,\n },\n { includeIntersecting: !this.selectionFullyContained },\n ) as FabricObject[];\n\n const objects =\n // though this method runs only after mouse move the pointer could do a mouse up on the same position as mouse down\n // should it be handled as is?\n point1.eq(point2)\n ? collectedObjects[0]\n ? [collectedObjects[0]]\n : []\n : collectedObjects.length > 1\n ? collectedObjects\n .filter((object) => !object.onSelect({ e }))\n .reverse()\n : // `setActiveObject` will call `onSelect(collectedObjects[0])` in this case\n collectedObjects;\n\n // set active object\n if (objects.length === 1) {\n // set as active object\n this.setActiveObject(objects[0], e);\n } else if (objects.length > 1) {\n // add to active selection and make it the active object\n const klass =\n classRegistry.getClass('ActiveSelection');\n this.setActiveObject(new klass(objects, { canvas: this }), e);\n }\n\n // cleanup\n this._groupSelector = null;\n return true;\n }\n\n /**\n * @override clear {@link textEditingManager}\n */\n clear() {\n this.textEditingManager.clear();\n super.clear();\n }\n\n /**\n * @override clear {@link textEditingManager}\n */\n destroy() {\n this.removeListeners();\n this.textEditingManager.dispose();\n super.destroy();\n }\n}\n","export const linearDefaultCoords = {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n};\n\nexport const radialDefaultCoords = {\n ...linearDefaultCoords,\n r1: 0,\n r2: 0,\n};\n","/**\n *\n * @param value value to check if NaN\n * @param [valueIfNaN]\n * @returns `fallback` is `value is NaN\n */\nexport const ifNaN = (value: number, valueIfNaN?: number) => {\n return isNaN(value) && typeof valueIfNaN === 'number' ? valueIfNaN : value;\n};\n","import { ifNaN } from '../util/internals/ifNaN';\nimport { capValue } from '../util/misc/capValue';\n\nconst RE_PERCENT = /^(\\d+\\.\\d+)%|(\\d+)%$/;\n\nexport function isPercent(value: string | null) {\n return value && RE_PERCENT.test(value);\n}\n\n/**\n *\n * @param value\n * @param valueIfNaN\n * @returns ∈ [0, 1]\n */\nexport function parsePercent(\n value: string | number | null | undefined,\n valueIfNaN?: number,\n) {\n const parsed =\n typeof value === 'number'\n ? value\n : typeof value === 'string'\n ? parseFloat(value) / (isPercent(value) ? 100 : 1)\n : NaN;\n return capValue(0, ifNaN(parsed, valueIfNaN), 1);\n}\n","import { Color } from '../../color/Color';\nimport { parsePercent } from '../../parser/percent';\nimport { ifNaN } from '../../util/internals/ifNaN';\nimport type { ColorStop } from '../typedefs';\n\nconst RE_KEY_VALUE_PAIRS = /\\s*;\\s*/;\nconst RE_KEY_VALUE = /\\s*:\\s*/;\n\nfunction parseColorStop(el: SVGStopElement, multiplier: number) {\n let colorValue, opacity;\n const style = el.getAttribute('style');\n if (style) {\n const keyValuePairs = style.split(RE_KEY_VALUE_PAIRS);\n\n if (keyValuePairs[keyValuePairs.length - 1] === '') {\n keyValuePairs.pop();\n }\n\n for (let i = keyValuePairs.length; i--; ) {\n const [key, value] = keyValuePairs[i]\n .split(RE_KEY_VALUE)\n .map((s) => s.trim());\n if (key === 'stop-color') {\n colorValue = value;\n } else if (key === 'stop-opacity') {\n opacity = value;\n }\n }\n }\n\n const color = new Color(\n colorValue || el.getAttribute('stop-color') || 'rgb(0,0,0)',\n );\n\n return {\n offset: parsePercent(el.getAttribute('offset'), 0),\n color: color.toRgb(),\n opacity:\n ifNaN(parseFloat(opacity || el.getAttribute('stop-opacity') || ''), 1) *\n color.getAlpha() *\n multiplier,\n };\n}\n\nexport function parseColorStops(\n el: SVGGradientElement,\n opacityAttr: string | null,\n) {\n const colorStops: ColorStop[] = [],\n colorStopEls = el.getElementsByTagName('stop'),\n multiplier = parsePercent(opacityAttr, 1);\n for (let i = colorStopEls.length; i--; ) {\n colorStops.push(parseColorStop(colorStopEls[i], multiplier));\n }\n return colorStops;\n}\n","import type { GradientType, GradientUnits } from '../typedefs';\n\nexport function parseType(el: SVGGradientElement): GradientType {\n return el.nodeName === 'linearGradient' || el.nodeName === 'LINEARGRADIENT'\n ? 'linear'\n : 'radial';\n}\n\nexport function parseGradientUnits(el: SVGGradientElement): GradientUnits {\n return el.getAttribute('gradientUnits') === 'userSpaceOnUse'\n ? 'pixels'\n : 'percentage';\n}\n","import { isPercent } from '../../parser/percent';\nimport type { TSize } from '../../typedefs';\nimport type { GradientCoords, GradientType, GradientUnits } from '../typedefs';\nimport { parseGradientUnits, parseType } from './misc';\n\nfunction convertPercentUnitsToValues<\n T extends GradientType,\n K extends keyof GradientCoords,\n>(\n valuesToConvert: Record,\n { width, height, gradientUnits }: TSize & { gradientUnits: GradientUnits },\n) {\n let finalValue;\n return (Object.keys(valuesToConvert) as K[]).reduce(\n (acc, prop) => {\n const propValue = valuesToConvert[prop];\n if (propValue === 'Infinity') {\n finalValue = 1;\n } else if (propValue === '-Infinity') {\n finalValue = 0;\n } else {\n finalValue =\n typeof propValue === 'string' ? parseFloat(propValue) : propValue;\n if (typeof propValue === 'string' && isPercent(propValue)) {\n finalValue *= 0.01;\n if (gradientUnits === 'pixels') {\n // then we need to fix those percentages here in svg parsing\n if (prop === 'x1' || prop === 'x2' || prop === 'r2') {\n finalValue *= width;\n }\n if (prop === 'y1' || prop === 'y2') {\n finalValue *= height;\n }\n }\n }\n }\n acc[prop] = finalValue;\n return acc;\n },\n {} as Record,\n );\n}\n\nfunction getValue(el: SVGGradientElement, key: string) {\n return el.getAttribute(key);\n}\n\nexport function parseLinearCoords(el: SVGGradientElement) {\n return {\n x1: getValue(el, 'x1') || 0,\n y1: getValue(el, 'y1') || 0,\n x2: getValue(el, 'x2') || '100%',\n y2: getValue(el, 'y2') || 0,\n };\n}\n\nexport function parseRadialCoords(el: SVGGradientElement) {\n return {\n x1: getValue(el, 'fx') || getValue(el, 'cx') || '50%',\n y1: getValue(el, 'fy') || getValue(el, 'cy') || '50%',\n r1: 0,\n x2: getValue(el, 'cx') || '50%',\n y2: getValue(el, 'cy') || '50%',\n r2: getValue(el, 'r') || '50%',\n };\n}\n\nexport function parseCoords(el: SVGGradientElement, size: TSize) {\n return convertPercentUnitsToValues(\n parseType(el) === 'linear' ? parseLinearCoords(el) : parseRadialCoords(el),\n {\n ...size,\n gradientUnits: parseGradientUnits(el),\n },\n );\n}\n","import { Color } from '../color/Color';\nimport { iMatrix } from '../constants';\nimport { parseTransformAttribute } from '../parser/parseTransformAttribute';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { uid } from '../util/internals/uid';\nimport { pick } from '../util/misc/pick';\nimport { matrixToSVG } from '../util/misc/svgParsing';\nimport { linearDefaultCoords, radialDefaultCoords } from './constants';\nimport { parseColorStops } from './parser/parseColorStops';\nimport { parseCoords } from './parser/parseCoords';\nimport { parseType, parseGradientUnits } from './parser/misc';\nimport type {\n ColorStop,\n GradientCoords,\n GradientOptions,\n GradientType,\n GradientUnits,\n SVGOptions,\n} from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { isPath } from '../util/typeAssertions';\n\n/**\n * Gradient class\n * @class Gradient\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#gradients}\n */\nexport class Gradient<\n S,\n T extends GradientType = S extends GradientType ? S : 'linear',\n> {\n /**\n * Horizontal offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n declare offsetX: number;\n\n /**\n * Vertical offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n declare offsetY: number;\n\n /**\n * A transform matrix to apply to the gradient before painting.\n * Imported from svg gradients, is not applied with the current transform in the center.\n * Before this transform is applied, the origin point is at the top left corner of the object\n * plus the addition of offsetY and offsetX.\n * @type Number[]\n * @default null\n */\n declare gradientTransform?: TMat2D;\n\n /**\n * coordinates units for coords.\n * If `pixels`, the number of coords are in the same unit of width / height.\n * If set as `percentage` the coords are still a number, but 1 means 100% of width\n * for the X and 100% of the height for the y. It can be bigger than 1 and negative.\n * allowed values pixels or percentage.\n * @type GradientUnits\n * @default 'pixels'\n */\n declare gradientUnits: GradientUnits;\n\n /**\n * Gradient type linear or radial\n * @type GradientType\n * @default 'linear'\n */\n declare type: T;\n\n /**\n * Defines how the gradient is located in space and spread\n * @type GradientCoords\n */\n declare coords: GradientCoords;\n\n /**\n * Defines how many colors a gradient has and how they are located on the axis\n * defined by coords\n * @type GradientCoords\n */\n declare colorStops: ColorStop[];\n\n /**\n * If true, this object will not be exported during the serialization of a canvas\n * @type boolean\n */\n declare excludeFromExport?: boolean;\n\n /**\n * ID used for SVG export functionalities\n * @type number | string\n */\n declare readonly id: string | number;\n\n static type = 'Gradient';\n\n constructor(options: GradientOptions) {\n const {\n type = 'linear' as T,\n gradientUnits = 'pixels',\n coords = {},\n colorStops = [],\n offsetX = 0,\n offsetY = 0,\n gradientTransform,\n id,\n } = options || {};\n Object.assign(this, {\n type,\n gradientUnits,\n coords: {\n ...(type === 'radial' ? radialDefaultCoords : linearDefaultCoords),\n ...coords,\n },\n colorStops,\n offsetX,\n offsetY,\n gradientTransform,\n id: id ? `${id}_${uid()}` : uid(),\n });\n }\n\n /**\n * Adds another colorStop\n * @param {Record} colorStop Object with offset and color\n * @return {Gradient} thisArg\n */\n addColorStop(colorStops: Record) {\n for (const position in colorStops) {\n const color = new Color(colorStops[position]);\n this.colorStops.push({\n offset: parseFloat(position),\n color: color.toRgb(),\n opacity: color.getAlpha(),\n });\n }\n return this;\n }\n\n /**\n * Returns object representation of a gradient\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {object}\n */\n toObject(propertiesToInclude?: (keyof this | string)[]) {\n return {\n ...pick(this, propertiesToInclude as (keyof this)[]),\n type: this.type,\n coords: { ...this.coords },\n colorStops: this.colorStops.map((colorStop) => ({ ...colorStop })),\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n gradientUnits: this.gradientUnits,\n gradientTransform: this.gradientTransform\n ? [...this.gradientTransform]\n : undefined,\n };\n }\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of an gradient\n * @param {FabricObject} object Object to create a gradient for\n * @return {String} SVG representation of an gradient (linear/radial)\n */\n toSVG(\n object: FabricObject,\n {\n additionalTransform: preTransform,\n }: { additionalTransform?: string } = {},\n ) {\n const markup = [],\n transform = (\n this.gradientTransform\n ? this.gradientTransform.concat()\n : iMatrix.concat()\n ) as TMat2D,\n gradientUnits =\n this.gradientUnits === 'pixels'\n ? 'userSpaceOnUse'\n : 'objectBoundingBox';\n // colorStops must be sorted ascending, and guarded against deep mutations\n const colorStops = this.colorStops\n .map((colorStop) => ({ ...colorStop }))\n .sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let offsetX = -this.offsetX,\n offsetY = -this.offsetY;\n if (gradientUnits === 'objectBoundingBox') {\n offsetX /= object.width;\n offsetY /= object.height;\n } else {\n offsetX += object.width / 2;\n offsetY += object.height / 2;\n }\n // todo what about polygon/polyline?\n if (isPath(object) && this.gradientUnits !== 'percentage') {\n offsetX -= object.pathOffset.x;\n offsetY -= object.pathOffset.y;\n }\n transform[4] -= offsetX;\n transform[5] -= offsetY;\n\n const commonAttributes = [\n `id=\"SVGID_${this.id}\"`,\n `gradientUnits=\"${gradientUnits}\"`,\n `gradientTransform=\"${\n preTransform ? preTransform + ' ' : ''\n }${matrixToSVG(transform)}\"`,\n '',\n ].join(' ');\n\n if (this.type === 'linear') {\n const { x1, y1, x2, y2 } = this.coords;\n markup.push(\n '\\n',\n );\n } else if (this.type === 'radial') {\n const { x1, y1, x2, y2, r1, r2 } = this\n .coords as GradientCoords<'radial'>;\n const needsSwap = r1 > r2;\n // svg radial gradient has just 1 radius. the biggest.\n markup.push(\n '\\n',\n );\n if (needsSwap) {\n // svg goes from internal to external radius. if radius are inverted, swap color stops.\n colorStops.reverse(); // mutates array\n colorStops.forEach((colorStop) => {\n colorStop.offset = 1 - colorStop.offset;\n });\n }\n const minRadius = Math.min(r1, r2);\n if (minRadius > 0) {\n // i have to shift all colorStops and add new one in 0.\n const maxRadius = Math.max(r1, r2),\n percentageShift = minRadius / maxRadius;\n colorStops.forEach((colorStop) => {\n colorStop.offset += percentageShift * (1 - colorStop.offset);\n });\n }\n }\n\n colorStops.forEach(({ color, offset, opacity }) => {\n markup.push(\n '\\n',\n );\n });\n\n markup.push(\n this.type === 'linear' ? '' : '',\n '\\n',\n );\n\n return markup.join('');\n }\n /* _TO_SVG_END_ */\n\n /**\n * Returns an instance of CanvasGradient\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {CanvasGradient}\n */\n toLive(ctx: CanvasRenderingContext2D): CanvasGradient {\n const { x1, y1, x2, y2, r1, r2 } = this.coords as GradientCoords<'radial'>;\n const gradient =\n this.type === 'linear'\n ? ctx.createLinearGradient(x1, y1, x2, y2)\n : ctx.createRadialGradient(x1, y1, r1, x2, y2, r2);\n\n this.colorStops.forEach(({ color, opacity, offset }) => {\n gradient.addColorStop(\n offset,\n typeof opacity !== 'undefined'\n ? new Color(color).setAlpha(opacity).toRgba()\n : color,\n );\n });\n\n return gradient;\n }\n\n static async fromObject(\n options: GradientOptions<'linear'>,\n ): Promise>;\n static async fromObject(\n options: GradientOptions<'radial'>,\n ): Promise>;\n static async fromObject(\n options: GradientOptions<'linear'> | GradientOptions<'radial'>,\n ) {\n const { colorStops, gradientTransform } = options;\n return new this({\n ...options,\n colorStops: colorStops\n ? colorStops.map((colorStop) => ({ ...colorStop }))\n : undefined,\n gradientTransform: gradientTransform ? [...gradientTransform] : undefined,\n });\n }\n\n /* _FROM_SVG_START_ */\n /**\n * Returns {@link Gradient} instance from an SVG element\n * @static\n * @memberOf Gradient\n * @param {SVGGradientElement} el SVG gradient element\n * @param {FabricObject} instance\n * @param {String} opacity A fill-opacity or stroke-opacity attribute to multiply to each stop's opacity.\n * @param {SVGOptions} svgOptions an object containing the size of the SVG in order to parse correctly gradients\n * that uses gradientUnits as 'userSpaceOnUse' and percentages.\n * @return {Gradient} Gradient instance\n * @see http://www.w3.org/TR/SVG/pservers.html#LinearGradientElement\n * @see http://www.w3.org/TR/SVG/pservers.html#RadialGradientElement\n *\n * @example\n *\n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n * \n *\n */\n static fromElement(\n el: SVGGradientElement,\n instance: FabricObject,\n svgOptions: SVGOptions,\n ): Gradient {\n const gradientUnits = parseGradientUnits(el);\n const center = instance._findCenterFromElement();\n return new this({\n id: el.getAttribute('id') || undefined,\n type: parseType(el),\n coords: parseCoords(el, {\n width: svgOptions.viewBoxWidth || svgOptions.width,\n height: svgOptions.viewBoxHeight || svgOptions.height,\n }),\n colorStops: parseColorStops(el, svgOptions.opacity),\n gradientUnits,\n gradientTransform: parseTransformAttribute(\n el.getAttribute('gradientTransform') || '',\n ),\n ...(gradientUnits === 'pixels'\n ? {\n offsetX: instance.width / 2 - center.x,\n offsetY: instance.height / 2 - center.y,\n }\n : {\n offsetX: 0,\n offsetY: 0,\n }),\n });\n }\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Gradient, 'gradient');\nclassRegistry.setClass(Gradient, 'linear');\nclassRegistry.setClass(Gradient, 'radial');\n","import { config } from '../config';\nimport type { Abortable, TCrossOrigin, TMat2D, TSize } from '../typedefs';\nimport { ifNaN } from '../util/internals/ifNaN';\nimport { uid } from '../util/internals/uid';\nimport { loadImage } from '../util/misc/objectEnlive';\nimport { pick } from '../util/misc/pick';\nimport { toFixed } from '../util/misc/toFixed';\nimport { classRegistry } from '../ClassRegistry';\nimport type {\n PatternRepeat,\n PatternOptions,\n SerializedPatternOptions,\n} from './types';\nimport { log } from '../util/internals/console';\n\n/**\n * @see {@link http://fabricjs.com/patterns demo}\n * @see {@link http://fabricjs.com/dynamic-patterns demo}\n */\nexport class Pattern {\n static type = 'Pattern';\n\n /**\n * Legacy identifier of the class. Prefer using this.constructor.type 'Pattern'\n * or utils like isPattern, or instance of to indentify a pattern in your code.\n * Will be removed in future versiones\n * @TODO add sustainable warning message\n * @type string\n * @deprecated\n */\n get type() {\n return 'pattern';\n }\n\n set type(value) {\n log('warn', 'Setting type has no effect', value);\n }\n\n /**\n * @type PatternRepeat\n * @defaults\n */\n repeat: PatternRepeat = 'repeat';\n\n /**\n * Pattern horizontal offset from object's left/top corner\n * @type Number\n * @default\n */\n offsetX = 0;\n\n /**\n * Pattern vertical offset from object's left/top corner\n * @type Number\n * @default\n */\n offsetY = 0;\n\n /**\n * @type TCrossOrigin\n * @default\n */\n crossOrigin: TCrossOrigin = '';\n\n /**\n * transform matrix to change the pattern, imported from svgs.\n * @todo verify if using the identity matrix as default makes the rest of the code more easy\n * @type Array\n * @default\n */\n declare patternTransform?: TMat2D;\n\n /**\n * The actual pixel source of the pattern\n */\n declare source: CanvasImageSource;\n\n /**\n * If true, this object will not be exported during the serialization of a canvas\n * @type boolean\n */\n declare excludeFromExport?: boolean;\n\n /**\n * ID used for SVG export functionalities\n * @type number\n */\n declare readonly id: number;\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n * @param {option.source} [source] the pattern source, eventually empty or a drawable\n */\n constructor(options: PatternOptions) {\n this.id = uid();\n Object.assign(this, options);\n }\n\n /**\n * @returns true if {@link source} is an element\n */\n isImageSource(): this is { source: HTMLImageElement } {\n return (\n !!this.source && typeof (this.source as HTMLImageElement).src === 'string'\n );\n }\n\n /**\n * @returns true if {@link source} is a element\n */\n isCanvasSource(): this is { source: HTMLCanvasElement } {\n return !!this.source && !!(this.source as HTMLCanvasElement).toDataURL;\n }\n\n sourceToString(): string {\n return this.isImageSource()\n ? this.source.src\n : this.isCanvasSource()\n ? this.source.toDataURL()\n : '';\n }\n\n /**\n * Returns an instance of CanvasPattern\n * @param {CanvasRenderingContext2D} ctx Context to create pattern\n * @return {CanvasPattern}\n */\n toLive(ctx: CanvasRenderingContext2D): CanvasPattern | null {\n if (\n // if the image failed to load, return, and allow rest to continue loading\n !this.source ||\n // if an image\n (this.isImageSource() &&\n (!this.source.complete ||\n this.source.naturalWidth === 0 ||\n this.source.naturalHeight === 0))\n ) {\n return null;\n }\n\n return ctx.createPattern(this.source, this.repeat)!;\n }\n\n /**\n * Returns object representation of a pattern\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {object} Object representation of a pattern instance\n */\n toObject(propertiesToInclude: string[] = []): Record {\n const { repeat, crossOrigin } = this;\n return {\n ...pick(this, propertiesToInclude as (keyof this)[]),\n type: 'pattern',\n source: this.sourceToString(),\n repeat,\n crossOrigin,\n offsetX: toFixed(this.offsetX, config.NUM_FRACTION_DIGITS),\n offsetY: toFixed(this.offsetY, config.NUM_FRACTION_DIGITS),\n patternTransform: this.patternTransform\n ? [...this.patternTransform]\n : null,\n };\n }\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of a pattern\n */\n toSVG({ width, height }: TSize): string {\n const { source: patternSource, repeat, id } = this,\n patternOffsetX = ifNaN(this.offsetX / width, 0),\n patternOffsetY = ifNaN(this.offsetY / height, 0),\n patternWidth =\n repeat === 'repeat-y' || repeat === 'no-repeat'\n ? 1 + Math.abs(patternOffsetX || 0)\n : ifNaN(\n ((patternSource as HTMLImageElement).width as number) / width,\n 0,\n ),\n patternHeight =\n repeat === 'repeat-x' || repeat === 'no-repeat'\n ? 1 + Math.abs(patternOffsetY || 0)\n : ifNaN(\n ((patternSource as HTMLImageElement).height as number) / height,\n 0,\n );\n\n return [\n ``,\n ``,\n ``,\n '',\n ].join('\\n');\n }\n /* _TO_SVG_END_ */\n\n static async fromObject(\n {\n type,\n source,\n patternTransform,\n ...otherOptions\n }: SerializedPatternOptions,\n options?: Abortable,\n ): Promise {\n const img = await loadImage(source, {\n ...options,\n crossOrigin: otherOptions.crossOrigin,\n });\n return new this({\n ...otherOptions,\n patternTransform:\n patternTransform && (patternTransform.slice(0) as TMat2D),\n source: img,\n });\n }\n}\n\nclassRegistry.setClass(Pattern);\n// kept for compatibility reason\nclassRegistry.setClass(Pattern, 'pattern');\n","import { Color } from '../color/Color';\nimport type { Point } from '../Point';\nimport type { Shadow } from '../Shadow';\nimport type { Canvas } from '../canvas/Canvas';\nimport type { TBrushEventData } from './typedefs';\n\n/**\n * @see {@link http://fabricjs.com/freedrawing|Freedrawing demo}\n */\nexport abstract class BaseBrush {\n /**\n * Color of a brush\n * @type String\n * @default\n */\n color = 'rgb(0, 0, 0)';\n\n /**\n * Width of a brush, has to be a Number, no string literals\n * @type Number\n * @default\n */\n width = 1;\n\n /**\n * Shadow object representing shadow of this shape.\n * Backwards incompatibility note: This property replaces \"shadowColor\" (String), \"shadowOffsetX\" (Number),\n * \"shadowOffsetY\" (Number) and \"shadowBlur\" (Number) since v1.2.12\n * @type Shadow\n * @default\n */\n shadow: Shadow | null = null;\n\n /**\n * Line endings style of a brush (one of \"butt\", \"round\", \"square\")\n * @type String\n * @default\n */\n strokeLineCap: CanvasLineCap = 'round';\n\n /**\n * Corner style of a brush (one of \"bevel\", \"round\", \"miter\")\n * @type String\n * @default\n */\n strokeLineJoin: CanvasLineJoin = 'round';\n\n /**\n * Maximum miter length (used for strokeLineJoin = \"miter\") of a brush's\n * @type Number\n * @default\n */\n strokeMiterLimit = 10;\n\n /**\n * Stroke Dash Array.\n * @type Array\n * @default\n */\n strokeDashArray: number[] | null = null;\n\n /**\n * When `true`, the free drawing is limited to the whiteboard size. Default to false.\n * @type Boolean\n * @default false\n */\n\n limitedToCanvasSize = false;\n\n /**\n * @todo add type\n */\n declare canvas: Canvas;\n\n constructor(canvas: Canvas) {\n this.canvas = canvas;\n }\n\n abstract _render(): void;\n abstract onMouseDown(pointer: Point, ev: TBrushEventData): void;\n abstract onMouseMove(pointer: Point, ev: TBrushEventData): void;\n /**\n * @returns true if brush should continue blocking interaction\n */\n abstract onMouseUp(ev: TBrushEventData): boolean | void;\n\n /**\n * Sets brush styles\n * @private\n * @param {CanvasRenderingContext2D} ctx\n */\n _setBrushStyles(ctx: CanvasRenderingContext2D) {\n ctx.strokeStyle = this.color;\n ctx.lineWidth = this.width;\n ctx.lineCap = this.strokeLineCap;\n ctx.miterLimit = this.strokeMiterLimit;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.setLineDash(this.strokeDashArray || []);\n }\n\n /**\n * Sets the transformation on given context\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @private\n */\n protected _saveAndTransform(ctx: CanvasRenderingContext2D) {\n const v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n }\n\n protected needsFullRender() {\n const color = new Color(this.color);\n return color.getAlpha() < 1 || !!this.shadow;\n }\n\n /**\n * Sets brush shadow styles\n * @private\n */\n protected _setShadow() {\n if (!this.shadow || !this.canvas) {\n return;\n }\n\n const canvas = this.canvas,\n shadow = this.shadow,\n ctx = canvas.contextTop,\n zoom = canvas.getZoom() * canvas.getRetinaScaling();\n\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur = shadow.blur * zoom;\n ctx.shadowOffsetX = shadow.offsetX * zoom;\n ctx.shadowOffsetY = shadow.offsetY * zoom;\n }\n\n /**\n * Removes brush shadow styles\n * @private\n */\n protected _resetShadow() {\n const ctx = this.canvas.contextTop;\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n }\n\n /**\n * Check is pointer is outside canvas boundaries\n * @param {Object} pointer\n * @private\n */\n protected _isOutSideCanvas(pointer: Point) {\n return (\n pointer.x < 0 ||\n pointer.x > this.canvas.getWidth() ||\n pointer.y < 0 ||\n pointer.y > this.canvas.getHeight()\n );\n }\n}\n","import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { toFixed } from '../util/misc/toFixed';\nimport {\n getBoundsOfCurve,\n joinPath,\n makePathSimpler,\n parsePath,\n} from '../util/path';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type {\n TComplexPathData,\n TPathSegmentInfo,\n TSimplePathData,\n} from '../util/path/typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type {\n TBBox,\n TClassProperties,\n TSVGReviver,\n TOptions,\n} from '../typedefs';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\ninterface UniquePathProps {\n sourcePath?: string;\n path?: TSimplePathData;\n}\n\nexport interface SerializedPathProps\n extends SerializedObjectProps,\n UniquePathProps {}\n\nexport interface PathProps extends FabricObjectProps, UniquePathProps {}\n\nexport interface IPathBBox extends TBBox {\n left: number;\n top: number;\n pathOffset: Point;\n}\n\nexport class Path<\n Props extends TOptions = Partial,\n SProps extends SerializedPathProps = SerializedPathProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject {\n /**\n * Array of path points\n * @type Array\n * @default\n */\n declare path: TSimplePathData;\n\n declare pathOffset: Point;\n\n declare sourcePath?: string;\n\n declare segmentsInfo?: TPathSegmentInfo[];\n\n static type = 'Path';\n\n static cacheProperties = [...cacheProperties, 'path', 'fillRule'];\n\n /**\n * Constructor\n * @param {TComplexPathData} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {Partial} [options] Options object\n * @return {Path} thisArg\n */\n constructor(\n path: TComplexPathData | string,\n // todo: evaluate this spread here\n { path: _, left, top, ...options }: Partial = {},\n ) {\n super();\n Object.assign(this, Path.ownDefaults);\n this.setOptions(options);\n this._setPath(path || [], true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n /**\n * @private\n * @param {TComplexPathData | string} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {boolean} [adjustPosition] pass true to reposition the object according to the bounding box\n * @returns {Point} top left position of the bounding box, useful for complementary positioning\n */\n _setPath(path: TComplexPathData | string, adjustPosition?: boolean) {\n this.path = makePathSimpler(Array.isArray(path) ? path : parsePath(path));\n this.setBoundingBox(adjustPosition);\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = this._calcBoundsFromPath();\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _renderPathCommands(ctx: CanvasRenderingContext2D) {\n const l = -this.pathOffset.x,\n t = -this.pathOffset.y;\n\n ctx.beginPath();\n\n for (const command of this.path) {\n switch (\n command[0] // first letter\n ) {\n case 'L': // lineto, absolute\n ctx.lineTo(command[1] + l, command[2] + t);\n break;\n\n case 'M': // moveTo, absolute\n ctx.moveTo(command[1] + l, command[2] + t);\n break;\n\n case 'C': // bezierCurveTo, absolute\n ctx.bezierCurveTo(\n command[1] + l,\n command[2] + t,\n command[3] + l,\n command[4] + t,\n command[5] + l,\n command[6] + t,\n );\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n ctx.quadraticCurveTo(\n command[1] + l,\n command[2] + t,\n command[3] + l,\n command[4] + t,\n );\n break;\n\n case 'Z':\n ctx.closePath();\n break;\n }\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _render(ctx: CanvasRenderingContext2D) {\n this._renderPathCommands(ctx);\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns string representation of an instance\n * @return {string} string representation of an instance\n */\n toString() {\n return `#`;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n path: this.path.map((pathCmd) => pathCmd.slice()),\n };\n }\n\n /**\n * Returns dataless object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n const o = this.toObject(propertiesToInclude);\n if (this.sourcePath) {\n delete o.path;\n o.sourcePath = this.sourcePath;\n }\n return o;\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const path = joinPath(this.path, config.NUM_FRACTION_DIGITS);\n return [\n '\\n`,\n ];\n }\n\n /**\n * @private\n * @return the path command's translate transform attribute\n */\n _getOffsetTransform() {\n const digits = config.NUM_FRACTION_DIGITS;\n return ` translate(${toFixed(-this.pathOffset.x, digits)}, ${toFixed(\n -this.pathOffset.y,\n digits,\n )})`;\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {string} svg representation of an instance\n */\n toClipPathSVG(reviver?: TSVGReviver): string {\n const additionalTransform = this._getOffsetTransform();\n return (\n '\\t' +\n this._createBaseClipPathSVGMarkup(this._toSVG(), {\n reviver,\n additionalTransform: additionalTransform,\n })\n );\n }\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {string} svg representation of an instance\n */\n toSVG(reviver?: TSVGReviver): string {\n const additionalTransform = this._getOffsetTransform();\n return this._createBaseSVGMarkup(this._toSVG(), {\n reviver,\n additionalTransform: additionalTransform,\n });\n }\n\n /**\n * Returns number representation of an instance complexity\n * @return {number} complexity of this instance\n */\n complexity() {\n return this.path.length;\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { width, height, pathOffset } = this._calcDimensions();\n this.set({ width, height, pathOffset });\n // using pathOffset because it match the use case.\n // if pathOffset change here we need to use left + width/2 , top + height/2\n adjustPosition && this.setPositionByOrigin(pathOffset, CENTER, CENTER);\n }\n\n _calcBoundsFromPath(): TBBox {\n const bounds: XY[] = [];\n let subpathStartX = 0,\n subpathStartY = 0,\n x = 0, // current x\n y = 0; // current y\n\n for (const command of this.path) {\n // current instruction\n switch (\n command[0] // first letter\n ) {\n case 'L': // lineto, absolute\n x = command[1];\n y = command[2];\n bounds.push({ x: subpathStartX, y: subpathStartY }, { x, y });\n break;\n\n case 'M': // moveTo, absolute\n x = command[1];\n y = command[2];\n subpathStartX = x;\n subpathStartY = y;\n break;\n\n case 'C': // bezierCurveTo, absolute\n bounds.push(\n ...getBoundsOfCurve(\n x,\n y,\n command[1],\n command[2],\n command[3],\n command[4],\n command[5],\n command[6],\n ),\n );\n x = command[5];\n y = command[6];\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n bounds.push(\n ...getBoundsOfCurve(\n x,\n y,\n command[1],\n command[2],\n command[1],\n command[2],\n command[3],\n command[4],\n ),\n );\n x = command[3];\n y = command[4];\n break;\n\n case 'Z':\n x = subpathStartX;\n y = subpathStartY;\n break;\n }\n }\n return makeBoundingBoxFromPoints(bounds);\n }\n\n /**\n * @private\n */\n _calcDimensions(): IPathBBox {\n const bbox = this._calcBoundsFromPath();\n\n return {\n ...bbox,\n pathOffset: new Point(\n bbox.left + bbox.width / 2,\n bbox.top + bbox.height / 2,\n ),\n };\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `Path.fromElement`)\n * @static\n * @memberOf Path\n * @see http://www.w3.org/TR/SVG/paths.html#PathElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'd'];\n\n /**\n * Creates an instance of Path from an object\n * @static\n * @memberOf Path\n * @param {Object} object\n * @returns {Promise}\n */\n static fromObject>(object: T) {\n return this._fromObject(object, {\n extraParam: 'path',\n });\n }\n\n /**\n * Creates an instance of Path from an SVG element\n * @static\n * @memberOf Path\n * @param {HTMLElement} element to parse\n * @param {Partial} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Partial,\n cssRules?: CSSRules,\n ) {\n const { d, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(d, {\n ...parsedAttributes,\n ...options,\n // we pass undefined to instruct the constructor to position the object using the bbox\n left: undefined,\n top: undefined,\n });\n }\n}\n\nclassRegistry.setClass(Path);\nclassRegistry.setSVGClass(Path);\n\n/* _FROM_SVG_START_ */\n","import type { ModifierKey, TEvent } from '../EventTypeDefs';\nimport type { Point } from '../Point';\nimport { Shadow } from '../Shadow';\nimport { Path } from '../shapes/Path';\nimport { getSmoothPathFromPoints, joinPath } from '../util/path';\nimport type { Canvas } from '../canvas/Canvas';\nimport { BaseBrush } from './BaseBrush';\nimport type { TSimplePathData } from '../util/path/typedefs';\n\n/**\n * @private\n * @param {TSimplePathData} pathData SVG path commands\n * @returns {boolean}\n */\nfunction isEmptySVGPath(pathData: TSimplePathData): boolean {\n return joinPath(pathData) === 'M 0 0 Q 0 0 0 0 L 0 0';\n}\n\nexport class PencilBrush extends BaseBrush {\n /**\n * Discard points that are less than `decimate` pixel distant from each other\n * @type Number\n * @default 0.4\n */\n decimate = 0.4;\n\n /**\n * Draws a straight line between last recorded point to current pointer\n * Used for `shift` functionality\n *\n * @type boolean\n * @default false\n */\n drawStraightLine = false;\n\n /**\n * The event modifier key that makes the brush draw a straight line.\n * If `null` or 'none' or any other string that is not a modifier key the feature is disabled.\n * @type {ModifierKey | undefined | null}\n */\n straightLineKey: ModifierKey | undefined | null = 'shiftKey';\n\n private declare _points: Point[];\n private declare _hasStraightLine: boolean;\n private declare oldEnd?: Point;\n\n constructor(canvas: Canvas) {\n super(canvas);\n this._points = [];\n this._hasStraightLine = false;\n }\n\n needsFullRender() {\n return super.needsFullRender() || this._hasStraightLine;\n }\n\n static drawSegment(ctx: CanvasRenderingContext2D, p1: Point, p2: Point) {\n const midPoint = p1.midPointFrom(p2);\n ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n return midPoint;\n }\n\n /**\n * Invoked on mouse down\n * @param {Point} pointer\n */\n onMouseDown(pointer: Point, { e }: TEvent) {\n if (!this.canvas._isMainEvent(e)) {\n return;\n }\n this.drawStraightLine = !!this.straightLineKey && e[this.straightLineKey];\n this._prepareForDrawing(pointer);\n // capture coordinates immediately\n // this allows to draw dots (when movement never occurs)\n this._addPoint(pointer);\n this._render();\n }\n\n /**\n * Invoked on mouse move\n * @param {Point} pointer\n */\n onMouseMove(pointer: Point, { e }: TEvent) {\n if (!this.canvas._isMainEvent(e)) {\n return;\n }\n this.drawStraightLine = !!this.straightLineKey && e[this.straightLineKey];\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n if (this._addPoint(pointer) && this._points.length > 1) {\n if (this.needsFullRender()) {\n // redraw curve\n // clear top canvas\n this.canvas.clearContext(this.canvas.contextTop);\n this._render();\n } else {\n const points = this._points,\n length = points.length,\n ctx = this.canvas.contextTop;\n // draw the curve update\n this._saveAndTransform(ctx);\n if (this.oldEnd) {\n ctx.beginPath();\n ctx.moveTo(this.oldEnd.x, this.oldEnd.y);\n }\n this.oldEnd = PencilBrush.drawSegment(\n ctx,\n points[length - 2],\n points[length - 1],\n );\n ctx.stroke();\n ctx.restore();\n }\n }\n }\n\n /**\n * Invoked on mouse up\n */\n onMouseUp({ e }: TEvent) {\n if (!this.canvas._isMainEvent(e)) {\n return true;\n }\n this.drawStraightLine = false;\n this.oldEnd = undefined;\n this._finalizeAndAddPath();\n return false;\n }\n\n /**\n * @private\n * @param {Point} pointer Actual mouse position related to the canvas.\n */\n _prepareForDrawing(pointer: Point) {\n this._reset();\n this._addPoint(pointer);\n this.canvas.contextTop.moveTo(pointer.x, pointer.y);\n }\n\n /**\n * @private\n * @param {Point} point Point to be added to points array\n */\n _addPoint(point: Point) {\n if (\n this._points.length > 1 &&\n point.eq(this._points[this._points.length - 1])\n ) {\n return false;\n }\n if (this.drawStraightLine && this._points.length > 1) {\n this._hasStraightLine = true;\n this._points.pop();\n }\n this._points.push(point);\n return true;\n }\n\n /**\n * Clear points array and set contextTop canvas style.\n * @private\n */\n _reset() {\n this._points = [];\n this._setBrushStyles(this.canvas.contextTop);\n this._setShadow();\n this._hasStraightLine = false;\n }\n\n /**\n * Draw a smooth path on the topCanvas using quadraticCurveTo\n * @private\n * @param {CanvasRenderingContext2D} [ctx]\n */\n _render(ctx: CanvasRenderingContext2D = this.canvas.contextTop) {\n let p1 = this._points[0],\n p2 = this._points[1];\n this._saveAndTransform(ctx);\n ctx.beginPath();\n //if we only have 2 points in the path and they are the same\n //it means that the user only clicked the canvas without moving the mouse\n //then we should be drawing a dot. A path isn't drawn between two identical dots\n //that's why we set them apart a bit\n if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) {\n const width = this.width / 1000;\n p1.x -= width;\n p2.x += width;\n }\n ctx.moveTo(p1.x, p1.y);\n\n for (let i = 1; i < this._points.length; i++) {\n // we pick the point between pi + 1 & pi + 2 as the\n // end point and p1 as our control point.\n PencilBrush.drawSegment(ctx, p1, p2);\n p1 = this._points[i];\n p2 = this._points[i + 1];\n }\n // Draw last line as a straight line while\n // we wait for the next point to be able to calculate\n // the bezier control point\n ctx.lineTo(p1.x, p1.y);\n ctx.stroke();\n ctx.restore();\n }\n\n /**\n * Converts points to SVG path\n * @param {Point[]} points Array of points\n * @return {TSimplePathData} SVG path commands\n */\n convertPointsToSVGPath(points: Point[]): TSimplePathData {\n const correction = this.width / 1000;\n return getSmoothPathFromPoints(points, correction);\n }\n\n /**\n * Creates a Path object to add on canvas\n * @param {TSimplePathData} pathData Path data\n * @return {Path} Path to add on canvas\n */\n createPath(pathData: TSimplePathData): Path {\n const path = new Path(pathData, {\n fill: null,\n stroke: this.color,\n strokeWidth: this.width,\n strokeLineCap: this.strokeLineCap,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeLineJoin: this.strokeLineJoin,\n strokeDashArray: this.strokeDashArray,\n });\n if (this.shadow) {\n this.shadow.affectStroke = true;\n path.shadow = new Shadow(this.shadow);\n }\n\n return path;\n }\n\n /**\n * Decimate points array with the decimate value\n */\n decimatePoints(points: Point[], distance: number) {\n if (points.length <= 2) {\n return points;\n }\n let lastPoint = points[0],\n cDistance;\n const zoom = this.canvas.getZoom(),\n adjustedDistance = Math.pow(distance / zoom, 2),\n l = points.length - 1,\n newPoints = [lastPoint];\n for (let i = 1; i < l - 1; i++) {\n cDistance =\n Math.pow(lastPoint.x - points[i].x, 2) +\n Math.pow(lastPoint.y - points[i].y, 2);\n if (cDistance >= adjustedDistance) {\n lastPoint = points[i];\n newPoints.push(lastPoint);\n }\n }\n // Add the last point from the original line to the end of the array.\n // This ensures decimate doesn't delete the last point on the line, and ensures the line is > 1 point.\n newPoints.push(points[l]);\n return newPoints;\n }\n\n /**\n * On mouseup after drawing the path on contextTop canvas\n * we use the points captured to create an new Path object\n * and add it to the canvas.\n */\n _finalizeAndAddPath() {\n const ctx = this.canvas.contextTop;\n ctx.closePath();\n if (this.decimate) {\n this._points = this.decimatePoints(this._points, this.decimate);\n }\n const pathData = this.convertPointsToSVGPath(this._points);\n if (isEmptySVGPath(pathData)) {\n // do not create 0 width/height paths, as they are\n // rendered inconsistently across browsers\n // Firefox 4, for example, renders a dot,\n // whereas Chrome 10 renders nothing\n this.canvas.requestRenderAll();\n return;\n }\n\n const path = this.createPath(pathData);\n this.canvas.clearContext(this.canvas.contextTop);\n this.canvas.fire('before:path:created', { path: path });\n this.canvas.add(path);\n this.canvas.requestRenderAll();\n path.setCoords();\n this._resetShadow();\n\n // fire event 'path' created\n this.canvas.fire('path:created', { path: path });\n }\n}\n","import type { ObjectEvents } from '../EventTypeDefs';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { cos } from '../util/misc/cos';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { sin } from '../util/misc/sin';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { CSSRules } from '../parser/typedefs';\nimport { SCALE_X, SCALE_Y } from '../constants';\n\ninterface UniqueCircleProps {\n /**\n * Radius of this circle\n * @type Number\n * @default 0\n */\n radius: number;\n\n /**\n * Angle for the start of the circle, in degrees.\n * @type TDegree 0 - 359\n * @default 0\n */\n startAngle: number;\n\n /**\n * Angle for the end of the circle, in degrees\n * @type TDegree 1 - 360\n * @default 360\n */\n endAngle: number;\n\n /**\n * Orientation for the direction of the circle.\n * Setting to true will switch the arc of the circle to traverse from startAngle to endAngle in a counter-clockwise direction.\n * Note: this will only change how the circle is drawn, and does not affect rotational transformation.\n * @default false\n */\n counterClockwise: boolean;\n}\n\nexport interface SerializedCircleProps\n extends SerializedObjectProps,\n UniqueCircleProps {}\n\nexport interface CircleProps extends FabricObjectProps, UniqueCircleProps {}\n\nconst CIRCLE_PROPS = [\n 'radius',\n 'startAngle',\n 'endAngle',\n 'counterClockwise',\n] as const;\n\nexport const circleDefaultValues: Partial> = {\n radius: 0,\n startAngle: 0,\n endAngle: 360,\n counterClockwise: false,\n};\n\nexport class Circle<\n Props extends TOptions = Partial,\n SProps extends SerializedCircleProps = SerializedCircleProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements UniqueCircleProps\n{\n declare radius: number;\n declare startAngle: number;\n declare endAngle: number;\n declare counterClockwise: boolean;\n\n static type = 'Circle';\n\n static cacheProperties = [...cacheProperties, ...CIRCLE_PROPS];\n\n static ownDefaults = circleDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Circle.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Circle.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n super._set(key, value);\n\n if (key === 'radius') {\n this.setRadius(value);\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n ctx.arc(\n 0,\n 0,\n this.radius,\n degreesToRadians(this.startAngle),\n degreesToRadians(this.endAngle),\n this.counterClockwise,\n );\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusX(): number {\n return this.get('radius') * this.get(SCALE_X);\n }\n\n /**\n * Returns vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusY(): number {\n return this.get('radius') * this.get(SCALE_Y);\n }\n\n /**\n * Sets radius of an object (and updates width accordingly)\n */\n setRadius(value: number) {\n this.radius = value;\n this.set({ width: value * 2, height: value * 2 });\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([...CIRCLE_PROPS, ...propertiesToInclude]);\n }\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG(): string[] {\n const angle = (this.endAngle - this.startAngle) % 360;\n\n if (angle === 0) {\n return [\n '\\n',\n ];\n } else {\n const { radius } = this;\n const start = degreesToRadians(this.startAngle),\n end = degreesToRadians(this.endAngle),\n startX = cos(start) * radius,\n startY = sin(start) * radius,\n endX = cos(end) * radius,\n endY = sin(end) * radius,\n largeFlag = angle > 180 ? 1 : 0,\n sweepFlag = this.counterClockwise ? 0 : 1;\n return [\n `\\n',\n ];\n }\n }\n /* _TO_SVG_END_ */\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Circle.fromElement})\n * @static\n * @memberOf Circle\n * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement\n */\n static ATTRIBUTE_NAMES = ['cx', 'cy', 'r', ...SHARED_ATTRIBUTES];\n\n /**\n * Returns {@link Circle} instance from an SVG element\n * @static\n * @memberOf Circle\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Partial Circle object to default missing properties on the element.\n * @throws {Error} If value of `r` attribute is missing or invalid\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ): Promise {\n const {\n left = 0,\n top = 0,\n radius = 0,\n ...otherParsedAttributes\n } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n ) as Partial;\n\n // this probably requires to be fixed for default origins not being top/left.\n\n return new this({\n ...otherParsedAttributes,\n radius,\n left: left - radius,\n top: top - radius,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * @todo how do we declare this??\n */\n static fromObject>(object: T) {\n return super._fromObject(object);\n }\n}\n\nclassRegistry.setClass(Circle);\nclassRegistry.setSVGClass(Circle);\n","import { Color } from '../color/Color';\nimport type { Point } from '../Point';\nimport { Shadow } from '../Shadow';\nimport { Circle } from '../shapes/Circle';\nimport { Group } from '../shapes/Group';\nimport { getRandomInt } from '../util/internals/getRandomInt';\nimport type { Canvas } from '../canvas/Canvas';\nimport { BaseBrush } from './BaseBrush';\nimport type { CircleBrushPoint } from './typedefs';\nimport { CENTER } from '../constants';\n\nexport class CircleBrush extends BaseBrush {\n /**\n * Width of a brush\n * @type Number\n * @default\n */\n width = 10;\n\n declare points: CircleBrushPoint[];\n\n constructor(canvas: Canvas) {\n super(canvas);\n this.points = [];\n }\n\n /**\n * Invoked inside on mouse down and mouse move\n * @param {Point} pointer\n */\n drawDot(pointer: Point) {\n const point = this.addPoint(pointer),\n ctx = this.canvas.contextTop;\n this._saveAndTransform(ctx);\n this.dot(ctx, point);\n ctx.restore();\n }\n\n dot(ctx: CanvasRenderingContext2D, point: CircleBrushPoint) {\n ctx.fillStyle = point.fill;\n ctx.beginPath();\n ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n }\n\n /**\n * Invoked on mouse down\n */\n onMouseDown(pointer: Point) {\n this.points = [];\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n this.drawDot(pointer);\n }\n\n /**\n * Render the full state of the brush\n * @private\n */\n _render() {\n const ctx = this.canvas.contextTop,\n points = this.points;\n this._saveAndTransform(ctx);\n for (let i = 0; i < points.length; i++) {\n this.dot(ctx, points[i]);\n }\n ctx.restore();\n }\n\n /**\n * Invoked on mouse move\n * @param {Point} pointer\n */\n onMouseMove(pointer: Point) {\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n if (this.needsFullRender()) {\n this.canvas.clearContext(this.canvas.contextTop);\n this.addPoint(pointer);\n this._render();\n } else {\n this.drawDot(pointer);\n }\n }\n\n /**\n * Invoked on mouse up\n */\n onMouseUp() {\n const originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\n this.canvas.renderOnAddRemove = false;\n\n const circles: Circle[] = [];\n\n for (let i = 0; i < this.points.length; i++) {\n const point = this.points[i],\n circle = new Circle({\n radius: point.radius,\n left: point.x,\n top: point.y,\n originX: CENTER,\n originY: CENTER,\n fill: point.fill,\n });\n\n this.shadow && (circle.shadow = new Shadow(this.shadow));\n\n circles.push(circle);\n }\n const group = new Group(circles, { canvas: this.canvas });\n\n this.canvas.fire('before:path:created', { path: group });\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n }\n\n /**\n * @param {Object} pointer\n * @return {Point} Just added pointer point\n */\n addPoint({ x, y }: Point) {\n const pointerPoint: CircleBrushPoint = {\n x,\n y,\n radius: getRandomInt(Math.max(0, this.width - 20), this.width + 20) / 2,\n fill: new Color(this.color).setAlpha(getRandomInt(0, 100) / 100).toRgba(),\n };\n\n this.points.push(pointerPoint);\n\n return pointerPoint;\n }\n}\n","import type { Point } from '../Point';\nimport { Group } from '../shapes/Group';\nimport { Shadow } from '../Shadow';\nimport { Rect } from '../shapes/Rect';\nimport { getRandomInt } from '../util/internals/getRandomInt';\nimport type { Canvas } from '../canvas/Canvas';\nimport { BaseBrush } from './BaseBrush';\nimport type { SprayBrushPoint } from './typedefs';\nimport { CENTER } from '../constants';\n\n/**\n *\n * @param rects\n * @returns\n */\nfunction getUniqueRects(rects: Rect[]) {\n const uniqueRects: Record = {};\n const uniqueRectsArray: Rect[] = [];\n\n for (let i = 0, key: string; i < rects.length; i++) {\n key = `${rects[i].left}${rects[i].top}`;\n if (!uniqueRects[key]) {\n uniqueRects[key] = true;\n uniqueRectsArray.push(rects[i]);\n }\n }\n\n return uniqueRectsArray;\n}\n\nexport class SprayBrush extends BaseBrush {\n /**\n * Width of a spray\n * @type Number\n * @default\n */\n width = 10;\n\n /**\n * Density of a spray (number of dots per chunk)\n * @type Number\n * @default\n */\n density = 20;\n\n /**\n * Width of spray dots\n * @type Number\n * @default\n */\n dotWidth = 1;\n\n /**\n * Width variance of spray dots\n * @type Number\n * @default\n */\n dotWidthVariance = 1;\n\n /**\n * Whether opacity of a dot should be random\n * @type Boolean\n * @default\n */\n randomOpacity = false;\n\n /**\n * Whether overlapping dots (rectangles) should be removed (for performance reasons)\n * @type Boolean\n * @default\n */\n optimizeOverlapping = true;\n\n private declare sprayChunks: SprayBrushPoint[][];\n\n private declare sprayChunk: SprayBrushPoint[];\n\n /**\n * Constructor\n * @param {Canvas} canvas\n * @return {SprayBrush} Instance of a spray brush\n */\n constructor(canvas: Canvas) {\n super(canvas);\n this.sprayChunks = [];\n this.sprayChunk = [];\n }\n\n /**\n * Invoked on mouse down\n * @param {Point} pointer\n */\n onMouseDown(pointer: Point) {\n this.sprayChunks = [];\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n\n this.addSprayChunk(pointer);\n this.renderChunck(this.sprayChunk);\n }\n\n /**\n * Invoked on mouse move\n * @param {Point} pointer\n */\n onMouseMove(pointer: Point) {\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n this.addSprayChunk(pointer);\n this.renderChunck(this.sprayChunk);\n }\n\n /**\n * Invoked on mouse up\n */\n onMouseUp() {\n const originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\n this.canvas.renderOnAddRemove = false;\n\n const rects: Rect[] = [];\n\n for (let i = 0; i < this.sprayChunks.length; i++) {\n const sprayChunk = this.sprayChunks[i];\n for (let j = 0; j < sprayChunk.length; j++) {\n const chunck = sprayChunk[j];\n const rect = new Rect({\n width: chunck.width,\n height: chunck.width,\n left: chunck.x + 1,\n top: chunck.y + 1,\n originX: CENTER,\n originY: CENTER,\n fill: this.color,\n });\n rects.push(rect);\n }\n }\n\n const group = new Group(\n this.optimizeOverlapping ? getUniqueRects(rects) : rects,\n {\n objectCaching: true,\n subTargetCheck: false,\n interactive: false,\n },\n );\n this.shadow && group.set('shadow', new Shadow(this.shadow));\n this.canvas.fire('before:path:created', { path: group });\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n }\n\n renderChunck(sprayChunck: SprayBrushPoint[]) {\n const ctx = this.canvas.contextTop;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (let i = 0; i < sprayChunck.length; i++) {\n const point = sprayChunck[i];\n ctx.globalAlpha = point.opacity;\n ctx.fillRect(point.x, point.y, point.width, point.width);\n }\n\n ctx.restore();\n }\n\n /**\n * Render all spray chunks\n */\n _render() {\n const ctx = this.canvas.contextTop;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (let i = 0; i < this.sprayChunks.length; i++) {\n this.renderChunck(this.sprayChunks[i]);\n }\n ctx.restore();\n }\n\n /**\n * @param {Point} pointer\n */\n addSprayChunk(pointer: Point) {\n this.sprayChunk = [];\n const radius = this.width / 2;\n\n for (let i = 0; i < this.density; i++) {\n this.sprayChunk.push({\n x: getRandomInt(pointer.x - radius, pointer.x + radius),\n y: getRandomInt(pointer.y - radius, pointer.y + radius),\n width: this.dotWidthVariance\n ? getRandomInt(\n // bottom clamp width to 1\n Math.max(1, this.dotWidth - this.dotWidthVariance),\n this.dotWidth + this.dotWidthVariance,\n )\n : this.dotWidth,\n opacity: this.randomOpacity ? getRandomInt(0, 100) / 100 : 1,\n });\n }\n\n this.sprayChunks.push(this.sprayChunk);\n }\n}\n","import { Pattern } from '../Pattern';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type { Canvas } from '../canvas/Canvas';\nimport { PencilBrush } from './PencilBrush';\nimport type { TSimplePathData } from '../util/path/typedefs';\n\nexport class PatternBrush extends PencilBrush {\n declare source?: CanvasImageSource;\n\n constructor(canvas: Canvas) {\n super(canvas);\n }\n\n getPatternSrc() {\n const dotWidth = 20,\n dotDistance = 5,\n patternCanvas = createCanvasElement(),\n patternCtx = patternCanvas.getContext('2d');\n\n patternCanvas.width = patternCanvas.height = dotWidth + dotDistance;\n if (patternCtx) {\n patternCtx.fillStyle = this.color;\n patternCtx.beginPath();\n patternCtx.arc(\n dotWidth / 2,\n dotWidth / 2,\n dotWidth / 2,\n 0,\n Math.PI * 2,\n false,\n );\n patternCtx.closePath();\n patternCtx.fill();\n }\n return patternCanvas;\n }\n\n /**\n * Creates \"pattern\" instance property\n * @param {CanvasRenderingContext2D} ctx\n */\n getPattern(ctx: CanvasRenderingContext2D) {\n return ctx.createPattern(this.source || this.getPatternSrc(), 'repeat');\n }\n\n /**\n * Sets brush styles\n * @param {CanvasRenderingContext2D} ctx\n */\n _setBrushStyles(ctx: CanvasRenderingContext2D) {\n super._setBrushStyles(ctx);\n const pattern = this.getPattern(ctx);\n pattern && (ctx.strokeStyle = pattern);\n }\n\n /**\n * Creates path\n */\n createPath(pathData: TSimplePathData) {\n const path = super.createPath(pathData),\n topLeft = path._getLeftTopCoords().scalarAdd(path.strokeWidth / 2);\n\n path.stroke = new Pattern({\n source: this.source || this.getPatternSrc(),\n offsetX: -topLeft.x,\n offsetY: -topLeft.y,\n });\n return path;\n }\n}\n","import { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport { Point } from '../Point';\nimport { isFiller } from '../util/typeAssertions';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { makeBoundingBoxFromPoints } from '../util';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\n// @TODO this code is terrible and Line should be a special case of polyline.\n\nconst coordProps = ['x1', 'x2', 'y1', 'y2'] as const;\n\ninterface UniqueLineProps {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport interface SerializedLineProps\n extends SerializedObjectProps,\n UniqueLineProps {}\n\nexport class Line<\n Props extends TOptions = Partial,\n SProps extends SerializedLineProps = SerializedLineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements UniqueLineProps\n{\n /**\n * x value or first line edge\n * @type number\n * @default\n */\n declare x1: number;\n\n /**\n * y value or first line edge\n * @type number\n * @default\n */\n declare y1: number;\n\n /**\n * x value or second line edge\n * @type number\n * @default\n */\n declare x2: number;\n\n /**\n * y value or second line edge\n * @type number\n * @default\n */\n declare y2: number;\n\n static type = 'Line';\n\n static cacheProperties = [...cacheProperties, ...coordProps];\n /**\n * Constructor\n * @param {Array} [points] Array of points\n * @param {Object} [options] Options object\n * @return {Line} thisArg\n */\n constructor([x1, y1, x2, y2] = [0, 0, 0, 0], options: Partial = {}) {\n super();\n Object.assign(this, Line.ownDefaults);\n this.setOptions(options);\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\n this._setWidthHeight();\n const { left, top } = options;\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n /**\n * @private\n * @param {Object} [options] Options\n */\n _setWidthHeight() {\n const { x1, y1, x2, y2 } = this;\n this.width = Math.abs(x2 - x1);\n this.height = Math.abs(y2 - y1);\n const { left, top, width, height } = makeBoundingBoxFromPoints([\n { x: x1, y: y1 },\n { x: x2, y: y2 },\n ]);\n const position = new Point(left + width / 2, top + height / 2);\n this.setPositionByOrigin(position, CENTER, CENTER);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n super._set(key, value);\n if (coordProps.includes(key as keyof UniqueLineProps)) {\n // this doesn't make sense very much, since setting x1 when top or left\n // are already set, is just going to show a strange result since the\n // line will move way more than the developer expect.\n // in fabric5 it worked only when the line didn't have extra transformations,\n // in fabric6 too. With extra transform they behave bad in different ways.\n // This needs probably a good rework or a tutorial if you have to create a dynamic line\n this._setWidthHeight();\n }\n return this;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n\n const p = this.calcLinePoints();\n ctx.moveTo(p.x1, p.y1);\n ctx.lineTo(p.x2, p.y2);\n\n ctx.lineWidth = this.strokeWidth;\n\n // TODO: test this\n // make sure setting \"fill\" changes color of a line\n // (by copying fillStyle to strokeStyle, since line is stroked, not filled)\n const origStrokeStyle = ctx.strokeStyle;\n if (isFiller(this.stroke)) {\n ctx.strokeStyle = this.stroke.toLive(ctx)!;\n } else {\n ctx.strokeStyle = this.stroke ?? ctx.fillStyle;\n }\n this.stroke && this._renderStroke(ctx);\n ctx.strokeStyle = origStrokeStyle;\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n return new Point((this.x1 + this.x2) / 2, (this.y1 + this.y2) / 2);\n }\n\n /**\n * Returns object representation of an instance\n * @method toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n ...this.calcLinePoints(),\n };\n }\n\n /*\n * Calculate object dimensions from its properties\n * @private\n */\n _getNonTransformedDimensions(): Point {\n const dim = super._getNonTransformedDimensions();\n if (this.strokeLineCap === 'butt') {\n if (this.width === 0) {\n dim.y -= this.strokeWidth;\n }\n if (this.height === 0) {\n dim.x -= this.strokeWidth;\n }\n }\n return dim;\n }\n\n /**\n * Recalculates line points given width and height\n * Those points are simply placed around the center,\n * This is not useful outside internal render functions and svg output\n * Is not meant to be for the developer.\n * @private\n */\n calcLinePoints(): UniqueLineProps {\n const { x1: _x1, x2: _x2, y1: _y1, y2: _y2, width, height } = this;\n const xMult = _x1 <= _x2 ? -1 : 1,\n yMult = _y1 <= _y2 ? -1 : 1,\n x1 = (xMult * width) / 2,\n y1 = (yMult * height) / 2,\n x2 = (xMult * -width) / 2,\n y2 = (yMult * -height) / 2;\n\n return {\n x1,\n x2,\n y1,\n y2,\n };\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const { x1, x2, y1, y2 } = this.calcLinePoints();\n return [\n '\\n`,\n ];\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Line.fromElement})\n * @static\n * @memberOf Line\n * @see http://www.w3.org/TR/SVG/shapes.html#LineElement\n */\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(coordProps);\n\n /**\n * Returns Line instance from an SVG element\n * @static\n * @memberOf Line\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {Function} [callback] callback function invoked after parsing\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const {\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n ...parsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n return new this([x1, y1, x2, y2], parsedAttributes);\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Line instance from an object representation\n * @static\n * @memberOf Line\n * @param {Object} object Object to create an instance from\n * @returns {Promise}\n */\n static fromObject>({\n x1,\n y1,\n x2,\n y2,\n ...object\n }: T) {\n return this._fromObject(\n {\n ...object,\n points: [x1, y1, x2, y2],\n },\n {\n extraParam: 'points',\n },\n );\n }\n}\n\nclassRegistry.setClass(Line);\nclassRegistry.setSVGClass(Line);\n","import { classRegistry } from '../ClassRegistry';\nimport { FabricObject } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { TClassProperties, TOptions } from '../typedefs';\nimport type { ObjectEvents } from '../EventTypeDefs';\n\nexport const triangleDefaultValues: Partial> = {\n width: 100,\n height: 100,\n};\n\nexport class Triangle<\n Props extends TOptions = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements FabricObjectProps\n{\n static type = 'Triangle';\n\n static ownDefaults = triangleDefaultValues;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...Triangle.ownDefaults };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Triangle.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const widthBy2 = this.width / 2,\n heightBy2 = this.height / 2;\n\n ctx.beginPath();\n ctx.moveTo(-widthBy2, heightBy2);\n ctx.lineTo(0, -heightBy2);\n ctx.lineTo(widthBy2, heightBy2);\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const widthBy2 = this.width / 2,\n heightBy2 = this.height / 2,\n points = `${-widthBy2} ${heightBy2},0 ${-heightBy2},${widthBy2} ${heightBy2}`;\n return [''];\n }\n}\n\nclassRegistry.setClass(Triangle);\nclassRegistry.setSVGClass(Triangle);\n","import { SCALE_X, SCALE_Y, twoMathPi } from '../constants';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const ellipseDefaultValues: Partial> = {\n rx: 0,\n ry: 0,\n};\n\ninterface UniqueEllipseProps {\n rx: number;\n ry: number;\n}\n\nexport interface SerializedEllipseProps\n extends SerializedObjectProps,\n UniqueEllipseProps {}\n\nexport interface EllipseProps extends FabricObjectProps, UniqueEllipseProps {}\n\nconst ELLIPSE_PROPS = ['rx', 'ry'] as const;\n\nexport class Ellipse<\n Props extends TOptions = Partial,\n SProps extends SerializedEllipseProps = SerializedEllipseProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements EllipseProps\n{\n /**\n * Horizontal radius\n * @type Number\n * @default\n */\n declare rx: number;\n\n /**\n * Vertical radius\n * @type Number\n * @default\n */\n declare ry: number;\n\n static type = 'Ellipse';\n\n static cacheProperties = [...cacheProperties, ...ELLIPSE_PROPS];\n\n static ownDefaults = ellipseDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Ellipse.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Ellipse.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {Ellipse} thisArg\n */\n _set(key: string, value: any) {\n super._set(key, value);\n switch (key) {\n case 'rx':\n this.rx = value;\n this.set('width', value * 2);\n break;\n\n case 'ry':\n this.ry = value;\n this.set('height', value * 2);\n break;\n }\n return this;\n }\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRx() {\n return this.get('rx') * this.get(SCALE_X);\n }\n\n /**\n * Returns Vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRy() {\n return this.get('ry') * this.get(SCALE_Y);\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([...ELLIPSE_PROPS, ...propertiesToInclude]);\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG(): string[] {\n return [\n '\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n ctx.save();\n ctx.transform(1, 0, 0, this.ry / this.rx, 0, 0);\n ctx.arc(0, 0, this.rx, 0, twoMathPi, false);\n ctx.restore();\n this._renderPaintInOrder(ctx);\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Ellipse.fromElement})\n * @static\n * @memberOf Ellipse\n * @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'cx', 'cy', 'rx', 'ry'];\n\n /**\n * Returns {@link Ellipse} instance from an SVG element\n * @static\n * @memberOf Ellipse\n * @param {HTMLElement} element Element to parse\n * @return {Ellipse}\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const parsedAttributes = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n\n parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx;\n parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry;\n return new this(parsedAttributes);\n }\n\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Ellipse);\nclassRegistry.setSVGClass(Ellipse);\n","import type { XY } from '../Point';\n\n/**\n * Parses \"points\" attribute, returning an array of values\n * @static\n * @memberOf fabric\n * @param {String} points points attribute string\n * @return {Array} array of points\n */\nexport function parsePointsAttribute(points: string | null): XY[] {\n // points attribute is required and must not be empty\n if (!points) {\n return [];\n }\n\n // replace commas with whitespace and remove bookending whitespace\n const pointsSplit: string[] = points.replace(/,/g, ' ').trim().split(/\\s+/);\n\n const parsedPoints = [];\n\n for (let i = 0; i < pointsSplit.length; i += 2) {\n parsedPoints.push({\n x: parseFloat(pointsSplit[i]),\n y: parseFloat(pointsSplit[i + 1]),\n });\n }\n\n // odd number of points is an error\n // if (parsedPoints.length % 2 !== 0) {\n // return null;\n // }\n return parsedPoints;\n}\n","import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { parsePointsAttribute } from '../parser/parsePointsAttribute';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { calcDimensionsMatrix, transformPoint } from '../util/misc/matrix';\nimport { projectStrokeOnPoints } from '../util/misc/projectStroke';\nimport type { TProjectStrokeOnPointsOptions } from '../util/misc/projectStroke/types';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport {\n CENTER,\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const polylineDefaultValues: Partial> = {\n /**\n * @deprecated transient option soon to be removed in favor of a different design\n */\n exactBoundingBox: false,\n};\n\nexport interface SerializedPolylineProps extends SerializedObjectProps {\n points: XY[];\n}\n\nexport class Polyline<\n Props extends TOptions = Partial,\n SProps extends SerializedPolylineProps = SerializedPolylineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject {\n /**\n * Points array\n * @type Array\n * @default\n */\n declare points: XY[];\n\n /**\n * WARNING: Feature in progress\n * Calculate the exact bounding box taking in account strokeWidth on acute angles\n * this will be turned to true by default on fabric 6.0\n * maybe will be left in as an optimization since calculations may be slow\n * @deprecated transient option soon to be removed in favor of a different design\n * @type Boolean\n * @default false\n */\n declare exactBoundingBox: boolean;\n\n private declare initialized: true | undefined;\n\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polyline';\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Polyline.ownDefaults,\n };\n }\n\n /**\n * A list of properties that if changed trigger a recalculation of dimensions\n * @todo check if you really need to recalculate for all cases\n */\n static layoutProperties: (keyof Polyline)[] = [\n SKEW_X,\n SKEW_Y,\n 'strokeLineCap',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'strokeWidth',\n 'strokeUniform',\n 'points',\n ];\n\n declare pathOffset: Point;\n\n declare strokeOffset: Point;\n\n static cacheProperties = [...cacheProperties, 'points'];\n\n strokeDiff: Point;\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {Polyline} thisArg\n * @example\n * var poly = new Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n constructor(points: XY[] = [], options: Props = {} as Props) {\n super();\n Object.assign(this, Polyline.ownDefaults);\n this.setOptions(options);\n this.points = points;\n const { left, top } = options;\n this.initialized = true;\n this.setBoundingBox(true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n protected isOpen() {\n return true;\n }\n\n private _projectStrokeOnPoints(options: TProjectStrokeOnPointsOptions) {\n return projectStrokeOnPoints(this.points, options, this.isOpen());\n }\n\n /**\n * Calculate the polygon bounding box\n * @private\n */\n _calcDimensions(options?: Partial) {\n options = {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n strokeLineCap: this.strokeLineCap,\n strokeLineJoin: this.strokeLineJoin,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeUniform: this.strokeUniform,\n strokeWidth: this.strokeWidth,\n ...(options || {}),\n };\n const points = this.exactBoundingBox\n ? this._projectStrokeOnPoints(\n options as TProjectStrokeOnPointsOptions,\n ).map((projection) => projection.projectedPoint)\n : this.points;\n if (points.length === 0) {\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n pathOffset: new Point(),\n strokeOffset: new Point(),\n strokeDiff: new Point(),\n };\n }\n const bbox = makeBoundingBoxFromPoints(points),\n // Remove scale effect, since it's applied after\n matrix = calcDimensionsMatrix({ ...options, scaleX: 1, scaleY: 1 }),\n bboxNoStroke = makeBoundingBoxFromPoints(\n this.points.map((p) => transformPoint(p, matrix, true)),\n ),\n scale = new Point(this.scaleX, this.scaleY);\n let offsetX = bbox.left + bbox.width / 2,\n offsetY = bbox.top + bbox.height / 2;\n if (this.exactBoundingBox) {\n offsetX = offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));\n // Order of those assignments is important.\n // offsetY relies on offsetX being already changed by the line above\n offsetY = offsetY - offsetX * Math.tan(degreesToRadians(this.skewY));\n }\n\n return {\n ...bbox,\n pathOffset: new Point(offsetX, offsetY),\n strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top)\n .subtract(new Point(bbox.left, bbox.top))\n .multiply(scale),\n strokeDiff: new Point(bbox.width, bbox.height)\n .subtract(new Point(bboxNoStroke.width, bboxNoStroke.height))\n .multiply(scale),\n };\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = makeBoundingBoxFromPoints(this.points);\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { left, top, width, height, pathOffset, strokeOffset, strokeDiff } =\n this._calcDimensions();\n this.set({ width, height, pathOffset, strokeOffset, strokeDiff });\n adjustPosition &&\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER,\n );\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return this.exactBoundingBox;\n }\n\n /**\n * @override stroke is taken in account in size\n */\n _getNonTransformedDimensions() {\n return this.exactBoundingBox\n ? // TODO: fix this\n new Point(this.width, this.height)\n : super._getNonTransformedDimensions();\n }\n\n /**\n * @override stroke and skewing are taken into account when projecting stroke on points,\n * therefore we don't want the default calculation to account for skewing as well.\n * Though it is possible to pass `width` and `height` in `options`, doing so is very strange, use with discretion.\n *\n * @private\n */\n _getTransformedDimensions(options: any = {}) {\n if (this.exactBoundingBox) {\n let size: Point;\n /* When `strokeUniform = true`, any changes to the properties require recalculating the `width` and `height` because\n the stroke projections are affected.\n When `strokeUniform = false`, we don't need to recalculate for scale transformations, as the effect of scale on\n projections follows a linear function (e.g. scaleX of 2 just multiply width by 2)*/\n if (\n Object.keys(options).some(\n (key) =>\n this.strokeUniform ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof TProjectStrokeOnPointsOptions,\n ),\n )\n ) {\n const { width, height } = this._calcDimensions(options);\n size = new Point(options.width ?? width, options.height ?? height);\n } else {\n size = new Point(\n options.width ?? this.width,\n options.height ?? this.height,\n );\n }\n return size.multiply(\n new Point(options.scaleX || this.scaleX, options.scaleY || this.scaleY),\n );\n } else {\n return super._getTransformedDimensions(options);\n }\n }\n\n /**\n * Recalculates dimensions when changing skew and scale\n * @private\n */\n _set(key: string, value: any) {\n const changed = this.initialized && this[key as keyof this] !== value;\n const output = super._set(key, value);\n if (\n this.exactBoundingBox &&\n changed &&\n (((key === SCALE_X || key === SCALE_Y) &&\n this.strokeUniform &&\n (this.constructor as typeof Polyline).layoutProperties.includes(\n 'strokeUniform',\n )) ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof Polyline,\n ))\n ) {\n this.setDimensions();\n }\n return output;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n points: this.points.map(({ x, y }) => ({ x, y })),\n };\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const points = [],\n diffX = this.pathOffset.x,\n diffY = this.pathOffset.y,\n NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n\n for (let i = 0, len = this.points.length; i < len; i++) {\n points.push(\n toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS),\n ',',\n toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS),\n ' ',\n );\n }\n return [\n `<${\n (this.constructor as typeof Polyline).type.toLowerCase() as\n | 'polyline'\n | 'polygon'\n } `,\n 'COMMON_PARTS',\n `points=\"${points.join('')}\" />\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return;\n }\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (let i = 0; i < len; i++) {\n const point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n !this.isOpen() && ctx.closePath();\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity(): number {\n return this.points.length;\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Polyline.fromElement})\n * @static\n * @memberOf Polyline\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES];\n\n /**\n * Returns Polyline instance from an SVG element\n * @static\n * @memberOf Polyline\n * @param {HTMLElement} element Element to parser\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const points = parsePointsAttribute(element.getAttribute('points')),\n // we omit left and top to instruct the constructor to position the object using the bbox\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n { left, top, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(points, {\n ...parsedAttributes,\n ...options,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Polyline instance from an object representation\n * @static\n * @memberOf Polyline\n * @param {Object} object Object to create an instance from\n * @returns {Promise}\n */\n static fromObject>(object: T) {\n return this._fromObject(object, {\n extraParam: 'points',\n });\n }\n}\n\nclassRegistry.setClass(Polyline);\nclassRegistry.setSVGClass(Polyline);\n","import { classRegistry } from '../ClassRegistry';\nimport { Polyline, polylineDefaultValues } from './Polyline';\n\nexport class Polygon extends Polyline {\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polygon';\n\n protected isOpen() {\n return false;\n }\n}\n\nclassRegistry.setClass(Polygon);\nclassRegistry.setSVGClass(Polygon);\n","import { FILL, LEFT, STROKE, reNewline } from '../../constants';\nimport type { TClassProperties } from '../../typedefs';\nimport type { FabricText } from './Text';\n\nconst fontProperties = [\n 'fontSize',\n 'fontWeight',\n 'fontFamily',\n 'fontStyle',\n] as const;\n\nexport const textDecorationProperties = [\n 'underline',\n 'overline',\n 'linethrough',\n] as const;\n\nexport const textLayoutProperties: string[] = [\n ...fontProperties,\n 'lineHeight',\n 'text',\n 'charSpacing',\n 'textAlign',\n 'styles',\n 'path',\n 'pathStartOffset',\n 'pathSide',\n 'pathAlign',\n];\n\nexport const additionalProps = [\n ...textLayoutProperties,\n ...textDecorationProperties,\n 'textBackgroundColor',\n 'direction',\n] as const;\n\nexport type StylePropertiesType =\n | 'fill'\n | 'stroke'\n | 'strokeWidth'\n | 'fontSize'\n | 'fontFamily'\n | 'fontWeight'\n | 'fontStyle'\n | 'textBackgroundColor'\n | 'deltaY'\n | 'overline'\n | 'underline'\n | 'linethrough';\n\nexport const styleProperties: Readonly = [\n ...fontProperties,\n ...textDecorationProperties,\n STROKE,\n 'strokeWidth',\n FILL,\n 'deltaY',\n 'textBackgroundColor',\n] as const;\n\n// @TODO: Many things here are configuration related and shouldn't be on the class nor prototype\n// regexes, list of properties that are not suppose to change by instances, magic consts.\n// this will be a separated effort\nexport const textDefaultValues: Partial> = {\n _reNewline: reNewline,\n _reSpacesAndTabs: /[ \\t\\r]/g,\n _reSpaceAndTab: /[ \\t\\r]/,\n _reWords: /\\S+/g,\n fontSize: 40,\n fontWeight: 'normal',\n fontFamily: 'Times New Roman',\n underline: false,\n overline: false,\n linethrough: false,\n textAlign: LEFT,\n fontStyle: 'normal',\n lineHeight: 1.16,\n superscript: {\n size: 0.6, // fontSize factor\n baseline: -0.35, // baseline-shift factor (upwards)\n },\n subscript: {\n size: 0.6, // fontSize factor\n baseline: 0.11, // baseline-shift factor (downwards)\n },\n textBackgroundColor: '',\n stroke: null,\n shadow: null,\n path: undefined,\n pathStartOffset: 0,\n pathSide: LEFT,\n pathAlign: 'baseline',\n _fontSizeFraction: 0.222,\n offsets: {\n underline: 0.1,\n linethrough: -0.315,\n overline: -0.88,\n },\n _fontSizeMult: 1.13,\n charSpacing: 0,\n deltaY: 0,\n direction: 'ltr',\n CACHE_FONT_SIZE: 400,\n MIN_TEXT_WIDTH: 2,\n};\n\nexport const JUSTIFY = 'justify';\nexport const JUSTIFY_LEFT = 'justify-left';\nexport const JUSTIFY_RIGHT = 'justify-right';\nexport const JUSTIFY_CENTER = 'justify-center';\n","import type { ObjectEvents } from '../../EventTypeDefs';\nimport type { FabricObjectProps, SerializedObjectProps } from '../Object/types';\nimport type { TOptions } from '../../typedefs';\nimport { FabricObject } from '../Object/FabricObject';\nimport { styleProperties } from './constants';\nimport type { StylePropertiesType } from './constants';\nimport type { FabricText } from './Text';\nimport { pick } from '../../util';\nimport { pickBy } from '../../util/misc/pick';\n\nexport type CompleteTextStyleDeclaration = Pick<\n FabricText,\n StylePropertiesType\n>;\n\nexport type TextStyleDeclaration = Partial;\n\nexport type TextStyle = {\n [line: number | string]: { [char: number | string]: TextStyleDeclaration };\n};\n\nexport abstract class StyledText<\n Props extends TOptions = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject {\n declare abstract styles: TextStyle;\n protected declare abstract _textLines: string[][];\n protected declare _forceClearCache: boolean;\n static _styleProperties: Readonly = styleProperties;\n abstract get2DCursorLocation(\n selectionStart: number,\n skipWrapping?: boolean,\n ): { charIndex: number; lineIndex: number };\n\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles(lineIndex?: number): boolean {\n if (!this.styles) {\n return true;\n }\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return true;\n }\n const obj =\n typeof lineIndex === 'undefined'\n ? this.styles\n : { line: this.styles[lineIndex] };\n for (const p1 in obj) {\n for (const p2 in obj[p1]) {\n // eslint-disable-next-line no-unused-vars\n for (const p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * Returns true if object has a style property or has it ina specified line\n * This function is used to detect if a text will use a particular property or not.\n * @param {String} property to check for\n * @param {Number} lineIndex to check the style on\n * @return {Boolean}\n */\n styleHas(property: keyof TextStyleDeclaration, lineIndex?: number): boolean {\n if (!this.styles) {\n return false;\n }\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return false;\n }\n const obj =\n typeof lineIndex === 'undefined'\n ? this.styles\n : { 0: this.styles[lineIndex] };\n // eslint-disable-next-line\n for (const p1 in obj) {\n // eslint-disable-next-line\n for (const p2 in obj[p1]) {\n if (typeof obj[p1][p2][property] !== 'undefined') {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * Check if characters in a text have a value for a property\n * whose value matches the textbox's value for that property. If so,\n * the character-level property is deleted. If the character\n * has no other properties, then it is also deleted. Finally,\n * if the line containing that character has no other characters\n * then it also is deleted.\n *\n * @param {string} property The property to compare between characters and text.\n */\n cleanStyle(property: keyof TextStyleDeclaration) {\n if (!this.styles) {\n return false;\n }\n const obj = this.styles;\n let stylesCount = 0,\n letterCount,\n stylePropertyValue,\n allStyleObjectPropertiesMatch = true,\n graphemeCount = 0;\n for (const p1 in obj) {\n letterCount = 0;\n for (const p2 in obj[p1]) {\n const styleObject = obj[p1][p2] || {},\n stylePropertyHasBeenSet = styleObject[property] !== undefined;\n\n stylesCount++;\n\n if (stylePropertyHasBeenSet) {\n if (!stylePropertyValue) {\n stylePropertyValue = styleObject[property];\n } else if (styleObject[property] !== stylePropertyValue) {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (styleObject[property] === this[property as keyof this]) {\n delete styleObject[property];\n }\n } else {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (Object.keys(styleObject).length !== 0) {\n letterCount++;\n } else {\n delete obj[p1][p2];\n }\n }\n\n if (letterCount === 0) {\n delete obj[p1];\n }\n }\n // if every grapheme has the same style set then\n // delete those styles and set it on the parent\n for (let i = 0; i < this._textLines.length; i++) {\n graphemeCount += this._textLines[i].length;\n }\n if (allStyleObjectPropertiesMatch && stylesCount === graphemeCount) {\n // @ts-expect-error conspiracy theory of TS\n this[property as keyof this] = stylePropertyValue;\n this.removeStyle(property);\n }\n }\n\n /**\n * Remove a style property or properties from all individual character styles\n * in a text object. Deletes the character style object if it contains no other style\n * props. Deletes a line style object if it contains no other character styles.\n *\n * @param {String} props The property to remove from character styles.\n */\n removeStyle(property: keyof TextStyleDeclaration) {\n if (!this.styles) {\n return;\n }\n const obj = this.styles;\n let line, lineNum, charNum;\n for (lineNum in obj) {\n line = obj[lineNum];\n for (charNum in line) {\n delete line[charNum][property];\n if (Object.keys(line[charNum]).length === 0) {\n delete line[charNum];\n }\n }\n if (Object.keys(line).length === 0) {\n delete obj[lineNum];\n }\n }\n }\n\n private _extendStyles(index: number, style: TextStyleDeclaration): void {\n const { lineIndex, charIndex } = this.get2DCursorLocation(index);\n\n if (!this._getLineStyle(lineIndex)) {\n this._setLineStyle(lineIndex);\n }\n\n const newStyle = pickBy(\n {\n // first create a new object that is a merge of existing and new\n ...this._getStyleDeclaration(lineIndex, charIndex),\n ...style,\n // use the predicate to discard undefined values\n },\n (value) => value !== undefined,\n );\n\n // finally assign to the old position the new style\n this._setStyleDeclaration(lineIndex, charIndex, newStyle);\n }\n\n /**\n * Gets style of a current selection/cursor (at the start position)\n * @param {Number} startIndex Start index to get styles at\n * @param {Number} endIndex End index to get styles at, if not specified startIndex + 1\n * @param {Boolean} [complete] get full style or not\n * @return {Array} styles an array with one, zero or more Style objects\n */\n getSelectionStyles(\n startIndex: number,\n endIndex?: number,\n complete?: boolean,\n ): TextStyleDeclaration[] {\n const styles: TextStyleDeclaration[] = [];\n for (let i = startIndex; i < (endIndex || startIndex); i++) {\n styles.push(this.getStyleAtPosition(i, complete));\n }\n return styles;\n }\n\n /**\n * Gets style of a current selection/cursor position\n * @param {Number} position to get styles at\n * @param {Boolean} [complete] full style if true\n * @return {Object} style Style object at a specified index\n * @private\n */\n getStyleAtPosition(position: number, complete?: boolean) {\n const { lineIndex, charIndex } = this.get2DCursorLocation(position);\n return complete\n ? this.getCompleteStyleDeclaration(lineIndex, charIndex)\n : this._getStyleDeclaration(lineIndex, charIndex);\n }\n\n /**\n * Sets style of a current selection, if no selection exist, do not set anything.\n * @param {Object} styles Styles object\n * @param {Number} startIndex Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified startIndex + 1\n */\n setSelectionStyles(styles: object, startIndex: number, endIndex?: number) {\n for (let i = startIndex; i < (endIndex || startIndex); i++) {\n this._extendStyles(i, styles);\n }\n /* not included in _extendStyles to avoid clearing cache more than once */\n this._forceClearCache = true;\n }\n\n /**\n * Get a reference, not a clone, to the style object for a given character,\n * if no style is set for a line or char, return a new empty object.\n * This is tricky and confusing because when you get an empty object you can't\n * determine if it is a reference or a new one.\n * @TODO this should always return a reference or always a clone or undefined when necessary.\n * @protected\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {TextStyleDeclaration} a style object reference to the existing one or a new empty object when undefined\n */\n _getStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n ): TextStyleDeclaration {\n const lineStyle = this.styles && this.styles[lineIndex];\n return lineStyle ? lineStyle[charIndex] ?? {} : {};\n }\n\n /**\n * return a new object that contains all the style property for a character\n * the object returned is newly created\n * @param {Number} lineIndex of the line where the character is\n * @param {Number} charIndex position of the character on the line\n * @return {Object} style object\n */\n getCompleteStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n ): CompleteTextStyleDeclaration {\n return {\n // @ts-expect-error readonly\n ...pick(this, (this.constructor as typeof StyledText)._styleProperties),\n ...this._getStyleDeclaration(lineIndex, charIndex),\n } as CompleteTextStyleDeclaration;\n }\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n protected _setStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n style: object,\n ) {\n this.styles[lineIndex][charIndex] = style;\n }\n\n /**\n *\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n protected _deleteStyleDeclaration(lineIndex: number, charIndex: number) {\n delete this.styles[lineIndex][charIndex];\n }\n\n /**\n * @param {Number} lineIndex\n * @return {Boolean} if the line exists or not\n * @private\n */\n protected _getLineStyle(lineIndex: number): boolean {\n return !!this.styles[lineIndex];\n }\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @private\n */\n protected _setLineStyle(lineIndex: number) {\n this.styles[lineIndex] = {};\n }\n\n protected _deleteLineStyle(lineIndex: number) {\n delete this.styles[lineIndex];\n }\n}\n","import { config } from '../../config';\nimport type { TSVGReviver } from '../../typedefs';\nimport { escapeXml } from '../../util/lang_string';\nimport { colorPropToSVG, createSVGRect } from '../../util/misc/svgParsing';\nimport { hasStyleChanged } from '../../util/misc/textStyles';\nimport { toFixed } from '../../util/misc/toFixed';\nimport { FabricObjectSVGExportMixin } from '../Object/FabricObjectSVGExportMixin';\nimport { type TextStyleDeclaration } from './StyledText';\nimport { JUSTIFY } from '../Text/constants';\nimport type { FabricText } from './Text';\nimport { STROKE, FILL } from '../../constants';\n\nconst multipleSpacesRegex = / +/g;\nconst dblQuoteRegex = /\"/g;\n\nfunction createSVGInlineRect(\n color: string,\n left: number,\n top: number,\n width: number,\n height: number,\n) {\n return `\\t\\t${createSVGRect(color, { left, top, width, height })}\\n`;\n}\n\nexport class TextSVGExportMixin extends FabricObjectSVGExportMixin {\n _toSVG(this: TextSVGExportMixin & FabricText): string[] {\n const offsets = this._getSVGLeftTopOffsets(),\n textAndBg = this._getSVGTextAndBg(offsets.textTop, offsets.textLeft);\n return this._wrapSVGTextAndBg(textAndBg);\n }\n\n toSVG(this: TextSVGExportMixin & FabricText, reviver?: TSVGReviver): string {\n return this._createBaseSVGMarkup(this._toSVG(), {\n reviver,\n noStyle: true,\n withShadow: true,\n });\n }\n\n private _getSVGLeftTopOffsets(this: TextSVGExportMixin & FabricText) {\n return {\n textLeft: -this.width / 2,\n textTop: -this.height / 2,\n lineTop: this.getHeightOfLine(0),\n };\n }\n\n private _wrapSVGTextAndBg(\n this: TextSVGExportMixin & FabricText,\n {\n textBgRects,\n textSpans,\n }: {\n textSpans: string[];\n textBgRects: string[];\n },\n ) {\n const noShadow = true,\n textDecoration = this.getSvgTextDecoration(this);\n return [\n textBgRects.join(''),\n '\\t\\t',\n textSpans.join(''),\n '\\n',\n ];\n }\n\n /**\n * @private\n * @param {Number} textTopOffset Text top offset\n * @param {Number} textLeftOffset Text left offset\n * @return {Object}\n */\n private _getSVGTextAndBg(\n this: TextSVGExportMixin & FabricText,\n textTopOffset: number,\n textLeftOffset: number,\n ) {\n const textSpans: string[] = [],\n textBgRects: string[] = [];\n let height = textTopOffset,\n lineOffset;\n\n // bounding-box background\n this.backgroundColor &&\n textBgRects.push(\n ...createSVGInlineRect(\n this.backgroundColor,\n -this.width / 2,\n -this.height / 2,\n this.width,\n this.height,\n ),\n );\n\n // text and text-background\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n lineOffset = this._getLineLeftOffset(i);\n if (this.direction === 'rtl') {\n lineOffset += this.width;\n }\n if (this.textBackgroundColor || this.styleHas('textBackgroundColor', i)) {\n this._setSVGTextLineBg(\n textBgRects,\n i,\n textLeftOffset + lineOffset,\n height,\n );\n }\n this._setSVGTextLineText(\n textSpans,\n i,\n textLeftOffset + lineOffset,\n height,\n );\n height += this.getHeightOfLine(i);\n }\n\n return {\n textSpans,\n textBgRects,\n };\n }\n\n private _createTextCharSpan(\n this: TextSVGExportMixin & FabricText,\n char: string,\n styleDecl: TextStyleDeclaration,\n left: number,\n top: number,\n ) {\n const styleProps = this.getSvgSpanStyles(\n styleDecl,\n char !== char.trim() || !!char.match(multipleSpacesRegex),\n ),\n fillStyles = styleProps ? `style=\"${styleProps}\"` : '',\n dy = styleDecl.deltaY,\n dySpan = dy ? ` dy=\"${toFixed(dy, config.NUM_FRACTION_DIGITS)}\" ` : '';\n\n return `${escapeXml(char)}`;\n }\n\n private _setSVGTextLineText(\n this: TextSVGExportMixin & FabricText,\n textSpans: string[],\n lineIndex: number,\n textLeftOffset: number,\n textTopOffset: number,\n ) {\n const lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.includes(JUSTIFY),\n line = this._textLines[lineIndex];\n let actualStyle,\n nextStyle,\n charsToRender = '',\n charBox,\n style,\n boxWidth = 0,\n timeToRender;\n\n textTopOffset +=\n (lineHeight * (1 - this._fontSizeFraction)) / this.lineHeight;\n for (let i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i];\n if (boxWidth === 0) {\n textLeftOffset += charBox.kernedWidth - charBox.width;\n boxWidth += charBox.width;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle =\n actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = hasStyleChanged(actualStyle, nextStyle, true);\n }\n if (timeToRender) {\n style = this._getStyleDeclaration(lineIndex, i);\n textSpans.push(\n this._createTextCharSpan(\n charsToRender,\n style,\n textLeftOffset,\n textTopOffset,\n ),\n );\n charsToRender = '';\n actualStyle = nextStyle;\n if (this.direction === 'rtl') {\n textLeftOffset -= boxWidth;\n } else {\n textLeftOffset += boxWidth;\n }\n boxWidth = 0;\n }\n }\n }\n\n private _setSVGTextLineBg(\n this: TextSVGExportMixin & FabricText,\n textBgRects: (string | number)[],\n i: number,\n leftOffset: number,\n textTopOffset: number,\n ) {\n const line = this._textLines[i],\n heightOfLine = this.getHeightOfLine(i) / this.lineHeight;\n let boxWidth = 0,\n boxStart = 0,\n currentColor,\n lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (let j = 0; j < line.length; j++) {\n const { left, width, kernedWidth } = this.__charBounds[i][j];\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (currentColor !== lastColor) {\n lastColor &&\n textBgRects.push(\n ...createSVGInlineRect(\n lastColor,\n leftOffset + boxStart,\n textTopOffset,\n boxWidth,\n heightOfLine,\n ),\n );\n boxStart = left;\n boxWidth = width;\n lastColor = currentColor;\n } else {\n boxWidth += kernedWidth;\n }\n }\n currentColor &&\n textBgRects.push(\n ...createSVGInlineRect(\n lastColor,\n leftOffset + boxStart,\n textTopOffset,\n boxWidth,\n heightOfLine,\n ),\n );\n }\n\n /**\n * @deprecated unused\n */\n _getSVGLineTopOffset(\n this: TextSVGExportMixin & FabricText,\n lineIndex: number,\n ) {\n let lineTopOffset = 0,\n j;\n for (j = 0; j < lineIndex; j++) {\n lineTopOffset += this.getHeightOfLine(j);\n }\n const lastHeight = this.getHeightOfLine(j);\n return {\n lineTop: lineTopOffset,\n offset:\n ((this._fontSizeMult - this._fontSizeFraction) * lastHeight) /\n (this.lineHeight * this._fontSizeMult),\n };\n }\n\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles(this: TextSVGExportMixin & FabricText, skipShadow?: boolean) {\n return `${super.getSvgStyles(skipShadow)} white-space: pre;`;\n }\n\n /**\n * Returns styles-string for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @param {Boolean} useWhiteSpace a boolean to include an additional attribute in the style.\n * @return {String}\n */\n getSvgSpanStyles(\n this: TextSVGExportMixin & FabricText,\n style: TextStyleDeclaration,\n useWhiteSpace?: boolean,\n ) {\n const {\n fontFamily,\n strokeWidth,\n stroke,\n fill,\n fontSize,\n fontStyle,\n fontWeight,\n deltaY,\n } = style;\n\n const textDecoration = this.getSvgTextDecoration(style);\n\n return [\n stroke ? colorPropToSVG(STROKE, stroke) : '',\n strokeWidth ? `stroke-width: ${strokeWidth}; ` : '',\n fontFamily\n ? `font-family: ${\n !fontFamily.includes(\"'\") && !fontFamily.includes('\"')\n ? `'${fontFamily}'`\n : fontFamily\n }; `\n : '',\n fontSize ? `font-size: ${fontSize}px; ` : '',\n fontStyle ? `font-style: ${fontStyle}; ` : '',\n fontWeight ? `font-weight: ${fontWeight}; ` : '',\n textDecoration ? `text-decoration: ${textDecoration}; ` : textDecoration,\n fill ? colorPropToSVG(FILL, fill) : '',\n deltaY ? `baseline-shift: ${-deltaY}; ` : '',\n useWhiteSpace ? 'white-space: pre; ' : '',\n ].join('');\n }\n\n /**\n * Returns text-decoration property for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @return {String}\n */\n getSvgTextDecoration(\n this: TextSVGExportMixin & FabricText,\n style: TextStyleDeclaration,\n ) {\n return (['overline', 'underline', 'line-through'] as const)\n .filter(\n (decoration) =>\n style[\n decoration.replace('-', '') as\n | 'overline'\n | 'underline'\n | 'linethrough'\n ],\n )\n .join(' ');\n }\n}\n","import { cache } from '../../cache';\nimport { DEFAULT_SVG_FONT_SIZE, FILL, STROKE } from '../../constants';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport type {\n CompleteTextStyleDeclaration,\n TextStyle,\n TextStyleDeclaration,\n} from './StyledText';\nimport { StyledText } from './StyledText';\nimport { SHARED_ATTRIBUTES } from '../../parser/attributes';\nimport { parseAttributes } from '../../parser/parseAttributes';\nimport type {\n Abortable,\n TCacheCanvasDimensions,\n TClassProperties,\n TFiller,\n TOptions,\n} from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { graphemeSplit } from '../../util/lang_string';\nimport { createCanvasElement } from '../../util/misc/dom';\nimport type { TextStyleArray } from '../../util/misc/textStyles';\nimport {\n hasStyleChanged,\n stylesFromArray,\n stylesToArray,\n} from '../../util/misc/textStyles';\nimport { getPathSegmentsInfo, getPointOnPath } from '../../util/path';\nimport { cacheProperties } from '../Object/FabricObject';\nimport type { Path } from '../Path';\nimport { TextSVGExportMixin } from './TextSVGExportMixin';\nimport { applyMixins } from '../../util/applyMixins';\nimport type { FabricObjectProps, SerializedObjectProps } from '../Object/types';\nimport type { StylePropertiesType } from './constants';\nimport {\n additionalProps,\n textDefaultValues,\n textLayoutProperties,\n JUSTIFY,\n JUSTIFY_CENTER,\n JUSTIFY_LEFT,\n JUSTIFY_RIGHT,\n} from './constants';\nimport { CENTER, LEFT, RIGHT, TOP, BOTTOM } from '../../constants';\nimport { isFiller } from '../../util/typeAssertions';\nimport type { Gradient } from '../../gradient/Gradient';\nimport type { Pattern } from '../../Pattern';\nimport type { CSSRules } from '../../parser/typedefs';\n\nlet measuringContext: CanvasRenderingContext2D | null;\n\n/**\n * Return a context for measurement of text string.\n * if created it gets stored for reuse\n */\nfunction getMeasuringContext() {\n if (!measuringContext) {\n const canvas = createCanvasElement();\n canvas.width = canvas.height = 0;\n measuringContext = canvas.getContext('2d');\n }\n return measuringContext;\n}\n\nexport type TPathSide = 'left' | 'right';\n\nexport type TPathAlign = 'baseline' | 'center' | 'ascender' | 'descender';\n\nexport type TextLinesInfo = {\n lines: string[];\n graphemeLines: string[][];\n graphemeText: string[];\n _unwrappedLines: string[][];\n};\n\n/**\n * Measure and return the info of a single grapheme.\n * needs the the info of previous graphemes already filled\n * Override to customize measuring\n */\nexport type GraphemeBBox = {\n width: number;\n height: number;\n kernedWidth: number;\n left: number;\n deltaY: number;\n renderLeft?: number;\n renderTop?: number;\n angle?: number;\n};\n\n// @TODO this is not complete\ninterface UniqueTextProps {\n charSpacing: number;\n lineHeight: number;\n fontSize: number;\n fontWeight: string | number;\n fontFamily: string;\n fontStyle: string;\n pathSide: TPathSide;\n pathAlign: TPathAlign;\n underline: boolean;\n overline: boolean;\n linethrough: boolean;\n textAlign: string;\n direction: CanvasDirection;\n path?: Path;\n}\n\nexport interface SerializedTextProps\n extends SerializedObjectProps,\n UniqueTextProps {\n styles: TextStyleArray | TextStyle;\n}\n\nexport interface TextProps extends FabricObjectProps, UniqueTextProps {\n styles: TextStyle;\n}\n\n/**\n * Text class\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#text}\n */\nexport class FabricText<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends StyledText\n implements UniqueTextProps\n{\n /**\n * Properties that requires a text layout recalculation when changed\n * @type string[]\n * @protected\n */\n static textLayoutProperties: string[] = textLayoutProperties;\n\n /**\n * @private\n */\n declare _reNewline: RegExp;\n\n /**\n * Use this regular expression to filter for whitespaces that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reSpacesAndTabs: RegExp;\n\n /**\n * Use this regular expression to filter for whitespace that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reSpaceAndTab: RegExp;\n\n /**\n * Use this regular expression to filter consecutive groups of non spaces.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reWords: RegExp;\n\n declare text: string;\n\n /**\n * Font size (in pixels)\n * @type Number\n * @default\n */\n declare fontSize: number;\n\n /**\n * Font weight (e.g. bold, normal, 400, 600, 800)\n * @type {(Number|String)}\n * @default\n */\n declare fontWeight: string | number;\n\n /**\n * Font family\n * @type String\n * @default\n */\n declare fontFamily: string;\n\n /**\n * Text decoration underline.\n * @type Boolean\n * @default\n */\n declare underline: boolean;\n\n /**\n * Text decoration overline.\n * @type Boolean\n * @default\n */\n declare overline: boolean;\n\n /**\n * Text decoration linethrough.\n * @type Boolean\n * @default\n */\n declare linethrough: boolean;\n\n /**\n * Text alignment. Possible values: \"left\", \"center\", \"right\", \"justify\",\n * \"justify-left\", \"justify-center\" or \"justify-right\".\n * @type String\n * @default\n */\n declare textAlign: string;\n\n /**\n * Font style . Possible values: \"\", \"normal\", \"italic\" or \"oblique\".\n * @type String\n * @default\n */\n declare fontStyle: string;\n\n /**\n * Line height\n * @type Number\n * @default\n */\n declare lineHeight: number;\n\n /**\n * Superscript schema object (minimum overlap)\n */\n declare superscript: {\n /**\n * fontSize factor\n * @default 0.6\n */\n size: number;\n /**\n * baseline-shift factor (upwards)\n * @default -0.35\n */\n baseline: number;\n };\n\n /**\n * Subscript schema object (minimum overlap)\n */\n declare subscript: {\n /**\n * fontSize factor\n * @default 0.6\n */\n size: number;\n /**\n * baseline-shift factor (downwards)\n * @default 0.11\n */\n baseline: number;\n };\n\n /**\n * Background color of text lines\n * @type String\n * @default\n */\n declare textBackgroundColor: string;\n\n declare styles: TextStyle;\n\n /**\n * Path that the text should follow.\n * since 4.6.0 the path will be drawn automatically.\n * if you want to make the path visible, give it a stroke and strokeWidth or fill value\n * if you want it to be hidden, assign visible = false to the path.\n * This feature is in BETA, and SVG import/export is not yet supported.\n * @type Path\n * @example\n * const textPath = new Text('Text on a path', {\n * top: 150,\n * left: 150,\n * textAlign: 'center',\n * charSpacing: -50,\n * path: new Path('M 0 0 C 50 -100 150 -100 200 0', {\n * strokeWidth: 1,\n * visible: false\n * }),\n * pathSide: 'left',\n * pathStartOffset: 0\n * });\n * @default\n */\n declare path?: Path;\n\n /**\n * Offset amount for text path starting position\n * Only used when text has a path\n * @type Number\n * @default\n */\n declare pathStartOffset: number;\n\n /**\n * Which side of the path the text should be drawn on.\n * Only used when text has a path\n * @type {TPathSide} 'left|right'\n * @default\n */\n declare pathSide: TPathSide;\n\n /**\n * How text is aligned to the path. This property determines\n * the perpendicular position of each character relative to the path.\n * (one of \"baseline\", \"center\", \"ascender\", \"descender\")\n * This feature is in BETA, and its behavior may change\n * @type TPathAlign\n * @default\n */\n declare pathAlign: TPathAlign;\n\n /**\n * @private\n */\n declare _fontSizeFraction: number;\n\n /**\n * @private\n */\n declare offsets: { underline: number; linethrough: number; overline: number };\n\n /**\n * Text Line proportion to font Size (in pixels)\n * @type Number\n * @default\n */\n declare _fontSizeMult: number;\n\n /**\n * additional space between characters\n * expressed in thousands of em unit\n * @type Number\n * @default\n */\n declare charSpacing: number;\n\n /**\n * Baseline shift, styles only, keep at 0 for the main text object\n * @type {Number}\n * @default\n */\n declare deltaY: number;\n\n /**\n * WARNING: EXPERIMENTAL. NOT SUPPORTED YET\n * determine the direction of the text.\n * This has to be set manually together with textAlign and originX for proper\n * experience.\n * some interesting link for the future\n * https://www.w3.org/International/questions/qa-bidi-unicode-controls\n * @since 4.5.0\n * @type {CanvasDirection} 'ltr|rtl'\n * @default\n */\n declare direction: CanvasDirection;\n\n /**\n * contains characters bounding boxes\n * This variable is considered to be protected.\n * But for how mixins are implemented right now, we can't leave it private\n * @protected\n */\n __charBounds: GraphemeBBox[][] = [];\n\n /**\n * use this size when measuring text. To avoid IE11 rounding errors\n * @type {Number}\n * @default\n * @readonly\n * @private\n */\n declare CACHE_FONT_SIZE: number;\n\n /**\n * contains the min text width to avoid getting 0\n * @type {Number}\n * @default\n */\n declare MIN_TEXT_WIDTH: number;\n\n /**\n * contains the the text of the object, divided in lines as they are displayed\n * on screen. Wrapping will divide the text independently of line breaks\n * @type {string[]}\n * @default\n */\n declare textLines: string[];\n\n /**\n * same as textlines, but each line is an array of graphemes as split by splitByGrapheme\n * @type {string[]}\n * @default\n */\n declare _textLines: string[][];\n\n declare _unwrappedTextLines: string[][];\n declare _text: string[];\n declare cursorWidth: number;\n declare __lineHeights: number[];\n declare __lineWidths: number[];\n declare initialized?: true;\n\n static cacheProperties = [...cacheProperties, ...additionalProps];\n\n static ownDefaults = textDefaultValues;\n\n static type = 'Text';\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...FabricText.ownDefaults };\n }\n\n constructor(text: string, options?: Props) {\n super();\n Object.assign(this, FabricText.ownDefaults);\n this.setOptions(options);\n if (!this.styles) {\n this.styles = {};\n }\n this.text = text;\n this.initialized = true;\n if (this.path) {\n this.setPathInfo();\n }\n this.initDimensions();\n this.setCoords();\n }\n\n /**\n * If text has a path, it will add the extra information needed\n * for path and text calculations\n */\n setPathInfo() {\n const path = this.path;\n if (path) {\n path.segmentsInfo = getPathSegmentsInfo(path.path);\n }\n }\n\n /**\n * @private\n * Divides text into lines of text and lines of graphemes.\n */\n _splitText(): TextLinesInfo {\n const newLines = this._splitTextIntoLines(this.text);\n this.textLines = newLines.lines;\n this._textLines = newLines.graphemeLines;\n this._unwrappedTextLines = newLines._unwrappedLines;\n this._text = newLines.graphemeText;\n return newLines;\n }\n\n /**\n * Initialize or update text dimensions.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n */\n initDimensions() {\n this._splitText();\n this._clearCache();\n this.dirty = true;\n if (this.path) {\n this.width = this.path.width;\n this.height = this.path.height;\n } else {\n this.width =\n this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH;\n this.height = this.calcTextHeight();\n }\n if (this.textAlign.includes(JUSTIFY)) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n }\n\n /**\n * Enlarge space boxes and shift the others\n */\n enlargeSpaces() {\n let diffSpace,\n currentLineWidth,\n numberOfSpaces,\n accumulatedSpace,\n line,\n charBound,\n spaces;\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n if (\n this.textAlign !== JUSTIFY &&\n (i === len - 1 || this.isEndOfWrapping(i))\n ) {\n continue;\n }\n accumulatedSpace = 0;\n line = this._textLines[i];\n currentLineWidth = this.getLineWidth(i);\n if (\n currentLineWidth < this.width &&\n (spaces = this.textLines[i].match(this._reSpacesAndTabs))\n ) {\n numberOfSpaces = spaces.length;\n diffSpace = (this.width - currentLineWidth) / numberOfSpaces;\n for (let j = 0; j <= line.length; j++) {\n charBound = this.__charBounds[i][j];\n if (this._reSpaceAndTab.test(line[j])) {\n charBound.width += diffSpace;\n charBound.kernedWidth += diffSpace;\n charBound.left += accumulatedSpace;\n accumulatedSpace += diffSpace;\n } else {\n charBound.left += accumulatedSpace;\n }\n }\n }\n }\n }\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @return {Boolean}\n */\n isEndOfWrapping(lineIndex: number): boolean {\n return lineIndex === this._textLines.length - 1;\n }\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * It return always 1 for text and Itext. Textbox has its own implementation\n * @return Number\n */\n missingNewlineOffset(lineIndex: number, skipWrapping?: boolean): 0 | 1;\n missingNewlineOffset(_lineIndex: number): 1 {\n return 1;\n }\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor\n * @param {Number} selectionStart\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.\n */\n get2DCursorLocation(selectionStart: number, skipWrapping?: boolean) {\n const lines = skipWrapping ? this._unwrappedTextLines : this._textLines;\n let i: number;\n for (i = 0; i < lines.length; i++) {\n if (selectionStart <= lines[i].length) {\n return {\n lineIndex: i,\n charIndex: selectionStart,\n };\n }\n selectionStart -=\n lines[i].length + this.missingNewlineOffset(i, skipWrapping);\n }\n return {\n lineIndex: i - 1,\n charIndex:\n lines[i - 1].length < selectionStart\n ? lines[i - 1].length\n : selectionStart,\n };\n }\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of text object\n */\n toString(): string {\n return `#`;\n }\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @param {Object} dim.x width of object to be cached\n * @param {Object} dim.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions(): TCacheCanvasDimensions {\n const dims = super._getCacheCanvasDimensions();\n const fontSize = this.fontSize;\n dims.width += fontSize * dims.zoomX;\n dims.height += fontSize * dims.zoomY;\n return dims;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const path = this.path;\n path && !path.isNotVisible() && path._render(ctx);\n this._setTextStyles(ctx);\n this._renderTextLinesBackground(ctx);\n this._renderTextDecoration(ctx, 'underline');\n this._renderText(ctx);\n this._renderTextDecoration(ctx, 'overline');\n this._renderTextDecoration(ctx, 'linethrough');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderText(ctx: CanvasRenderingContext2D) {\n if (this.paintFirst === STROKE) {\n this._renderTextStroke(ctx);\n this._renderTextFill(ctx);\n } else {\n this._renderTextFill(ctx);\n this._renderTextStroke(ctx);\n }\n }\n\n /**\n * Set the font parameter of the context with the object properties or with charStyle\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [charStyle] object with font style properties\n * @param {String} [charStyle.fontFamily] Font Family\n * @param {Number} [charStyle.fontSize] Font size in pixels. ( without px suffix )\n * @param {String} [charStyle.fontWeight] Font weight\n * @param {String} [charStyle.fontStyle] Font style (italic|normal)\n */\n _setTextStyles(\n ctx: CanvasRenderingContext2D,\n charStyle?: any,\n forMeasuring?: boolean,\n ) {\n ctx.textBaseline = 'alphabetic';\n if (this.path) {\n switch (this.pathAlign) {\n case CENTER:\n ctx.textBaseline = 'middle';\n break;\n case 'ascender':\n ctx.textBaseline = TOP;\n break;\n case 'descender':\n ctx.textBaseline = BOTTOM;\n break;\n }\n }\n ctx.font = this._getFontDeclaration(charStyle, forMeasuring);\n }\n\n /**\n * calculate and return the text Width measuring each line.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {Number} Maximum width of Text object\n */\n calcTextWidth(): number {\n let maxWidth = this.getLineWidth(0);\n\n for (let i = 1, len = this._textLines.length; i < len; i++) {\n const currentLineWidth = this.getLineWidth(i);\n if (currentLineWidth > maxWidth) {\n maxWidth = currentLineWidth;\n }\n }\n return maxWidth;\n }\n\n /**\n * @private\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} line Text to render\n * @param {Number} left Left position of text\n * @param {Number} top Top position of text\n * @param {Number} lineIndex Index of a line in a text\n */\n _renderTextLine(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n line: string[],\n left: number,\n top: number,\n lineIndex: number,\n ) {\n this._renderChars(method, ctx, line, left, top, lineIndex);\n }\n\n /**\n * Renders the text background for lines, taking care of style\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextLinesBackground(ctx: CanvasRenderingContext2D) {\n if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor')) {\n return;\n }\n const originalFill = ctx.fillStyle,\n leftOffset = this._getLeftOffset();\n let lineTopOffset = this._getTopOffset();\n\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i);\n if (\n !this.textBackgroundColor &&\n !this.styleHas('textBackgroundColor', i)\n ) {\n lineTopOffset += heightOfLine;\n continue;\n }\n const jlen = this._textLines[i].length;\n const lineLeftOffset = this._getLineLeftOffset(i);\n let boxWidth = 0;\n let boxStart = 0;\n let drawStart;\n let currentColor;\n let lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (let j = 0; j < jlen; j++) {\n // at this point charbox are either standard or full with pathInfo if there is a path.\n const charBox = this.__charBounds[i][j] as Required;\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (this.path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillStyle = currentColor;\n currentColor &&\n ctx.fillRect(\n -charBox.width / 2,\n (-heightOfLine / this.lineHeight) * (1 - this._fontSizeFraction),\n charBox.width,\n heightOfLine / this.lineHeight,\n );\n ctx.restore();\n } else if (currentColor !== lastColor) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = lastColor;\n lastColor &&\n ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight,\n );\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastColor = currentColor;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n }\n if (currentColor && !this.path) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentColor;\n ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight,\n );\n }\n lineTopOffset += heightOfLine;\n }\n ctx.fillStyle = originalFill;\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * measure and return the width of a single character.\n * possibly overridden to accommodate different measure logic or\n * to hook some external lib for character measurement\n * @private\n * @param {String} _char, char to be measured\n * @param {Object} charStyle style of char to be measured\n * @param {String} [previousChar] previous char\n * @param {Object} [prevCharStyle] style of previous char\n */\n _measureChar(\n _char: string,\n charStyle: CompleteTextStyleDeclaration,\n previousChar: string | undefined,\n prevCharStyle: CompleteTextStyleDeclaration | Record,\n ) {\n const fontCache = cache.getFontCache(charStyle),\n fontDeclaration = this._getFontDeclaration(charStyle),\n couple = previousChar + _char,\n stylesAreEqual =\n previousChar &&\n fontDeclaration === this._getFontDeclaration(prevCharStyle),\n fontMultiplier = charStyle.fontSize / this.CACHE_FONT_SIZE;\n let width: number | undefined,\n coupleWidth: number | undefined,\n previousWidth: number | undefined,\n kernedWidth: number | undefined;\n\n if (previousChar && fontCache[previousChar] !== undefined) {\n previousWidth = fontCache[previousChar];\n }\n if (fontCache[_char] !== undefined) {\n kernedWidth = width = fontCache[_char];\n }\n if (stylesAreEqual && fontCache[couple] !== undefined) {\n coupleWidth = fontCache[couple];\n kernedWidth = coupleWidth - previousWidth!;\n }\n if (\n width === undefined ||\n previousWidth === undefined ||\n coupleWidth === undefined\n ) {\n const ctx = getMeasuringContext()!;\n // send a TRUE to specify measuring font size CACHE_FONT_SIZE\n this._setTextStyles(ctx, charStyle, true);\n if (width === undefined) {\n kernedWidth = width = ctx.measureText(_char).width;\n fontCache[_char] = width;\n }\n if (previousWidth === undefined && stylesAreEqual && previousChar) {\n previousWidth = ctx.measureText(previousChar).width;\n fontCache[previousChar] = previousWidth;\n }\n if (stylesAreEqual && coupleWidth === undefined) {\n // we can measure the kerning couple and subtract the width of the previous character\n coupleWidth = ctx.measureText(couple).width;\n fontCache[couple] = coupleWidth;\n // safe to use the non-null since if undefined we defined it before.\n kernedWidth = coupleWidth - previousWidth!;\n }\n }\n return {\n width: width * fontMultiplier,\n kernedWidth: kernedWidth! * fontMultiplier,\n };\n }\n\n /**\n * Computes height of character at given position\n * @param {Number} line the line index number\n * @param {Number} _char the character index number\n * @return {Number} fontSize of the character\n */\n getHeightOfChar(line: number, _char: number): number {\n return this.getValueOfPropertyAt(line, _char, 'fontSize');\n }\n\n /**\n * measure a text line measuring all characters.\n * @param {Number} lineIndex line number\n */\n measureLine(lineIndex: number) {\n const lineInfo = this._measureLine(lineIndex);\n if (this.charSpacing !== 0) {\n lineInfo.width -= this._getWidthOfCharSpacing();\n }\n if (lineInfo.width < 0) {\n lineInfo.width = 0;\n }\n return lineInfo;\n }\n\n /**\n * measure every grapheme of a line, populating __charBounds\n * @param {Number} lineIndex\n * @return {Object} object.width total width of characters\n * @return {Object} object.numOfSpaces length of chars that match this._reSpacesAndTabs\n */\n _measureLine(lineIndex: number) {\n let width = 0,\n prevGrapheme: string | undefined,\n graphemeInfo: GraphemeBBox | undefined;\n\n const reverse = this.pathSide === RIGHT,\n path = this.path,\n line = this._textLines[lineIndex],\n llength = line.length,\n lineBounds = new Array(llength);\n\n this.__charBounds[lineIndex] = lineBounds;\n for (let i = 0; i < llength; i++) {\n const grapheme = line[i];\n graphemeInfo = this._getGraphemeBox(grapheme, lineIndex, i, prevGrapheme);\n lineBounds[i] = graphemeInfo;\n width += graphemeInfo.kernedWidth;\n prevGrapheme = grapheme;\n }\n // this latest bound box represent the last character of the line\n // to simplify cursor handling in interactive mode.\n lineBounds[llength] = {\n left: graphemeInfo ? graphemeInfo.left + graphemeInfo.width : 0,\n width: 0,\n kernedWidth: 0,\n height: this.fontSize,\n deltaY: 0,\n } as GraphemeBBox;\n if (path && path.segmentsInfo) {\n let positionInPath = 0;\n const totalPathLength =\n path.segmentsInfo[path.segmentsInfo.length - 1].length;\n switch (this.textAlign) {\n case LEFT:\n positionInPath = reverse ? totalPathLength - width : 0;\n break;\n case CENTER:\n positionInPath = (totalPathLength - width) / 2;\n break;\n case RIGHT:\n positionInPath = reverse ? 0 : totalPathLength - width;\n break;\n //todo - add support for justify\n }\n positionInPath += this.pathStartOffset * (reverse ? -1 : 1);\n for (\n let i = reverse ? llength - 1 : 0;\n reverse ? i >= 0 : i < llength;\n reverse ? i-- : i++\n ) {\n graphemeInfo = lineBounds[i];\n if (positionInPath > totalPathLength) {\n positionInPath %= totalPathLength;\n } else if (positionInPath < 0) {\n positionInPath += totalPathLength;\n }\n // it would probably much faster to send all the grapheme position for a line\n // and calculate path position/angle at once.\n this._setGraphemeOnPath(positionInPath, graphemeInfo);\n positionInPath += graphemeInfo.kernedWidth;\n }\n }\n return { width: width, numOfSpaces: 0 };\n }\n\n /**\n * Calculate the angle and the left,top position of the char that follow a path.\n * It appends it to graphemeInfo to be reused later at rendering\n * @private\n * @param {Number} positionInPath to be measured\n * @param {GraphemeBBox} graphemeInfo current grapheme box information\n * @param {Object} startingPoint position of the point\n */\n _setGraphemeOnPath(positionInPath: number, graphemeInfo: GraphemeBBox) {\n const centerPosition = positionInPath + graphemeInfo.kernedWidth / 2,\n path = this.path!;\n\n // we are at currentPositionOnPath. we want to know what point on the path is.\n const info = getPointOnPath(path.path, centerPosition, path.segmentsInfo)!;\n graphemeInfo.renderLeft = info.x - path.pathOffset.x;\n graphemeInfo.renderTop = info.y - path.pathOffset.y;\n graphemeInfo.angle = info.angle + (this.pathSide === RIGHT ? Math.PI : 0);\n }\n\n /**\n *\n * @param {String} grapheme to be measured\n * @param {Number} lineIndex index of the line where the char is\n * @param {Number} charIndex position in the line\n * @param {String} [prevGrapheme] character preceding the one to be measured\n * @returns {GraphemeBBox} grapheme bbox\n */\n _getGraphemeBox(\n grapheme: string,\n lineIndex: number,\n charIndex: number,\n prevGrapheme?: string,\n skipLeft?: boolean,\n ): GraphemeBBox {\n const style = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n prevStyle = prevGrapheme\n ? this.getCompleteStyleDeclaration(lineIndex, charIndex - 1)\n : {},\n info = this._measureChar(grapheme, style, prevGrapheme, prevStyle);\n let kernedWidth = info.kernedWidth,\n width = info.width,\n charSpacing;\n\n if (this.charSpacing !== 0) {\n charSpacing = this._getWidthOfCharSpacing();\n width += charSpacing;\n kernedWidth += charSpacing;\n }\n\n const box: GraphemeBBox = {\n width,\n left: 0,\n height: style.fontSize,\n kernedWidth,\n deltaY: style.deltaY,\n };\n if (charIndex > 0 && !skipLeft) {\n const previousBox = this.__charBounds[lineIndex][charIndex - 1];\n box.left =\n previousBox.left + previousBox.width + info.kernedWidth - info.width;\n }\n return box;\n }\n\n /**\n * Calculate height of line at 'lineIndex'\n * @param {Number} lineIndex index of line to calculate\n * @return {Number}\n */\n getHeightOfLine(lineIndex: number): number {\n if (this.__lineHeights[lineIndex]) {\n return this.__lineHeights[lineIndex];\n }\n\n // char 0 is measured before the line cycle because it needs to char\n // emptylines\n let maxHeight = this.getHeightOfChar(lineIndex, 0);\n for (let i = 1, len = this._textLines[lineIndex].length; i < len; i++) {\n maxHeight = Math.max(this.getHeightOfChar(lineIndex, i), maxHeight);\n }\n\n return (this.__lineHeights[lineIndex] =\n maxHeight * this.lineHeight * this._fontSizeMult);\n }\n\n /**\n * Calculate text box height\n */\n calcTextHeight() {\n let lineHeight,\n height = 0;\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n lineHeight = this.getHeightOfLine(i);\n height += i === len - 1 ? lineHeight / this.lineHeight : lineHeight;\n }\n return height;\n }\n\n /**\n * @private\n * @return {Number} Left offset\n */\n _getLeftOffset(): number {\n return this.direction === 'ltr' ? -this.width / 2 : this.width / 2;\n }\n\n /**\n * @private\n * @return {Number} Top offset\n */\n _getTopOffset(): number {\n return -this.height / 2;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n */\n _renderTextCommon(\n ctx: CanvasRenderingContext2D,\n method: 'fillText' | 'strokeText',\n ) {\n ctx.save();\n let lineHeights = 0;\n const left = this._getLeftOffset(),\n top = this._getTopOffset();\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i),\n maxHeight = heightOfLine / this.lineHeight,\n leftOffset = this._getLineLeftOffset(i);\n this._renderTextLine(\n method,\n ctx,\n this._textLines[i],\n left + leftOffset,\n top + lineHeights + maxHeight,\n i,\n );\n lineHeights += heightOfLine;\n }\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextFill(ctx: CanvasRenderingContext2D) {\n if (!this.fill && !this.styleHas(FILL)) {\n return;\n }\n\n this._renderTextCommon(ctx, 'fillText');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextStroke(ctx: CanvasRenderingContext2D) {\n if ((!this.stroke || this.strokeWidth === 0) && this.isEmptyStyles()) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n this._setLineDash(ctx, this.strokeDashArray);\n ctx.beginPath();\n this._renderTextCommon(ctx, 'strokeText');\n ctx.closePath();\n ctx.restore();\n }\n\n /**\n * @private\n * @param {String} method fillText or strokeText.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Array} line Content of the line, splitted in an array by grapheme\n * @param {Number} left\n * @param {Number} top\n * @param {Number} lineIndex\n */\n _renderChars(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n line: Array,\n left: number,\n top: number,\n lineIndex: number,\n ) {\n const lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.includes(JUSTIFY),\n path = this.path,\n shortCut =\n !isJustify &&\n this.charSpacing === 0 &&\n this.isEmptyStyles(lineIndex) &&\n !path,\n isLtr = this.direction === 'ltr',\n sign = this.direction === 'ltr' ? 1 : -1,\n // this was changed in the PR #7674\n // currentDirection = ctx.canvas.getAttribute('dir');\n currentDirection = ctx.direction;\n\n let actualStyle,\n nextStyle,\n charsToRender = '',\n charBox,\n boxWidth = 0,\n timeToRender,\n drawingLeft;\n\n ctx.save();\n if (currentDirection !== this.direction) {\n ctx.canvas.setAttribute('dir', isLtr ? 'ltr' : 'rtl');\n ctx.direction = isLtr ? 'ltr' : 'rtl';\n ctx.textAlign = isLtr ? LEFT : RIGHT;\n }\n top -= (lineHeight * this._fontSizeFraction) / this.lineHeight;\n if (shortCut) {\n // render all the line in one pass without checking\n // drawingLeft = isLtr ? left : left - this.getLineWidth(lineIndex);\n this._renderChar(method, ctx, lineIndex, 0, line.join(''), left, top);\n ctx.restore();\n return;\n }\n for (let i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing || path;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i] as Required;\n if (boxWidth === 0) {\n left += sign * (charBox.kernedWidth - charBox.width);\n boxWidth += charBox.width;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle =\n actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = hasStyleChanged(actualStyle, nextStyle, false);\n }\n if (timeToRender) {\n if (path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n this._renderChar(\n method,\n ctx,\n lineIndex,\n i,\n charsToRender,\n -boxWidth / 2,\n 0,\n );\n ctx.restore();\n } else {\n drawingLeft = left;\n this._renderChar(\n method,\n ctx,\n lineIndex,\n i,\n charsToRender,\n drawingLeft,\n top,\n );\n }\n charsToRender = '';\n actualStyle = nextStyle;\n left += sign * boxWidth;\n boxWidth = 0;\n }\n }\n ctx.restore();\n }\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {TFiller} filler a fabric gradient instance\n * @return {CanvasPattern} a pattern to use as fill/stroke style\n */\n _applyPatternGradientTransformText(filler: TFiller) {\n const pCanvas = createCanvasElement(),\n // TODO: verify compatibility with strokeUniform\n width = this.width + this.strokeWidth,\n height = this.height + this.strokeWidth,\n pCtx = pCanvas.getContext('2d')!;\n pCanvas.width = width;\n pCanvas.height = height;\n pCtx.beginPath();\n pCtx.moveTo(0, 0);\n pCtx.lineTo(width, 0);\n pCtx.lineTo(width, height);\n pCtx.lineTo(0, height);\n pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.fillStyle = filler.toLive(pCtx)!;\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fill();\n return pCtx.createPattern(pCanvas, 'no-repeat')!;\n }\n\n handleFiller(\n ctx: CanvasRenderingContext2D,\n property: `${T}Style`,\n filler: TFiller | string,\n ): { offsetX: number; offsetY: number } {\n let offsetX: number, offsetY: number;\n if (isFiller(filler)) {\n if (\n (filler as Gradient<'linear'>).gradientUnits === 'percentage' ||\n (filler as Gradient<'linear'>).gradientTransform ||\n (filler as Pattern).patternTransform\n ) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n offsetX = -this.width / 2;\n offsetY = -this.height / 2;\n ctx.translate(offsetX, offsetY);\n ctx[property] = this._applyPatternGradientTransformText(filler);\n return { offsetX, offsetY };\n } else {\n // is a simple gradient or pattern\n ctx[property] = filler.toLive(ctx)!;\n return this._applyPatternGradientTransform(ctx, filler);\n }\n } else {\n // is a color\n ctx[property] = filler;\n }\n return { offsetX: 0, offsetY: 0 };\n }\n\n /**\n * This function prepare the canvas for a stroke style, and stroke and strokeWidth\n * need to be sent in as defined\n * @param {CanvasRenderingContext2D} ctx\n * @param {CompleteTextStyleDeclaration} style with stroke and strokeWidth defined\n * @returns\n */\n _setStrokeStyles(\n ctx: CanvasRenderingContext2D,\n {\n stroke,\n strokeWidth,\n }: Pick,\n ) {\n ctx.lineWidth = strokeWidth;\n ctx.lineCap = this.strokeLineCap;\n ctx.lineDashOffset = this.strokeDashOffset;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.miterLimit = this.strokeMiterLimit;\n return this.handleFiller(ctx, 'strokeStyle', stroke!);\n }\n\n /**\n * This function prepare the canvas for a ill style, and fill\n * need to be sent in as defined\n * @param {CanvasRenderingContext2D} ctx\n * @param {CompleteTextStyleDeclaration} style with ill defined\n * @returns\n */\n _setFillStyles(ctx: CanvasRenderingContext2D, { fill }: Pick) {\n return this.handleFiller(ctx, 'fillStyle', fill!);\n }\n\n /**\n * @private\n * @param {String} method\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {String} _char\n * @param {Number} left Left coordinate\n * @param {Number} top Top coordinate\n * @param {Number} lineHeight Height of the line\n */\n _renderChar(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n lineIndex: number,\n charIndex: number,\n _char: string,\n left: number,\n top: number,\n ) {\n const decl = this._getStyleDeclaration(lineIndex, charIndex),\n fullDecl = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n shouldFill = method === 'fillText' && fullDecl.fill,\n shouldStroke =\n method === 'strokeText' && fullDecl.stroke && fullDecl.strokeWidth;\n\n if (!shouldStroke && !shouldFill) {\n return;\n }\n ctx.save();\n\n ctx.font = this._getFontDeclaration(fullDecl);\n\n if (decl.textBackgroundColor) {\n this._removeShadow(ctx);\n }\n if (decl.deltaY) {\n top += decl.deltaY;\n }\n\n if (shouldFill) {\n const fillOffsets = this._setFillStyles(ctx, fullDecl);\n ctx.fillText(\n _char,\n left - fillOffsets.offsetX,\n top - fillOffsets.offsetY,\n );\n }\n\n if (shouldStroke) {\n const strokeOffsets = this._setStrokeStyles(ctx, fullDecl);\n ctx.strokeText(\n _char,\n left - strokeOffsets.offsetX,\n top - strokeOffsets.offsetY,\n );\n }\n\n ctx.restore();\n }\n\n /**\n * Turns the character into a 'superior figure' (i.e. 'superscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n */\n setSuperscript(start: number, end: number) {\n this._setScript(start, end, this.superscript);\n }\n\n /**\n * Turns the character into an 'inferior figure' (i.e. 'subscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n */\n setSubscript(start: number, end: number) {\n this._setScript(start, end, this.subscript);\n }\n\n /**\n * Applies 'schema' at given position\n * @private\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @param {Number} schema\n */\n protected _setScript(\n start: number,\n end: number,\n schema: {\n size: number;\n baseline: number;\n },\n ) {\n const loc = this.get2DCursorLocation(start, true),\n fontSize = this.getValueOfPropertyAt(\n loc.lineIndex,\n loc.charIndex,\n 'fontSize',\n ),\n dy = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'deltaY'),\n style = {\n fontSize: fontSize * schema.size,\n deltaY: dy + fontSize * schema.baseline,\n };\n this.setSelectionStyles(style, start, end);\n }\n\n /**\n * @private\n * @param {Number} lineIndex index text line\n * @return {Number} Line left offset\n */\n _getLineLeftOffset(lineIndex: number): number {\n const lineWidth = this.getLineWidth(lineIndex),\n lineDiff = this.width - lineWidth,\n textAlign = this.textAlign,\n direction = this.direction,\n isEndOfWrapping = this.isEndOfWrapping(lineIndex);\n let leftOffset = 0;\n if (\n textAlign === JUSTIFY ||\n (textAlign === JUSTIFY_CENTER && !isEndOfWrapping) ||\n (textAlign === JUSTIFY_RIGHT && !isEndOfWrapping) ||\n (textAlign === JUSTIFY_LEFT && !isEndOfWrapping)\n ) {\n return 0;\n }\n if (textAlign === CENTER) {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === RIGHT) {\n leftOffset = lineDiff;\n }\n if (textAlign === JUSTIFY_CENTER) {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === JUSTIFY_RIGHT) {\n leftOffset = lineDiff;\n }\n if (direction === 'rtl') {\n if (\n textAlign === RIGHT ||\n textAlign === JUSTIFY ||\n textAlign === JUSTIFY_RIGHT\n ) {\n leftOffset = 0;\n } else if (textAlign === LEFT || textAlign === JUSTIFY_LEFT) {\n leftOffset = -lineDiff;\n } else if (textAlign === CENTER || textAlign === JUSTIFY_CENTER) {\n leftOffset = -lineDiff / 2;\n }\n }\n return leftOffset;\n }\n\n /**\n * @private\n */\n _clearCache() {\n this._forceClearCache = false;\n this.__lineWidths = [];\n this.__lineHeights = [];\n this.__charBounds = [];\n }\n\n /**\n * Measure a single line given its index. Used to calculate the initial\n * text bounding box. The values are calculated and stored in __lineWidths cache.\n * @private\n * @param {Number} lineIndex line number\n * @return {Number} Line width\n */\n getLineWidth(lineIndex: number): number {\n if (this.__lineWidths[lineIndex] !== undefined) {\n return this.__lineWidths[lineIndex];\n }\n\n const { width } = this.measureLine(lineIndex);\n this.__lineWidths[lineIndex] = width;\n return width;\n }\n\n _getWidthOfCharSpacing() {\n if (this.charSpacing !== 0) {\n return (this.fontSize * this.charSpacing) / 1000;\n }\n return 0;\n }\n\n /**\n * Retrieves the value of property at given character position\n * @param {Number} lineIndex the line number\n * @param {Number} charIndex the character number\n * @param {String} property the property name\n * @returns the value of 'property'\n */\n getValueOfPropertyAt(\n lineIndex: number,\n charIndex: number,\n property: T,\n ): this[T] {\n const charStyle = this._getStyleDeclaration(lineIndex, charIndex);\n return (charStyle[property] ?? this[property]) as this[T];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextDecoration(\n ctx: CanvasRenderingContext2D,\n type: 'underline' | 'linethrough' | 'overline',\n ) {\n if (!this[type] && !this.styleHas(type)) {\n return;\n }\n let topOffset = this._getTopOffset();\n const leftOffset = this._getLeftOffset(),\n path = this.path,\n charSpacing = this._getWidthOfCharSpacing(),\n offsetY = this.offsets[type];\n\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i);\n if (!this[type] && !this.styleHas(type, i)) {\n topOffset += heightOfLine;\n continue;\n }\n const line = this._textLines[i];\n const maxHeight = heightOfLine / this.lineHeight;\n const lineLeftOffset = this._getLineLeftOffset(i);\n let boxStart = 0;\n let boxWidth = 0;\n let lastDecoration = this.getValueOfPropertyAt(i, 0, type);\n let lastFill = this.getValueOfPropertyAt(i, 0, FILL);\n let currentDecoration;\n let currentFill;\n const top = topOffset + maxHeight * (1 - this._fontSizeFraction);\n let size = this.getHeightOfChar(i, 0);\n let dy = this.getValueOfPropertyAt(i, 0, 'deltaY');\n for (let j = 0, jlen = line.length; j < jlen; j++) {\n const charBox = this.__charBounds[i][j] as Required;\n currentDecoration = this.getValueOfPropertyAt(i, j, type);\n currentFill = this.getValueOfPropertyAt(i, j, FILL);\n const currentSize = this.getHeightOfChar(i, j);\n const currentDy = this.getValueOfPropertyAt(i, j, 'deltaY');\n if (path && currentDecoration && currentFill) {\n ctx.save();\n // bug? verify lastFill is a valid fill here.\n ctx.fillStyle = lastFill as string;\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillRect(\n -charBox.kernedWidth / 2,\n offsetY * currentSize + currentDy,\n charBox.kernedWidth,\n this.fontSize / 15,\n );\n ctx.restore();\n } else if (\n (currentDecoration !== lastDecoration ||\n currentFill !== lastFill ||\n currentSize !== size ||\n currentDy !== dy) &&\n boxWidth > 0\n ) {\n let drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n if (lastDecoration && lastFill) {\n // bug? verify lastFill is a valid fill here.\n ctx.fillStyle = lastFill as string;\n ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth,\n this.fontSize / 15,\n );\n }\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastDecoration = currentDecoration;\n lastFill = currentFill;\n size = currentSize;\n dy = currentDy;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n }\n let drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentFill as string;\n currentDecoration &&\n currentFill &&\n ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth - charSpacing,\n this.fontSize / 15,\n );\n topOffset += heightOfLine;\n }\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * return font declaration string for canvas context\n * @param {Object} [styleObject] object\n * @returns {String} font declaration formatted for canvas context.\n */\n _getFontDeclaration(\n {\n fontFamily = this.fontFamily,\n fontStyle = this.fontStyle,\n fontWeight = this.fontWeight,\n fontSize = this.fontSize,\n }: Partial<\n Pick<\n TextStyleDeclaration,\n 'fontFamily' | 'fontStyle' | 'fontWeight' | 'fontSize'\n >\n > = {},\n forMeasuring?: boolean,\n ): string {\n const parsedFontFamily =\n fontFamily.includes(\"'\") ||\n fontFamily.includes('\"') ||\n fontFamily.includes(',') ||\n FabricText.genericFonts.includes(fontFamily.toLowerCase())\n ? fontFamily\n : `\"${fontFamily}\"`;\n return [\n fontStyle,\n fontWeight,\n `${forMeasuring ? this.CACHE_FONT_SIZE : fontSize}px`,\n parsedFontFamily,\n ].join(' ');\n }\n\n /**\n * Renders text instance on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n if (!this.visible) {\n return;\n }\n if (\n this.canvas &&\n this.canvas.skipOffscreen &&\n !this.group &&\n !this.isOnScreen()\n ) {\n return;\n }\n if (this._forceClearCache) {\n this.initDimensions();\n }\n super.render(ctx);\n }\n\n /**\n * Override this method to customize grapheme splitting\n * @todo the util `graphemeSplit` needs to be injectable in some way.\n * is more comfortable to inject the correct util rather than having to override text\n * in the middle of the prototype chain\n * @param {string} value\n * @returns {string[]} array of graphemes\n */\n graphemeSplit(value: string): string[] {\n return graphemeSplit(value);\n }\n\n /**\n * Returns the text as an array of lines.\n * @param {String} text text to split\n * @returns Lines in the text\n */\n _splitTextIntoLines(text: string): TextLinesInfo {\n const lines = text.split(this._reNewline),\n newLines = new Array(lines.length),\n newLine = ['\\n'];\n let newText: string[] = [];\n for (let i = 0; i < lines.length; i++) {\n newLines[i] = this.graphemeSplit(lines[i]);\n newText = newText.concat(newLines[i], newLine);\n }\n newText.pop();\n return {\n _unwrappedLines: newLines,\n lines: lines,\n graphemeText: newText,\n graphemeLines: newLines,\n };\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject([...additionalProps, ...propertiesToInclude] as K[]),\n styles: stylesToArray(this.styles, this.text),\n ...(this.path ? { path: this.path.toObject() } : {}),\n };\n }\n\n set(key: string | any, value?: any) {\n const { textLayoutProperties } = this.constructor as typeof FabricText;\n super.set(key, value);\n let needsDims = false;\n let isAddingPath = false;\n if (typeof key === 'object') {\n for (const _key in key) {\n if (_key === 'path') {\n this.setPathInfo();\n }\n needsDims = needsDims || textLayoutProperties.includes(_key);\n isAddingPath = isAddingPath || _key === 'path';\n }\n } else {\n needsDims = textLayoutProperties.includes(key);\n isAddingPath = key === 'path';\n }\n if (isAddingPath) {\n this.setPathInfo();\n }\n if (needsDims && this.initialized) {\n this.initDimensions();\n this.setCoords();\n }\n return this;\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity\n */\n complexity(): number {\n return 1;\n }\n\n /**\n * List of generic font families\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/font-family#generic-name\n */\n static genericFonts = [\n 'serif',\n 'sans-serif',\n 'monospace',\n 'cursive',\n 'fantasy',\n 'system-ui',\n 'ui-serif',\n 'ui-sans-serif',\n 'ui-monospace',\n 'ui-rounded',\n 'math',\n 'emoji',\n 'fangsong',\n ];\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link FabricText.fromElement})\n * @static\n * @memberOf Text\n * @see: http://www.w3.org/TR/SVG/text.html#TextElement\n */\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(\n 'x',\n 'y',\n 'dx',\n 'dy',\n 'font-family',\n 'font-style',\n 'font-weight',\n 'font-size',\n 'letter-spacing',\n 'text-decoration',\n 'text-anchor',\n );\n\n /**\n * Returns FabricText instance from an SVG element (not yet implemented)\n * @static\n * @memberOf Text\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const parsedAttributes = parseAttributes(\n element,\n FabricText.ATTRIBUTE_NAMES,\n cssRules,\n );\n\n const {\n textAnchor = LEFT as typeof LEFT | typeof CENTER | typeof RIGHT,\n textDecoration = '',\n dx = 0,\n dy = 0,\n top = 0,\n left = 0,\n fontSize = DEFAULT_SVG_FONT_SIZE,\n strokeWidth = 1,\n ...restOfOptions\n } = { ...options, ...parsedAttributes };\n\n const textContent = (element.textContent || '')\n .replace(/^\\s+|\\s+$|\\n+/g, '')\n .replace(/\\s+/g, ' ');\n\n // this code here is probably the usual issue for SVG center find\n // this can later looked at again and probably removed.\n\n const text = new this(textContent, {\n left: left + dx,\n top: top + dy,\n underline: textDecoration.includes('underline'),\n overline: textDecoration.includes('overline'),\n linethrough: textDecoration.includes('line-through'),\n // we initialize this as 0\n strokeWidth: 0,\n fontSize,\n ...restOfOptions,\n }),\n textHeightScaleFactor = text.getScaledHeight() / text.height,\n lineHeightDiff =\n (text.height + text.strokeWidth) * text.lineHeight - text.height,\n scaledDiff = lineHeightDiff * textHeightScaleFactor,\n textHeight = text.getScaledHeight() + scaledDiff;\n\n let offX = 0;\n /*\n Adjust positioning:\n x/y attributes in SVG correspond to the bottom-left corner of text bounding box\n fabric output by default at top, left.\n */\n if (textAnchor === CENTER) {\n offX = text.getScaledWidth() / 2;\n }\n if (textAnchor === RIGHT) {\n offX = text.getScaledWidth();\n }\n text.set({\n left: text.left - offX,\n top:\n text.top -\n (textHeight - text.fontSize * (0.07 + text._fontSizeFraction)) /\n text.lineHeight,\n strokeWidth,\n });\n return text;\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns FabricText instance from an object representation\n * @param {Object} object plain js Object to create an instance from\n * @returns {Promise}\n */\n static fromObject<\n T extends TOptions,\n S extends FabricText,\n >(object: T) {\n return this._fromObject(\n {\n ...object,\n styles: stylesFromArray(object.styles || {}, object.text),\n },\n {\n extraParam: 'text',\n },\n );\n }\n}\n\napplyMixins(FabricText, [TextSVGExportMixin]);\nclassRegistry.setClass(FabricText);\nclassRegistry.setSVGClass(FabricText);\n","import type {\n DragEventData,\n DropEventData,\n TPointerEvent,\n} from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport type { IText } from './IText';\nimport { setStyle } from '../../util/dom_style';\nimport { cloneStyles } from '../../util/internals/cloneStyles';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { CHANGED, NONE } from '../../constants';\n\n/**\n * #### Dragging IText/Textbox Lifecycle\n * - {@link start} is called from `mousedown` {@link IText#_mouseDownHandler} and determines if dragging should start by testing {@link isPointerOverSelection}\n * - if true `mousedown` {@link IText#_mouseDownHandler} is blocked to keep selection\n * - if the pointer moves, canvas fires numerous mousemove {@link Canvas#_onMouseMove} that we make sure **aren't** prevented ({@link IText#shouldStartDragging}) in order for the window to start a drag session\n * - once/if the session starts canvas calls {@link onDragStart} on the active object to determine if dragging should occur\n * - canvas fires relevant drag events that are handled by the handlers defined in this scope\n * - {@link end} is called from `mouseup` {@link IText#mouseUpHandler}, blocking IText default click behavior\n * - in case the drag session didn't occur, {@link end} handles a click, since logic to do so was blocked during `mousedown`\n */\nexport class DraggableTextDelegate {\n readonly target: IText;\n private __mouseDownInPlace = false;\n private __dragStartFired = false;\n private __isDraggingOver = false;\n private __dragStartSelection?: {\n selectionStart: number;\n selectionEnd: number;\n };\n private __dragImageDisposer?: VoidFunction;\n private _dispose?: () => void;\n\n constructor(target: IText) {\n this.target = target;\n const disposers = [\n this.target.on('dragenter', this.dragEnterHandler.bind(this)),\n this.target.on('dragover', this.dragOverHandler.bind(this)),\n this.target.on('dragleave', this.dragLeaveHandler.bind(this)),\n this.target.on('dragend', this.dragEndHandler.bind(this)),\n this.target.on('drop', this.dropHandler.bind(this)),\n ];\n this._dispose = () => {\n disposers.forEach((d) => d());\n this._dispose = undefined;\n };\n }\n\n isPointerOverSelection(e: TPointerEvent) {\n const target = this.target;\n const newSelection = target.getSelectionStartFromPointer(e);\n return (\n target.isEditing &&\n newSelection >= target.selectionStart &&\n newSelection <= target.selectionEnd &&\n target.selectionStart < target.selectionEnd\n );\n }\n\n /**\n * @public override this method to disable dragging and default to mousedown logic\n */\n start(e: TPointerEvent) {\n return (this.__mouseDownInPlace = this.isPointerOverSelection(e));\n }\n\n /**\n * @public override this method to disable dragging without discarding selection\n */\n isActive() {\n return this.__mouseDownInPlace;\n }\n\n /**\n * Ends interaction and sets cursor in case of a click\n * @returns true if was active\n */\n end(e: TPointerEvent) {\n const active = this.isActive();\n if (active && !this.__dragStartFired) {\n // mousedown has been blocked since `active` is true => cursor has not been set.\n // `__dragStartFired` is false => dragging didn't occur, pointer didn't move and is over selection.\n // meaning this is actually a click, `active` is a false positive.\n this.target.setCursorByClick(e);\n this.target.initDelayedCursor(true);\n }\n this.__mouseDownInPlace = false;\n this.__dragStartFired = false;\n this.__isDraggingOver = false;\n return active;\n }\n\n getDragStartSelection() {\n return this.__dragStartSelection;\n }\n\n /**\n * Override to customize the drag image\n * https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/setDragImage\n */\n setDragImage(\n e: DragEvent,\n {\n selectionStart,\n selectionEnd,\n }: {\n selectionStart: number;\n selectionEnd: number;\n },\n ) {\n const target = this.target;\n const canvas = target.canvas!;\n const flipFactor = new Point(target.flipX ? -1 : 1, target.flipY ? -1 : 1);\n const boundaries = target._getCursorBoundaries(selectionStart);\n const selectionPosition = new Point(\n boundaries.left + boundaries.leftOffset,\n boundaries.top + boundaries.topOffset,\n ).multiply(flipFactor);\n const pos = selectionPosition.transform(target.calcTransformMatrix());\n const pointer = canvas.getScenePoint(e);\n const diff = pointer.subtract(pos);\n const retinaScaling = target.getCanvasRetinaScaling();\n const bbox = target.getBoundingRect();\n const correction = pos.subtract(new Point(bbox.left, bbox.top));\n const vpt = canvas.viewportTransform;\n const offset = correction.add(diff).transform(vpt, true);\n // prepare instance for drag image snapshot by making all non selected text invisible\n const bgc = target.backgroundColor;\n const styles = cloneStyles(target.styles);\n target.backgroundColor = '';\n const styleOverride = {\n stroke: 'transparent',\n fill: 'transparent',\n textBackgroundColor: 'transparent',\n };\n target.setSelectionStyles(styleOverride, 0, selectionStart);\n target.setSelectionStyles(styleOverride, selectionEnd, target.text.length);\n target.dirty = true;\n const dragImage = target.toCanvasElement({\n enableRetinaScaling: canvas.enableRetinaScaling,\n viewportTransform: true,\n });\n // restore values\n target.backgroundColor = bgc;\n target.styles = styles;\n target.dirty = true;\n // position drag image offscreen\n setStyle(dragImage, {\n position: 'fixed',\n left: `${-dragImage.width}px`,\n border: NONE,\n width: `${dragImage.width / retinaScaling}px`,\n height: `${dragImage.height / retinaScaling}px`,\n });\n this.__dragImageDisposer && this.__dragImageDisposer();\n this.__dragImageDisposer = () => {\n dragImage.remove();\n };\n getDocumentFromElement(\n (e.target || this.target.hiddenTextarea)! as HTMLElement,\n ).body.appendChild(dragImage);\n e.dataTransfer?.setDragImage(dragImage, offset.x, offset.y);\n }\n\n /**\n * @returns {boolean} determines whether {@link target} should/shouldn't become a drag source\n */\n onDragStart(e: DragEvent): boolean {\n this.__dragStartFired = true;\n const target = this.target;\n const active = this.isActive();\n if (active && e.dataTransfer) {\n const selection = (this.__dragStartSelection = {\n selectionStart: target.selectionStart,\n selectionEnd: target.selectionEnd,\n });\n const value = target._text\n .slice(selection.selectionStart, selection.selectionEnd)\n .join('');\n const data = { text: target.text, value, ...selection };\n e.dataTransfer.setData('text/plain', value);\n e.dataTransfer.setData(\n 'application/fabric',\n JSON.stringify({\n value: value,\n styles: target.getSelectionStyles(\n selection.selectionStart,\n selection.selectionEnd,\n true,\n ),\n }),\n );\n e.dataTransfer.effectAllowed = 'copyMove';\n this.setDragImage(e, data);\n }\n target.abortCursorAnimation();\n return active;\n }\n\n /**\n * use {@link targetCanDrop} to respect overriding\n * @returns {boolean} determines whether {@link target} should/shouldn't become a drop target\n */\n canDrop(e: DragEvent): boolean {\n if (\n this.target.editable &&\n !this.target.getActiveControl() &&\n !e.defaultPrevented\n ) {\n if (this.isActive() && this.__dragStartSelection) {\n // drag source trying to drop over itself\n // allow dropping only outside of drag start selection\n const index = this.target.getSelectionStartFromPointer(e);\n const dragStartSelection = this.__dragStartSelection;\n return (\n index < dragStartSelection.selectionStart ||\n index > dragStartSelection.selectionEnd\n );\n }\n return true;\n }\n return false;\n }\n\n /**\n * in order to respect overriding {@link IText#canDrop} we call that instead of calling {@link canDrop} directly\n */\n protected targetCanDrop(e: DragEvent) {\n return this.target.canDrop(e);\n }\n\n dragEnterHandler({ e }: DragEventData) {\n const canDrop = this.targetCanDrop(e);\n if (!this.__isDraggingOver && canDrop) {\n this.__isDraggingOver = true;\n }\n }\n\n dragOverHandler(ev: DragEventData) {\n const { e } = ev;\n const canDrop = this.targetCanDrop(e);\n if (!this.__isDraggingOver && canDrop) {\n this.__isDraggingOver = true;\n } else if (this.__isDraggingOver && !canDrop) {\n // drop state has changed\n this.__isDraggingOver = false;\n }\n if (this.__isDraggingOver) {\n // can be dropped, inform browser\n e.preventDefault();\n // inform event subscribers\n ev.canDrop = true;\n ev.dropTarget = this.target;\n }\n }\n\n dragLeaveHandler() {\n if (this.__isDraggingOver || this.isActive()) {\n this.__isDraggingOver = false;\n }\n }\n\n /**\n * Override the `text/plain | application/fabric` types of {@link DragEvent#dataTransfer}\n * in order to change the drop value or to customize styling respectively, by listening to the `drop:before` event\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#performing_a_drop\n */\n dropHandler(ev: DropEventData) {\n const { e } = ev;\n const didDrop = e.defaultPrevented;\n this.__isDraggingOver = false;\n // inform browser that the drop has been accepted\n e.preventDefault();\n let insert = e.dataTransfer?.getData('text/plain');\n if (insert && !didDrop) {\n const target = this.target;\n const canvas = target.canvas!;\n let insertAt = target.getSelectionStartFromPointer(e);\n const { styles } = (\n e.dataTransfer!.types.includes('application/fabric')\n ? JSON.parse(e.dataTransfer!.getData('application/fabric'))\n : {}\n ) as { styles: TextStyleDeclaration[] };\n const trailing = insert[Math.max(0, insert.length - 1)];\n const selectionStartOffset = 0;\n // drag and drop in same instance\n if (this.__dragStartSelection) {\n const selectionStart = this.__dragStartSelection.selectionStart;\n const selectionEnd = this.__dragStartSelection.selectionEnd;\n if (insertAt > selectionStart && insertAt <= selectionEnd) {\n insertAt = selectionStart;\n } else if (insertAt > selectionEnd) {\n insertAt -= selectionEnd - selectionStart;\n }\n target.removeChars(selectionStart, selectionEnd);\n // prevent `dragend` from handling event\n delete this.__dragStartSelection;\n }\n // remove redundant line break\n if (\n target._reNewline.test(trailing) &&\n (target._reNewline.test(target._text[insertAt]) ||\n insertAt === target._text.length)\n ) {\n insert = insert.trimEnd();\n }\n // inform subscribers\n ev.didDrop = true;\n ev.dropTarget = target;\n // finalize\n target.insertChars(insert, styles, insertAt);\n // can this part be moved in an outside event? andrea to check.\n canvas.setActiveObject(target);\n target.enterEditing(e);\n target.selectionStart = Math.min(\n insertAt + selectionStartOffset,\n target._text.length,\n );\n target.selectionEnd = Math.min(\n target.selectionStart + insert.length,\n target._text.length,\n );\n target.hiddenTextarea!.value = target.text;\n target._updateTextarea();\n target.hiddenTextarea!.focus();\n target.fire(CHANGED, {\n index: insertAt + selectionStartOffset,\n action: 'drop',\n });\n canvas.fire('text:changed', { target });\n canvas.contextTopDirty = true;\n canvas.requestRenderAll();\n }\n }\n\n /**\n * fired only on the drag source after drop (if occurred)\n * handle changes to the drag source in case of a drop on another object or a cancellation\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#finishing_a_drag\n */\n dragEndHandler({ e }: DragEventData) {\n if (this.isActive() && this.__dragStartFired) {\n // once the drop event finishes we check if we need to change the drag source\n // if the drag source received the drop we bail out since the drop handler has already handled logic\n if (this.__dragStartSelection) {\n const target = this.target;\n const canvas = this.target.canvas!;\n const { selectionStart, selectionEnd } = this.__dragStartSelection;\n const dropEffect = e.dataTransfer?.dropEffect || NONE;\n if (dropEffect === NONE) {\n // pointer is back over selection\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n target._updateTextarea();\n target.hiddenTextarea!.focus();\n } else {\n target.clearContextTop();\n if (dropEffect === 'move') {\n target.removeChars(selectionStart, selectionEnd);\n target.selectionStart = target.selectionEnd = selectionStart;\n target.hiddenTextarea &&\n (target.hiddenTextarea.value = target.text);\n target._updateTextarea();\n target.fire(CHANGED, {\n index: selectionStart,\n action: 'dragend',\n });\n canvas.fire('text:changed', { target });\n canvas.requestRenderAll();\n }\n target.exitEditing();\n }\n }\n }\n\n this.__dragImageDisposer && this.__dragImageDisposer();\n delete this.__dragImageDisposer;\n delete this.__dragStartSelection;\n this.__isDraggingOver = false;\n }\n\n dispose() {\n this._dispose && this._dispose();\n }\n}\n","import type {\n ObjectEvents,\n TPointerEvent,\n TPointerEventInfo,\n} from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport type { FabricObject } from '../Object/FabricObject';\nimport { FabricText } from '../Text/Text';\nimport { animate } from '../../util/animation/animate';\nimport type { TOnAnimationChangeCallback } from '../../util/animation/types';\nimport type { ValueAnimation } from '../../util/animation/ValueAnimation';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\nimport type { SerializedTextProps, TextProps } from '../Text/Text';\nimport type { TOptions } from '../../typedefs';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { LEFT, MODIFIED, RIGHT, reNewline } from '../../constants';\nimport type { IText } from './IText';\n\n/**\n * extend this regex to support non english languages\n *\n * - ` ` Matches a SPACE character (char code 32).\n * - `\\n` Matches a LINE FEED character (char code 10).\n * - `\\.` Matches a \".\" character (char code 46).\n * - `,` Matches a \",\" character (char code 44).\n * - `;` Matches a \";\" character (char code 59).\n * - `!` Matches a \"!\" character (char code 33).\n * - `\\?` Matches a \"?\" character (char code 63).\n * - `\\-` Matches a \"-\" character (char code 45).\n */\n// eslint-disable-next-line no-useless-escape\nconst reNonWord = /[ \\n\\.,;!\\?\\-]/;\n\nexport type ITextEvents = ObjectEvents & {\n 'selection:changed': never;\n changed: never | { index: number; action: string };\n tripleclick: TPointerEventInfo;\n 'editing:entered': never | { e: TPointerEvent };\n 'editing:exited': never;\n};\n\nexport abstract class ITextBehavior<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ITextEvents = ITextEvents,\n> extends FabricText {\n declare abstract isEditing: boolean;\n declare abstract cursorDelay: number;\n declare abstract selectionStart: number;\n declare abstract selectionEnd: number;\n declare abstract cursorDuration: number;\n declare abstract editable: boolean;\n declare abstract editingBorderColor: string;\n\n declare abstract compositionStart: number;\n declare abstract compositionEnd: number;\n\n declare abstract hiddenTextarea: HTMLTextAreaElement | null;\n\n /**\n * Helps determining when the text is in composition, so that the cursor\n * rendering is altered.\n */\n protected declare inCompositionMode: boolean;\n\n protected declare _reSpace: RegExp;\n private declare _currentTickState?: ValueAnimation;\n private declare _currentTickCompleteState?: ValueAnimation;\n protected _currentCursorOpacity = 1;\n private declare _textBeforeEdit: string;\n protected declare __selectionStartOnMouseDown: number;\n\n protected declare selected: boolean;\n protected declare cursorOffsetCache: { left?: number; top?: number };\n protected declare _savedProps?: {\n hasControls: boolean;\n borderColor: string;\n lockMovementX: boolean;\n lockMovementY: boolean;\n selectable: boolean;\n hoverCursor: CSSStyleDeclaration['cursor'] | null;\n defaultCursor?: CSSStyleDeclaration['cursor'];\n moveCursor?: CSSStyleDeclaration['cursor'];\n };\n protected declare _selectionDirection: 'left' | 'right' | null;\n\n abstract initHiddenTextarea(): void;\n abstract _fireSelectionChanged(): void;\n abstract renderCursorOrSelection(): void;\n abstract getSelectionStartFromPointer(e: TPointerEvent): number;\n abstract _getCursorBoundaries(\n index: number,\n skipCaching?: boolean,\n ): {\n left: number;\n top: number;\n leftOffset: number;\n topOffset: number;\n };\n\n /**\n * Initializes all the interactive behavior of IText\n */\n initBehavior() {\n this._tick = this._tick.bind(this);\n this._onTickComplete = this._onTickComplete.bind(this);\n this.updateSelectionOnMouseMove =\n this.updateSelectionOnMouseMove.bind(this);\n }\n\n onDeselect(options?: { e?: TPointerEvent; object?: FabricObject }) {\n this.isEditing && this.exitEditing();\n this.selected = false;\n return super.onDeselect(options);\n }\n\n /**\n * @private\n */\n _animateCursor({\n toValue,\n duration,\n delay,\n onComplete,\n }: {\n toValue: number;\n duration: number;\n delay?: number;\n onComplete?: TOnAnimationChangeCallback;\n }) {\n return animate({\n startValue: this._currentCursorOpacity,\n endValue: toValue,\n duration,\n delay,\n onComplete,\n abort: () =>\n !this.canvas ||\n // we do not want to animate a selection, only cursor\n this.selectionStart !== this.selectionEnd,\n onChange: (value) => {\n this._currentCursorOpacity = value;\n this.renderCursorOrSelection();\n },\n });\n }\n\n /**\n * changes the cursor from visible to invisible\n */\n private _tick(delay?: number) {\n this._currentTickState = this._animateCursor({\n toValue: 0,\n duration: this.cursorDuration / 2,\n delay: Math.max(delay || 0, 100),\n onComplete: this._onTickComplete,\n });\n }\n\n /**\n * Changes the cursor from invisible to visible\n */\n private _onTickComplete() {\n this._currentTickCompleteState?.abort();\n this._currentTickCompleteState = this._animateCursor({\n toValue: 1,\n duration: this.cursorDuration,\n onComplete: this._tick,\n });\n }\n\n /**\n * Initializes delayed cursor\n */\n initDelayedCursor(restart?: boolean) {\n this.abortCursorAnimation();\n this._tick(restart ? 0 : this.cursorDelay);\n }\n\n /**\n * Aborts cursor animation, clears all timeouts and clear textarea context if necessary\n */\n abortCursorAnimation() {\n let shouldClear = false;\n [this._currentTickState, this._currentTickCompleteState].forEach(\n (cursorAnimation) => {\n if (cursorAnimation && !cursorAnimation.isDone()) {\n shouldClear = true;\n cursorAnimation.abort();\n }\n },\n );\n\n this._currentCursorOpacity = 1;\n\n // make sure we clear context even if instance is not editing\n if (shouldClear) {\n this.clearContextTop();\n }\n }\n\n /**\n * Restart tue cursor animation if either is in complete state ( between animations )\n * or if it never started before\n */\n restartCursorIfNeeded() {\n if (\n [this._currentTickState, this._currentTickCompleteState].some(\n (cursorAnimation) => !cursorAnimation || cursorAnimation.isDone(),\n )\n ) {\n this.initDelayedCursor();\n }\n }\n\n /**\n * Selects entire text\n */\n selectAll() {\n this.selectionStart = 0;\n this.selectionEnd = this._text.length;\n this._fireSelectionChanged();\n this._updateTextarea();\n return this;\n }\n\n /**\n * Returns selected text\n * @return {String}\n */\n getSelectedText(): string {\n return this._text.slice(this.selectionStart, this.selectionEnd).join('');\n }\n\n /**\n * Find new selection index representing start of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryLeft(startFrom: number): number {\n let offset = 0,\n index = startFrom - 1;\n\n // remove space before cursor first\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index--;\n }\n }\n while (/\\S/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n }\n\n /**\n * Find new selection index representing end of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryRight(startFrom: number): number {\n let offset = 0,\n index = startFrom;\n\n // remove space after cursor first\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index++;\n }\n }\n while (/\\S/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n }\n\n /**\n * Find new selection index representing start of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryLeft(startFrom: number): number {\n let offset = 0,\n index = startFrom - 1;\n\n while (!/\\n/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n }\n\n /**\n * Find new selection index representing end of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryRight(startFrom: number): number {\n let offset = 0,\n index = startFrom;\n\n while (!/\\n/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n }\n\n /**\n * Finds index corresponding to beginning or end of a word\n * @param {Number} selectionStart Index of a character\n * @param {Number} direction 1 or -1\n * @return {Number} Index of the beginning or end of a word\n */\n searchWordBoundary(selectionStart: number, direction: 1 | -1): number {\n const text = this._text;\n // if we land on a space we move the cursor backwards\n // if we are searching boundary end we move the cursor backwards ONLY if we don't land on a line break\n let index =\n selectionStart > 0 &&\n this._reSpace.test(text[selectionStart]) &&\n (direction === -1 || !reNewline.test(text[selectionStart - 1]))\n ? selectionStart - 1\n : selectionStart,\n _char = text[index];\n while (index > 0 && index < text.length && !reNonWord.test(_char)) {\n index += direction;\n _char = text[index];\n }\n if (direction === -1 && reNonWord.test(_char)) {\n index++;\n }\n return index;\n }\n\n /**\n * TODO fix: selectionStart set as 0 will be ignored?\n * Selects a word based on the index\n * @param {Number} selectionStart Index of a character\n */\n selectWord(selectionStart?: number) {\n selectionStart = selectionStart || this.selectionStart;\n // search backwards\n const newSelectionStart = this.searchWordBoundary(selectionStart, -1),\n // search forward\n newSelectionEnd = Math.max(\n newSelectionStart,\n this.searchWordBoundary(selectionStart, 1),\n );\n\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n this._fireSelectionChanged();\n this._updateTextarea();\n this.renderCursorOrSelection();\n }\n\n /**\n * TODO fix: selectionStart set as 0 will be ignored?\n * Selects a line based on the index\n * @param {Number} selectionStart Index of a character\n */\n selectLine(selectionStart?: number) {\n selectionStart = selectionStart || this.selectionStart;\n const newSelectionStart = this.findLineBoundaryLeft(selectionStart),\n newSelectionEnd = this.findLineBoundaryRight(selectionStart);\n\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n this._fireSelectionChanged();\n this._updateTextarea();\n return this;\n }\n\n /**\n * Enters editing state\n */\n enterEditing(e?: TPointerEvent) {\n if (this.isEditing || !this.editable) {\n return;\n }\n if (this.canvas) {\n this.canvas.calcOffset();\n this.canvas.textEditingManager.exitTextEditing();\n }\n\n this.isEditing = true;\n\n this.initHiddenTextarea();\n this.hiddenTextarea!.focus();\n this.hiddenTextarea!.value = this.text;\n this._updateTextarea();\n this._saveEditingProps();\n this._setEditingProps();\n this._textBeforeEdit = this.text;\n\n this._tick();\n this.fire('editing:entered', e ? { e } : undefined);\n this._fireSelectionChanged();\n if (this.canvas) {\n this.canvas.fire('text:editing:entered', {\n target: this as unknown as IText,\n e,\n });\n this.canvas.requestRenderAll();\n }\n }\n\n /**\n * called by {@link Canvas#textEditingManager}\n */\n updateSelectionOnMouseMove(e: TPointerEvent) {\n if (this.getActiveControl()) {\n return;\n }\n\n const el = this.hiddenTextarea!;\n // regain focus\n getDocumentFromElement(el).activeElement !== el && el.focus();\n\n const newSelectionStart = this.getSelectionStartFromPointer(e),\n currentStart = this.selectionStart,\n currentEnd = this.selectionEnd;\n if (\n (newSelectionStart !== this.__selectionStartOnMouseDown ||\n currentStart === currentEnd) &&\n (currentStart === newSelectionStart || currentEnd === newSelectionStart)\n ) {\n return;\n }\n if (newSelectionStart > this.__selectionStartOnMouseDown) {\n this.selectionStart = this.__selectionStartOnMouseDown;\n this.selectionEnd = newSelectionStart;\n } else {\n this.selectionStart = newSelectionStart;\n this.selectionEnd = this.__selectionStartOnMouseDown;\n }\n if (\n this.selectionStart !== currentStart ||\n this.selectionEnd !== currentEnd\n ) {\n this._fireSelectionChanged();\n this._updateTextarea();\n this.renderCursorOrSelection();\n }\n }\n\n /**\n * @private\n */\n _setEditingProps() {\n this.hoverCursor = 'text';\n\n if (this.canvas) {\n this.canvas.defaultCursor = this.canvas.moveCursor = 'text';\n }\n\n this.borderColor = this.editingBorderColor;\n this.hasControls = this.selectable = false;\n this.lockMovementX = this.lockMovementY = true;\n }\n\n /**\n * convert from textarea to grapheme indexes\n */\n fromStringToGraphemeSelection(start: number, end: number, text: string) {\n const smallerTextStart = text.slice(0, start),\n graphemeStart = this.graphemeSplit(smallerTextStart).length;\n if (start === end) {\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n }\n const smallerTextEnd = text.slice(start, end),\n graphemeEnd = this.graphemeSplit(smallerTextEnd).length;\n return {\n selectionStart: graphemeStart,\n selectionEnd: graphemeStart + graphemeEnd,\n };\n }\n\n /**\n * convert from fabric to textarea values\n */\n fromGraphemeToStringSelection(\n start: number,\n end: number,\n graphemes: string[],\n ) {\n const smallerTextStart = graphemes.slice(0, start),\n graphemeStart = smallerTextStart.join('').length;\n if (start === end) {\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n }\n const smallerTextEnd = graphemes.slice(start, end),\n graphemeEnd = smallerTextEnd.join('').length;\n return {\n selectionStart: graphemeStart,\n selectionEnd: graphemeStart + graphemeEnd,\n };\n }\n\n /**\n * @private\n */\n _updateTextarea() {\n this.cursorOffsetCache = {};\n if (!this.hiddenTextarea) {\n return;\n }\n if (!this.inCompositionMode) {\n const newSelection = this.fromGraphemeToStringSelection(\n this.selectionStart,\n this.selectionEnd,\n this._text,\n );\n this.hiddenTextarea.selectionStart = newSelection.selectionStart;\n this.hiddenTextarea.selectionEnd = newSelection.selectionEnd;\n }\n this.updateTextareaPosition();\n }\n\n /**\n * @private\n */\n updateFromTextArea() {\n if (!this.hiddenTextarea) {\n return;\n }\n this.cursorOffsetCache = {};\n const textarea = this.hiddenTextarea;\n this.text = textarea.value;\n this.set('dirty', true);\n this.initDimensions();\n this.setCoords();\n const newSelection = this.fromStringToGraphemeSelection(\n textarea.selectionStart,\n textarea.selectionEnd,\n textarea.value,\n );\n this.selectionEnd = this.selectionStart = newSelection.selectionEnd;\n if (!this.inCompositionMode) {\n this.selectionStart = newSelection.selectionStart;\n }\n this.updateTextareaPosition();\n }\n\n /**\n * @private\n */\n updateTextareaPosition() {\n if (this.selectionStart === this.selectionEnd) {\n const style = this._calcTextareaPosition();\n this.hiddenTextarea!.style.left = style.left;\n this.hiddenTextarea!.style.top = style.top;\n }\n }\n\n /**\n * @private\n * @return {Object} style contains style for hiddenTextarea\n */\n _calcTextareaPosition() {\n if (!this.canvas) {\n return { left: '1px', top: '1px' };\n }\n const desiredPosition = this.inCompositionMode\n ? this.compositionStart\n : this.selectionStart,\n boundaries = this._getCursorBoundaries(desiredPosition),\n cursorLocation = this.get2DCursorLocation(desiredPosition),\n lineIndex = cursorLocation.lineIndex,\n charIndex = cursorLocation.charIndex,\n charHeight =\n this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize') *\n this.lineHeight,\n leftOffset = boundaries.leftOffset,\n retinaScaling = this.getCanvasRetinaScaling(),\n upperCanvas = this.canvas.upperCanvasEl,\n upperCanvasWidth = upperCanvas.width / retinaScaling,\n upperCanvasHeight = upperCanvas.height / retinaScaling,\n maxWidth = upperCanvasWidth - charHeight,\n maxHeight = upperCanvasHeight - charHeight;\n\n const p = new Point(\n boundaries.left + leftOffset,\n boundaries.top + boundaries.topOffset + charHeight,\n )\n .transform(this.calcTransformMatrix())\n .transform(this.canvas.viewportTransform)\n .multiply(\n new Point(\n upperCanvas.clientWidth / upperCanvasWidth,\n upperCanvas.clientHeight / upperCanvasHeight,\n ),\n );\n\n if (p.x < 0) {\n p.x = 0;\n }\n if (p.x > maxWidth) {\n p.x = maxWidth;\n }\n if (p.y < 0) {\n p.y = 0;\n }\n if (p.y > maxHeight) {\n p.y = maxHeight;\n }\n\n // add canvas offset on document\n p.x += this.canvas._offset.left;\n p.y += this.canvas._offset.top;\n\n return {\n left: `${p.x}px`,\n top: `${p.y}px`,\n fontSize: `${charHeight}px`,\n charHeight: charHeight,\n };\n }\n\n /**\n * @private\n */\n _saveEditingProps() {\n this._savedProps = {\n hasControls: this.hasControls,\n borderColor: this.borderColor,\n lockMovementX: this.lockMovementX,\n lockMovementY: this.lockMovementY,\n hoverCursor: this.hoverCursor,\n selectable: this.selectable,\n defaultCursor: this.canvas && this.canvas.defaultCursor,\n moveCursor: this.canvas && this.canvas.moveCursor,\n };\n }\n\n /**\n * @private\n */\n _restoreEditingProps() {\n if (!this._savedProps) {\n return;\n }\n\n this.hoverCursor = this._savedProps.hoverCursor;\n this.hasControls = this._savedProps.hasControls;\n this.borderColor = this._savedProps.borderColor;\n this.selectable = this._savedProps.selectable;\n this.lockMovementX = this._savedProps.lockMovementX;\n this.lockMovementY = this._savedProps.lockMovementY;\n\n if (this.canvas) {\n this.canvas.defaultCursor =\n this._savedProps.defaultCursor || this.canvas.defaultCursor;\n this.canvas.moveCursor =\n this._savedProps.moveCursor || this.canvas.moveCursor;\n }\n\n delete this._savedProps;\n }\n\n /**\n * runs the actual logic that exits from editing state, see {@link exitEditing}\n */\n protected _exitEditing() {\n const hiddenTextarea = this.hiddenTextarea;\n this.selected = false;\n this.isEditing = false;\n\n if (hiddenTextarea) {\n hiddenTextarea.blur && hiddenTextarea.blur();\n hiddenTextarea.parentNode &&\n hiddenTextarea.parentNode.removeChild(hiddenTextarea);\n }\n this.hiddenTextarea = null;\n this.abortCursorAnimation();\n this.selectionStart !== this.selectionEnd && this.clearContextTop();\n }\n\n /**\n * Exits from editing state and fires relevant events\n */\n exitEditing() {\n const isTextChanged = this._textBeforeEdit !== this.text;\n this._exitEditing();\n this.selectionEnd = this.selectionStart;\n this._restoreEditingProps();\n if (this._forceClearCache) {\n this.initDimensions();\n this.setCoords();\n }\n this.fire('editing:exited');\n isTextChanged && this.fire(MODIFIED);\n if (this.canvas) {\n this.canvas.fire('text:editing:exited', {\n target: this as unknown as IText,\n });\n // todo: evaluate add an action to this event\n isTextChanged && this.canvas.fire('object:modified', { target: this });\n }\n return this;\n }\n\n /**\n * @private\n */\n _removeExtraneousStyles() {\n for (const prop in this.styles) {\n if (!this._textLines[prop as unknown as number]) {\n delete this.styles[prop];\n }\n }\n }\n\n /**\n * remove and reflow a style block from start to end.\n * @param {Number} start linear start position for removal (included in removal)\n * @param {Number} end linear end position for removal ( excluded from removal )\n */\n removeStyleFromTo(start: number, end: number) {\n const { lineIndex: lineStart, charIndex: charStart } =\n this.get2DCursorLocation(start, true),\n { lineIndex: lineEnd, charIndex: charEnd } = this.get2DCursorLocation(\n end,\n true,\n );\n if (lineStart !== lineEnd) {\n // step1 remove the trailing of lineStart\n if (this.styles[lineStart]) {\n for (\n let i = charStart;\n i < this._unwrappedTextLines[lineStart].length;\n i++\n ) {\n delete this.styles[lineStart][i];\n }\n }\n // step2 move the trailing of lineEnd to lineStart if needed\n if (this.styles[lineEnd]) {\n for (\n let i = charEnd;\n i < this._unwrappedTextLines[lineEnd].length;\n i++\n ) {\n const styleObj = this.styles[lineEnd][i];\n if (styleObj) {\n this.styles[lineStart] || (this.styles[lineStart] = {});\n this.styles[lineStart][charStart + i - charEnd] = styleObj;\n }\n }\n }\n // step3 detects lines will be completely removed.\n for (let i = lineStart + 1; i <= lineEnd; i++) {\n delete this.styles[i];\n }\n // step4 shift remaining lines.\n this.shiftLineStyles(lineEnd, lineStart - lineEnd);\n } else {\n // remove and shift left on the same line\n if (this.styles[lineStart]) {\n const styleObj = this.styles[lineStart];\n const diff = charEnd - charStart;\n for (let i = charStart; i < charEnd; i++) {\n delete styleObj[i];\n }\n for (const char in this.styles[lineStart]) {\n const numericChar = parseInt(char, 10);\n if (numericChar >= charEnd) {\n styleObj[numericChar - diff] = styleObj[char];\n delete styleObj[char];\n }\n }\n }\n }\n }\n\n /**\n * Shifts line styles up or down\n * @param {Number} lineIndex Index of a line\n * @param {Number} offset Can any number?\n */\n shiftLineStyles(lineIndex: number, offset: number) {\n const clonedStyles = Object.assign({}, this.styles);\n for (const line in this.styles) {\n const numericLine = parseInt(line, 10);\n if (numericLine > lineIndex) {\n this.styles[numericLine + offset] = clonedStyles[numericLine];\n if (!clonedStyles[numericLine - offset]) {\n delete this.styles[numericLine];\n }\n }\n }\n }\n\n /**\n * Handle insertion of more consecutive style lines for when one or more\n * newlines gets added to the text. Since current style needs to be shifted\n * first we shift the current style of the number lines needed, then we add\n * new lines from the last to the first.\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} qty number of lines to add\n * @param {Array} copiedStyle Array of objects styles\n */\n insertNewlineStyleObject(\n lineIndex: number,\n charIndex: number,\n qty: number,\n copiedStyle?: { [index: number]: TextStyleDeclaration },\n ) {\n const newLineStyles: { [index: number]: TextStyleDeclaration } = {};\n const originalLineLength = this._unwrappedTextLines[lineIndex].length;\n const isEndOfLine = originalLineLength === charIndex;\n\n let someStyleIsCarryingOver = false;\n qty || (qty = 1);\n this.shiftLineStyles(lineIndex, qty);\n const currentCharStyle = this.styles[lineIndex]\n ? this.styles[lineIndex][charIndex === 0 ? charIndex : charIndex - 1]\n : undefined;\n\n // we clone styles of all chars\n // after cursor onto the current line\n for (const index in this.styles[lineIndex]) {\n const numIndex = parseInt(index, 10);\n if (numIndex >= charIndex) {\n someStyleIsCarryingOver = true;\n newLineStyles[numIndex - charIndex] = this.styles[lineIndex][index];\n // remove lines from the previous line since they're on a new line now\n if (!(isEndOfLine && charIndex === 0)) {\n delete this.styles[lineIndex][index];\n }\n }\n }\n let styleCarriedOver = false;\n if (someStyleIsCarryingOver && !isEndOfLine) {\n // if is end of line, the extra style we copied\n // is probably not something we want\n this.styles[lineIndex + qty] = newLineStyles;\n styleCarriedOver = true;\n }\n if (styleCarriedOver || originalLineLength > charIndex) {\n // skip the last line of since we already prepared it.\n // or contains text without style that we don't want to style\n // just because it changed lines\n qty--;\n }\n // for the all the lines or all the other lines\n // we clone current char style onto the next (otherwise empty) line\n while (qty > 0) {\n if (copiedStyle && copiedStyle[qty - 1]) {\n this.styles[lineIndex + qty] = {\n 0: { ...copiedStyle[qty - 1] },\n };\n } else if (currentCharStyle) {\n this.styles[lineIndex + qty] = {\n 0: { ...currentCharStyle },\n };\n } else {\n delete this.styles[lineIndex + qty];\n }\n qty--;\n }\n this._forceClearCache = true;\n }\n\n /**\n * Inserts style object for a given line/char index\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} quantity number Style object to insert, if given\n * @param {Array} copiedStyle array of style objects\n */\n insertCharStyleObject(\n lineIndex: number,\n charIndex: number,\n quantity: number,\n copiedStyle?: TextStyleDeclaration[],\n ) {\n if (!this.styles) {\n this.styles = {};\n }\n const currentLineStyles = this.styles[lineIndex],\n currentLineStylesCloned = currentLineStyles\n ? { ...currentLineStyles }\n : {};\n\n quantity || (quantity = 1);\n // shift all char styles by quantity forward\n // 0,1,2,3 -> (charIndex=2) -> 0,1,3,4 -> (insert 2) -> 0,1,2,3,4\n for (const index in currentLineStylesCloned) {\n const numericIndex = parseInt(index, 10);\n if (numericIndex >= charIndex) {\n currentLineStyles[numericIndex + quantity] =\n currentLineStylesCloned[numericIndex];\n // only delete the style if there was nothing moved there\n if (!currentLineStylesCloned[numericIndex - quantity]) {\n delete currentLineStyles[numericIndex];\n }\n }\n }\n this._forceClearCache = true;\n if (copiedStyle) {\n while (quantity--) {\n if (!Object.keys(copiedStyle[quantity]).length) {\n continue;\n }\n if (!this.styles[lineIndex]) {\n this.styles[lineIndex] = {};\n }\n this.styles[lineIndex][charIndex + quantity] = {\n ...copiedStyle[quantity],\n };\n }\n return;\n }\n if (!currentLineStyles) {\n return;\n }\n const newStyle = currentLineStyles[charIndex ? charIndex - 1 : 1];\n while (newStyle && quantity--) {\n this.styles[lineIndex][charIndex + quantity] = { ...newStyle };\n }\n }\n\n /**\n * Inserts style object(s)\n * @param {Array} insertedText Characters at the location where style is inserted\n * @param {Number} start cursor index for inserting style\n * @param {Array} [copiedStyle] array of style objects to insert.\n */\n insertNewStyleBlock(\n insertedText: string[],\n start: number,\n copiedStyle?: TextStyleDeclaration[],\n ) {\n const cursorLoc = this.get2DCursorLocation(start, true),\n addedLines = [0];\n let linesLength = 0;\n // get an array of how many char per lines are being added.\n for (let i = 0; i < insertedText.length; i++) {\n if (insertedText[i] === '\\n') {\n linesLength++;\n addedLines[linesLength] = 0;\n } else {\n addedLines[linesLength]++;\n }\n }\n // for the first line copy the style from the current char position.\n if (addedLines[0] > 0) {\n this.insertCharStyleObject(\n cursorLoc.lineIndex,\n cursorLoc.charIndex,\n addedLines[0],\n copiedStyle,\n );\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[0] + 1);\n }\n linesLength &&\n this.insertNewlineStyleObject(\n cursorLoc.lineIndex,\n cursorLoc.charIndex + addedLines[0],\n linesLength,\n );\n let i;\n for (i = 1; i < linesLength; i++) {\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(\n cursorLoc.lineIndex + i,\n 0,\n addedLines[i],\n copiedStyle,\n );\n } else if (copiedStyle) {\n // this test is required in order to close #6841\n // when a pasted buffer begins with a newline then\n // this.styles[cursorLoc.lineIndex + i] and copiedStyle[0]\n // may be undefined for some reason\n if (this.styles[cursorLoc.lineIndex + i] && copiedStyle[0]) {\n this.styles[cursorLoc.lineIndex + i][0] = copiedStyle[0];\n }\n }\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[i] + 1);\n }\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(\n cursorLoc.lineIndex + i,\n 0,\n addedLines[i],\n copiedStyle,\n );\n }\n }\n\n /**\n * Removes characters from start/end\n * start/end ar per grapheme position in _text array.\n *\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n removeChars(start: number, end: number = start + 1) {\n this.removeStyleFromTo(start, end);\n this._text.splice(start, end - start);\n this.text = this._text.join('');\n this.set('dirty', true);\n this.initDimensions();\n this.setCoords();\n this._removeExtraneousStyles();\n }\n\n /**\n * insert characters at start position, before start position.\n * start equal 1 it means the text get inserted between actual grapheme 0 and 1\n * if style array is provided, it must be as the same length of text in graphemes\n * if end is provided and is bigger than start, old text is replaced.\n * start/end ar per grapheme position in _text array.\n *\n * @param {String} text text to insert\n * @param {Array} style array of style objects\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n insertChars(\n text: string,\n style: TextStyleDeclaration[] | undefined,\n start: number,\n end: number = start,\n ) {\n if (end > start) {\n this.removeStyleFromTo(start, end);\n }\n const graphemes = this.graphemeSplit(text);\n this.insertNewStyleBlock(graphemes, start, style);\n this._text = [\n ...this._text.slice(0, start),\n ...graphemes,\n ...this._text.slice(end),\n ];\n this.text = this._text.join('');\n this.set('dirty', true);\n this.initDimensions();\n this.setCoords();\n this._removeExtraneousStyles();\n }\n\n /**\n * Set the selectionStart and selectionEnd according to the new position of cursor\n * mimic the key - mouse navigation when shift is pressed.\n */\n setSelectionStartEndWithShift(\n start: number,\n end: number,\n newSelection: number,\n ) {\n if (newSelection <= start) {\n if (end === start) {\n this._selectionDirection = LEFT;\n } else if (this._selectionDirection === RIGHT) {\n this._selectionDirection = LEFT;\n this.selectionEnd = start;\n }\n this.selectionStart = newSelection;\n } else if (newSelection > start && newSelection < end) {\n if (this._selectionDirection === RIGHT) {\n this.selectionEnd = newSelection;\n } else {\n this.selectionStart = newSelection;\n }\n } else {\n // newSelection is > selection start and end\n if (end === start) {\n this._selectionDirection = RIGHT;\n } else if (this._selectionDirection === LEFT) {\n this._selectionDirection = RIGHT;\n this.selectionStart = end;\n }\n this.selectionEnd = newSelection;\n }\n }\n}\n","import { config } from '../../config';\nimport { getFabricDocument, getEnv } from '../../env';\nimport { capValue } from '../../util/misc/capValue';\nimport type { ITextEvents } from './ITextBehavior';\nimport { ITextBehavior } from './ITextBehavior';\nimport type { TKeyMapIText } from './constants';\nimport type { TOptions } from '../../typedefs';\nimport type { TextProps, SerializedTextProps } from '../Text/Text';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { CHANGED, LEFT, RIGHT } from '../../constants';\nimport type { IText } from './IText';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\n\nexport abstract class ITextKeyBehavior<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ITextEvents = ITextEvents,\n> extends ITextBehavior {\n /**\n * For functionalities on keyDown\n * Map a special key to a function of the instance/prototype\n * If you need different behavior for ESC or TAB or arrows, you have to change\n * this map setting the name of a function that you build on the IText or\n * your prototype.\n * the map change will affect all Instances unless you need for only some text Instances\n * in that case you have to clone this object and assign your Instance.\n * this.keysMap = Object.assign({}, this.keysMap);\n * The function must be in IText.prototype.myFunction And will receive event as args[0]\n */\n declare keysMap: TKeyMapIText;\n\n declare keysMapRtl: TKeyMapIText;\n\n /**\n * For functionalities on keyUp + ctrl || cmd\n */\n declare ctrlKeysMapUp: TKeyMapIText;\n\n /**\n * For functionalities on keyDown + ctrl || cmd\n */\n declare ctrlKeysMapDown: TKeyMapIText;\n\n declare hiddenTextarea: HTMLTextAreaElement | null;\n\n /**\n * DOM container to append the hiddenTextarea.\n * An alternative to attaching to the document.body.\n * Useful to reduce laggish redraw of the full document.body tree and\n * also with modals event capturing that won't let the textarea take focus.\n * @type HTMLElement\n * @default\n */\n declare hiddenTextareaContainer?: HTMLElement | null;\n\n private declare _clickHandlerInitialized: boolean;\n private declare _copyDone: boolean;\n private declare fromPaste: boolean;\n\n /**\n * Initializes hidden textarea (needed to bring up keyboard in iOS)\n */\n initHiddenTextarea() {\n const doc =\n (this.canvas && getDocumentFromElement(this.canvas.getElement())) ||\n getFabricDocument();\n const textarea = doc.createElement('textarea');\n Object.entries({\n autocapitalize: 'off',\n autocorrect: 'off',\n autocomplete: 'off',\n spellcheck: 'false',\n 'data-fabric': 'textarea',\n wrap: 'off',\n }).map(([attribute, value]) => textarea.setAttribute(attribute, value));\n const { top, left, fontSize } = this._calcTextareaPosition();\n // line-height: 1px; was removed from the style to fix this:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=870966\n textarea.style.cssText = `position: absolute; top: ${top}; left: ${left}; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: ${fontSize};`;\n\n (this.hiddenTextareaContainer || doc.body).appendChild(textarea);\n\n Object.entries({\n blur: 'blur',\n keydown: 'onKeyDown',\n keyup: 'onKeyUp',\n input: 'onInput',\n copy: 'copy',\n cut: 'copy',\n paste: 'paste',\n compositionstart: 'onCompositionStart',\n compositionupdate: 'onCompositionUpdate',\n compositionend: 'onCompositionEnd',\n } as Record).map(([eventName, handler]) =>\n textarea.addEventListener(\n eventName,\n (this[handler] as EventListener).bind(this),\n ),\n );\n this.hiddenTextarea = textarea;\n }\n\n /**\n * Override this method to customize cursor behavior on textbox blur\n */\n blur() {\n this.abortCursorAnimation();\n }\n\n /**\n * Handles keydown event\n * only used for arrows and combination of modifier keys.\n * @param {KeyboardEvent} e Event object\n */\n onKeyDown(e: KeyboardEvent) {\n if (!this.isEditing) {\n return;\n }\n const keyMap = this.direction === 'rtl' ? this.keysMapRtl : this.keysMap;\n if (e.keyCode in keyMap) {\n // @ts-expect-error legacy method calling pattern\n this[keyMap[e.keyCode]](e);\n } else if (e.keyCode in this.ctrlKeysMapDown && (e.ctrlKey || e.metaKey)) {\n // @ts-expect-error legacy method calling pattern\n this[this.ctrlKeysMapDown[e.keyCode]](e);\n } else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n if (e.keyCode >= 33 && e.keyCode <= 40) {\n // if i press an arrow key just update selection\n this.inCompositionMode = false;\n this.clearContextTop();\n this.renderCursorOrSelection();\n } else {\n this.canvas && this.canvas.requestRenderAll();\n }\n }\n\n /**\n * Handles keyup event\n * We handle KeyUp because ie11 and edge have difficulties copy/pasting\n * if a copy/cut event fired, keyup is dismissed\n * @param {KeyboardEvent} e Event object\n */\n onKeyUp(e: KeyboardEvent) {\n if (!this.isEditing || this._copyDone || this.inCompositionMode) {\n this._copyDone = false;\n return;\n }\n if (e.keyCode in this.ctrlKeysMapUp && (e.ctrlKey || e.metaKey)) {\n // @ts-expect-error legacy method calling pattern\n this[this.ctrlKeysMapUp[e.keyCode]](e);\n } else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n this.canvas && this.canvas.requestRenderAll();\n }\n\n /**\n * Handles onInput event\n * @param {Event} e Event object\n */\n onInput(this: this & { hiddenTextarea: HTMLTextAreaElement }, e: Event) {\n const fromPaste = this.fromPaste;\n this.fromPaste = false;\n e && e.stopPropagation();\n if (!this.isEditing) {\n return;\n }\n const updateAndFire = () => {\n this.updateFromTextArea();\n this.fire(CHANGED);\n if (this.canvas) {\n this.canvas.fire('text:changed', { target: this as unknown as IText });\n this.canvas.requestRenderAll();\n }\n };\n if (this.hiddenTextarea.value === '') {\n this.styles = {};\n updateAndFire();\n return;\n }\n // decisions about style changes.\n const nextText = this._splitTextIntoLines(\n this.hiddenTextarea.value,\n ).graphemeText,\n charCount = this._text.length,\n nextCharCount = nextText.length,\n selectionStart = this.selectionStart,\n selectionEnd = this.selectionEnd,\n selection = selectionStart !== selectionEnd;\n let copiedStyle: TextStyleDeclaration[] | undefined,\n removedText,\n charDiff = nextCharCount - charCount,\n removeFrom,\n removeTo;\n\n const textareaSelection = this.fromStringToGraphemeSelection(\n this.hiddenTextarea.selectionStart,\n this.hiddenTextarea.selectionEnd,\n this.hiddenTextarea.value,\n );\n const backDelete = selectionStart > textareaSelection.selectionStart;\n\n if (selection) {\n removedText = this._text.slice(selectionStart, selectionEnd);\n charDiff += selectionEnd - selectionStart;\n } else if (nextCharCount < charCount) {\n if (backDelete) {\n removedText = this._text.slice(selectionEnd + charDiff, selectionEnd);\n } else {\n removedText = this._text.slice(\n selectionStart,\n selectionStart - charDiff,\n );\n }\n }\n const insertedText = nextText.slice(\n textareaSelection.selectionEnd - charDiff,\n textareaSelection.selectionEnd,\n );\n if (removedText && removedText.length) {\n if (insertedText.length) {\n // let's copy some style before deleting.\n // we want to copy the style before the cursor OR the style at the cursor if selection\n // is bigger than 0.\n copiedStyle = this.getSelectionStyles(\n selectionStart,\n selectionStart + 1,\n false,\n );\n // now duplicate the style one for each inserted text.\n copiedStyle = insertedText.map(\n () =>\n // this return an array of references, but that is fine since we are\n // copying the style later.\n copiedStyle![0],\n );\n }\n if (selection) {\n removeFrom = selectionStart;\n removeTo = selectionEnd;\n } else if (backDelete) {\n // detect differences between forwardDelete and backDelete\n removeFrom = selectionEnd - removedText.length;\n removeTo = selectionEnd;\n } else {\n removeFrom = selectionEnd;\n removeTo = selectionEnd + removedText.length;\n }\n this.removeStyleFromTo(removeFrom, removeTo);\n }\n if (insertedText.length) {\n const { copyPasteData } = getEnv();\n if (\n fromPaste &&\n insertedText.join('') === copyPasteData.copiedText &&\n !config.disableStyleCopyPaste\n ) {\n copiedStyle = copyPasteData.copiedTextStyle;\n }\n this.insertNewStyleBlock(insertedText, selectionStart, copiedStyle);\n }\n updateAndFire();\n }\n\n /**\n * Composition start\n */\n onCompositionStart() {\n this.inCompositionMode = true;\n }\n\n /**\n * Composition end\n */\n onCompositionEnd() {\n this.inCompositionMode = false;\n }\n\n onCompositionUpdate({ target }: CompositionEvent) {\n const { selectionStart, selectionEnd } = target as HTMLTextAreaElement;\n this.compositionStart = selectionStart;\n this.compositionEnd = selectionEnd;\n this.updateTextareaPosition();\n }\n\n /**\n * Copies selected text\n */\n copy() {\n if (this.selectionStart === this.selectionEnd) {\n //do not cut-copy if no selection\n return;\n }\n const { copyPasteData } = getEnv();\n copyPasteData.copiedText = this.getSelectedText();\n if (!config.disableStyleCopyPaste) {\n copyPasteData.copiedTextStyle = this.getSelectionStyles(\n this.selectionStart,\n this.selectionEnd,\n true,\n );\n } else {\n copyPasteData.copiedTextStyle = undefined;\n }\n this._copyDone = true;\n }\n\n /**\n * Pastes text\n */\n paste() {\n this.fromPaste = true;\n }\n\n /**\n * Finds the width in pixels before the cursor on the same line\n * @private\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {Number} widthBeforeCursor width before cursor\n */\n _getWidthBeforeCursor(lineIndex: number, charIndex: number): number {\n let widthBeforeCursor = this._getLineLeftOffset(lineIndex),\n bound;\n\n if (charIndex > 0) {\n bound = this.__charBounds[lineIndex][charIndex - 1];\n widthBeforeCursor += bound.left + bound.width;\n }\n return widthBeforeCursor;\n }\n\n /**\n * Gets start offset of a selection\n * @param {KeyboardEvent} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getDownCursorOffset(e: KeyboardEvent, isRight: boolean): number {\n const selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n // if on last line, down cursor goes to end of line\n if (\n lineIndex === this._textLines.length - 1 ||\n e.metaKey ||\n e.keyCode === 34\n ) {\n // move to the end of a text\n return this._text.length - selectionProp;\n }\n const charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex + 1, widthBeforeCursor),\n textAfterCursor = this._textLines[lineIndex].slice(charIndex);\n return (\n textAfterCursor.length +\n indexOnOtherLine +\n 1 +\n this.missingNewlineOffset(lineIndex)\n );\n }\n\n /**\n * private\n * Helps finding if the offset should be counted from Start or End\n * @param {KeyboardEvent} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n _getSelectionForOffset(e: KeyboardEvent, isRight: boolean): number {\n if (e.shiftKey && this.selectionStart !== this.selectionEnd && isRight) {\n return this.selectionEnd;\n } else {\n return this.selectionStart;\n }\n }\n\n /**\n * @param {KeyboardEvent} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getUpCursorOffset(e: KeyboardEvent, isRight: boolean): number {\n const selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n if (lineIndex === 0 || e.metaKey || e.keyCode === 33) {\n // if on first line, up cursor goes to start of line\n return -selectionProp;\n }\n const charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex - 1, widthBeforeCursor),\n textBeforeCursor = this._textLines[lineIndex].slice(0, charIndex),\n missingNewlineOffset = this.missingNewlineOffset(lineIndex - 1);\n // return a negative offset\n return (\n -this._textLines[lineIndex - 1].length +\n indexOnOtherLine -\n textBeforeCursor.length +\n (1 - missingNewlineOffset)\n );\n }\n\n /**\n * for a given width it founds the matching character.\n * @private\n */\n _getIndexOnLine(lineIndex: number, width: number) {\n const line = this._textLines[lineIndex],\n lineLeftOffset = this._getLineLeftOffset(lineIndex);\n let widthOfCharsOnLine = lineLeftOffset,\n indexOnLine = 0,\n charWidth,\n foundMatch;\n\n for (let j = 0, jlen = line.length; j < jlen; j++) {\n charWidth = this.__charBounds[lineIndex][j].width;\n widthOfCharsOnLine += charWidth;\n if (widthOfCharsOnLine > width) {\n foundMatch = true;\n const leftEdge = widthOfCharsOnLine - charWidth,\n rightEdge = widthOfCharsOnLine,\n offsetFromLeftEdge = Math.abs(leftEdge - width),\n offsetFromRightEdge = Math.abs(rightEdge - width);\n\n indexOnLine = offsetFromRightEdge < offsetFromLeftEdge ? j : j - 1;\n break;\n }\n }\n\n // reached end\n if (!foundMatch) {\n indexOnLine = line.length - 1;\n }\n\n return indexOnLine;\n }\n\n /**\n * Moves cursor down\n * @param {KeyboardEvent} e Event object\n */\n moveCursorDown(e: KeyboardEvent) {\n if (\n this.selectionStart >= this._text.length &&\n this.selectionEnd >= this._text.length\n ) {\n return;\n }\n this._moveCursorUpOrDown('Down', e);\n }\n\n /**\n * Moves cursor up\n * @param {KeyboardEvent} e Event object\n */\n moveCursorUp(e: KeyboardEvent) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorUpOrDown('Up', e);\n }\n\n /**\n * Moves cursor up or down, fires the events\n * @param {String} direction 'Up' or 'Down'\n * @param {KeyboardEvent} e Event object\n */\n _moveCursorUpOrDown(direction: 'Up' | 'Down', e: KeyboardEvent) {\n const offset = this[`get${direction}CursorOffset`](\n e,\n this._selectionDirection === RIGHT,\n );\n if (e.shiftKey) {\n this.moveCursorWithShift(offset);\n } else {\n this.moveCursorWithoutShift(offset);\n }\n if (offset !== 0) {\n const max = this.text.length;\n this.selectionStart = capValue(0, this.selectionStart, max);\n this.selectionEnd = capValue(0, this.selectionEnd, max);\n // TODO fix: abort and init should be an alternative depending\n // on selectionStart/End being equal or different\n this.abortCursorAnimation();\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n }\n\n /**\n * Moves cursor with shift\n * @param {Number} offset\n */\n moveCursorWithShift(offset: number) {\n const newSelection =\n this._selectionDirection === LEFT\n ? this.selectionStart + offset\n : this.selectionEnd + offset;\n this.setSelectionStartEndWithShift(\n this.selectionStart,\n this.selectionEnd,\n newSelection,\n );\n return offset !== 0;\n }\n\n /**\n * Moves cursor up without shift\n * @param {Number} offset\n */\n moveCursorWithoutShift(offset: number) {\n if (offset < 0) {\n this.selectionStart += offset;\n this.selectionEnd = this.selectionStart;\n } else {\n this.selectionEnd += offset;\n this.selectionStart = this.selectionEnd;\n }\n return offset !== 0;\n }\n\n /**\n * Moves cursor left\n * @param {KeyboardEvent} e Event object\n */\n moveCursorLeft(e: KeyboardEvent) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorLeftOrRight('Left', e);\n }\n\n /**\n * @private\n * @return {Boolean} true if a change happened\n *\n * @todo refactor not to use method name composition\n */\n _move(\n e: KeyboardEvent,\n prop: 'selectionStart' | 'selectionEnd',\n direction: 'Left' | 'Right',\n ): boolean {\n let newValue: number | undefined;\n if (e.altKey) {\n newValue = this[`findWordBoundary${direction}`](this[prop]);\n } else if (e.metaKey || e.keyCode === 35 || e.keyCode === 36) {\n newValue = this[`findLineBoundary${direction}`](this[prop]);\n } else {\n this[prop] += direction === 'Left' ? -1 : 1;\n return true;\n }\n if (typeof newValue !== 'undefined' && this[prop] !== newValue) {\n this[prop] = newValue;\n return true;\n }\n return false;\n }\n\n /**\n * @private\n */\n _moveLeft(e: KeyboardEvent, prop: 'selectionStart' | 'selectionEnd') {\n return this._move(e, prop, 'Left');\n }\n\n /**\n * @private\n */\n _moveRight(e: KeyboardEvent, prop: 'selectionStart' | 'selectionEnd') {\n return this._move(e, prop, 'Right');\n }\n\n /**\n * Moves cursor left without keeping selection\n * @param {KeyboardEvent} e\n */\n moveCursorLeftWithoutShift(e: KeyboardEvent) {\n let change = true;\n this._selectionDirection = LEFT;\n\n // only move cursor when there is no selection,\n // otherwise we discard it, and leave cursor on same place\n if (\n this.selectionEnd === this.selectionStart &&\n this.selectionStart !== 0\n ) {\n change = this._moveLeft(e, 'selectionStart');\n }\n this.selectionEnd = this.selectionStart;\n return change;\n }\n\n /**\n * Moves cursor left while keeping selection\n * @param {KeyboardEvent} e\n */\n moveCursorLeftWithShift(e: KeyboardEvent) {\n if (\n this._selectionDirection === RIGHT &&\n this.selectionStart !== this.selectionEnd\n ) {\n return this._moveLeft(e, 'selectionEnd');\n } else if (this.selectionStart !== 0) {\n this._selectionDirection = LEFT;\n return this._moveLeft(e, 'selectionStart');\n }\n }\n\n /**\n * Moves cursor right\n * @param {KeyboardEvent} e Event object\n */\n moveCursorRight(e: KeyboardEvent) {\n if (\n this.selectionStart >= this._text.length &&\n this.selectionEnd >= this._text.length\n ) {\n return;\n }\n this._moveCursorLeftOrRight('Right', e);\n }\n\n /**\n * Moves cursor right or Left, fires event\n * @param {String} direction 'Left', 'Right'\n * @param {KeyboardEvent} e Event object\n */\n _moveCursorLeftOrRight(direction: 'Left' | 'Right', e: KeyboardEvent) {\n const actionName = `moveCursor${direction}${\n e.shiftKey ? 'WithShift' : 'WithoutShift'\n }` as const;\n this._currentCursorOpacity = 1;\n if (this[actionName](e)) {\n // TODO fix: abort and init should be an alternative depending\n // on selectionStart/End being equal or different\n this.abortCursorAnimation();\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n }\n\n /**\n * Moves cursor right while keeping selection\n * @param {KeyboardEvent} e\n */\n moveCursorRightWithShift(e: KeyboardEvent) {\n if (\n this._selectionDirection === LEFT &&\n this.selectionStart !== this.selectionEnd\n ) {\n return this._moveRight(e, 'selectionStart');\n } else if (this.selectionEnd !== this._text.length) {\n this._selectionDirection = RIGHT;\n return this._moveRight(e, 'selectionEnd');\n }\n }\n\n /**\n * Moves cursor right without keeping selection\n * @param {KeyboardEvent} e Event object\n */\n moveCursorRightWithoutShift(e: KeyboardEvent) {\n let changed = true;\n this._selectionDirection = RIGHT;\n\n if (this.selectionStart === this.selectionEnd) {\n changed = this._moveRight(e, 'selectionStart');\n this.selectionEnd = this.selectionStart;\n } else {\n this.selectionStart = this.selectionEnd;\n }\n return changed;\n }\n}\n","import type { TPointerEvent, TPointerEventInfo } from '../../EventTypeDefs';\nimport type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport { stopEvent } from '../../util/dom_event';\nimport { invertTransform } from '../../util/misc/matrix';\nimport { DraggableTextDelegate } from './DraggableTextDelegate';\nimport type { ITextEvents } from './ITextBehavior';\nimport { ITextKeyBehavior } from './ITextKeyBehavior';\nimport type { TOptions } from '../../typedefs';\nimport type { TextProps, SerializedTextProps } from '../Text/Text';\n\n/**\n * `LEFT_CLICK === 0`\n */\nconst notALeftClick = (e: Event) => !!(e as MouseEvent).button;\n\nexport abstract class ITextClickBehavior<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ITextEvents = ITextEvents,\n> extends ITextKeyBehavior {\n private declare __lastSelected: boolean;\n private declare __lastClickTime: number;\n private declare __lastLastClickTime: number;\n private declare __lastPointer: XY | Record;\n private declare __newClickTime: number;\n\n protected draggableTextDelegate: DraggableTextDelegate;\n\n initBehavior() {\n // Initializes event handlers related to cursor or selection\n this.on('mousedown', this._mouseDownHandler);\n this.on('mousedown:before', this._mouseDownHandlerBefore);\n this.on('mouseup', this.mouseUpHandler);\n this.on('mousedblclick', this.doubleClickHandler);\n this.on('tripleclick', this.tripleClickHandler);\n\n // Initializes \"dbclick\" event handler\n this.__lastClickTime = +new Date();\n // for triple click\n this.__lastLastClickTime = +new Date();\n this.__lastPointer = {};\n this.on('mousedown', this.onMouseDown);\n\n // @ts-expect-error in reality it is an IText instance\n this.draggableTextDelegate = new DraggableTextDelegate(this);\n\n super.initBehavior();\n }\n\n /**\n * If this method returns true a mouse move operation over a text selection\n * will not prevent the native mouse event allowing the browser to start a drag operation.\n * shouldStartDragging can be read 'do not prevent default for mouse move event'\n * To prevent drag and drop between objects both shouldStartDragging and onDragStart should return false\n * @returns\n */\n shouldStartDragging() {\n return this.draggableTextDelegate.isActive();\n }\n\n /**\n * @public override this method to control whether instance should/shouldn't become a drag source,\n * @see also {@link DraggableTextDelegate#isActive}\n * To prevent drag and drop between objects both shouldStartDragging and onDragStart should return false\n * @returns {boolean} should handle event\n */\n onDragStart(e: DragEvent) {\n return this.draggableTextDelegate.onDragStart(e);\n }\n\n /**\n * @public override this method to control whether instance should/shouldn't become a drop target\n */\n canDrop(e: DragEvent) {\n return this.draggableTextDelegate.canDrop(e);\n }\n\n /**\n * Default event handler to simulate triple click\n * @private\n */\n onMouseDown(options: TPointerEventInfo) {\n if (!this.canvas) {\n return;\n }\n this.__newClickTime = +new Date();\n const newPointer = options.pointer;\n if (this.isTripleClick(newPointer)) {\n this.fire('tripleclick', options);\n stopEvent(options.e);\n }\n this.__lastLastClickTime = this.__lastClickTime;\n this.__lastClickTime = this.__newClickTime;\n this.__lastPointer = newPointer;\n this.__lastSelected = this.selected && !this.getActiveControl();\n }\n\n isTripleClick(newPointer: XY) {\n return (\n this.__newClickTime - this.__lastClickTime < 500 &&\n this.__lastClickTime - this.__lastLastClickTime < 500 &&\n this.__lastPointer.x === newPointer.x &&\n this.__lastPointer.y === newPointer.y\n );\n }\n\n /**\n * Default handler for double click, select a word\n */\n doubleClickHandler(options: TPointerEventInfo) {\n if (!this.isEditing) {\n return;\n }\n this.selectWord(this.getSelectionStartFromPointer(options.e));\n }\n\n /**\n * Default handler for triple click, select a line\n */\n tripleClickHandler(options: TPointerEventInfo) {\n if (!this.isEditing) {\n return;\n }\n this.selectLine(this.getSelectionStartFromPointer(options.e));\n }\n\n /**\n * Default event handler for the basic functionalities needed on _mouseDown\n * can be overridden to do something different.\n * Scope of this implementation is: find the click position, set selectionStart\n * find selectionEnd, initialize the drawing of either cursor or selection area\n * initializing a mousedDown on a text area will cancel fabricjs knowledge of\n * current compositionMode. It will be set to false.\n */\n _mouseDownHandler({ e }: TPointerEventInfo) {\n if (\n !this.canvas ||\n !this.editable ||\n notALeftClick(e) ||\n this.getActiveControl()\n ) {\n return;\n }\n\n if (this.draggableTextDelegate.start(e)) {\n return;\n }\n\n this.canvas.textEditingManager.register(this);\n\n if (this.selected) {\n this.inCompositionMode = false;\n this.setCursorByClick(e);\n }\n\n if (this.isEditing) {\n this.__selectionStartOnMouseDown = this.selectionStart;\n if (this.selectionStart === this.selectionEnd) {\n this.abortCursorAnimation();\n }\n this.renderCursorOrSelection();\n }\n }\n\n /**\n * Default event handler for the basic functionalities needed on mousedown:before\n * can be overridden to do something different.\n * Scope of this implementation is: verify the object is already selected when mousing down\n */\n _mouseDownHandlerBefore({ e }: TPointerEventInfo) {\n if (!this.canvas || !this.editable || notALeftClick(e)) {\n return;\n }\n // we want to avoid that an object that was selected and then becomes unselectable,\n // may trigger editing mode in some way.\n this.selected = this === this.canvas._activeObject;\n }\n\n /**\n * standard handler for mouse up, overridable\n * @private\n */\n mouseUpHandler({ e, transform }: TPointerEventInfo) {\n const didDrag = this.draggableTextDelegate.end(e);\n if (this.canvas) {\n this.canvas.textEditingManager.unregister(this);\n\n const activeObject = this.canvas._activeObject;\n if (activeObject && activeObject !== this) {\n // avoid running this logic when there is an active object\n // this because is possible with shift click and fast clicks,\n // to rapidly deselect and reselect this object and trigger an enterEdit\n return;\n }\n }\n if (\n !this.editable ||\n (this.group && !this.group.interactive) ||\n (transform && transform.actionPerformed) ||\n notALeftClick(e) ||\n didDrag\n ) {\n return;\n }\n\n if (this.__lastSelected && !this.getActiveControl()) {\n this.selected = false;\n this.__lastSelected = false;\n this.enterEditing(e);\n if (this.selectionStart === this.selectionEnd) {\n this.initDelayedCursor(true);\n } else {\n this.renderCursorOrSelection();\n }\n } else {\n this.selected = true;\n }\n }\n\n /**\n * Changes cursor location in a text depending on passed pointer (x/y) object\n * @param {TPointerEvent} e Event object\n */\n setCursorByClick(e: TPointerEvent) {\n const newSelection = this.getSelectionStartFromPointer(e),\n start = this.selectionStart,\n end = this.selectionEnd;\n if (e.shiftKey) {\n this.setSelectionStartEndWithShift(start, end, newSelection);\n } else {\n this.selectionStart = newSelection;\n this.selectionEnd = newSelection;\n }\n if (this.isEditing) {\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n }\n\n /**\n * Returns index of a character corresponding to where an object was clicked\n * @param {TPointerEvent} e Event object\n * @return {Number} Index of a character\n */\n getSelectionStartFromPointer(e: TPointerEvent): number {\n const mouseOffset = this.canvas!.getScenePoint(e)\n .transform(invertTransform(this.calcTransformMatrix()))\n .add(new Point(-this._getLeftOffset(), -this._getTopOffset()));\n let height = 0,\n charIndex = 0,\n lineIndex = 0;\n\n for (let i = 0; i < this._textLines.length; i++) {\n if (height <= mouseOffset.y) {\n height += this.getHeightOfLine(i);\n lineIndex = i;\n if (i > 0) {\n charIndex +=\n this._textLines[i - 1].length + this.missingNewlineOffset(i - 1);\n }\n } else {\n break;\n }\n }\n const lineLeftOffset = Math.abs(this._getLineLeftOffset(lineIndex));\n let width = lineLeftOffset;\n const charLength = this._textLines[lineIndex].length;\n const chars = this.__charBounds[lineIndex];\n for (let j = 0; j < charLength; j++) {\n // i removed something about flipX here, check.\n const charWidth = chars[j].kernedWidth;\n const widthAfter = width + charWidth;\n if (mouseOffset.x <= widthAfter) {\n // if the pointer is closer to the end of the char we increment charIndex\n // in order to position the cursor after the char\n if (\n Math.abs(mouseOffset.x - widthAfter) <=\n Math.abs(mouseOffset.x - width)\n ) {\n charIndex++;\n }\n break;\n }\n width = widthAfter;\n charIndex++;\n }\n\n return Math.min(\n // if object is horizontally flipped, mirror cursor location from the end\n this.flipX ? charLength - charIndex : charIndex,\n this._text.length,\n );\n }\n}\n","export type TKeyMapIText = Record<\n KeyboardEvent['keyCode'],\n CursorHandlingMethods\n>;\n\nexport type CursorHandlingMethods =\n | 'moveCursorUp'\n | 'moveCursorDown'\n | 'moveCursorLeft'\n | 'moveCursorRight'\n | 'exitEditing'\n | 'copy'\n | 'cut'\n | 'selectAll';\n\nconst MOVE_CURSOR_UP: CursorHandlingMethods = 'moveCursorUp';\nconst MOVE_CURSOR_DOWN: CursorHandlingMethods = 'moveCursorDown';\nconst MOVE_CURSOR_LEFT: CursorHandlingMethods = 'moveCursorLeft';\nconst MOVE_CURSOR_RIGHT: CursorHandlingMethods = 'moveCursorRight';\nconst EXIT_EDITING: CursorHandlingMethods = 'exitEditing';\n\n// @TODO look into import { Key } from 'ts-key-enum';\n// and transition from keyCode to Key\n// also reduce string duplication\nexport const keysMap: TKeyMapIText = {\n 9: EXIT_EDITING,\n 27: EXIT_EDITING,\n 33: MOVE_CURSOR_UP,\n 34: MOVE_CURSOR_DOWN,\n 35: MOVE_CURSOR_RIGHT,\n 36: MOVE_CURSOR_LEFT,\n 37: MOVE_CURSOR_LEFT,\n 38: MOVE_CURSOR_UP,\n 39: MOVE_CURSOR_RIGHT,\n 40: MOVE_CURSOR_DOWN,\n};\n\nexport const keysMapRtl: TKeyMapIText = {\n 9: EXIT_EDITING,\n 27: EXIT_EDITING,\n 33: MOVE_CURSOR_UP,\n 34: MOVE_CURSOR_DOWN,\n 35: MOVE_CURSOR_LEFT,\n 36: MOVE_CURSOR_RIGHT,\n 37: MOVE_CURSOR_RIGHT,\n 38: MOVE_CURSOR_UP,\n 39: MOVE_CURSOR_LEFT,\n 40: MOVE_CURSOR_DOWN,\n};\n\n/**\n * For functionalities on keyUp + ctrl || cmd\n */\nexport const ctrlKeysMapUp: TKeyMapIText = {\n 67: 'copy',\n // there was a reason this wasn't deleted. for now leave it here\n 88: 'cut',\n};\n\n/**\n * For functionalities on keyDown + ctrl || cmd\n */\nexport const ctrlKeysMapDown: TKeyMapIText = {\n 65: 'selectAll',\n};\n","import { Canvas } from '../../canvas/Canvas';\nimport type { ITextEvents } from './ITextBehavior';\nimport { ITextClickBehavior } from './ITextClickBehavior';\nimport {\n ctrlKeysMapDown,\n ctrlKeysMapUp,\n keysMap,\n keysMapRtl,\n} from './constants';\nimport type { TClassProperties, TFiller, TOptions } from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport type { SerializedTextProps, TextProps } from '../Text/Text';\nimport {\n JUSTIFY,\n JUSTIFY_CENTER,\n JUSTIFY_LEFT,\n JUSTIFY_RIGHT,\n} from '../Text/constants';\nimport { CENTER, FILL, LEFT, RIGHT } from '../../constants';\nimport type { ObjectToCanvasElementOptions } from '../Object/Object';\n\ntype CursorBoundaries = {\n left: number;\n top: number;\n leftOffset: number;\n topOffset: number;\n};\n\n// Declare IText protected properties to workaround TS\nconst protectedDefaultValues = {\n _selectionDirection: null,\n _reSpace: /\\s|\\r?\\n/,\n inCompositionMode: false,\n};\n\nexport const iTextDefaultValues: Partial> = {\n selectionStart: 0,\n selectionEnd: 0,\n selectionColor: 'rgba(17,119,255,0.3)',\n isEditing: false,\n editable: true,\n editingBorderColor: 'rgba(102,153,255,0.25)',\n cursorWidth: 2,\n cursorColor: '',\n cursorDelay: 1000,\n cursorDuration: 600,\n caching: true,\n hiddenTextareaContainer: null,\n keysMap,\n keysMapRtl,\n ctrlKeysMapDown,\n ctrlKeysMapUp,\n ...protectedDefaultValues,\n};\n\n// @TODO this is not complete\ninterface UniqueITextProps {\n selectionStart: number;\n selectionEnd: number;\n}\n\nexport interface SerializedITextProps\n extends SerializedTextProps,\n UniqueITextProps {}\n\nexport interface ITextProps extends TextProps, UniqueITextProps {}\n\n/**\n * @fires changed\n * @fires selection:changed\n * @fires editing:entered\n * @fires editing:exited\n * @fires dragstart\n * @fires drag drag event firing on the drag source\n * @fires dragend\n * @fires copy\n * @fires cut\n * @fires paste\n *\n * #### Supported key combinations\n * ```\n * Move cursor: left, right, up, down\n * Select character: shift + left, shift + right\n * Select text vertically: shift + up, shift + down\n * Move cursor by word: alt + left, alt + right\n * Select words: shift + alt + left, shift + alt + right\n * Move cursor to line start/end: cmd + left, cmd + right or home, end\n * Select till start/end of line: cmd + shift + left, cmd + shift + right or shift + home, shift + end\n * Jump to start/end of text: cmd + up, cmd + down\n * Select till start/end of text: cmd + shift + up, cmd + shift + down or shift + pgUp, shift + pgDown\n * Delete character: backspace\n * Delete word: alt + backspace\n * Delete line: cmd + backspace\n * Forward delete: delete\n * Copy text: ctrl/cmd + c\n * Paste text: ctrl/cmd + v\n * Cut text: ctrl/cmd + x\n * Select entire text: ctrl/cmd + a\n * Quit editing tab or esc\n * ```\n *\n * #### Supported mouse/touch combination\n * ```\n * Position cursor: click/touch\n * Create selection: click/touch & drag\n * Create selection: click & shift + click\n * Select word: double click\n * Select line: triple click\n * ```\n */\nexport class IText<\n Props extends TOptions = Partial,\n SProps extends SerializedITextProps = SerializedITextProps,\n EventSpec extends ITextEvents = ITextEvents,\n >\n extends ITextClickBehavior\n implements UniqueITextProps\n{\n /**\n * Index where text selection starts (or where cursor is when there is no selection)\n * @type Number\n * @default\n */\n declare selectionStart: number;\n\n /**\n * Index where text selection ends\n * @type Number\n * @default\n */\n declare selectionEnd: number;\n\n declare compositionStart: number;\n\n declare compositionEnd: number;\n\n /**\n * Color of text selection\n * @type String\n * @default\n */\n declare selectionColor: string;\n\n /**\n * Indicates whether text is in editing mode\n * @type Boolean\n * @default\n */\n declare isEditing: boolean;\n\n /**\n * Indicates whether a text can be edited\n * @type Boolean\n * @default\n */\n declare editable: boolean;\n\n /**\n * Border color of text object while it's in editing mode\n * @type String\n * @default\n */\n declare editingBorderColor: string;\n\n /**\n * Width of cursor (in px)\n * @type Number\n * @default\n */\n declare cursorWidth: number;\n\n /**\n * Color of text cursor color in editing mode.\n * if not set (default) will take color from the text.\n * if set to a color value that fabric can understand, it will\n * be used instead of the color of the text at the current position.\n * @type String\n * @default\n */\n declare cursorColor: string;\n\n /**\n * Delay between cursor blink (in ms)\n * @type Number\n * @default\n */\n declare cursorDelay: number;\n\n /**\n * Duration of cursor fade in (in ms)\n * @type Number\n * @default\n */\n declare cursorDuration: number;\n\n declare compositionColor: string;\n\n /**\n * Indicates whether internal text char widths can be cached\n * @type Boolean\n * @default\n */\n declare caching: boolean;\n\n static ownDefaults = iTextDefaultValues;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...IText.ownDefaults };\n }\n\n static type = 'IText';\n\n get type() {\n const type = super.type;\n // backward compatibility\n return type === 'itext' ? 'i-text' : type;\n }\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n */\n constructor(text: string, options?: Props) {\n super(text, { ...IText.ownDefaults, ...options } as Props);\n this.initBehavior();\n }\n\n /**\n * While editing handle differently\n * @private\n * @param {string} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n if (this.isEditing && this._savedProps && key in this._savedProps) {\n // @ts-expect-error irritating TS\n this._savedProps[key] = value;\n return this;\n }\n if (key === 'canvas') {\n this.canvas instanceof Canvas &&\n this.canvas.textEditingManager.remove(this);\n value instanceof Canvas && value.textEditingManager.add(this);\n }\n return super._set(key, value);\n }\n\n /**\n * Sets selection start (left boundary of a selection)\n * @param {Number} index Index to set selection start to\n */\n setSelectionStart(index: number) {\n index = Math.max(index, 0);\n this._updateAndFire('selectionStart', index);\n }\n\n /**\n * Sets selection end (right boundary of a selection)\n * @param {Number} index Index to set selection end to\n */\n setSelectionEnd(index: number) {\n index = Math.min(index, this.text.length);\n this._updateAndFire('selectionEnd', index);\n }\n\n /**\n * @private\n * @param {String} property 'selectionStart' or 'selectionEnd'\n * @param {Number} index new position of property\n */\n protected _updateAndFire(\n property: 'selectionStart' | 'selectionEnd',\n index: number,\n ) {\n if (this[property] !== index) {\n this._fireSelectionChanged();\n this[property] = index;\n }\n this._updateTextarea();\n }\n\n /**\n * Fires the even of selection changed\n * @private\n */\n _fireSelectionChanged() {\n this.fire('selection:changed');\n this.canvas && this.canvas.fire('text:selection:changed', { target: this });\n }\n\n /**\n * Initialize text dimensions. Render all text on given context\n * or on a offscreen canvas to get the text width with measureText.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n * @private\n */\n initDimensions() {\n this.isEditing && this.initDelayedCursor();\n super.initDimensions();\n }\n\n /**\n * Gets style of a current selection/cursor (at the start position)\n * if startIndex or endIndex are not provided, selectionStart or selectionEnd will be used.\n * @param {Number} startIndex Start index to get styles at\n * @param {Number} endIndex End index to get styles at, if not specified selectionEnd or startIndex + 1\n * @param {Boolean} [complete] get full style or not\n * @return {Array} styles an array with one, zero or more Style objects\n */\n getSelectionStyles(\n startIndex: number = this.selectionStart || 0,\n endIndex: number = this.selectionEnd,\n complete?: boolean,\n ) {\n return super.getSelectionStyles(startIndex, endIndex, complete);\n }\n\n /**\n * Sets style of a current selection, if no selection exist, do not set anything.\n * @param {Object} [styles] Styles object\n * @param {Number} [startIndex] Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n */\n setSelectionStyles(\n styles: object,\n startIndex: number = this.selectionStart || 0,\n endIndex: number = this.selectionEnd,\n ) {\n return super.setSelectionStyles(styles, startIndex, endIndex);\n }\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor (or selection start)\n * @param {Number} [selectionStart] Optional index. When not given, current selectionStart is used.\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.\n */\n get2DCursorLocation(\n selectionStart = this.selectionStart,\n skipWrapping?: boolean,\n ) {\n return super.get2DCursorLocation(selectionStart, skipWrapping);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n super.render(ctx);\n // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor\n // the correct position but not at every cursor animation.\n this.cursorOffsetCache = {};\n this.renderCursorOrSelection();\n }\n\n /**\n * @override block cursor/selection logic while rendering the exported canvas\n * @todo this workaround should be replaced with a more robust solution\n */\n toCanvasElement(options?: ObjectToCanvasElementOptions): HTMLCanvasElement {\n const isEditing = this.isEditing;\n this.isEditing = false;\n const canvas = super.toCanvasElement(options);\n this.isEditing = isEditing;\n return canvas;\n }\n\n /**\n * Renders cursor or selection (depending on what exists)\n * it does on the contextTop. If contextTop is not available, do nothing.\n */\n renderCursorOrSelection() {\n if (!this.isEditing) {\n return;\n }\n const ctx = this.clearContextTop(true);\n if (!ctx) {\n return;\n }\n const boundaries = this._getCursorBoundaries();\n if (this.selectionStart === this.selectionEnd) {\n this.renderCursor(ctx, boundaries);\n } else {\n this.renderSelection(ctx, boundaries);\n }\n this.canvas!.contextTopDirty = true;\n ctx.restore();\n }\n\n /**\n * Returns cursor boundaries (left, top, leftOffset, topOffset)\n * left/top are left/top of entire text box\n * leftOffset/topOffset are offset from that left/top point of a text box\n * @private\n * @param {number} [index] index from start\n * @param {boolean} [skipCaching]\n */\n _getCursorBoundaries(\n index: number = this.selectionStart,\n skipCaching?: boolean,\n ): CursorBoundaries {\n const left = this._getLeftOffset(),\n top = this._getTopOffset(),\n offsets = this._getCursorBoundariesOffsets(index, skipCaching);\n return {\n left: left,\n top: top,\n leftOffset: offsets.left,\n topOffset: offsets.top,\n };\n }\n\n /**\n * Caches and returns cursor left/top offset relative to instance's center point\n * @private\n * @param {number} index index from start\n * @param {boolean} [skipCaching]\n */\n _getCursorBoundariesOffsets(\n index: number,\n skipCaching?: boolean,\n ): { left: number; top: number } {\n if (skipCaching) {\n return this.__getCursorBoundariesOffsets(index);\n }\n if (this.cursorOffsetCache && 'top' in this.cursorOffsetCache) {\n return this.cursorOffsetCache as { left: number; top: number };\n }\n return (this.cursorOffsetCache = this.__getCursorBoundariesOffsets(index));\n }\n\n /**\n * Calculates cursor left/top offset relative to instance's center point\n * @private\n * @param {number} index index from start\n */\n __getCursorBoundariesOffsets(index: number) {\n let topOffset = 0,\n leftOffset = 0;\n const { charIndex, lineIndex } = this.get2DCursorLocation(index);\n\n for (let i = 0; i < lineIndex; i++) {\n topOffset += this.getHeightOfLine(i);\n }\n const lineLeftOffset = this._getLineLeftOffset(lineIndex);\n const bound = this.__charBounds[lineIndex][charIndex];\n bound && (leftOffset = bound.left);\n if (\n this.charSpacing !== 0 &&\n charIndex === this._textLines[lineIndex].length\n ) {\n leftOffset -= this._getWidthOfCharSpacing();\n }\n const boundaries = {\n top: topOffset,\n left: lineLeftOffset + (leftOffset > 0 ? leftOffset : 0),\n };\n if (this.direction === 'rtl') {\n if (\n this.textAlign === RIGHT ||\n this.textAlign === JUSTIFY ||\n this.textAlign === JUSTIFY_RIGHT\n ) {\n boundaries.left *= -1;\n } else if (this.textAlign === LEFT || this.textAlign === JUSTIFY_LEFT) {\n boundaries.left = lineLeftOffset - (leftOffset > 0 ? leftOffset : 0);\n } else if (\n this.textAlign === CENTER ||\n this.textAlign === JUSTIFY_CENTER\n ) {\n boundaries.left = lineLeftOffset - (leftOffset > 0 ? leftOffset : 0);\n }\n }\n return boundaries;\n }\n\n /**\n * Renders cursor on context Top, outside the animation cycle, on request\n * Used for the drag/drop effect.\n * If contextTop is not available, do nothing.\n */\n renderCursorAt(selectionStart: number) {\n const boundaries = this._getCursorBoundaries(selectionStart, true);\n this._renderCursor(this.canvas!.contextTop, boundaries, selectionStart);\n }\n\n /**\n * Renders cursor\n * @param {Object} boundaries\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderCursor(ctx: CanvasRenderingContext2D, boundaries: CursorBoundaries) {\n this._renderCursor(ctx, boundaries, this.selectionStart);\n }\n\n _renderCursor(\n ctx: CanvasRenderingContext2D,\n boundaries: CursorBoundaries,\n selectionStart: number,\n ) {\n const cursorLocation = this.get2DCursorLocation(selectionStart),\n lineIndex = cursorLocation.lineIndex,\n charIndex =\n cursorLocation.charIndex > 0 ? cursorLocation.charIndex - 1 : 0,\n charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize'),\n multiplier = this.getObjectScaling().x * this.canvas!.getZoom(),\n cursorWidth = this.cursorWidth / multiplier,\n dy = this.getValueOfPropertyAt(lineIndex, charIndex, 'deltaY'),\n topOffset =\n boundaries.topOffset +\n ((1 - this._fontSizeFraction) * this.getHeightOfLine(lineIndex)) /\n this.lineHeight -\n charHeight * (1 - this._fontSizeFraction);\n\n if (this.inCompositionMode) {\n // TODO: investigate why there isn't a return inside the if,\n // and why can't happen at the top of the function\n this.renderSelection(ctx, boundaries);\n }\n ctx.fillStyle =\n this.cursorColor ||\n (this.getValueOfPropertyAt(lineIndex, charIndex, FILL) as string);\n ctx.globalAlpha = this._currentCursorOpacity;\n ctx.fillRect(\n boundaries.left + boundaries.leftOffset - cursorWidth / 2,\n topOffset + boundaries.top + dy,\n cursorWidth,\n charHeight,\n );\n }\n\n /**\n * Renders text selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderSelection(ctx: CanvasRenderingContext2D, boundaries: CursorBoundaries) {\n const selection = {\n selectionStart: this.inCompositionMode\n ? this.hiddenTextarea!.selectionStart\n : this.selectionStart,\n selectionEnd: this.inCompositionMode\n ? this.hiddenTextarea!.selectionEnd\n : this.selectionEnd,\n };\n this._renderSelection(ctx, selection, boundaries);\n }\n\n /**\n * Renders drag start text selection\n */\n renderDragSourceEffect() {\n const dragStartSelection =\n this.draggableTextDelegate.getDragStartSelection()!;\n this._renderSelection(\n this.canvas!.contextTop,\n dragStartSelection,\n this._getCursorBoundaries(dragStartSelection.selectionStart, true),\n );\n }\n\n renderDropTargetEffect(e: DragEvent) {\n const dragSelection = this.getSelectionStartFromPointer(e);\n this.renderCursorAt(dragSelection);\n }\n\n /**\n * Renders text selection\n * @private\n * @param {{ selectionStart: number, selectionEnd: number }} selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n _renderSelection(\n ctx: CanvasRenderingContext2D,\n selection: { selectionStart: number; selectionEnd: number },\n boundaries: CursorBoundaries,\n ) {\n const selectionStart = selection.selectionStart,\n selectionEnd = selection.selectionEnd,\n isJustify = this.textAlign.includes(JUSTIFY),\n start = this.get2DCursorLocation(selectionStart),\n end = this.get2DCursorLocation(selectionEnd),\n startLine = start.lineIndex,\n endLine = end.lineIndex,\n startChar = start.charIndex < 0 ? 0 : start.charIndex,\n endChar = end.charIndex < 0 ? 0 : end.charIndex;\n\n for (let i = startLine; i <= endLine; i++) {\n const lineOffset = this._getLineLeftOffset(i) || 0;\n let lineHeight = this.getHeightOfLine(i),\n realLineHeight = 0,\n boxStart = 0,\n boxEnd = 0;\n\n if (i === startLine) {\n boxStart = this.__charBounds[startLine][startChar].left;\n }\n if (i >= startLine && i < endLine) {\n boxEnd =\n isJustify && !this.isEndOfWrapping(i)\n ? this.width\n : this.getLineWidth(i) || 5; // WTF is this 5?\n } else if (i === endLine) {\n if (endChar === 0) {\n boxEnd = this.__charBounds[endLine][endChar].left;\n } else {\n const charSpacing = this._getWidthOfCharSpacing();\n boxEnd =\n this.__charBounds[endLine][endChar - 1].left +\n this.__charBounds[endLine][endChar - 1].width -\n charSpacing;\n }\n }\n realLineHeight = lineHeight;\n if (this.lineHeight < 1 || (i === endLine && this.lineHeight > 1)) {\n lineHeight /= this.lineHeight;\n }\n let drawStart = boundaries.left + lineOffset + boxStart,\n drawHeight = lineHeight,\n extraTop = 0;\n const drawWidth = boxEnd - boxStart;\n if (this.inCompositionMode) {\n ctx.fillStyle = this.compositionColor || 'black';\n drawHeight = 1;\n extraTop = lineHeight;\n } else {\n ctx.fillStyle = this.selectionColor;\n }\n if (this.direction === 'rtl') {\n if (\n this.textAlign === RIGHT ||\n this.textAlign === JUSTIFY ||\n this.textAlign === JUSTIFY_RIGHT\n ) {\n drawStart = this.width - drawStart - drawWidth;\n } else if (this.textAlign === LEFT || this.textAlign === JUSTIFY_LEFT) {\n drawStart = boundaries.left + lineOffset - boxEnd;\n } else if (\n this.textAlign === CENTER ||\n this.textAlign === JUSTIFY_CENTER\n ) {\n drawStart = boundaries.left + lineOffset - boxEnd;\n }\n }\n ctx.fillRect(\n drawStart,\n boundaries.top + boundaries.topOffset + extraTop,\n drawWidth,\n drawHeight,\n );\n boundaries.topOffset += realLineHeight;\n }\n }\n\n /**\n * High level function to know the height of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns fontSize of char at the current cursor\n * Unused from the library, is for the end user\n * @return {Number} Character font size\n */\n getCurrentCharFontSize(): number {\n const cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, 'fontSize');\n }\n\n /**\n * High level function to know the color of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns color (fill) of char at the current cursor\n * if the text object has a pattern or gradient for filler, it will return that.\n * Unused by the library, is for the end user\n * @return {String | TFiller} Character color (fill)\n */\n getCurrentCharColor(): string | TFiller | null {\n const cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, FILL);\n }\n\n /**\n * Returns the cursor position for the getCurrent.. functions\n * @private\n */\n _getCurrentCharIndex() {\n const cursorPosition = this.get2DCursorLocation(this.selectionStart, true),\n charIndex =\n cursorPosition.charIndex > 0 ? cursorPosition.charIndex - 1 : 0;\n return { l: cursorPosition.lineIndex, c: charIndex };\n }\n\n dispose() {\n this._exitEditing();\n this.draggableTextDelegate.dispose();\n super.dispose();\n }\n}\n\nclassRegistry.setClass(IText);\n// legacy\nclassRegistry.setClass(IText, 'i-text');\n","import type { TClassProperties, TOptions } from '../typedefs';\nimport { IText } from './IText/IText';\nimport { classRegistry } from '../ClassRegistry';\nimport { createTextboxDefaultControls } from '../controls/commonControls';\nimport { JUSTIFY } from './Text/constants';\nimport type { TextStyleDeclaration } from './Text/StyledText';\nimport type { SerializedITextProps, ITextProps } from './IText/IText';\nimport type { ITextEvents } from './IText/ITextBehavior';\nimport type { TextLinesInfo } from './Text/Text';\nimport type { Control } from '../controls/Control';\n\n// @TODO: Many things here are configuration related and shouldn't be on the class nor prototype\n// regexes, list of properties that are not suppose to change by instances, magic consts.\n// this will be a separated effort\nexport const textboxDefaultValues: Partial> = {\n minWidth: 20,\n dynamicMinWidth: 2,\n lockScalingFlip: true,\n noScaleCache: false,\n _wordJoiners: /[ \\t\\r]/,\n splitByGrapheme: false,\n};\n\nexport type GraphemeData = {\n wordsData: {\n word: string[];\n width: number;\n }[][];\n largestWordWidth: number;\n};\n\nexport type StyleMap = Record;\n\n// @TODO this is not complete\ninterface UniqueTextboxProps {\n minWidth: number;\n splitByGrapheme: boolean;\n dynamicMinWidth: number;\n _wordJoiners: RegExp;\n}\n\nexport interface SerializedTextboxProps\n extends SerializedITextProps,\n Pick {}\n\nexport interface TextboxProps extends ITextProps, UniqueTextboxProps {}\n\n/**\n * Textbox class, based on IText, allows the user to resize the text rectangle\n * and wraps lines automatically. Textboxes have their Y scaling locked, the\n * user can only change width. Height is adjusted automatically based on the\n * wrapping of lines.\n */\nexport class Textbox<\n Props extends TOptions = Partial,\n SProps extends SerializedTextboxProps = SerializedTextboxProps,\n EventSpec extends ITextEvents = ITextEvents,\n >\n extends IText\n implements UniqueTextboxProps\n{\n /**\n * Minimum width of textbox, in pixels.\n * @type Number\n * @default\n */\n declare minWidth: number;\n\n /**\n * Minimum calculated width of a textbox, in pixels.\n * fixed to 2 so that an empty textbox cannot go to 0\n * and is still selectable without text.\n * @type Number\n * @default\n */\n declare dynamicMinWidth: number;\n\n /**\n * Use this boolean property in order to split strings that have no white space concept.\n * this is a cheap way to help with chinese/japanese\n * @type Boolean\n * @since 2.6.0\n */\n declare splitByGrapheme: boolean;\n\n declare _wordJoiners: RegExp;\n\n declare _styleMap: StyleMap;\n\n declare isWrapping: boolean;\n\n static type = 'Textbox';\n\n static textLayoutProperties = [...IText.textLayoutProperties, 'width'];\n\n static ownDefaults = textboxDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Textbox.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n */\n constructor(text: string, options?: Props) {\n super(text, { ...Textbox.ownDefaults, ...options } as Props);\n }\n\n /**\n * Creates the default control object.\n * If you prefer to have on instance of controls shared among all objects\n * make this function return an empty object and add controls to the ownDefaults object\n */\n static createControls(): { controls: Record } {\n return { controls: createTextboxDefaultControls() };\n }\n\n /**\n * Unlike superclass's version of this function, Textbox does not update\n * its width.\n * @private\n * @override\n */\n initDimensions() {\n if (!this.initialized) {\n return;\n }\n this.isEditing && this.initDelayedCursor();\n this._clearCache();\n // clear dynamicMinWidth as it will be different after we re-wrap line\n this.dynamicMinWidth = 0;\n // wrap lines\n this._styleMap = this._generateStyleMap(this._splitText());\n // if after wrapping, the width is smaller than dynamicMinWidth, change the width and re-wrap\n if (this.dynamicMinWidth > this.width) {\n this._set('width', this.dynamicMinWidth);\n }\n if (this.textAlign.includes(JUSTIFY)) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n // clear cache and re-calculate height\n this.height = this.calcTextHeight();\n }\n\n /**\n * Generate an object that translates the style object so that it is\n * broken up by visual lines (new lines and automatic wrapping).\n * The original text styles object is broken up by actual lines (new lines only),\n * which is only sufficient for Text / IText\n * @private\n */\n _generateStyleMap(textInfo: TextLinesInfo): StyleMap {\n let realLineCount = 0,\n realLineCharCount = 0,\n charCount = 0;\n const map: StyleMap = {};\n\n for (let i = 0; i < textInfo.graphemeLines.length; i++) {\n if (textInfo.graphemeText[charCount] === '\\n' && i > 0) {\n realLineCharCount = 0;\n charCount++;\n realLineCount++;\n } else if (\n !this.splitByGrapheme &&\n this._reSpaceAndTab.test(textInfo.graphemeText[charCount]) &&\n i > 0\n ) {\n // this case deals with space's that are removed from end of lines when wrapping\n realLineCharCount++;\n charCount++;\n }\n\n map[i] = { line: realLineCount, offset: realLineCharCount };\n\n charCount += textInfo.graphemeLines[i].length;\n realLineCharCount += textInfo.graphemeLines[i].length;\n }\n\n return map;\n }\n\n /**\n * Returns true if object has a style property or has it on a specified line\n * @param {Number} lineIndex\n * @return {Boolean}\n */\n styleHas(property: keyof TextStyleDeclaration, lineIndex: number): boolean {\n if (this._styleMap && !this.isWrapping) {\n const map = this._styleMap[lineIndex];\n if (map) {\n lineIndex = map.line;\n }\n }\n return super.styleHas(property, lineIndex);\n }\n\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles(lineIndex: number): boolean {\n if (!this.styles) {\n return true;\n }\n let offset = 0,\n nextLineIndex = lineIndex + 1,\n nextOffset: number,\n shouldLimit = false;\n const map = this._styleMap[lineIndex],\n mapNextLine = this._styleMap[lineIndex + 1];\n if (map) {\n lineIndex = map.line;\n offset = map.offset;\n }\n if (mapNextLine) {\n nextLineIndex = mapNextLine.line;\n shouldLimit = nextLineIndex === lineIndex;\n nextOffset = mapNextLine.offset;\n }\n const obj =\n typeof lineIndex === 'undefined'\n ? this.styles\n : { line: this.styles[lineIndex] };\n for (const p1 in obj) {\n for (const p2 in obj[p1]) {\n const p2Number = parseInt(p2, 10);\n if (p2Number >= offset && (!shouldLimit || p2Number < nextOffset!)) {\n // eslint-disable-next-line no-unused-vars\n for (const p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n /**\n * @protected\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {TextStyleDeclaration} a style object reference to the existing one or a new empty object when undefined\n */\n _getStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n ): TextStyleDeclaration {\n if (this._styleMap && !this.isWrapping) {\n const map = this._styleMap[lineIndex];\n if (!map) {\n return {};\n }\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n }\n return super._getStyleDeclaration(lineIndex, charIndex);\n }\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n protected _setStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n style: object,\n ) {\n const map = this._styleMap[lineIndex];\n super._setStyleDeclaration(map.line, map.offset + charIndex, style);\n }\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n protected _deleteStyleDeclaration(lineIndex: number, charIndex: number) {\n const map = this._styleMap[lineIndex];\n super._deleteStyleDeclaration(map.line, map.offset + charIndex);\n }\n\n /**\n * probably broken need a fix\n * Returns the real style line that correspond to the wrapped lineIndex line\n * Used just to verify if the line does exist or not.\n * @param {Number} lineIndex\n * @returns {Boolean} if the line exists or not\n * @private\n */\n protected _getLineStyle(lineIndex: number): boolean {\n const map = this._styleMap[lineIndex];\n return !!this.styles[map.line];\n }\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @param {Object} style\n * @private\n */\n protected _setLineStyle(lineIndex: number) {\n const map = this._styleMap[lineIndex];\n super._setLineStyle(map.line);\n }\n\n /**\n * Wraps text using the 'width' property of Textbox. First this function\n * splits text on newlines, so we preserve newlines entered by the user.\n * Then it wraps each line using the width of the Textbox by calling\n * _wrapLine().\n * @param {Array} lines The string array of text that is split into lines\n * @param {Number} desiredWidth width you want to wrap to\n * @returns {Array} Array of lines\n */\n _wrapText(lines: string[], desiredWidth: number): string[][] {\n this.isWrapping = true;\n // extract all thewords and the widths to optimally wrap lines.\n const data = this.getGraphemeDataForRender(lines);\n const wrapped: string[][] = [];\n for (let i = 0; i < data.wordsData.length; i++) {\n wrapped.push(...this._wrapLine(i, desiredWidth, data));\n }\n this.isWrapping = false;\n return wrapped;\n }\n\n /**\n * For each line of text terminated by an hard line stop,\n * measure each word width and extract the largest word from all.\n * The returned words here are the one that at the end will be rendered.\n * @param {string[]} lines the lines we need to measure\n *\n */\n getGraphemeDataForRender(lines: string[]): GraphemeData {\n const splitByGrapheme = this.splitByGrapheme,\n infix = splitByGrapheme ? '' : ' ';\n\n let largestWordWidth = 0;\n\n const data = lines.map((line, lineIndex) => {\n let offset = 0;\n const wordsOrGraphemes = splitByGrapheme\n ? this.graphemeSplit(line)\n : this.wordSplit(line);\n\n if (wordsOrGraphemes.length === 0) {\n return [{ word: [], width: 0 }];\n }\n\n return wordsOrGraphemes.map((word: string) => {\n // if using splitByGrapheme words are already in graphemes.\n const graphemeArray = splitByGrapheme\n ? [word]\n : this.graphemeSplit(word);\n const width = this._measureWord(graphemeArray, lineIndex, offset);\n largestWordWidth = Math.max(width, largestWordWidth);\n offset += graphemeArray.length + infix.length;\n return { word: graphemeArray, width };\n });\n });\n\n return {\n wordsData: data,\n largestWordWidth,\n };\n }\n\n /**\n * Helper function to measure a string of text, given its lineIndex and charIndex offset\n * It gets called when charBounds are not available yet.\n * Override if necessary\n * Use with {@link Textbox#wordSplit}\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {String} text\n * @param {number} lineIndex\n * @param {number} charOffset\n * @returns {number}\n */\n _measureWord(word: string[], lineIndex: number, charOffset = 0): number {\n let width = 0,\n prevGrapheme;\n const skipLeft = true;\n for (let i = 0, len = word.length; i < len; i++) {\n const box = this._getGraphemeBox(\n word[i],\n lineIndex,\n i + charOffset,\n prevGrapheme,\n skipLeft,\n );\n width += box.kernedWidth;\n prevGrapheme = word[i];\n }\n return width;\n }\n\n /**\n * Override this method to customize word splitting\n * Use with {@link Textbox#_measureWord}\n * @param {string} value\n * @returns {string[]} array of words\n */\n wordSplit(value: string): string[] {\n return value.split(this._wordJoiners);\n }\n\n /**\n * Wraps a line of text using the width of the Textbox as desiredWidth\n * and leveraging the known width o words from GraphemeData\n * @private\n * @param {Number} lineIndex\n * @param {Number} desiredWidth width you want to wrap the line to\n * @param {GraphemeData} graphemeData an object containing all the lines' words width.\n * @param {Number} reservedSpace space to remove from wrapping for custom functionalities\n * @returns {Array} Array of line(s) into which the given text is wrapped\n * to.\n */\n _wrapLine(\n lineIndex: number,\n desiredWidth: number,\n { largestWordWidth, wordsData }: GraphemeData,\n reservedSpace = 0,\n ): string[][] {\n const additionalSpace = this._getWidthOfCharSpacing(),\n splitByGrapheme = this.splitByGrapheme,\n graphemeLines = [],\n infix = splitByGrapheme ? '' : ' ';\n\n let lineWidth = 0,\n line: string[] = [],\n // spaces in different languages?\n offset = 0,\n infixWidth = 0,\n lineJustStarted = true;\n\n desiredWidth -= reservedSpace;\n\n const maxWidth = Math.max(\n desiredWidth,\n largestWordWidth,\n this.dynamicMinWidth,\n );\n // layout words\n const data = wordsData[lineIndex];\n offset = 0;\n let i;\n for (i = 0; i < data.length; i++) {\n const { word, width: wordWidth } = data[i];\n offset += word.length;\n\n lineWidth += infixWidth + wordWidth - additionalSpace;\n if (lineWidth > maxWidth && !lineJustStarted) {\n graphemeLines.push(line);\n line = [];\n lineWidth = wordWidth;\n lineJustStarted = true;\n } else {\n lineWidth += additionalSpace;\n }\n\n if (!lineJustStarted && !splitByGrapheme) {\n line.push(infix);\n }\n line = line.concat(word);\n\n infixWidth = splitByGrapheme\n ? 0\n : this._measureWord([infix], lineIndex, offset);\n offset++;\n lineJustStarted = false;\n }\n\n i && graphemeLines.push(line);\n\n // TODO: this code is probably not necessary anymore.\n // it can be moved out of this function since largestWordWidth is now\n // known in advance\n if (largestWordWidth + reservedSpace > this.dynamicMinWidth) {\n this.dynamicMinWidth = largestWordWidth - additionalSpace + reservedSpace;\n }\n return graphemeLines;\n }\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @param {Number} lineIndex text to split\n * @return {Boolean}\n */\n isEndOfWrapping(lineIndex: number): boolean {\n if (!this._styleMap[lineIndex + 1]) {\n // is last line, return true;\n return true;\n }\n if (this._styleMap[lineIndex + 1].line !== this._styleMap[lineIndex].line) {\n // this is last line before a line break, return true;\n return true;\n }\n return false;\n }\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * This is important only for splitByGrapheme at the end of wrapping.\n * If we are not wrapping the offset is always 1\n * @return Number\n */\n missingNewlineOffset(lineIndex: number, skipWrapping?: boolean): 0 | 1 {\n if (this.splitByGrapheme && !skipWrapping) {\n return this.isEndOfWrapping(lineIndex) ? 1 : 0;\n }\n return 1;\n }\n\n /**\n * Gets lines of text to render in the Textbox. This function calculates\n * text wrapping on the fly every time it is called.\n * @param {String} text text to split\n * @returns {Array} Array of lines in the Textbox.\n * @override\n */\n _splitTextIntoLines(text: string) {\n const newText = super._splitTextIntoLines(text),\n graphemeLines = this._wrapText(newText.lines, this.width),\n lines = new Array(graphemeLines.length);\n for (let i = 0; i < graphemeLines.length; i++) {\n lines[i] = graphemeLines[i].join('');\n }\n newText.lines = lines;\n newText.graphemeLines = graphemeLines;\n return newText;\n }\n\n getMinWidth() {\n return Math.max(this.minWidth, this.dynamicMinWidth);\n }\n\n _removeExtraneousStyles() {\n const linesToKeep = new Map();\n for (const prop in this._styleMap) {\n const propNumber = parseInt(prop, 10);\n if (this._textLines[propNumber]) {\n const lineIndex = this._styleMap[prop].line;\n linesToKeep.set(`${lineIndex}`, true);\n }\n }\n for (const prop in this.styles) {\n if (!linesToKeep.has(prop)) {\n delete this.styles[prop];\n }\n }\n }\n\n /**\n * Returns object representation of an instance\n * @method toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([\n 'minWidth',\n 'splitByGrapheme',\n ...propertiesToInclude,\n ] as K[]) as Pick & SProps;\n }\n}\n\nclassRegistry.setClass(Textbox);\n","import { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport { sendPointToPlane } from '../../util/misc/planeChange';\nimport type { LayoutStrategyResult, StrictLayoutContext } from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { getObjectBounds } from './utils';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will adjust the bounding box to match the clip path bounding box.\n */\nexport class ClipPathLayout extends LayoutStrategy {\n static readonly type = 'clip-path';\n\n shouldPerformLayout(context: StrictLayoutContext): boolean {\n return !!context.target.clipPath && super.shouldPerformLayout(context);\n }\n\n shouldLayoutClipPath() {\n return false;\n }\n\n calcLayoutResult(\n context: StrictLayoutContext,\n objects: FabricObject[],\n ): LayoutStrategyResult | undefined {\n const { target } = context;\n const { clipPath, group } = target;\n if (!clipPath || !this.shouldPerformLayout(context)) {\n return;\n }\n // TODO: remove stroke calculation from this case\n const { width, height } = makeBoundingBoxFromPoints(\n getObjectBounds(target, clipPath as FabricObject),\n );\n const size = new Point(width, height);\n if (clipPath.absolutePositioned) {\n // we want the center point to exist in group's containing plane\n const clipPathCenter = sendPointToPlane(\n clipPath.getRelativeCenterPoint(),\n undefined,\n group ? group.calcTransformMatrix() : undefined,\n );\n return {\n center: clipPathCenter,\n size,\n };\n } else {\n // we want the center point to exist in group's containing plane, so we send it upwards\n const clipPathCenter = clipPath\n .getRelativeCenterPoint()\n .transform(target.calcOwnMatrix(), true);\n if (this.shouldPerformLayout(context)) {\n // the clip path is positioned relative to the group's center which is affected by the bbox\n // so we first calculate the bbox\n const { center = new Point(), correction = new Point() } =\n this.calcBoundingBox(objects, context) || {};\n return {\n center: center.add(clipPathCenter),\n correction: correction.subtract(clipPathCenter),\n size,\n };\n } else {\n return {\n center: target.getRelativeCenterPoint().add(clipPathCenter),\n size,\n };\n }\n }\n }\n}\n\nclassRegistry.setClass(ClipPathLayout);\n","import { Point } from '../../Point';\nimport type {\n InitializationLayoutContext,\n LayoutStrategyResult,\n StrictLayoutContext,\n} from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will keep target's initial size.\n */\nexport class FixedLayout extends LayoutStrategy {\n static readonly type = 'fixed';\n\n /**\n * @override respect target's initial size\n */\n getInitialSize(\n { target }: StrictLayoutContext & InitializationLayoutContext,\n { size }: Pick,\n ): Point {\n return new Point(target.width || size.x, target.height || size.y);\n }\n}\n\nclassRegistry.setClass(FixedLayout);\n","import { LayoutManager } from './LayoutManager';\nimport type { RegistrationContext, StrictLayoutContext } from './types';\nimport type { Group } from '../shapes/Group';\n\n/**\n * Today the LayoutManager class also takes care of subscribing event handlers\n * to update the group layout when the group is interactive and a transform is applied\n * to a child object.\n * The ActiveSelection is never interactive, but it could contain objects from\n * groups that are.\n * The standard LayoutManager would subscribe the children of the activeSelection to\n * perform layout changes to the active selection itself, what we need instead is that\n * the transformation applied to the active selection will trigger changes to the\n * original group of the children ( the one referenced under the parent property )\n * This subclass of the LayoutManager has a single duty to fill the gap of this difference.`\n */\nexport class ActiveSelectionLayoutManager extends LayoutManager {\n subscribeTargets(\n context: RegistrationContext & Partial,\n ): void {\n const activeSelection = context.target;\n const parents = context.targets.reduce((parents, target) => {\n target.parent && parents.add(target.parent);\n return parents;\n }, new Set());\n parents.forEach((parent) => {\n parent.layoutManager.subscribeTargets({\n target: parent,\n targets: [activeSelection],\n });\n });\n }\n\n /**\n * unsubscribe from parent only if all its children were deselected\n */\n unsubscribeTargets(\n context: RegistrationContext & Partial,\n ): void {\n const activeSelection = context.target;\n const selectedObjects = activeSelection.getObjects();\n const parents = context.targets.reduce((parents, target) => {\n target.parent && parents.add(target.parent);\n return parents;\n }, new Set());\n parents.forEach((parent) => {\n !selectedObjects.some((object) => object.parent === parent) &&\n parent.layoutManager.unsubscribeTargets({\n target: parent,\n targets: [activeSelection],\n });\n });\n }\n}\n","import type { ControlRenderingStyleOverride } from '../controls/controlRendering';\nimport { classRegistry } from '../ClassRegistry';\nimport type { GroupProps } from './Group';\nimport { Group } from './Group';\nimport type { FabricObject } from './Object/FabricObject';\nimport {\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n} from '../LayoutManager/constants';\nimport type { TClassProperties } from '../typedefs';\nimport { log } from '../util/internals/console';\nimport { ActiveSelectionLayoutManager } from '../LayoutManager/ActiveSelectionLayoutManager';\n\nexport type MultiSelectionStacking = 'canvas-stacking' | 'selection-order';\n\nexport interface ActiveSelectionOptions extends GroupProps {\n multiSelectionStacking: MultiSelectionStacking;\n}\n\nconst activeSelectionDefaultValues: Partial> =\n {\n multiSelectionStacking: 'canvas-stacking',\n };\n\n/**\n * Used by Canvas to manage selection.\n *\n * @example\n * class MyActiveSelection extends ActiveSelection {\n * ...\n * }\n *\n * // override the default `ActiveSelection` class\n * classRegistry.setClass(MyActiveSelection)\n */\nexport class ActiveSelection extends Group {\n static type = 'ActiveSelection';\n\n static ownDefaults: Record = activeSelectionDefaultValues;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...ActiveSelection.ownDefaults };\n }\n\n /**\n * The ActiveSelection needs to use the ActiveSelectionLayoutManager\n * or selections on interactive groups may be broken\n */\n declare layoutManager: ActiveSelectionLayoutManager;\n\n /**\n * controls how selected objects are added during a multiselection event\n * - `canvas-stacking` adds the selected object to the active selection while respecting canvas object stacking order\n * - `selection-order` adds the selected object to the top of the stack,\n * meaning that the stack is ordered by the order in which objects were selected\n * @default `canvas-stacking`\n */\n declare multiSelectionStacking: MultiSelectionStacking;\n\n constructor(\n objects: FabricObject[] = [],\n options: Partial = {},\n ) {\n super();\n Object.assign(this, ActiveSelection.ownDefaults);\n this.setOptions(options);\n const { left, top, layoutManager } = options;\n this.groupInit(objects, {\n left,\n top,\n layoutManager: layoutManager ?? new ActiveSelectionLayoutManager(),\n });\n }\n\n /**\n * @private\n */\n _shouldSetNestedCoords() {\n return true;\n }\n\n /**\n * @private\n * @override we don't want the selection monitor to be active\n */\n __objectSelectionMonitor() {\n // noop\n }\n\n /**\n * Adds objects with respect to {@link multiSelectionStacking}\n * @param targets object to add to selection\n */\n multiSelectAdd(...targets: FabricObject[]) {\n if (this.multiSelectionStacking === 'selection-order') {\n this.add(...targets);\n } else {\n // respect object stacking as it is on canvas\n // perf enhancement for large ActiveSelection: consider a binary search of `isInFrontOf`\n targets.forEach((target) => {\n const index = this._objects.findIndex((obj) => obj.isInFrontOf(target));\n const insertAt =\n index === -1\n ? // `target` is in front of all other objects\n this.size()\n : index;\n this.insertAt(insertAt, target);\n });\n }\n }\n\n /**\n * @override block ancestors/descendants of selected objects from being selected to prevent a circular object tree\n */\n canEnterGroup(object: FabricObject) {\n if (\n this.getObjects().some(\n (o) => o.isDescendantOf(object) || object.isDescendantOf(o),\n )\n ) {\n // prevent circular object tree\n log(\n 'error',\n 'ActiveSelection: circular object trees are not supported, this call has no effect',\n );\n return false;\n }\n\n return super.canEnterGroup(object);\n }\n\n /**\n * Change an object so that it can be part of an active selection.\n * this method is called by multiselectAdd from canvas code.\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n // This condition check that the object has currently a group, and the group\n // is also its parent, meaning that is not in an active selection, but is\n // in a normal group.\n if (object.parent && object.parent === object.group) {\n // Disconnect the object from the group functionalities, but keep the ref parent intact\n // for later re-enter\n object.parent._exitGroup(object);\n // in this case the object is probably inside an active selection.\n } else if (object.group && object.parent !== object.group) {\n // in this case group.remove will also clear the old parent reference.\n object.group.remove(object);\n }\n // enter the active selection from a render perspective\n // the object will be in the objects array of both the ActiveSelection and the Group\n // but referenced in the group's _activeObjects so that it won't be rendered twice.\n this._enterGroup(object, removeParentTransform);\n }\n\n /**\n * we want objects to retain their canvas ref when exiting instance\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n this._exitGroup(object, removeParentTransform);\n // return to parent\n object.parent && object.parent._enterGroup(object, true);\n }\n\n /**\n * @private\n * @param {'added'|'removed'} type\n * @param {FabricObject[]} targets\n */\n _onAfterObjectsChange(type: 'added' | 'removed', targets: FabricObject[]) {\n super._onAfterObjectsChange(type, targets);\n const groups = new Set();\n targets.forEach((object) => {\n const { parent } = object;\n parent && groups.add(parent);\n });\n if (type === LAYOUT_TYPE_REMOVED) {\n // invalidate groups' layout and mark as dirty\n groups.forEach((group) => {\n group._onAfterObjectsChange(LAYOUT_TYPE_ADDED, targets);\n });\n } else {\n // mark groups as dirty\n groups.forEach((group) => {\n group._set('dirty', true);\n });\n }\n }\n\n /**\n * @override remove all objects\n */\n onDeselect() {\n this.removeAll();\n return false;\n }\n\n /**\n * Returns string representation of a group\n * @return {String}\n */\n toString() {\n return `#`;\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * @return {Boolean}\n */\n shouldCache() {\n return false;\n }\n\n /**\n * Check if this group or its parent group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache() {\n return false;\n }\n\n /**\n * Renders controls and borders for the object\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [styleOverride] properties to override the object style\n * @param {Object} [childrenOverride] properties to override the children overrides\n */\n _renderControls(\n ctx: CanvasRenderingContext2D,\n styleOverride?: ControlRenderingStyleOverride,\n childrenOverride?: ControlRenderingStyleOverride,\n ) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n const options = {\n hasControls: false,\n ...childrenOverride,\n forActiveSelection: true,\n };\n for (let i = 0; i < this._objects.length; i++) {\n this._objects[i]._renderControls(ctx, options);\n }\n super._renderControls(ctx, styleOverride);\n ctx.restore();\n }\n}\n\nclassRegistry.setClass(ActiveSelection);\nclassRegistry.setClass(ActiveSelection, 'activeSelection');\n","/**\n * Canvas 2D filter backend.\n */\nimport type { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TPipelineResources } from './typedefs';\n\nexport class Canvas2dFilterBackend {\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: TPipelineResources = {};\n\n /**\n * Apply a set of filters against a source image and draw the filtered output\n * to the provided destination canvas.\n *\n * @param {EnhancedFilter} filters The filter to apply.\n * @param {HTMLImageElement|HTMLCanvasElement} sourceElement The source to be filtered.\n * @param {Number} sourceWidth The width of the source input.\n * @param {Number} sourceHeight The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n */\n applyFilters(\n filters: BaseFilter>[],\n sourceElement: CanvasImageSource,\n sourceWidth: number,\n sourceHeight: number,\n targetCanvas: HTMLCanvasElement,\n ): T2DPipelineState | void {\n const ctx = targetCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.drawImage(sourceElement, 0, 0, sourceWidth, sourceHeight);\n const imageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n const originalImageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n const pipelineState: T2DPipelineState = {\n sourceWidth,\n sourceHeight,\n imageData,\n originalEl: sourceElement,\n originalImageData,\n canvasEl: targetCanvas,\n ctx,\n filterBackend: this,\n };\n filters.forEach((filter) => {\n filter.applyTo(pipelineState);\n });\n const { imageData: imageDataPostFilter } = pipelineState;\n if (\n imageDataPostFilter.width !== sourceWidth ||\n imageDataPostFilter.height !== sourceHeight\n ) {\n targetCanvas.width = imageDataPostFilter.width;\n targetCanvas.height = imageDataPostFilter.height;\n }\n ctx.putImageData(imageDataPostFilter, 0, 0);\n return pipelineState;\n }\n}\n","import { config } from '../config';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type {\n TWebGLPipelineState,\n TProgramCache,\n TTextureCache,\n TPipelineResources,\n} from './typedefs';\nimport type { BaseFilter } from './BaseFilter';\n\nexport class WebGLFilterBackend {\n declare tileSize: number;\n\n /**\n * Define ...\n **/\n aPosition: Float32Array = new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]);\n\n /**\n * If GLPut data is the fastest operation, or if forced, this buffer will be used\n * to transfer the data back in the 2d logic\n **/\n declare imageBuffer?: ArrayBuffer;\n\n declare canvas: HTMLCanvasElement;\n\n /**\n * The Webgl context that will execute the operations for filtering\n **/\n declare gl: WebGLRenderingContext;\n\n /**\n * Keyed map for shader cache\n **/\n declare programCache: TProgramCache;\n\n /**\n * Keyed map for texture cache\n **/\n declare textureCache: TTextureCache;\n\n /**\n * Contains GPU info for debug\n **/\n declare gpuInfo: any;\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: TPipelineResources = {};\n\n constructor({ tileSize = config.textureSize } = {}) {\n this.tileSize = tileSize;\n this.setupGLContext(tileSize, tileSize);\n this.captureGPUInfo();\n }\n\n /**\n * Setup a WebGL context suitable for filtering, and bind any needed event handlers.\n */\n setupGLContext(width: number, height: number): void {\n this.dispose();\n this.createWebGLCanvas(width, height);\n }\n\n /**\n * Create a canvas element and associated WebGL context and attaches them as\n * class properties to the GLFilterBackend class.\n */\n createWebGLCanvas(width: number, height: number): void {\n const canvas = createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n const glOptions = {\n alpha: true,\n premultipliedAlpha: false,\n depth: false,\n stencil: false,\n antialias: false,\n },\n gl = canvas.getContext('webgl', glOptions) as WebGLRenderingContext;\n\n if (!gl) {\n return;\n }\n gl.clearColor(0, 0, 0, 0);\n // this canvas can fire webglcontextlost and webglcontextrestored\n this.canvas = canvas;\n this.gl = gl;\n }\n\n /**\n * Attempts to apply the requested filters to the source provided, drawing the filtered output\n * to the provided target canvas.\n *\n * @param {Array} filters The filters to apply.\n * @param {TexImageSource} source The source to be filtered.\n * @param {Number} width The width of the source input.\n * @param {Number} height The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n * @param {String|undefined} cacheKey A key used to cache resources related to the source. If\n * omitted, caching will be skipped.\n */\n applyFilters(\n filters: BaseFilter>[],\n source: TexImageSource,\n width: number,\n height: number,\n targetCanvas: HTMLCanvasElement,\n cacheKey?: string,\n ): TWebGLPipelineState | undefined {\n const gl = this.gl;\n const ctx = targetCanvas.getContext('2d');\n if (!gl || !ctx) {\n return;\n }\n let cachedTexture;\n if (cacheKey) {\n cachedTexture = this.getCachedTexture(cacheKey, source);\n }\n const pipelineState: TWebGLPipelineState = {\n originalWidth:\n (source as HTMLImageElement).width ||\n // @ts-expect-error is this a bug? should this be naturalWidth? or is this the pipeline state?\n (source as HTMLImageElement).originalWidth ||\n 0,\n originalHeight:\n (source as HTMLImageElement).height ||\n // @ts-expect-error is this a bug? should this be naturalHeight? or is this the pipeline state?\n (source as HTMLImageElement).originalHeight ||\n 0,\n sourceWidth: width,\n sourceHeight: height,\n destinationWidth: width,\n destinationHeight: height,\n context: gl,\n sourceTexture: this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined,\n ),\n targetTexture: this.createTexture(gl, width, height),\n originalTexture:\n cachedTexture ||\n this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined,\n )!,\n passes: filters.length,\n webgl: true,\n aPosition: this.aPosition,\n programCache: this.programCache,\n pass: 0,\n filterBackend: this,\n targetCanvas: targetCanvas,\n };\n const tempFbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, tempFbo);\n filters.forEach((filter: any) => {\n filter && filter.applyTo(pipelineState);\n });\n resizeCanvasIfNeeded(pipelineState);\n this.copyGLTo2D(gl, pipelineState);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.deleteTexture(pipelineState.sourceTexture);\n gl.deleteTexture(pipelineState.targetTexture);\n gl.deleteFramebuffer(tempFbo);\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n return pipelineState;\n }\n\n /**\n * Detach event listeners, remove references, and clean up caches.\n */\n dispose() {\n if (this.canvas) {\n // we are disposing, we don't care about the fact\n // that the canvas shouldn't be null.\n // @ts-expect-error disposing\n this.canvas = null;\n // @ts-expect-error disposing\n this.gl = null;\n }\n this.clearWebGLCaches();\n }\n\n /**\n * Wipe out WebGL-related caches.\n */\n clearWebGLCaches() {\n this.programCache = {};\n this.textureCache = {};\n }\n\n /**\n * Create a WebGL texture object.\n *\n * Accepts specific dimensions to initialize the texture to or a source image.\n *\n * @param {WebGLRenderingContext} gl The GL context to use for creating the texture.\n * @param {number} width The width to initialize the texture at.\n * @param {number} height The height to initialize the texture.\n * @param {TexImageSource} textureImageSource A source for the texture data.\n * @param {number} filter gl.NEAREST default or gl.LINEAR filters for the texture.\n * This filter is very useful for LUTs filters. If you need interpolation use gl.LINEAR\n * @returns {WebGLTexture}\n */\n createTexture(\n gl: WebGLRenderingContext,\n width: number,\n height: number,\n textureImageSource?: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR'],\n ) {\n const {\n NEAREST,\n TEXTURE_2D,\n RGBA,\n UNSIGNED_BYTE,\n CLAMP_TO_EDGE,\n TEXTURE_MAG_FILTER,\n TEXTURE_MIN_FILTER,\n TEXTURE_WRAP_S,\n TEXTURE_WRAP_T,\n } = gl;\n const texture = gl.createTexture();\n gl.bindTexture(TEXTURE_2D, texture);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE);\n if (textureImageSource) {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n RGBA,\n UNSIGNED_BYTE,\n textureImageSource,\n );\n } else {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n width,\n height,\n 0,\n RGBA,\n UNSIGNED_BYTE,\n null,\n );\n }\n return texture;\n }\n\n /**\n * Can be optionally used to get a texture from the cache array\n *\n * If an existing texture is not found, a new texture is created and cached.\n *\n * @param {String} uniqueId A cache key to use to find an existing texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source to use to create the\n * texture cache entry if one does not already exist.\n */\n getCachedTexture(\n uniqueId: string,\n textureImageSource: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR'],\n ): WebGLTexture | null {\n const { textureCache } = this;\n if (textureCache[uniqueId]) {\n return textureCache[uniqueId];\n } else {\n const texture = this.createTexture(\n this.gl,\n (textureImageSource as HTMLImageElement).width,\n (textureImageSource as HTMLImageElement).height,\n textureImageSource,\n filter,\n );\n if (texture) {\n textureCache[uniqueId] = texture;\n }\n return texture;\n }\n }\n\n /**\n * Clear out cached resources related to a source image that has been\n * filtered previously.\n *\n * @param {String} cacheKey The cache key provided when the source image was filtered.\n */\n evictCachesForKey(cacheKey: string) {\n if (this.textureCache[cacheKey]) {\n this.gl.deleteTexture(this.textureCache[cacheKey]);\n delete this.textureCache[cacheKey];\n }\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas.\n *\n * The WebGL canvas is assumed to be upside down, with the top-left pixel of the\n * desired output image appearing in the bottom-left corner of the WebGL canvas.\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2D(gl: WebGLRenderingContext, pipelineState: TWebGLPipelineState) {\n const glCanvas = gl.canvas,\n targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.translate(0, targetCanvas.height); // move it down again\n ctx.scale(1, -1); // vertical flip\n // where is my image on the big glcanvas?\n const sourceY = glCanvas.height - targetCanvas.height;\n ctx.drawImage(\n glCanvas,\n 0,\n sourceY,\n targetCanvas.width,\n targetCanvas.height,\n 0,\n 0,\n targetCanvas.width,\n targetCanvas.height,\n );\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas using 2d canvas' putImageData\n * API. Measurably faster than using ctx.drawImage in Firefox (version 54 on OSX Sierra).\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2DPutImageData(\n this: Required,\n gl: WebGLRenderingContext,\n pipelineState: TWebGLPipelineState,\n ) {\n const targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d'),\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight,\n numBytes = dWidth * dHeight * 4;\n if (!ctx) {\n return;\n }\n const u8 = new Uint8Array(this.imageBuffer, 0, numBytes);\n const u8Clamped = new Uint8ClampedArray(this.imageBuffer, 0, numBytes);\n\n gl.readPixels(0, 0, dWidth, dHeight, gl.RGBA, gl.UNSIGNED_BYTE, u8);\n const imgData = new ImageData(u8Clamped, dWidth, dHeight);\n ctx.putImageData(imgData, 0, 0);\n }\n\n /**\n * Attempt to extract GPU information strings from a WebGL context.\n *\n * Useful information when debugging or blacklisting specific GPUs.\n *\n * @returns {Object} A GPU info object with renderer and vendor strings.\n */\n captureGPUInfo() {\n if (this.gpuInfo) {\n return this.gpuInfo;\n }\n const gl = this.gl,\n gpuInfo = { renderer: '', vendor: '' };\n if (!gl) {\n return gpuInfo;\n }\n const ext = gl.getExtension('WEBGL_debug_renderer_info');\n if (ext) {\n const renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);\n const vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);\n if (renderer) {\n gpuInfo.renderer = renderer.toLowerCase();\n }\n if (vendor) {\n gpuInfo.vendor = vendor.toLowerCase();\n }\n }\n this.gpuInfo = gpuInfo;\n return gpuInfo;\n }\n}\n\nfunction resizeCanvasIfNeeded(pipelineState: TWebGLPipelineState): void {\n const targetCanvas = pipelineState.targetCanvas,\n width = targetCanvas.width,\n height = targetCanvas.height,\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight;\n\n if (width !== dWidth || height !== dHeight) {\n targetCanvas.width = dWidth;\n targetCanvas.height = dHeight;\n }\n}\n","import { config } from '../config';\nimport { getEnv } from '../env';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { Canvas2dFilterBackend } from './Canvas2dFilterBackend';\nimport { WebGLFilterBackend } from './WebGLFilterBackend';\n\nexport type FilterBackend = WebGLFilterBackend | Canvas2dFilterBackend;\n\nlet filterBackend: FilterBackend;\n\n/**\n * Verifies if it is possible to initialize webgl or fallback on a canvas2d filtering backend\n */\nexport function initFilterBackend(): FilterBackend {\n const { WebGLProbe } = getEnv();\n WebGLProbe.queryWebGL(createCanvasElement());\n if (config.enableGLFiltering && WebGLProbe.isSupported(config.textureSize)) {\n return new WebGLFilterBackend({ tileSize: config.textureSize });\n } else {\n return new Canvas2dFilterBackend();\n }\n}\n\n/**\n * Get the current fabricJS filter backend or initialize one if not available yet\n * @param [strict] pass `true` to create the backend if it wasn't created yet (default behavior),\n * pass `false` to get the backend ref without mutating it\n */\nexport function getFilterBackend(strict = true): FilterBackend {\n if (!filterBackend && strict) {\n filterBackend = initFilterBackend();\n }\n return filterBackend;\n}\n\nexport function setFilterBackend(backend: FilterBackend) {\n filterBackend = backend;\n}\n","import { getFabricDocument, getEnv } from '../env';\nimport type { BaseFilter } from '../filters/BaseFilter';\nimport { getFilterBackend } from '../filters/FilterBackend';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type {\n TClassProperties,\n TCrossOrigin,\n TSize,\n Abortable,\n TOptions,\n} from '../typedefs';\nimport { uid } from '../util/internals/uid';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { findScaleToCover, findScaleToFit } from '../util/misc/findScaleTo';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\nimport {\n enlivenObjectEnlivables,\n enlivenObjects,\n loadImage,\n} from '../util/misc/objectEnlive';\nimport { parsePreserveAspectRatioAttribute } from '../util/misc/svgParsing';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { WebGLFilterBackend } from '../filters/WebGLFilterBackend';\nimport { FILL, NONE } from '../constants';\nimport { getDocumentFromElement } from '../util/dom_misc';\nimport type { CSSRules } from '../parser/typedefs';\nimport type { Resize } from '../filters/Resize';\nimport type { TCachedFabricObject } from './Object/Object';\nimport { log } from '../util/internals/console';\n\n// @todo Would be nice to have filtering code not imported directly.\n\nexport type ImageSource =\n | HTMLImageElement\n | HTMLVideoElement\n | HTMLCanvasElement;\n\ninterface UniqueImageProps {\n srcFromAttribute: boolean;\n minimumScaleTrigger: number;\n cropX: number;\n cropY: number;\n imageSmoothing: boolean;\n filters: BaseFilter>[];\n resizeFilter?: Resize;\n}\n\nexport const imageDefaultValues: Partial> = {\n strokeWidth: 0,\n srcFromAttribute: false,\n minimumScaleTrigger: 0.5,\n cropX: 0,\n cropY: 0,\n imageSmoothing: true,\n};\n\nexport interface SerializedImageProps extends SerializedObjectProps {\n src: string;\n crossOrigin: TCrossOrigin;\n filters: any[];\n resizeFilter?: any;\n cropX: number;\n cropY: number;\n}\n\nexport interface ImageProps extends FabricObjectProps, UniqueImageProps {}\n\nconst IMAGE_PROPS = ['cropX', 'cropY'] as const;\n\n/**\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#images}\n */\nexport class FabricImage<\n Props extends TOptions = Partial,\n SProps extends SerializedImageProps = SerializedImageProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements ImageProps\n{\n /**\n * When calling {@link FabricImage.getSrc}, return value from element src with `element.getAttribute('src')`.\n * This allows for relative urls as image src.\n * @since 2.7.0\n * @type Boolean\n * @default false\n */\n declare srcFromAttribute: boolean;\n\n /**\n * private\n * contains last value of scaleX to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n protected _lastScaleX = 1;\n\n /**\n * private\n * contains last value of scaleY to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n protected _lastScaleY = 1;\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n protected _filterScalingX = 1;\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n protected _filterScalingY = 1;\n\n /**\n * minimum scale factor under which any resizeFilter is triggered to resize the image\n * 0 will disable the automatic resize. 1 will trigger automatically always.\n * number bigger than 1 are not implemented yet.\n * @type Number\n */\n declare minimumScaleTrigger: number;\n\n /**\n * key used to retrieve the texture representing this image\n * @since 2.0.0\n * @type String\n * @default\n */\n declare cacheKey: string;\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n declare cropX: number;\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n declare cropY: number;\n\n /**\n * Indicates whether this canvas will use image smoothing when painting this image.\n * Also influence if the cacheCanvas for this image uses imageSmoothing\n * @since 4.0.0-beta.11\n * @type Boolean\n * @default\n */\n declare imageSmoothing: boolean;\n\n declare preserveAspectRatio: string;\n\n protected declare src: string;\n\n declare filters: BaseFilter>[];\n declare resizeFilter: Resize;\n\n declare _element: ImageSource;\n declare _filteredEl?: HTMLCanvasElement;\n declare _originalElement: ImageSource;\n\n static type = 'Image';\n\n static cacheProperties = [...cacheProperties, ...IMAGE_PROPS];\n\n static ownDefaults = imageDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...FabricImage.ownDefaults,\n };\n }\n /**\n * Constructor\n * Image can be initialized with any canvas drawable or a string.\n * The string should be a url and will be loaded as an image.\n * Canvas and Image element work out of the box, while videos require extra code to work.\n * Please check video element events for seeking.\n * @param {ImageSource | string} element Image element\n * @param {Object} [options] Options object\n */\n constructor(elementId: string, options?: Props);\n constructor(element: ImageSource, options?: Props);\n constructor(arg0: ImageSource | string, options?: Props) {\n super();\n this.filters = [];\n Object.assign(this, FabricImage.ownDefaults);\n this.setOptions(options);\n this.cacheKey = `texture${uid()}`;\n this.setElement(\n typeof arg0 === 'string'\n ? ((\n (this.canvas && getDocumentFromElement(this.canvas.getElement())) ||\n getFabricDocument()\n ).getElementById(arg0) as ImageSource)\n : arg0,\n options,\n );\n }\n\n /**\n * Returns image element which this instance if based on\n */\n getElement() {\n return this._element;\n }\n\n /**\n * Sets image element for this instance to a specified one.\n * If filters defined they are applied to new image.\n * You might need to call `canvas.renderAll` and `object.setCoords` after replacing, to render new image and update controls area.\n * @param {HTMLImageElement} element\n * @param {Partial} [size] Options object\n */\n setElement(element: ImageSource, size: Partial = {}) {\n this.removeTexture(this.cacheKey);\n this.removeTexture(`${this.cacheKey}_filtered`);\n this._element = element;\n this._originalElement = element;\n this._setWidthHeight(size);\n element.classList.add(FabricImage.CSS_CANVAS);\n if (this.filters.length !== 0) {\n this.applyFilters();\n }\n // resizeFilters work on the already filtered copy.\n // we need to apply resizeFilters AFTER normal filters.\n // applyResizeFilters is run more often than normal filters\n // and is triggered by user interactions rather than dev code\n if (this.resizeFilter) {\n this.applyResizeFilters();\n }\n }\n\n /**\n * Delete a single texture if in webgl mode\n */\n removeTexture(key: string) {\n const backend = getFilterBackend(false);\n if (backend instanceof WebGLFilterBackend) {\n backend.evictCachesForKey(key);\n }\n }\n\n /**\n * Delete textures, reference to elements and eventually JSDOM cleanup\n */\n dispose() {\n super.dispose();\n this.removeTexture(this.cacheKey);\n this.removeTexture(`${this.cacheKey}_filtered`);\n this._cacheContext = null;\n (\n ['_originalElement', '_element', '_filteredEl', '_cacheCanvas'] as const\n ).forEach((elementKey) => {\n const el = this[elementKey];\n el && getEnv().dispose(el);\n // @ts-expect-error disposing\n this[elementKey] = undefined;\n });\n }\n\n /**\n * Get the crossOrigin value (of the corresponding image element)\n */\n getCrossOrigin(): string | null {\n return (\n this._originalElement &&\n ((this._originalElement as any).crossOrigin || null)\n );\n }\n\n /**\n * Returns original size of an image\n */\n getOriginalSize() {\n const element = this.getElement() as any;\n if (!element) {\n return {\n width: 0,\n height: 0,\n };\n }\n return {\n width: element.naturalWidth || element.width,\n height: element.naturalHeight || element.height,\n };\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _stroke(ctx: CanvasRenderingContext2D) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n const w = this.width / 2,\n h = this.height / 2;\n ctx.beginPath();\n ctx.moveTo(-w, -h);\n ctx.lineTo(w, -h);\n ctx.lineTo(w, h);\n ctx.lineTo(-w, h);\n ctx.lineTo(-w, -h);\n ctx.closePath();\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n const filters: Record[] = [];\n this.filters.forEach((filterObj) => {\n filterObj && filters.push(filterObj.toObject());\n });\n return {\n ...super.toObject([...IMAGE_PROPS, ...propertiesToInclude]),\n src: this.getSrc(),\n crossOrigin: this.getCrossOrigin(),\n filters,\n ...(this.resizeFilter\n ? { resizeFilter: this.resizeFilter.toObject() }\n : {}),\n };\n }\n\n /**\n * Returns true if an image has crop applied, inspecting values of cropX,cropY,width,height.\n * @return {Boolean}\n */\n hasCrop() {\n return (\n !!this.cropX ||\n !!this.cropY ||\n this.width < this._element.width ||\n this.height < this._element.height\n );\n }\n\n /**\n * Returns svg representation of an instance\n * @return {string[]} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const imageMarkup: string[] = [],\n element = this._element,\n x = -this.width / 2,\n y = -this.height / 2;\n let svgString: string[] = [],\n strokeSvg: string[] = [],\n clipPath = '',\n imageRendering = '';\n if (!element) {\n return [];\n }\n if (this.hasCrop()) {\n const clipPathId = uid();\n svgString.push(\n '\\n',\n '\\t\\n',\n '\\n',\n );\n clipPath = ' clip-path=\"url(#imageCrop_' + clipPathId + ')\" ';\n }\n if (!this.imageSmoothing) {\n imageRendering = ' image-rendering=\"optimizeSpeed\"';\n }\n imageMarkup.push(\n '\\t element with actual transformation, then offsetting object to the top/left\n // so that object's center aligns with container's left/top\n }\" width=\"${\n element.width || (element as HTMLImageElement).naturalWidth\n }\" height=\"${\n element.height || (element as HTMLImageElement).naturalHeight\n }\"${imageRendering}${clipPath}>\\n`,\n );\n\n if (this.stroke || this.strokeDashArray) {\n const origFill = this.fill;\n this.fill = null;\n strokeSvg = [\n `\\t\\n`,\n ];\n this.fill = origFill;\n }\n if (this.paintFirst !== FILL) {\n svgString = svgString.concat(strokeSvg, imageMarkup);\n } else {\n svgString = svgString.concat(imageMarkup, strokeSvg);\n }\n return svgString;\n }\n\n /**\n * Returns source of an image\n * @param {Boolean} filtered indicates if the src is needed for svg\n * @return {String} Source of an image\n */\n getSrc(filtered?: boolean): string {\n const element = filtered ? this._element : this._originalElement;\n if (element) {\n if ((element as HTMLCanvasElement).toDataURL) {\n return (element as HTMLCanvasElement).toDataURL();\n }\n\n if (this.srcFromAttribute) {\n return element.getAttribute('src') || '';\n } else {\n return (element as HTMLImageElement).src;\n }\n } else {\n return this.src || '';\n }\n }\n\n /**\n * Alias for getSrc\n * @param filtered\n * @deprecated\n */\n getSvgSrc(filtered?: boolean) {\n return this.getSrc(filtered);\n }\n\n /**\n * Loads and sets source of an image\\\n * **IMPORTANT**: It is recommended to abort loading tasks before calling this method to prevent race conditions and unnecessary networking\n * @param {String} src Source string (URL)\n * @param {LoadImageOptions} [options] Options object\n */\n setSrc(src: string, { crossOrigin, signal }: LoadImageOptions = {}) {\n return loadImage(src, { crossOrigin, signal }).then((img) => {\n typeof crossOrigin !== 'undefined' && this.set({ crossOrigin });\n this.setElement(img);\n });\n }\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of an instance\n */\n toString() {\n return `#`;\n }\n\n applyResizeFilters() {\n const filter = this.resizeFilter,\n minimumScale = this.minimumScaleTrigger,\n objectScale = this.getTotalObjectScaling(),\n scaleX = objectScale.x,\n scaleY = objectScale.y,\n elementToFilter = this._filteredEl || this._originalElement;\n if (this.group) {\n this.set('dirty', true);\n }\n if (!filter || (scaleX > minimumScale && scaleY > minimumScale)) {\n this._element = elementToFilter;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n this._lastScaleX = scaleX;\n this._lastScaleY = scaleY;\n return;\n }\n const canvasEl = createCanvasElement(),\n sourceWidth = elementToFilter.width,\n sourceHeight = elementToFilter.height;\n canvasEl.width = sourceWidth;\n canvasEl.height = sourceHeight;\n this._element = canvasEl;\n this._lastScaleX = filter.scaleX = scaleX;\n this._lastScaleY = filter.scaleY = scaleY;\n getFilterBackend().applyFilters(\n [filter],\n elementToFilter,\n sourceWidth,\n sourceHeight,\n this._element,\n );\n this._filterScalingX = canvasEl.width / this._originalElement.width;\n this._filterScalingY = canvasEl.height / this._originalElement.height;\n }\n\n /**\n * Applies filters assigned to this image (from \"filters\" array) or from filter param\n * @method applyFilters\n * @param {Array} filters to be applied\n * @param {Boolean} forResizing specify if the filter operation is a resize operation\n */\n applyFilters(\n filters: BaseFilter>[] = this.filters || [],\n ) {\n filters = filters.filter((filter) => filter && !filter.isNeutralState());\n this.set('dirty', true);\n\n // needs to clear out or WEBGL will not resize correctly\n this.removeTexture(`${this.cacheKey}_filtered`);\n\n if (filters.length === 0) {\n this._element = this._originalElement;\n // this is unsafe and needs to be rethinkend\n this._filteredEl = undefined;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n return;\n }\n\n const imgElement = this._originalElement,\n sourceWidth =\n (imgElement as HTMLImageElement).naturalWidth || imgElement.width,\n sourceHeight =\n (imgElement as HTMLImageElement).naturalHeight || imgElement.height;\n\n if (this._element === this._originalElement) {\n // if the _element a reference to _originalElement\n // we need to create a new element to host the filtered pixels\n const canvasEl = createCanvasElement();\n canvasEl.width = sourceWidth;\n canvasEl.height = sourceHeight;\n this._element = canvasEl;\n this._filteredEl = canvasEl;\n } else if (this._filteredEl) {\n // if the _element is it own element,\n // and we also have a _filteredEl, then we clean up _filteredEl\n // and we assign it to _element.\n // in this way we invalidate the eventual old resize filtered element\n this._element = this._filteredEl;\n this._filteredEl\n .getContext('2d')!\n .clearRect(0, 0, sourceWidth, sourceHeight);\n // we also need to resize again at next renderAll, so remove saved _lastScaleX/Y\n this._lastScaleX = 1;\n this._lastScaleY = 1;\n }\n getFilterBackend().applyFilters(\n filters,\n this._originalElement,\n sourceWidth,\n sourceHeight,\n this._element as HTMLCanvasElement,\n );\n if (\n this._originalElement.width !== this._element.width ||\n this._originalElement.height !== this._element.height\n ) {\n this._filterScalingX = this._element.width / this._originalElement.width;\n this._filterScalingY =\n this._element.height / this._originalElement.height;\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.imageSmoothingEnabled = this.imageSmoothing;\n if (this.isMoving !== true && this.resizeFilter && this._needsResize()) {\n this.applyResizeFilters();\n }\n this._stroke(ctx);\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Paint the cached copy of the object on the target context.\n * it will set the imageSmoothing for the draw operation\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas(\n this: TCachedFabricObject,\n ctx: CanvasRenderingContext2D,\n ) {\n ctx.imageSmoothingEnabled = this.imageSmoothing;\n super.drawCacheOnCanvas(ctx);\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * This is the special image version where we would like to avoid caching where possible.\n * Essentially images do not benefit from caching. They may require caching, and in that\n * case we do it. Also caching an image usually ends in a loss of details.\n * A full performance audit should be done.\n * @return {Boolean}\n */\n shouldCache() {\n return this.needsItsOwnCache();\n }\n\n _renderFill(ctx: CanvasRenderingContext2D) {\n const elementToDraw = this._element;\n if (!elementToDraw) {\n return;\n }\n const scaleX = this._filterScalingX,\n scaleY = this._filterScalingY,\n w = this.width,\n h = this.height,\n // crop values cannot be lesser than 0.\n cropX = Math.max(this.cropX, 0),\n cropY = Math.max(this.cropY, 0),\n elWidth =\n (elementToDraw as HTMLImageElement).naturalWidth || elementToDraw.width,\n elHeight =\n (elementToDraw as HTMLImageElement).naturalHeight ||\n elementToDraw.height,\n sX = cropX * scaleX,\n sY = cropY * scaleY,\n // the width height cannot exceed element width/height, starting from the crop offset.\n sW = Math.min(w * scaleX, elWidth - sX),\n sH = Math.min(h * scaleY, elHeight - sY),\n x = -w / 2,\n y = -h / 2,\n maxDestW = Math.min(w, elWidth / scaleX - cropX),\n maxDestH = Math.min(h, elHeight / scaleY - cropY);\n\n elementToDraw &&\n ctx.drawImage(elementToDraw, sX, sY, sW, sH, x, y, maxDestW, maxDestH);\n }\n\n /**\n * needed to check if image needs resize\n * @private\n */\n _needsResize() {\n const scale = this.getTotalObjectScaling();\n return scale.x !== this._lastScaleX || scale.y !== this._lastScaleY;\n }\n\n /**\n * @private\n * @deprecated unused\n */\n _resetWidthHeight() {\n this.set(this.getOriginalSize());\n }\n\n /**\n * @private\n * Set the width and the height of the image object, using the element or the\n * options.\n */\n _setWidthHeight({ width, height }: Partial = {}) {\n const size = this.getOriginalSize();\n this.width = width || size.width;\n this.height = height || size.height;\n }\n\n /**\n * Calculate offset for center and scale factor for the image in order to respect\n * the preserveAspectRatio attribute\n * @private\n */\n parsePreserveAspectRatioAttribute() {\n const pAR = parsePreserveAspectRatioAttribute(\n this.preserveAspectRatio || '',\n ),\n pWidth = this.width,\n pHeight = this.height,\n parsedAttributes = { width: pWidth, height: pHeight };\n let rWidth = this._element.width,\n rHeight = this._element.height,\n scaleX = 1,\n scaleY = 1,\n offsetLeft = 0,\n offsetTop = 0,\n cropX = 0,\n cropY = 0,\n offset;\n\n if (pAR && (pAR.alignX !== NONE || pAR.alignY !== NONE)) {\n if (pAR.meetOrSlice === 'meet') {\n scaleX = scaleY = findScaleToFit(this._element, parsedAttributes);\n offset = (pWidth - rWidth * scaleX) / 2;\n if (pAR.alignX === 'Min') {\n offsetLeft = -offset;\n }\n if (pAR.alignX === 'Max') {\n offsetLeft = offset;\n }\n offset = (pHeight - rHeight * scaleY) / 2;\n if (pAR.alignY === 'Min') {\n offsetTop = -offset;\n }\n if (pAR.alignY === 'Max') {\n offsetTop = offset;\n }\n }\n if (pAR.meetOrSlice === 'slice') {\n scaleX = scaleY = findScaleToCover(this._element, parsedAttributes);\n offset = rWidth - pWidth / scaleX;\n if (pAR.alignX === 'Mid') {\n cropX = offset / 2;\n }\n if (pAR.alignX === 'Max') {\n cropX = offset;\n }\n offset = rHeight - pHeight / scaleY;\n if (pAR.alignY === 'Mid') {\n cropY = offset / 2;\n }\n if (pAR.alignY === 'Max') {\n cropY = offset;\n }\n rWidth = pWidth / scaleX;\n rHeight = pHeight / scaleY;\n }\n } else {\n scaleX = pWidth / rWidth;\n scaleY = pHeight / rHeight;\n }\n return {\n width: rWidth,\n height: rHeight,\n scaleX,\n scaleY,\n offsetLeft,\n offsetTop,\n cropX,\n cropY,\n };\n }\n\n /**\n * Default CSS class name for canvas\n * @static\n * @type String\n * @default\n */\n static CSS_CANVAS = 'canvas-img';\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link FabricImage.fromElement})\n * @static\n * @see {@link http://www.w3.org/TR/SVG/struct.html#ImageElement}\n */\n static ATTRIBUTE_NAMES = [\n ...SHARED_ATTRIBUTES,\n 'x',\n 'y',\n 'width',\n 'height',\n 'preserveAspectRatio',\n 'xlink:href',\n 'crossOrigin',\n 'image-rendering',\n ];\n\n /**\n * Creates an instance of FabricImage from its object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {object} [options] Options object\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static fromObject>(\n { filters: f, resizeFilter: rf, src, crossOrigin, type, ...object }: T,\n options?: Abortable,\n ) {\n return Promise.all([\n loadImage(src!, { ...options, crossOrigin }),\n f && enlivenObjects>(f, options),\n // TODO: redundant - handled by enlivenObjectEnlivables\n rf && enlivenObjects>([rf], options),\n enlivenObjectEnlivables(object, options),\n ]).then(([el, filters = [], [resizeFilter] = [], hydratedProps = {}]) => {\n return new this(el, {\n ...object,\n // TODO: this creates a difference between image creation and restoring from JSON\n src,\n filters,\n resizeFilter,\n ...hydratedProps,\n });\n });\n }\n\n /**\n * Creates an instance of Image from an URL string\n * @static\n * @param {String} url URL to create an image from\n * @param {LoadImageOptions} [options] Options object\n * @returns {Promise}\n */\n static fromURL>(\n url: string,\n { crossOrigin = null, signal }: LoadImageOptions = {},\n imageOptions?: T,\n ): Promise {\n return loadImage(url, { crossOrigin, signal }).then(\n (img) => new this(img, imageOptions),\n );\n }\n\n /**\n * Returns {@link FabricImage} instance from an SVG element\n * @static\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @param {Function} callback Callback to execute when Image object is created\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable = {},\n cssRules?: CSSRules,\n ) {\n const parsedAttributes = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return this.fromURL(\n parsedAttributes['xlink:href'],\n options,\n parsedAttributes,\n ).catch((err) => {\n log('log', 'Unable to parse Image', err);\n return null;\n });\n }\n}\n\nclassRegistry.setClass(FabricImage);\nclassRegistry.setSVGClass(FabricImage);\n","import { svgNS } from './constants';\nimport {\n parsePreserveAspectRatioAttribute,\n parseUnit,\n} from '../util/misc/svgParsing';\nimport { svgViewBoxElementsRegEx, reViewBoxAttrValue } from './constants';\nimport { NONE } from '../constants';\n\nexport type ParsedViewboxTransform = Partial<{\n width: number;\n height: number;\n minX: number;\n minY: number;\n viewBoxWidth: number;\n viewBoxHeight: number;\n}>;\n\n/**\n * Add a element that envelop all child elements and makes the viewbox transformMatrix descend on all elements\n */\nexport function applyViewboxTransform(\n element: Element,\n): ParsedViewboxTransform {\n if (!svgViewBoxElementsRegEx.test(element.nodeName)) {\n return {};\n }\n const viewBoxAttr: string | null = element.getAttribute('viewBox');\n let scaleX = 1;\n let scaleY = 1;\n let minX = 0;\n let minY = 0;\n let matrix;\n let el;\n const widthAttr = element.getAttribute('width');\n const heightAttr = element.getAttribute('height');\n const x = element.getAttribute('x') || 0;\n const y = element.getAttribute('y') || 0;\n const goodViewbox = viewBoxAttr && reViewBoxAttrValue.test(viewBoxAttr);\n const missingViewBox = !goodViewbox;\n const missingDimAttr =\n !widthAttr || !heightAttr || widthAttr === '100%' || heightAttr === '100%';\n\n let translateMatrix = '';\n let widthDiff = 0;\n let heightDiff = 0;\n\n if (missingViewBox) {\n if (\n (x || y) &&\n element.parentNode &&\n element.parentNode.nodeName !== '#document'\n ) {\n translateMatrix =\n ' translate(' + parseUnit(x || '0') + ' ' + parseUnit(y || '0') + ') ';\n matrix = (element.getAttribute('transform') || '') + translateMatrix;\n element.setAttribute('transform', matrix);\n element.removeAttribute('x');\n element.removeAttribute('y');\n }\n }\n\n if (missingViewBox && missingDimAttr) {\n return {\n width: 0,\n height: 0,\n };\n }\n\n const parsedDim: ParsedViewboxTransform = {\n width: 0,\n height: 0,\n };\n\n if (missingViewBox) {\n parsedDim.width = parseUnit(widthAttr!);\n parsedDim.height = parseUnit(heightAttr!);\n // set a transform for elements that have x y and are inner(only) SVGs\n return parsedDim;\n }\n\n const pasedViewBox = viewBoxAttr.match(reViewBoxAttrValue)!;\n minX = -parseFloat(pasedViewBox[1]);\n minY = -parseFloat(pasedViewBox[2]);\n const viewBoxWidth = parseFloat(pasedViewBox[3]);\n const viewBoxHeight = parseFloat(pasedViewBox[4]);\n parsedDim.minX = minX;\n parsedDim.minY = minY;\n parsedDim.viewBoxWidth = viewBoxWidth;\n parsedDim.viewBoxHeight = viewBoxHeight;\n if (!missingDimAttr) {\n parsedDim.width = parseUnit(widthAttr);\n parsedDim.height = parseUnit(heightAttr);\n scaleX = parsedDim.width / viewBoxWidth;\n scaleY = parsedDim.height / viewBoxHeight;\n } else {\n parsedDim.width = viewBoxWidth;\n parsedDim.height = viewBoxHeight;\n }\n\n // default is to preserve aspect ratio\n const preserveAspectRatio = parsePreserveAspectRatioAttribute(\n element.getAttribute('preserveAspectRatio') || '',\n );\n if (preserveAspectRatio.alignX !== NONE) {\n //translate all container for the effect of Mid, Min, Max\n if (preserveAspectRatio.meetOrSlice === 'meet') {\n scaleY = scaleX = scaleX > scaleY ? scaleY : scaleX;\n // calculate additional translation to move the viewbox\n }\n if (preserveAspectRatio.meetOrSlice === 'slice') {\n scaleY = scaleX = scaleX > scaleY ? scaleX : scaleY;\n // calculate additional translation to move the viewbox\n }\n widthDiff = parsedDim.width - viewBoxWidth * scaleX;\n heightDiff = parsedDim.height - viewBoxHeight * scaleX;\n if (preserveAspectRatio.alignX === 'Mid') {\n widthDiff /= 2;\n }\n if (preserveAspectRatio.alignY === 'Mid') {\n heightDiff /= 2;\n }\n if (preserveAspectRatio.alignX === 'Min') {\n widthDiff = 0;\n }\n if (preserveAspectRatio.alignY === 'Min') {\n heightDiff = 0;\n }\n }\n\n if (\n scaleX === 1 &&\n scaleY === 1 &&\n minX === 0 &&\n minY === 0 &&\n x === 0 &&\n y === 0\n ) {\n return parsedDim;\n }\n if ((x || y) && element.parentNode!.nodeName !== '#document') {\n translateMatrix =\n ' translate(' + parseUnit(x || '0') + ' ' + parseUnit(y || '0') + ') ';\n }\n\n matrix =\n translateMatrix +\n ' matrix(' +\n scaleX +\n ' 0' +\n ' 0 ' +\n scaleY +\n ' ' +\n (minX * scaleX + widthDiff) +\n ' ' +\n (minY * scaleY + heightDiff) +\n ') ';\n // seems unused.\n // parsedDim.viewboxTransform = parseTransformAttribute(matrix);\n if (element.nodeName === 'svg') {\n el = element.ownerDocument.createElementNS(svgNS, 'g');\n // element.firstChild != null\n while (element.firstChild) {\n el.appendChild(element.firstChild);\n }\n element.appendChild(el);\n } else {\n el = element;\n el.removeAttribute('x');\n el.removeAttribute('y');\n matrix = el.getAttribute('transform') + matrix;\n }\n el.setAttribute('transform', matrix);\n return parsedDim;\n}\n","export const getTagName = (node: Element) => node.tagName.replace('svg:', '');\n","import { svgInvalidAncestors } from './constants';\nimport { getSvgRegex } from './getSvgRegex';\nimport { getTagName } from './getTagName';\n\nconst svgInvalidAncestorsRegEx = getSvgRegex(svgInvalidAncestors);\n\nexport function hasInvalidAncestor(element: Element) {\n let _element: Element | null = element;\n while (_element && (_element = _element.parentElement)) {\n if (\n _element &&\n _element.nodeName &&\n svgInvalidAncestorsRegEx.test(getTagName(_element)) &&\n !_element.getAttribute('instantiated_by_use')\n ) {\n return true;\n }\n }\n return false;\n}\n","export function getMultipleNodes(\n doc: Document,\n nodeNames: string[],\n): Element[] {\n let nodeName,\n nodeArray: Element[] = [],\n nodeList,\n i,\n len;\n for (i = 0, len = nodeNames.length; i < len; i++) {\n nodeName = nodeNames[i];\n nodeList = doc.getElementsByTagNameNS(\n 'http://www.w3.org/2000/svg',\n nodeName,\n );\n nodeArray = nodeArray.concat(Array.from(nodeList));\n }\n return nodeArray;\n}\n","import { svgNS } from './constants';\nimport { getMultipleNodes } from './getMultipleNodes';\nimport { applyViewboxTransform } from './applyViewboxTransform';\nimport { parseStyleString } from './parseStyleString';\n\nexport function parseUseDirectives(doc: Document) {\n const nodelist = getMultipleNodes(doc, ['use', 'svg:use']);\n const skipAttributes = ['x', 'y', 'xlink:href', 'href', 'transform'];\n\n for (const useElement of nodelist) {\n const useAttributes: NamedNodeMap = useElement.attributes;\n\n const useAttrMap: Record = {};\n for (const attr of useAttributes) {\n attr.value && (useAttrMap[attr.name] = attr.value);\n }\n\n const xlink = (useAttrMap['xlink:href'] || useAttrMap.href || '').slice(1);\n\n if (xlink === '') {\n return;\n }\n const referencedElement = doc.getElementById(xlink);\n if (referencedElement === null) {\n // if we can't find the target of the xlink, consider this use tag bad, similar to no xlink\n return;\n }\n let clonedOriginal = referencedElement.cloneNode(true) as Element;\n\n const originalAttributes: NamedNodeMap = clonedOriginal.attributes;\n\n const originalAttrMap: Record = {};\n for (const attr of originalAttributes) {\n attr.value && (originalAttrMap[attr.name] = attr.value);\n }\n\n // Transform attribute needs to be merged in a particular way\n const { x = 0, y = 0, transform = '' } = useAttrMap;\n const currentTrans = `${transform} ${\n originalAttrMap.transform || ''\n } translate(${x}, ${y})`;\n\n applyViewboxTransform(clonedOriginal);\n\n if (/^svg$/i.test(clonedOriginal.nodeName)) {\n // if is an SVG, create a group and apply all the attributes on top of it\n const el3 = clonedOriginal.ownerDocument.createElementNS(svgNS, 'g');\n Object.entries(originalAttrMap).forEach(([name, value]) =>\n el3.setAttributeNS(svgNS, name, value),\n );\n el3.append(...clonedOriginal.childNodes);\n clonedOriginal = el3;\n }\n\n for (const attr of useAttributes) {\n if (!attr) {\n continue;\n }\n const { name, value } = attr;\n if (skipAttributes.includes(name)) {\n continue;\n }\n\n if (name === 'style') {\n // when use has a style, merge the two styles, with the ref being priority (not use)\n // priority is by feature. an attribute for fill on the original element\n // will overwrite the fill in style or attribute for tha use\n const styleRecord: Record = {};\n parseStyleString(value!, styleRecord);\n // cleanup styleRecord from attributes of original\n Object.entries(originalAttrMap).forEach(([name, value]) => {\n styleRecord[name] = value;\n });\n // now we can put in the style of the original that will overwrite the original attributes\n parseStyleString(originalAttrMap.style || '', styleRecord);\n const mergedStyles = Object.entries(styleRecord)\n .map((entry) => entry.join(':'))\n .join(';');\n clonedOriginal.setAttribute(name, mergedStyles);\n } else {\n // set the attribute from use element only if the original does not have it already\n !originalAttrMap[name] && clonedOriginal.setAttribute(name, value!);\n }\n }\n\n clonedOriginal.setAttribute('transform', currentTrans);\n clonedOriginal.setAttribute('instantiated_by_use', '1');\n clonedOriginal.removeAttribute('id');\n useElement.parentNode!.replaceChild(clonedOriginal, useElement);\n }\n}\n","const gradientsAttrs = [\n 'gradientTransform',\n 'x1',\n 'x2',\n 'y1',\n 'y2',\n 'gradientUnits',\n 'cx',\n 'cy',\n 'r',\n 'fx',\n 'fy',\n];\nconst xlinkAttr = 'xlink:href';\n\nexport function recursivelyParseGradientsXlink(\n doc: Document,\n gradient: Element,\n) {\n const xLink = gradient.getAttribute(xlinkAttr)?.slice(1) || '',\n referencedGradient = doc.getElementById(xLink);\n if (referencedGradient && referencedGradient.getAttribute(xlinkAttr)) {\n recursivelyParseGradientsXlink(doc, referencedGradient as Element);\n }\n if (referencedGradient) {\n gradientsAttrs.forEach((attr) => {\n const value = referencedGradient.getAttribute(attr);\n if (!gradient.hasAttribute(attr) && value) {\n gradient.setAttribute(attr, value);\n }\n });\n if (!gradient.children.length) {\n const referenceClone = referencedGradient.cloneNode(true);\n while (referenceClone.firstChild) {\n gradient.appendChild(referenceClone.firstChild);\n }\n }\n }\n gradient.removeAttribute(xlinkAttr);\n}\n","import { getMultipleNodes } from './getMultipleNodes';\nimport { recursivelyParseGradientsXlink } from './recursivelyParseGradientsXlink';\n\nconst tagArray = [\n 'linearGradient',\n 'radialGradient',\n 'svg:linearGradient',\n 'svg:radialGradient',\n];\n\n/**\n * Parses an SVG document, returning all of the gradient declarations found in it\n * @param {SVGDocument} doc SVG document to parse\n * @return {Object} Gradient definitions; key corresponds to element id, value -- to gradient definition element\n */\nexport function getGradientDefs(\n doc: Document,\n): Record {\n const elList = getMultipleNodes(doc, tagArray);\n const gradientDefs: Record = {};\n let j = elList.length;\n while (j--) {\n const el = elList[j];\n if (el.getAttribute('xlink:href')) {\n recursivelyParseGradientsXlink(doc, el);\n }\n const id = el.getAttribute('id');\n if (id) {\n gradientDefs[id] = el as SVGGradientElement;\n }\n }\n return gradientDefs;\n}\n","import type { CSSRules } from './typedefs';\n\n/**\n * Returns CSS rules for a given SVG document\n * @param {HTMLElement} doc SVG document to parse\n * @return {Object} CSS rules of this document\n */\nexport function getCSSRules(doc: Document) {\n const styles = doc.getElementsByTagName('style');\n let i;\n let len;\n const allRules: CSSRules = {};\n\n // very crude parsing of style contents\n for (i = 0, len = styles.length; i < len; i++) {\n const styleContents = (styles[i].textContent || '').replace(\n // remove comments\n /\\/\\*[\\s\\S]*?\\*\\//g,\n '',\n );\n\n if (styleContents.trim() === '') {\n continue;\n }\n // recovers all the rule in this form `body { style code... }`\n // rules = styleContents.match(/[^{]*\\{[\\s\\S]*?\\}/g);\n styleContents\n .split('}')\n // remove empty rules and remove everything if we didn't split in at least 2 pieces\n .filter((rule, index, array) => array.length > 1 && rule.trim())\n // at this point we have hopefully an array of rules `body { style code... `\n .forEach((rule) => {\n // if there is more than one opening bracket and the rule starts with '@', it is likely\n // a nested at-rule like @media, @supports, @scope, etc. Ignore these as the code below\n // can not handle it.\n if (\n (rule.match(/{/g) || []).length > 1 &&\n rule.trim().startsWith('@')\n ) {\n return;\n }\n\n const match = rule.split('{'),\n ruleObj: Record = {},\n declaration = match[1].trim(),\n propertyValuePairs = declaration.split(';').filter(function (pair) {\n return pair.trim();\n });\n\n for (i = 0, len = propertyValuePairs.length; i < len; i++) {\n const pair = propertyValuePairs[i].split(':'),\n property = pair[0].trim(),\n value = pair[1].trim();\n ruleObj[property] = value;\n }\n rule = match[0].trim();\n rule.split(',').forEach((_rule) => {\n _rule = _rule.replace(/^svg/i, '').trim();\n if (_rule === '') {\n return;\n }\n allRules[_rule] = {\n ...(allRules[_rule] || {}),\n ...ruleObj,\n };\n });\n });\n }\n return allRules;\n}\n","import { Gradient } from '../gradient/Gradient';\nimport { Group } from '../shapes/Group';\nimport { FabricImage } from '../shapes/Image';\nimport { classRegistry } from '../ClassRegistry';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n qrDecompose,\n} from '../util/misc/matrix';\nimport { removeTransformMatrixForSvgParsing } from '../util/transform_matrix_removal';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { Point } from '../Point';\nimport { CENTER, FILL, STROKE } from '../constants';\nimport { getGradientDefs } from './getGradientDefs';\nimport { getCSSRules } from './getCSSRules';\nimport type { LoadImageOptions } from '../util';\nimport type { CSSRules, TSvgReviverCallback } from './typedefs';\nimport type { ParsedViewboxTransform } from './applyViewboxTransform';\nimport type { SVGOptions } from '../gradient';\nimport { getTagName } from './getTagName';\nimport { parseTransformAttribute } from './parseTransformAttribute';\n\nconst findTag = (el: Element) =>\n classRegistry.getSVGClass(getTagName(el).toLowerCase());\n\ntype StorageType = {\n fill: SVGGradientElement;\n stroke: SVGGradientElement;\n clipPath: Element[];\n};\n\ntype NotParsedFabricObject = FabricObject & {\n fill: string;\n stroke: string;\n clipPath?: string;\n clipRule?: CanvasFillRule;\n};\n\nexport class ElementsParser {\n declare elements: Element[];\n declare options: LoadImageOptions & ParsedViewboxTransform;\n declare reviver?: TSvgReviverCallback;\n declare regexUrl: RegExp;\n declare doc: Document;\n declare clipPaths: Record;\n declare gradientDefs: Record;\n declare cssRules: CSSRules;\n\n constructor(\n elements: Element[],\n options: LoadImageOptions & ParsedViewboxTransform,\n reviver: TSvgReviverCallback | undefined,\n doc: Document,\n clipPaths: Record,\n ) {\n this.elements = elements;\n this.options = options;\n this.reviver = reviver;\n this.regexUrl = /^url\\(['\"]?#([^'\"]+)['\"]?\\)/g;\n this.doc = doc;\n this.clipPaths = clipPaths;\n this.gradientDefs = getGradientDefs(doc);\n this.cssRules = getCSSRules(doc);\n }\n\n parse(): Promise> {\n return Promise.all(\n this.elements.map((element) => this.createObject(element)),\n );\n }\n\n async createObject(el: Element): Promise {\n const klass = findTag(el);\n if (klass) {\n const obj: NotParsedFabricObject = await klass.fromElement(\n el,\n this.options,\n this.cssRules,\n );\n this.resolveGradient(obj, el, FILL);\n this.resolveGradient(obj, el, STROKE);\n if (obj instanceof FabricImage && obj._originalElement) {\n removeTransformMatrixForSvgParsing(\n obj,\n obj.parsePreserveAspectRatioAttribute(),\n );\n } else {\n removeTransformMatrixForSvgParsing(obj);\n }\n await this.resolveClipPath(obj, el);\n this.reviver && this.reviver(el, obj);\n return obj;\n }\n return null;\n }\n\n extractPropertyDefinition(\n obj: NotParsedFabricObject,\n property: 'fill' | 'stroke' | 'clipPath',\n storage: Record,\n ): StorageType[typeof property] | undefined {\n const value = obj[property]!,\n regex = this.regexUrl;\n if (!regex.test(value)) {\n return undefined;\n }\n // verify: can we remove the 'g' flag? and remove lastIndex changes?\n regex.lastIndex = 0;\n // we passed the regex test, so we know is not null;\n const id = regex.exec(value)![1];\n regex.lastIndex = 0;\n // @todo fix this\n return storage[id];\n }\n\n resolveGradient(\n obj: NotParsedFabricObject,\n el: Element,\n property: 'fill' | 'stroke',\n ) {\n const gradientDef = this.extractPropertyDefinition(\n obj,\n property,\n this.gradientDefs,\n ) as SVGGradientElement;\n if (gradientDef) {\n const opacityAttr = el.getAttribute(property + '-opacity');\n const gradient = Gradient.fromElement(gradientDef, obj, {\n ...this.options,\n opacity: opacityAttr,\n } as SVGOptions);\n obj.set(property, gradient);\n }\n }\n\n // TODO: resolveClipPath could be run once per clippath with minor work per object.\n // is a refactor that i m not sure is worth on this code\n async resolveClipPath(obj: NotParsedFabricObject, usingElement: Element) {\n const clipPathElements = this.extractPropertyDefinition(\n obj,\n 'clipPath',\n this.clipPaths,\n ) as Element[];\n if (clipPathElements) {\n const objTransformInv = invertTransform(obj.calcTransformMatrix());\n const clipPathTag = clipPathElements[0].parentElement!;\n let clipPathOwner = usingElement;\n while (\n clipPathOwner.parentElement &&\n clipPathOwner.getAttribute('clip-path') !== obj.clipPath\n ) {\n clipPathOwner = clipPathOwner.parentElement;\n }\n // move the clipPath tag as sibling to the real element that is using it\n clipPathOwner.parentElement!.appendChild(clipPathTag!);\n\n // this multiplication order could be opposite.\n // but i don't have an svg to test it\n // at the first SVG that has a transform on both places and is misplaced\n // try to invert this multiplication order\n const finalTransform = parseTransformAttribute(\n `${clipPathOwner.getAttribute('transform') || ''} ${\n clipPathTag.getAttribute('originalTransform') || ''\n }`,\n );\n\n clipPathTag.setAttribute(\n 'transform',\n `matrix(${finalTransform.join(',')})`,\n );\n\n const container = await Promise.all(\n clipPathElements.map((clipPathElement) => {\n return findTag(clipPathElement)\n .fromElement(clipPathElement, this.options, this.cssRules)\n .then((enlivedClippath: NotParsedFabricObject) => {\n removeTransformMatrixForSvgParsing(enlivedClippath);\n enlivedClippath.fillRule = enlivedClippath.clipRule!;\n delete enlivedClippath.clipRule;\n return enlivedClippath;\n });\n }),\n );\n const clipPath =\n container.length === 1 ? container[0] : new Group(container);\n const gTransform = multiplyTransformMatrices(\n objTransformInv,\n clipPath.calcTransformMatrix(),\n );\n if (clipPath.clipPath) {\n await this.resolveClipPath(clipPath, clipPathOwner);\n }\n const { scaleX, scaleY, angle, skewX, translateX, translateY } =\n qrDecompose(gTransform);\n clipPath.set({\n flipX: false,\n flipY: false,\n });\n clipPath.set({\n scaleX,\n scaleY,\n angle,\n skewX,\n skewY: 0,\n });\n clipPath.setPositionByOrigin(\n new Point(translateX, translateY),\n CENTER,\n CENTER,\n );\n obj.clipPath = clipPath;\n } else {\n // if clip-path does not resolve to any element, delete the property.\n delete obj.clipPath;\n return;\n }\n }\n}\n","import { applyViewboxTransform } from './applyViewboxTransform';\nimport { svgValidTagNamesRegEx } from './constants';\nimport { hasInvalidAncestor } from './hasInvalidAncestor';\nimport { parseUseDirectives } from './parseUseDirectives';\nimport type { SVGParsingOutput, TSvgReviverCallback } from './typedefs';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\nimport { ElementsParser } from './elements_parser';\nimport { log, SignalAbortedError } from '../util/internals/console';\nimport { getTagName } from './getTagName';\n\nconst isValidSvgTag = (el: Element) =>\n svgValidTagNamesRegEx.test(getTagName(el));\n\nexport const createEmptyResponse = (): SVGParsingOutput => ({\n objects: [],\n elements: [],\n options: {},\n allElements: [],\n});\n\n/**\n * Parses an SVG document, converts it to an array of corresponding fabric.* instances and passes them to a callback\n * @static\n * @function\n * @memberOf fabric\n * @param {HTMLElement} doc SVG document to parse\n * @param {TSvgParsedCallback} callback Invoked when the parsing is done, with null if parsing wasn't possible with the list of svg nodes.\n * @param {TSvgReviverCallback} [reviver] Extra callback for further parsing of SVG elements, called after each fabric object has been created.\n * Takes as input the original svg element and the generated `FabricObject` as arguments. Used to inspect extra properties not parsed by fabric,\n * or extra custom manipulation\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin setting to use for external resources\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @return {SVGParsingOutput}\n * {@link SVGParsingOutput} also receives `allElements` array as the last argument. This is the full list of svg nodes available in the document.\n * You may want to use it if you are trying to regroup the objects as they were originally grouped in the SVG. ( This was the reason why it was added )\n */\nexport async function parseSVGDocument(\n doc: Document,\n reviver?: TSvgReviverCallback,\n { crossOrigin, signal }: LoadImageOptions = {},\n): Promise {\n if (signal && signal.aborted) {\n log('log', new SignalAbortedError('parseSVGDocument'));\n // this is an unhappy path, we dont care about speed\n return createEmptyResponse();\n }\n const documentElement = doc.documentElement;\n parseUseDirectives(doc);\n\n const descendants = Array.from(documentElement.getElementsByTagName('*')),\n options = {\n ...applyViewboxTransform(documentElement),\n crossOrigin,\n signal,\n };\n\n const elements = descendants.filter((el) => {\n applyViewboxTransform(el);\n return isValidSvgTag(el) && !hasInvalidAncestor(el); // http://www.w3.org/TR/SVG/struct.html#DefsElement\n });\n if (!elements || (elements && !elements.length)) {\n return {\n ...createEmptyResponse(),\n options,\n allElements: descendants,\n };\n }\n const localClipPaths: Record = {};\n descendants\n .filter((el) => getTagName(el) === 'clipPath')\n .forEach((el) => {\n el.setAttribute('originalTransform', el.getAttribute('transform') || '');\n const id = el.getAttribute('id')!;\n localClipPaths[id] = Array.from(el.getElementsByTagName('*')).filter(\n (el) => isValidSvgTag(el),\n );\n });\n\n // Precedence of rules: style > class > attribute\n const elementParser = new ElementsParser(\n elements,\n options,\n reviver,\n doc,\n localClipPaths,\n );\n\n const instances = await elementParser.parse();\n\n return {\n objects: instances,\n elements,\n options,\n allElements: descendants,\n };\n}\n","import { getFabricWindow } from '../env';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\nimport { parseSVGDocument } from './parseSVGDocument';\nimport type { SVGParsingOutput, TSvgReviverCallback } from './typedefs';\n\n/**\n * Takes string corresponding to an SVG document, and parses it into a set of fabric objects\n * @memberOf fabric\n * @param {String} string representing the svg\n * @param {TSvgParsedCallback} callback Invoked when the parsing is done, with null if parsing wasn't possible with the list of svg nodes.\n * {@link TSvgParsedCallback} also receives `allElements` array as the last argument. This is the full list of svg nodes available in the document.\n * You may want to use it if you are trying to regroup the objects as they were originally grouped in the SVG. ( This was the reason why it was added )\n * @param {TSvgReviverCallback} [reviver] Extra callback for further parsing of SVG elements, called after each fabric object has been created.\n * Takes as input the original svg element and the generated `FabricObject` as arguments. Used to inspect extra properties not parsed by fabric,\n * or extra custom manipulation\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin setting to use for external resources\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n */\nexport function loadSVGFromString(\n string: string,\n reviver?: TSvgReviverCallback,\n options?: LoadImageOptions,\n): Promise {\n const parser = new (getFabricWindow().DOMParser)(),\n // should we use `image/svg+xml` here?\n doc = parser.parseFromString(string.trim(), 'text/xml');\n return parseSVGDocument(doc, reviver, options);\n}\n","import { request } from '../util/internals/dom_request';\nimport { parseSVGDocument, createEmptyResponse } from './parseSVGDocument';\nimport type { SVGParsingOutput, TSvgReviverCallback } from './typedefs';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\n\n/**\n * Takes url corresponding to an SVG document, and parses it into a set of fabric objects.\n * Note that SVG is fetched via XMLHttpRequest, so it needs to conform to SOP (Same Origin Policy)\n * @memberOf fabric\n * @param {string} url where the SVG is\n * @param {TSvgParsedCallback} callback Invoked when the parsing is done, with null if parsing wasn't possible with the list of svg nodes.\n * {@link TSvgParsedCallback} also receives `allElements` array as the last argument. This is the full list of svg nodes available in the document.\n * You may want to use it if you are trying to regroup the objects as they were originally grouped in the SVG. ( This was the reason why it was added )\n * @param {TSvgReviverCallback} [reviver] Extra callback for further parsing of SVG elements, called after each fabric object has been created.\n * Takes as input the original svg element and the generated `FabricObject` as arguments. Used to inspect extra properties not parsed by fabric,\n * or extra custom manipulation\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin setting to use for external resources\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n */\nexport function loadSVGFromURL(\n url: string,\n reviver?: TSvgReviverCallback,\n options: LoadImageOptions = {},\n): Promise {\n // need to handle error properly\n return new Promise((resolve, reject) => {\n const onComplete = (r: XMLHttpRequest) => {\n const xml = r.responseXML;\n if (xml) {\n resolve(xml);\n }\n reject();\n };\n\n request(url.replace(/^\\n\\s*/, '').trim(), {\n onComplete,\n signal: options.signal,\n });\n })\n .then((parsedDoc) => parseSVGDocument(parsedDoc, reviver, options))\n .catch(() => {\n // this is an unhappy path, we dont care about speed\n return createEmptyResponse();\n });\n}\n","import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Polyline } from '../shapes/Polyline';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { MODIFY_POLY } from '../constants';\n\nconst ACTION_NAME: TModificationEvents = MODIFY_POLY;\n\ntype TTransformAnchor = Transform & { pointIndex: number };\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nexport const createPolyPositionHandler = (pointIndex: number) => {\n return function (dim: Point, finalMatrix: TMat2D, polyObject: Polyline) {\n const { points, pathOffset } = polyObject;\n return new Point(points[pointIndex])\n .subtract(pathOffset)\n .transform(\n multiplyTransformMatrices(\n polyObject.getViewportTransform(),\n polyObject.calcTransformMatrix(),\n ),\n );\n };\n};\n\n/**\n * This function defines what the control does.\n * It'll be called on every mouse move after a control has been clicked and is being dragged.\n * The function receives as argument the mouse event, the current transform object\n * and the current position in canvas coordinate `transform.target` is a reference to the\n * current object being transformed.\n */\nexport const polyActionHandler = (\n eventData: TPointerEvent,\n transform: TTransformAnchor,\n x: number,\n y: number,\n) => {\n const { target, pointIndex } = transform;\n const poly = target as Polyline;\n const mouseLocalPosition = sendPointToPlane(\n new Point(x, y),\n undefined,\n poly.calcOwnMatrix(),\n );\n\n poly.points[pointIndex] = mouseLocalPosition.add(poly.pathOffset);\n poly.setDimensions();\n\n return true;\n};\n\n/**\n * Keep the polygon in the same position when we change its `width`/`height`/`top`/`left`.\n */\nexport const factoryPolyActionHandler = (\n pointIndex: number,\n fn: TransformActionHandler,\n) => {\n return function (\n eventData: TPointerEvent,\n transform: Transform,\n x: number,\n y: number,\n ) {\n const poly = transform.target as Polyline,\n anchorPoint = new Point(\n poly.points[(pointIndex > 0 ? pointIndex : poly.points.length) - 1],\n ),\n anchorPointInParentPlane = anchorPoint\n .subtract(poly.pathOffset)\n .transform(poly.calcOwnMatrix()),\n actionPerformed = fn(eventData, { ...transform, pointIndex }, x, y);\n\n const newAnchorPointInParentPlane = anchorPoint\n .subtract(poly.pathOffset)\n .transform(poly.calcOwnMatrix());\n\n const diff = newAnchorPointInParentPlane.subtract(anchorPointInParentPlane);\n poly.left -= diff.x;\n poly.top -= diff.y;\n\n return actionPerformed;\n };\n};\n\nexport const createPolyActionHandler = (pointIndex: number) =>\n wrapWithFireEvent(\n ACTION_NAME,\n factoryPolyActionHandler(pointIndex, polyActionHandler),\n );\n\nexport function createPolyControls(\n poly: Polyline,\n options?: Partial,\n): Record;\nexport function createPolyControls(\n numOfControls: number,\n options?: Partial,\n): Record;\nexport function createPolyControls(\n arg0: number | Polyline,\n options: Partial = {},\n) {\n const controls = {} as Record;\n for (\n let idx = 0;\n idx < (typeof arg0 === 'number' ? arg0 : arg0.points.length);\n idx++\n ) {\n controls[`p${idx}`] = new Control({\n actionName: ACTION_NAME,\n positionHandler: createPolyPositionHandler(idx),\n actionHandler: createPolyActionHandler(idx),\n ...options,\n });\n }\n return controls;\n}\n","import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Path } from '../shapes/Path';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n} from '../EventTypeDefs';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport type { TSimpleParseCommandType } from '../util/path/typedefs';\nimport type { ControlRenderingStyleOverride } from './controlRendering';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo } from './util';\n\nconst ACTION_NAME: TModificationEvents = 'modifyPath' as const;\n\ntype TTransformAnchor = Transform;\n\nexport type PathPointControlStyle = {\n controlFill?: string;\n controlStroke?: string;\n connectionDashArray?: number[];\n};\n\nconst calcPathPointPosition = (\n pathObject: Path,\n commandIndex: number,\n pointIndex: number,\n) => {\n const { path, pathOffset } = pathObject;\n const command = path[commandIndex];\n return new Point(\n (command[pointIndex] as number) - pathOffset.x,\n (command[pointIndex + 1] as number) - pathOffset.y,\n ).transform(\n multiplyTransformMatrices(\n pathObject.getViewportTransform(),\n pathObject.calcTransformMatrix(),\n ),\n );\n};\n\nconst movePathPoint = (\n pathObject: Path,\n x: number,\n y: number,\n commandIndex: number,\n pointIndex: number,\n) => {\n const { path, pathOffset } = pathObject;\n\n const anchorCommand =\n path[(commandIndex > 0 ? commandIndex : path.length) - 1];\n const anchorPoint = new Point(\n anchorCommand[pointIndex] as number,\n anchorCommand[pointIndex + 1] as number,\n );\n\n const anchorPointInParentPlane = anchorPoint\n .subtract(pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const mouseLocalPosition = sendPointToPlane(\n new Point(x, y),\n undefined,\n pathObject.calcOwnMatrix(),\n );\n\n path[commandIndex][pointIndex] = mouseLocalPosition.x + pathOffset.x;\n path[commandIndex][pointIndex + 1] = mouseLocalPosition.y + pathOffset.y;\n pathObject.setDimensions();\n\n const newAnchorPointInParentPlane = anchorPoint\n .subtract(pathObject.pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const diff = newAnchorPointInParentPlane.subtract(anchorPointInParentPlane);\n pathObject.left -= diff.x;\n pathObject.top -= diff.y;\n pathObject.set('dirty', true);\n return true;\n};\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nfunction pathPositionHandler(\n this: PathPointControl,\n dim: Point,\n finalMatrix: TMat2D,\n pathObject: Path,\n) {\n const { commandIndex, pointIndex } = this;\n return calcPathPointPosition(pathObject, commandIndex, pointIndex);\n}\n\n/**\n * This function defines what the control does.\n * It'll be called on every mouse move after a control has been clicked and is being dragged.\n * The function receives as argument the mouse event, the current transform object\n * and the current position in canvas coordinate `transform.target` is a reference to the\n * current object being transformed.\n */\nfunction pathActionHandler(\n this: PathPointControl,\n eventData: TPointerEvent,\n transform: TTransformAnchor,\n x: number,\n y: number,\n) {\n const { target } = transform;\n const { commandIndex, pointIndex } = this;\n const actionPerformed = movePathPoint(\n target as Path,\n x,\n y,\n commandIndex,\n pointIndex,\n );\n if (actionPerformed) {\n fireEvent(this.actionName as TModificationEvents, {\n ...commonEventInfo(eventData, transform, x, y),\n commandIndex,\n pointIndex,\n });\n }\n return actionPerformed;\n}\n\nconst indexFromPrevCommand = (previousCommandType: TSimpleParseCommandType) =>\n previousCommandType === 'C' ? 5 : previousCommandType === 'Q' ? 3 : 1;\n\nclass PathPointControl extends Control {\n declare commandIndex: number;\n declare pointIndex: number;\n declare controlFill: string;\n declare controlStroke: string;\n constructor(options?: Partial) {\n super(options);\n }\n\n render(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path,\n ) {\n const overrides: ControlRenderingStyleOverride = {\n ...styleOverride,\n cornerColor: this.controlFill,\n cornerStrokeColor: this.controlStroke,\n transparentCorners: !this.controlFill,\n };\n super.render(ctx, left, top, overrides, fabricObject);\n }\n}\n\nclass PathControlPointControl extends PathPointControl {\n declare connectionDashArray?: number[];\n declare connectToCommandIndex: number;\n declare connectToPointIndex: number;\n constructor(options?: Partial) {\n super(options);\n }\n\n render(\n this: PathControlPointControl,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path,\n ) {\n const { path } = fabricObject;\n const {\n commandIndex,\n pointIndex,\n connectToCommandIndex,\n connectToPointIndex,\n } = this;\n ctx.save();\n ctx.strokeStyle = this.controlStroke;\n if (this.connectionDashArray) {\n ctx.setLineDash(this.connectionDashArray);\n }\n const [commandType] = path[commandIndex];\n const point = calcPathPointPosition(\n fabricObject,\n connectToCommandIndex,\n connectToPointIndex,\n );\n\n if (commandType === 'Q') {\n // one control point connects to 2 points\n const point2 = calcPathPointPosition(\n fabricObject,\n commandIndex,\n pointIndex + 2,\n );\n ctx.moveTo(point2.x, point2.y);\n ctx.lineTo(left, top);\n } else {\n ctx.moveTo(left, top);\n }\n ctx.lineTo(point.x, point.y);\n ctx.stroke();\n ctx.restore();\n\n super.render(ctx, left, top, styleOverride, fabricObject);\n }\n}\n\nconst createControl = (\n commandIndexPos: number,\n pointIndexPos: number,\n isControlPoint: boolean,\n options: Partial & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n },\n connectToCommandIndex?: number,\n connectToPointIndex?: number,\n) =>\n new (isControlPoint ? PathControlPointControl : PathPointControl)({\n commandIndex: commandIndexPos,\n pointIndex: pointIndexPos,\n actionName: ACTION_NAME,\n positionHandler: pathPositionHandler,\n actionHandler: pathActionHandler,\n connectToCommandIndex,\n connectToPointIndex,\n ...options,\n ...(isControlPoint ? options.controlPointStyle : options.pointStyle),\n } as Partial);\n\nexport function createPathControls(\n path: Path,\n options: Partial & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n } = {},\n): Record {\n const controls = {} as Record;\n let previousCommandType: TSimpleParseCommandType = 'M';\n path.path.forEach((command, commandIndex) => {\n const commandType = command[0];\n\n if (commandType !== 'Z') {\n controls[`c_${commandIndex}_${commandType}`] = createControl(\n commandIndex,\n command.length - 2,\n false,\n options,\n );\n }\n switch (commandType) {\n case 'C':\n controls[`c_${commandIndex}_C_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex - 1,\n indexFromPrevCommand(previousCommandType),\n );\n controls[`c_${commandIndex}_C_CP_2`] = createControl(\n commandIndex,\n 3,\n true,\n options,\n commandIndex,\n 5,\n );\n break;\n case 'Q':\n controls[`c_${commandIndex}_Q_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex,\n 3,\n );\n break;\n }\n previousCommandType = commandType;\n });\n return controls;\n}\n","import { getFabricWindow } from '../env';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { WebGLFilterBackend } from './WebGLFilterBackend';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\n\nexport const isWebGLPipelineState = (\n options: TWebGLPipelineState | T2DPipelineState,\n): options is TWebGLPipelineState => {\n return (options as TWebGLPipelineState).webgl !== undefined;\n};\n\n/**\n * Pick a method to copy data from GL context to 2d canvas. In some browsers using\n * drawImage should be faster, but is also bugged for a small combination of old hardware\n * and drivers.\n * putImageData is faster than drawImage for that specific operation.\n */\nexport const isPutImageFaster = (width: number, height: number): boolean => {\n const targetCanvas = createCanvasElement();\n const sourceCanvas = createCanvasElement();\n const gl = sourceCanvas.getContext('webgl')!;\n // eslint-disable-next-line no-undef\n const imageBuffer = new ArrayBuffer(width * height * 4);\n\n const testContext = {\n imageBuffer: imageBuffer,\n } as unknown as Required;\n const testPipelineState = {\n destinationWidth: width,\n destinationHeight: height,\n targetCanvas: targetCanvas,\n } as unknown as TWebGLPipelineState;\n let startTime;\n targetCanvas.width = width;\n targetCanvas.height = height;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2D.call(\n testContext,\n gl,\n testPipelineState,\n );\n const drawImageTime = getFabricWindow().performance.now() - startTime;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2DPutImageData.call(\n testContext,\n gl,\n testPipelineState,\n );\n const putImageDataTime = getFabricWindow().performance.now() - startTime;\n\n return drawImageTime > putImageDataTime;\n};\n","export const highPsourceCode = `precision highp float`;\n\nexport const identityFragmentShader = `\n ${highPsourceCode};\n varying vec2 vTexCoord;\n uniform sampler2D uTexture;\n void main() {\n gl_FragColor = texture2D(uTexture, vTexCoord);\n }`;\n\nexport const vertexSource = `\n attribute vec2 aPosition;\n varying vec2 vTexCoord;\n void main() {\n vTexCoord = aPosition;\n gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n }`;\n","import { getEnv } from '../env';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type {\n T2DPipelineState,\n TWebGLAttributeLocationMap,\n TWebGLPipelineState,\n TWebGLProgramCacheItem,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport {\n highPsourceCode,\n identityFragmentShader,\n vertexSource,\n} from './shaders/baseFilter';\nimport type { Abortable } from '../typedefs';\nimport { FabricError } from '../util/internals/console';\n\nconst regex = new RegExp(highPsourceCode, 'g');\n\nexport class BaseFilter<\n Name extends string,\n OwnProps extends Record = object,\n> {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n get type(): Name {\n return (this.constructor as typeof BaseFilter).type as Name;\n }\n\n /**\n * The class type. Used to identify which class this is.\n * This is used for serialization purposes and internally it can be used\n * to identify classes. As a developer you could use `instance of Class`\n * but to avoid importing all the code and blocking tree shaking we try\n * to avoid doing that.\n */\n static type = 'BaseFilter';\n\n /**\n * Contains the uniform locations for the fragment shader.\n * uStepW and uStepH are handled by the BaseFilter, each filter class\n * needs to specify all the one that are needed\n */\n static uniformLocations: string[] = [];\n\n declare static defaults: Record;\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor({\n type,\n ...options\n }: { type?: never } & Partial & Record = {}) {\n Object.assign(\n this,\n (this.constructor as typeof BaseFilter).defaults,\n options,\n );\n }\n\n protected getFragmentSource(): string {\n return identityFragmentShader;\n }\n\n getVertexSource(): string {\n return vertexSource;\n }\n\n /**\n * Compile this filter's shader program.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context to use for shader compilation.\n * @param {String} fragmentSource fragmentShader source for compilation\n * @param {String} vertexSource vertexShader source for compilation\n */\n createProgram(\n gl: WebGLRenderingContext,\n fragmentSource: string = this.getFragmentSource(),\n vertexSource: string = this.getVertexSource(),\n ) {\n const {\n WebGLProbe: { GLPrecision = 'highp' },\n } = getEnv();\n if (GLPrecision !== 'highp') {\n fragmentSource = fragmentSource.replace(\n regex,\n highPsourceCode.replace('highp', GLPrecision),\n );\n }\n const vertexShader = gl.createShader(gl.VERTEX_SHADER);\n const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n const program = gl.createProgram();\n\n if (!vertexShader || !fragmentShader || !program) {\n throw new FabricError(\n 'Vertex, fragment shader or program creation error',\n );\n }\n gl.shaderSource(vertexShader, vertexSource);\n gl.compileShader(vertexShader);\n if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n throw new FabricError(\n `Vertex shader compile error for ${this.type}: ${gl.getShaderInfoLog(\n vertexShader,\n )}`,\n );\n }\n\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n throw new FabricError(\n `Fragment shader compile error for ${this.type}: ${gl.getShaderInfoLog(\n fragmentShader,\n )}`,\n );\n }\n\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n throw new FabricError(\n `Shader link error for \"${this.type}\" ${gl.getProgramInfoLog(program)}`,\n );\n }\n\n const uniformLocations = this.getUniformLocations(gl, program) || {};\n uniformLocations.uStepW = gl.getUniformLocation(program, 'uStepW');\n uniformLocations.uStepH = gl.getUniformLocation(program, 'uStepH');\n\n return {\n program,\n attributeLocations: this.getAttributeLocations(gl, program),\n uniformLocations,\n };\n }\n\n /**\n * Return a map of attribute names to WebGLAttributeLocation objects.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take attribute locations.\n * @returns {Object} A map of attribute names to attribute locations.\n */\n getAttributeLocations(\n gl: WebGLRenderingContext,\n program: WebGLProgram,\n ): TWebGLAttributeLocationMap {\n return {\n aPosition: gl.getAttribLocation(program, 'aPosition'),\n };\n }\n\n /**\n * Return a map of uniform names to WebGLUniformLocation objects.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take uniform locations.\n * @returns {Object} A map of uniform names to uniform locations.\n */\n getUniformLocations(\n gl: WebGLRenderingContext,\n program: WebGLProgram,\n ): TWebGLUniformLocationMap {\n const locations = (this.constructor as unknown as typeof BaseFilter)\n .uniformLocations;\n\n const uniformLocations: Record = {};\n for (let i = 0; i < locations.length; i++) {\n uniformLocations[locations[i]] = gl.getUniformLocation(\n program,\n locations[i],\n );\n }\n return uniformLocations;\n }\n\n /**\n * Send attribute data from this filter to its shader program on the GPU.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {Object} attributeLocations A map of shader attribute names to their locations.\n */\n sendAttributeData(\n gl: WebGLRenderingContext,\n attributeLocations: Record,\n aPositionData: Float32Array,\n ) {\n const attributeLocation = attributeLocations.aPosition;\n const buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.enableVertexAttribArray(attributeLocation);\n gl.vertexAttribPointer(attributeLocation, 2, gl.FLOAT, false, 0, 0);\n gl.bufferData(gl.ARRAY_BUFFER, aPositionData, gl.STATIC_DRAW);\n }\n\n _setupFrameBuffer(options: TWebGLPipelineState) {\n const gl = options.context;\n if (options.passes > 1) {\n const width = options.destinationWidth;\n const height = options.destinationHeight;\n if (options.sourceWidth !== width || options.sourceHeight !== height) {\n gl.deleteTexture(options.targetTexture);\n options.targetTexture = options.filterBackend.createTexture(\n gl,\n width,\n height,\n );\n }\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n options.targetTexture,\n 0,\n );\n } else {\n // draw last filter on canvas and not to framebuffer.\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.finish();\n }\n }\n\n _swapTextures(options: TWebGLPipelineState) {\n options.passes--;\n options.pass++;\n const temp = options.targetTexture;\n options.targetTexture = options.sourceTexture;\n options.sourceTexture = temp;\n }\n\n /**\n * Generic isNeutral implementation for one parameter based filters.\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * Other filters may need their own version ( ColorMatrix, HueRotation, gamma, ComposedFilter )\n * @param {Object} options\n **/\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isNeutralState(options?: any): boolean {\n return false;\n }\n\n /**\n * Apply this filter to the input image data provided.\n *\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n this._setupFrameBuffer(options);\n this.applyToWebGL(options);\n this._swapTextures(options);\n } else {\n this.applyTo2d(options);\n }\n }\n\n applyTo2d(_options: T2DPipelineState): void {\n // override by subclass\n }\n\n /**\n * Returns a string that represent the current selected shader code for the filter.\n * Used to force recompilation when parameters change or to retrieve the shader from cache\n * @type string\n **/\n getCacheKey(): string {\n return this.type;\n }\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n * @return {WebGLProgram} the compiled program shader\n */\n retrieveShader(options: TWebGLPipelineState): TWebGLProgramCacheItem {\n const key = this.getCacheKey();\n if (!options.programCache[key]) {\n options.programCache[key] = this.createProgram(options.context);\n }\n return options.programCache[key];\n }\n\n /**\n * Apply this filter using webgl.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.originalTexture The texture of the original input image.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyToWebGL(options: TWebGLPipelineState) {\n const gl = options.context;\n const shader = this.retrieveShader(options);\n if (options.pass === 0 && options.originalTexture) {\n gl.bindTexture(gl.TEXTURE_2D, options.originalTexture);\n } else {\n gl.bindTexture(gl.TEXTURE_2D, options.sourceTexture);\n }\n gl.useProgram(shader.program);\n this.sendAttributeData(gl, shader.attributeLocations, options.aPosition);\n\n gl.uniform1f(shader.uniformLocations.uStepW, 1 / options.sourceWidth);\n gl.uniform1f(shader.uniformLocations.uStepH, 1 / options.sourceHeight);\n\n this.sendUniformData(gl, shader.uniformLocations);\n gl.viewport(0, 0, options.destinationWidth, options.destinationHeight);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n bindAdditionalTexture(\n gl: WebGLRenderingContext,\n texture: WebGLTexture,\n textureUnit: number,\n ) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n // reset active texture to 0 as usual\n gl.activeTexture(gl.TEXTURE0);\n }\n\n unbindAdditionalTexture(gl: WebGLRenderingContext, textureUnit: number) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.activeTexture(gl.TEXTURE0);\n }\n\n /**\n * Send uniform data from this filter to its shader program on the GPU.\n *\n * Intended to be overridden by subclasses.\n *\n * @param {WebGLRenderingContext} _gl The canvas context used to compile the shader program.\n * @param {Object} _uniformLocations A map of shader uniform names to their locations.\n */\n sendUniformData(\n _gl: WebGLRenderingContext,\n _uniformLocations: TWebGLUniformLocationMap,\n ): void {\n // override by subclass\n }\n\n /**\n * If needed by a 2d filter, this functions can create an helper canvas to be used\n * remember that options.targetCanvas is available for use till end of chain.\n */\n createHelpLayer(options: T2DPipelineState) {\n if (!options.helpLayer) {\n const helpLayer = createCanvasElement();\n helpLayer.width = options.sourceWidth;\n helpLayer.height = options.sourceHeight;\n options.helpLayer = helpLayer;\n }\n }\n\n /**\n * Returns object representation of an instance\n * It will automatically export the default values of a filter,\n * stored in the static defaults property.\n * @return {Object} Object representation of an instance\n */\n toObject(): { type: Name } & OwnProps {\n const defaultKeys = Object.keys(\n (this.constructor as typeof BaseFilter).defaults || {},\n ) as (keyof OwnProps)[];\n\n return {\n type: this.type,\n ...defaultKeys.reduce((acc, key) => {\n acc[key] = this[\n key as keyof this\n ] as unknown as (typeof acc)[typeof key];\n return acc;\n }, {} as OwnProps),\n };\n }\n\n /**\n * Returns a JSON representation of an instance\n * @return {Object} JSON\n */\n toJSON() {\n // delegate, not alias\n return this.toObject();\n }\n\n static async fromObject(\n { type, ...filterOptions }: Record,\n _options: Abortable,\n ): Promise> {\n return new this(filterOptions);\n }\n}\n","export const blendColorFragmentSource = {\n multiply: 'gl_FragColor.rgb *= uColor.rgb;\\n',\n screen:\n 'gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);\\n',\n add: 'gl_FragColor.rgb += uColor.rgb;\\n',\n difference: 'gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);\\n',\n subtract: 'gl_FragColor.rgb -= uColor.rgb;\\n',\n lighten: 'gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);\\n',\n darken: 'gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);\\n',\n exclusion:\n 'gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);\\n',\n overlay: `\n if (uColor.r < 0.5) {\n gl_FragColor.r *= 2.0 * uColor.r;\n } else {\n gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);\n }\n if (uColor.g < 0.5) {\n gl_FragColor.g *= 2.0 * uColor.g;\n } else {\n gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);\n }\n if (uColor.b < 0.5) {\n gl_FragColor.b *= 2.0 * uColor.b;\n } else {\n gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);\n }\n `,\n tint: `\n gl_FragColor.rgb *= (1.0 - uColor.a);\n gl_FragColor.rgb += uColor.rgb;\n `,\n} as const;\n","import { Color } from '../color/Color';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { blendColorFragmentSource } from './shaders/blendColor';\n\nexport type TBlendMode =\n | 'multiply'\n | 'add'\n | 'difference'\n | 'screen'\n | 'subtract'\n | 'darken'\n | 'lighten'\n | 'overlay'\n | 'exclusion'\n | 'tint';\n\ntype BlendColorOwnProps = {\n color: string;\n mode: TBlendMode;\n alpha: number;\n};\n\nexport const blendColorDefaultValues: BlendColorOwnProps = {\n color: '#F95C63',\n mode: 'multiply',\n alpha: 1,\n};\n\n/**\n * Color Blend filter class\n * @example\n * const filter = new BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * const filter = new BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply'\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class BlendColor extends BaseFilter<'BlendColor', BlendColorOwnProps> {\n /**\n * Color to make the blend operation with. default to a reddish color since black or white\n * gives always strong result.\n * @type String\n * @default\n **/\n declare color: BlendColorOwnProps['color'];\n\n /**\n * Blend mode for the filter: one of multiply, add, difference, screen, subtract,\n * darken, lighten, overlay, exclusion, tint.\n * @type String\n * @default\n **/\n declare mode: BlendColorOwnProps['mode'];\n /**\n * alpha value. represent the strength of the blend color operation.\n * @type Number\n * @default\n **/\n declare alpha: BlendColorOwnProps['alpha'];\n\n static defaults = blendColorDefaultValues;\n\n static type = 'BlendColor';\n\n static uniformLocations = ['uColor'];\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n protected getFragmentSource(): string {\n return `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec4 uColor;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n gl_FragColor = color;\n if (color.a > 0.0) {\n ${blendColorFragmentSource[this.mode]}\n }\n }\n `;\n }\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const source = new Color(this.color).getSource();\n const tr = source[0] * this.alpha;\n const tg = source[1] * this.alpha;\n const tb = source[2] * this.alpha;\n const alpha1 = 1 - this.alpha;\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = (r * tr) / 255;\n data[i + 1] = (g * tg) / 255;\n data[i + 2] = (b * tb) / 255;\n break;\n case 'screen':\n data[i] = 255 - ((255 - r) * (255 - tr)) / 255;\n data[i + 1] = 255 - ((255 - g) * (255 - tg)) / 255;\n data[i + 2] = 255 - ((255 - b) * (255 - tb)) / 255;\n break;\n case 'add':\n data[i] = r + tr;\n data[i + 1] = g + tg;\n data[i + 2] = b + tb;\n break;\n case 'difference':\n data[i] = Math.abs(r - tr);\n data[i + 1] = Math.abs(g - tg);\n data[i + 2] = Math.abs(b - tb);\n break;\n case 'subtract':\n data[i] = r - tr;\n data[i + 1] = g - tg;\n data[i + 2] = b - tb;\n break;\n case 'darken':\n data[i] = Math.min(r, tr);\n data[i + 1] = Math.min(g, tg);\n data[i + 2] = Math.min(b, tb);\n break;\n case 'lighten':\n data[i] = Math.max(r, tr);\n data[i + 1] = Math.max(g, tg);\n data[i + 2] = Math.max(b, tb);\n break;\n case 'overlay':\n data[i] =\n tr < 128\n ? (2 * r * tr) / 255\n : 255 - (2 * (255 - r) * (255 - tr)) / 255;\n data[i + 1] =\n tg < 128\n ? (2 * g * tg) / 255\n : 255 - (2 * (255 - g) * (255 - tg)) / 255;\n data[i + 2] =\n tb < 128\n ? (2 * b * tb) / 255\n : 255 - (2 * (255 - b) * (255 - tb)) / 255;\n break;\n case 'exclusion':\n data[i] = tr + r - (2 * tr * r) / 255;\n data[i + 1] = tg + g - (2 * tg * g) / 255;\n data[i + 2] = tb + b - (2 * tb * b) / 255;\n break;\n case 'tint':\n data[i] = tr + r * alpha1;\n data[i + 1] = tg + g * alpha1;\n data[i + 2] = tb + b * alpha1;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const source = new Color(this.color).getSource();\n source[0] = (this.alpha * source[0]) / 255;\n source[1] = (this.alpha * source[1]) / 255;\n source[2] = (this.alpha * source[2]) / 255;\n source[3] = this.alpha;\n gl.uniform4fv(uniformLocations.uColor, source);\n }\n}\n\nclassRegistry.setClass(BlendColor);\n","import type { TBlendImageMode } from '../BlendImage';\n\nexport const fragmentSource: Record = {\n multiply: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform sampler2D uImage;\n uniform vec4 uColor;\n varying vec2 vTexCoord;\n varying vec2 vTexCoord2;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n vec4 color2 = texture2D(uImage, vTexCoord2);\n color.rgba *= color2.rgba;\n gl_FragColor = color;\n }\n `,\n mask: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform sampler2D uImage;\n uniform vec4 uColor;\n varying vec2 vTexCoord;\n varying vec2 vTexCoord2;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n vec4 color2 = texture2D(uImage, vTexCoord2);\n color.a = color2.a;\n gl_FragColor = color;\n }\n `,\n} as const;\n\nexport const vertexSource = `\n attribute vec2 aPosition;\n varying vec2 vTexCoord;\n varying vec2 vTexCoord2;\n uniform mat3 uTransformMatrix;\n void main() {\n vTexCoord = aPosition;\n vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\n gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n }\n ` as const;\n","import { FabricImage } from '../shapes/Image';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { BaseFilter } from './BaseFilter';\nimport type {\n T2DPipelineState,\n TWebGLPipelineState,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport type { WebGLFilterBackend } from './WebGLFilterBackend';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource, vertexSource } from './shaders/blendImage';\n\nexport type TBlendImageMode = 'multiply' | 'mask';\n\ntype BlendImageOwnProps = {\n mode: TBlendImageMode;\n alpha: number;\n};\n\nexport const blendImageDefaultValues: BlendImageOwnProps = {\n mode: 'multiply',\n alpha: 1,\n};\n\n/**\n * Image Blend filter class\n * @example\n * const filter = new filters.BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * const filter = new BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply'\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class BlendImage extends BaseFilter<'BlendImage', BlendImageOwnProps> {\n /**\n * Image to make the blend operation with.\n **/\n declare image: FabricImage;\n\n /**\n * Blend mode for the filter: either 'multiply' or 'mask'. 'multiply' will\n * multiply the values of each channel (R, G, B, and A) of the filter image by\n * their corresponding values in the base image. 'mask' will only look at the\n * alpha channel of the filter image, and apply those values to the base\n * image's alpha channel.\n * @type String\n * @default\n **/\n declare mode: BlendImageOwnProps['mode'];\n\n /**\n * alpha value. represent the strength of the blend image operation.\n * not implemented.\n **/\n declare alpha: BlendImageOwnProps['alpha'];\n\n static type = 'BlendImage';\n\n static defaults = blendImageDefaultValues;\n\n static uniformLocations = ['uTransformMatrix', 'uImage'];\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n getFragmentSource(): string {\n return fragmentSource[this.mode];\n }\n\n getVertexSource(): string {\n return vertexSource;\n }\n\n applyToWebGL(options: TWebGLPipelineState) {\n const gl = options.context,\n texture = this.createTexture(options.filterBackend, this.image);\n this.bindAdditionalTexture(gl, texture!, gl.TEXTURE1);\n super.applyToWebGL(options);\n this.unbindAdditionalTexture(gl, gl.TEXTURE1);\n }\n\n createTexture(backend: WebGLFilterBackend, image: FabricImage) {\n return backend.getCachedTexture(image.cacheKey, image.getElement());\n }\n\n /**\n * Calculate a transformMatrix to adapt the image to blend over\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n calculateMatrix() {\n const image = this.image,\n { width, height } = image.getElement();\n return [\n 1 / image.scaleX,\n 0,\n 0,\n 0,\n 1 / image.scaleY,\n 0,\n -image.left / width,\n -image.top / height,\n 1,\n ];\n }\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({\n imageData: { data, width, height },\n filterBackend: { resources },\n }: T2DPipelineState) {\n const image = this.image;\n if (!resources.blendImage) {\n resources.blendImage = createCanvasElement();\n }\n const canvas1 = resources.blendImage;\n const context = canvas1.getContext('2d')!;\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas1.width = width;\n canvas1.height = height;\n } else {\n context.clearRect(0, 0, width, height);\n }\n context.setTransform(\n image.scaleX,\n 0,\n 0,\n image.scaleY,\n image.left,\n image.top,\n );\n context.drawImage(image.getElement(), 0, 0, width, height);\n const blendData = context.getImageData(0, 0, width, height).data;\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n const a = data[i + 3];\n\n const tr = blendData[i];\n const tg = blendData[i + 1];\n const tb = blendData[i + 2];\n const ta = blendData[i + 3];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = (r * tr) / 255;\n data[i + 1] = (g * tg) / 255;\n data[i + 2] = (b * tb) / 255;\n data[i + 3] = (a * ta) / 255;\n break;\n case 'mask':\n data[i + 3] = ta;\n break;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const matrix = this.calculateMatrix();\n gl.uniform1i(uniformLocations.uImage, 1); // texture unit 1.\n gl.uniformMatrix3fv(uniformLocations.uTransformMatrix, false, matrix);\n }\n\n /**\n * Returns object representation of an instance\n * TODO: Handle the possibility of missing image better.\n * As of now a BlendImage filter without image can't be used with fromObject\n * @return {Object} Object representation of an instance\n */\n toObject(): {\n type: 'BlendImage';\n image: ReturnType;\n } & BlendImageOwnProps {\n return {\n ...super.toObject(),\n image: this.image && this.image.toObject(),\n };\n }\n\n /**\n * Create filter instance from an object representation\n * @static\n * @param {object} object Object to create an instance from\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting image loading, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static async fromObject(\n { type, image, ...filterOptions }: Record,\n options: { signal: AbortSignal },\n ): Promise> {\n return FabricImage.fromObject(image, options).then(\n (enlivedImage) =>\n new this({ ...filterOptions, image: enlivedImage }) as BlendImage,\n );\n }\n}\n\nclassRegistry.setClass(BlendImage);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec2 uDelta;\n varying vec2 vTexCoord;\n const float nSamples = 15.0;\n vec3 v3offset = vec3(12.9898, 78.233, 151.7182);\n float random(vec3 scale) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\n }\n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n float offset = random(v3offset);\n for (float t = -nSamples; t <= nSamples; t++) {\n float percent = (t + offset - 0.5) / nSamples;\n float weight = 1.0 - abs(percent);\n color += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;\n total += weight;\n }\n gl_FragColor = color / total;\n }\n ` as const;\n","import { createCanvasElement } from '../util/misc/dom';\nimport { BaseFilter } from './BaseFilter';\nimport type {\n TWebGLPipelineState,\n T2DPipelineState,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/blur';\n\ntype BlurOwnProps = {\n blur: number;\n};\n\nexport const blurDefaultValues: BlurOwnProps = {\n blur: 0,\n};\n\n/**\n * Blur filter class\n * @example\n * const filter = new Blur({\n * blur: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class Blur extends BaseFilter<'Blur', BlurOwnProps> {\n /**\n * blur value, in percentage of image dimensions.\n * specific to keep the image blur constant at different resolutions\n * range between 0 and 1.\n * @type Number\n * @default\n */\n declare blur: BlurOwnProps['blur'];\n\n declare horizontal: boolean;\n declare aspectRatio: number;\n\n static type = 'Blur';\n\n static defaults = blurDefaultValues;\n\n static uniformLocations = ['uDelta'];\n\n getFragmentSource(): string {\n return fragmentSource;\n }\n\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n // this aspectRatio is used to give the same blur to vertical and horizontal\n this.aspectRatio = options.sourceWidth / options.sourceHeight;\n options.passes++;\n this._setupFrameBuffer(options);\n this.horizontal = true;\n this.applyToWebGL(options);\n this._swapTextures(options);\n this._setupFrameBuffer(options);\n this.horizontal = false;\n this.applyToWebGL(options);\n this._swapTextures(options);\n } else {\n this.applyTo2d(options);\n }\n }\n\n applyTo2d(options: T2DPipelineState) {\n options.imageData = this.simpleBlur(options);\n }\n\n simpleBlur({\n ctx,\n imageData,\n filterBackend: { resources },\n }: T2DPipelineState) {\n const { width, height } = imageData;\n if (!resources.blurLayer1) {\n resources.blurLayer1 = createCanvasElement();\n resources.blurLayer2 = createCanvasElement();\n }\n const canvas1 = resources.blurLayer1!;\n const canvas2 = resources.blurLayer2!;\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas2.width = canvas1.width = width;\n canvas2.height = canvas1.height = height;\n }\n const ctx1 = canvas1.getContext('2d')!,\n ctx2 = canvas2.getContext('2d')!,\n nSamples = 15,\n blur = this.blur * 0.06 * 0.5;\n let random, percent, j, i;\n\n // load first canvas\n ctx1.putImageData(imageData, 0, 0);\n ctx2.clearRect(0, 0, width, height);\n\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * width + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, j, random);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * height + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, random, j);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n ctx.drawImage(canvas1, 0, 0);\n const newImageData = ctx.getImageData(0, 0, canvas1.width, canvas1.height);\n ctx1.globalAlpha = 1;\n ctx1.clearRect(0, 0, canvas1.width, canvas1.height);\n return newImageData;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const delta = this.chooseRightDelta();\n gl.uniform2fv(uniformLocations.uDelta, delta);\n }\n\n isNeutralState() {\n return this.blur === 0;\n }\n\n /**\n * choose right value of image percentage to blur with\n * @returns {Array} a numeric array with delta values\n */\n chooseRightDelta() {\n let blurScale = 1;\n const delta = [0, 0];\n if (this.horizontal) {\n if (this.aspectRatio > 1) {\n // image is wide, i want to shrink radius horizontal\n blurScale = 1 / this.aspectRatio;\n }\n } else {\n if (this.aspectRatio < 1) {\n // image is tall, i want to shrink radius vertical\n blurScale = this.aspectRatio;\n }\n }\n const blur = blurScale * this.blur * 0.12;\n if (this.horizontal) {\n delta[0] = blur;\n } else {\n delta[1] = blur;\n }\n return delta;\n }\n}\n\nclassRegistry.setClass(Blur);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uBrightness;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n color.rgb += uBrightness;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/brightness';\n\ntype BrightnessOwnProps = {\n brightness: number;\n};\n\nexport const brightnessDefaultValues: BrightnessOwnProps = {\n brightness: 0,\n};\n\n/**\n * Brightness filter class\n * @example\n * const filter = new Brightness({\n * brightness: 0.05\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Brightness extends BaseFilter<'Brightness', BrightnessOwnProps> {\n /**\n * Brightness value, from -1 to 1.\n * translated to -255 to 255 for 2d\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Number} brightness\n * @default\n */\n declare brightness: BrightnessOwnProps['brightness'];\n\n static type = 'Brightness';\n\n static defaults = brightnessDefaultValues;\n\n static uniformLocations = ['uBrightness'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const brightness = Math.round(this.brightness * 255);\n for (let i = 0; i < data.length; i += 4) {\n data[i] = data[i] + brightness;\n data[i + 1] = data[i + 1] + brightness;\n data[i + 2] = data[i + 2] + brightness;\n }\n }\n\n isNeutralState() {\n return this.brightness === 0;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uBrightness, this.brightness);\n }\n}\n\nclassRegistry.setClass(Brightness);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n varying vec2 vTexCoord;\n uniform mat4 uColorMatrix;\n uniform vec4 uConstants;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n color *= uColorMatrix;\n color += uConstants;\n gl_FragColor = color;\n }`;\n","import { BaseFilter } from './BaseFilter';\nimport type {\n T2DPipelineState,\n TMatColorMatrix,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/colorMatrix';\n\ntype ColorMatrixOwnProps = {\n matrix: TMatColorMatrix;\n colorsOnly: boolean;\n};\n\nexport const colorMatrixDefaultValues: ColorMatrixOwnProps = {\n matrix: [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],\n colorsOnly: true,\n};\n\n/**\n * Color Matrix filter class\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @see {@Link http://phoboslab.org/log/2013/11/fast-image-filters-with-webgl demo}\n * @example Kodachrome filter\n * const filter = new ColorMatrix({\n * matrix: [\n 1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,\n -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,\n -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,\n 0, 0, 0, 1, 0\n ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class ColorMatrix<\n Name extends string = 'ColorMatrix',\n OwnProps extends object = ColorMatrixOwnProps,\n> extends BaseFilter {\n /**\n * Colormatrix for pixels.\n * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning\n * outside the -1, 1 range.\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Array} matrix array of 20 numbers.\n * @default\n */\n declare matrix: ColorMatrixOwnProps['matrix'];\n\n /**\n * Lock the colormatrix on the color part, skipping alpha, mainly for non webgl scenario\n * to save some calculation\n * @type Boolean\n * @default true\n */\n declare colorsOnly: ColorMatrixOwnProps['colorsOnly'];\n\n static type = 'ColorMatrix';\n\n static defaults = colorMatrixDefaultValues;\n\n static uniformLocations = ['uColorMatrix', 'uConstants'];\n\n getFragmentSource(): string {\n return fragmentSource;\n }\n\n /**\n * Apply the ColorMatrix operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d(options: T2DPipelineState) {\n const imageData = options.imageData,\n data = imageData.data,\n m = this.matrix,\n colorsOnly = this.colorsOnly;\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n if (colorsOnly) {\n data[i] = r * m[0] + g * m[1] + b * m[2] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + m[9] * 255;\n data[i + 2] = r * m[10] + g * m[11] + b * m[12] + m[14] * 255;\n } else {\n const a = data[i + 3];\n data[i] = r * m[0] + g * m[1] + b * m[2] + a * m[3] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + a * m[8] + m[9] * 255;\n data[i + 2] =\n r * m[10] + g * m[11] + b * m[12] + a * m[13] + m[14] * 255;\n data[i + 3] =\n r * m[15] + g * m[16] + b * m[17] + a * m[18] + m[19] * 255;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const m = this.matrix,\n matrix = [\n m[0],\n m[1],\n m[2],\n m[3],\n m[5],\n m[6],\n m[7],\n m[8],\n m[10],\n m[11],\n m[12],\n m[13],\n m[15],\n m[16],\n m[17],\n m[18],\n ],\n constants = [m[4], m[9], m[14], m[19]];\n gl.uniformMatrix4fv(uniformLocations.uColorMatrix, false, matrix);\n gl.uniform4fv(uniformLocations.uConstants, constants);\n }\n\n toObject() {\n return {\n ...super.toObject(),\n matrix: [...this.matrix] as TMatColorMatrix,\n };\n }\n}\n\nclassRegistry.setClass(ColorMatrix);\n","import { ColorMatrix } from './ColorMatrix';\nimport { classRegistry } from '../ClassRegistry';\nimport type { TMatColorMatrix } from './typedefs';\n\ntype FixedFiltersOwnProps = {\n colorsOnly: boolean;\n};\n\nexport function createColorMatrixFilter(key: string, matrix: TMatColorMatrix) {\n const newClass = class extends ColorMatrix {\n static type = key;\n\n static defaults = {\n colorsOnly: false,\n matrix,\n };\n\n //@ts-expect-error TS wants matrix to be exported.\n toObject(): { type: string } & FixedFiltersOwnProps {\n return { type: this.type, colorsOnly: this.colorsOnly };\n }\n };\n classRegistry.setClass(newClass, key);\n return newClass as typeof ColorMatrix;\n}\n\nexport const Brownie = createColorMatrixFilter(\n 'Brownie',\n [\n 0.5997, 0.34553, -0.27082, 0, 0.186, -0.0377, 0.86095, 0.15059, 0, -0.1449,\n 0.24113, -0.07441, 0.44972, 0, -0.02965, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Vintage = createColorMatrixFilter(\n 'Vintage',\n [\n 0.62793, 0.32021, -0.03965, 0, 0.03784, 0.02578, 0.64411, 0.03259, 0,\n 0.02926, 0.0466, -0.08512, 0.52416, 0, 0.02023, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Kodachrome = createColorMatrixFilter(\n 'Kodachrome',\n [\n 1.12855, -0.39673, -0.03992, 0, 0.24991, -0.16404, 1.08352, -0.05498, 0,\n 0.09698, -0.16786, -0.56034, 1.60148, 0, 0.13972, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Technicolor = createColorMatrixFilter(\n 'Technicolor',\n [\n 1.91252, -0.85453, -0.09155, 0, 0.04624, -0.30878, 1.76589, -0.10601, 0,\n -0.27589, -0.2311, -0.75018, 1.84759, 0, 0.12137, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Polaroid = createColorMatrixFilter(\n 'Polaroid',\n [\n 1.438, -0.062, -0.062, 0, 0, -0.122, 1.378, -0.122, 0, 0, -0.016, -0.016,\n 1.483, 0, 0, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Sepia = createColorMatrixFilter(\n 'Sepia',\n [\n 0.393, 0.769, 0.189, 0, 0, 0.349, 0.686, 0.168, 0, 0, 0.272, 0.534, 0.131,\n 0, 0, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const BlackWhite = createColorMatrixFilter(\n 'BlackWhite',\n [\n 1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 0, 0, 0,\n 1, 0,\n ],\n);\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLPipelineState } from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport { classRegistry } from '../ClassRegistry';\n\ntype ComposedOwnProps = {\n subFilters: BaseFilter[];\n};\n\n/**\n * A container class that knows how to apply a sequence of filters to an input image.\n */\nexport class Composed extends BaseFilter<'Composed', ComposedOwnProps> {\n /**\n * A non sparse array of filters to apply\n */\n declare subFilters: ComposedOwnProps['subFilters'];\n\n static type = 'Composed';\n\n constructor(\n options: { subFilters?: BaseFilter[] } & Record<\n string,\n any\n > = {},\n ) {\n super(options);\n this.subFilters = options.subFilters || [];\n }\n\n /**\n * Apply this container's filters to the input image provided.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be applied.\n */\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n options.passes += this.subFilters.length - 1;\n }\n this.subFilters.forEach((filter) => {\n filter.applyTo(options);\n });\n }\n\n /**\n * Serialize this filter into JSON.\n * @returns {Object} A JSON representation of this filter.\n */\n //@ts-expect-error TS doesn't like this toObject\n toObject(): {\n type: 'Composed';\n subFilters: ReturnType['toObject']>[];\n } {\n return {\n type: this.type,\n subFilters: this.subFilters.map((filter) => filter.toObject()),\n };\n }\n\n isNeutralState() {\n return !this.subFilters.some((filter) => !filter.isNeutralState());\n }\n\n /**\n * Deserialize a JSON definition of a ComposedFilter into a concrete instance.\n * @static\n * @param {oject} object Object to create an instance from\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting `BlendImage` filter loading, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static fromObject(\n object: Record,\n options: { signal: AbortSignal },\n ): Promise {\n return Promise.all(\n ((object.subFilters || []) as BaseFilter[]).map(\n (filter) =>\n classRegistry\n .getClass(filter.type)\n .fromObject(filter, options),\n ),\n ).then(\n (enlivedFilters) => new this({ subFilters: enlivedFilters }) as Composed,\n );\n }\n}\n\nclassRegistry.setClass(Composed);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uContrast;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\n color.rgb = contrastF * (color.rgb - 0.5) + 0.5;\n gl_FragColor = color;\n }`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/constrast';\n\ntype ContrastOwnProps = {\n contrast: number;\n};\n\nexport const contrastDefaultValues: ContrastOwnProps = {\n contrast: 0,\n};\n\n/**\n * Contrast filter class\n * @example\n * const filter = new Contrast({\n * contrast: 0.25\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Contrast extends BaseFilter<'Contrast', ContrastOwnProps> {\n /**\n * contrast value, range from -1 to 1.\n * @param {Number} contrast\n * @default 0\n */\n declare contrast: ContrastOwnProps['contrast'];\n\n static type = 'Contrast';\n\n static defaults = contrastDefaultValues;\n\n static uniformLocations = ['uContrast'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n isNeutralState() {\n return this.contrast === 0;\n }\n\n /**\n * Apply the Contrast operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const contrast = Math.floor(this.contrast * 255),\n contrastF = (259 * (contrast + 255)) / (255 * (259 - contrast));\n\n for (let i = 0; i < data.length; i += 4) {\n data[i] = contrastF * (data[i] - 128) + 128;\n data[i + 1] = contrastF * (data[i + 1] - 128) + 128;\n data[i + 2] = contrastF * (data[i + 2] - 128) + 128;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uContrast, this.contrast);\n }\n}\n\nclassRegistry.setClass(Contrast);\n","export const fragmentSource = {\n Convolute_3_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[9];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 3.0; h+=1.0) {\n for (float w = 0.0; w < 3.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_3_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[9];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 3.0; h+=1.0) {\n for (float w = 0.0; w < 3.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n Convolute_5_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[25];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 5.0; h+=1.0) {\n for (float w = 0.0; w < 5.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_5_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[25];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 5.0; h+=1.0) {\n for (float w = 0.0; w < 5.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n Convolute_7_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[49];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 7.0; h+=1.0) {\n for (float w = 0.0; w < 7.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_7_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[49];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 7.0; h+=1.0) {\n for (float w = 0.0; w < 7.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n Convolute_9_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[81];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 9.0; h+=1.0) {\n for (float w = 0.0; w < 9.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_9_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[81];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 9.0; h+=1.0) {\n for (float w = 0.0; w < 9.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n};\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/convolute';\n\nexport type ConvoluteOwnProps = {\n opaque: boolean;\n matrix: number[];\n};\n\nexport const convoluteDefaultValues: ConvoluteOwnProps = {\n opaque: false,\n matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0],\n};\n\n/**\n * Adapted from html5rocks article\n * @example Sharpen filter\n * const filter = new Convolute({\n * matrix: [ 0, -1, 0,\n * -1, 5, -1,\n * 0, -1, 0 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Blur filter\n * const filter = new Convolute({\n * matrix: [ 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter\n * const filter = new Convolute({\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter with opaqueness\n * const filter = new Convolute({\n * opaque: true,\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class Convolute extends BaseFilter<'Convolute', ConvoluteOwnProps> {\n /*\n * Opaque value (true/false)\n */\n declare opaque: ConvoluteOwnProps['opaque'];\n\n /*\n * matrix for the filter, max 9x9\n */\n declare matrix: ConvoluteOwnProps['matrix'];\n\n static type = 'Convolute';\n\n static defaults = convoluteDefaultValues;\n\n static uniformLocations = ['uMatrix', 'uOpaque', 'uHalfSize', 'uSize'];\n\n getCacheKey() {\n return `${this.type}_${Math.sqrt(this.matrix.length)}_${\n this.opaque ? 1 : 0\n }` as keyof typeof fragmentSource;\n }\n\n getFragmentSource() {\n return fragmentSource[this.getCacheKey()];\n }\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d(options: T2DPipelineState) {\n const imageData = options.imageData,\n data = imageData.data,\n weights = this.matrix,\n side = Math.round(Math.sqrt(weights.length)),\n halfSide = Math.floor(side / 2),\n sw = imageData.width,\n sh = imageData.height,\n output = options.ctx.createImageData(sw, sh),\n dst = output.data,\n // go through the destination image pixels\n alphaFac = this.opaque ? 1 : 0;\n let r, g, b, a, dstOff, scx, scy, srcOff, wt, x, y, cx, cy;\n\n for (y = 0; y < sh; y++) {\n for (x = 0; x < sw; x++) {\n dstOff = (y * sw + x) * 4;\n // calculate the weighed sum of the source image pixels that\n // fall under the convolution matrix\n r = 0;\n g = 0;\n b = 0;\n a = 0;\n\n for (cy = 0; cy < side; cy++) {\n for (cx = 0; cx < side; cx++) {\n scy = y + cy - halfSide;\n scx = x + cx - halfSide;\n\n // eslint-disable-next-line max-depth\n if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {\n continue;\n }\n\n srcOff = (scy * sw + scx) * 4;\n wt = weights[cy * side + cx];\n\n r += data[srcOff] * wt;\n g += data[srcOff + 1] * wt;\n b += data[srcOff + 2] * wt;\n // eslint-disable-next-line max-depth\n if (!alphaFac) {\n a += data[srcOff + 3] * wt;\n }\n }\n }\n dst[dstOff] = r;\n dst[dstOff + 1] = g;\n dst[dstOff + 2] = b;\n if (!alphaFac) {\n dst[dstOff + 3] = a;\n } else {\n dst[dstOff + 3] = data[dstOff + 3];\n }\n }\n }\n options.imageData = output;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1fv(uniformLocations.uMatrix, this.matrix);\n }\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject() {\n return {\n ...super.toObject(),\n opaque: this.opaque,\n matrix: [...this.matrix],\n };\n }\n}\n\nclassRegistry.setClass(Convolute);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec3 uGamma;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n vec3 correction = (1.0 / uGamma);\n color.r = pow(color.r, correction.r);\n color.g = pow(color.g, correction.g);\n color.b = pow(color.b, correction.b);\n gl_FragColor = color;\n gl_FragColor.rgb *= color.a;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/gamma';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\n\nconst GAMMA = 'Gamma' as const;\n\nexport type GammaInput = [number, number, number];\n\nexport type GammaOwnProps = {\n gamma: GammaInput;\n};\n\nexport const gammaDefaultValues: GammaOwnProps = {\n gamma: [1, 1, 1],\n};\n\n/**\n * Gamma filter class\n * @example\n * const filter = new Gamma({\n * gamma: [1, 0.5, 2.1]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Gamma extends BaseFilter {\n /**\n * Gamma array value, from 0.01 to 2.2.\n * @param {Array} gamma\n * @default\n */\n declare gamma: GammaOwnProps['gamma'];\n declare rgbValues?: {\n r: Uint8Array;\n g: Uint8Array;\n b: Uint8Array;\n };\n\n static type = GAMMA;\n\n static defaults = gammaDefaultValues;\n\n static uniformLocations = ['uGamma'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n constructor(options: { gamma?: GammaInput } = {}) {\n super(options);\n this.gamma =\n options.gamma ||\n ((\n this.constructor as typeof Gamma\n ).defaults.gamma.concat() as GammaInput);\n }\n\n /**\n * Apply the Gamma operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const gamma = this.gamma,\n rInv = 1 / gamma[0],\n gInv = 1 / gamma[1],\n bInv = 1 / gamma[2];\n\n if (!this.rgbValues) {\n this.rgbValues = {\n r: new Uint8Array(256),\n g: new Uint8Array(256),\n b: new Uint8Array(256),\n };\n }\n\n // This is an optimization - pre-compute a look-up table for each color channel\n // instead of performing these pow calls for each pixel in the image.\n const rgb = this.rgbValues;\n for (let i = 0; i < 256; i++) {\n rgb.r[i] = Math.pow(i / 255, rInv) * 255;\n rgb.g[i] = Math.pow(i / 255, gInv) * 255;\n rgb.b[i] = Math.pow(i / 255, bInv) * 255;\n }\n for (let i = 0; i < data.length; i += 4) {\n data[i] = rgb.r[data[i]];\n data[i + 1] = rgb.g[data[i + 1]];\n data[i + 2] = rgb.b[data[i + 2]];\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform3fv(uniformLocations.uGamma, this.gamma);\n }\n\n isNeutralState() {\n const { gamma } = this;\n return gamma[0] === 1 && gamma[1] === 1 && gamma[2] === 1;\n }\n\n toObject(): { type: typeof GAMMA; gamma: GammaInput } {\n return {\n type: GAMMA,\n gamma: this.gamma.concat() as GammaInput,\n };\n }\n}\n\nclassRegistry.setClass(Gamma);\n","import type { TGrayscaleMode } from '../Grayscale';\n\nexport const fragmentSource: Record = {\n average: `\n precision highp float;\n uniform sampler2D uTexture;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float average = (color.r + color.b + color.g) / 3.0;\n gl_FragColor = vec4(average, average, average, color.a);\n }\n `,\n lightness: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform int uMode;\n varying vec2 vTexCoord;\n void main() {\n vec4 col = texture2D(uTexture, vTexCoord);\n float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\n gl_FragColor = vec4(average, average, average, col.a);\n }\n `,\n luminosity: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform int uMode;\n varying vec2 vTexCoord;\n void main() {\n vec4 col = texture2D(uTexture, vTexCoord);\n float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\n gl_FragColor = vec4(average, average, average, col.a);\n }\n `,\n};\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/grayscale';\n\nexport type TGrayscaleMode = 'average' | 'lightness' | 'luminosity';\n\ntype GrayscaleOwnProps = {\n mode: TGrayscaleMode;\n};\n\nexport const grayscaleDefaultValues: GrayscaleOwnProps = {\n mode: 'average',\n};\n\n/**\n * Grayscale image filter class\n * @example\n * const filter = new Grayscale();\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Grayscale extends BaseFilter<'Grayscale', GrayscaleOwnProps> {\n declare mode: TGrayscaleMode;\n\n static type = 'Grayscale';\n\n static defaults = grayscaleDefaultValues;\n\n static uniformLocations = ['uMode'];\n\n /**\n * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n for (let i = 0, value: number; i < data.length; i += 4) {\n switch (this.mode) {\n case 'average':\n value = (data[i] + data[i + 1] + data[i + 2]) / 3;\n break;\n case 'lightness':\n value =\n (Math.min(data[i], data[i + 1], data[i + 2]) +\n Math.max(data[i], data[i + 1], data[i + 2])) /\n 2;\n break;\n case 'luminosity':\n value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];\n break;\n }\n\n data[i] = value;\n data[i + 1] = value;\n data[i + 2] = value;\n }\n }\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n getFragmentSource() {\n return fragmentSource[this.mode];\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const mode = 1;\n gl.uniform1i(uniformLocations.uMode, mode);\n }\n\n /**\n * Grayscale filter isNeutralState implementation\n * The filter is never neutral\n * on the image\n **/\n isNeutralState() {\n return false;\n }\n}\n\nclassRegistry.setClass(Grayscale);\n","import { cos } from '../util/misc/cos';\nimport { sin } from '../util/misc/sin';\nimport { ColorMatrix } from './ColorMatrix';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\n\nexport type HueRotationOwnProps = {\n rotation: number;\n};\n\nexport const hueRotationDefaultValues: HueRotationOwnProps = {\n rotation: 0,\n};\n\n/**\n * HueRotation filter class\n * @example\n * const filter = new HueRotation({\n * rotation: -0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class HueRotation extends ColorMatrix<\n 'HueRotation',\n HueRotationOwnProps\n> {\n /**\n * HueRotation value, from -1 to 1.\n */\n declare rotation: HueRotationOwnProps['rotation'];\n\n static type = 'HueRotation';\n\n static defaults = hueRotationDefaultValues;\n\n calculateMatrix() {\n const rad = this.rotation * Math.PI,\n cosine = cos(rad),\n sine = sin(rad),\n aThird = 1 / 3,\n aThirdSqtSin = Math.sqrt(aThird) * sine,\n OneMinusCos = 1 - cosine;\n this.matrix = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n this.matrix[0] = cosine + OneMinusCos / 3;\n this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[6] = cosine + aThird * OneMinusCos;\n this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[12] = cosine + aThird * OneMinusCos;\n }\n\n isNeutralState() {\n return this.rotation === 0;\n }\n\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n this.calculateMatrix();\n super.applyTo(options);\n }\n\n //@ts-expect-error TS and classes with different methods\n toObject(): { type: 'HueRotation'; rotation: number } {\n return {\n type: this.type,\n rotation: this.rotation,\n };\n }\n}\n\nclassRegistry.setClass(HueRotation);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform int uInvert;\n uniform int uAlpha;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n if (uInvert == 1) {\n if (uAlpha == 1) {\n gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,1.0 -color.a);\n } else {\n gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\n }\n } else {\n gl_FragColor = color;\n }\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/invert';\n\nexport type InvertOwnProps = {\n alpha: boolean;\n invert: boolean;\n};\n\nexport const invertDefaultValues: InvertOwnProps = {\n alpha: false,\n invert: true,\n};\n\n/**\n * @example\n * const filter = new Invert();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\nexport class Invert extends BaseFilter<'Invert', InvertOwnProps> {\n /**\n * Invert also alpha.\n * @param {Boolean} alpha\n * @default\n **/\n declare alpha: InvertOwnProps['alpha'];\n\n /**\n * Filter invert. if false, does nothing\n * @param {Boolean} invert\n * @default\n */\n declare invert: InvertOwnProps['invert'];\n\n static type = 'Invert';\n\n static defaults = invertDefaultValues;\n\n static uniformLocations = ['uInvert', 'uAlpha'];\n\n /**\n * Apply the Invert operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n for (let i = 0; i < data.length; i += 4) {\n data[i] = 255 - data[i];\n data[i + 1] = 255 - data[i + 1];\n data[i + 2] = 255 - data[i + 2];\n\n if (this.alpha) {\n data[i + 3] = 255 - data[i + 3];\n }\n }\n }\n\n protected getFragmentSource(): string {\n return fragmentSource;\n }\n\n /**\n * Invert filter isNeutralState implementation\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * @param {Object} options\n **/\n isNeutralState() {\n return !this.invert;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1i(uniformLocations.uInvert, Number(this.invert));\n gl.uniform1i(uniformLocations.uAlpha, Number(this.alpha));\n }\n}\n\nclassRegistry.setClass(Invert);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uStepH;\n uniform float uNoise;\n uniform float uSeed;\n varying vec2 vTexCoord;\n float rand(vec2 co, float seed, float vScale) {\n return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\n }\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/noise';\n\nexport type NoiseOwnProps = {\n noise: number;\n};\n\nexport const noiseDefaultValues: NoiseOwnProps = {\n noise: 0,\n};\n\n/**\n * Noise filter class\n * @example\n * const filter = new Noise({\n * noise: 700\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class Noise extends BaseFilter<'Noise', NoiseOwnProps> {\n /**\n * Noise value, from\n * @param {Number} noise\n * @default\n */\n declare noise: NoiseOwnProps['noise'];\n\n static type = 'Noise';\n\n static defaults = noiseDefaultValues;\n\n static uniformLocations = ['uNoise', 'uSeed'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const noise = this.noise;\n for (let i = 0; i < data.length; i += 4) {\n const rand = (0.5 - Math.random()) * noise;\n data[i] += rand;\n data[i + 1] += rand;\n data[i + 2] += rand;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uNoise, this.noise / 255);\n gl.uniform1f(uniformLocations.uSeed, Math.random());\n }\n\n isNeutralState() {\n return this.noise === 0;\n }\n}\n\nclassRegistry.setClass(Noise);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uBlocksize;\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n float blockW = uBlocksize * uStepW;\n float blockH = uBlocksize * uStepH;\n int posX = int(vTexCoord.x / blockW);\n int posY = int(vTexCoord.y / blockH);\n float fposX = float(posX);\n float fposY = float(posY);\n vec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\n vec4 color = texture2D(uTexture, squareCoords);\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/pixelate';\n\nexport type PixelateOwnProps = {\n blocksize: number;\n};\n\nexport const pixelateDefaultValues: PixelateOwnProps = {\n blocksize: 4,\n};\n\n/**\n * Pixelate filter class\n * @example\n * const filter = new Pixelate({\n * blocksize: 8\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Pixelate extends BaseFilter<'Pixelate', PixelateOwnProps> {\n declare blocksize: PixelateOwnProps['blocksize'];\n\n static type = 'Pixelate';\n\n static defaults = pixelateDefaultValues;\n\n static uniformLocations = ['uBlocksize'];\n\n /**\n * Apply the Pixelate operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data, width, height } }: T2DPipelineState) {\n for (let i = 0; i < height; i += this.blocksize) {\n for (let j = 0; j < width; j += this.blocksize) {\n const index = i * 4 * width + j * 4;\n const r = data[index];\n const g = data[index + 1];\n const b = data[index + 2];\n const a = data[index + 3];\n\n for (let _i = i; _i < Math.min(i + this.blocksize, height); _i++) {\n for (let _j = j; _j < Math.min(j + this.blocksize, width); _j++) {\n const index = _i * 4 * width + _j * 4;\n data[index] = r;\n data[index + 1] = g;\n data[index + 2] = b;\n data[index + 3] = a;\n }\n }\n }\n }\n }\n\n /**\n * Indicate when the filter is not gonna apply changes to the image\n **/\n isNeutralState() {\n return this.blocksize === 1;\n }\n\n protected getFragmentSource(): string {\n return fragmentSource;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uBlocksize, this.blocksize);\n }\n}\n\nclassRegistry.setClass(Pixelate);\n","export const fragmentShader = `\nprecision highp float;\nuniform sampler2D uTexture;\nuniform vec4 uLow;\nuniform vec4 uHigh;\nvarying vec2 vTexCoord;\nvoid main() {\n gl_FragColor = texture2D(uTexture, vTexCoord);\n if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\n gl_FragColor.a = 0.0;\n }\n}\n`;\n","import { classRegistry } from '../ClassRegistry';\nimport { Color } from '../color/Color';\nimport { BaseFilter } from './BaseFilter';\nimport { fragmentShader } from './shaders/removeColor';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\n\nexport type RemoveColorOwnProps = {\n color: string;\n distance: number;\n useAlpha: boolean;\n};\n\nexport const removeColorDefaultValues: RemoveColorOwnProps = {\n color: '#FFFFFF',\n distance: 0.02,\n useAlpha: false,\n};\n\n/**\n * Remove white filter class\n * @example\n * const filter = new RemoveColor({\n * threshold: 0.2,\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class RemoveColor extends BaseFilter<\n 'RemoveColor',\n RemoveColorOwnProps\n> {\n /**\n * Color to remove, in any format understood by {@link Color}.\n * @param {String} type\n * @default\n */\n declare color: RemoveColorOwnProps['color'];\n\n /**\n * distance to actual color, as value up or down from each r,g,b\n * between 0 and 1\n **/\n declare distance: RemoveColorOwnProps['distance'];\n\n /**\n * For color to remove inside distance, use alpha channel for a smoother deletion\n * NOT IMPLEMENTED YET\n **/\n declare useAlpha: RemoveColorOwnProps['useAlpha'];\n\n static type = 'RemoveColor';\n\n static defaults = removeColorDefaultValues;\n\n static uniformLocations = ['uLow', 'uHigh'];\n\n getFragmentSource() {\n return fragmentShader;\n }\n\n /**\n * Applies filter to canvas element\n * @param {Object} canvasEl Canvas element to apply filter to\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const distance = this.distance * 255,\n source = new Color(this.color).getSource(),\n lowC = [source[0] - distance, source[1] - distance, source[2] - distance],\n highC = [\n source[0] + distance,\n source[1] + distance,\n source[2] + distance,\n ];\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n\n if (\n r > lowC[0] &&\n g > lowC[1] &&\n b > lowC[2] &&\n r < highC[0] &&\n g < highC[1] &&\n b < highC[2]\n ) {\n data[i + 3] = 0;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const source = new Color(this.color).getSource(),\n distance = this.distance,\n lowC = [\n 0 + source[0] / 255 - distance,\n 0 + source[1] / 255 - distance,\n 0 + source[2] / 255 - distance,\n 1,\n ],\n highC = [\n source[0] / 255 + distance,\n source[1] / 255 + distance,\n source[2] / 255 + distance,\n 1,\n ];\n gl.uniform4fv(uniformLocations.uLow, lowC);\n gl.uniform4fv(uniformLocations.uHigh, highC);\n }\n}\n\nclassRegistry.setClass(RemoveColor);\n","import { BaseFilter } from './BaseFilter';\nimport type {\n T2DPipelineState,\n TWebGLPipelineState,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport { classRegistry } from '../ClassRegistry';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type { XY } from '../Point';\n\nexport type TResizeType = 'bilinear' | 'hermite' | 'sliceHack' | 'lanczos';\n\nexport type ResizeOwnProps = {\n resizeType: TResizeType;\n scaleX: number;\n scaleY: number;\n lanczosLobes: number;\n};\n\nexport const resizeDefaultValues: ResizeOwnProps = {\n resizeType: 'hermite',\n scaleX: 1,\n scaleY: 1,\n lanczosLobes: 3,\n};\n\ntype ResizeDuring2DResize = Resize & {\n rcpScaleX: number;\n rcpScaleY: number;\n};\n\ntype ResizeDuringWEBGLResize = Resize & {\n rcpScaleX: number;\n rcpScaleY: number;\n horizontal: boolean;\n width: number;\n height: number;\n taps: number[];\n tempScale: number;\n dH: number;\n dW: number;\n};\n\n/**\n * Resize image filter class\n * @example\n * const filter = new Resize();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\nexport class Resize extends BaseFilter<'Resize', ResizeOwnProps> {\n /**\n * Resize type\n * for webgl resizeType is just lanczos, for canvas2d can be:\n * bilinear, hermite, sliceHack, lanczos.\n * @default\n */\n declare resizeType: ResizeOwnProps['resizeType'];\n\n /**\n * Scale factor for resizing, x axis\n * @param {Number} scaleX\n * @default\n */\n declare scaleX: ResizeOwnProps['scaleX'];\n\n /**\n * Scale factor for resizing, y axis\n * @param {Number} scaleY\n * @default\n */\n declare scaleY: ResizeOwnProps['scaleY'];\n\n /**\n * LanczosLobes parameter for lanczos filter, valid for resizeType lanczos\n * @param {Number} lanczosLobes\n * @default\n */\n declare lanczosLobes: ResizeOwnProps['lanczosLobes'];\n\n static type = 'Resize';\n\n static defaults = resizeDefaultValues;\n\n static uniformLocations = ['uDelta', 'uTaps'];\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n this: ResizeDuringWEBGLResize,\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform2fv(\n uniformLocations.uDelta,\n this.horizontal ? [1 / this.width, 0] : [0, 1 / this.height],\n );\n gl.uniform1fv(uniformLocations.uTaps, this.taps);\n }\n\n getFilterWindow(this: ResizeDuringWEBGLResize) {\n const scale = this.tempScale;\n return Math.ceil(this.lanczosLobes / scale);\n }\n\n getCacheKey(this: ResizeDuringWEBGLResize): string {\n const filterWindow = this.getFilterWindow();\n return `${this.type}_${filterWindow}`;\n }\n\n getFragmentSource(this: ResizeDuringWEBGLResize): string {\n const filterWindow = this.getFilterWindow();\n return this.generateShader(filterWindow);\n }\n\n getTaps(this: ResizeDuringWEBGLResize) {\n const lobeFunction = this.lanczosCreate(this.lanczosLobes),\n scale = this.tempScale,\n filterWindow = this.getFilterWindow(),\n taps = new Array(filterWindow);\n for (let i = 1; i <= filterWindow; i++) {\n taps[i - 1] = lobeFunction(i * scale);\n }\n return taps;\n }\n\n /**\n * Generate vertex and shader sources from the necessary steps numbers\n * @param {Number} filterWindow\n */\n generateShader(filterWindow: number) {\n const offsets = new Array(filterWindow);\n for (let i = 1; i <= filterWindow; i++) {\n offsets[i - 1] = `${i}.0 * uDelta`;\n }\n return `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec2 uDelta;\n varying vec2 vTexCoord;\n uniform float uTaps[${filterWindow}];\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float sum = 1.0;\n ${offsets\n .map(\n (offset, i) => `\n color += texture2D(uTexture, vTexCoord + ${offset}) * uTaps[${i}] + texture2D(uTexture, vTexCoord - ${offset}) * uTaps[${i}];\n sum += 2.0 * uTaps[${i}];\n `,\n )\n .join('\\n')}\n gl_FragColor = color / sum;\n }\n `;\n }\n\n applyToForWebgl(this: ResizeDuringWEBGLResize, options: TWebGLPipelineState) {\n options.passes++;\n this.width = options.sourceWidth;\n this.horizontal = true;\n this.dW = Math.round(this.width * this.scaleX);\n this.dH = options.sourceHeight;\n this.tempScale = this.dW / this.width;\n this.taps = this.getTaps();\n options.destinationWidth = this.dW;\n super.applyTo(options);\n options.sourceWidth = options.destinationWidth;\n\n this.height = options.sourceHeight;\n this.horizontal = false;\n this.dH = Math.round(this.height * this.scaleY);\n this.tempScale = this.dH / this.height;\n this.taps = this.getTaps();\n options.destinationHeight = this.dH;\n super.applyTo(options);\n options.sourceHeight = options.destinationHeight;\n }\n\n /**\n * Apply the resize filter to the image\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n (this as unknown as ResizeDuringWEBGLResize).applyToForWebgl(options);\n } else {\n (this as unknown as ResizeDuring2DResize).applyTo2d(options);\n }\n }\n\n isNeutralState() {\n return this.scaleX === 1 && this.scaleY === 1;\n }\n\n lanczosCreate(lobes: number) {\n return (x: number) => {\n if (x >= lobes || x <= -lobes) {\n return 0.0;\n }\n if (x < 1.1920929e-7 && x > -1.1920929e-7) {\n return 1.0;\n }\n x *= Math.PI;\n const xx = x / lobes;\n return ((Math.sin(x) / x) * Math.sin(xx)) / xx;\n };\n }\n\n applyTo2d(this: ResizeDuring2DResize, options: T2DPipelineState) {\n const imageData = options.imageData,\n scaleX = this.scaleX,\n scaleY = this.scaleY;\n\n this.rcpScaleX = 1 / scaleX;\n this.rcpScaleY = 1 / scaleY;\n\n const oW = imageData.width;\n const oH = imageData.height;\n const dW = Math.round(oW * scaleX);\n const dH = Math.round(oH * scaleY);\n let newData: ImageData;\n\n if (this.resizeType === 'sliceHack') {\n newData = this.sliceByTwo(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'hermite') {\n newData = this.hermiteFastResize(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'bilinear') {\n newData = this.bilinearFiltering(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'lanczos') {\n newData = this.lanczosResize(options, oW, oH, dW, dH);\n } else {\n // this should never trigger, is here just for safety net.\n newData = new ImageData(dW, dH);\n }\n options.imageData = newData;\n }\n\n /**\n * Filter sliceByTwo\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n sliceByTwo(\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ) {\n const imageData = options.imageData;\n const mult = 0.5;\n let doneW = false;\n let doneH = false;\n let stepW = oW * mult;\n let stepH = oH * mult;\n const resources = options.filterBackend.resources;\n let sX = 0;\n let sY = 0;\n const dX = oW;\n let dY = 0;\n if (!resources.sliceByTwo) {\n resources.sliceByTwo = createCanvasElement();\n }\n const tmpCanvas = resources.sliceByTwo;\n if (tmpCanvas.width < oW * 1.5 || tmpCanvas.height < oH) {\n tmpCanvas.width = oW * 1.5;\n tmpCanvas.height = oH;\n }\n const ctx = tmpCanvas.getContext('2d')!;\n ctx.clearRect(0, 0, oW * 1.5, oH);\n ctx.putImageData(imageData, 0, 0);\n\n dW = Math.floor(dW);\n dH = Math.floor(dH);\n\n while (!doneW || !doneH) {\n oW = stepW;\n oH = stepH;\n if (dW < Math.floor(stepW * mult)) {\n stepW = Math.floor(stepW * mult);\n } else {\n stepW = dW;\n doneW = true;\n }\n if (dH < Math.floor(stepH * mult)) {\n stepH = Math.floor(stepH * mult);\n } else {\n stepH = dH;\n doneH = true;\n }\n ctx.drawImage(tmpCanvas, sX, sY, oW, oH, dX, dY, stepW, stepH);\n sX = dX;\n sY = dY;\n dY += stepH;\n }\n return ctx.getImageData(sX, sY, dW, dH);\n }\n\n /**\n * Filter lanczosResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n lanczosResize(\n this: ResizeDuring2DResize,\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ): ImageData {\n function process(u: number): ImageData {\n let v, i, weight, idx, a, red, green, blue, alpha, fX, fY;\n center.x = (u + 0.5) * ratioX;\n icenter.x = Math.floor(center.x);\n for (v = 0; v < dH; v++) {\n center.y = (v + 0.5) * ratioY;\n icenter.y = Math.floor(center.y);\n a = 0;\n red = 0;\n green = 0;\n blue = 0;\n alpha = 0;\n for (i = icenter.x - range2X; i <= icenter.x + range2X; i++) {\n if (i < 0 || i >= oW) {\n continue;\n }\n fX = Math.floor(1000 * Math.abs(i - center.x));\n if (!cacheLanc[fX]) {\n cacheLanc[fX] = {};\n }\n for (let j = icenter.y - range2Y; j <= icenter.y + range2Y; j++) {\n if (j < 0 || j >= oH) {\n continue;\n }\n fY = Math.floor(1000 * Math.abs(j - center.y));\n if (!cacheLanc[fX][fY]) {\n cacheLanc[fX][fY] = lanczos(\n Math.sqrt(\n Math.pow(fX * rcpRatioX, 2) + Math.pow(fY * rcpRatioY, 2),\n ) / 1000,\n );\n }\n weight = cacheLanc[fX][fY];\n if (weight > 0) {\n idx = (j * oW + i) * 4;\n a += weight;\n red += weight * srcData[idx];\n green += weight * srcData[idx + 1];\n blue += weight * srcData[idx + 2];\n alpha += weight * srcData[idx + 3];\n }\n }\n }\n idx = (v * dW + u) * 4;\n destData[idx] = red / a;\n destData[idx + 1] = green / a;\n destData[idx + 2] = blue / a;\n destData[idx + 3] = alpha / a;\n }\n\n if (++u < dW) {\n return process(u);\n } else {\n return destImg;\n }\n }\n\n const srcData = options.imageData.data,\n destImg = options.ctx.createImageData(dW, dH),\n destData = destImg.data,\n lanczos = this.lanczosCreate(this.lanczosLobes),\n ratioX = this.rcpScaleX,\n ratioY = this.rcpScaleY,\n rcpRatioX = 2 / this.rcpScaleX,\n rcpRatioY = 2 / this.rcpScaleY,\n range2X = Math.ceil((ratioX * this.lanczosLobes) / 2),\n range2Y = Math.ceil((ratioY * this.lanczosLobes) / 2),\n cacheLanc: Record> = {},\n center: XY = { x: 0, y: 0 },\n icenter: XY = { x: 0, y: 0 };\n\n return process(0);\n }\n\n /**\n * bilinearFiltering\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n bilinearFiltering(\n this: ResizeDuring2DResize,\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ) {\n let a;\n let b;\n let c;\n let d;\n let x;\n let y;\n let i;\n let j;\n let xDiff;\n let yDiff;\n let chnl;\n let color;\n let offset = 0;\n let origPix;\n const ratioX = this.rcpScaleX;\n const ratioY = this.rcpScaleY;\n const w4 = 4 * (oW - 1);\n const img = options.imageData;\n const pixels = img.data;\n const destImage = options.ctx.createImageData(dW, dH);\n const destPixels = destImage.data;\n for (i = 0; i < dH; i++) {\n for (j = 0; j < dW; j++) {\n x = Math.floor(ratioX * j);\n y = Math.floor(ratioY * i);\n xDiff = ratioX * j - x;\n yDiff = ratioY * i - y;\n origPix = 4 * (y * oW + x);\n\n for (chnl = 0; chnl < 4; chnl++) {\n a = pixels[origPix + chnl];\n b = pixels[origPix + 4 + chnl];\n c = pixels[origPix + w4 + chnl];\n d = pixels[origPix + w4 + 4 + chnl];\n color =\n a * (1 - xDiff) * (1 - yDiff) +\n b * xDiff * (1 - yDiff) +\n c * yDiff * (1 - xDiff) +\n d * xDiff * yDiff;\n destPixels[offset++] = color;\n }\n }\n }\n return destImage;\n }\n\n /**\n * hermiteFastResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n hermiteFastResize(\n this: ResizeDuring2DResize,\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ) {\n const ratioW = this.rcpScaleX,\n ratioH = this.rcpScaleY,\n ratioWHalf = Math.ceil(ratioW / 2),\n ratioHHalf = Math.ceil(ratioH / 2),\n img = options.imageData,\n data = img.data,\n img2 = options.ctx.createImageData(dW, dH),\n data2 = img2.data;\n for (let j = 0; j < dH; j++) {\n for (let i = 0; i < dW; i++) {\n const x2 = (i + j * dW) * 4;\n let weight = 0;\n let weights = 0;\n let weightsAlpha = 0;\n let gxR = 0;\n let gxG = 0;\n let gxB = 0;\n let gxA = 0;\n const centerY = (j + 0.5) * ratioH;\n for (let yy = Math.floor(j * ratioH); yy < (j + 1) * ratioH; yy++) {\n const dy = Math.abs(centerY - (yy + 0.5)) / ratioHHalf,\n centerX = (i + 0.5) * ratioW,\n w0 = dy * dy;\n for (let xx = Math.floor(i * ratioW); xx < (i + 1) * ratioW; xx++) {\n let dx = Math.abs(centerX - (xx + 0.5)) / ratioWHalf;\n const w = Math.sqrt(w0 + dx * dx);\n /* eslint-disable max-depth */\n if (w > 1 && w < -1) {\n continue;\n }\n //hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n if (weight > 0) {\n dx = 4 * (xx + yy * oW);\n //alpha\n gxA += weight * data[dx + 3];\n weightsAlpha += weight;\n //colors\n if (data[dx + 3] < 255) {\n weight = (weight * data[dx + 3]) / 250;\n }\n gxR += weight * data[dx];\n gxG += weight * data[dx + 1];\n gxB += weight * data[dx + 2];\n weights += weight;\n }\n /* eslint-enable max-depth */\n }\n }\n data2[x2] = gxR / weights;\n data2[x2 + 1] = gxG / weights;\n data2[x2 + 2] = gxB / weights;\n data2[x2 + 3] = gxA / weightsAlpha;\n }\n }\n return img2;\n }\n}\n\nclassRegistry.setClass(Resize);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uSaturation;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float rgMax = max(color.r, color.g);\n float rgbMax = max(rgMax, color.b);\n color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\n color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\n color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/saturation';\n\nexport type SaturationOwnProps = {\n saturation: number;\n};\n\nexport const saturationDefaultValues: SaturationOwnProps = {\n saturation: 0,\n};\n\n/**\n * Saturate filter class\n * @example\n * const filter = new Saturation({\n * saturation: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Saturation extends BaseFilter<'Saturation', SaturationOwnProps> {\n /**\n * Saturation value, from -1 to 1.\n * Increases/decreases the color saturation.\n * A value of 0 has no effect.\n *\n * @param {Number} saturation\n * @default\n */\n declare saturation: SaturationOwnProps['saturation'];\n\n static type = 'Saturation';\n\n static defaults = saturationDefaultValues;\n\n static uniformLocations = ['uSaturation'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Saturation operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const adjust = -this.saturation;\n for (let i = 0; i < data.length; i += 4) {\n const max = Math.max(data[i], data[i + 1], data[i + 2]);\n data[i] += max !== data[i] ? (max - data[i]) * adjust : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * adjust : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * adjust : 0;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uSaturation, -this.saturation);\n }\n\n isNeutralState() {\n return this.saturation === 0;\n }\n}\n\nclassRegistry.setClass(Saturation);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uVibrance;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float max = max(color.r, max(color.g, color.b));\n float avg = (color.r + color.g + color.b) / 3.0;\n float amt = (abs(max - avg) * 2.0) * uVibrance;\n color.r += max != color.r ? (max - color.r) * amt : 0.00;\n color.g += max != color.g ? (max - color.g) * amt : 0.00;\n color.b += max != color.b ? (max - color.b) * amt : 0.00;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/vibrance';\n\nexport type VibranceOwnProps = {\n vibrance: number;\n};\n\nexport const vibranceDefaultValues: VibranceOwnProps = {\n vibrance: 0,\n};\n\n/**\n * Vibrance filter class\n * @example\n * const filter = new Vibrance({\n * vibrance: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Vibrance extends BaseFilter<'Vibrance', VibranceOwnProps> {\n /**\n * Vibrance value, from -1 to 1.\n * Increases/decreases the saturation of more muted colors with less effect on saturated colors.\n * A value of 0 has no effect.\n *\n * @param {Number} vibrance\n * @default\n */\n declare vibrance: VibranceOwnProps['vibrance'];\n\n static type = 'Vibrance';\n\n static defaults = vibranceDefaultValues;\n\n static uniformLocations = ['uVibrance'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Vibrance operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const adjust = -this.vibrance;\n for (let i = 0; i < data.length; i += 4) {\n const max = Math.max(data[i], data[i + 1], data[i + 2]);\n const avg = (data[i] + data[i + 1] + data[i + 2]) / 3;\n const amt = ((Math.abs(max - avg) * 2) / 255) * adjust;\n data[i] += max !== data[i] ? (max - data[i]) * amt : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * amt : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * amt : 0;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {TWebGLUniformLocationMap} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uVibrance, -this.vibrance);\n }\n\n isNeutralState() {\n return this.vibrance === 0;\n }\n}\n\nclassRegistry.setClass(Vibrance);\n","// First we set the env variable\n\nimport { setEnv } from './src/env';\nimport { getEnv, getNodeCanvas } from './src/env/node';\n\nsetEnv(getEnv());\n\n// After the env is set we can export everything and expose specific node functionality\n\nimport type { JpegConfig, PngConfig } from 'canvas';\nimport {\n Canvas as CanvasBase,\n StaticCanvas as StaticCanvasBase,\n} from './fabric';\nimport { FabricObject } from './src/shapes/Object/Object';\n\nFabricObject.ownDefaults.objectCaching = false;\n\nexport * from './fabric';\n\nexport class StaticCanvas extends StaticCanvasBase {\n getNodeCanvas() {\n return getNodeCanvas(this.getElement());\n }\n createPNGStream(opts?: PngConfig) {\n return this.getNodeCanvas().createPNGStream(opts);\n }\n createJPEGStream(opts?: JpegConfig) {\n return this.getNodeCanvas().createJPEGStream(opts);\n }\n}\n\n/**\n * **NOTICE**:\n * {@link Canvas} is designed for interactivity.\n * Therefore, using it in node has no benefit.\n * Use {@link StaticCanvas} instead.\n */\nexport class Canvas extends CanvasBase {\n getNodeCanvas() {\n return getNodeCanvas(this.getElement());\n }\n createPNGStream(opts?: PngConfig) {\n return this.getNodeCanvas().createPNGStream(opts);\n }\n createJPEGStream(opts?: JpegConfig) {\n return this.getNodeCanvas().createJPEGStream(opts);\n }\n}\n"],"names":["BaseConfiguration","constructor","_defineProperty","window","devicePixelRatio","Configuration","config","configure","arguments","length","undefined","Object","assign","addFonts","paths","fontPaths","_objectSpread","removeFonts","fontFamilys","forEach","fontFamily","clearFonts","restoreDefaults","keys","defaults","reduce","acc","key","log","severity","_len","optionalParams","Array","_key","console","FabricError","Error","message","options","concat","SignalAbortedError","context","GLProbe","WebGLProbe","testPrecision","gl","precision","fragmentSource","fragmentShader","createShader","FRAGMENT_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","queryWebGL","canvas","getContext","maxTextureSize","getParameter","MAX_TEXTURE_SIZE","GLPrecision","find","getExtension","loseContext","isSupported","textureSize","copyPasteData","getEnv","document","isTouchSupported","navigator","maxTouchPoints","dispose","env","setEnv","value","getBrowserEnv","getFabricDocument","getFabricWindow","getDevicePixelRatio","_config$devicePixelRa","Math","max","NodeGLProbe","implForWrapper","jsdomImplForWrapper","utils","JSDOMWindow","JSDOM","decodeURIComponent","resources","pretendToBeVisual","getNodeCanvas","canvasEl","impl","_canvas","_image","element","_currentSrc","_attributes","_classList","Cache","getFontCache","_ref","fontStyle","fontWeight","toLowerCase","charWidthsCache","fontCache","cacheKey","clearFontCache","limitDimsByArea","ar","perfLimitSizeTotal","roughWidth","sqrt","floor","cache","VERSION","version","noop","halfPI","PI","twoMathPi","PiBy180","iMatrix","freeze","DEFAULT_SVG_FONT_SIZE","ALIASING_LIMIT","kRect","CENTER","LEFT","TOP","BOTTOM","RIGHT","NONE","reNewline","MOVING","SCALING","ROTATING","ROTATE","SKEWING","RESIZING","MODIFY_POLY","MODIFY_PATH","CHANGED","SCALE","SCALE_X","SCALE_Y","SKEW_X","SKEW_Y","FILL","STROKE","MODIFIED","JSON","SVG","ClassRegistry","Map","has","classType","getClass","get","setClass","classConstructor","set","type","getSVGClass","SVGTagName","setSVGClass","classRegistry","AnimationRegistry","remove","index","indexOf","splice","cancelAll","animations","animation","abort","cancelByCanvas","filter","_animation$target","target","cancelByTarget","runningAnimations","Observable","on","arg0","handler","__eventListeners","entries","eventName","off","push","once","disposers","_ref2","d","disposer","onceHandler","args","call","_removeEventListener","eventListener","_ref3","fire","_this$__eventListener","listenersForEvent","i","removeFromArray","array","idx","cos","angle","angleSlice","abs","sin","sign","Point","y","x","add","that","addEquals","scalarAdd","scalar","scalarAddEquals","subtract","subtractEquals","scalarSubtract","scalarSubtractEquals","multiply","scalarMultiply","scalarMultiplyEquals","divide","scalarDivide","scalarDivideEquals","eq","lt","lte","gt","gte","lerp","t","min","distanceFrom","dx","dy","midPointFrom","toString","setXY","setX","setY","setFromPoint","swap","clone","rotate","radians","origin","ZERO","sinus","cosinus","p","rotated","transform","ignoreOffset","isCollection","fabricObject","isArray","_objects","createCollectionMixin","Base","Collection","_onObjectAdded","object","_onObjectRemoved","_onStackOrderChanged","objects","size","insertAt","_len2","_key2","removed","_len3","_key3","forEachObject","callback","getObjects","_len4","types","_key4","o","isType","item","isEmpty","contains","deep","includes","some","obj","complexity","memo","current","sendObjectToBack","unshift","bringObjectToFront","sendObjectBackwards","intersecting","newIdx","findNewLowerIndex","bringObjectForward","findNewUpperIndex","moveObjectTo","isOverlapping","collectObjects","left","top","width","height","includeIntersecting","tl","br","selectable","visible","intersectsWithRect","isContainedWithinRect","containsPoint","CommonMethods","_setOptions","prop","_setObject","_set","toggle","property","requestAnimFrame","requestAnimationFrame","cancelAnimFrame","handle","cancelAnimationFrame","id","uid","createCanvasElement","createElement","createImage","copyCanvasElement","_newCanvas$getContext","newCanvas","drawImage","toDataURL","format","quality","isHTMLCanvas","degreesToRadians","degrees","radiansToDegrees","isIdentityMatrix","mat","every","transformPoint","invertTransform","a","r","multiplyTransformMatrices","b","is2x2","multiplyTransformMatrixArray","matrices","reduceRight","product","curr","calcPlaneRotation","atan2","qrDecompose","denom","pow","scaleX","scaleY","skewX","skewY","translateX","translateY","createTranslateMatrix","createRotateMatrix","angleRadiant","cosValue","sinValue","createScaleMatrix","angleToSkew","tan","createSkewXMatrix","skewValue","createSkewYMatrix","calcDimensionsMatrix","flipX","flipY","matrix","composeMatrix","scaleMatrix","loadImage","url","signal","crossOrigin","Promise","resolve","reject","aborted","img","err","src","addEventListener","done","onload","onerror","removeEventListener","enlivenObjects","reviver","instances","all","map","fromObject","then","fabricInstance","catch","error","instance","finally","enlivenObjectEnlivables","serializedObject","promises","values","enlived","pick","source","pickBy","predicate","ColorNameMap","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","reRGBa","reHSLa","reHex","hue2rgb","q","rgb2Hsl","g","maxValue","minValue","h","s","l","round","fromAlphaToFloat","parseFloat","endsWith","hexify","toUpperCase","padStart","greyAverage","avg","Color","color","setSource","_source","_tryParsingColor","sourceFromHex","sourceFromRgb","sourceFromHsl","isUnrecognised","getSource","toRgb","toRgba","join","toHsl","toHsla","toHex","fullHex","toHexa","slice","getAlpha","setAlpha","alpha","toGrayscale","toBlackWhite","threshold","average","bOrW","overlayWith","otherColor","otherAlpha","otherSource","R","G","B","fromRgb","fromRgba","match","parsedValue","fromHsl","fromHsla","match1degrees","parseAngletoDegrees","fromHex","isShortNotation","expandedValue","split","hex","hexCouple","parseInt","lowercase","numeric","toFixed","number","fractionDigits","Number","getSvgAttributes","commonAttributes","parseUnit","fontSize","unit","exec","dpi","DPI","parseAlign","align","parsePreserveAspectRatioAttribute","attribute","firstPart","secondPart","trim","alignX","alignY","meetOrSlice","matrixToSVG","NUM_FRACTION_DIGITS","colorPropToSVG","inlineStyle","colorValue","opacityValue","toLive","opacity","createSVGRect","svgColor","w","isFiller","filler","isSerializableFiller","toObject","isPattern","offsetX","isTextObject","_renderText","isPath","_renderPathCommands","isActiveSelection","getScrollLeftTop","doc","getDocumentFromElement","elementLoop","docElement","documentElement","body","scrollLeft","scrollTop","parentNode","host","nodeType","style","position","el","ownerDocument","getWindowFromElement","_el$ownerDocument","defaultView","setCanvasDimensions","ctx","retinaScaling","setAttribute","scale","setCSSDimensions","getElementOffset","_getWindowFromElement","offset","elemStyle","getComputedStyle","borderLeftWidth","borderTopWidth","paddingLeft","paddingTop","box","docElem","getBoundingClientRect","scrollLeftTop","clientLeft","clientTop","makeElementUnselectable","onselectstart","userSelect","StaticCanvasDOMManager","createLowerCanvas","lower","getElementById","hasAttribute","_originalCanvasStyle","cssText","classList","cleanupDOM","removeAttribute","setDimensions","calcOffset","staticCanvasDefaults","backgroundVpt","backgroundColor","overlayVpt","overlayColor","includeDefaultValues","svgViewportTransformation","renderOnAddRemove","skipOffscreen","enableRetinaScaling","imageSmoothingEnabled","controlsAboveOverlay","allowTouchScrolling","viewportTransform","StaticCanvas","lowerCanvasEl","_this$elements$lower","elements","contextContainer","_this$elements$lower2","getDefaults","ownDefaults","initElements","_setDimensionsImpl","skipControlsDrawing","calcViewportBoundaries","requestRenderAll","setCoords","getRetinaScaling","_offset","getWidth","getHeight","setWidth","setHeight","dimensions","cssOnly","backstoreOnly","hasLostContext","getZoom","setViewportTransform","vpt","zoomToPoint","point","before","newPoint","after","setZoom","absolutePan","relativePan","getElement","clearContext","clearRect","clear","backgroundImage","overlayImage","renderAll","cancelRequestedRender","destroyed","renderCanvas","renderAndReset","nextRenderHandle","disposed","iVpt","vptCoords","tr","bl","drawControls","_ctx","v","path","clipPath","patternQuality","_renderBackground","save","_renderObjects","restore","shouldCache","_transformDone","renderCache","forClipping","drawClipPathOnCanvas","_renderOverlay","__cleanupTask","globalCompositeOperation","zoomX","zoomY","_cacheCanvas","cacheTranslationX","cacheTranslationY","len","render","_renderBackgroundOrOverlay","fill","needsVpt","isAFiller","beginPath","moveTo","lineTo","closePath","fillStyle","offsetY","m","gradientTransform","patternTransform","getCenter","getCenterPoint","centerObjectH","_centerObject","centerObjectV","centerObject","viewportCenterObject","getVpCenter","viewportCenterObjectH","viewportCenterObjectV","center","toDatalessJSON","propertiesToInclude","toDatalessObject","_toObjectMethod","toJSON","methodName","clipPathData","excludeFromExport","_toObject","__serializeBgOverlay","originalValue","data","bgImage","bgColor","background","overlay","toSVG","markup","_setSVGPreamble","_setSVGHeader","clipPathId","_setSVGBgOverlayColor","_setSVGBgOverlayImage","_setSVGObjects","suppressPreamble","encoding","optViewBox","viewBox","createSVGFontFacesMarkup","createSVGRefElementsMarkup","createSVGClipPathMarkup","toClipPathSVG","shouldTransform","additionalTransform","fontList","styles","styleRow","fontListMarkup","_setSVGObject","bgOrOverlay","repeat","finalWidth","finalHeight","shouldInvert","loadFromJSON","json","serialized","parse","enlivedMap","properties","cloneWithoutData","multiplier","finalMultiplier","toCanvasElement","scaledWidth","scaledHeight","zoom","originalWidth","originalHeight","originalSkipControlsDrawing","newZoom","vp","newVp","originalRetina","objectsToRender","task","destroy","kill","touchEvents","getTouchInfo","event","touchProp","changedTouches","getPointer","scroll","_evt","clientX","clientY","isTouchEvent","pointerType","stopEvent","e","preventDefault","stopPropagation","makeBoundingBoxFromPoints","points","removeTransformFromObject","inverted","finalTransform","calcOwnMatrix","applyTransformToObject","addTransformToObject","_qrDecompose","otherOptions","_objectWithoutProperties","_excluded","setPositionByOrigin","resetObjectTransform","saveObjectTransform","sizeAfterTransform","dimX","dimY","bbox","calcPlaneChangeMatrix","from","to","sendPointToPlane","sendVectorToPlane","sendObjectToPlane","fireEvent","_target$canvas","originOffset","bottom","right","resolveOrigin","originValue","NOT_ALLOWED_CURSOR","getActionFromCorner","alreadySelected","corner","control","controls","getActionName","isTransformCentered","originX","originY","invertOrigin","isLocked","lockingKey","commonEventInfo","eventData","pointer","findCornerQuadrant","getTotalAngle","cornerAngle","normalizePoint","getRelativeCenterPoint","translateToGivenOrigin","p2","getLocalPoint","padding","localPoint","dragHandler","newLeft","newTop","moveX","moveY","FabricObjectSVGExportMixin","getSvgStyles","skipShadow","fillRule","strokeWidth","strokeDashArray","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","visibility","getSvgFilter","stroke","shadow","getSvgCommons","getSvgTransform","full","calcTransformMatrix","svgTransform","_toSVG","_reviver","_createBaseSVGMarkup","_createBaseClipPathSVGMarkup","objectMarkup","commonPieces","noStyle","withShadow","styleInfo","shadowInfo","vectorEffect","strokeUniform","absoluteClipPath","absolutePositioned","clipPathMarkup","addPaintOrder","paintFirst","getSvgRegex","arr","RegExp","reNum","String","raw","_templateObject","_taggedTemplateLiteral","svgNS","reFontDeclaration","svgValidTagNames","svgViewBoxElements","svgInvalidAncestors","svgValidParents","attributesMap","cx","cy","display","fSize","cPath","svgValidTagNamesRegEx","svgViewBoxElementsRegEx","svgValidParentsRegEx","reViewBoxAttrValue","unitVectorX","zero","rotateVector","vector","createVector","magnitude","calcAngleBetweenVectors","crossProduct","dotProduct","calcVectorRotation","getUnitVector","getOrthonormalVector","counterClockwise","isBetweenVectors","AxB","AxT","BxT","shadowOffsetRegex","reOffsetsAndBlur","shadowDefaultValues","blur","affectStroke","nonScaling","Shadow","parseShadow","shadowStr","replace","BLUR_BOX","fBoxX","fBoxY","capValue","stateProperties","cacheProperties","fabricObjectDefaultValues","minScaleLimit","objectCaching","centeredRotation","centeredScaling","dirty","interactiveObjectDefaultValues","noScaleCache","lockMovementX","lockMovementY","lockRotation","lockScalingX","lockScalingY","lockSkewingX","lockSkewingY","lockScalingFlip","cornerSize","touchCornerSize","transparentCorners","cornerColor","cornerStrokeColor","cornerStyle","cornerDashArray","hasControls","borderColor","borderDashArray","borderOpacityWhenMoving","borderScaleFactor","hasBorders","selectionBackgroundColor","evented","perPixelTargetFind","activeOn","hoverCursor","moveCursor","normalize","c","asin","elastic","defaultEasing","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","normA","normS","normP","easeOutElastic","normC","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeOutBounce","easeInBounce","easeInOutBounce","easeInQuad","easeOutQuad","easeInOutQuad","defaultAbort","AnimationBase","startValue","byValue","duration","delay","easing","onStart","onChange","onComplete","tick","bind","_onStart","_onChange","_onComplete","_abort","endValue","calculate","state","_state","isDone","start","firstTick","timestamp","startTime","Date","register","setTimeout","durationMs","boundDurationMs","durationProgress","valueProgress","unregister","ValueAnimation","timeElapsed","ArrayAnimation","defaultColorEasing","wrapColorCallback","rgba","ColorAnimation","startColor","endColor","isArrayAnimation","animate","animateColor","Intersection","status","append","isPointContained","T","A","infinite","AB","AT","isPointInPolygon","other","hits","inter","intersectSegmentSegment","intersectLineLine","a1","a2","b1","b2","aInfinite","bInfinite","a2xa1x","a2ya1y","b2xb1x","b2yb1y","a1xb1x","a1yb1y","uaT","ubT","uB","ua","ub","segmentsCoincide","intersectSegmentLine","s1","s2","l1","l2","intersectLinePolygon","result","intersectSegmentPolygon","intersectPolygonPolygon","points1","points2","coincidences","intersectPolygonRectangle","r1","r2","topRight","bottomLeft","ObjectGeometry","getX","getXY","getY","getRelativeX","setRelativeX","getRelativeY","setRelativeY","relativePosition","getRelativeXY","group","setRelativeXY","isStrokeAccountedForInDimensions","getCoords","aCoords","calcACoords","coords","intersection","intersectsWithObject","isContainedWithinObject","getBoundingRect","isOnScreen","isPartiallyOnScreen","allPointsAreOutside","getScaledWidth","_getTransformedDimensions","getScaledHeight","scaleToWidth","boundingRectFactor","scaleToHeight","getCanvasRetinaScaling","_this$canvas","getViewportTransform","_this$canvas2","rotateMatrix","tMatrix","finalMatrix","dim","transformMatrixKey","skipGroup","prefix","matrixCache","ownMatrixCache","_getNonTransformedDimensions","_calculateCurrentDimensions","dimOptions","preScalingStrokeValue","postScalingStrokeValue","noSkew","finalDimensions","fromOriginX","fromOriginY","toOriginX","toOriginY","translateToCenterPoint","translateToOriginPoint","relCenter","getPointByOrigin","pos","_getLeftTopCoords","FabricObject","name","setOptions","_createCacheCanvas","_cacheContext","_updateCacheCanvas","_limitCacheSize","dims","maxCacheSideLimit","minCacheSideLimit","limX","limY","capped","_getCacheCanvasDimensions","objectScale","getTotalObjectScaling","neededX","neededY","minCacheSize","dimensionsChanged","zoomChanged","drawingWidth","drawingHeight","shouldRedraw","additionalWidth","additionalHeight","shouldResizeCanvas","canvasWidth","canvasHeight","sizeGrowing","sizeShrinking","getHeightOfLine","ceil","setTransform","translate","needFullTransform","contextTop","getObjectScaling","retina","getObjectOpacity","_constrainScale","isChanged","parent","isNotVisible","_setupCompositeOperation","drawSelectionBackground","_setOpacity","_setShadow","drawCacheOnCanvas","_removeCacheCanvas","drawObject","isCacheDirty","hasStroke","hasFill","needsItsOwnCache","ownCaching","isOnACache","willDrawShadow","drawClipPathOnCache","originalFill","originalStroke","_setClippingProperties","_render","_drawClipPath","skipCanvas","fillRect","_removeShadow","globalAlpha","_setStrokeStyles","decl","lineWidth","lineCap","lineDashOffset","lineJoin","miterLimit","gradientUnits","_applyPatternForTransformedGradient","strokeStyle","_applyPatternGradientTransform","_setFillStyles","_setLineDash","dashArray","setLineDash","sx","sy","multX","multY","scaling","shadowColor","shadowBlur","browserShadowBlurConstant","shadowOffsetX","shadowOffsetY","_renderPaintInOrder","_renderStroke","_renderFill","_pCtx$createPattern","pCanvas","pCtx","createPattern","_findCenterFromElement","objectForm","cloneAsImage","ImageClass","origParams","originalGroup","originalShadow","canvasProvider","withoutTransform","withoutShadow","boundingRect","shadowOffset","originalCanvas","setOnGroup","animatable","_animate","propIsColor","colorProperties","animationOptions","isDescendantOf","getAncestors","ancestors","findCommonAncestors","fork","otherFork","common","otherAncestors","ancestor","j","hasCommonAncestors","commonAncestors","isInFrontOf","ancestorData","firstCommonAncestor","headOfFork","pop","headOfOtherFork","thisIndex","otherIndex","propertiesToSerialize","customProperties","toFixedBound","val","_removeDefaultValues","hasStaticDefaultValues","baseValues","getPrototypeOf","baseValue","_fromObject","serializedObjectOptions","_ref4","extraParam","_excluded2","enlivedObjectOptions","wrapWithFireEvent","actionHandler","extraEventInfo","actionPerformed","wrapWithFixedAnchor","centerPoint","constraint","changeObjectWidth","strokePadding","oldWidth","newWidth","changeWidth","renderCircleControl","styleOverride","xSize","sizeX","ySize","sizeY","myLeft","myTop","arc","renderSquareControl","xSizeBy2","ySizeBy2","strokeRect","Control","shouldActivate","controlKey","_fabricObject$canvas","getActiveObject","isControlVisible","getActionHandler","getMouseDownHandler","mouseDownHandler","getMouseUpHandler","mouseUpHandler","cursorStyleHandler","cursorStyle","actionName","getVisibility","_fabricObject$_contro","_fabricObject$_contro2","_controlsVisibility","setVisibility","positionHandler","currentControl","calcCornerCoords","objectCornerSize","centerX","centerY","isTouch","touchSizeX","touchSizeY","rotationStyleHandler","rotateObjectWithSnapping","ex","ey","theta","pivotPoint","lastAngle","curAngle","snapAngle","snapThreshold","rightAngleLocked","leftAngleLocked","hasRotated","rotationWithSnapping","scaleIsProportional","uniformIsToggled","uniScaleKey","uniformScaling","scalingIsForbidden","by","scaleProportionally","lockX","lockY","scaleMap","scaleCursorStyleHandler","n","scaleObject","forbidScaling","signX","signY","gestureScale","distance","original","originalDistance","oldScaleX","oldScaleY","scaleObjectFromCorner","scaleObjectX","scaleObjectY","scalingEqually","scalingX","scalingY","AXIS_KEYS","counterAxis","skew","lockSkewing","flip","skewMap","skewCursorStyleHandler","skewObject","axis","skewingSide","skewKey","skewingBefore","skewingStart","shearingStart","shearing","skewing","atan","changed","dimBefore","dimAfter","compensationFactor","skewHandler","originKey","lockSkewingKey","flipKey","counterOriginKey","counterFlipKey","counterOriginFactor","skewingDirection","finalHandler","skewHandlerX","skewHandlerY","isAltAction","altActionKey","scaleOrSkewActionName","isAlternative","scaleSkewCursorStyleHandler","scalingXOrSkewingY","scalingYOrSkewingX","createObjectDefaultControls","ml","mr","mb","mt","mtr","withConnection","createResizeControls","createTextboxDefaultControls","InteractiveFabricObject","createControls","targetCanvas","_currentTransform","action","startsWith","getActiveControl","__corner","coord","oCoords","findControl","forTouch","cornerEntries","touchCorner","calcOCoords","rMatrix","positionMatrix","startMatrix","transformOptions","forEachControl","_calcCornerCoords","fn","_activeObject","wh","strokeBorders","_drawBorders","drawControlsConnectingLines","_renderControls","styleOptions","shouldDrawBorders","shouldDrawControls","isMoving","drawBorders","forActiveSelection","shouldStroke","setControlVisible","setControlsVisibility","clearContextTop","restoreManually","onDeselect","_options","onSelect","shouldStartDragging","_e","onDragStart","canDrop","renderDragSourceEffect","renderDropTargetEffect","applyMixins","derivedCtor","constructors","baseCtor","getOwnPropertyNames","prototype","defineProperty","getOwnPropertyDescriptor","create","isTransparent","tolerance","getImageData","alphaChannel","rotatePoint","findIndexRight","StrokeProjectionsBase","strokeProjectionMagnitude","strokeUniformScalar","createSideVector","projectOrthogonally","applySkew","calcOrthogonalProjection","isSkewed","scaleUnitVector","unitVector","zeroVector","StrokeLineJoinProjections","getOrthogonalRotationFactor","vector1","vector2","C","AC","bisector","orthogonalProjection","correctSide","projectBevel","projections","projectMiter","hypotUnitScalar","miterVector","projectRoundNoSkew","startCircle","endCircle","radiusOnAxisX","radiusOnAxisY","projectRoundWithSkew","circleRadius","newY","furthestY","newX","furthestX","projectRound","isStraightLine","newOrigin","proj0","proj1","comparisonVector","isProj0Start","projectPoints","project","originPoint","projectedPoint","StrokeLineCapProjections","projectButt","projection","projectSquare","strokePointingOut","projectedA","projectStrokeOnPoints","openPath","reduced","cloneStyles","newObj","keyInner","capitalize","string","firstLetterOnly","charAt","escapeXml","graphemeSplit","textstring","graphemes","chr","getWholeChar","str","code","charCodeAt","isNaN","next","prev","hasStyleChanged","prevStyle","thisStyle","forTextSpans","textBackgroundColor","deltaY","overline","underline","linethrough","stylesToArray","text","textLines","stylesArray","charIndex","chars","end","stylesFromArray","stylesObject","styleIndex","SHARED_ATTRIBUTES","selectorMatches","selector","nodeName","classNames","getAttribute","azAz","matcher","splitClassNames","doesSomeParentMatch","selectors","parentMatching","parentElement","elementMatchesRule","firstMatching","getGlobalStylesForElement","cssRules","rule","normalizeAttr","attr","_attributesMap","regex","cleanupSvgAttribute","attributeValue","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","transforms","transformList","_templateObject7","reTransformList","reTransform","reTransformAll","parseTransformAttribute","test","matchAll","transformMatch","matchedParams","operation","rawArgs","arg1","arg2","arg3","arg4","arg5","arg","normalizeValue","parentAttributes","parsed","ouputValue","transformMatrix","fillIndex","strokeIndex","parseFontDeclaration","oStyle","lineHeight","parseStyleObject","parseStyleString","chunk","parseStyleAttribute","colorAttributesMap","setStrokeFillOpacity","attributes","colorAttr","parseAttributes","parentFontSize","ownAttributes","normalizedStyle","normalizedAttr","normalizedValue","font","mergedAttrs","rectDefaultValues","rx","ry","RECT_PROPS","Rect","_initRxRy","isRounded","bezierCurveTo","fromElement","_parseAttributes","ATTRIBUTE_NAMES","restOfparsedAttributes","Boolean","LAYOUT_TYPE_INITIALIZATION","LAYOUT_TYPE_ADDED","LAYOUT_TYPE_REMOVED","LAYOUT_TYPE_IMPERATIVE","LAYOUT_TYPE_OBJECT_MODIFIED","LAYOUT_TYPE_OBJECT_MODIFYING","getObjectBounds","destinationGroup","currentGroup","objectCenter","accountForStroke","strokeUniformVector","scalingStrokeWidth","sizeVector","LayoutStrategy","calcLayoutResult","shouldPerformLayout","calcBoundingBox","prevStrategy","strategy","shouldLayoutClipPath","getInitialSize","overrides","bboxSize","bboxLeftTop","bboxCenter","actualSize","relativeCorrection","FitContentLayout","LAYOUT_MANAGER","LayoutManager","_subscriptions","performLayout","strictContext","bubbles","_prevLayoutStrategy","onBeforeLayout","layoutResult","getLayoutResult","commitLayout","onAfterLayout","attachHandlers","trigger","subscribe","unsubscribe","_context","delete","unsubscribeTargets","targets","subscribeTargets","tricklingContext","layoutManager","prevCenter","nextCenter","correction","layoutObjects","_context$x","_context$y","layoutObject","_","bubblingContext","NoopLayoutManager","groupDefaultValues","subTargetCheck","interactive","Group","groupInit","_options$layoutManage","__objectSelectionTracker","__objectSelectionMonitor","__objectSelectionDisposer","enterGroup","canEnterGroup","_filterObjectsBeforeEnteringGroup","allowedObjects","_onAfterObjectsChange","removeParentTransform","exitGroup","_shouldSetNestedCoords","removeAll","_activeObjects","selected","activeObjects","_watchObject","watch","_enterGroup","activeObject","_exitGroup","ownCache","preserveObjectStacking","triggerLayout","__serializeObjects","method","_includeDefaultValues","originalDefaults","_createSVGBgRect","fillStroke","commons","svgString","bg","abortable","hydratedOptions","layoutClass","strategyClass","groupSVGElements","findScaleToFit","destination","findScaleToCover","commaWsp","reArcCommandPoints","rePathCommand","repeatedCommands","M","segmentToBezier","theta1","theta2","cosTh","sinTh","cx1","cy1","mT","fromX","fromY","costh1","sinth1","costh2","sinth2","toX","toY","cp1X","cp1Y","cp2X","cp2Y","arcToSegments","large","sweep","rotateX","root","sinTheta","px","py","rx2","ry2","py2","px2","pl","_rx","_ry","mTheta","calcVectorAngle","dtheta","segments","mDelta","th3","ux","uy","vx","vy","ta","tb","CB1","CB2","CB3","CB4","getBoundsOfCurve","begx","begy","cp1x","cp1y","cp2x","cp2y","endx","endy","argsString","cachesBoundsOfCurve","boundsOfCurveCache","tvalues","bounds","b2ac","sqrtb2ac","t1","t2","jlen","iterator","getPointOnCubicBezierIterator","fromArcToBeziers","fx","fy","rot","tx","ty","segsNorm","makePathSimpler","x1","y1","destinationPath","previous","controlX","controlY","parsedCommand","converted","calcLineLength","x2","y2","pct","c1","c2","c3","c4","QB1","QB2","QB3","getTangentCubicIterator","p1x","p1y","p2x","p2y","p3x","p3y","p4x","p4y","qb1","qb2","qb3","tangentX","tangentY","getPointOnQuadraticBezierIterator","getTangentQuadraticIterator","invT","pathIterator","tempP","tmpLen","perc","findPercentageForDistance","segInfo","nextLen","nextStep","lastPerc","angleFinder","getPathSegmentsInfo","totalLength","tempInfo","info","basicInfo","command","destX","destY","getPointOnPath","infos","segPercent","segment","rePathCmdAll","regExpArcCommandPoints","reMyNum","commandLengths","parsePath","pathString","_pathString$match","chain","matchStr","commandLetter","commandLength","paramArr","lastIndex","out","newCommand","transformedCommand","getSmoothPathFromPoints","p1","multSignX","multSignY","manyPoints","midPoint","transformPath","pathOffset","pathSegment","newSegment","getRegularPolygonPath","numVertexes","radius","interiorAngle","rotationAdjustment","rad","joinPath","pathData","setStyle","elementStyle","setProperty","mergeClipPaths","_b$group","getRandomInt","random","request","xhr","XMLHttpRequest","removeListener","ontimeout","onreadystatechange","readyState","open","send","_assignTransformMatrixProps","removeTransformMatrixForSvgParsing","preserveAspectRatioOptions","cropX","cropY","offsetLeft","offsetTop","CanvasDOMManager","containerClass","upperCanvasEl","createUpperCanvas","upper","applyCanvasStyle","container","createContainerElement","replaceChild","className","removeChild","canvasDefaults","centeredKey","selection","selectionKey","selectionColor","selectionDashArray","selectionBorderColor","selectionLineWidth","selectionFullyContained","defaultCursor","freeDrawingCursor","notAllowedCursor","targetFindTolerance","skipTargetFind","stopContextMenu","fireRightClick","fireMiddleClick","enablePointerEvents","SelectableCanvas","_this$elements$upper","_this$elements$upper2","wrapperEl","_objectsToRender","deselected","_discardActiveObject","_hoveredTarget","_hoveredTargets","_chooseObjectsToRender","contextTopDirty","_groupSelector","isDrawingMode","renderTopLayer","_isCurrentlyDrawing","freeDrawingBrush","_drawSelection","renderTop","setTargetFindTolerance","pixelFindCanvasEl","pixelFindContext","isTargetTransparent","selectionBgc","enhancedTolerance","_isSelectionKeyPressed","sKey","_shouldClearSelection","getActiveObjects","_shouldCenterTransform","modifierKeyPressed","centerTransform","_getOriginFromCorner","controlName","_setupCurrentTransform","_control$getActionHan","getScenePoint","altKey","lastX","lastY","shiftKey","setCursor","cursor","deltaX","extent","strokeOffset","minX","minY","maxX","maxY","findTarget","getViewportPoint","aObjects","searchPossibleTargets","subTargets","altSelectionKey","_pointIsInObjectSelectionArea","viewportZoom","angleRadians","cosP","sinP","cosPSinP","cosPMinusSinP","_checkTarget","isEditing","_searchPossibleTargets","subTarget","_pointer","_absolutePointer","fromViewport","boundsWidth","boundsHeight","cssScale","_resetTransformEventData","_setBrushStyles","willReadFrequently","getTopContext","getSelectionContext","getSelectionElement","active","_fireSelectionEvents","oldObjects","somethingChanged","invalidate","added","setActiveObject","currentActives","_setActiveObject","prevActiveObject","endCurrentTransform","discardActiveObject","discarded","_finalizeCurrentTransform","_scaling","originalProperties","_realizeGroupTransformOnObject","layoutProps","originalValues","TextEditingManager","cb","hiddenTextarea","focus","__disposer","exitTextEditing","exitEditing","onMouseMove","_this$target","updateSelectionOnMouseMove","addEventOptions","passive","getEventPoints","viewportPoint","scenePoint","absolutePointer","addListener","syntheticEventConfig","mouse","in","targetIn","targetOut","canvasIn","canvasOut","drag","Canvas","eventHandler","addOrRemove","_getEventPrefix","functor","_eventjsFunctor","canvasElement","eventTypePrefix","_onResize","_onMouseDown","_onMouseMove","_onMouseOut","_onMouseEnter","_onMouseWheel","_onContextMenu","_onDoubleClick","_onDragStart","_onDragEnd","_onDragOver","_onDragEnter","_onDragLeave","_onDrop","_onTouchStart","removeListeners","_onMouseUp","_onTouchEnd","__onMouseWheel","shared","nestedTarget","_isClick","_dragSource","_onDragProgress","_renderDragEffects","dropTarget","_dropTarget","didDrop","dataTransfer","dropEffect","dragSource","_draggedoverTarget","findDragTargets","eventType","_fireEnterLeaveEvents","_basicEventHandler","_cacheTransformEventData","_handleEvent","getPointerId","evt","identifier","pointerId","_isMainEvent","isPrimary","touches","mainTouchId","__onMouseDown","__onMouseUp","_willAddMouseDown","clearTimeout","__onMouseMove","_shouldRender","_this$_activeObject","isClick","_target","button","_onMouseUpInDrawingMode","shouldRender","targetWasActive","handleSelection","found","originalControl","originalMouseUpHandler","_setCursorFromEvent","currentTarget","currentSubTargets","_onMouseDownInDrawingMode","onMouseDown","_onMouseMoveInDrawingMode","onMouseUp","grouped","handleMultiSelection","groupSelector","_fireOverOutEvents","_transformObject","textEditingManager","fireSyntheticInOutEvents","oldTarget","fireCanvas","draggedoverTarget","targetChanged","outOpt","nextTarget","inOpt","previousTarget","localPointer","_performTransformAction","activeSelection","reverse","isAS","prevActiveObjects","multiSelectAdd","klass","newActiveSelection","point1","point2","collectedObjects","linearDefaultCoords","radialDefaultCoords","ifNaN","valueIfNaN","RE_PERCENT","isPercent","parsePercent","NaN","RE_KEY_VALUE_PAIRS","RE_KEY_VALUE","parseColorStop","keyValuePairs","parseColorStops","opacityAttr","colorStops","colorStopEls","getElementsByTagName","parseType","parseGradientUnits","convertPercentUnitsToValues","valuesToConvert","finalValue","propValue","getValue","parseLinearCoords","parseRadialCoords","parseCoords","Gradient","addColorStop","colorStop","preTransform","sort","needsSwap","minRadius","maxRadius","percentageShift","gradient","createLinearGradient","createRadialGradient","svgOptions","viewBoxWidth","viewBoxHeight","Pattern","isImageSource","isCanvasSource","sourceToString","complete","naturalWidth","naturalHeight","patternSource","patternOffsetX","patternOffsetY","patternWidth","patternHeight","BaseBrush","_saveAndTransform","needsFullRender","_resetShadow","_isOutSideCanvas","Path","_setPath","adjustPosition","setBoundingBox","_calcBoundsFromPath","quadraticCurveTo","pathCmd","sourcePath","_getOffsetTransform","digits","_calcDimensions","subpathStartX","subpathStartY","parsedAttributes","isEmptySVGPath","PencilBrush","_points","_hasStraightLine","drawSegment","drawStraightLine","straightLineKey","_prepareForDrawing","_addPoint","limitedToCanvasSize","oldEnd","_finalizeAndAddPath","_reset","convertPointsToSVGPath","createPath","decimatePoints","lastPoint","cDistance","adjustedDistance","newPoints","decimate","CIRCLE_PROPS","circleDefaultValues","startAngle","endAngle","Circle","setRadius","getRadiusX","getRadiusY","startX","startY","endX","endY","largeFlag","sweepFlag","otherParsedAttributes","CircleBrush","drawDot","addPoint","dot","originalRenderOnAddRemove","circles","circle","pointerPoint","getUniqueRects","rects","uniqueRects","uniqueRectsArray","SprayBrush","sprayChunks","sprayChunk","addSprayChunk","renderChunck","chunck","rect","optimizeOverlapping","sprayChunck","density","dotWidthVariance","dotWidth","randomOpacity","PatternBrush","getPatternSrc","dotDistance","patternCanvas","patternCtx","getPattern","pattern","topLeft","coordProps","Line","_setWidthHeight","calcLinePoints","origStrokeStyle","_this$stroke","_x1","_x2","_y1","_y2","xMult","yMult","triangleDefaultValues","Triangle","widthBy2","heightBy2","ellipseDefaultValues","ELLIPSE_PROPS","Ellipse","getRx","getRy","parsePointsAttribute","pointsSplit","parsedPoints","polylineDefaultValues","exactBoundingBox","Polyline","initialized","isOpen","_projectStrokeOnPoints","strokeDiff","bboxNoStroke","layoutProperties","_options$width","_options$height","_options$width2","_options$height2","output","diffX","diffY","Polygon","fontProperties","textDecorationProperties","textLayoutProperties","additionalProps","styleProperties","textDefaultValues","_reNewline","_reSpacesAndTabs","_reSpaceAndTab","_reWords","textAlign","superscript","baseline","subscript","pathStartOffset","pathSide","pathAlign","_fontSizeFraction","offsets","_fontSizeMult","charSpacing","direction","CACHE_FONT_SIZE","MIN_TEXT_WIDTH","JUSTIFY","JUSTIFY_LEFT","JUSTIFY_RIGHT","JUSTIFY_CENTER","StyledText","isEmptyStyles","lineIndex","line","p3","styleHas","cleanStyle","stylesCount","letterCount","stylePropertyValue","allStyleObjectPropertiesMatch","graphemeCount","styleObject","stylePropertyHasBeenSet","_textLines","removeStyle","lineNum","charNum","_extendStyles","get2DCursorLocation","_getLineStyle","_setLineStyle","newStyle","_getStyleDeclaration","_setStyleDeclaration","getSelectionStyles","startIndex","endIndex","getStyleAtPosition","getCompleteStyleDeclaration","setSelectionStyles","_forceClearCache","_lineStyle$charIndex","lineStyle","_styleProperties","_deleteStyleDeclaration","_deleteLineStyle","multipleSpacesRegex","dblQuoteRegex","createSVGInlineRect","TextSVGExportMixin","_getSVGLeftTopOffsets","textAndBg","_getSVGTextAndBg","textTop","textLeft","_wrapSVGTextAndBg","lineTop","textBgRects","textSpans","noShadow","textDecoration","getSvgTextDecoration","textTopOffset","textLeftOffset","lineOffset","_getLineLeftOffset","_setSVGTextLineBg","_setSVGTextLineText","_createTextCharSpan","char","styleDecl","styleProps","getSvgSpanStyles","fillStyles","dySpan","isJustify","actualStyle","nextStyle","charsToRender","charBox","boxWidth","timeToRender","__charBounds","kernedWidth","leftOffset","heightOfLine","boxStart","currentColor","lastColor","getValueOfPropertyAt","_getSVGLineTopOffset","lineTopOffset","lastHeight","useWhiteSpace","decoration","measuringContext","getMeasuringContext","FabricText","setPathInfo","initDimensions","segmentsInfo","_splitText","newLines","_splitTextIntoLines","lines","graphemeLines","_unwrappedTextLines","_unwrappedLines","_text","graphemeText","_clearCache","calcTextWidth","cursorWidth","calcTextHeight","enlargeSpaces","diffSpace","currentLineWidth","numberOfSpaces","accumulatedSpace","charBound","spaces","isEndOfWrapping","getLineWidth","missingNewlineOffset","_lineIndex","selectionStart","skipWrapping","_setTextStyles","_renderTextLinesBackground","_renderTextDecoration","_renderTextStroke","_renderTextFill","charStyle","forMeasuring","textBaseline","_getFontDeclaration","maxWidth","_renderTextLine","_renderChars","_getLeftOffset","_getTopOffset","lineLeftOffset","drawStart","renderLeft","_measureChar","_char","previousChar","prevCharStyle","fontDeclaration","couple","stylesAreEqual","fontMultiplier","coupleWidth","previousWidth","measureText","getHeightOfChar","measureLine","lineInfo","_measureLine","_getWidthOfCharSpacing","prevGrapheme","graphemeInfo","llength","lineBounds","grapheme","_getGraphemeBox","positionInPath","totalPathLength","_setGraphemeOnPath","numOfSpaces","centerPosition","skipLeft","previousBox","__lineHeights","maxHeight","_renderTextCommon","lineHeights","shortCut","isLtr","currentDirection","drawingLeft","_renderChar","_applyPatternGradientTransformText","handleFiller","fullDecl","shouldFill","fillOffsets","fillText","strokeOffsets","strokeText","setSuperscript","_setScript","setSubscript","schema","loc","lineDiff","__lineWidths","_charStyle$property","topOffset","lastDecoration","lastFill","currentDecoration","currentFill","currentSize","currentDy","parsedFontFamily","genericFonts","newLine","newText","needsDims","isAddingPath","_options$parsedAttrib","textAnchor","restOfOptions","textContent","textHeightScaleFactor","lineHeightDiff","scaledDiff","textHeight","offX","DraggableTextDelegate","dragEnterHandler","dragOverHandler","dragLeaveHandler","dragEndHandler","dropHandler","_dispose","isPointerOverSelection","newSelection","getSelectionStartFromPointer","selectionEnd","__mouseDownInPlace","isActive","__dragStartFired","setCursorByClick","initDelayedCursor","__isDraggingOver","getDragStartSelection","__dragStartSelection","setDragImage","_e$dataTransfer","flipFactor","boundaries","_getCursorBoundaries","selectionPosition","diff","bgc","dragImage","border","__dragImageDisposer","appendChild","setData","stringify","effectAllowed","abortCursorAnimation","editable","defaultPrevented","dragStartSelection","targetCanDrop","ev","_e$dataTransfer2","insert","getData","trailing","selectionStartOffset","removeChars","trimEnd","insertChars","enterEditing","_updateTextarea","_e$dataTransfer3","reNonWord","ITextBehavior","initBehavior","_tick","_onTickComplete","_animateCursor","toValue","_currentCursorOpacity","renderCursorOrSelection","_currentTickState","cursorDuration","_this$_currentTickCom","_currentTickCompleteState","restart","cursorDelay","shouldClear","cursorAnimation","restartCursorIfNeeded","selectAll","_fireSelectionChanged","getSelectedText","findWordBoundaryLeft","startFrom","_reSpace","findWordBoundaryRight","findLineBoundaryLeft","findLineBoundaryRight","searchWordBoundary","selectWord","newSelectionStart","newSelectionEnd","selectLine","initHiddenTextarea","_saveEditingProps","_setEditingProps","_textBeforeEdit","activeElement","currentStart","currentEnd","__selectionStartOnMouseDown","editingBorderColor","fromStringToGraphemeSelection","smallerTextStart","graphemeStart","smallerTextEnd","graphemeEnd","fromGraphemeToStringSelection","cursorOffsetCache","inCompositionMode","updateTextareaPosition","updateFromTextArea","textarea","_calcTextareaPosition","desiredPosition","compositionStart","cursorLocation","charHeight","upperCanvas","upperCanvasWidth","upperCanvasHeight","clientWidth","clientHeight","_savedProps","_restoreEditingProps","_exitEditing","isTextChanged","_removeExtraneousStyles","removeStyleFromTo","lineStart","charStart","lineEnd","charEnd","styleObj","shiftLineStyles","numericChar","clonedStyles","numericLine","insertNewlineStyleObject","qty","copiedStyle","newLineStyles","originalLineLength","isEndOfLine","someStyleIsCarryingOver","currentCharStyle","numIndex","styleCarriedOver","insertCharStyleObject","quantity","currentLineStyles","currentLineStylesCloned","numericIndex","insertNewStyleBlock","insertedText","cursorLoc","addedLines","linesLength","setSelectionStartEndWithShift","_selectionDirection","ITextKeyBehavior","autocapitalize","autocorrect","autocomplete","spellcheck","wrap","hiddenTextareaContainer","keydown","keyup","input","copy","cut","paste","compositionstart","compositionupdate","compositionend","onKeyDown","keyMap","keysMapRtl","keysMap","keyCode","ctrlKeysMapDown","ctrlKey","metaKey","stopImmediatePropagation","onKeyUp","_copyDone","ctrlKeysMapUp","onInput","fromPaste","updateAndFire","nextText","charCount","nextCharCount","removedText","charDiff","removeFrom","removeTo","textareaSelection","backDelete","copiedText","disableStyleCopyPaste","copiedTextStyle","onCompositionStart","onCompositionEnd","onCompositionUpdate","compositionEnd","_getWidthBeforeCursor","widthBeforeCursor","bound","getDownCursorOffset","isRight","selectionProp","_getSelectionForOffset","indexOnOtherLine","_getIndexOnLine","textAfterCursor","getUpCursorOffset","textBeforeCursor","widthOfCharsOnLine","indexOnLine","charWidth","foundMatch","leftEdge","rightEdge","offsetFromLeftEdge","offsetFromRightEdge","moveCursorDown","_moveCursorUpOrDown","moveCursorUp","moveCursorWithShift","moveCursorWithoutShift","moveCursorLeft","_moveCursorLeftOrRight","_move","newValue","_moveLeft","_moveRight","moveCursorLeftWithoutShift","change","moveCursorLeftWithShift","moveCursorRight","moveCursorRightWithShift","moveCursorRightWithoutShift","notALeftClick","ITextClickBehavior","_mouseDownHandler","_mouseDownHandlerBefore","doubleClickHandler","tripleClickHandler","__lastClickTime","__lastLastClickTime","__lastPointer","draggableTextDelegate","__newClickTime","newPointer","isTripleClick","__lastSelected","didDrag","mouseOffset","charLength","widthAfter","MOVE_CURSOR_UP","MOVE_CURSOR_DOWN","MOVE_CURSOR_LEFT","MOVE_CURSOR_RIGHT","EXIT_EDITING","protectedDefaultValues","iTextDefaultValues","cursorColor","caching","IText","setSelectionStart","_updateAndFire","setSelectionEnd","renderCursor","renderSelection","skipCaching","_getCursorBoundariesOffsets","__getCursorBoundariesOffsets","renderCursorAt","_renderCursor","_renderSelection","dragSelection","startLine","endLine","startChar","endChar","realLineHeight","boxEnd","drawHeight","extraTop","drawWidth","compositionColor","getCurrentCharFontSize","cp","_getCurrentCharIndex","getCurrentCharColor","cursorPosition","textboxDefaultValues","minWidth","dynamicMinWidth","_wordJoiners","splitByGrapheme","Textbox","_styleMap","_generateStyleMap","textInfo","realLineCount","realLineCharCount","isWrapping","nextLineIndex","nextOffset","shouldLimit","mapNextLine","p2Number","_wrapText","desiredWidth","getGraphemeDataForRender","wrapped","wordsData","_wrapLine","infix","largestWordWidth","wordsOrGraphemes","wordSplit","word","graphemeArray","_measureWord","charOffset","reservedSpace","additionalSpace","infixWidth","lineJustStarted","wordWidth","getMinWidth","linesToKeep","propNumber","ClipPathLayout","clipPathCenter","FixedLayout","ActiveSelectionLayoutManager","parents","Set","selectedObjects","activeSelectionDefaultValues","multiSelectionStacking","ActiveSelection","findIndex","groups","childrenOverride","Canvas2dFilterBackend","applyFilters","filters","sourceElement","sourceWidth","sourceHeight","imageData","originalImageData","pipelineState","originalEl","filterBackend","applyTo","imageDataPostFilter","putImageData","WebGLFilterBackend","tileSize","Float32Array","setupGLContext","captureGPUInfo","createWebGLCanvas","glOptions","premultipliedAlpha","depth","stencil","antialias","clearColor","cachedTexture","getCachedTexture","destinationWidth","destinationHeight","sourceTexture","createTexture","targetTexture","originalTexture","passes","webgl","aPosition","programCache","pass","tempFbo","createFramebuffer","bindFramebuffer","FRAMEBUFFER","resizeCanvasIfNeeded","copyGLTo2D","bindTexture","TEXTURE_2D","deleteTexture","deleteFramebuffer","clearWebGLCaches","textureCache","textureImageSource","NEAREST","RGBA","UNSIGNED_BYTE","CLAMP_TO_EDGE","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","texture","texParameteri","texImage2D","uniqueId","evictCachesForKey","glCanvas","sourceY","copyGLTo2DPutImageData","dWidth","dHeight","numBytes","u8","Uint8Array","imageBuffer","u8Clamped","Uint8ClampedArray","readPixels","imgData","ImageData","gpuInfo","renderer","vendor","ext","UNMASKED_RENDERER_WEBGL","UNMASKED_VENDOR_WEBGL","initFilterBackend","enableGLFiltering","getFilterBackend","strict","setFilterBackend","backend","imageDefaultValues","srcFromAttribute","minimumScaleTrigger","imageSmoothing","IMAGE_PROPS","FabricImage","setElement","_element","removeTexture","_originalElement","CSS_CANVAS","resizeFilter","applyResizeFilters","elementKey","getCrossOrigin","getOriginalSize","_stroke","filterObj","getSrc","hasCrop","imageMarkup","strokeSvg","imageRendering","getSvgSrc","origFill","filtered","setSrc","minimumScale","elementToFilter","_filteredEl","_filterScalingX","_filterScalingY","_lastScaleX","_lastScaleY","isNeutralState","imgElement","_needsResize","elementToDraw","elWidth","elHeight","sX","sY","sW","sH","maxDestW","maxDestH","_resetWidthHeight","pAR","preserveAspectRatio","pWidth","pHeight","rWidth","rHeight","f","rf","hydratedProps","fromURL","imageOptions","applyViewboxTransform","viewBoxAttr","widthAttr","heightAttr","goodViewbox","missingViewBox","missingDimAttr","translateMatrix","widthDiff","heightDiff","parsedDim","pasedViewBox","createElementNS","firstChild","getTagName","node","tagName","svgInvalidAncestorsRegEx","hasInvalidAncestor","getMultipleNodes","nodeNames","nodeArray","nodeList","getElementsByTagNameNS","parseUseDirectives","nodelist","skipAttributes","useElement","useAttributes","useAttrMap","xlink","href","referencedElement","clonedOriginal","cloneNode","originalAttributes","originalAttrMap","currentTrans","el3","setAttributeNS","childNodes","styleRecord","mergedStyles","entry","gradientsAttrs","xlinkAttr","recursivelyParseGradientsXlink","_gradient$getAttribut","xLink","referencedGradient","children","referenceClone","tagArray","getGradientDefs","elList","gradientDefs","getCSSRules","allRules","styleContents","ruleObj","declaration","propertyValuePairs","pair","_rule","findTag","ElementsParser","clipPaths","regexUrl","createObject","resolveGradient","resolveClipPath","extractPropertyDefinition","storage","gradientDef","usingElement","clipPathElements","objTransformInv","clipPathTag","clipPathOwner","clipPathElement","enlivedClippath","clipRule","gTransform","isValidSvgTag","createEmptyResponse","allElements","parseSVGDocument","descendants","localClipPaths","elementParser","loadSVGFromString","parser","DOMParser","parseFromString","loadSVGFromURL","xml","responseXML","parsedDoc","ACTION_NAME","createPolyPositionHandler","pointIndex","polyObject","polyActionHandler","poly","mouseLocalPosition","factoryPolyActionHandler","anchorPoint","anchorPointInParentPlane","newAnchorPointInParentPlane","createPolyActionHandler","createPolyControls","calcPathPointPosition","pathObject","commandIndex","movePathPoint","anchorCommand","pathPositionHandler","pathActionHandler","indexFromPrevCommand","previousCommandType","PathPointControl","controlFill","controlStroke","PathControlPointControl","connectToCommandIndex","connectToPointIndex","connectionDashArray","commandType","createControl","commandIndexPos","pointIndexPos","isControlPoint","controlPointStyle","pointStyle","createPathControls","isWebGLPipelineState","isPutImageFaster","sourceCanvas","ArrayBuffer","testContext","testPipelineState","performance","now","drawImageTime","putImageDataTime","highPsourceCode","identityFragmentShader","vertexSource","BaseFilter","getFragmentSource","getVertexSource","createProgram","vertexShader","VERTEX_SHADER","program","getShaderInfoLog","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","uniformLocations","getUniformLocations","uStepW","getUniformLocation","uStepH","attributeLocations","getAttributeLocations","getAttribLocation","locations","sendAttributeData","aPositionData","attributeLocation","buffer","createBuffer","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bufferData","STATIC_DRAW","_setupFrameBuffer","framebufferTexture2D","COLOR_ATTACHMENT0","finish","_swapTextures","temp","applyToWebGL","applyTo2d","getCacheKey","retrieveShader","shader","useProgram","uniform1f","sendUniformData","viewport","drawArrays","TRIANGLE_STRIP","bindAdditionalTexture","textureUnit","activeTexture","TEXTURE0","unbindAdditionalTexture","_gl","_uniformLocations","createHelpLayer","helpLayer","defaultKeys","filterOptions","blendColorFragmentSource","screen","difference","lighten","darken","exclusion","tint","blendColorDefaultValues","mode","BlendColor","tg","alpha1","uniform4fv","uColor","mask","blendImageDefaultValues","BlendImage","image","TEXTURE1","calculateMatrix","blendImage","canvas1","blendData","uniform1i","uImage","uniformMatrix3fv","uTransformMatrix","enlivedImage","blurDefaultValues","Blur","aspectRatio","horizontal","simpleBlur","blurLayer1","blurLayer2","canvas2","ctx1","ctx2","nSamples","percent","newImageData","delta","chooseRightDelta","uniform2fv","uDelta","blurScale","brightnessDefaultValues","brightness","Brightness","uBrightness","colorMatrixDefaultValues","colorsOnly","ColorMatrix","constants","uniformMatrix4fv","uColorMatrix","uConstants","createColorMatrixFilter","_Class","newClass","Brownie","Vintage","Kodachrome","Technicolor","Polaroid","Sepia","BlackWhite","Composed","subFilters","enlivedFilters","contrastDefaultValues","contrast","Contrast","contrastF","uContrast","Convolute_3_1","Convolute_3_0","Convolute_5_1","Convolute_5_0","Convolute_7_1","Convolute_7_0","Convolute_9_1","Convolute_9_0","convoluteDefaultValues","opaque","Convolute","weights","side","halfSide","sw","sh","createImageData","dst","alphaFac","dstOff","scx","scy","srcOff","wt","uniform1fv","uMatrix","GAMMA","gammaDefaultValues","gamma","Gamma","rInv","gInv","bInv","rgbValues","rgb","uniform3fv","uGamma","lightness","luminosity","grayscaleDefaultValues","Grayscale","uMode","hueRotationDefaultValues","rotation","HueRotation","cosine","sine","aThird","aThirdSqtSin","OneMinusCos","invertDefaultValues","invert","Invert","uInvert","uAlpha","noiseDefaultValues","noise","Noise","rand","uNoise","uSeed","pixelateDefaultValues","blocksize","Pixelate","_i","_j","uBlocksize","removeColorDefaultValues","useAlpha","RemoveColor","lowC","highC","uLow","uHigh","resizeDefaultValues","resizeType","lanczosLobes","Resize","uTaps","taps","getFilterWindow","tempScale","filterWindow","generateShader","getTaps","lobeFunction","lanczosCreate","applyToForWebgl","dW","dH","lobes","xx","rcpScaleX","rcpScaleY","oW","oH","newData","sliceByTwo","hermiteFastResize","bilinearFiltering","lanczosResize","mult","doneW","doneH","stepW","stepH","dX","dY","tmpCanvas","process","u","weight","fX","fY","ratioX","icenter","ratioY","range2X","cacheLanc","range2Y","lanczos","rcpRatioX","rcpRatioY","srcData","destData","destImg","xDiff","yDiff","chnl","origPix","w4","pixels","destImage","destPixels","ratioW","ratioH","ratioWHalf","ratioHHalf","img2","data2","weightsAlpha","gxR","gxG","gxB","gxA","yy","w0","saturationDefaultValues","saturation","Saturation","adjust","uSaturation","vibranceDefaultValues","vibrance","Vibrance","amt","uVibrance","StaticCanvasBase","createPNGStream","opts","createJPEGStream","CanvasBase"],"mappings":"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CjBC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,IAAI,EAAE,SAAS;AACfC,EAAAA,WAAW,EAAE,SAAS;AACtBC,EAAAA,SAAS,EAAE,SAAS;AACpBxL,EAAAA,GAAG,EAAE,SAAS;AACdyL,EAAAA,IAAI,EAAE,SAAS;AACfC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,MAAM,EAAE,SAAS;AACjBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,MAAM,EAAE,SAAS;AACjBC,EAAAA,KAAK,EAAE,SAAS;AAChBC,EAAAA,KAAK,EAAE,MAAM;AACbC,EAAAA,UAAU,EAAE,SAAS;AACrBC,EAAAA,MAAM,EAAE,MAAM;AACdC,EAAAA,WAAW,EAAE,SAAA;AACf,CAAC;;ACzJD;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,MAAM,GAAGA,MACpB,kJAAkJ,CAAA;;AAEpJ;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,MAAM,GAAGA,MACpB,kKAAkK,CAAA;;AAEpK;AACA;AACA;AACO,MAAMC,KAAK,GAAGA,MAAM,2CAA2C;;AC/GtE;AACA;AACA;AACA;AACA;AACA;AAC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"} \ No newline at end of file +{"version":3,"file":"index.node.mjs","sources":["../src/config.ts","../src/util/internals/console.ts","../src/filters/GLProbes/GLProbe.ts","../src/filters/GLProbes/WebGLProbe.ts","../src/env/browser.ts","../src/env/index.ts","../src/filters/GLProbes/NodeGLProbe.ts","../src/env/node.ts","../src/cache.ts","../src/constants.ts","../src/ClassRegistry.ts","../src/util/animation/AnimationRegistry.ts","../src/Observable.ts","../src/util/internals/removeFromArray.ts","../src/util/misc/cos.ts","../src/util/misc/sin.ts","../src/Point.ts","../src/Collection.ts","../src/CommonMethods.ts","../src/util/animation/AnimationFrameProvider.ts","../src/util/internals/uid.ts","../src/util/misc/dom.ts","../src/util/misc/radiansDegreesConversion.ts","../src/util/misc/matrix.ts","../src/util/misc/objectEnlive.ts","../src/util/misc/pick.ts","../src/color/color_map.ts","../src/color/constants.ts","../src/color/util.ts","../src/color/Color.ts","../src/util/misc/toFixed.ts","../src/util/misc/svgParsing.ts","../src/util/typeAssertions.ts","../src/util/dom_misc.ts","../src/canvas/DOMManagers/util.ts","../src/canvas/DOMManagers/StaticCanvasDOMManager.ts","../src/canvas/StaticCanvasOptions.ts","../src/canvas/StaticCanvas.ts","../src/util/dom_event.ts","../src/util/misc/boundingBoxFromPoints.ts","../src/util/misc/objectTransforms.ts","../src/util/misc/planeChange.ts","../src/controls/fireEvent.ts","../src/util/misc/resolveOrigin.ts","../src/controls/util.ts","../src/controls/drag.ts","../src/shapes/Object/FabricObjectSVGExportMixin.ts","../src/parser/getSvgRegex.ts","../src/parser/constants.ts","../src/util/misc/vectors.ts","../src/Shadow.ts","../src/util/misc/capValue.ts","../src/shapes/Object/defaultValues.ts","../src/util/animation/easing.ts","../src/util/animation/AnimationBase.ts","../src/util/animation/ValueAnimation.ts","../src/util/animation/ArrayAnimation.ts","../src/util/animation/ColorAnimation.ts","../src/util/animation/animate.ts","../src/Intersection.ts","../src/shapes/Object/ObjectGeometry.ts","../src/shapes/Object/Object.ts","../src/controls/wrapWithFireEvent.ts","../src/controls/wrapWithFixedAnchor.ts","../src/controls/changeWidth.ts","../src/controls/controlRendering.ts","../src/controls/Control.ts","../src/controls/rotate.ts","../src/controls/scale.ts","../src/controls/skew.ts","../src/controls/scaleSkew.ts","../src/controls/commonControls.ts","../src/shapes/Object/InteractiveObject.ts","../src/util/applyMixins.ts","../src/shapes/Object/FabricObject.ts","../src/util/misc/isTransparent.ts","../src/util/misc/rotatePoint.ts","../src/util/internals/findRight.ts","../src/util/misc/projectStroke/StrokeProjectionsBase.ts","../src/util/misc/projectStroke/StrokeLineJoinProjections.ts","../src/util/misc/projectStroke/StrokeLineCapProjections.ts","../src/util/misc/projectStroke/index.ts","../src/util/internals/cloneStyles.ts","../src/util/lang_string.ts","../src/util/misc/textStyles.ts","../src/parser/attributes.ts","../src/parser/selectorMatches.ts","../src/parser/doesSomeParentMatch.ts","../src/parser/elementMatchesRule.ts","../src/parser/getGlobalStylesForElement.ts","../src/parser/normalizeAttr.ts","../src/util/internals/cleanupSvgAttribute.ts","../src/parser/parseTransformAttribute.ts","../src/parser/normalizeValue.ts","../src/parser/parseFontDeclaration.ts","../src/parser/parseStyleObject.ts","../src/parser/parseStyleString.ts","../src/parser/parseStyleAttribute.ts","../src/parser/setStrokeFillOpacity.ts","../src/parser/parseAttributes.ts","../src/shapes/Rect.ts","../src/LayoutManager/constants.ts","../src/LayoutManager/LayoutStrategies/utils.ts","../src/LayoutManager/LayoutStrategies/LayoutStrategy.ts","../src/LayoutManager/LayoutStrategies/FitContentLayout.ts","../src/LayoutManager/LayoutManager.ts","../src/shapes/Group.ts","../src/util/misc/groupSVGElements.ts","../src/util/misc/findScaleTo.ts","../src/util/path/regex.ts","../src/util/path/index.ts","../src/util/dom_style.ts","../src/util/misc/mergeClipPaths.ts","../src/util/internals/getRandomInt.ts","../src/util/internals/dom_request.ts","../src/util/transform_matrix_removal.ts","../src/canvas/DOMManagers/CanvasDOMManager.ts","../src/canvas/CanvasOptions.ts","../src/canvas/SelectableCanvas.ts","../src/canvas/TextEditingManager.ts","../src/canvas/Canvas.ts","../src/gradient/constants.ts","../src/util/internals/ifNaN.ts","../src/parser/percent.ts","../src/gradient/parser/parseColorStops.ts","../src/gradient/parser/misc.ts","../src/gradient/parser/parseCoords.ts","../src/gradient/Gradient.ts","../src/Pattern/Pattern.ts","../src/brushes/BaseBrush.ts","../src/shapes/Path.ts","../src/brushes/PencilBrush.ts","../src/shapes/Circle.ts","../src/brushes/CircleBrush.ts","../src/brushes/SprayBrush.ts","../src/brushes/PatternBrush.ts","../src/shapes/Line.ts","../src/shapes/Triangle.ts","../src/shapes/Ellipse.ts","../src/parser/parsePointsAttribute.ts","../src/shapes/Polyline.ts","../src/shapes/Polygon.ts","../src/shapes/Text/constants.ts","../src/shapes/Text/StyledText.ts","../src/shapes/Text/TextSVGExportMixin.ts","../src/shapes/Text/Text.ts","../src/shapes/IText/DraggableTextDelegate.ts","../src/shapes/IText/ITextBehavior.ts","../src/shapes/IText/ITextKeyBehavior.ts","../src/shapes/IText/ITextClickBehavior.ts","../src/shapes/IText/constants.ts","../src/shapes/IText/IText.ts","../src/shapes/Textbox.ts","../src/LayoutManager/LayoutStrategies/ClipPathLayout.ts","../src/LayoutManager/LayoutStrategies/FixedLayout.ts","../src/LayoutManager/ActiveSelectionLayoutManager.ts","../src/shapes/ActiveSelection.ts","../src/filters/Canvas2dFilterBackend.ts","../src/filters/WebGLFilterBackend.ts","../src/filters/FilterBackend.ts","../src/shapes/Image.ts","../src/parser/applyViewboxTransform.ts","../src/parser/getTagName.ts","../src/parser/hasInvalidAncestor.ts","../src/parser/getMultipleNodes.ts","../src/parser/parseUseDirectives.ts","../src/parser/recursivelyParseGradientsXlink.ts","../src/parser/getGradientDefs.ts","../src/parser/getCSSRules.ts","../src/parser/elements_parser.ts","../src/parser/parseSVGDocument.ts","../src/parser/loadSVGFromString.ts","../src/parser/loadSVGFromURL.ts","../src/controls/polyControl.ts","../src/controls/pathControl.ts","../src/filters/utils.ts","../src/filters/shaders/baseFilter.ts","../src/filters/BaseFilter.ts","../src/filters/shaders/blendColor.ts","../src/filters/BlendColor.ts","../src/filters/shaders/blendImage.ts","../src/filters/BlendImage.ts","../src/filters/shaders/blur.ts","../src/filters/Blur.ts","../src/filters/shaders/brightness.ts","../src/filters/Brightness.ts","../src/filters/shaders/colorMatrix.ts","../src/filters/ColorMatrix.ts","../src/filters/ColorMatrixFilters.ts","../src/filters/Composed.ts","../src/filters/shaders/constrast.ts","../src/filters/Contrast.ts","../src/filters/shaders/convolute.ts","../src/filters/Convolute.ts","../src/filters/shaders/gamma.ts","../src/filters/Gamma.ts","../src/filters/shaders/grayscale.ts","../src/filters/Grayscale.ts","../src/filters/HueRotation.ts","../src/filters/shaders/invert.ts","../src/filters/Invert.ts","../src/filters/shaders/noise.ts","../src/filters/Noise.ts","../src/filters/shaders/pixelate.ts","../src/filters/Pixelate.ts","../src/filters/shaders/removeColor.ts","../src/filters/RemoveColor.ts","../src/filters/Resize.ts","../src/filters/shaders/saturation.ts","../src/filters/Saturation.ts","../src/filters/shaders/vibrance.ts","../src/filters/Vibrance.ts","../index.node.ts"],"sourcesContent":["export type TConfiguration = Partial;\n\nclass BaseConfiguration {\n /**\n * Browser-specific constant to adjust CanvasRenderingContext2D.shadowBlur value,\n * which is unitless and not rendered equally across browsers.\n *\n * Values that work quite well (as of October 2017) are:\n * - Chrome: 1.5\n * - Edge: 1.75\n * - Firefox: 0.9\n * - Safari: 0.95\n *\n * @since 2.0.0\n * @type Number\n * @default 1\n */\n browserShadowBlurConstant = 1;\n\n /**\n * Pixel per Inch as a default value set to 96. Can be changed for more realistic conversion.\n */\n DPI = 96;\n\n /**\n * Device Pixel Ratio\n * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\n */\n devicePixelRatio =\n typeof window !== 'undefined' ? window.devicePixelRatio : 1; // eslint-disable-line no-restricted-globals\n\n /**\n * Pixel limit for cache canvases. 1Mpx , 4Mpx should be fine.\n * @since 1.7.14\n * @type Number\n * @default\n */\n perfLimitSizeTotal = 2097152;\n\n /**\n * Pixel limit for cache canvases width or height. IE fixes the maximum at 5000\n * @since 1.7.14\n * @type Number\n * @default\n */\n maxCacheSideLimit = 4096;\n\n /**\n * Lowest pixel limit for cache canvases, set at 256PX\n * @since 1.7.14\n * @type Number\n * @default\n */\n minCacheSideLimit = 256;\n\n /**\n * When 'true', style information is not retained when copy/pasting text, making\n * pasted text use destination style.\n * Defaults to 'false'.\n * @type Boolean\n * @default\n * @deprecated\n */\n disableStyleCopyPaste = false;\n\n /**\n * Enable webgl for filtering picture is available\n * A filtering backend will be initialized, this will both take memory and\n * time since a default 2048x2048 canvas will be created for the gl context\n * @since 2.0.0\n * @type Boolean\n * @default\n */\n enableGLFiltering = true;\n\n /**\n * if webgl is enabled and available, textureSize will determine the size\n * of the canvas backend\n *\n * In order to support old hardware set to `2048` to avoid OOM\n *\n * @since 2.0.0\n * @type Number\n * @default\n */\n textureSize = 4096;\n\n /**\n * Skip performance testing of setupGLContext and force the use of putImageData that seems to be the one that works best on\n * Chrome + old hardware. if your users are experiencing empty images after filtering you may try to force this to true\n * this has to be set before instantiating the filtering backend ( before filtering the first image )\n * @type Boolean\n * @default false\n */\n forceGLPutImageData = false;\n\n /**\n * If disabled boundsOfCurveCache is not used. For apps that make heavy usage of pencil drawing probably disabling it is better\n * With the standard behaviour of fabric to translate all curves in absolute commands and by not subtracting the starting point from\n * the curve is very hard to hit any cache.\n * Enable only if you know why it could be useful.\n * Candidate for removal/simplification\n * @default false\n */\n cachesBoundsOfCurve = false;\n\n /**\n * Map of font files\n * Map of font files\n */\n fontPaths: Record = {};\n\n /**\n * Defines the number of fraction digits to use when serializing object values.\n * Used in exporting methods (`toObject`, `toJSON`, `toSVG`)\n * You can use it to increase/decrease precision of such values like left, top, scaleX, scaleY, etc.\n */\n NUM_FRACTION_DIGITS = 4;\n}\n\nexport class Configuration extends BaseConfiguration {\n constructor(config?: TConfiguration) {\n super();\n this.configure(config);\n }\n\n configure(config: TConfiguration = {}) {\n Object.assign(this, config);\n }\n\n /**\n * Map of font files\n */\n addFonts(\n paths: Record = {},\n ) {\n this.fontPaths = {\n ...this.fontPaths,\n ...paths,\n };\n }\n\n removeFonts(fontFamilys: string[] = []) {\n fontFamilys.forEach((fontFamily) => {\n delete this.fontPaths[fontFamily];\n });\n }\n\n clearFonts() {\n this.fontPaths = {};\n }\n\n restoreDefaults(keys?: (keyof T)[]) {\n const defaults = new BaseConfiguration() as T;\n const config =\n keys?.reduce((acc, key) => {\n acc[key] = defaults[key];\n return acc;\n }, {} as T) || defaults;\n this.configure(config);\n }\n}\n\nexport const config = new Configuration();\n","export const log = (\n severity: 'log' | 'warn' | 'error',\n ...optionalParams: any[]\n) =>\n // eslint-disable-next-line no-restricted-syntax\n console[severity]('fabric', ...optionalParams);\n\nexport class FabricError extends Error {\n constructor(message?: string, options?: ErrorOptions) {\n super(`fabric: ${message}`, options);\n }\n}\n\nexport class SignalAbortedError extends FabricError {\n constructor(context: string) {\n super(`${context} 'options.signal' is in 'aborted' state`);\n }\n}\n","export type GLPrecision = 'lowp' | 'mediump' | 'highp';\n\nexport abstract class GLProbe {\n declare GLPrecision: GLPrecision | undefined;\n abstract queryWebGL(canvas: HTMLCanvasElement): void;\n abstract isSupported(textureSize: number): boolean;\n}\n","import { log } from '../../util/internals/console';\nimport { GLProbe } from './GLProbe';\nimport type { GLPrecision } from './GLProbe';\n\n/**\n * Lazy initialize WebGL constants\n */\nexport class WebGLProbe extends GLProbe {\n declare maxTextureSize?: number;\n\n /**\n * Tests if webgl supports certain precision\n * @param {WebGL} Canvas WebGL context to test on\n * @param {GLPrecision} Precision to test can be any of following\n * @returns {Boolean} Whether the user's browser WebGL supports given precision.\n */\n private testPrecision(\n gl: WebGLRenderingContext,\n precision: GLPrecision,\n ): boolean {\n const fragmentSource = `precision ${precision} float;\\nvoid main(){}`;\n const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n if (!fragmentShader) {\n return false;\n }\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n return !!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS);\n }\n\n /**\n * query browser for WebGL\n */\n queryWebGL(canvas: HTMLCanvasElement) {\n const gl = canvas.getContext('webgl');\n if (gl) {\n this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n this.GLPrecision = (['highp', 'mediump', 'lowp'] as const).find(\n (precision) => this.testPrecision(gl, precision),\n );\n gl.getExtension('WEBGL_lose_context')!.loseContext();\n log('log', `WebGL: max texture size ${this.maxTextureSize}`);\n }\n }\n\n isSupported(textureSize: number) {\n return !!this.maxTextureSize && this.maxTextureSize >= textureSize;\n }\n}\n","/* eslint-disable no-restricted-globals */\nimport { WebGLProbe } from '../filters/GLProbes/WebGLProbe';\nimport type { TCopyPasteData, TFabricEnv } from './types';\n\nconst copyPasteData: TCopyPasteData = {};\n\nexport const getEnv = (): TFabricEnv => {\n return {\n document,\n window,\n isTouchSupported:\n 'ontouchstart' in window ||\n 'ontouchstart' in document ||\n (window && window.navigator && window.navigator.maxTouchPoints > 0),\n WebGLProbe: new WebGLProbe(),\n dispose() {\n // noop\n },\n copyPasteData,\n };\n};\n","/**\n * This file is consumed by fabric.\n * The `./node` and `./browser` files define the env variable that is used by this module.\n * The `./browser` module is defined to be the default env and doesn't set the env at all.\n * This is done in order to support isomorphic usage for browser and node applications\n * since window and document aren't defined at time of import in SSR, we can't set env so we avoid it by deferring to the default env.\n */\n\nimport { config } from '../config';\nimport { getEnv as getBrowserEnv } from './browser';\nimport type { TFabricEnv } from './types';\nimport type { DOMWindow } from 'jsdom';\n\nlet env: TFabricEnv;\n\n/**\n * Sets the environment variables used by fabric.\\\n * This is exposed for special cases, such as configuring a test environment, and should be used with care.\n *\n * **CAUTION**: Must be called before using the package.\n *\n * @example\n * Passing `window` and `document` objects to fabric (in case they are mocked or something)\n * import { getEnv, setEnv } from 'fabric';\n * // we want fabric to use the `window` and `document` objects exposed by the environment we are running in.\n * setEnv({ ...getEnv(), window, document });\n * // done with setup, using fabric is now safe\n */\nexport const setEnv = (value: TFabricEnv) => {\n env = value;\n};\n\n/**\n * In order to support SSR we **MUST** access the browser env only after the window has loaded\n */\nexport const getEnv = () => env || (env = getBrowserEnv());\n\nexport const getFabricDocument = (): Document => getEnv().document;\n\nexport const getFabricWindow = (): (Window & typeof globalThis) | DOMWindow =>\n getEnv().window;\n\n/**\n * @returns the config value if defined, fallbacks to the environment value\n */\nexport const getDevicePixelRatio = () =>\n Math.max(config.devicePixelRatio ?? getFabricWindow().devicePixelRatio, 1);\n","import { GLProbe } from './GLProbe';\n\n/**\n * @todo GL rendering in node is possible:\n * - https://github.com/stackgl/headless-gl\n * - https://github.com/akira-cn/node-canvas-webgl\n */\nexport class NodeGLProbe extends GLProbe {\n queryWebGL() {\n // noop\n }\n isSupported() {\n return false;\n }\n}\n","/* eslint-disable no-restricted-globals */\nimport type { Canvas as NodeCanvas } from 'canvas';\nimport { JSDOM } from 'jsdom';\n// @ts-expect-error internal import\nimport utils from 'jsdom/lib/jsdom/living/generated/utils.js';\nimport { NodeGLProbe } from '../filters/GLProbes/NodeGLProbe';\nimport type { TCopyPasteData, TFabricEnv } from './types';\n\nconst { implForWrapper: jsdomImplForWrapper } = utils;\n\nconst copyPasteData: TCopyPasteData = {};\n\nconst { window: JSDOMWindow } = new JSDOM(\n decodeURIComponent(\n '%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E',\n ),\n {\n resources: 'usable',\n // needed for `requestAnimationFrame`\n pretendToBeVisual: true,\n },\n);\n\nexport const getNodeCanvas = (canvasEl: HTMLCanvasElement) => {\n const impl = jsdomImplForWrapper(canvasEl);\n return (impl._canvas || impl._image) as NodeCanvas;\n};\n\nexport const dispose = (element: Element) => {\n const impl = jsdomImplForWrapper(element);\n if (impl) {\n impl._image = null;\n impl._canvas = null;\n // unsure if necessary\n impl._currentSrc = null;\n impl._attributes = null;\n impl._classList = null;\n }\n};\n\nexport const getEnv = (): TFabricEnv => {\n return {\n document: JSDOMWindow.document,\n window: JSDOMWindow,\n isTouchSupported: false,\n WebGLProbe: new NodeGLProbe(),\n dispose,\n copyPasteData,\n };\n};\n","import { config } from './config';\nimport type { TRectBounds } from './typedefs';\n\nexport class Cache {\n /**\n * Cache of widths of chars in text rendering.\n */\n charWidthsCache: Record<\n /** fontFamily */ string,\n Record<\n /** fontStyleCacheKey */ string,\n Record\n >\n > = {};\n\n /**\n * @return {Object} reference to cache\n */\n getFontCache({\n fontFamily,\n fontStyle,\n fontWeight,\n }: {\n fontFamily: string;\n fontStyle: string;\n fontWeight: string | number;\n }) {\n fontFamily = fontFamily.toLowerCase();\n if (!this.charWidthsCache[fontFamily]) {\n this.charWidthsCache[fontFamily] = {};\n }\n const fontCache = this.charWidthsCache[fontFamily];\n const cacheKey = `${fontStyle.toLowerCase()}_${(\n fontWeight + ''\n ).toLowerCase()}`;\n if (!fontCache[cacheKey]) {\n fontCache[cacheKey] = {};\n }\n return fontCache[cacheKey];\n }\n\n /**\n * Clear char widths cache for the given font family or all the cache if no\n * fontFamily is specified.\n * Use it if you know you are loading fonts in a lazy way and you are not waiting\n * for custom fonts to load properly when adding text objects to the canvas.\n * If a text object is added when its own font is not loaded yet, you will get wrong\n * measurement and so wrong bounding boxes.\n * After the font cache is cleared, either change the textObject text content or call\n * initDimensions() to trigger a recalculation\n * @param {String} [fontFamily] font family to clear\n */\n clearFontCache(fontFamily?: string) {\n fontFamily = (fontFamily || '').toLowerCase();\n if (!fontFamily) {\n this.charWidthsCache = {};\n } else if (this.charWidthsCache[fontFamily]) {\n delete this.charWidthsCache[fontFamily];\n }\n }\n\n /**\n * Given current aspect ratio, determines the max width and height that can\n * respect the total allowed area for the cache.\n * @param {number} ar aspect ratio\n * @return {number[]} Limited dimensions X and Y\n */\n limitDimsByArea(ar: number) {\n const { perfLimitSizeTotal } = config;\n const roughWidth = Math.sqrt(perfLimitSizeTotal * ar);\n // we are not returning a point on purpose, to avoid circular dependencies\n // this is an internal utility\n return [\n Math.floor(roughWidth),\n Math.floor(perfLimitSizeTotal / roughWidth),\n ];\n }\n\n /**\n * This object keeps the results of the boundsOfCurve calculation mapped by the joined arguments necessary to calculate it.\n * It does speed up calculation, if you parse and add always the same paths, but in case of heavy usage of freedrawing\n * you do not get any speed benefit and you get a big object in memory.\n * The object was a private variable before, while now is appended to the lib so that you have access to it and you\n * can eventually clear it.\n * It was an internal variable, is accessible since version 2.3.4\n */\n boundsOfCurveCache: Record = {};\n}\n\nexport const cache = new Cache();\n","import type { TMat2D } from './typedefs';\n// use this syntax so babel plugin see this import here\nimport { version } from '../package.json';\n\nexport const VERSION = version;\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop() {}\n\nexport const halfPI = Math.PI / 2;\nexport const twoMathPi = Math.PI * 2;\nexport const PiBy180 = Math.PI / 180;\n\nexport const iMatrix = Object.freeze([1, 0, 0, 1, 0, 0]) as TMat2D;\nexport const DEFAULT_SVG_FONT_SIZE = 16;\nexport const ALIASING_LIMIT = 2;\n\n/* \"magic number\" for bezier approximations of arcs (http://itc.ktu.lt/itc354/Riskus354.pdf) */\nexport const kRect = 1 - 0.5522847498;\n\nexport const CENTER = 'center';\nexport const LEFT = 'left';\nexport const TOP = 'top';\nexport const BOTTOM = 'bottom';\nexport const RIGHT = 'right';\nexport const NONE = 'none';\n\nexport const reNewline = /\\r?\\n/;\n\nexport const MOVING = 'moving';\nexport const SCALING = 'scaling';\nexport const ROTATING = 'rotating';\nexport const ROTATE = 'rotate';\nexport const SKEWING = 'skewing';\nexport const RESIZING = 'resizing';\nexport const MODIFY_POLY = 'modifyPoly';\nexport const MODIFY_PATH = 'modifyPath';\nexport const CHANGED = 'changed';\nexport const SCALE = 'scale';\nexport const SCALE_X = 'scaleX';\nexport const SCALE_Y = 'scaleY';\nexport const SKEW_X = 'skewX';\nexport const SKEW_Y = 'skewY';\nexport const FILL = 'fill';\nexport const STROKE = 'stroke';\nexport const MODIFIED = 'modified';\n","import { FabricError } from './util/internals/console';\n\n/*\n * This Map connects the objects type value with their\n * class implementation. It used from any object to understand which are\n * the classes to enlive when requesting a object.type = 'path' for example.\n * Objects uses it for clipPath, Canvas uses it for everything.\n * This is necessary for generic code to run and enlive instances from serialized representation.\n * You can customize which classes get enlived from SVG parsing using this classRegistry.\n * The Registry start empty and gets filled in depending which files you import.\n * If you want to be able to parse arbitrary SVGs or JSON representation of canvases, coming from\n * different sources you will need to import all fabric because you may need all classes.\n */\n\nexport const JSON = 'json';\nexport const SVG = 'svg';\n\nexport class ClassRegistry {\n declare [JSON]: Map;\n declare [SVG]: Map;\n\n constructor() {\n this[JSON] = new Map();\n this[SVG] = new Map();\n }\n\n has(classType: string): boolean {\n return this[JSON].has(classType);\n }\n\n getClass(classType: string): T {\n const constructor = this[JSON].get(classType);\n if (!constructor) {\n throw new FabricError(`No class registered for ${classType}`);\n }\n return constructor;\n }\n\n setClass(classConstructor: any, classType?: string) {\n if (classType) {\n this[JSON].set(classType, classConstructor);\n } else {\n this[JSON].set(classConstructor.type, classConstructor);\n // legacy\n // @TODO: needs to be removed in fabric 7 or 8\n this[JSON].set(classConstructor.type.toLowerCase(), classConstructor);\n }\n }\n\n getSVGClass(SVGTagName: string): any {\n return this[SVG].get(SVGTagName);\n }\n\n setSVGClass(classConstructor: any, SVGTagName?: string) {\n this[SVG].set(\n SVGTagName ?? classConstructor.type.toLowerCase(),\n classConstructor,\n );\n }\n}\n\nexport const classRegistry = new ClassRegistry();\n","import type { StaticCanvas } from '../../canvas/StaticCanvas';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport type { AnimationBase } from './AnimationBase';\n\n/**\n * Array holding all running animations\n */\nclass AnimationRegistry extends Array {\n /**\n * Remove a single animation using an animation context\n * @param {AnimationBase} context\n */\n remove(context: AnimationBase) {\n const index = this.indexOf(context);\n index > -1 && this.splice(index, 1);\n }\n\n /**\n * Cancel all running animations on the next frame\n */\n cancelAll() {\n const animations = this.splice(0);\n animations.forEach((animation) => animation.abort());\n return animations;\n }\n\n /**\n * Cancel all running animations attached to a canvas on the next frame\n * @param {StaticCanvas} canvas\n */\n cancelByCanvas(canvas: StaticCanvas) {\n if (!canvas) {\n return [];\n }\n const animations = this.filter(\n (animation) =>\n animation.target === canvas ||\n (typeof animation.target === 'object' &&\n (animation.target as FabricObject)?.canvas === canvas),\n );\n animations.forEach((animation) => animation.abort());\n return animations;\n }\n\n /**\n * Cancel all running animations for target on the next frame\n * @param target\n */\n cancelByTarget(target: AnimationBase['target']) {\n if (!target) {\n return [];\n }\n const animations = this.filter((animation) => animation.target === target);\n animations.forEach((animation) => animation.abort());\n return animations;\n }\n}\n\nexport const runningAnimations = new AnimationRegistry();\n","export type TEventCallback = (options: T) => any;\n\ntype EventRegistryObject = {\n [K in keyof E]?: TEventCallback;\n};\n\n/**\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#events}\n * @see {@link http://fabricjs.com/events|Events demo}\n */\nexport class Observable {\n private __eventListeners: Record =\n {} as Record;\n\n /**\n * Observes specified event\n * @alias on\n * @param {string} eventName Event name (eg. 'after:render')\n * @param {EventRegistryObject} handlers key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function that receives a notification when an event of the specified type occurs\n * @return {Function} disposer\n */\n on(\n eventName: K,\n handler: TEventCallback,\n ): VoidFunction;\n on(handlers: EventRegistryObject): VoidFunction;\n on(\n arg0: K | EventRegistryObject,\n handler?: TEventCallback,\n ): VoidFunction {\n if (!this.__eventListeners) {\n this.__eventListeners = {} as Record;\n }\n if (typeof arg0 === 'object') {\n // one object with key/value pairs was passed\n Object.entries(arg0).forEach(([eventName, handler]) => {\n this.on(eventName as K, handler as TEventCallback);\n });\n return () => this.off(arg0);\n } else if (handler) {\n const eventName = arg0;\n if (!this.__eventListeners[eventName]) {\n this.__eventListeners[eventName] = [];\n }\n this.__eventListeners[eventName].push(handler);\n return () => this.off(eventName, handler);\n } else {\n // noop\n return () => false;\n }\n }\n\n /**\n * Observes specified event **once**\n * @alias once\n * @param {string} eventName Event name (eg. 'after:render')\n * @param {EventRegistryObject} handlers key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function that receives a notification when an event of the specified type occurs\n * @return {Function} disposer\n */\n once(\n eventName: K,\n handler: TEventCallback,\n ): VoidFunction;\n once(handlers: EventRegistryObject): VoidFunction;\n once(\n arg0: K | EventRegistryObject,\n handler?: TEventCallback,\n ): VoidFunction {\n if (typeof arg0 === 'object') {\n // one object with key/value pairs was passed\n const disposers: VoidFunction[] = [];\n Object.entries(arg0).forEach(([eventName, handler]) => {\n disposers.push(this.once(eventName as K, handler as TEventCallback));\n });\n return () => disposers.forEach((d) => d());\n } else if (handler) {\n const disposer = this.on(\n arg0,\n function onceHandler(this: Observable, ...args) {\n handler.call(this, ...args);\n disposer();\n },\n );\n return disposer;\n } else {\n // noop\n return () => false;\n }\n }\n\n /**\n * @private\n * @param {string} eventName\n * @param {Function} [handler]\n */\n private _removeEventListener(\n eventName: K,\n handler?: TEventCallback,\n ) {\n if (!this.__eventListeners[eventName]) {\n return;\n }\n\n if (handler) {\n const eventListener = this.__eventListeners[eventName];\n const index = eventListener.indexOf(handler);\n index > -1 && eventListener.splice(index, 1);\n } else {\n this.__eventListeners[eventName] = [];\n }\n }\n\n /**\n * Unsubscribe all event listeners for eventname.\n * Do not use this pattern. You could kill internal fabricJS events.\n * We know we should have protected events for internal flows, but we don't have yet\n * @deprecated\n * @param {string} eventName event name (eg. 'after:render')\n */\n off(eventName: K): void;\n /**\n * unsubscribe an event listener\n * @param {string} eventName event name (eg. 'after:render')\n * @param {TEventCallback} handler event listener to unsubscribe\n */\n off(eventName: K, handler: TEventCallback): void;\n /**\n * unsubscribe event listeners\n * @param handlers handlers key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n */\n off(handlers: EventRegistryObject): void;\n /**\n * unsubscribe all event listeners\n */\n off(): void;\n off(\n arg0?: K | EventRegistryObject,\n handler?: TEventCallback,\n ) {\n if (!this.__eventListeners) {\n return;\n }\n\n // remove all key/value pairs (event name -> event handler)\n if (typeof arg0 === 'undefined') {\n for (const eventName in this.__eventListeners) {\n this._removeEventListener(eventName);\n }\n }\n // one object with key/value pairs was passed\n else if (typeof arg0 === 'object') {\n Object.entries(arg0).forEach(([eventName, handler]) => {\n this._removeEventListener(eventName as K, handler as TEventCallback);\n });\n } else {\n this._removeEventListener(arg0, handler);\n }\n }\n\n /**\n * Fires event with an optional options object\n * @param {String} eventName Event name to fire\n * @param {Object} [options] Options object\n */\n fire(eventName: K, options?: EventSpec[K]) {\n if (!this.__eventListeners) {\n return;\n }\n\n const listenersForEvent = this.__eventListeners[eventName]?.concat();\n if (listenersForEvent) {\n for (let i = 0; i < listenersForEvent.length; i++) {\n listenersForEvent[i].call(this, options || {});\n }\n }\n }\n}\n","/**\n * Removes value from an array.\n * Presence of value (and its position in an array) is determined via `Array.prototype.indexOf`\n * @param {Array} array\n * @param {*} value\n * @return {Array} original array\n */\nexport const removeFromArray = (array: T[], value: T): T[] => {\n const idx = array.indexOf(value);\n if (idx !== -1) {\n array.splice(idx, 1);\n }\n return array;\n};\n","import type { TRadian } from '../../typedefs';\nimport { halfPI } from '../../constants';\n\n/**\n * Calculate the cos of an angle, avoiding returning floats for known results\n * This function is here just to avoid getting 0.999999999999999 when dealing\n * with numbers that are really 1 or 0.\n * @param {TRadian} angle the angle\n * @return {Number} the cosin value for angle.\n */\nexport const cos = (angle: TRadian): number => {\n if (angle === 0) {\n return 1;\n }\n const angleSlice = Math.abs(angle) / halfPI;\n switch (angleSlice) {\n case 1:\n case 3:\n return 0;\n case 2:\n return -1;\n }\n return Math.cos(angle);\n};\n","import type { TRadian } from '../../typedefs';\nimport { halfPI } from '../../constants';\n\n/**\n * Calculate the cos of an angle, avoiding returning floats for known results\n * This function is here just to avoid getting 0.999999999999999 when dealing\n * with numbers that are really 1 or 0.\n * @param {TRadian} angle the angle\n * @return {Number} the sin value for angle.\n */\nexport const sin = (angle: TRadian): number => {\n if (angle === 0) {\n return 0;\n }\n const angleSlice = angle / halfPI;\n const value = Math.sign(angle);\n switch (angleSlice) {\n case 1:\n return value;\n case 2:\n return 0;\n case 3:\n return -value;\n }\n return Math.sin(angle);\n};\n","import type { TMat2D, TRadian } from './typedefs';\nimport { cos } from './util/misc/cos';\nimport { sin } from './util/misc/sin';\n\nexport interface XY {\n x: number;\n y: number;\n}\n\n/**\n * Adaptation of work of Kevin Lindsey(kevin@kevlindev.com)\n */\nexport class Point implements XY {\n declare x: number;\n\n declare y: number;\n\n constructor();\n constructor(x: number, y: number);\n constructor(point?: XY);\n constructor(arg0: number | XY = 0, y = 0) {\n if (typeof arg0 === 'object') {\n this.x = arg0.x;\n this.y = arg0.y;\n } else {\n this.x = arg0;\n this.y = y;\n }\n }\n\n /**\n * Adds another point to this one and returns another one\n * @param {XY} that\n * @return {Point} new Point instance with added values\n */\n add(that: XY): Point {\n return new Point(this.x + that.x, this.y + that.y);\n }\n\n /**\n * Adds another point to this one\n * @param {XY} that\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n addEquals(that: XY): Point {\n this.x += that.x;\n this.y += that.y;\n return this;\n }\n\n /**\n * Adds value to this point and returns a new one\n * @param {Number} scalar\n * @return {Point} new Point with added value\n */\n scalarAdd(scalar: number): Point {\n return new Point(this.x + scalar, this.y + scalar);\n }\n\n /**\n * Adds value to this point\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarAddEquals(scalar: number): Point {\n this.x += scalar;\n this.y += scalar;\n return this;\n }\n\n /**\n * Subtracts another point from this point and returns a new one\n * @param {XY} that\n * @return {Point} new Point object with subtracted values\n */\n subtract(that: XY): Point {\n return new Point(this.x - that.x, this.y - that.y);\n }\n\n /**\n * Subtracts another point from this point\n * @param {XY} that\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n subtractEquals(that: XY): Point {\n this.x -= that.x;\n this.y -= that.y;\n return this;\n }\n\n /**\n * Subtracts value from this point and returns a new one\n * @param {Number} scalar\n * @return {Point}\n */\n scalarSubtract(scalar: number): Point {\n return new Point(this.x - scalar, this.y - scalar);\n }\n\n /**\n * Subtracts value from this point\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarSubtractEquals(scalar: number): Point {\n this.x -= scalar;\n this.y -= scalar;\n return this;\n }\n\n /**\n * Multiplies this point by another value and returns a new one\n * @param {XY} that\n * @return {Point}\n */\n multiply(that: XY): Point {\n return new Point(this.x * that.x, this.y * that.y);\n }\n\n /**\n * Multiplies this point by a value and returns a new one\n * @param {Number} scalar\n * @return {Point}\n */\n scalarMultiply(scalar: number): Point {\n return new Point(this.x * scalar, this.y * scalar);\n }\n\n /**\n * Multiplies this point by a value\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarMultiplyEquals(scalar: number): Point {\n this.x *= scalar;\n this.y *= scalar;\n return this;\n }\n\n /**\n * Divides this point by another and returns a new one\n * @param {XY} that\n * @return {Point}\n */\n divide(that: XY): Point {\n return new Point(this.x / that.x, this.y / that.y);\n }\n\n /**\n * Divides this point by a value and returns a new one\n * @param {Number} scalar\n * @return {Point}\n */\n scalarDivide(scalar: number): Point {\n return new Point(this.x / scalar, this.y / scalar);\n }\n\n /**\n * Divides this point by a value\n * @param {Number} scalar\n * @return {Point} thisArg\n * @chainable\n * @deprecated\n */\n scalarDivideEquals(scalar: number): Point {\n this.x /= scalar;\n this.y /= scalar;\n return this;\n }\n\n /**\n * Returns true if this point is equal to another one\n * @param {XY} that\n * @return {Boolean}\n */\n eq(that: XY): boolean {\n return this.x === that.x && this.y === that.y;\n }\n\n /**\n * Returns true if this point is less than another one\n * @param {XY} that\n * @return {Boolean}\n */\n lt(that: XY): boolean {\n return this.x < that.x && this.y < that.y;\n }\n\n /**\n * Returns true if this point is less than or equal to another one\n * @param {XY} that\n * @return {Boolean}\n */\n lte(that: XY): boolean {\n return this.x <= that.x && this.y <= that.y;\n }\n\n /**\n\n * Returns true if this point is greater another one\n * @param {XY} that\n * @return {Boolean}\n */\n gt(that: XY): boolean {\n return this.x > that.x && this.y > that.y;\n }\n\n /**\n * Returns true if this point is greater than or equal to another one\n * @param {XY} that\n * @return {Boolean}\n */\n gte(that: XY): boolean {\n return this.x >= that.x && this.y >= that.y;\n }\n\n /**\n * Returns new point which is the result of linear interpolation with this one and another one\n * @param {XY} that\n * @param {Number} t , position of interpolation, between 0 and 1 default 0.5\n * @return {Point}\n */\n lerp(that: XY, t = 0.5): Point {\n t = Math.max(Math.min(1, t), 0);\n return new Point(\n this.x + (that.x - this.x) * t,\n this.y + (that.y - this.y) * t,\n );\n }\n\n /**\n * Returns distance from this point and another one\n * @param {XY} that\n * @return {Number}\n */\n distanceFrom(that: XY): number {\n const dx = this.x - that.x,\n dy = this.y - that.y;\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n /**\n * Returns the point between this point and another one\n * @param {XY} that\n * @return {Point}\n */\n midPointFrom(that: XY): Point {\n return this.lerp(that);\n }\n\n /**\n * Returns a new point which is the min of this and another one\n * @param {XY} that\n * @return {Point}\n */\n min(that: XY): Point {\n return new Point(Math.min(this.x, that.x), Math.min(this.y, that.y));\n }\n\n /**\n * Returns a new point which is the max of this and another one\n * @param {XY} that\n * @return {Point}\n */\n max(that: XY): Point {\n return new Point(Math.max(this.x, that.x), Math.max(this.y, that.y));\n }\n\n /**\n * Returns string representation of this point\n * @return {String}\n */\n toString(): string {\n return `${this.x},${this.y}`;\n }\n\n /**\n * Sets x/y of this point\n * @param {Number} x\n * @param {Number} y\n * @chainable\n */\n setXY(x: number, y: number) {\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * Sets x of this point\n * @param {Number} x\n * @chainable\n */\n setX(x: number) {\n this.x = x;\n return this;\n }\n\n /**\n * Sets y of this point\n * @param {Number} y\n * @chainable\n */\n setY(y: number) {\n this.y = y;\n return this;\n }\n\n /**\n * Sets x/y of this point from another point\n * @param {XY} that\n * @chainable\n */\n setFromPoint(that: XY) {\n this.x = that.x;\n this.y = that.y;\n return this;\n }\n\n /**\n * Swaps x/y of this point and another point\n * @param {XY} that\n */\n swap(that: XY) {\n const x = this.x,\n y = this.y;\n this.x = that.x;\n this.y = that.y;\n that.x = x;\n that.y = y;\n }\n\n /**\n * return a cloned instance of the point\n * @return {Point}\n */\n clone(): Point {\n return new Point(this.x, this.y);\n }\n\n /**\n * Rotates `point` around `origin` with `radians`\n * @static\n * @memberOf fabric.util\n * @param {XY} origin The origin of the rotation\n * @param {TRadian} radians The radians of the angle for the rotation\n * @return {Point} The new rotated point\n */\n rotate(radians: TRadian, origin: XY = ZERO): Point {\n // TODO benchmark and verify the add and subtract how much cost\n // and then in case early return if no origin is passed\n const sinus = sin(radians),\n cosinus = cos(radians);\n const p = this.subtract(origin);\n const rotated = new Point(\n p.x * cosinus - p.y * sinus,\n p.x * sinus + p.y * cosinus,\n );\n return rotated.add(origin);\n }\n\n /**\n * Apply transform t to point p\n * @static\n * @memberOf fabric.util\n * @param {TMat2D} t The transform\n * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied\n * @return {Point} The transformed point\n */\n transform(t: TMat2D, ignoreOffset = false): Point {\n return new Point(\n t[0] * this.x + t[2] * this.y + (ignoreOffset ? 0 : t[4]),\n t[1] * this.x + t[3] * this.y + (ignoreOffset ? 0 : t[5]),\n );\n }\n}\n\nexport const ZERO = new Point(0, 0);\n","import type { Constructor, TBBox } from './typedefs';\nimport { removeFromArray } from './util/internals/removeFromArray';\nimport { Point } from './Point';\nimport type { ActiveSelection } from './shapes/ActiveSelection';\nimport type { Group } from './shapes/Group';\nimport type { InteractiveFabricObject } from './shapes/Object/InteractiveObject';\nimport type { FabricObject } from './shapes/Object/FabricObject';\n\nexport const isCollection = (\n fabricObject?: FabricObject,\n): fabricObject is Group | ActiveSelection => {\n return !!fabricObject && Array.isArray((fabricObject as Group)._objects);\n};\n\nexport function createCollectionMixin(Base: TBase) {\n class Collection extends Base {\n /**\n * @type {FabricObject[]}\n * @TODO needs to end up in the constructor too\n */\n _objects: FabricObject[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectAdded(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectRemoved(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onStackOrderChanged(object: FabricObject) {\n // subclasses should override this method\n }\n\n /**\n * Adds objects to collection\n * Objects should be instances of (or inherit from) FabricObject\n * @param {...FabricObject[]} objects to add\n * @returns {number} new array length\n */\n add(...objects: FabricObject[]): number {\n const size = this._objects.push(...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return size;\n }\n\n /**\n * Inserts an object into collection at specified index\n * @param {number} index Index to insert object at\n * @param {...FabricObject[]} objects Object(s) to insert\n * @returns {number} new array length\n */\n insertAt(index: number, ...objects: FabricObject[]) {\n this._objects.splice(index, 0, ...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return this._objects.length;\n }\n\n /**\n * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n * @private\n * @param {...FabricObject[]} objects objects to remove\n * @returns {FabricObject[]} removed objects\n */\n remove(...objects: FabricObject[]) {\n const array = this._objects,\n removed: FabricObject[] = [];\n objects.forEach((object) => {\n const index = array.indexOf(object);\n // only call onObjectRemoved if an object was actually removed\n if (index !== -1) {\n array.splice(index, 1);\n removed.push(object);\n this._onObjectRemoved(object);\n }\n });\n return removed;\n }\n\n /**\n * Executes given function for each object in this group\n * A simple shortcut for getObjects().forEach, before es6 was more complicated,\n * now is just a shortcut.\n * @param {Function} callback\n * Callback invoked with current object as first argument,\n * index - as second and an array of all objects - as third.\n */\n forEachObject(\n callback: (\n object: FabricObject,\n index: number,\n array: FabricObject[],\n ) => any,\n ) {\n this.getObjects().forEach((object, index, objects) =>\n callback(object, index, objects),\n );\n }\n\n /**\n * Returns an array of children objects of this instance\n * @param {...String} [types] When specified, only objects of these types are returned\n * @return {Array}\n */\n getObjects(...types: string[]) {\n if (types.length === 0) {\n return [...this._objects];\n }\n return this._objects.filter((o) => o.isType(...types));\n }\n\n /**\n * Returns object at specified index\n * @param {Number} index\n * @return {Object} object at index\n */\n item(index: number) {\n return this._objects[index];\n }\n\n /**\n * Returns true if collection contains no objects\n * @return {Boolean} true if collection is empty\n */\n isEmpty() {\n return this._objects.length === 0;\n }\n\n /**\n * Returns a size of a collection (i.e: length of an array containing its objects)\n * @return {Number} Collection size\n */\n size() {\n return this._objects.length;\n }\n\n /**\n * Returns true if collection contains an object.\\\n * **Prefer using {@link FabricObject#isDescendantOf} for performance reasons**\n * instead of `a.contains(b)` use `b.isDescendantOf(a)`\n * @param {Object} object Object to check against\n * @param {Boolean} [deep=false] `true` to check all descendants, `false` to check only `_objects`\n * @return {Boolean} `true` if collection contains an object\n */\n contains(object: FabricObject, deep?: boolean): boolean {\n if (this._objects.includes(object)) {\n return true;\n } else if (deep) {\n return this._objects.some(\n (obj) =>\n obj instanceof Collection &&\n (obj as unknown as Collection).contains(object, true),\n );\n }\n return false;\n }\n\n /**\n * Returns number representation of a collection complexity\n * @return {Number} complexity\n */\n complexity() {\n return this._objects.reduce((memo, current) => {\n memo += current.complexity ? current.complexity() : 0;\n return memo;\n }, 0);\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the bottom of the stack of drawn objects\n * @param {fabric.Object} object Object to send to back\n * @returns {boolean} true if change occurred\n */\n sendObjectToBack(object: FabricObject) {\n if (!object || object === this._objects[0]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.unshift(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the top of the stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @returns {boolean} true if change occurred\n */\n bringObjectToFront(object: FabricObject) {\n if (!object || object === this._objects[this._objects.length - 1]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.push(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or a selection down in stack of drawn objects\n * An optional parameter, `intersecting` allows to move the object in behind\n * the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @returns {boolean} true if change occurred\n */\n sendObjectBackwards(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== 0) {\n // if object is not on the bottom of stack\n const newIdx = this.findNewLowerIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object or a selection up in stack of drawn objects\n * An optional parameter, intersecting allows to move the object in front\n * of the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @returns {boolean} true if change occurred\n */\n bringObjectForward(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== this._objects.length - 1) {\n // if object is not on top of stack (last item in an array)\n const newIdx = this.findNewUpperIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @param {number} index Position to move to\n * @returns {boolean} true if change occurred\n */\n moveObjectTo(object: FabricObject, index: number) {\n if (object === this._objects[index]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.splice(index, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n findNewLowerIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean,\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse down the stack looking for the nearest intersecting object\n for (let i = idx - 1; i >= 0; --i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx - 1;\n }\n\n return newIdx;\n }\n\n findNewUpperIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean,\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse up the stack looking for the nearest intersecting object\n for (let i = idx + 1; i < this._objects.length; ++i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx + 1;\n }\n\n return newIdx;\n }\n\n /**\n * Given a bounding box, return all the objects of the collection that are contained in the bounding box.\n * If `includeIntersecting` is true, return also the objects that intersect the bounding box as well.\n * This is meant to work with selection. Is not a generic method.\n * @param {TBBox} bbox a bounding box in scene coordinates\n * @param {{ includeIntersecting?: boolean }} options an object with includeIntersecting\n * @returns array of objects contained in the bounding box, ordered from top to bottom stacking wise\n */\n collectObjects(\n { left, top, width, height }: TBBox,\n { includeIntersecting = true }: { includeIntersecting?: boolean } = {},\n ) {\n const objects: InteractiveFabricObject[] = [],\n tl = new Point(left, top),\n br = tl.add(new Point(width, height));\n\n // we iterate reverse order to collect top first in case of click.\n for (let i = this._objects.length - 1; i >= 0; i--) {\n const object = this._objects[i] as unknown as InteractiveFabricObject;\n if (\n object.selectable &&\n object.visible &&\n ((includeIntersecting && object.intersectsWithRect(tl, br)) ||\n object.isContainedWithinRect(tl, br) ||\n (includeIntersecting && object.containsPoint(tl)) ||\n (includeIntersecting && object.containsPoint(br)))\n ) {\n objects.push(object);\n }\n }\n\n return objects;\n }\n }\n\n // https://github.com/microsoft/TypeScript/issues/32080\n return Collection as typeof Collection & TBase;\n}\n","import { Observable } from './Observable';\n\nexport class CommonMethods extends Observable {\n /**\n * Sets object's properties from options, for initialization only\n * @protected\n * @param {Object} [options] Options object\n */\n protected _setOptions(options: any = {}) {\n for (const prop in options) {\n this.set(prop, options[prop]);\n }\n }\n\n /**\n * @private\n */\n _setObject(obj: Record) {\n for (const prop in obj) {\n this._set(prop, obj[prop]);\n }\n }\n\n /**\n * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\n * @param {String|Object} key Property name or object (if object, iterate over the object properties)\n * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\n */\n set(key: string | Record, value?: any) {\n if (typeof key === 'object') {\n this._setObject(key);\n } else {\n this._set(key, value);\n }\n return this;\n }\n\n _set(key: string, value: any) {\n this[key as keyof this] = value;\n }\n\n /**\n * Toggles specified property from `true` to `false` or from `false` to `true`\n * @param {String} property Property to toggle\n */\n toggle(property: string) {\n const value = this.get(property);\n if (typeof value === 'boolean') {\n this.set(property, !value);\n }\n return this;\n }\n\n /**\n * Basic getter\n * @param {String} property Property name\n * @return {*} value of a property\n */\n get(property: string): any {\n return this[property as keyof this];\n }\n}\n","import { getFabricWindow } from '../../env';\n\nexport function requestAnimFrame(callback: FrameRequestCallback): number {\n return getFabricWindow().requestAnimationFrame(callback);\n}\n\nexport function cancelAnimFrame(handle: number): void {\n return getFabricWindow().cancelAnimationFrame(handle);\n}\n","let id = 0;\n\nexport const uid = () => id++;\n","import { getFabricDocument } from '../../env';\nimport type { ImageFormat, TSize } from '../../typedefs';\nimport { FabricError } from '../internals/console';\n/**\n * Creates canvas element\n * @return {CanvasElement} initialized canvas element\n */\nexport const createCanvasElement = (): HTMLCanvasElement => {\n const element = getFabricDocument().createElement('canvas');\n if (!element || typeof element.getContext === 'undefined') {\n throw new FabricError('Failed to create `canvas` element');\n }\n return element;\n};\n\n/**\n * Creates image element (works on client and node)\n * @return {HTMLImageElement} HTML image element\n */\nexport const createImage = (): HTMLImageElement =>\n getFabricDocument().createElement('img');\n\n/**\n * Creates a canvas element that is a copy of another and is also painted\n * @param {CanvasElement} canvas to copy size and content of\n * @return {CanvasElement} initialized canvas element\n */\nexport const copyCanvasElement = (\n canvas: HTMLCanvasElement,\n): HTMLCanvasElement => {\n const newCanvas = createCanvasElementFor(canvas);\n newCanvas.getContext('2d')?.drawImage(canvas, 0, 0);\n return newCanvas;\n};\n\nexport const createCanvasElementFor = (\n canvas: HTMLCanvasElement | ImageData | HTMLImageElement | TSize,\n): HTMLCanvasElement => {\n const newCanvas = createCanvasElement();\n newCanvas.width = canvas.width;\n newCanvas.height = canvas.height;\n return newCanvas;\n};\n\n/**\n * since 2.6.0 moved from canvas instance to utility.\n * possibly useless\n * @param {CanvasElement} canvasEl to copy size and content of\n * @param {String} format 'jpeg' or 'png', in some browsers 'webp' is ok too\n * @param {Number} quality <= 1 and > 0\n * @return {String} data url\n */\nexport const toDataURL = (\n canvasEl: HTMLCanvasElement,\n format: ImageFormat,\n quality: number,\n) => canvasEl.toDataURL(`image/${format}`, quality);\n\nexport const isHTMLCanvas = (\n canvas?: HTMLCanvasElement | string,\n): canvas is HTMLCanvasElement => {\n return !!canvas && (canvas as HTMLCanvasElement).getContext !== undefined;\n};\n","import type { TRadian, TDegree } from '../../typedefs';\nimport { PiBy180 } from '../../constants';\n\n/**\n * Transforms degrees to radians.\n * @param {TDegree} degrees value in degrees\n * @return {TRadian} value in radians\n */\nexport const degreesToRadians = (degrees: TDegree): TRadian =>\n (degrees * PiBy180) as TRadian;\n\n/**\n * Transforms radians to degrees.\n * @param {TRadian} radians value in radians\n * @return {TDegree} value in degrees\n */\nexport const radiansToDegrees = (radians: TRadian): TDegree =>\n (radians / PiBy180) as TDegree;\n","import { iMatrix } from '../../constants';\nimport type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport type { TDegree, TRadian, TMat2D } from '../../typedefs';\nimport { cos } from './cos';\nimport { degreesToRadians, radiansToDegrees } from './radiansDegreesConversion';\nimport { sin } from './sin';\n\nexport type TRotateMatrixArgs = {\n angle?: TDegree;\n};\n\nexport type TTranslateMatrixArgs = {\n translateX?: number;\n translateY?: number;\n};\n\nexport type TScaleMatrixArgs = {\n scaleX?: number;\n scaleY?: number;\n flipX?: boolean;\n flipY?: boolean;\n skewX?: TDegree;\n skewY?: TDegree;\n};\n\nexport type TComposeMatrixArgs = TTranslateMatrixArgs &\n TRotateMatrixArgs &\n TScaleMatrixArgs;\n\nexport type TQrDecomposeOut = Required<\n Omit\n>;\n\nexport const isIdentityMatrix = (mat: TMat2D) =>\n mat.every((value, index) => value === iMatrix[index]);\n\n/**\n * Apply transform t to point p\n * @deprecated use {@link Point#transform}\n * @param {Point | XY} p The point to transform\n * @param {Array} t The transform\n * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied\n * @return {Point} The transformed point\n */\nexport const transformPoint = (\n p: XY,\n t: TMat2D,\n ignoreOffset?: boolean,\n): Point => new Point(p).transform(t, ignoreOffset);\n\n/**\n * Invert transformation t\n * @param {Array} t The transform\n * @return {Array} The inverted transform\n */\nexport const invertTransform = (t: TMat2D): TMat2D => {\n const a = 1 / (t[0] * t[3] - t[1] * t[2]),\n r = [a * t[3], -a * t[1], -a * t[2], a * t[0], 0, 0] as TMat2D,\n { x, y } = new Point(t[4], t[5]).transform(r, true);\n r[4] = -x;\n r[5] = -y;\n return r;\n};\n\n/**\n * Multiply matrix A by matrix B to nest transformations\n * @param {TMat2D} a First transformMatrix\n * @param {TMat2D} b Second transformMatrix\n * @param {Boolean} is2x2 flag to multiply matrices as 2x2 matrices\n * @return {TMat2D} The product of the two transform matrices\n */\nexport const multiplyTransformMatrices = (\n a: TMat2D,\n b: TMat2D,\n is2x2?: boolean,\n): TMat2D =>\n [\n a[0] * b[0] + a[2] * b[1],\n a[1] * b[0] + a[3] * b[1],\n a[0] * b[2] + a[2] * b[3],\n a[1] * b[2] + a[3] * b[3],\n is2x2 ? 0 : a[0] * b[4] + a[2] * b[5] + a[4],\n is2x2 ? 0 : a[1] * b[4] + a[3] * b[5] + a[5],\n ] as TMat2D;\n\n/**\n * Multiplies {@link matrices} such that a matrix defines the plane for the rest of the matrices **after** it\n *\n * `multiplyTransformMatrixArray([A, B, C, D])` is equivalent to `A(B(C(D)))`\n *\n * @param matrices an array of matrices\n * @param [is2x2] flag to multiply matrices as 2x2 matrices\n * @returns the multiplication product\n */\nexport const multiplyTransformMatrixArray = (\n matrices: (TMat2D | undefined | null | false)[],\n is2x2?: boolean,\n) =>\n matrices.reduceRight(\n (product: TMat2D, curr) =>\n curr && product\n ? multiplyTransformMatrices(curr, product, is2x2)\n : curr || product,\n undefined as unknown as TMat2D,\n ) || iMatrix.concat();\n\nexport const calcPlaneRotation = ([a, b]: TMat2D) =>\n Math.atan2(b, a) as TRadian;\n\n/**\n * Decomposes standard 2x3 matrix into transform components\n * @param {TMat2D} a transformMatrix\n * @return {Object} Components of transform\n */\nexport const qrDecompose = (a: TMat2D): TQrDecomposeOut => {\n const angle = calcPlaneRotation(a),\n denom = Math.pow(a[0], 2) + Math.pow(a[1], 2),\n scaleX = Math.sqrt(denom),\n scaleY = (a[0] * a[3] - a[2] * a[1]) / scaleX,\n skewX = Math.atan2(a[0] * a[2] + a[1] * a[3], denom);\n return {\n angle: radiansToDegrees(angle),\n scaleX,\n scaleY,\n skewX: radiansToDegrees(skewX),\n skewY: 0 as TDegree,\n translateX: a[4] || 0,\n translateY: a[5] || 0,\n };\n};\n\n/**\n * Generate a translation matrix\n *\n * A translation matrix in the form of\n * [ 1 0 x ]\n * [ 0 1 y ]\n * [ 0 0 1 ]\n *\n * See @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#translate for more details\n *\n * @param {number} x translation on X axis\n * @param {number} [y] translation on Y axis\n * @returns {TMat2D} matrix\n */\nexport const createTranslateMatrix = (x: number, y = 0): TMat2D => [\n 1,\n 0,\n 0,\n 1,\n x,\n y,\n];\n\n/**\n * Generate a rotation matrix around around a point (x,y), defaulting to (0,0)\n *\n * A matrix in the form of\n * [cos(a) -sin(a) -x*cos(a)+y*sin(a)+x]\n * [sin(a) cos(a) -x*sin(a)-y*cos(a)+y]\n * [0 0 1 ]\n *\n *\n * @param {TDegree} angle rotation in degrees\n * @param {XY} [pivotPoint] pivot point to rotate around\n * @returns {TMat2D} matrix\n */\nexport function createRotateMatrix(\n { angle = 0 }: TRotateMatrixArgs = {},\n { x = 0, y = 0 }: Partial = {},\n): TMat2D {\n const angleRadiant = degreesToRadians(angle),\n cosValue = cos(angleRadiant),\n sinValue = sin(angleRadiant);\n return [\n cosValue,\n sinValue,\n -sinValue,\n cosValue,\n x ? x - (cosValue * x - sinValue * y) : 0,\n y ? y - (sinValue * x + cosValue * y) : 0,\n ];\n}\n\n/**\n * Generate a scale matrix around the point (0,0)\n *\n * A matrix in the form of\n * [x 0 0]\n * [0 y 0]\n * [0 0 1]\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#scale\n *\n * @param {number} x scale on X axis\n * @param {number} [y] scale on Y axis\n * @returns {TMat2D} matrix\n */\nexport const createScaleMatrix = (x: number, y: number = x): TMat2D => [\n x,\n 0,\n 0,\n y,\n 0,\n 0,\n];\n\nexport const angleToSkew = (angle: TDegree) =>\n Math.tan(degreesToRadians(angle));\n\nexport const skewToAngle = (value: TRadian) =>\n radiansToDegrees(Math.atan(value));\n\n/**\n * Generate a skew matrix for the X axis\n *\n * A matrix in the form of\n * [1 x 0]\n * [0 1 0]\n * [0 0 1]\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#skewx\n *\n * @param {TDegree} skewValue translation on X axis\n * @returns {TMat2D} matrix\n */\nexport const createSkewXMatrix = (skewValue: TDegree): TMat2D => [\n 1,\n 0,\n angleToSkew(skewValue),\n 1,\n 0,\n 0,\n];\n\n/**\n * Generate a skew matrix for the Y axis\n *\n * A matrix in the form of\n * [1 0 0]\n * [y 1 0]\n * [0 0 1]\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#skewy\n *\n * @param {TDegree} skewValue translation on Y axis\n * @returns {TMat2D} matrix\n */\nexport const createSkewYMatrix = (skewValue: TDegree): TMat2D => [\n 1,\n angleToSkew(skewValue),\n 0,\n 1,\n 0,\n 0,\n];\n\n/**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet.\n * is called DimensionsTransformMatrix because those properties are the one that influence\n * the size of the resulting box of the object.\n * @param {Object} options\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewY]\n * @return {Number[]} transform matrix\n */\nexport const calcDimensionsMatrix = ({\n scaleX = 1,\n scaleY = 1,\n flipX = false,\n flipY = false,\n skewX = 0 as TDegree,\n skewY = 0 as TDegree,\n}: TScaleMatrixArgs) => {\n let matrix = createScaleMatrix(\n flipX ? -scaleX : scaleX,\n flipY ? -scaleY : scaleY,\n );\n if (skewX) {\n matrix = multiplyTransformMatrices(matrix, createSkewXMatrix(skewX), true);\n }\n if (skewY) {\n matrix = multiplyTransformMatrices(matrix, createSkewYMatrix(skewY), true);\n }\n return matrix;\n};\n\n/**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet\n * Before changing this function look at: src/benchmarks/calcTransformMatrix.mjs\n * @param {Object} options\n * @param {Number} [options.angle]\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewY]\n * @param {Number} [options.translateX]\n * @param {Number} [options.translateY]\n * @return {Number[]} transform matrix\n */\nexport const composeMatrix = (options: TComposeMatrixArgs): TMat2D => {\n const { translateX = 0, translateY = 0, angle = 0 as TDegree } = options;\n let matrix = createTranslateMatrix(translateX, translateY);\n if (angle) {\n matrix = multiplyTransformMatrices(matrix, createRotateMatrix({ angle }));\n }\n const scaleMatrix = calcDimensionsMatrix(options);\n if (!isIdentityMatrix(scaleMatrix)) {\n matrix = multiplyTransformMatrices(matrix, scaleMatrix);\n }\n return matrix;\n};\n","import { noop } from '../../constants';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport type {\n Abortable,\n Constructor,\n TCrossOrigin,\n TFiller,\n} from '../../typedefs';\nimport { createImage } from './dom';\nimport { classRegistry } from '../../ClassRegistry';\nimport type { BaseFilter } from '../../filters/BaseFilter';\nimport type { FabricObject as BaseFabricObject } from '../../shapes/Object/Object';\nimport { FabricError, SignalAbortedError } from '../internals/console';\nimport type { Shadow } from '../../Shadow';\n\nexport type LoadImageOptions = Abortable & {\n /**\n * cors value for the image loading, default to anonymous\n */\n crossOrigin?: TCrossOrigin;\n};\n\n/**\n * Loads image element from given url and resolve it, or catch.\n * @param {String} url URL representing an image\n * @param {LoadImageOptions} [options] image loading options\n * @returns {Promise} the loaded image.\n */\nexport const loadImage = (\n url: string,\n { signal, crossOrigin = null }: LoadImageOptions = {},\n) =>\n new Promise(function (resolve, reject) {\n if (signal && signal.aborted) {\n return reject(new SignalAbortedError('loadImage'));\n }\n const img = createImage();\n let abort: EventListenerOrEventListenerObject;\n if (signal) {\n abort = function (err: Event) {\n img.src = '';\n reject(err);\n };\n signal.addEventListener('abort', abort, { once: true });\n }\n const done = function () {\n img.onload = img.onerror = null;\n abort && signal?.removeEventListener('abort', abort);\n resolve(img);\n };\n if (!url) {\n done();\n return;\n }\n img.onload = done;\n img.onerror = function () {\n abort && signal?.removeEventListener('abort', abort);\n reject(new FabricError(`Error loading ${img.src}`));\n };\n crossOrigin && (img.crossOrigin = crossOrigin);\n img.src = url;\n });\n\nexport type EnlivenObjectOptions = Abortable & {\n /**\n * Method for further parsing of object elements,\n * called after each fabric object created.\n */\n reviver?: <\n T extends\n | BaseFabricObject\n | FabricObject\n | BaseFilter\n | Shadow\n | TFiller,\n >(\n serializedObj: Record,\n instance: T,\n ) => void;\n};\n\n/**\n * @TODO type this correctly.\n * Creates corresponding fabric instances from their object representations\n * @param {Object[]} objects Objects to enliven\n * @param {EnlivenObjectOptions} [options]\n * @param {(serializedObj: object, instance: FabricObject) => any} [options.reviver] Method for further parsing of object elements,\n * called after each fabric object created.\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\nexport const enlivenObjects = <\n T extends\n | BaseFabricObject\n | FabricObject\n | BaseFilter\n | Shadow\n | TFiller,\n>(\n objects: any[],\n { signal, reviver = noop }: EnlivenObjectOptions = {},\n) =>\n new Promise((resolve, reject) => {\n const instances: T[] = [];\n signal && signal.addEventListener('abort', reject, { once: true });\n Promise.all(\n objects.map((obj) =>\n classRegistry\n .getClass<\n Constructor & {\n fromObject(options: any, context: Abortable): Promise;\n }\n >(obj.type)\n .fromObject(obj, { signal })\n .then((fabricInstance) => {\n reviver(obj, fabricInstance);\n instances.push(fabricInstance);\n return fabricInstance;\n }),\n ),\n )\n .then(resolve)\n .catch((error) => {\n // cleanup\n instances.forEach((instance) => {\n (instance as FabricObject).dispose &&\n (instance as FabricObject).dispose();\n });\n reject(error);\n })\n .finally(() => {\n signal && signal.removeEventListener('abort', reject);\n });\n });\n\n/**\n * Creates corresponding fabric instances residing in an object, e.g. `clipPath`\n * @param {Object} object with properties to enlive ( fill, stroke, clipPath, path )\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise>} the input object with enlived values\n */\nexport const enlivenObjectEnlivables = <\n R = Record,\n>(\n serializedObject: any,\n { signal }: Abortable = {},\n) =>\n new Promise((resolve, reject) => {\n const instances: (FabricObject | TFiller | Shadow)[] = [];\n signal && signal.addEventListener('abort', reject, { once: true });\n // enlive every possible property\n const promises = Object.values(serializedObject).map((value: any) => {\n if (!value) {\n return value;\n }\n /**\n * clipPath or shadow or gradient or text on a path or a pattern,\n * or the backgroundImage or overlayImage of canvas\n * If we have a type and there is a classe registered for it, we enlive it.\n * If there is no class registered for it we return the value as is\n * */\n if (value.type && classRegistry.has(value.type)) {\n return enlivenObjects([value], {\n signal,\n }).then(([enlived]) => {\n instances.push(enlived);\n return enlived;\n });\n }\n return value;\n });\n const keys = Object.keys(serializedObject);\n Promise.all(promises)\n .then((enlived) => {\n return enlived.reduce((acc, instance, index) => {\n acc[keys[index]] = instance;\n return acc;\n }, {});\n })\n .then(resolve)\n .catch((error) => {\n // cleanup\n instances.forEach((instance: any) => {\n instance.dispose && instance.dispose();\n });\n reject(error);\n })\n .finally(() => {\n signal && signal.removeEventListener('abort', reject);\n });\n });\n","/**\n * Populates an object with properties of another object\n * @param {Object} source Source object\n * @param {string[]} properties Properties names to include\n * @returns object populated with the picked keys\n */\nexport const pick = >(\n source: T,\n keys: (keyof T)[] = [],\n) => {\n return keys.reduce((o, key) => {\n if (key in source) {\n o[key] = source[key];\n }\n return o;\n }, {} as Partial);\n};\n\nexport const pickBy = >(\n source: T,\n predicate: (value: T[K], key: K, collection: T) => boolean,\n) => {\n return (Object.keys(source) as (keyof T)[]).reduce((o, key) => {\n if (predicate(source[key], key, source)) {\n o[key] = source[key];\n }\n return o;\n }, {} as Partial);\n};\n","/**\n * Map of the 148 color names with HEX code\n * @see: https://www.w3.org/TR/css3-color/#svg-color\n */\nexport const ColorNameMap = {\n aliceblue: '#F0F8FF',\n antiquewhite: '#FAEBD7',\n aqua: '#0FF',\n aquamarine: '#7FFFD4',\n azure: '#F0FFFF',\n beige: '#F5F5DC',\n bisque: '#FFE4C4',\n black: '#000',\n blanchedalmond: '#FFEBCD',\n blue: '#00F',\n blueviolet: '#8A2BE2',\n brown: '#A52A2A',\n burlywood: '#DEB887',\n cadetblue: '#5F9EA0',\n chartreuse: '#7FFF00',\n chocolate: '#D2691E',\n coral: '#FF7F50',\n cornflowerblue: '#6495ED',\n cornsilk: '#FFF8DC',\n crimson: '#DC143C',\n cyan: '#0FF',\n darkblue: '#00008B',\n darkcyan: '#008B8B',\n darkgoldenrod: '#B8860B',\n darkgray: '#A9A9A9',\n darkgrey: '#A9A9A9',\n darkgreen: '#006400',\n darkkhaki: '#BDB76B',\n darkmagenta: '#8B008B',\n darkolivegreen: '#556B2F',\n darkorange: '#FF8C00',\n darkorchid: '#9932CC',\n darkred: '#8B0000',\n darksalmon: '#E9967A',\n darkseagreen: '#8FBC8F',\n darkslateblue: '#483D8B',\n darkslategray: '#2F4F4F',\n darkslategrey: '#2F4F4F',\n darkturquoise: '#00CED1',\n darkviolet: '#9400D3',\n deeppink: '#FF1493',\n deepskyblue: '#00BFFF',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1E90FF',\n firebrick: '#B22222',\n floralwhite: '#FFFAF0',\n forestgreen: '#228B22',\n fuchsia: '#F0F',\n gainsboro: '#DCDCDC',\n ghostwhite: '#F8F8FF',\n gold: '#FFD700',\n goldenrod: '#DAA520',\n gray: '#808080',\n grey: '#808080',\n green: '#008000',\n greenyellow: '#ADFF2F',\n honeydew: '#F0FFF0',\n hotpink: '#FF69B4',\n indianred: '#CD5C5C',\n indigo: '#4B0082',\n ivory: '#FFFFF0',\n khaki: '#F0E68C',\n lavender: '#E6E6FA',\n lavenderblush: '#FFF0F5',\n lawngreen: '#7CFC00',\n lemonchiffon: '#FFFACD',\n lightblue: '#ADD8E6',\n lightcoral: '#F08080',\n lightcyan: '#E0FFFF',\n lightgoldenrodyellow: '#FAFAD2',\n lightgray: '#D3D3D3',\n lightgrey: '#D3D3D3',\n lightgreen: '#90EE90',\n lightpink: '#FFB6C1',\n lightsalmon: '#FFA07A',\n lightseagreen: '#20B2AA',\n lightskyblue: '#87CEFA',\n lightslategray: '#789',\n lightslategrey: '#789',\n lightsteelblue: '#B0C4DE',\n lightyellow: '#FFFFE0',\n lime: '#0F0',\n limegreen: '#32CD32',\n linen: '#FAF0E6',\n magenta: '#F0F',\n maroon: '#800000',\n mediumaquamarine: '#66CDAA',\n mediumblue: '#0000CD',\n mediumorchid: '#BA55D3',\n mediumpurple: '#9370DB',\n mediumseagreen: '#3CB371',\n mediumslateblue: '#7B68EE',\n mediumspringgreen: '#00FA9A',\n mediumturquoise: '#48D1CC',\n mediumvioletred: '#C71585',\n midnightblue: '#191970',\n mintcream: '#F5FFFA',\n mistyrose: '#FFE4E1',\n moccasin: '#FFE4B5',\n navajowhite: '#FFDEAD',\n navy: '#000080',\n oldlace: '#FDF5E6',\n olive: '#808000',\n olivedrab: '#6B8E23',\n orange: '#FFA500',\n orangered: '#FF4500',\n orchid: '#DA70D6',\n palegoldenrod: '#EEE8AA',\n palegreen: '#98FB98',\n paleturquoise: '#AFEEEE',\n palevioletred: '#DB7093',\n papayawhip: '#FFEFD5',\n peachpuff: '#FFDAB9',\n peru: '#CD853F',\n pink: '#FFC0CB',\n plum: '#DDA0DD',\n powderblue: '#B0E0E6',\n purple: '#800080',\n rebeccapurple: '#639',\n red: '#F00',\n rosybrown: '#BC8F8F',\n royalblue: '#4169E1',\n saddlebrown: '#8B4513',\n salmon: '#FA8072',\n sandybrown: '#F4A460',\n seagreen: '#2E8B57',\n seashell: '#FFF5EE',\n sienna: '#A0522D',\n silver: '#C0C0C0',\n skyblue: '#87CEEB',\n slateblue: '#6A5ACD',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#FFFAFA',\n springgreen: '#00FF7F',\n steelblue: '#4682B4',\n tan: '#D2B48C',\n teal: '#008080',\n thistle: '#D8BFD8',\n tomato: '#FF6347',\n turquoise: '#40E0D0',\n violet: '#EE82EE',\n wheat: '#F5DEB3',\n white: '#FFF',\n whitesmoke: '#F5F5F5',\n yellow: '#FF0',\n yellowgreen: '#9ACD32',\n};\n","/**\n * Regex matching color in RGB or RGBA formats (ex: `rgb(0, 0, 0)`, `rgba(255, 100, 10, 0.5)`, `rgba( 255 , 100 , 10 , 0.5 )`, `rgb(1,1,1)`, `rgba(100%, 60%, 10%, 0.5)`)\n * Also matching rgba(r g b / a) as per new specs\n * https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/rgb\n * Formal syntax at the time of writing:\n * =\n * rgb( [ | none ]{3} [ / [ | none ] ]? ) |\n * rgb( [ | none ]{3} [ / [ | none ] ]? )\n * = | \n *\n * For learners this is how you can read this regex\n * Regular expression for matching an rgba or rgb CSS color value\n *\n * /^ # Beginning of the string\n * rgba? # \"rgb\" or \"rgba\"\n * \\(\\s* # Opening parenthesis and optional whitespace\n * (\\d{0,3} # 0 to three digits R channel\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for the first color component\n * %? # Optional percent sign after the first color component\n * \\s* # Optional whitespace\n * [\\s|,] # Separator between color components can be a space or comma\n * \\s* # Optional whitespace\n * (\\d{0,3} # 0 to three digits G channel\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for the second color component\n * %? # Optional percent sign after the second color component\n * \\s* # Optional whitespace\n * [\\s|,] # Separator between color components can be a space or comma\n * \\s* # Optional whitespace\n * (\\d{0,3} # 0 to three digits B channel\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for the third color component\n * %? # Optional percent sign after the third color component\n * \\s* # Optional whitespace\n * (?: # Beginning of non-capturing group for alpha value\n * \\s* # Optional whitespace\n * [,/] # Comma or slash separator for alpha value\n * \\s* # Optional whitespace\n * (\\d{0,3} # Zero to three digits\n * (?:\\.\\d+)? # Optional decimal with one or more digits\n * ) # End of capturing group for alpha value\n * %? # Optional percent sign after alpha value\n * \\s* # Optional whitespace\n * )? # End of non-capturing group for alpha value (optional)\n * \\) # Closing parenthesis\n * $ # End of the string\n *\n * The alpha channel can be in the format 0.4 .7 or 1 or 73%\n *\n * WARNING this regex doesn't fail on off spec colors. it matches everything that could be a color.\n * So the spec does not allow for `rgba(30 , 45% 35, 49%)` but this will work anyways for us\n */\nexport const reRGBa = () =>\n /^rgba?\\(\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*(?:\\s*[,/]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*)?\\)$/i;\n\n/**\n * Regex matching color in HSL or HSLA formats (ex: hsl(0, 0, 0), rgba(255, 100, 10, 0.5), rgba( 255 , 100 , 10 , 0.5 ), rgb(1,1,1), rgba(100%, 60%, 10%, 0.5))\n * Also matching rgba(r g b / a) as per new specs\n * https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/hsl\n * Formal syntax at the time of writing:\n * =\n * hsl( [ | none ] [ | none ] [ | none ] [ / [ | none ] ]? )\n *\n * =\n * |\n * \n *\n * =\n * |\n * \n *\n * For learners this is how you can read this regex\n * Regular expression for matching an hsla or hsl CSS color value\n *\n * /^hsla?\\( // Matches the beginning of the string and the opening parenthesis of \"hsl\" or \"hsla\"\n * \\s* // Matches any whitespace characters (space, tab, etc.) zero or more times\n * (\\d{0,3} // Hue: 0 to three digits - start capture in a group\n * (?:\\.\\d+)? // Hue: Optional (non capture group) decimal with one or more digits.\n * (?:deg|turn|rad)? // Hue: Optionally include suffix deg or turn or rad\n * ) // Hue: End capture group\n * \\s* // Matches any whitespace characters zero or more times\n * [\\s|,] // Matches a space, tab or comma\n * \\s* // Matches any whitespace characters zero or more times\n * (\\d{0,3} // Saturation: 0 to three digits - start capture in a group\n * (?:\\.\\d+)? // Saturation: Optional decimal with one or more digits in a non-capturing group\n * %?) // Saturation: match optional % character and end capture group\n * \\s* // Matches any whitespace characters zero or more times\n * [\\s|,] // Matches a space, tab or comma\n * \\s* // Matches any whitespace characters zero or more times\n * (\\d{0,3} // Lightness: 0 to three digits - start capture in a group\n * (?:\\.\\d+)? // Lightness: Optional decimal with one or more digits in a non-capturing group\n * %?) // Lightness: match % character and end capture group\n * \\s* // Matches any whitespace characters zero or more times\n * (?: // Alpha: Begins a non-capturing group for the alpha value\n * \\s* // Matches any whitespace characters zero or more times\n * [,/] // Matches a comma or forward slash\n * \\s* // Matches any whitespace characters zero or more times\n * (\\d*(?:\\.\\d+)?%?) // Matches zero or more digits, optionally followed by a decimal point and one or more digits, followed by an optional percentage sign and captures it in a group\n * \\s* // Matches any whitespace characters zero or more times\n * )? // Makes the alpha value group optional\n * \\) // Matches the closing parenthesis\n * $/i // Matches the end of the string and sets the regular expression to case-insensitive mode\n *\n * WARNING this regex doesn't fail on off spec colors. It matches everything that could be a color.\n * So the spec does not allow `hsl(30 , 45% 35, 49%)` but this will work anyways for us.\n */\nexport const reHSLa = () =>\n /^hsla?\\(\\s*([+-]?\\d{0,3}(?:\\.\\d+)?(?:deg|turn|rad)?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*[\\s|,]\\s*(\\d{0,3}(?:\\.\\d+)?%?)\\s*(?:\\s*[,/]\\s*(\\d*(?:\\.\\d+)?%?)\\s*)?\\)$/i;\n\n/**\n * Regex matching color in HEX format (ex: #FF5544CC, #FF5555, 010155, aff)\n */\nexport const reHex = () => /^#?(([0-9a-f]){3,4}|([0-9a-f]{2}){3,4})$/i;\n","import type { TRGBAColorSource } from './typedefs';\n\n/**\n * @param {Number} p\n * @param {Number} q\n * @param {Number} t\n * @return {Number}\n */\nexport const hue2rgb = (p: number, q: number, t: number): number => {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n};\n\n/**\n * Adapted from {@link https://gist.github.com/mjackson/5311256 https://gist.github.com/mjackson}\n * @param {Number} r Red color value\n * @param {Number} g Green color value\n * @param {Number} b Blue color value\n * @param {Number} a Alpha color value pass through\n * @return {TRGBColorSource} Hsl color\n */\nexport const rgb2Hsl = (\n r: number,\n g: number,\n b: number,\n a: number,\n): TRGBAColorSource => {\n r /= 255;\n g /= 255;\n b /= 255;\n const maxValue = Math.max(r, g, b),\n minValue = Math.min(r, g, b);\n\n let h!: number, s: number;\n const l = (maxValue + minValue) / 2;\n\n if (maxValue === minValue) {\n h = s = 0; // achromatic\n } else {\n const d = maxValue - minValue;\n s = l > 0.5 ? d / (2 - maxValue - minValue) : d / (maxValue + minValue);\n switch (maxValue) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return [Math.round(h * 360), Math.round(s * 100), Math.round(l * 100), a];\n};\n\nexport const fromAlphaToFloat = (value = '1') =>\n parseFloat(value) / (value.endsWith('%') ? 100 : 1);\n\n/**\n * Convert a value in the inclusive range [0, 255] to hex\n */\nexport const hexify = (value: number) =>\n Math.min(Math.round(value), 255).toString(16).toUpperCase().padStart(2, '0');\n\n/**\n * Calculate the grey average value for rgb and pass through alpha\n */\nexport const greyAverage = ([\n r,\n g,\n b,\n a = 1,\n]: TRGBAColorSource): TRGBAColorSource => {\n const avg = Math.round(r * 0.3 + g * 0.59 + b * 0.11);\n return [avg, avg, avg, a];\n};\n","import { radiansToDegrees } from '../util/misc/radiansDegreesConversion';\nimport { ColorNameMap } from './color_map';\nimport { reHSLa, reHex, reRGBa } from './constants';\nimport type { TRGBAColorSource, TColorArg } from './typedefs';\nimport {\n hue2rgb,\n hexify,\n rgb2Hsl,\n fromAlphaToFloat,\n greyAverage,\n} from './util';\n\n/**\n * @class Color common color operations\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2/#colors colors}\n */\nexport class Color {\n private declare _source: TRGBAColorSource;\n isUnrecognised = false;\n\n /**\n *\n * @param {string} [color] optional in hex or rgb(a) or hsl format or from known color list\n */\n constructor(color?: TColorArg) {\n if (!color) {\n // we default to black as canvas does\n this.setSource([0, 0, 0, 1]);\n } else if (color instanceof Color) {\n this.setSource([...color._source]);\n } else if (Array.isArray(color)) {\n const [r, g, b, a = 1] = color;\n this.setSource([r, g, b, a]);\n } else {\n this.setSource(this._tryParsingColor(color));\n }\n }\n\n /**\n * @private\n * @param {string} [color] Color value to parse\n * @returns {TRGBAColorSource}\n */\n protected _tryParsingColor(color: string) {\n if (color in ColorNameMap) {\n color = ColorNameMap[color as keyof typeof ColorNameMap];\n }\n return color === 'transparent'\n ? ([255, 255, 255, 0] as TRGBAColorSource)\n : Color.sourceFromHex(color) ||\n Color.sourceFromRgb(color) ||\n Color.sourceFromHsl(color) ||\n // color is not recognized\n // we default to black as canvas does\n // eslint-disable-next-line no-constant-binary-expression\n ((this.isUnrecognised = true) && ([0, 0, 0, 1] as TRGBAColorSource));\n }\n\n /**\n * Returns source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n * @return {TRGBAColorSource}\n */\n getSource() {\n return this._source;\n }\n\n /**\n * Sets source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n * @param {TRGBAColorSource} source\n */\n setSource(source: TRGBAColorSource) {\n this._source = source;\n }\n\n /**\n * Returns color representation in RGB format\n * @return {String} ex: rgb(0-255,0-255,0-255)\n */\n toRgb() {\n const [r, g, b] = this.getSource();\n return `rgb(${r},${g},${b})`;\n }\n\n /**\n * Returns color representation in RGBA format\n * @return {String} ex: rgba(0-255,0-255,0-255,0-1)\n */\n toRgba() {\n return `rgba(${this.getSource().join(',')})`;\n }\n\n /**\n * Returns color representation in HSL format\n * @return {String} ex: hsl(0-360,0%-100%,0%-100%)\n */\n toHsl() {\n const [h, s, l] = rgb2Hsl(...this.getSource());\n return `hsl(${h},${s}%,${l}%)`;\n }\n\n /**\n * Returns color representation in HSLA format\n * @return {String} ex: hsla(0-360,0%-100%,0%-100%,0-1)\n */\n toHsla() {\n const [h, s, l, a] = rgb2Hsl(...this.getSource());\n return `hsla(${h},${s}%,${l}%,${a})`;\n }\n\n /**\n * Returns color representation in HEX format\n * @return {String} ex: FF5555\n */\n toHex() {\n const fullHex = this.toHexa();\n return fullHex.slice(0, 6);\n }\n\n /**\n * Returns color representation in HEXA format\n * @return {String} ex: FF5555CC\n */\n toHexa() {\n const [r, g, b, a] = this.getSource();\n return `${hexify(r)}${hexify(g)}${hexify(b)}${hexify(Math.round(a * 255))}`;\n }\n\n /**\n * Gets value of alpha channel for this color\n * @return {Number} 0-1\n */\n getAlpha() {\n return this.getSource()[3];\n }\n\n /**\n * Sets value of alpha channel for this color\n * @param {Number} alpha Alpha value 0-1\n * @return {Color} thisArg\n */\n setAlpha(alpha: number) {\n this._source[3] = alpha;\n return this;\n }\n\n /**\n * Transforms color to its grayscale representation\n * @return {Color} thisArg\n */\n toGrayscale() {\n this.setSource(greyAverage(this.getSource()));\n return this;\n }\n\n /**\n * Transforms color to its black and white representation\n * @param {Number} threshold\n * @return {Color} thisArg\n */\n toBlackWhite(threshold: number) {\n const [average, , , a] = greyAverage(this.getSource()),\n bOrW = average < (threshold || 127) ? 0 : 255;\n this.setSource([bOrW, bOrW, bOrW, a]);\n return this;\n }\n\n /**\n * Overlays color with another color\n * @param {String|Color} otherColor\n * @return {Color} thisArg\n */\n overlayWith(otherColor: string | Color) {\n if (!(otherColor instanceof Color)) {\n otherColor = new Color(otherColor);\n }\n\n const source = this.getSource(),\n otherAlpha = 0.5,\n otherSource = otherColor.getSource(),\n [R, G, B] = source.map((value, index) =>\n Math.round(value * (1 - otherAlpha) + otherSource[index] * otherAlpha),\n );\n\n this.setSource([R, G, B, source[3]]);\n return this;\n }\n\n /**\n * Returns new color object, when given a color in RGB format\n * @memberOf Color\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255)\n * @return {Color}\n */\n static fromRgb(color: string): Color {\n return Color.fromRgba(color);\n }\n\n /**\n * Returns new color object, when given a color in RGBA format\n * @static\n * @function\n * @memberOf Color\n * @param {String} color\n * @return {Color}\n */\n static fromRgba(color: string): Color {\n return new Color(Color.sourceFromRgb(color));\n }\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in RGB or RGBA format\n * @memberOf Color\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255), rgb(0%-100%,0%-100%,0%-100%)\n * @return {TRGBAColorSource | undefined} source\n */\n static sourceFromRgb(color: string): TRGBAColorSource | undefined {\n const match = color.match(reRGBa());\n if (match) {\n const [r, g, b] = match.slice(1, 4).map((value) => {\n const parsedValue = parseFloat(value);\n return value.endsWith('%')\n ? Math.round(parsedValue * 2.55)\n : parsedValue;\n });\n return [r, g, b, fromAlphaToFloat(match[4])];\n }\n }\n\n /**\n * Returns new color object, when given a color in HSL format\n * @param {String} color Color value ex: hsl(0-260,0%-100%,0%-100%)\n * @memberOf Color\n * @return {Color}\n */\n static fromHsl(color: string): Color {\n return Color.fromHsla(color);\n }\n\n /**\n * Returns new color object, when given a color in HSLA format\n * @static\n * @function\n * @memberOf Color\n * @param {String} color\n * @return {Color}\n */\n static fromHsla(color: string): Color {\n return new Color(Color.sourceFromHsl(color));\n }\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HSL or HSLA format.\n * Adapted from https://github.com/mjijackson\n * @memberOf Color\n * @param {String} color Color value ex: hsl(0-360,0%-100%,0%-100%) or hsla(0-360,0%-100%,0%-100%, 0-1)\n * @return {TRGBAColorSource | undefined} source\n * @see http://http://www.w3.org/TR/css3-color/#hsl-color\n */\n static sourceFromHsl(color: string): TRGBAColorSource | undefined {\n const match = color.match(reHSLa());\n if (!match) {\n return;\n }\n const match1degrees = Color.parseAngletoDegrees(match[1]);\n\n const h = (((match1degrees % 360) + 360) % 360) / 360,\n s = parseFloat(match[2]) / 100,\n l = parseFloat(match[3]) / 100;\n let r: number, g: number, b: number;\n\n if (s === 0) {\n r = g = b = l;\n } else {\n const q = l <= 0.5 ? l * (s + 1) : l + s - l * s,\n p = l * 2 - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n fromAlphaToFloat(match[4]),\n ];\n }\n\n /**\n * Returns new color object, when given a color in HEX format\n * @static\n * @memberOf Color\n * @param {String} color Color value ex: FF5555\n * @return {Color}\n */\n static fromHex(color: string): Color {\n return new Color(Color.sourceFromHex(color));\n }\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HEX format\n * @static\n * @memberOf Color\n * @param {String} color ex: FF5555 or FF5544CC (RGBa)\n * @return {TRGBAColorSource | undefined} source\n */\n static sourceFromHex(color: string): TRGBAColorSource | undefined {\n if (color.match(reHex())) {\n const value = color.slice(color.indexOf('#') + 1),\n isShortNotation = value.length <= 4;\n let expandedValue: string[];\n if (isShortNotation) {\n expandedValue = value.split('').map((hex) => hex + hex);\n } else {\n expandedValue = value.match(/.{2}/g)!;\n }\n const [r, g, b, a = 255] = expandedValue.map((hexCouple) =>\n parseInt(hexCouple, 16),\n );\n return [r, g, b, a / 255];\n }\n }\n\n /**\n * Converts a string that could be any angle notation (50deg, 0.5turn, 2rad)\n * into degrees without the 'deg' suffix\n * @static\n * @memberOf Color\n * @param {String} value ex: 0deg, 0.5turn, 2rad\n * @return {Number} number in degrees or NaN if inputs are invalid\n */\n static parseAngletoDegrees(value: string): number {\n const lowercase = value.toLowerCase();\n const numeric = parseFloat(lowercase);\n\n if (lowercase.includes('rad')) {\n return radiansToDegrees(numeric);\n }\n\n if (lowercase.includes('turn')) {\n return numeric * 360;\n }\n\n // Value is probably just a number already in degrees eg '50'\n return numeric;\n }\n}\n","/**\n * A wrapper around Number#toFixed, which contrary to native method returns number, not string.\n * @param {number|string} number number to operate on\n * @param {number} fractionDigits number of fraction digits to \"leave\"\n * @return {number}\n */\nexport const toFixed = (number: number | string, fractionDigits: number) =>\n parseFloat(Number(number).toFixed(fractionDigits));\n","import { Color } from '../../color/Color';\nimport { config } from '../../config';\nimport { DEFAULT_SVG_FONT_SIZE, FILL, NONE } from '../../constants';\nimport type {\n TBBox,\n TMat2D,\n SVGElementName,\n SupportedSVGUnit,\n} from '../../typedefs';\nimport { toFixed } from './toFixed';\n\n/**\n * Returns array of attributes for given svg that fabric parses\n * @param {SVGElementName} type Type of svg element (eg. 'circle')\n * @return {Array} string names of supported attributes\n */\nexport const getSvgAttributes = (type: SVGElementName) => {\n const commonAttributes = ['instantiated_by_use', 'style', 'id', 'class'];\n switch (type) {\n case 'linearGradient':\n return commonAttributes.concat([\n 'x1',\n 'y1',\n 'x2',\n 'y2',\n 'gradientUnits',\n 'gradientTransform',\n ]);\n case 'radialGradient':\n return commonAttributes.concat([\n 'gradientUnits',\n 'gradientTransform',\n 'cx',\n 'cy',\n 'r',\n 'fx',\n 'fy',\n 'fr',\n ]);\n case 'stop':\n return commonAttributes.concat(['offset', 'stop-color', 'stop-opacity']);\n }\n return commonAttributes;\n};\n\n/**\n * Converts from attribute value to pixel value if applicable.\n * Returns converted pixels or original value not converted.\n * @param {string} value number to operate on\n * @param {number} fontSize\n * @return {number}\n */\nexport const parseUnit = (value: string, fontSize = DEFAULT_SVG_FONT_SIZE) => {\n const unit = /\\D{0,2}$/.exec(value),\n number = parseFloat(value);\n const dpi = config.DPI;\n switch (unit?.[0] as SupportedSVGUnit) {\n case 'mm':\n return (number * dpi) / 25.4;\n\n case 'cm':\n return (number * dpi) / 2.54;\n\n case 'in':\n return number * dpi;\n\n case 'pt':\n return (number * dpi) / 72; // or * 4 / 3\n\n case 'pc':\n return ((number * dpi) / 72) * 12; // or * 16\n\n case 'em':\n return number * fontSize;\n\n default:\n return number;\n }\n};\n\nexport type MeetOrSlice = 'meet' | 'slice';\n\nexport type MinMidMax = 'Min' | 'Mid' | 'Max' | 'none';\n\nexport type TPreserveArParsed = {\n meetOrSlice: MeetOrSlice;\n alignX: MinMidMax;\n alignY: MinMidMax;\n};\n\n// align can be either none or undefined or a combination of mid/max\nconst parseAlign = (align: string): MinMidMax[] => {\n //divide align in alignX and alignY\n if (align && align !== NONE) {\n return [align.slice(1, 4) as MinMidMax, align.slice(5, 8) as MinMidMax];\n } else if (align === NONE) {\n return [align, align];\n }\n return ['Mid', 'Mid'];\n};\n\n/**\n * Parse preserveAspectRatio attribute from element\n * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio\n * @param {string} attribute to be parsed\n * @return {Object} an object containing align and meetOrSlice attribute\n */\nexport const parsePreserveAspectRatioAttribute = (\n attribute: string,\n): TPreserveArParsed => {\n const [firstPart, secondPart] = attribute.trim().split(' ') as [\n MinMidMax,\n MeetOrSlice | undefined,\n ];\n const [alignX, alignY] = parseAlign(firstPart);\n return {\n meetOrSlice: secondPart || 'meet',\n alignX,\n alignY,\n };\n};\n\n/**\n * given an array of 6 number returns something like `\"matrix(...numbers)\"`\n * @param {TMat2D} transform an array with 6 numbers\n * @return {String} transform matrix for svg\n */\nexport const matrixToSVG = (transform: TMat2D) =>\n 'matrix(' +\n transform\n .map((value) => toFixed(value, config.NUM_FRACTION_DIGITS))\n .join(' ') +\n ')';\n\n/**\n * Adobe Illustrator (at least CS5) is unable to render rgba()-based fill values\n * we work around it by \"moving\" alpha channel into opacity attribute and setting fill's alpha to 1\n * @param prop\n * @param value\n * @param {boolean} inlineStyle The default is inline style, the separator used is \":\", The other is \"=\"\n * @returns\n */\nexport const colorPropToSVG = (\n prop: string,\n value?: any,\n inlineStyle = true,\n) => {\n let colorValue;\n let opacityValue;\n if (!value) {\n colorValue = 'none';\n } else if (value.toLive) {\n colorValue = `url(#SVGID_${value.id})`;\n } else {\n const color = new Color(value),\n opacity = color.getAlpha();\n\n colorValue = color.toRgb();\n if (opacity !== 1) {\n opacityValue = opacity.toString();\n }\n }\n if (inlineStyle) {\n return `${prop}: ${colorValue}; ${\n opacityValue ? `${prop}-opacity: ${opacityValue}; ` : ''\n }`;\n } else {\n return `${prop}=\"${colorValue}\" ${\n opacityValue ? `${prop}-opacity=\"${opacityValue}\" ` : ''\n }`;\n }\n};\n\nexport const createSVGRect = (\n color: string,\n { left, top, width, height }: TBBox,\n precision = config.NUM_FRACTION_DIGITS,\n) => {\n const svgColor = colorPropToSVG(FILL, color, false);\n const [x, y, w, h] = [left, top, width, height].map((value) =>\n toFixed(value, precision),\n );\n return ``;\n};\n","import type { FabricObject } from '../shapes/Object/Object';\nimport type { TFiller } from '../typedefs';\nimport type { FabricText } from '../shapes/Text/Text';\nimport type { Pattern } from '../Pattern';\nimport type { Path } from '../shapes/Path';\nimport type { ActiveSelection } from '../shapes/ActiveSelection';\n\nexport const isFiller = (\n filler: TFiller | string | null,\n): filler is TFiller => {\n return !!filler && (filler as TFiller).toLive !== undefined;\n};\n\nexport const isSerializableFiller = (\n filler: TFiller | string | null,\n): filler is TFiller => {\n return !!filler && typeof (filler as TFiller).toObject === 'function';\n};\n\nexport const isPattern = (filler: TFiller): filler is Pattern => {\n return (\n !!filler && (filler as Pattern).offsetX !== undefined && 'source' in filler\n );\n};\n\nexport const isTextObject = (\n fabricObject?: FabricObject,\n): fabricObject is FabricText => {\n return (\n !!fabricObject &&\n typeof (fabricObject as FabricText)._renderText === 'function'\n );\n};\n\nexport const isPath = (fabricObject?: FabricObject): fabricObject is Path => {\n // we could use instanceof but that would mean pulling in Text code for a simple check\n // @todo discuss what to do and how to do\n return (\n !!fabricObject &&\n typeof (fabricObject as Path)._renderPathCommands === 'function'\n );\n};\n\nexport const isActiveSelection = (\n fabricObject?: FabricObject,\n): fabricObject is ActiveSelection =>\n !!fabricObject && 'multiSelectionStacking' in fabricObject;\n","/**\n * Returns element scroll offsets\n * @param {HTMLElement} element Element to operate on\n * @return {Object} Object with left/top values\n */\nexport function getScrollLeftTop(element: HTMLElement | null) {\n const doc = element && getDocumentFromElement(element);\n let left = 0,\n top = 0;\n if (!element || !doc) {\n return { left, top };\n }\n let elementLoop: HTMLElement | Document | ShadowRoot = element;\n const docElement = doc.documentElement,\n body = doc.body || {\n scrollLeft: 0,\n scrollTop: 0,\n };\n // While loop checks (and then sets element to) .parentNode OR .host\n // to account for ShadowDOM. We still want to traverse up out of ShadowDOM,\n // but the .parentNode of a root ShadowDOM node will always be null, instead\n // it should be accessed through .host. See http://stackoverflow.com/a/24765528/4383938\n while (\n elementLoop &&\n (elementLoop.parentNode || (elementLoop as unknown as ShadowRoot).host)\n ) {\n elementLoop = (elementLoop.parentNode ||\n (elementLoop as unknown as ShadowRoot).host) as\n | HTMLElement\n | Document\n | ShadowRoot;\n if (elementLoop === doc) {\n left = body.scrollLeft || docElement.scrollLeft || 0;\n top = body.scrollTop || docElement.scrollTop || 0;\n } else {\n left += (elementLoop as HTMLElement).scrollLeft || 0;\n top += (elementLoop as HTMLElement).scrollTop || 0;\n }\n\n if (\n elementLoop.nodeType === 1 &&\n (elementLoop as HTMLElement).style.position === 'fixed'\n ) {\n break;\n }\n }\n\n return { left, top };\n}\n\nexport const getDocumentFromElement = (el: HTMLElement) =>\n el.ownerDocument || null;\n\nexport const getWindowFromElement = (el: HTMLElement) =>\n el.ownerDocument?.defaultView || null;\n","import { NONE } from '../../constants';\nimport type { TSize } from '../../typedefs';\nimport {\n getDocumentFromElement,\n getWindowFromElement,\n getScrollLeftTop,\n} from '../../util/dom_misc';\n\nexport const setCanvasDimensions = (\n el: HTMLCanvasElement,\n ctx: CanvasRenderingContext2D,\n { width, height }: 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\nexport type CSSDimensions = {\n width: number | string;\n height: number | string;\n};\n\nexport const setCSSDimensions = (\n el: HTMLElement,\n { width, height }: Partial,\n) => {\n width && (el.style.width = typeof width === 'number' ? `${width}px` : width);\n height &&\n (el.style.height = typeof height === 'number' ? `${height}px` : height);\n};\n\n/**\n * Returns offset for a given element\n * @param {HTMLElement} element Element to get offset for\n * @return {Object} Object with \"left\" and \"top\" properties\n */\nexport function getElementOffset(element: HTMLElement) {\n const doc = element && getDocumentFromElement(element),\n offset = { left: 0, top: 0 };\n\n if (!doc) {\n return offset;\n }\n const elemStyle: CSSStyleDeclaration =\n getWindowFromElement(element)?.getComputedStyle(element, null) ||\n ({} as CSSStyleDeclaration);\n offset.left += parseInt(elemStyle.borderLeftWidth, 10) || 0;\n offset.top += parseInt(elemStyle.borderTopWidth, 10) || 0;\n offset.left += parseInt(elemStyle.paddingLeft, 10) || 0;\n offset.top += parseInt(elemStyle.paddingTop, 10) || 0;\n\n let box = { left: 0, top: 0 };\n\n const docElem = doc.documentElement;\n if (typeof element.getBoundingClientRect !== 'undefined') {\n box = element.getBoundingClientRect();\n }\n\n const scrollLeftTop = getScrollLeftTop(element);\n\n return {\n left:\n box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,\n top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top,\n };\n}\n\n/**\n * Makes element unselectable\n * @param {HTMLElement} element Element to make unselectable\n * @return {HTMLElement} Element that was passed in\n */\nexport function makeElementUnselectable(element: HTMLElement) {\n if (typeof element.onselectstart !== 'undefined') {\n element.onselectstart = () => false;\n }\n element.style.userSelect = NONE;\n return element;\n}\n","import { getEnv, getFabricDocument } from '../../env';\nimport type { TSize } from '../../typedefs';\nimport type { CSSDimensions } from './util';\nimport { setCSSDimensions, getElementOffset } from './util';\nimport { createCanvasElement, isHTMLCanvas } from '../../util/misc/dom';\nimport { setCanvasDimensions } from './util';\nimport { FabricError } from '../../util/internals/console';\n\nexport type CanvasItem = {\n el: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n};\n\nexport class StaticCanvasDOMManager {\n /**\n * Keeps a copy of the canvas style before setting retina scaling and other potions\n * in order to return it to original state on dispose\n * @type string\n */\n private _originalCanvasStyle?: string;\n\n lower: CanvasItem;\n\n constructor(arg0?: string | HTMLCanvasElement) {\n const el = this.createLowerCanvas(arg0);\n this.lower = { el, ctx: el.getContext('2d')! };\n }\n\n protected createLowerCanvas(arg0?: HTMLCanvasElement | string) {\n // canvasEl === 'HTMLCanvasElement' does not work on jsdom/node\n const el = isHTMLCanvas(arg0)\n ? arg0\n : (arg0 &&\n (getFabricDocument().getElementById(arg0) as HTMLCanvasElement)) ||\n createCanvasElement();\n if (el.hasAttribute('data-fabric')) {\n throw new FabricError(\n 'Trying to initialize a canvas that has already been initialized. Did you forget to dispose the canvas?',\n );\n }\n this._originalCanvasStyle = el.style.cssText;\n el.setAttribute('data-fabric', 'main');\n el.classList.add('lower-canvas');\n return el;\n }\n\n cleanupDOM({ width, height }: TSize) {\n const { el } = this.lower;\n // restore canvas style and attributes\n el.classList.remove('lower-canvas');\n el.removeAttribute('data-fabric');\n // restore canvas size to original size in case retina scaling was applied\n el.setAttribute('width', `${width}`);\n el.setAttribute('height', `${height}`);\n el.style.cssText = this._originalCanvasStyle || '';\n this._originalCanvasStyle = undefined;\n }\n\n setDimensions(size: TSize, retinaScaling: number) {\n const { el, ctx } = this.lower;\n setCanvasDimensions(el, ctx, size, retinaScaling);\n }\n\n setCSSDimensions(size: Partial) {\n setCSSDimensions(this.lower.el, size);\n }\n\n /**\n * Calculates canvas element offset relative to the document\n */\n calcOffset() {\n return getElementOffset(this.lower.el);\n }\n\n dispose() {\n getEnv().dispose(this.lower.el);\n // @ts-expect-error disposing\n delete this.lower;\n }\n}\n","import { iMatrix } from '../constants';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TFiller, TMat2D, TOptions } from '../typedefs';\n\ninterface CanvasDrawableOptions {\n /**\n * if set to false background image is not affected by viewport transform\n * @since 1.6.3\n * @type Boolean\n * @todo we should really find a different way to do this\n * @default\n */\n backgroundVpt: boolean;\n\n /**\n * Background color of canvas instance.\n * @type {(String|TFiller)}\n * @default\n */\n backgroundColor: TFiller | string;\n\n /**\n * Background image of canvas instance.\n * since 2.4.0 image caching is active, please when putting an image as background, add to the\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n * vale. As an alternative you can disable image objectCaching\n * @type FabricObject\n * @default\n */\n backgroundImage?: FabricObject;\n\n /**\n * if set to false overlay image is not affected by viewport transform\n * @since 1.6.3\n * @type Boolean\n * @todo we should really find a different way to do this\n * @default\n */\n overlayVpt: boolean;\n\n /**\n * Overlay color of canvas instance.\n * @since 1.3.9\n * @type {(String|TFiller)}\n * @default\n */\n overlayColor: TFiller | string;\n\n /**\n * Overlay image of canvas instance.\n * since 2.4.0 image caching is active, please when putting an image as overlay, add to the\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n * vale. As an alternative you can disable image objectCaching\n * @type FabricObject\n * @default\n */\n overlayImage?: FabricObject;\n}\n\ninterface CanvasRenderingOptions {\n /**\n * Indicates whether {@link StaticCanvas#add}, {@link StaticCanvas#insertAt} and {@link StaticCanvas#remove},\n * {@link StaticCanvas#moveTo}, {@link StaticCanvas#clear} and many more, should also re-render canvas.\n * Disabling this option will not give a performance boost when adding/removing a lot of objects to/from canvas at once\n * since the renders are queued and executed one per frame.\n * Disabling is suggested anyway and managing the renders of the app manually is not a big effort ( canvas.requestRenderAll() )\n * Left default to true to do not break documentation and old app, fiddles.\n * @type Boolean\n * @default\n */\n renderOnAddRemove: boolean;\n\n /**\n * Based on vptCoords and object.aCoords, skip rendering of objects that\n * are not included in current viewport.\n * May greatly help in applications with crowded canvas and use of zoom/pan\n * If One of the corner of the bounding box of the object is on the canvas\n * the objects get rendered.\n * @type Boolean\n * @default true\n */\n skipOffscreen: boolean;\n\n /**\n * When true, canvas is scaled by devicePixelRatio for better rendering on retina screens\n * @type Boolean\n * @default\n */\n enableRetinaScaling: boolean;\n\n /**\n * Indicates whether this canvas will use image smoothing, this is on by default in browsers\n * @type Boolean\n * @default\n */\n imageSmoothingEnabled: boolean;\n\n /**\n * a fabricObject that, without stroke define a clipping area with their shape. filled in black\n * the clipPath object gets used when the canvas has rendered, and the context is placed in the\n * top left corner of the canvas.\n * clipPath will clip away controls, if you do not want this to happen use controlsAboveOverlay = true\n * @type FabricObject\n */\n clipPath?: FabricObject;\n}\n\nexport interface CanvasExportOptions {\n /**\n * Indicates whether toObject/toDatalessObject should include default values\n * if set to false, takes precedence over the object value.\n * @type Boolean\n * @default\n */\n includeDefaultValues: boolean;\n\n /**\n * When true, getSvgTransform() will apply the StaticCanvas.viewportTransform to the SVG transformation. When true,\n * a zoomed canvas will then produce zoomed SVG output.\n * @type Boolean\n * @default\n */\n svgViewportTransformation: boolean;\n}\n\nexport interface StaticCanvasOptions\n extends CanvasDrawableOptions,\n CanvasRenderingOptions,\n CanvasExportOptions {\n /**\n * Width in virtual/logical pixels of the canvas.\n * The canvas can be larger than width if retina scaling is active\n * @type number\n */\n width: number;\n\n /**\n * Height in virtual/logical pixels of the canvas.\n * The canvas can be taller than width if retina scaling is active\n * @type height\n */\n height: number;\n\n /**\n * Indicates whether object controls (borders/controls) are rendered above overlay image\n * @type Boolean\n * @default\n *\n * @todo move to Canvas\n */\n controlsAboveOverlay: boolean;\n\n /**\n * Indicates whether the browser can be scrolled when using a touchscreen and dragging on the canvas\n * It gives PRIORITY to DOM scrolling, it doesn't make it always possible.\n * If is true, when using a touch event on the canvas, the canvas will scroll if scroll is possible.\n * If we are in drawing mode or if we are selecting an object the canvas preventDefault and so it won't scroll\n * @type Boolean\n * @default\n *\n * @todo move to Canvas\n */\n allowTouchScrolling: boolean;\n\n /**\n * The transformation (a Canvas 2D API transform matrix) which focuses the viewport\n * @type Array\n * @example Default transform\n * canvas.viewportTransform = [1, 0, 0, 1, 0, 0];\n * @example Scale by 70% and translate toward bottom-right by 50, without skewing\n * canvas.viewportTransform = [0.7, 0, 0, 0.7, 50, 50];\n * @default\n */\n viewportTransform: TMat2D;\n}\n\nexport const staticCanvasDefaults: TOptions = {\n backgroundVpt: true,\n backgroundColor: '',\n overlayVpt: true,\n overlayColor: '',\n\n includeDefaultValues: true,\n svgViewportTransformation: true,\n\n renderOnAddRemove: true,\n skipOffscreen: true,\n enableRetinaScaling: true,\n imageSmoothingEnabled: true,\n\n /**\n * @todo move to Canvas\n */\n controlsAboveOverlay: false,\n /**\n * @todo move to Canvas\n */\n allowTouchScrolling: false,\n\n viewportTransform: [...iMatrix],\n};\n","import { config } from '../config';\nimport { CENTER, VERSION } from '../constants';\nimport type { CanvasEvents, StaticCanvasEvents } from '../EventTypeDefs';\nimport type { Gradient } from '../gradient/Gradient';\nimport { createCollectionMixin, isCollection } from '../Collection';\nimport { CommonMethods } from '../CommonMethods';\nimport type { Pattern } from '../Pattern';\nimport { Point } from '../Point';\nimport type { TCachedFabricObject } from '../shapes/Object/Object';\nimport type {\n Abortable,\n Constructor,\n TCornerPoint,\n TDataUrlOptions,\n TFiller,\n TMat2D,\n TSize,\n TSVGReviver,\n TToCanvasElementOptions,\n TValidToObjectMethod,\n TOptions,\n} from '../typedefs';\nimport {\n cancelAnimFrame,\n requestAnimFrame,\n} from '../util/animation/AnimationFrameProvider';\nimport { runningAnimations } from '../util/animation/AnimationRegistry';\nimport { uid } from '../util/internals/uid';\nimport { createCanvasElementFor, toDataURL } from '../util/misc/dom';\nimport { invertTransform, transformPoint } from '../util/misc/matrix';\nimport type { EnlivenObjectOptions } from '../util/misc/objectEnlive';\nimport {\n enlivenObjectEnlivables,\n enlivenObjects,\n} from '../util/misc/objectEnlive';\nimport { pick } from '../util/misc/pick';\nimport { matrixToSVG } from '../util/misc/svgParsing';\nimport { toFixed } from '../util/misc/toFixed';\nimport { isFiller, isPattern, isTextObject } from '../util/typeAssertions';\nimport { StaticCanvasDOMManager } from './DOMManagers/StaticCanvasDOMManager';\nimport type { CSSDimensions } from './DOMManagers/util';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { StaticCanvasOptions } from './StaticCanvasOptions';\nimport { staticCanvasDefaults } from './StaticCanvasOptions';\nimport { log, FabricError } from '../util/internals/console';\nimport { getDevicePixelRatio } from '../env';\n\n/**\n * Having both options in TCanvasSizeOptions set to true transform the call in a calcOffset\n * Better try to restrict with types to avoid confusion.\n */\nexport type TCanvasSizeOptions =\n | {\n backstoreOnly?: true;\n cssOnly?: false;\n }\n | {\n backstoreOnly?: false;\n cssOnly?: true;\n };\n\nexport type TSVGExportOptions = {\n suppressPreamble?: boolean;\n viewBox?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n encoding?: 'UTF-8'; // test Encoding type and see what happens\n width?: string;\n height?: string;\n reviver?: TSVGReviver;\n};\n\n/**\n * Static canvas class\n * @see {@link http://fabricjs.com/static_canvas|StaticCanvas demo}\n * @fires before:render\n * @fires after:render\n * @fires canvas:cleared\n * @fires object:added\n * @fires object:removed\n */\n// TODO: fix `EventSpec` inheritance https://github.com/microsoft/TypeScript/issues/26154#issuecomment-1366616260\nexport class StaticCanvas<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n EventSpec extends StaticCanvasEvents = StaticCanvasEvents,\n >\n extends createCollectionMixin(CommonMethods)\n implements StaticCanvasOptions\n{\n declare width: number;\n declare height: number;\n\n // background\n declare backgroundVpt: boolean;\n declare backgroundColor: TFiller | string;\n declare backgroundImage?: FabricObject;\n // overlay\n declare overlayVpt: boolean;\n declare overlayColor: TFiller | string;\n declare overlayImage?: FabricObject;\n\n declare clipPath?: FabricObject;\n\n declare includeDefaultValues: boolean;\n\n // rendering config\n declare renderOnAddRemove: boolean;\n declare skipOffscreen: boolean;\n declare enableRetinaScaling: boolean;\n declare imageSmoothingEnabled: boolean;\n\n /**\n * @todo move to Canvas\n */\n declare controlsAboveOverlay: boolean;\n\n /**\n * @todo move to Canvas\n */\n declare allowTouchScrolling: boolean;\n\n declare viewportTransform: TMat2D;\n\n /**\n * The viewport bounding box in scene plane coordinates, see {@link calcViewportBoundaries}\n */\n declare vptCoords: TCornerPoint;\n\n /**\n * A reference to the canvas actual HTMLCanvasElement.\n * Can be use to read the raw pixels, but never write or manipulate\n * @type HTMLCanvasElement\n */\n get lowerCanvasEl() {\n return this.elements.lower?.el;\n }\n\n get contextContainer() {\n return this.elements.lower?.ctx;\n }\n\n /**\n * If true the Canvas is in the process or has been disposed/destroyed.\n * No more rendering operation will be executed on this canvas.\n * @type boolean\n */\n declare destroyed?: boolean;\n\n /**\n * Started the process of disposing but not done yet.\n * WIll likely complete the render cycle already scheduled but stopping adding more.\n * @type boolean\n */\n declare disposed?: boolean;\n\n declare _offset: { left: number; top: number };\n protected declare hasLostContext: boolean;\n protected declare nextRenderHandle: number;\n\n declare elements: StaticCanvasDOMManager;\n\n /**\n * When true control drawing is skipped.\n * This boolean is used to avoid toDataURL to export controls.\n * Usage of this boolean to build up other flows and features is not supported\n * @type Boolean\n * @default false\n */\n protected declare skipControlsDrawing: boolean;\n\n static ownDefaults = staticCanvasDefaults;\n\n // reference to\n protected declare __cleanupTask?: {\n (): void;\n kill: (reason?: any) => void;\n };\n\n static getDefaults(): Record {\n return StaticCanvas.ownDefaults;\n }\n\n constructor(\n el?: string | HTMLCanvasElement,\n options: TOptions = {},\n ) {\n super();\n Object.assign(\n this,\n (this.constructor as typeof StaticCanvas).getDefaults(),\n );\n this.set(options);\n this.initElements(el);\n this._setDimensionsImpl({\n width: this.width || this.elements.lower.el.width || 0,\n height: this.height || this.elements.lower.el.height || 0,\n });\n this.skipControlsDrawing = false;\n this.viewportTransform = [...this.viewportTransform];\n this.calcViewportBoundaries();\n }\n\n protected initElements(el?: string | HTMLCanvasElement) {\n this.elements = new StaticCanvasDOMManager(el);\n }\n\n add(...objects: FabricObject[]) {\n const size = super.add(...objects);\n objects.length > 0 && this.renderOnAddRemove && this.requestRenderAll();\n return size;\n }\n\n insertAt(index: number, ...objects: FabricObject[]) {\n const size = super.insertAt(index, ...objects);\n objects.length > 0 && this.renderOnAddRemove && this.requestRenderAll();\n return size;\n }\n\n remove(...objects: FabricObject[]) {\n const removed = super.remove(...objects);\n removed.length > 0 && this.renderOnAddRemove && this.requestRenderAll();\n return removed;\n }\n\n _onObjectAdded(obj: FabricObject) {\n if (obj.canvas && (obj.canvas as StaticCanvas) !== this) {\n log(\n 'warn',\n 'Canvas is trying to add an object that belongs to a different canvas.\\n' +\n 'Resulting to default behavior: removing object from previous canvas and adding to new canvas',\n );\n obj.canvas.remove(obj);\n }\n obj._set('canvas', this);\n obj.setCoords();\n this.fire('object:added', { target: obj });\n obj.fire('added', { target: this });\n }\n\n _onObjectRemoved(obj: FabricObject) {\n obj._set('canvas', undefined);\n this.fire('object:removed', { target: obj });\n obj.fire('removed', { target: this });\n }\n\n _onStackOrderChanged() {\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * @private\n * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\n * @return {Number} retinaScaling if applied, otherwise 1;\n */\n getRetinaScaling() {\n return this.enableRetinaScaling ? getDevicePixelRatio() : 1;\n }\n\n /**\n * Calculates canvas element offset relative to the document\n * This method is also attached as \"resize\" event handler of window\n */\n calcOffset() {\n return (this._offset = this.elements.calcOffset());\n }\n\n /**\n * Returns canvas width (in px)\n * @return {Number}\n */\n getWidth(): number {\n return this.width;\n }\n\n /**\n * Returns canvas height (in px)\n * @return {Number}\n */\n getHeight(): number {\n return this.height;\n }\n\n /**\n * Sets width of this canvas instance\n * @param {Number|String} value Value to set width to\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @deprecated will be removed in 7.0\n */\n setWidth(\n value: TSize['width'],\n options?: { backstoreOnly?: true; cssOnly?: false },\n ): void;\n setWidth(\n value: CSSDimensions['width'],\n options?: { cssOnly?: true; backstoreOnly?: false },\n ): void;\n setWidth(value: number, options?: never) {\n return this.setDimensions({ width: value }, options);\n }\n\n /**s\n * Sets height of this canvas instance\n * @param {Number|String} value Value to set height to\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @deprecated will be removed in 7.0\n */\n setHeight(\n value: TSize['height'],\n options?: { backstoreOnly?: true; cssOnly?: false },\n ): void;\n setHeight(\n value: CSSDimensions['height'],\n options?: { cssOnly?: true; backstoreOnly?: false },\n ): void;\n setHeight(value: CSSDimensions['height'], options?: never) {\n return this.setDimensions({ height: value }, options);\n }\n\n /**\n * Internal use only\n * @protected\n */\n protected _setDimensionsImpl(\n dimensions: Partial,\n { cssOnly = false, backstoreOnly = false }: TCanvasSizeOptions = {},\n ) {\n if (!cssOnly) {\n const size = {\n width: this.width,\n height: this.height,\n ...(dimensions as Partial),\n };\n this.elements.setDimensions(size, this.getRetinaScaling());\n this.hasLostContext = true;\n this.width = size.width;\n this.height = size.height;\n }\n if (!backstoreOnly) {\n this.elements.setCSSDimensions(dimensions);\n }\n\n this.calcOffset();\n }\n\n /**\n * Sets dimensions (width, height) of this canvas instance. when options.cssOnly flag active you should also supply the unit of measure (px/%/em)\n * @param {Object} dimensions Object with width/height properties\n * @param {Number|String} [dimensions.width] Width of canvas element\n * @param {Number|String} [dimensions.height] Height of canvas element\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n */\n setDimensions(\n dimensions: Partial,\n options?: { cssOnly?: true; backstoreOnly?: false },\n ): void;\n setDimensions(\n dimensions: Partial,\n options?: { backstoreOnly?: true; cssOnly?: false },\n ): void;\n setDimensions(dimensions: Partial, options?: never): void;\n setDimensions(\n dimensions: Partial,\n options?: TCanvasSizeOptions,\n ) {\n this._setDimensionsImpl(dimensions, options);\n if (!options || !options.cssOnly) {\n this.requestRenderAll();\n }\n }\n\n /**\n * Returns canvas zoom level\n * @return {Number}\n */\n getZoom() {\n return this.viewportTransform[0];\n }\n\n /**\n * Sets viewport transformation of this canvas instance\n * @param {Array} vpt a Canvas 2D API transform matrix\n */\n setViewportTransform(vpt: TMat2D) {\n this.viewportTransform = vpt;\n this.calcViewportBoundaries();\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * Sets zoom level of this canvas instance, the zoom centered around point\n * meaning that following zoom to point with the same point will have the visual\n * effect of the zoom originating from that point. The point won't move.\n * It has nothing to do with canvas center or visual center of the viewport.\n * @param {Point} point to zoom with respect to\n * @param {Number} value to set zoom to, less than 1 zooms out\n */\n zoomToPoint(point: Point, value: number) {\n // TODO: just change the scale, preserve other transformations\n const before = point,\n vpt: TMat2D = [...this.viewportTransform];\n const newPoint = transformPoint(point, invertTransform(vpt));\n vpt[0] = value;\n vpt[3] = value;\n const after = transformPoint(newPoint, vpt);\n vpt[4] += before.x - after.x;\n vpt[5] += before.y - after.y;\n this.setViewportTransform(vpt);\n }\n\n /**\n * Sets zoom level of this canvas instance\n * @param {Number} value to set zoom to, less than 1 zooms out\n */\n setZoom(value: number) {\n this.zoomToPoint(new Point(0, 0), value);\n }\n\n /**\n * Pan viewport so as to place point at top left corner of canvas\n * @param {Point} point to move to\n */\n absolutePan(point: Point) {\n const vpt: TMat2D = [...this.viewportTransform];\n vpt[4] = -point.x;\n vpt[5] = -point.y;\n return this.setViewportTransform(vpt);\n }\n\n /**\n * Pans viewpoint relatively\n * @param {Point} point (position vector) to move by\n */\n relativePan(point: Point) {\n return this.absolutePan(\n new Point(\n -point.x - this.viewportTransform[4],\n -point.y - this.viewportTransform[5],\n ),\n );\n }\n\n /**\n * Returns <canvas> element corresponding to this instance\n * @return {HTMLCanvasElement}\n */\n getElement(): HTMLCanvasElement {\n return this.elements.lower.el;\n }\n\n /**\n * Clears specified context of canvas element\n * @param {CanvasRenderingContext2D} ctx Context to clear\n */\n clearContext(ctx: CanvasRenderingContext2D) {\n ctx.clearRect(0, 0, this.width, this.height);\n }\n\n /**\n * Returns context of canvas where objects are drawn\n * @return {CanvasRenderingContext2D}\n */\n getContext(): CanvasRenderingContext2D {\n return this.elements.lower.ctx;\n }\n\n /**\n * Clears all contexts (background, main, top) of an instance\n */\n clear() {\n this.remove(...this.getObjects());\n this.backgroundImage = undefined;\n this.overlayImage = undefined;\n this.backgroundColor = '';\n this.overlayColor = '';\n this.clearContext(this.getContext());\n this.fire('canvas:cleared');\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * Renders the canvas\n */\n renderAll() {\n this.cancelRequestedRender();\n if (this.destroyed) {\n return;\n }\n this.renderCanvas(this.getContext(), this._objects);\n }\n\n /**\n * Function created to be instance bound at initialization\n * used in requestAnimationFrame rendering\n * Let the fabricJS call it. If you call it manually you could have more\n * animationFrame stacking on to of each other\n * for an imperative rendering, use canvas.renderAll\n * @private\n */\n renderAndReset() {\n this.nextRenderHandle = 0;\n this.renderAll();\n }\n\n /**\n * Append a renderAll request to next animation frame.\n * unless one is already in progress, in that case nothing is done\n * a boolean flag will avoid appending more.\n */\n requestRenderAll() {\n if (!this.nextRenderHandle && !this.disposed && !this.destroyed) {\n this.nextRenderHandle = requestAnimFrame(() => this.renderAndReset());\n }\n }\n\n /**\n * Calculate the position of the 4 corner of canvas with current viewportTransform.\n * helps to determinate when an object is in the current rendering viewport\n */\n calcViewportBoundaries(): TCornerPoint {\n const width = this.width,\n height = this.height,\n iVpt = invertTransform(this.viewportTransform),\n a = transformPoint({ x: 0, y: 0 }, iVpt),\n b = transformPoint({ x: width, y: height }, iVpt),\n // we don't support vpt flipping\n // but the code is robust enough to mostly work with flipping\n min = a.min(b),\n max = a.max(b);\n return (this.vptCoords = {\n tl: min,\n tr: new Point(max.x, min.y),\n bl: new Point(min.x, max.y),\n br: max,\n });\n }\n\n cancelRequestedRender() {\n if (this.nextRenderHandle) {\n cancelAnimFrame(this.nextRenderHandle);\n this.nextRenderHandle = 0;\n }\n }\n\n drawControls(_ctx: CanvasRenderingContext2D) {\n // Static canvas has no controls\n }\n\n /**\n * Renders background, objects, overlay and controls.\n * @param {CanvasRenderingContext2D} ctx\n * @param {Array} objects to render\n */\n renderCanvas(ctx: CanvasRenderingContext2D, objects: FabricObject[]) {\n if (this.destroyed) {\n return;\n }\n\n const v = this.viewportTransform,\n path = this.clipPath;\n this.calcViewportBoundaries();\n this.clearContext(ctx);\n ctx.imageSmoothingEnabled = this.imageSmoothingEnabled;\n // @ts-expect-error node-canvas stuff\n ctx.patternQuality = 'best';\n this.fire('before:render', { ctx });\n this._renderBackground(ctx);\n\n ctx.save();\n //apply viewport transform once for all rendering process\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n this._renderObjects(ctx, objects);\n ctx.restore();\n if (!this.controlsAboveOverlay && !this.skipControlsDrawing) {\n this.drawControls(ctx);\n }\n if (path) {\n path._set('canvas', this);\n // needed to setup a couple of variables\n // todo migrate to the newer one\n path.shouldCache();\n path._transformDone = true;\n (path as TCachedFabricObject).renderCache({ forClipping: true });\n this.drawClipPathOnCanvas(ctx, path as TCachedFabricObject);\n }\n this._renderOverlay(ctx);\n if (this.controlsAboveOverlay && !this.skipControlsDrawing) {\n this.drawControls(ctx);\n }\n this.fire('after:render', { ctx });\n\n if (this.__cleanupTask) {\n this.__cleanupTask();\n this.__cleanupTask = undefined;\n }\n }\n\n /**\n * Paint the cached clipPath on the lowerCanvasEl\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawClipPathOnCanvas(\n ctx: CanvasRenderingContext2D,\n clipPath: TCachedFabricObject,\n ) {\n const v = this.viewportTransform;\n ctx.save();\n ctx.transform(...v);\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4;\n ctx.globalCompositeOperation = 'destination-in';\n clipPath.transform(ctx);\n ctx.scale(1 / clipPath.zoomX, 1 / clipPath.zoomY);\n ctx.drawImage(\n clipPath._cacheCanvas,\n -clipPath.cacheTranslationX,\n -clipPath.cacheTranslationY,\n );\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Array} objects to render\n */\n _renderObjects(ctx: CanvasRenderingContext2D, objects: FabricObject[]) {\n for (let i = 0, len = objects.length; i < len; ++i) {\n objects[i] && objects[i].render(ctx);\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {string} property 'background' or 'overlay'\n */\n _renderBackgroundOrOverlay(\n ctx: CanvasRenderingContext2D,\n property: 'background' | 'overlay',\n ) {\n const fill = this[`${property}Color`],\n object = this[`${property}Image`],\n v = this.viewportTransform,\n needsVpt = this[`${property}Vpt`];\n if (!fill && !object) {\n return;\n }\n const isAFiller = isFiller(fill);\n if (fill) {\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.width, 0);\n ctx.lineTo(this.width, this.height);\n ctx.lineTo(0, this.height);\n ctx.closePath();\n ctx.fillStyle = isAFiller ? fill.toLive(ctx /* this */)! : fill;\n if (needsVpt) {\n ctx.transform(...v);\n }\n if (isAFiller) {\n ctx.transform(1, 0, 0, 1, fill.offsetX || 0, fill.offsetY || 0);\n const m = ((fill as Gradient<'linear'>).gradientTransform ||\n (fill as Pattern).patternTransform) as TMat2D;\n m && ctx.transform(...m);\n }\n ctx.fill();\n ctx.restore();\n }\n if (object) {\n ctx.save();\n const { skipOffscreen } = this;\n // if the object doesn't move with the viewport,\n // the offscreen concept does not apply;\n this.skipOffscreen = needsVpt;\n if (needsVpt) {\n ctx.transform(...v);\n }\n object.render(ctx);\n this.skipOffscreen = skipOffscreen;\n ctx.restore();\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground(ctx: CanvasRenderingContext2D) {\n this._renderBackgroundOrOverlay(ctx, 'background');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderOverlay(ctx: CanvasRenderingContext2D) {\n this._renderBackgroundOrOverlay(ctx, 'overlay');\n }\n\n /**\n * Returns coordinates of a center of canvas.\n * Returned value is an object with top and left properties\n * @return {Object} object with \"top\" and \"left\" number values\n * @deprecated migrate to `getCenterPoint`\n */\n getCenter() {\n return {\n top: this.height / 2,\n left: this.width / 2,\n };\n }\n\n /**\n * Returns coordinates of a center of canvas.\n * @return {Point}\n */\n getCenterPoint() {\n return new Point(this.width / 2, this.height / 2);\n }\n\n /**\n * Centers object horizontally in the canvas\n */\n centerObjectH(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(this.getCenterPoint().x, object.getCenterPoint().y),\n );\n }\n\n /**\n * Centers object vertically in the canvas\n * @param {FabricObject} object Object to center vertically\n */\n centerObjectV(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(object.getCenterPoint().x, this.getCenterPoint().y),\n );\n }\n\n /**\n * Centers object vertically and horizontally in the canvas\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n centerObject(object: FabricObject) {\n return this._centerObject(object, this.getCenterPoint());\n }\n\n /**\n * Centers object vertically and horizontally in the viewport\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n viewportCenterObject(object: FabricObject) {\n return this._centerObject(object, this.getVpCenter());\n }\n\n /**\n * Centers object horizontally in the viewport, object.top is unchanged\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n viewportCenterObjectH(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(this.getVpCenter().x, object.getCenterPoint().y),\n );\n }\n\n /**\n * Centers object Vertically in the viewport, object.top is unchanged\n * @param {FabricObject} object Object to center vertically and horizontally\n */\n viewportCenterObjectV(object: FabricObject) {\n return this._centerObject(\n object,\n new Point(object.getCenterPoint().x, this.getVpCenter().y),\n );\n }\n\n /**\n * Calculate the point in canvas that correspond to the center of actual viewport.\n * @return {Point} vpCenter, viewport center\n */\n getVpCenter(): Point {\n return transformPoint(\n this.getCenterPoint(),\n invertTransform(this.viewportTransform),\n );\n }\n\n /**\n * @private\n * @param {FabricObject} object Object to center\n * @param {Point} center Center point\n */\n _centerObject(object: FabricObject, center: Point) {\n object.setXY(center, CENTER, CENTER);\n object.setCoords();\n this.renderOnAddRemove && this.requestRenderAll();\n }\n\n /**\n * Returns dataless JSON representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {String} json string\n */\n toDatalessJSON(propertiesToInclude?: string[]) {\n return this.toDatalessObject(propertiesToInclude);\n }\n\n /**\n * Returns object representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject(propertiesToInclude?: string[]) {\n return this._toObjectMethod('toObject', propertiesToInclude);\n }\n\n /**\n * Returns Object representation of canvas\n * this alias is provided because if you call JSON.stringify on an instance,\n * the toJSON object will be invoked if it exists.\n * Having a toJSON method means you can do JSON.stringify(myCanvas)\n * @return {Object} JSON compatible object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n * @see {@link http://jsfiddle.net/fabricjs/pec86/|jsFiddle demo}\n * @example JSON without additional properties\n * var json = canvas.toJSON();\n * @example JSON with additional properties included\n * var json = canvas.toJSON(['lockMovementX', 'lockMovementY', 'lockRotation', 'lockScalingX', 'lockScalingY']);\n * @example JSON without default values\n * var json = canvas.toJSON();\n */\n toJSON() {\n return this.toObject();\n }\n\n /**\n * Returns dataless object representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject(propertiesToInclude?: string[]) {\n return this._toObjectMethod('toDatalessObject', propertiesToInclude);\n }\n\n /**\n * @private\n */\n _toObjectMethod(\n methodName: TValidToObjectMethod,\n propertiesToInclude?: string[],\n ) {\n const clipPath = this.clipPath;\n const clipPathData =\n clipPath && !clipPath.excludeFromExport\n ? this._toObject(clipPath, methodName, propertiesToInclude)\n : null;\n return {\n version: VERSION,\n ...pick(this, propertiesToInclude as (keyof this)[]),\n objects: this._objects\n .filter((object) => !object.excludeFromExport)\n .map((instance) =>\n this._toObject(instance, methodName, propertiesToInclude),\n ),\n ...this.__serializeBgOverlay(methodName, propertiesToInclude),\n ...(clipPathData ? { clipPath: clipPathData } : null),\n };\n }\n\n /**\n * @private\n */\n protected _toObject(\n instance: FabricObject,\n methodName: TValidToObjectMethod,\n propertiesToInclude?: string[],\n ) {\n let originalValue;\n\n if (!this.includeDefaultValues) {\n originalValue = instance.includeDefaultValues;\n instance.includeDefaultValues = false;\n }\n\n const object = instance[methodName](propertiesToInclude);\n if (!this.includeDefaultValues) {\n instance.includeDefaultValues = !!originalValue;\n }\n return object;\n }\n\n /**\n * @private\n */\n __serializeBgOverlay(\n methodName: TValidToObjectMethod,\n propertiesToInclude?: string[],\n ) {\n const data: any = {},\n bgImage = this.backgroundImage,\n overlayImage = this.overlayImage,\n bgColor = this.backgroundColor,\n overlayColor = this.overlayColor;\n\n if (isFiller(bgColor)) {\n if (!bgColor.excludeFromExport) {\n data.background = bgColor.toObject(propertiesToInclude);\n }\n } else if (bgColor) {\n data.background = bgColor;\n }\n\n if (isFiller(overlayColor)) {\n if (!overlayColor.excludeFromExport) {\n data.overlay = overlayColor.toObject(propertiesToInclude);\n }\n } else if (overlayColor) {\n data.overlay = overlayColor;\n }\n\n if (bgImage && !bgImage.excludeFromExport) {\n data.backgroundImage = this._toObject(\n bgImage,\n methodName,\n propertiesToInclude,\n );\n }\n if (overlayImage && !overlayImage.excludeFromExport) {\n data.overlayImage = this._toObject(\n overlayImage,\n methodName,\n propertiesToInclude,\n );\n }\n\n return data;\n }\n\n /* _TO_SVG_START_ */\n\n declare svgViewportTransformation: boolean;\n\n /**\n * Returns SVG representation of canvas\n * @function\n * @param {Object} [options] Options object for SVG output\n * @param {Boolean} [options.suppressPreamble=false] If true xml tag is not included\n * @param {Object} [options.viewBox] SVG viewbox object\n * @param {Number} [options.viewBox.x] x-coordinate of viewbox\n * @param {Number} [options.viewBox.y] y-coordinate of viewbox\n * @param {Number} [options.viewBox.width] Width of viewbox\n * @param {Number} [options.viewBox.height] Height of viewbox\n * @param {String} [options.encoding=UTF-8] Encoding of SVG output\n * @param {String} [options.width] desired width of svg with or without units\n * @param {String} [options.height] desired height of svg with or without units\n * @param {Function} [reviver] Method for further parsing of svg elements, called after each fabric object converted into svg representation.\n * @return {String} SVG string\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n * @see {@link http://jsfiddle.net/fabricjs/jQ3ZZ/|jsFiddle demo}\n * @example Normal SVG output\n * var svg = canvas.toSVG();\n * @example SVG output without preamble (without <?xml ../>)\n * var svg = canvas.toSVG({suppressPreamble: true});\n * @example SVG output with viewBox attribute\n * var svg = canvas.toSVG({\n * viewBox: {\n * x: 100,\n * y: 100,\n * width: 200,\n * height: 300\n * }\n * });\n * @example SVG output with different encoding (default: UTF-8)\n * var svg = canvas.toSVG({encoding: 'ISO-8859-1'});\n * @example Modify SVG output with reviver function\n * var svg = canvas.toSVG(null, function(svg) {\n * return svg.replace('stroke-dasharray: ; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; ', '');\n * });\n */\n toSVG(options: TSVGExportOptions = {}, reviver?: TSVGReviver) {\n options.reviver = reviver;\n const markup: string[] = [];\n\n this._setSVGPreamble(markup, options);\n this._setSVGHeader(markup, options);\n if (this.clipPath) {\n markup.push(`\\n`);\n }\n this._setSVGBgOverlayColor(markup, 'background');\n this._setSVGBgOverlayImage(markup, 'backgroundImage', reviver);\n this._setSVGObjects(markup, reviver);\n if (this.clipPath) {\n markup.push('\\n');\n }\n this._setSVGBgOverlayColor(markup, 'overlay');\n this._setSVGBgOverlayImage(markup, 'overlayImage', reviver);\n\n markup.push('');\n\n return markup.join('');\n }\n\n /**\n * @private\n */\n _setSVGPreamble(markup: string[], options: TSVGExportOptions): void {\n if (options.suppressPreamble) {\n return;\n }\n markup.push(\n '\\n',\n '\\n',\n );\n }\n\n /**\n * @private\n */\n _setSVGHeader(markup: string[], options: TSVGExportOptions): void {\n const width = options.width || `${this.width}`,\n height = options.height || `${this.height}`,\n NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS,\n optViewBox = options.viewBox;\n let viewBox: string;\n if (optViewBox) {\n viewBox = `viewBox=\"${optViewBox.x} ${optViewBox.y} ${optViewBox.width} ${optViewBox.height}\" `;\n } else if (this.svgViewportTransformation) {\n const vpt = this.viewportTransform;\n viewBox = `viewBox=\"${toFixed(\n -vpt[4] / vpt[0],\n NUM_FRACTION_DIGITS,\n )} ${toFixed(-vpt[5] / vpt[3], NUM_FRACTION_DIGITS)} ${toFixed(\n this.width / vpt[0],\n NUM_FRACTION_DIGITS,\n )} ${toFixed(this.height / vpt[3], NUM_FRACTION_DIGITS)}\" `;\n } else {\n viewBox = `viewBox=\"0 0 ${this.width} ${this.height}\" `;\n }\n\n markup.push(\n '\\n',\n 'Created with Fabric.js ',\n VERSION,\n '\\n',\n '\\n',\n this.createSVGFontFacesMarkup(),\n this.createSVGRefElementsMarkup(),\n this.createSVGClipPathMarkup(options),\n '\\n',\n );\n }\n\n createSVGClipPathMarkup(options: TSVGExportOptions): string {\n const clipPath = this.clipPath;\n if (clipPath) {\n clipPath.clipPathId = `CLIPPATH_${uid()}`;\n return `\\n${clipPath.toClipPathSVG(\n options.reviver,\n )}\\n`;\n }\n return '';\n }\n\n /**\n * Creates markup containing SVG referenced elements like patterns, gradients etc.\n * @return {String}\n */\n createSVGRefElementsMarkup(): string {\n return (['background', 'overlay'] as const)\n .map((prop) => {\n const fill = this[`${prop}Color`];\n if (isFiller(fill)) {\n const shouldTransform = this[`${prop}Vpt`],\n vpt = this.viewportTransform,\n object = {\n // otherwise circular dependency\n isType: () => false,\n width: this.width / (shouldTransform ? vpt[0] : 1),\n height: this.height / (shouldTransform ? vpt[3] : 1),\n };\n return fill.toSVG(object as FabricObject, {\n additionalTransform: shouldTransform ? matrixToSVG(vpt) : '',\n });\n }\n })\n .join('');\n }\n\n /**\n * Creates markup containing SVG font faces,\n * font URLs for font faces must be collected by developers\n * and are not extracted from the DOM by fabricjs\n * @param {Array} objects Array of fabric objects\n * @return {String}\n */\n createSVGFontFacesMarkup(): string {\n const objects: FabricObject[] = [],\n fontList: Record = {},\n fontPaths = config.fontPaths;\n\n this._objects.forEach(function add(object) {\n objects.push(object);\n if (isCollection(object)) {\n object._objects.forEach(add);\n }\n });\n\n objects.forEach((obj) => {\n if (!isTextObject(obj)) {\n return;\n }\n const { styles, fontFamily } = obj;\n if (fontList[fontFamily] || !fontPaths[fontFamily]) {\n return;\n }\n fontList[fontFamily] = true;\n if (!styles) {\n return;\n }\n Object.values(styles).forEach((styleRow) => {\n Object.values(styleRow).forEach(({ fontFamily = '' }) => {\n if (!fontList[fontFamily] && fontPaths[fontFamily]) {\n fontList[fontFamily] = true;\n }\n });\n });\n });\n\n const fontListMarkup = Object.keys(fontList)\n .map(\n (fontFamily) =>\n `\\t\\t@font-face {\\n\\t\\t\\tfont-family: '${fontFamily}';\\n\\t\\t\\tsrc: url('${fontPaths[fontFamily]}');\\n\\t\\t}\\n`,\n )\n .join('');\n\n if (fontListMarkup) {\n return `\\t\\n`;\n }\n return '';\n }\n\n /**\n * @private\n */\n _setSVGObjects(markup: string[], reviver?: TSVGReviver) {\n this.forEachObject((fabricObject) => {\n if (fabricObject.excludeFromExport) {\n return;\n }\n this._setSVGObject(markup, fabricObject, reviver);\n });\n }\n\n /**\n * This is its own function because the Canvas ( non static ) requires extra code here\n * @private\n */\n _setSVGObject(\n markup: string[],\n instance: FabricObject,\n reviver?: TSVGReviver,\n ) {\n markup.push(instance.toSVG(reviver));\n }\n\n /**\n * @private\n */\n _setSVGBgOverlayImage(\n markup: string[],\n property: 'overlayImage' | 'backgroundImage',\n reviver?: TSVGReviver,\n ) {\n const bgOrOverlay = this[property];\n if (bgOrOverlay && !bgOrOverlay.excludeFromExport && bgOrOverlay.toSVG) {\n markup.push(bgOrOverlay.toSVG(reviver));\n }\n }\n\n /**\n * @TODO this seems to handle patterns but fail at gradients.\n * @private\n */\n _setSVGBgOverlayColor(markup: string[], property: 'background' | 'overlay') {\n const filler = this[`${property}Color`];\n if (!filler) {\n return;\n }\n if (isFiller(filler)) {\n const repeat = (filler as Pattern).repeat || '',\n finalWidth = this.width,\n finalHeight = this.height,\n shouldInvert = this[`${property}Vpt`],\n additionalTransform = shouldInvert\n ? matrixToSVG(invertTransform(this.viewportTransform))\n : '';\n markup.push(\n `\\n`,\n );\n } else {\n markup.push(\n '\\n',\n );\n }\n }\n /* _TO_SVG_END_ */\n\n /**\n * Populates canvas with data from the specified JSON.\n * JSON format must conform to the one of {@link fabric.Canvas#toJSON}\n *\n * **IMPORTANT**: It is recommended to abort loading tasks before calling this method to prevent race conditions and unnecessary networking\n *\n * @param {String|Object} json JSON string or object\n * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created.\n * @param {Object} [options] options\n * @param {AbortSignal} [options.signal] see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @return {Promise} instance\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#deserialization}\n * @see {@link http://jsfiddle.net/fabricjs/fmgXt/|jsFiddle demo}\n * @example loadFromJSON\n * canvas.loadFromJSON(json).then((canvas) => canvas.requestRenderAll());\n * @example loadFromJSON with reviver\n * canvas.loadFromJSON(json, function(o, object) {\n * // `o` = json object\n * // `object` = fabric.Object instance\n * // ... do some stuff ...\n * }).then((canvas) => {\n * ... canvas is restored, add your code.\n * });\n *\n */\n loadFromJSON(\n json: string | Record,\n reviver?: EnlivenObjectOptions['reviver'],\n { signal }: Abortable = {},\n ): Promise {\n if (!json) {\n return Promise.reject(new FabricError('`json` is undefined'));\n }\n\n // parse json if it wasn't already\n const serialized = typeof json === 'string' ? JSON.parse(json) : json;\n const {\n objects = [],\n backgroundImage,\n background,\n overlayImage,\n overlay,\n clipPath,\n } = serialized;\n const renderOnAddRemove = this.renderOnAddRemove;\n this.renderOnAddRemove = false;\n\n return Promise.all([\n enlivenObjects(objects, {\n reviver,\n signal,\n }),\n enlivenObjectEnlivables(\n {\n backgroundImage,\n backgroundColor: background,\n overlayImage,\n overlayColor: overlay,\n clipPath,\n },\n { signal },\n ),\n ]).then(([enlived, enlivedMap]) => {\n this.clear();\n this.add(...enlived);\n this.set(serialized);\n this.set(enlivedMap);\n this.renderOnAddRemove = renderOnAddRemove;\n return this;\n });\n }\n\n /**\n * Clones canvas instance\n * @param {string[]} [properties] Array of properties to include in the cloned canvas and children\n */\n clone(properties: string[]) {\n const data = this.toObject(properties);\n const canvas = this.cloneWithoutData();\n return canvas.loadFromJSON(data);\n }\n\n /**\n * Clones canvas instance without cloning existing data.\n * This essentially copies canvas dimensions since loadFromJSON does not affect canvas size.\n */\n cloneWithoutData() {\n const el = createCanvasElementFor(this);\n return new (this.constructor as Constructor)(el);\n }\n\n /**\n * Exports canvas element to a dataurl image. Note that when multiplier is used, cropping is scaled appropriately\n * @param {Object} [options] Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by, to have consistent\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 2.0.0\n * @param {(object: fabric.Object) => boolean} [options.filter] Function to filter objects.\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n * @see {@link https://jsfiddle.net/xsjua1rd/ demo}\n * @example Generate jpeg dataURL with lower quality\n * var dataURL = canvas.toDataURL({\n * format: 'jpeg',\n * quality: 0.8\n * });\n * @example Generate cropped png dataURL (clipping of canvas)\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * left: 100,\n * top: 100,\n * width: 200,\n * height: 200\n * });\n * @example Generate double scaled png dataURL\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * multiplier: 2\n * });\n * @example Generate dataURL with objects that overlap a specified object\n * var myObject;\n * var dataURL = canvas.toDataURL({\n * filter: (object) => object.isContainedWithinObject(myObject) || object.intersectsWithObject(myObject)\n * });\n */\n toDataURL(options = {} as TDataUrlOptions): string {\n const {\n format = 'png',\n quality = 1,\n multiplier = 1,\n enableRetinaScaling = false,\n } = options;\n const finalMultiplier =\n multiplier * (enableRetinaScaling ? this.getRetinaScaling() : 1);\n\n return toDataURL(\n this.toCanvasElement(finalMultiplier, options),\n format,\n quality,\n );\n }\n\n /**\n * Create a new HTMLCanvas element painted with the current canvas content.\n * No need to resize the actual one or repaint it.\n * Will transfer object ownership to a new canvas, paint it, and set everything back.\n * This is an intermediary step used to get to a dataUrl but also it is useful to\n * create quick image copies of a canvas without passing for the dataUrl string\n * @param {Number} [multiplier] a zoom factor.\n * @param {Object} [options] Cropping informations\n * @param {Number} [options.left] Cropping left offset.\n * @param {Number} [options.top] Cropping top offset.\n * @param {Number} [options.width] Cropping width.\n * @param {Number} [options.height] Cropping height.\n * @param {(object: fabric.Object) => boolean} [options.filter] Function to filter objects.\n */\n toCanvasElement(\n multiplier = 1,\n { width, height, left, top, filter } = {} as TToCanvasElementOptions,\n ): HTMLCanvasElement {\n const scaledWidth = (width || this.width) * multiplier,\n scaledHeight = (height || this.height) * multiplier,\n zoom = this.getZoom(),\n originalWidth = this.width,\n originalHeight = this.height,\n originalSkipControlsDrawing = this.skipControlsDrawing,\n newZoom = zoom * multiplier,\n vp = this.viewportTransform,\n translateX = (vp[4] - (left || 0)) * multiplier,\n translateY = (vp[5] - (top || 0)) * multiplier,\n newVp = [newZoom, 0, 0, newZoom, translateX, translateY] as TMat2D,\n originalRetina = this.enableRetinaScaling,\n canvasEl = createCanvasElementFor({\n width: scaledWidth,\n height: scaledHeight,\n }),\n objectsToRender = filter\n ? this._objects.filter((obj) => filter(obj))\n : this._objects;\n this.enableRetinaScaling = false;\n this.viewportTransform = newVp;\n this.width = scaledWidth;\n this.height = scaledHeight;\n this.skipControlsDrawing = true;\n this.calcViewportBoundaries();\n this.renderCanvas(canvasEl.getContext('2d')!, objectsToRender);\n this.viewportTransform = vp;\n this.width = originalWidth;\n this.height = originalHeight;\n this.calcViewportBoundaries();\n this.enableRetinaScaling = originalRetina;\n this.skipControlsDrawing = originalSkipControlsDrawing;\n return canvasEl;\n }\n\n /**\n * Waits until rendering has settled to destroy the canvas\n * @returns {Promise} a promise resolving to `true` once the canvas has been destroyed or to `false` if the canvas has was already destroyed\n * @throws if aborted by a consequent call\n */\n dispose() {\n !this.disposed &&\n this.elements.cleanupDOM({ width: this.width, height: this.height });\n runningAnimations.cancelByCanvas(this);\n this.disposed = true;\n return new Promise((resolve, reject) => {\n const task = () => {\n this.destroy();\n resolve(true);\n };\n task.kill = reject;\n if (this.__cleanupTask) {\n this.__cleanupTask.kill('aborted');\n }\n\n if (this.destroyed) {\n resolve(false);\n } else if (this.nextRenderHandle) {\n this.__cleanupTask = task;\n } else {\n task();\n }\n });\n }\n\n /**\n * Clears the canvas element, disposes objects and frees resources.\n *\n * Invoked as part of the **async** operation of {@link dispose}.\n *\n * **CAUTION**:\n *\n * This method is **UNSAFE**.\n * You may encounter a race condition using it if there's a requested render.\n * Call this method only if you are sure rendering has settled.\n * Consider using {@link dispose} as it is **SAFE**\n *\n * @private\n */\n destroy() {\n this.destroyed = true;\n this.cancelRequestedRender();\n this.forEachObject((object) => object.dispose());\n this._objects = [];\n if (this.backgroundImage) {\n this.backgroundImage.dispose();\n }\n this.backgroundImage = undefined;\n if (this.overlayImage) {\n this.overlayImage.dispose();\n }\n this.overlayImage = undefined;\n this.elements.dispose();\n }\n\n /**\n * Returns a string representation of an instance\n * @return {String} string representation of an instance\n */\n toString() {\n return `#`;\n }\n}\n","import type { TPointerEvent } from '../EventTypeDefs';\nimport { Point } from '../Point';\nimport { getScrollLeftTop } from './dom_misc';\n\nconst touchEvents = ['touchstart', 'touchmove', 'touchend'];\n\nfunction getTouchInfo(event: TouchEvent | MouseEvent): MouseEvent | Touch {\n const touchProp = (event as TouchEvent).changedTouches;\n if (touchProp && touchProp[0]) {\n return touchProp[0];\n }\n return event as MouseEvent;\n}\n\nexport const getPointer = (event: TPointerEvent): Point => {\n const element = event.target as HTMLElement,\n scroll = getScrollLeftTop(element),\n _evt = getTouchInfo(event);\n return new Point(_evt.clientX + scroll.left, _evt.clientY + scroll.top);\n};\n\nexport const isTouchEvent = (event: TPointerEvent) =>\n touchEvents.includes(event.type) ||\n (event as PointerEvent).pointerType === 'touch';\n\nexport const stopEvent = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n};\n","import type { XY } from '../../Point';\nimport type { TBBox } from '../../typedefs';\n\n/**\n * Calculates bounding box (left, top, width, height) from given `points`\n * @param {XY[]} points\n * @return {Object} Object with left, top, width, height properties\n */\nexport const makeBoundingBoxFromPoints = (points: XY[]): TBBox => {\n let left = 0,\n top = 0,\n width = 0,\n height = 0;\n\n for (let i = 0, len = points.length; i < len; i++) {\n const { x, y } = points[i];\n if (x > width || !i) width = x;\n if (x < left || !i) left = x;\n if (y > height || !i) height = y;\n if (y < top || !i) top = y;\n }\n\n return {\n left,\n top,\n width: width - left,\n height: height - top,\n };\n};\n","import { Point } from '../../Point';\nimport { CENTER } from '../../constants';\nimport type { FabricObject } from '../../shapes/Object/Object';\nimport type { TMat2D } from '../../typedefs';\nimport { makeBoundingBoxFromPoints } from './boundingBoxFromPoints';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n qrDecompose,\n} from './matrix';\n\n/**\n * given an object and a transform, apply the inverse transform to the object,\n * this is equivalent to remove from that object that transformation, so that\n * added in a space with the removed transform, the object will be the same as before.\n * Removing from an object a transform that scale by 2 is like scaling it by 1/2.\n * Removing from an object a transform that rotate by 30deg is like rotating by 30deg\n * in the opposite direction.\n * This util is used to add objects inside transformed groups or nested groups.\n * @param {FabricObject} object the object you want to transform\n * @param {TMat2D} transform the destination transform\n */\nexport const removeTransformFromObject = (\n object: FabricObject,\n transform: TMat2D,\n) => {\n const inverted = invertTransform(transform),\n finalTransform = multiplyTransformMatrices(\n inverted,\n object.calcOwnMatrix(),\n );\n applyTransformToObject(object, finalTransform);\n};\n\n/**\n * given an object and a transform, apply the transform to the object.\n * this is equivalent to change the space where the object is drawn.\n * Adding to an object a transform that scale by 2 is like scaling it by 2.\n * This is used when removing an object from an active selection for example.\n * @param {FabricObject} object the object you want to transform\n * @param {Array} transform the destination transform\n */\nexport const addTransformToObject = (object: FabricObject, transform: TMat2D) =>\n applyTransformToObject(\n object,\n multiplyTransformMatrices(transform, object.calcOwnMatrix()),\n );\n\n/**\n * discard an object transform state and apply the one from the matrix.\n * @param {FabricObject} object the object you want to transform\n * @param {Array} transform the destination transform\n */\nexport const applyTransformToObject = (\n object: FabricObject,\n transform: TMat2D,\n) => {\n const { translateX, translateY, scaleX, scaleY, ...otherOptions } =\n qrDecompose(transform),\n center = new Point(translateX, translateY);\n object.flipX = false;\n object.flipY = false;\n Object.assign(object, otherOptions);\n object.set({ scaleX, scaleY });\n object.setPositionByOrigin(center, CENTER, CENTER);\n};\n/**\n * reset an object transform state to neutral. Top and left are not accounted for\n * @param {FabricObject} target object to transform\n */\nexport const resetObjectTransform = (target: FabricObject) => {\n target.scaleX = 1;\n target.scaleY = 1;\n target.skewX = 0;\n target.skewY = 0;\n target.flipX = false;\n target.flipY = false;\n target.rotate(0);\n};\n\n/**\n * Extract Object transform values\n * @param {FabricObject} target object to read from\n * @return {Object} Components of transform\n */\nexport const saveObjectTransform = (target: FabricObject) => ({\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n angle: target.angle,\n left: target.left,\n flipX: target.flipX,\n flipY: target.flipY,\n top: target.top,\n});\n\n/**\n * given a width and height, return the size of the bounding box\n * that can contains the box with width/height with applied transform.\n * Use to calculate the boxes around objects for controls.\n * @param {Number} width\n * @param {Number} height\n * @param {TMat2D} t\n * @returns {Point} size\n */\nexport const sizeAfterTransform = (\n width: number,\n height: number,\n t: TMat2D,\n) => {\n const dimX = width / 2,\n dimY = height / 2,\n points = [\n new Point(-dimX, -dimY),\n new Point(dimX, -dimY),\n new Point(-dimX, dimY),\n new Point(dimX, dimY),\n ].map((p) => p.transform(t)),\n bbox = makeBoundingBoxFromPoints(points);\n return new Point(bbox.width, bbox.height);\n};\n","import { iMatrix } from '../../constants';\nimport type { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/Object';\nimport type { TMat2D } from '../../typedefs';\nimport { invertTransform, multiplyTransformMatrices } from './matrix';\nimport { applyTransformToObject } from './objectTransforms';\n\n/**\n * We are actually looking for the transformation from the destination plane to the source plane (change of basis matrix)\\\n * The object will exist on the destination plane and we want it to seem unchanged by it so we invert the destination matrix (`to`) and then apply the source matrix (`from`)\n * @param [from]\n * @param [to]\n * @returns\n */\nexport const calcPlaneChangeMatrix = (\n from: TMat2D = iMatrix,\n to: TMat2D = iMatrix,\n) => multiplyTransformMatrices(invertTransform(to), from);\n\n/**\n * Sends a point from the source coordinate plane to the destination coordinate plane.\\\n * From the canvas/viewer's perspective the point remains unchanged.\n *\n * @example Send point from canvas plane to group plane\n * var obj = new Rect({ left: 20, top: 20, width: 60, height: 60, strokeWidth: 0 });\n * var group = new Group([obj], { strokeWidth: 0 });\n * var sentPoint1 = sendPointToPlane(new Point(50, 50), undefined, group.calcTransformMatrix());\n * var sentPoint2 = sendPointToPlane(new Point(50, 50), iMatrix, group.calcTransformMatrix());\n * console.log(sentPoint1, sentPoint2) // both points print (0,0) which is the center of group\n *\n * @param {Point} point\n * @param {TMat2D} [from] plane matrix containing object. Passing `undefined` is equivalent to passing the identity matrix, which means `point` exists in the canvas coordinate plane.\n * @param {TMat2D} [to] destination plane matrix to contain object. Passing `undefined` means `point` should be sent to the canvas coordinate plane.\n * @returns {Point} transformed point\n */\nexport const sendPointToPlane = (\n point: Point,\n from: TMat2D = iMatrix,\n to: TMat2D = iMatrix,\n): Point => point.transform(calcPlaneChangeMatrix(from, to));\n\n/**\n * See {@link sendPointToPlane}\n */\nexport const sendVectorToPlane = (\n point: Point,\n from: TMat2D = iMatrix,\n to: TMat2D = iMatrix,\n): Point => point.transform(calcPlaneChangeMatrix(from, to), true);\n\n/**\n *\n * A util that abstracts applying transform to objects.\\\n * Sends `object` to the destination coordinate plane by applying the relevant transformations.\\\n * Changes the space/plane where `object` is drawn.\\\n * From the canvas/viewer's perspective `object` remains unchanged.\n *\n * @example Move clip path from one object to another while preserving it's appearance as viewed by canvas/viewer\n * let obj, obj2;\n * let clipPath = new Circle({ radius: 50 });\n * obj.clipPath = clipPath;\n * // render\n * sendObjectToPlane(clipPath, obj.calcTransformMatrix(), obj2.calcTransformMatrix());\n * obj.clipPath = undefined;\n * obj2.clipPath = clipPath;\n * // render, clipPath now clips obj2 but seems unchanged from the eyes of the viewer\n *\n * @example Clip an object's clip path with an existing object\n * let obj, existingObj;\n * let clipPath = new Circle({ radius: 50 });\n * obj.clipPath = clipPath;\n * let transformTo = multiplyTransformMatrices(obj.calcTransformMatrix(), clipPath.calcTransformMatrix());\n * sendObjectToPlane(existingObj, existingObj.group?.calcTransformMatrix(), transformTo);\n * clipPath.clipPath = existingObj;\n *\n * @param {FabricObject} object\n * @param {Matrix} [from] plane matrix containing object. Passing `undefined` is equivalent to passing the identity matrix, which means `object` is a direct child of canvas.\n * @param {Matrix} [to] destination plane matrix to contain object. Passing `undefined` means `object` should be sent to the canvas coordinate plane.\n * @returns {Matrix} the transform matrix that was applied to `object`\n */\nexport const sendObjectToPlane = (\n object: FabricObject,\n from?: TMat2D,\n to?: TMat2D,\n): TMat2D => {\n const t = calcPlaneChangeMatrix(from, to);\n applyTransformToObject(\n object,\n multiplyTransformMatrices(t, object.calcOwnMatrix()),\n );\n return t;\n};\n","import type {\n ObjectModificationEvents,\n TModificationEvents,\n} from '../EventTypeDefs';\n\nexport const fireEvent = (\n eventName: TModificationEvents,\n options: ObjectModificationEvents[typeof eventName],\n) => {\n const {\n transform: { target },\n } = options;\n target.canvas?.fire(`object:${eventName}`, {\n ...options,\n target,\n });\n target.fire(eventName, options);\n};\n","import type { TOriginX, TOriginY } from '../../typedefs';\n\nconst originOffset = {\n left: -0.5,\n top: -0.5,\n center: 0,\n bottom: 0.5,\n right: 0.5,\n};\n/**\n * Resolves origin value relative to center\n * @private\n * @param {TOriginX | TOriginY} originValue originX / originY\n * @returns number\n */\n\nexport const resolveOrigin = (\n originValue: TOriginX | TOriginY | number,\n): number =>\n typeof originValue === 'string'\n ? originOffset[originValue]\n : originValue - 0.5;\n","import type {\n TPointerEvent,\n Transform,\n TransformAction,\n BasicTransformEvent,\n} from '../EventTypeDefs';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { Point } from '../Point';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TOriginX, TOriginY } from '../typedefs';\nimport {\n degreesToRadians,\n radiansToDegrees,\n} from '../util/misc/radiansDegreesConversion';\nimport type { Control } from './Control';\nimport { CENTER } from '../constants';\n\nexport const NOT_ALLOWED_CURSOR = 'not-allowed';\n\n/**\n * @param {Boolean} alreadySelected true if target is already selected\n * @param {String} corner a string representing the corner ml, mr, tl ...\n * @param {Event} e Event object\n * @param {FabricObject} [target] inserted back to help overriding. Unused\n */\nexport const getActionFromCorner = (\n alreadySelected: boolean,\n corner: string | undefined,\n e: TPointerEvent,\n target: FabricObject,\n) => {\n if (!corner || !alreadySelected) {\n return 'drag';\n }\n const control = target.controls[corner];\n return control.getActionName(e, control, target);\n};\n\n/**\n * Checks if transform is centered\n * @param {Object} transform transform data\n * @return {Boolean} true if transform is centered\n */\nexport function isTransformCentered(transform: Transform) {\n return (\n resolveOrigin(transform.originX) === resolveOrigin(CENTER) &&\n resolveOrigin(transform.originY) === resolveOrigin(CENTER)\n );\n}\n\nexport function invertOrigin(origin: TOriginX | TOriginY) {\n return -resolveOrigin(origin) + 0.5;\n}\n\nexport const isLocked = (\n target: FabricObject,\n lockingKey:\n | 'lockMovementX'\n | 'lockMovementY'\n | 'lockRotation'\n | 'lockScalingX'\n | 'lockScalingY'\n | 'lockSkewingX'\n | 'lockSkewingY'\n | 'lockScalingFlip',\n) => target[lockingKey];\n\nexport const commonEventInfo: TransformAction<\n Transform,\n BasicTransformEvent\n> = (eventData, transform, x, y) => {\n return {\n e: eventData,\n transform,\n pointer: new Point(x, y),\n };\n};\n\n/**\n * Combine control position and object angle to find the control direction compared\n * to the object center.\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n * @param {Control} control the control class\n * @return {Number} 0 - 7 a quadrant number\n */\nexport function findCornerQuadrant(\n fabricObject: FabricObject,\n control: Control,\n): number {\n // angle is relative to canvas plane\n const angle = fabricObject.getTotalAngle(),\n cornerAngle =\n angle + radiansToDegrees(Math.atan2(control.y, control.x)) + 360;\n return Math.round((cornerAngle % 360) / 45);\n}\n\n/**\n * @returns the normalized point (rotated relative to center) in local coordinates\n */\nfunction normalizePoint(\n target: FabricObject,\n point: Point,\n originX: TOriginX,\n originY: TOriginY,\n): Point {\n const center = target.getRelativeCenterPoint(),\n p =\n typeof originX !== 'undefined' && typeof originY !== 'undefined'\n ? target.translateToGivenOrigin(\n center,\n CENTER,\n CENTER,\n originX,\n originY,\n )\n : new Point(target.left, target.top),\n p2 = target.angle\n ? point.rotate(-degreesToRadians(target.angle), center)\n : point;\n return p2.subtract(p);\n}\n\n/**\n * Transforms a point to the offset from the given origin\n * @param {Object} transform\n * @param {String} originX\n * @param {String} originY\n * @param {number} x\n * @param {number} y\n * @return {Fabric.Point} the normalized point\n */\nexport function getLocalPoint(\n { target, corner }: Transform,\n originX: TOriginX,\n originY: TOriginY,\n x: number,\n y: number,\n) {\n const control = target.controls[corner],\n zoom = target.canvas?.getZoom() || 1,\n padding = target.padding / zoom,\n localPoint = normalizePoint(target, new Point(x, y), originX, originY);\n if (localPoint.x >= padding) {\n localPoint.x -= padding;\n }\n if (localPoint.x <= -padding) {\n localPoint.x += padding;\n }\n if (localPoint.y >= padding) {\n localPoint.y -= padding;\n }\n if (localPoint.y <= padding) {\n localPoint.y += padding;\n }\n localPoint.x -= control.offsetX;\n localPoint.y -= control.offsetY;\n return localPoint;\n}\n","import type { TransformActionHandler } from '../EventTypeDefs';\nimport { LEFT, TOP, MOVING } from '../constants';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo, isLocked } from './util';\n\n/**\n * Action handler\n * @private\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if the translation occurred\n */\nexport const dragHandler: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target, offsetX, offsetY } = transform,\n newLeft = x - offsetX,\n newTop = y - offsetY,\n moveX = !isLocked(target, 'lockMovementX') && target.left !== newLeft,\n moveY = !isLocked(target, 'lockMovementY') && target.top !== newTop;\n moveX && target.set(LEFT, newLeft);\n moveY && target.set(TOP, newTop);\n if (moveX || moveY) {\n fireEvent(MOVING, commonEventInfo(eventData, transform, x, y));\n }\n return moveX || moveY;\n};\n","import type { TSVGReviver } from '../../typedefs';\nimport { uid } from '../../util/internals/uid';\nimport { colorPropToSVG, matrixToSVG } from '../../util/misc/svgParsing';\nimport { FILL, NONE, STROKE } from '../../constants';\nimport type { FabricObject } from './FabricObject';\nimport { isFiller } from '../../util/typeAssertions';\n\nexport class FabricObjectSVGExportMixin {\n /**\n * When an object is being exported as SVG as a clippath, a reference inside the SVG is needed.\n * This reference is a UID in the fabric namespace and is temporary stored here.\n * @type {String}\n */\n declare clipPathId?: string;\n\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles(\n this: FabricObjectSVGExportMixin & FabricObject,\n skipShadow?: boolean,\n ) {\n const fillRule = this.fillRule ? this.fillRule : 'nonzero',\n strokeWidth = this.strokeWidth ? this.strokeWidth : '0',\n strokeDashArray = this.strokeDashArray\n ? this.strokeDashArray.join(' ')\n : NONE,\n strokeDashOffset = this.strokeDashOffset ? this.strokeDashOffset : '0',\n strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt',\n strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter',\n strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4',\n opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1',\n visibility = this.visible ? '' : ' visibility: hidden;',\n filter = skipShadow ? '' : this.getSvgFilter(),\n fill = colorPropToSVG(FILL, this.fill),\n stroke = colorPropToSVG(STROKE, this.stroke);\n\n return [\n stroke,\n 'stroke-width: ',\n strokeWidth,\n '; ',\n 'stroke-dasharray: ',\n strokeDashArray,\n '; ',\n 'stroke-linecap: ',\n strokeLineCap,\n '; ',\n 'stroke-dashoffset: ',\n strokeDashOffset,\n '; ',\n 'stroke-linejoin: ',\n strokeLineJoin,\n '; ',\n 'stroke-miterlimit: ',\n strokeMiterLimit,\n '; ',\n fill,\n 'fill-rule: ',\n fillRule,\n '; ',\n 'opacity: ',\n opacity,\n ';',\n filter,\n visibility,\n ].join('');\n }\n\n /**\n * Returns filter for svg shadow\n * @return {String}\n */\n getSvgFilter(this: FabricObjectSVGExportMixin & FabricObject) {\n return this.shadow ? `filter: url(#SVGID_${this.shadow.id});` : '';\n }\n\n /**\n * Returns id attribute for svg output\n * @return {String}\n */\n getSvgCommons(\n this: FabricObjectSVGExportMixin & FabricObject & { id?: string },\n ) {\n return [\n this.id ? `id=\"${this.id}\" ` : '',\n this.clipPath\n ? `clip-path=\"url(#${\n (this.clipPath as FabricObjectSVGExportMixin & FabricObject)\n .clipPathId\n })\" `\n : '',\n ].join('');\n }\n\n /**\n * Returns transform-string for svg-export\n * @param {Boolean} use the full transform or the single object one.\n * @return {String}\n */\n getSvgTransform(\n this: FabricObjectSVGExportMixin & FabricObject,\n full?: boolean,\n additionalTransform = '',\n ) {\n const transform = full ? this.calcTransformMatrix() : this.calcOwnMatrix(),\n svgTransform = `transform=\"${matrixToSVG(transform)}`;\n return `${svgTransform}${additionalTransform}\" `;\n }\n\n /**\n * Returns svg representation of an instance\n * This function is implemented in each subclass\n * This is just because typescript otherwise cryies all the time\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG(_reviver?: TSVGReviver): string[] {\n return [''];\n }\n\n /**\n * Returns svg representation of an instance\n * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG(\n this: FabricObjectSVGExportMixin & FabricObject,\n reviver?: TSVGReviver,\n ) {\n return this._createBaseSVGMarkup(this._toSVG(reviver), {\n reviver,\n });\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG(\n this: FabricObjectSVGExportMixin & FabricObject,\n reviver?: TSVGReviver,\n ) {\n return (\n '\\t' +\n this._createBaseClipPathSVGMarkup(this._toSVG(reviver), {\n reviver,\n })\n );\n }\n\n /**\n * @private\n */\n _createBaseClipPathSVGMarkup(\n this: FabricObjectSVGExportMixin & FabricObject,\n objectMarkup: string[],\n {\n reviver,\n additionalTransform = '',\n }: { reviver?: TSVGReviver; additionalTransform?: string } = {},\n ) {\n const commonPieces = [\n this.getSvgTransform(true, additionalTransform),\n this.getSvgCommons(),\n ].join(''),\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS');\n objectMarkup[index] = commonPieces;\n return reviver ? reviver(objectMarkup.join('')) : objectMarkup.join('');\n }\n\n /**\n * @private\n */\n _createBaseSVGMarkup(\n this: FabricObjectSVGExportMixin & FabricObject,\n objectMarkup: string[],\n {\n noStyle,\n reviver,\n withShadow,\n additionalTransform,\n }: {\n noStyle?: boolean;\n reviver?: TSVGReviver;\n withShadow?: boolean;\n additionalTransform?: string;\n } = {},\n ): string {\n const styleInfo = noStyle ? '' : `style=\"${this.getSvgStyles()}\" `,\n shadowInfo = withShadow ? `style=\"${this.getSvgFilter()}\" ` : '',\n clipPath = this.clipPath as FabricObjectSVGExportMixin & FabricObject,\n vectorEffect = this.strokeUniform\n ? 'vector-effect=\"non-scaling-stroke\" '\n : '',\n absoluteClipPath = clipPath && clipPath.absolutePositioned,\n stroke = this.stroke,\n fill = this.fill,\n shadow = this.shadow,\n markup = [],\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS');\n let clipPathMarkup;\n if (clipPath) {\n clipPath.clipPathId = `CLIPPATH_${uid()}`;\n clipPathMarkup = `\\n${clipPath.toClipPathSVG(reviver)}\\n`;\n }\n if (absoluteClipPath) {\n markup.push('\\n');\n }\n markup.push(\n '\\n',\n );\n const commonPieces = [\n styleInfo,\n vectorEffect,\n noStyle ? '' : this.addPaintOrder(),\n ' ',\n additionalTransform ? `transform=\"${additionalTransform}\" ` : '',\n ].join('');\n objectMarkup[index] = commonPieces;\n if (isFiller(fill)) {\n markup.push(fill.toSVG(this));\n }\n if (isFiller(stroke)) {\n markup.push(stroke.toSVG(this));\n }\n if (shadow) {\n markup.push(shadow.toSVG(this));\n }\n if (clipPath) {\n markup.push(clipPathMarkup);\n }\n markup.push(objectMarkup.join(''));\n markup.push('\\n');\n absoluteClipPath && markup.push('\\n');\n return reviver ? reviver(markup.join('')) : markup.join('');\n }\n\n addPaintOrder(this: FabricObjectSVGExportMixin & FabricObject) {\n return this.paintFirst !== FILL ? ` paint-order=\"${this.paintFirst}\" ` : '';\n }\n}\n","export function getSvgRegex(arr: string[]) {\n return new RegExp('^(' + arr.join('|') + ')\\\\b', 'i');\n}\n","import { getSvgRegex } from './getSvgRegex';\nimport { LEFT, TOP } from '../constants';\n\nexport const reNum = String.raw`(?:[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?)`;\n\nexport const svgNS = 'http://www.w3.org/2000/svg';\n\nexport const reFontDeclaration = new RegExp(\n '(normal|italic)?\\\\s*(normal|small-caps)?\\\\s*' +\n '(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\\\s*(' +\n reNum +\n '(?:px|cm|mm|em|pt|pc|in)*)(?:\\\\/(normal|' +\n reNum +\n '))?\\\\s+(.*)',\n);\n\nexport const svgValidTagNames = [\n 'path',\n 'circle',\n 'polygon',\n 'polyline',\n 'ellipse',\n 'rect',\n 'line',\n 'image',\n 'text',\n ],\n svgViewBoxElements = ['symbol', 'image', 'marker', 'pattern', 'view', 'svg'],\n svgInvalidAncestors = [\n 'pattern',\n 'defs',\n 'symbol',\n 'metadata',\n 'clipPath',\n 'mask',\n 'desc',\n ],\n svgValidParents = ['symbol', 'g', 'a', 'svg', 'clipPath', 'defs'],\n attributesMap = {\n cx: LEFT,\n x: LEFT,\n r: 'radius',\n cy: TOP,\n y: TOP,\n display: 'visible',\n visibility: 'visible',\n transform: 'transformMatrix',\n 'fill-opacity': 'fillOpacity',\n 'fill-rule': 'fillRule',\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-style': 'fontStyle',\n 'font-weight': 'fontWeight',\n 'letter-spacing': 'charSpacing',\n 'paint-order': 'paintFirst',\n 'stroke-dasharray': 'strokeDashArray',\n 'stroke-dashoffset': 'strokeDashOffset',\n 'stroke-linecap': 'strokeLineCap',\n 'stroke-linejoin': 'strokeLineJoin',\n 'stroke-miterlimit': 'strokeMiterLimit',\n 'stroke-opacity': 'strokeOpacity',\n 'stroke-width': 'strokeWidth',\n 'text-decoration': 'textDecoration',\n 'text-anchor': 'textAnchor',\n opacity: 'opacity',\n 'clip-path': 'clipPath',\n 'clip-rule': 'clipRule',\n 'vector-effect': 'strokeUniform',\n 'image-rendering': 'imageSmoothing',\n },\n fSize = 'font-size',\n cPath = 'clip-path';\n\nexport const svgValidTagNamesRegEx = getSvgRegex(svgValidTagNames);\n\nexport const svgViewBoxElementsRegEx = getSvgRegex(svgViewBoxElements);\n\nexport const svgValidParentsRegEx = getSvgRegex(svgValidParents);\n\n// http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute\n// matches, e.g.: +14.56e-12, etc.\nexport const reViewBoxAttrValue = new RegExp(\n '^' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*,?' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*,?' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*,?' +\n '\\\\s*(' +\n reNum +\n '+)\\\\s*' +\n '$',\n);\n","import type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport type { TRadian } from '../../typedefs';\n\nconst unitVectorX = new Point(1, 0);\nconst zero = new Point();\n\n/**\n * Rotates `vector` with `radians`\n * @param {Point} vector The vector to rotate (x and y)\n * @param {Number} radians The radians of the angle for the rotation\n * @return {Point} The new rotated point\n */\nexport const rotateVector = (vector: Point, radians: TRadian) =>\n vector.rotate(radians);\n\n/**\n * Creates a vector from points represented as a point\n *\n * @param {Point} from\n * @param {Point} to\n * @returns {Point} vector\n */\nexport const createVector = (from: XY, to: XY): Point =>\n new Point(to).subtract(from);\n\n/**\n * return the magnitude of a vector\n * @return {number}\n */\nexport const magnitude = (point: Point) => point.distanceFrom(zero);\n\n/**\n * Calculates the angle between 2 vectors\n * @param {Point} a\n * @param {Point} b\n * @returns the angle in radians from `a` to `b`\n */\nexport const calcAngleBetweenVectors = (a: Point, b: Point): TRadian =>\n Math.atan2(crossProduct(a, b), dotProduct(a, b)) as TRadian;\n\n/**\n * Calculates the angle between the x axis and the vector\n * @param {Point} v\n * @returns the angle in radians of `v`\n */\nexport const calcVectorRotation = (v: Point) =>\n calcAngleBetweenVectors(unitVectorX, v);\n\n/**\n * @param {Point} v\n * @returns {Point} vector representing the unit vector pointing to the direction of `v`\n */\nexport const getUnitVector = (v: Point): Point =>\n v.eq(zero) ? v : v.scalarDivide(magnitude(v));\n\n/**\n * @param {Point} v\n * @param {Boolean} [counterClockwise] the direction of the orthogonal vector, defaults to `true`\n * @returns {Point} the unit orthogonal vector\n */\nexport const getOrthonormalVector = (\n v: Point,\n counterClockwise = true,\n): Point =>\n getUnitVector(new Point(-v.y, v.x).scalarMultiply(counterClockwise ? 1 : -1));\n\n/**\n * Cross product of two vectors in 2D\n * @param {Point} a\n * @param {Point} b\n * @returns {number} the magnitude of Z vector\n */\nexport const crossProduct = (a: Point, b: Point): number =>\n a.x * b.y - a.y * b.x;\n\n/**\n * Dot product of two vectors in 2D\n * @param {Point} a\n * @param {Point} b\n * @returns {number}\n */\nexport const dotProduct = (a: Point, b: Point): number => a.x * b.x + a.y * b.y;\n\n/**\n * Checks if the vector is between two others. It is considered\n * to be inside when the vector to be tested is between the\n * initial vector and the final vector (included) in a counterclockwise direction.\n * @param {Point} t vector to be tested\n * @param {Point} a initial vector\n * @param {Point} b final vector\n * @returns {boolean} true if the vector is among the others\n */\nexport const isBetweenVectors = (t: Point, a: Point, b: Point): boolean => {\n if (t.eq(a) || t.eq(b)) return true;\n const AxB = crossProduct(a, b),\n AxT = crossProduct(a, t),\n BxT = crossProduct(b, t);\n return AxB >= 0 ? AxT >= 0 && BxT <= 0 : !(AxT <= 0 && BxT >= 0);\n};\n","import { classRegistry } from './ClassRegistry';\nimport { Color } from './color/Color';\nimport { config } from './config';\nimport { reNum } from './parser/constants';\nimport { Point } from './Point';\nimport type { FabricObject } from './shapes/Object/FabricObject';\nimport type { TClassProperties } from './typedefs';\nimport { uid } from './util/internals/uid';\nimport { pickBy } from './util/misc/pick';\nimport { degreesToRadians } from './util/misc/radiansDegreesConversion';\nimport { toFixed } from './util/misc/toFixed';\nimport { rotateVector } from './util/misc/vectors';\n\n/**\n * Regex matching shadow offsetX, offsetY and blur (ex: \"2px 2px 10px rgba(0,0,0,0.2)\", \"rgb(0,255,0) 2px 2px\")\n * - (?:\\s|^): This part captures either a whitespace character (\\s) or the beginning of a line (^). It's non-capturing (due to (?:...)), meaning it doesn't create a capturing group.\n * - (-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?: This captures the first component of the shadow, which is the horizontal offset. Breaking it down:\n * - (-?\\d+): Captures an optional minus sign followed by one or more digits (integer part of the number).\n * - (?:\\.\\d*)?: Optionally captures a decimal point followed by zero or more digits (decimal part of the number).\n * - (?:px)?: Optionally captures the \"px\" unit.\n * - (?:\\s?|$): Captures either an optional whitespace or the end of the line. This whole part is wrapped in a non-capturing group and marked as optional with ?.\n * - (-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?: Similar to the previous step, this captures the vertical offset.\n\n(\\d+(?:\\.\\d*)?(?:px)?)?: This captures the blur radius. It's similar to the horizontal offset but without the optional minus sign.\n\n(?:\\s+(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?){0,1}: This captures an optional part for the color. It allows for whitespace followed by a component with an optional minus sign, digits, decimal point, and \"px\" unit.\n\n(?:$|\\s): This captures either the end of the line or a whitespace character. It ensures that the match ends either at the end of the string or with a whitespace character.\n */\n// eslint-disable-next-line max-len\n\nconst shadowOffsetRegex = '(-?\\\\d+(?:\\\\.\\\\d*)?(?:px)?(?:\\\\s?|$))?';\n\nconst reOffsetsAndBlur = new RegExp(\n '(?:\\\\s|^)' +\n shadowOffsetRegex +\n shadowOffsetRegex +\n '(' +\n reNum +\n '?(?:px)?)?(?:\\\\s?|$)(?:$|\\\\s)',\n);\n\nexport const shadowDefaultValues: Partial> = {\n color: 'rgb(0,0,0)',\n blur: 0,\n offsetX: 0,\n offsetY: 0,\n affectStroke: false,\n includeDefaultValues: true,\n nonScaling: false,\n};\n\nexport type SerializedShadowOptions = {\n color: string;\n blur: number;\n offsetX: number;\n offsetY: number;\n affectStroke: boolean;\n nonScaling: boolean;\n type: string;\n};\n\nexport class Shadow {\n /**\n * Shadow color\n * @type String\n * @default\n */\n declare color: string;\n\n /**\n * Shadow blur\n * @type Number\n */\n declare blur: number;\n\n /**\n * Shadow horizontal offset\n * @type Number\n * @default\n */\n declare offsetX: number;\n\n /**\n * Shadow vertical offset\n * @type Number\n * @default\n */\n declare offsetY: number;\n\n /**\n * Whether the shadow should affect stroke operations\n * @type Boolean\n * @default\n */\n declare affectStroke: boolean;\n\n /**\n * Indicates whether toObject should include default values\n * @type Boolean\n * @default\n */\n declare includeDefaultValues: boolean;\n\n /**\n * When `false`, the shadow will scale with the object.\n * When `true`, the shadow's offsetX, offsetY, and blur will not be affected by the object's scale.\n * default to false\n * @type Boolean\n * @default\n */\n declare nonScaling: boolean;\n\n declare id: number;\n\n static ownDefaults = shadowDefaultValues;\n\n static type = 'shadow';\n\n /**\n * @see {@link http://fabricjs.com/shadows|Shadow demo}\n * @param {Object|String} [options] Options object with any of color, blur, offsetX, offsetY properties or string (e.g. \"rgba(0,0,0,0.2) 2px 2px 10px\")\n */\n constructor(options: Partial>);\n constructor(svgAttribute: string);\n constructor(arg0: string | Partial>) {\n const options: Partial> =\n typeof arg0 === 'string' ? Shadow.parseShadow(arg0) : arg0;\n Object.assign(this, Shadow.ownDefaults, options);\n this.id = uid();\n }\n\n /**\n * @param {String} value Shadow value to parse\n * @return {Object} Shadow object with color, offsetX, offsetY and blur\n */\n static parseShadow(value: string) {\n const shadowStr = value.trim(),\n [, offsetX = 0, offsetY = 0, blur = 0] = (\n reOffsetsAndBlur.exec(shadowStr) || []\n ).map((value) => parseFloat(value) || 0),\n color = (shadowStr.replace(reOffsetsAndBlur, '') || 'rgb(0,0,0)').trim();\n\n return {\n color,\n offsetX,\n offsetY,\n blur,\n };\n }\n\n /**\n * Returns a string representation of an instance\n * @see http://www.w3.org/TR/css-text-decor-3/#text-shadow\n * @return {String} Returns CSS3 text-shadow declaration\n */\n toString() {\n return [this.offsetX, this.offsetY, this.blur, this.color].join('px ');\n }\n\n /**\n * Returns SVG representation of a shadow\n * @param {FabricObject} object\n * @return {String} SVG representation of a shadow\n */\n toSVG(object: FabricObject) {\n const offset = rotateVector(\n new Point(this.offsetX, this.offsetY),\n degreesToRadians(-object.angle),\n ),\n BLUR_BOX = 20,\n color = new Color(this.color);\n let fBoxX = 40,\n fBoxY = 40;\n\n if (object.width && object.height) {\n //http://www.w3.org/TR/SVG/filters.html#FilterEffectsRegion\n // we add some extra space to filter box to contain the blur ( 20 )\n fBoxX =\n toFixed(\n (Math.abs(offset.x) + this.blur) / object.width,\n config.NUM_FRACTION_DIGITS,\n ) *\n 100 +\n BLUR_BOX;\n fBoxY =\n toFixed(\n (Math.abs(offset.y) + this.blur) / object.height,\n config.NUM_FRACTION_DIGITS,\n ) *\n 100 +\n BLUR_BOX;\n }\n if (object.flipX) {\n offset.x *= -1;\n }\n if (object.flipY) {\n offset.y *= -1;\n }\n\n return `\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\n\\t\\t\\n\\t\\t\\n\\t\\n\\n`;\n }\n\n /**\n * Returns object representation of a shadow\n * @return {Object} Object representation of a shadow instance\n */\n toObject() {\n const data: SerializedShadowOptions = {\n color: this.color,\n blur: this.blur,\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n affectStroke: this.affectStroke,\n nonScaling: this.nonScaling,\n type: (this.constructor as typeof Shadow).type,\n };\n const defaults = Shadow.ownDefaults as SerializedShadowOptions;\n return !this.includeDefaultValues\n ? pickBy(data, (value, key) => value !== defaults[key])\n : data;\n }\n\n static async fromObject(options: Partial>) {\n return new this(options);\n }\n}\n\nclassRegistry.setClass(Shadow, 'shadow');\n","export const capValue = (min: number, value: number, max: number) =>\n Math.max(min, Math.min(value, max));\n","import {\n TOP,\n LEFT,\n SCALE_Y,\n SCALE_X,\n SKEW_X,\n SKEW_Y,\n FILL,\n STROKE,\n} from '../../constants';\nimport type { TClassProperties } from '../../typedefs';\nimport type { InteractiveFabricObject } from './InteractiveObject';\nimport type { FabricObject } from './Object';\n\nexport const stateProperties = [\n TOP,\n LEFT,\n SCALE_X,\n SCALE_Y,\n 'flipX',\n 'flipY',\n 'originX',\n 'originY',\n 'angle',\n 'opacity',\n 'globalCompositeOperation',\n 'shadow',\n 'visible',\n SKEW_X,\n SKEW_Y,\n];\n\nexport const cacheProperties = [\n FILL,\n STROKE,\n 'strokeWidth',\n 'strokeDashArray',\n 'width',\n 'height',\n 'paintFirst',\n 'strokeUniform',\n 'strokeLineCap',\n 'strokeDashOffset',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'backgroundColor',\n 'clipPath',\n];\n\nexport const fabricObjectDefaultValues: Partial<\n TClassProperties\n> = {\n // see composeMatrix() to see order of transforms. First defaults listed based on this\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n angle: 0,\n flipX: false,\n flipY: false,\n scaleX: 1,\n scaleY: 1,\n minScaleLimit: 0,\n skewX: 0,\n skewY: 0,\n originX: LEFT,\n originY: TOP,\n strokeWidth: 1,\n strokeUniform: false,\n padding: 0,\n opacity: 1,\n paintFirst: FILL,\n fill: 'rgb(0,0,0)',\n fillRule: 'nonzero',\n stroke: null,\n strokeDashArray: null,\n strokeDashOffset: 0,\n strokeLineCap: 'butt',\n strokeLineJoin: 'miter',\n strokeMiterLimit: 4,\n globalCompositeOperation: 'source-over',\n backgroundColor: '',\n shadow: null,\n visible: true,\n includeDefaultValues: true,\n excludeFromExport: false,\n objectCaching: true,\n clipPath: undefined,\n inverted: false,\n absolutePositioned: false,\n centeredRotation: true,\n centeredScaling: false,\n dirty: true,\n} as const;\n\nexport const interactiveObjectDefaultValues: Partial<\n TClassProperties\n> = {\n noScaleCache: true,\n lockMovementX: false,\n lockMovementY: false,\n lockRotation: false,\n lockScalingX: false,\n lockScalingY: false,\n lockSkewingX: false,\n lockSkewingY: false,\n lockScalingFlip: false,\n cornerSize: 13,\n touchCornerSize: 24,\n transparentCorners: true,\n cornerColor: 'rgb(178,204,255)',\n cornerStrokeColor: '',\n cornerStyle: 'rect',\n cornerDashArray: null,\n hasControls: true,\n borderColor: 'rgb(178,204,255)',\n borderDashArray: null,\n borderOpacityWhenMoving: 0.4,\n borderScaleFactor: 1,\n hasBorders: true,\n selectionBackgroundColor: '',\n selectable: true,\n evented: true,\n perPixelTargetFind: false,\n activeOn: 'down',\n hoverCursor: null,\n moveCursor: null,\n};\n","/**\n * Easing functions\n * @see {@link http://gizma.com/easing/ Easing Equations by Robert Penner}\n */\n\nimport { twoMathPi, halfPI } from '../../constants';\nimport type { TEasingFunction } from './types';\n\nconst normalize = (a: number, c: number, p: number, s: number) => {\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n //handle the 0/0 case:\n if (c === 0 && a === 0) {\n s = (p / twoMathPi) * Math.asin(1);\n } else {\n s = (p / twoMathPi) * Math.asin(c / a);\n }\n }\n return { a, c, p, s };\n};\n\nconst elastic = (\n a: number,\n s: number,\n p: number,\n t: number,\n d: number,\n): number =>\n a * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t * d - s) * twoMathPi) / p);\n\n/**\n * Default sinusoidal easing\n */\nexport const defaultEasing: TEasingFunction = (t, b, c, d) =>\n -c * Math.cos((t / d) * halfPI) + c + b;\n\n/**\n * Cubic easing in\n */\nexport const easeInCubic: TEasingFunction = (t, b, c, d) =>\n c * (t / d) ** 3 + b;\n\n/**\n * Cubic easing out\n */\nexport const easeOutCubic: TEasingFunction = (t, b, c, d) =>\n c * ((t / d - 1) ** 3 + 1) + b;\n\n/**\n * Cubic easing in and out\n */\nexport const easeInOutCubic: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 3 + b;\n }\n return (c / 2) * ((t - 2) ** 3 + 2) + b;\n};\n\n/**\n * Quartic easing in\n */\nexport const easeInQuart: TEasingFunction = (t, b, c, d) =>\n c * (t /= d) * t ** 3 + b;\n\n/**\n * Quartic easing out\n */\nexport const easeOutQuart: TEasingFunction = (t, b, c, d) =>\n -c * ((t = t / d - 1) * t ** 3 - 1) + b;\n\n/**\n * Quartic easing in and out\n */\nexport const easeInOutQuart: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 4 + b;\n }\n return (-c / 2) * ((t -= 2) * t ** 3 - 2) + b;\n};\n\n/**\n * Quintic easing in\n */\nexport const easeInQuint: TEasingFunction = (t, b, c, d) =>\n c * (t / d) ** 5 + b;\n\n/**\n * Quintic easing out\n */\nexport const easeOutQuint: TEasingFunction = (t, b, c, d) =>\n c * ((t / d - 1) ** 5 + 1) + b;\n\n/**\n * Quintic easing in and out\n */\nexport const easeInOutQuint: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 5 + b;\n }\n return (c / 2) * ((t - 2) ** 5 + 2) + b;\n};\n\n/**\n * Sinusoidal easing in\n */\nexport const easeInSine: TEasingFunction = (t, b, c, d) =>\n -c * Math.cos((t / d) * halfPI) + c + b;\n\n/**\n * Sinusoidal easing out\n */\nexport const easeOutSine: TEasingFunction = (t, b, c, d) =>\n c * Math.sin((t / d) * halfPI) + b;\n\n/**\n * Sinusoidal easing in and out\n */\nexport const easeInOutSine: TEasingFunction = (t, b, c, d) =>\n (-c / 2) * (Math.cos((Math.PI * t) / d) - 1) + b;\n\n/**\n * Exponential easing in\n */\nexport const easeInExpo: TEasingFunction = (t, b, c, d) =>\n t === 0 ? b : c * 2 ** (10 * (t / d - 1)) + b;\n\n/**\n * Exponential easing out\n */\nexport const easeOutExpo: TEasingFunction = (t, b, c, d) =>\n t === d ? b + c : c * -(2 ** ((-10 * t) / d) + 1) + b;\n\n/**\n * Exponential easing in and out\n */\nexport const easeInOutExpo: TEasingFunction = (t, b, c, d) => {\n if (t === 0) {\n return b;\n }\n if (t === d) {\n return b + c;\n }\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * 2 ** (10 * (t - 1)) + b;\n }\n return (c / 2) * -(2 ** (-10 * --t) + 2) + b;\n};\n\n/**\n * Circular easing in\n */\nexport const easeInCirc: TEasingFunction = (t, b, c, d) =>\n -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n\n/**\n * Circular easing out\n */\nexport const easeOutCirc: TEasingFunction = (t, b, c, d) =>\n c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n\n/**\n * Circular easing in and out\n */\nexport const easeInOutCirc: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (-c / 2) * (Math.sqrt(1 - t ** 2) - 1) + b;\n }\n return (c / 2) * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n};\n\n/**\n * Elastic easing in\n */\nexport const easeInElastic: TEasingFunction = (t, b, c, d) => {\n const s = 1.70158,\n a = c;\n let p = 0;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n const { a: normA, s: normS, p: normP } = normalize(a, c, p, s);\n return -elastic(normA, normS, normP, t, d) + b;\n};\n\n/**\n * Elastic easing out\n */\nexport const easeOutElastic: TEasingFunction = (t, b, c, d) => {\n const s = 1.70158,\n a = c;\n let p = 0;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);\n return (\n normA * 2 ** (-10 * t) * Math.sin(((t * d - normS) * twoMathPi) / normP) +\n normC +\n b\n );\n};\n\n/**\n * Elastic easing in and out\n */\nexport const easeInOutElastic: TEasingFunction = (t, b, c, d) => {\n const s = 1.70158,\n a = c;\n let p = 0;\n if (t === 0) {\n return b;\n }\n t /= d / 2;\n if (t === 2) {\n return b + c;\n }\n if (!p) {\n p = d * (0.3 * 1.5);\n }\n const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);\n if (t < 1) {\n return -0.5 * elastic(normA, normS, normP, t, d) + b;\n }\n return (\n normA *\n Math.pow(2, -10 * (t -= 1)) *\n Math.sin(((t * d - normS) * twoMathPi) / normP) *\n 0.5 +\n normC +\n b\n );\n};\n\n/**\n * Backwards easing in\n */\nexport const easeInBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>\n c * (t /= d) * t * ((s + 1) * t - s) + b;\n\n/**\n * Backwards easing out\n */\nexport const easeOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>\n c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n\n/**\n * Backwards easing in and out\n */\nexport const easeInOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n }\n return (c / 2) * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n};\n\n/**\n * Bouncing easing out\n */\nexport const easeOutBounce: TEasingFunction = (t, b, c, d) => {\n if ((t /= d) < 1 / 2.75) {\n return c * (7.5625 * t * t) + b;\n } else if (t < 2 / 2.75) {\n return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;\n } else if (t < 2.5 / 2.75) {\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;\n } else {\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;\n }\n};\n\n/**\n * Bouncing easing in\n */\nexport const easeInBounce: TEasingFunction = (t, b, c, d) =>\n c - easeOutBounce(d - t, 0, c, d) + b;\n\n/**\n * Bouncing easing in and out\n */\nexport const easeInOutBounce: TEasingFunction = (t, b, c, d) =>\n t < d / 2\n ? easeInBounce(t * 2, 0, c, d) * 0.5 + b\n : easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n\n/**\n * Quadratic easing in\n */\nexport const easeInQuad: TEasingFunction = (t, b, c, d) => c * (t /= d) * t + b;\n\n/**\n * Quadratic easing out\n */\nexport const easeOutQuad: TEasingFunction = (t, b, c, d) =>\n -c * (t /= d) * (t - 2) + b;\n\n/**\n * Quadratic easing in and out\n */\nexport const easeInOutQuad: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 2 + b;\n }\n return (-c / 2) * (--t * (t - 2) - 1) + b;\n};\n","import { noop } from '../../constants';\nimport { requestAnimFrame } from './AnimationFrameProvider';\nimport { runningAnimations } from './AnimationRegistry';\nimport { defaultEasing } from './easing';\nimport type {\n AnimationState,\n TAbortCallback,\n TBaseAnimationOptions,\n TEasingFunction,\n TOnAnimationChangeCallback,\n} from './types';\n\nconst defaultAbort = () => false;\n\nexport abstract class AnimationBase<\n T extends number | number[] = number | number[],\n> {\n declare readonly startValue: T;\n declare readonly endValue: T;\n declare readonly duration: number;\n declare readonly delay: number;\n\n protected declare readonly byValue: T;\n protected declare readonly easing: TEasingFunction;\n\n private declare readonly _onStart: VoidFunction;\n private declare readonly _onChange: TOnAnimationChangeCallback;\n private declare readonly _onComplete: TOnAnimationChangeCallback;\n private declare readonly _abort: TAbortCallback;\n\n /**\n * Used to register the animation to a target object\n * so that it can be cancelled within the object context\n */\n declare readonly target?: unknown;\n\n private _state: AnimationState = 'pending';\n /**\n * Time %, or the ratio of `timeElapsed / duration`\n * @see tick\n */\n durationProgress = 0;\n /**\n * Value %, or the ratio of `(currentValue - startValue) / (endValue - startValue)`\n */\n valueProgress = 0;\n /**\n * Current value\n */\n declare value: T;\n /**\n * Animation start time ms\n */\n private declare startTime: number;\n\n constructor({\n startValue,\n byValue,\n duration = 500,\n delay = 0,\n easing = defaultEasing,\n onStart = noop,\n onChange = noop,\n onComplete = noop,\n abort = defaultAbort,\n target,\n }: TBaseAnimationOptions) {\n this.tick = this.tick.bind(this);\n\n this.duration = duration;\n this.delay = delay;\n this.easing = easing;\n this._onStart = onStart;\n this._onChange = onChange;\n this._onComplete = onComplete;\n this._abort = abort;\n this.target = target;\n\n this.startValue = startValue;\n this.byValue = byValue;\n this.value = this.startValue;\n this.endValue = Object.freeze(this.calculate(this.duration).value);\n }\n\n get state() {\n return this._state;\n }\n\n isDone() {\n return this._state === 'aborted' || this._state === 'completed';\n }\n\n /**\n * Calculate the current value based on the easing parameters\n * @param timeElapsed in ms\n * @protected\n */\n protected abstract calculate(timeElapsed: number): {\n value: T;\n valueProgress: number;\n };\n\n start() {\n const firstTick: FrameRequestCallback = (timestamp) => {\n if (this._state !== 'pending') return;\n this.startTime = timestamp || +new Date();\n this._state = 'running';\n this._onStart();\n this.tick(this.startTime);\n };\n\n this.register();\n\n // setTimeout(cb, 0) will run cb on the next frame, causing a delay\n // we don't want that\n if (this.delay > 0) {\n setTimeout(() => requestAnimFrame(firstTick), this.delay);\n } else {\n requestAnimFrame(firstTick);\n }\n }\n\n private tick(t: number) {\n const durationMs = (t || +new Date()) - this.startTime;\n const boundDurationMs = Math.min(durationMs, this.duration);\n this.durationProgress = boundDurationMs / this.duration;\n const { value, valueProgress } = this.calculate(boundDurationMs);\n this.value = Object.freeze(value);\n this.valueProgress = valueProgress;\n\n if (this._state === 'aborted') {\n return;\n } else if (\n this._abort(this.value, this.valueProgress, this.durationProgress)\n ) {\n this._state = 'aborted';\n this.unregister();\n } else if (durationMs >= this.duration) {\n this.durationProgress = this.valueProgress = 1;\n this._onChange(this.endValue, this.valueProgress, this.durationProgress);\n this._state = 'completed';\n this._onComplete(\n this.endValue,\n this.valueProgress,\n this.durationProgress,\n );\n this.unregister();\n } else {\n this._onChange(this.value, this.valueProgress, this.durationProgress);\n requestAnimFrame(this.tick);\n }\n }\n\n private register() {\n runningAnimations.push(this as unknown as AnimationBase);\n }\n\n private unregister() {\n runningAnimations.remove(this as unknown as AnimationBase);\n }\n\n abort() {\n this._state = 'aborted';\n this.unregister();\n }\n}\n","import { AnimationBase } from './AnimationBase';\nimport type { ValueAnimationOptions } from './types';\n\nexport class ValueAnimation extends AnimationBase {\n constructor({\n startValue = 0,\n endValue = 100,\n ...otherOptions\n }: ValueAnimationOptions) {\n super({\n ...otherOptions,\n startValue,\n byValue: endValue - startValue,\n });\n }\n\n protected calculate(timeElapsed: number) {\n const value = this.easing(\n timeElapsed,\n this.startValue,\n this.byValue,\n this.duration,\n );\n return {\n value,\n valueProgress: Math.abs((value - this.startValue) / this.byValue),\n };\n }\n}\n","import { AnimationBase } from './AnimationBase';\nimport type { ArrayAnimationOptions } from './types';\n\nexport class ArrayAnimation extends AnimationBase {\n constructor({\n startValue = [0],\n endValue = [100],\n ...options\n }: ArrayAnimationOptions) {\n super({\n ...options,\n startValue,\n byValue: endValue.map((value, i) => value - startValue[i]),\n });\n }\n protected calculate(timeElapsed: number) {\n const values = this.startValue.map((value, i) =>\n this.easing(timeElapsed, value, this.byValue[i], this.duration, i),\n );\n return {\n value: values,\n valueProgress: Math.abs(\n (values[0] - this.startValue[0]) / this.byValue[0],\n ),\n };\n }\n}\n","import { Color } from '../../color/Color';\nimport type { TRGBAColorSource } from '../../color/typedefs';\nimport { halfPI } from '../../constants';\nimport { capValue } from '../misc/capValue';\nimport { AnimationBase } from './AnimationBase';\nimport type {\n ColorAnimationOptions,\n TEasingFunction,\n TOnAnimationChangeCallback,\n} from './types';\n\nconst defaultColorEasing: TEasingFunction = (\n timeElapsed,\n startValue,\n byValue,\n duration,\n) => {\n const durationProgress = 1 - Math.cos((timeElapsed / duration) * halfPI);\n return startValue + byValue * durationProgress;\n};\n\nconst wrapColorCallback = (\n callback?: TOnAnimationChangeCallback,\n) =>\n callback &&\n ((rgba: TRGBAColorSource, valueProgress: number, durationProgress: number) =>\n callback(new Color(rgba).toRgba(), valueProgress, durationProgress));\n\nexport class ColorAnimation extends AnimationBase {\n constructor({\n startValue,\n endValue,\n easing = defaultColorEasing,\n onChange,\n onComplete,\n abort,\n ...options\n }: ColorAnimationOptions) {\n const startColor = new Color(startValue).getSource();\n const endColor = new Color(endValue).getSource();\n super({\n ...options,\n startValue: startColor,\n byValue: endColor.map(\n (value, i) => value - startColor[i],\n ) as TRGBAColorSource,\n easing,\n onChange: wrapColorCallback(onChange),\n onComplete: wrapColorCallback(onComplete),\n abort: wrapColorCallback(abort),\n });\n }\n protected calculate(timeElapsed: number) {\n const [r, g, b, a] = this.startValue.map((value, i) =>\n this.easing(timeElapsed, value, this.byValue[i], this.duration, i),\n ) as TRGBAColorSource;\n const value = [\n ...[r, g, b].map(Math.round),\n capValue(0, a, 1),\n ] as TRGBAColorSource;\n return {\n value,\n valueProgress:\n // to correctly calculate the change ratio we must find a changed value\n value\n .map((p, i) =>\n this.byValue[i] !== 0\n ? Math.abs((p - this.startValue[i]) / this.byValue[i])\n : 0,\n )\n .find((p) => p !== 0) || 0,\n };\n }\n}\n","import { ValueAnimation } from './ValueAnimation';\nimport { ArrayAnimation } from './ArrayAnimation';\nimport { ColorAnimation } from './ColorAnimation';\nimport type {\n ValueAnimationOptions,\n ArrayAnimationOptions,\n ColorAnimationOptions,\n} from './types';\nimport type { TColorArg } from '../../color/typedefs';\n\nexport type TAnimation =\n T extends TColorArg\n ? ColorAnimation\n : T extends number[]\n ? ArrayAnimation\n : ValueAnimation;\n\nconst isArrayAnimation = (\n options: ArrayAnimationOptions | ValueAnimationOptions,\n): options is ArrayAnimationOptions => {\n return Array.isArray(options.startValue) || Array.isArray(options.endValue);\n};\n\n/**\n * Changes value(s) from startValue to endValue within a certain period of time,\n * invoking callbacks as the value(s) change.\n *\n * @example\n * animate({\n * startValue: 1,\n * endValue: 0,\n * onChange: (v) => {\n * obj.set('opacity', v);\n * // since we are running in a requested frame we should call `renderAll` and not `requestRenderAll`\n * canvas.renderAll();\n * }\n * });\n *\n * @example Using lists:\n * animate({\n * startValue: [1, 2, 3],\n * endValue: [2, 4, 6],\n * onChange: ([x, y, zoom]) => {\n * canvas.zoomToPoint(new Point(x, y), zoom);\n * canvas.renderAll();\n * }\n * });\n *\n */\nexport function animate(options: ArrayAnimationOptions): ArrayAnimation;\nexport function animate(options: ValueAnimationOptions): ValueAnimation;\nexport function animate<\n T extends ValueAnimationOptions | ArrayAnimationOptions,\n>(\n options: T,\n): T extends ArrayAnimationOptions ? ArrayAnimation : ValueAnimation;\nexport function animate<\n T extends ValueAnimationOptions | ArrayAnimationOptions,\n R extends T extends ArrayAnimationOptions ? ArrayAnimation : ValueAnimation,\n>(options: T): R {\n const animation = (\n isArrayAnimation(options)\n ? new ArrayAnimation(options)\n : new ValueAnimation(options)\n ) as R;\n animation.start();\n return animation;\n}\n\nexport function animateColor(options: ColorAnimationOptions) {\n const animation = new ColorAnimation(options);\n animation.start();\n return animation;\n}\n","import { Point } from './Point';\nimport { createVector } from './util/misc/vectors';\n\n/* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n\nexport type IntersectionType = 'Intersection' | 'Coincident' | 'Parallel';\n\nexport class Intersection {\n declare points: Point[];\n\n declare status?: IntersectionType;\n\n constructor(status?: IntersectionType) {\n this.status = status;\n this.points = [];\n }\n\n /**\n * Used to verify if a point is alredy in the collection\n * @param {Point} point\n * @returns {boolean}\n */\n private includes(point: Point): boolean {\n return this.points.some((p) => p.eq(point));\n }\n\n /**\n * Appends points of intersection\n * @param {...Point[]} points\n * @return {Intersection} thisArg\n * @chainable\n */\n private append(...points: Point[]): Intersection {\n this.points = this.points.concat(\n points.filter((point) => {\n return !this.includes(point);\n }),\n );\n return this;\n }\n\n /**\n * check if point T is on the segment or line defined between A and B\n *\n * @param {Point} T the point we are checking for\n * @param {Point} A one extremity of the segment\n * @param {Point} B the other extremity of the segment\n * @param [infinite] if true checks if `T` is on the line defined by `A` and `B`\n * @returns true if `T` is contained\n */\n static isPointContained(T: Point, A: Point, B: Point, infinite = false) {\n if (A.eq(B)) {\n // Edge case: the segment is a point, we check for coincidence,\n // infinite param has no meaning because there are infinite lines to consider\n return T.eq(A);\n } else if (A.x === B.x) {\n // Edge case: horizontal line.\n // we first check if T.x has the same value, and then if T.y is contained between A.y and B.y\n return (\n T.x === A.x &&\n (infinite || (T.y >= Math.min(A.y, B.y) && T.y <= Math.max(A.y, B.y)))\n );\n } else if (A.y === B.y) {\n // Edge case: vertical line.\n // we first check if T.y has the same value, and then if T.x is contained between A.x and B.x\n return (\n T.y === A.y &&\n (infinite || (T.x >= Math.min(A.x, B.x) && T.x <= Math.max(A.x, B.x)))\n );\n } else {\n // Generic case: sloped line.\n // we check that AT has the same slope as AB\n // for the segment case we need both the vectors to have the same direction and for AT to be lte AB in size\n // for the infinite case we check the absolute value of the slope, since direction is meaningless\n const AB = createVector(A, B);\n const AT = createVector(A, T);\n const s = AT.divide(AB);\n return infinite\n ? Math.abs(s.x) === Math.abs(s.y)\n : s.x === s.y && s.x >= 0 && s.x <= 1;\n }\n }\n\n /**\n * Use the ray casting algorithm to determine if {@link point} is in the polygon defined by {@link points}\n * @see https://en.wikipedia.org/wiki/Point_in_polygon\n * @param point\n * @param points polygon points\n * @returns\n */\n static isPointInPolygon(point: Point, points: Point[]) {\n const other = new Point(point).setX(\n Math.min(point.x - 1, ...points.map((p) => p.x)),\n );\n let hits = 0;\n for (let index = 0; index < points.length; index++) {\n const inter = this.intersectSegmentSegment(\n // polygon side\n points[index],\n points[(index + 1) % points.length],\n // ray\n point,\n other,\n );\n if (inter.includes(point)) {\n // point is on the polygon side\n return true;\n }\n hits += Number(inter.status === 'Intersection');\n }\n return hits % 2 === 1;\n }\n\n /**\n * Checks if a line intersects another\n * @see {@link https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection line intersection}\n * @see {@link https://en.wikipedia.org/wiki/Cramer%27s_rule Cramer's rule}\n * @static\n * @param {Point} a1\n * @param {Point} a2\n * @param {Point} b1\n * @param {Point} b2\n * @param {boolean} [aInfinite=true] check segment intersection by passing `false`\n * @param {boolean} [bInfinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLineLine(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point,\n aInfinite = true,\n bInfinite = true,\n ): Intersection {\n const a2xa1x = a2.x - a1.x,\n a2ya1y = a2.y - a1.y,\n b2xb1x = b2.x - b1.x,\n b2yb1y = b2.y - b1.y,\n a1xb1x = a1.x - b1.x,\n a1yb1y = a1.y - b1.y,\n uaT = b2xb1x * a1yb1y - b2yb1y * a1xb1x,\n ubT = a2xa1x * a1yb1y - a2ya1y * a1xb1x,\n uB = b2yb1y * a2xa1x - b2xb1x * a2ya1y;\n if (uB !== 0) {\n const ua = uaT / uB,\n ub = ubT / uB;\n if (\n (aInfinite || (0 <= ua && ua <= 1)) &&\n (bInfinite || (0 <= ub && ub <= 1))\n ) {\n return new Intersection('Intersection').append(\n new Point(a1.x + ua * a2xa1x, a1.y + ua * a2ya1y),\n );\n } else {\n return new Intersection();\n }\n } else {\n if (uaT === 0 || ubT === 0) {\n const segmentsCoincide =\n aInfinite ||\n bInfinite ||\n Intersection.isPointContained(a1, b1, b2) ||\n Intersection.isPointContained(a2, b1, b2) ||\n Intersection.isPointContained(b1, a1, a2) ||\n Intersection.isPointContained(b2, a1, a2);\n return new Intersection(segmentsCoincide ? 'Coincident' : undefined);\n } else {\n return new Intersection('Parallel');\n }\n }\n }\n\n /**\n * Checks if a segment intersects a line\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} s1 boundary point of segment\n * @param {Point} s2 other boundary point of segment\n * @param {Point} l1 point on line\n * @param {Point} l2 other point on line\n * @return {Intersection}\n */\n static intersectSegmentLine(\n s1: Point,\n s2: Point,\n l1: Point,\n l2: Point,\n ): Intersection {\n return Intersection.intersectLineLine(s1, s2, l1, l2, false, true);\n }\n\n /**\n * Checks if a segment intersects another\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point} b1 boundary point of segment\n * @param {Point} b2 other boundary point of segment\n * @return {Intersection}\n */\n static intersectSegmentSegment(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point,\n ): Intersection {\n return Intersection.intersectLineLine(a1, a2, b1, b2, false, false);\n }\n\n /**\n * Checks if line intersects polygon\n *\n * @todo account for stroke\n *\n * @static\n * @see {@link intersectSegmentPolygon} for segment intersection\n * @param {Point} a1 point on line\n * @param {Point} a2 other point on line\n * @param {Point[]} points polygon points\n * @param {boolean} [infinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLinePolygon(\n a1: Point,\n a2: Point,\n points: Point[],\n infinite = true,\n ): Intersection {\n const result = new Intersection();\n const length = points.length;\n\n for (let i = 0, b1, b2, inter; i < length; i++) {\n b1 = points[i];\n b2 = points[(i + 1) % length];\n inter = Intersection.intersectLineLine(a1, a2, b1, b2, infinite, false);\n if (inter.status === 'Coincident') {\n return inter;\n }\n result.append(...inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if segment intersects polygon\n * @static\n * @see {@link intersectLinePolygon} for line intersection\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point[]} points polygon points\n * @return {Intersection}\n */\n static intersectSegmentPolygon(\n a1: Point,\n a2: Point,\n points: Point[],\n ): Intersection {\n return Intersection.intersectLinePolygon(a1, a2, points, false);\n }\n\n /**\n * Checks if polygon intersects another polygon\n *\n * @todo account for stroke\n *\n * @static\n * @param {Point[]} points1\n * @param {Point[]} points2\n * @return {Intersection}\n */\n static intersectPolygonPolygon(\n points1: Point[],\n points2: Point[],\n ): Intersection {\n const result = new Intersection(),\n length = points1.length;\n const coincidences: Intersection[] = [];\n\n for (let i = 0; i < length; i++) {\n const a1 = points1[i],\n a2 = points1[(i + 1) % length],\n inter = Intersection.intersectSegmentPolygon(a1, a2, points2);\n if (inter.status === 'Coincident') {\n coincidences.push(inter);\n result.append(a1, a2);\n } else {\n result.append(...inter.points);\n }\n }\n\n if (coincidences.length > 0 && coincidences.length === points1.length) {\n return new Intersection('Coincident');\n } else if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if polygon intersects rectangle\n * @static\n * @see {@link intersectPolygonPolygon} for polygon intersection\n * @param {Point[]} points polygon points\n * @param {Point} r1 top left point of rect\n * @param {Point} r2 bottom right point of rect\n * @return {Intersection}\n */\n static intersectPolygonRectangle(\n points: Point[],\n r1: Point,\n r2: Point,\n ): Intersection {\n const min = r1.min(r2),\n max = r1.max(r2),\n topRight = new Point(max.x, min.y),\n bottomLeft = new Point(min.x, max.y);\n\n return Intersection.intersectPolygonPolygon(points, [\n min,\n topRight,\n max,\n bottomLeft,\n ]);\n }\n}\n","import type {\n TBBox,\n TCornerPoint,\n TDegree,\n TMat2D,\n TOriginX,\n TOriginY,\n} from '../../typedefs';\nimport { SCALE_X, SCALE_Y, iMatrix } from '../../constants';\nimport { Intersection } from '../../Intersection';\nimport { Point } from '../../Point';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport {\n createRotateMatrix,\n createTranslateMatrix,\n composeMatrix,\n invertTransform,\n multiplyTransformMatrices,\n transformPoint,\n calcPlaneRotation,\n} from '../../util/misc/matrix';\nimport { radiansToDegrees } from '../../util/misc/radiansDegreesConversion';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { StaticCanvas } from '../../canvas/StaticCanvas';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport type { ControlProps } from './types/ControlProps';\nimport { resolveOrigin } from '../../util/misc/resolveOrigin';\nimport type { Group } from '../Group';\nimport { calcDimensionsMatrix } from '../../util/misc/matrix';\nimport { sizeAfterTransform } from '../../util/misc/objectTransforms';\nimport { degreesToRadians } from '../../util/misc/radiansDegreesConversion';\nimport { CommonMethods } from '../../CommonMethods';\nimport type { BaseProps } from './types/BaseProps';\nimport type { FillStrokeProps } from './types/FillStrokeProps';\nimport { CENTER, LEFT, TOP } from '../../constants';\n\ntype TMatrixCache = {\n key: number[];\n value: TMat2D;\n};\n\ntype TACoords = TCornerPoint;\n\nexport class ObjectGeometry\n extends CommonMethods\n implements\n Pick,\n BaseProps,\n Pick\n{\n // #region Geometry\n\n declare padding: number;\n\n /**\n * Describe object's corner position in scene coordinates.\n * The coordinates are derived from the following:\n * left, top, width, height, scaleX, scaleY, skewX, skewY, angle, strokeWidth.\n * The coordinates do not depend on viewport changes.\n * The coordinates get updated with {@link setCoords}.\n * You can calculate them without updating with {@link calcACoords()}\n */\n declare aCoords: TACoords;\n\n /**\n * storage cache for object transform matrix\n */\n declare ownMatrixCache?: TMatrixCache;\n\n /**\n * storage cache for object full transform matrix\n */\n declare matrixCache?: TMatrixCache;\n\n /**\n * A Reference of the Canvas where the object is actually added\n * @type StaticCanvas | Canvas;\n * @default undefined\n * @private\n */\n declare canvas?: StaticCanvas | Canvas;\n\n /**\n * @returns {number} x position according to object's {@link originX} property in canvas coordinate plane\n */\n getX(): number {\n return this.getXY().x;\n }\n\n /**\n * @param {number} value x position according to object's {@link originX} property in canvas coordinate plane\n */\n setX(value: number) {\n this.setXY(this.getXY().setX(value));\n }\n\n /**\n * @returns {number} y position according to object's {@link originY} property in canvas coordinate plane\n */\n getY(): number {\n return this.getXY().y;\n }\n\n /**\n * @param {number} value y position according to object's {@link originY} property in canvas coordinate plane\n */\n setY(value: number) {\n this.setXY(this.getXY().setY(value));\n }\n\n /**\n * @returns {number} x position according to object's {@link originX} property in parent's coordinate plane\\\n * if parent is canvas then this property is identical to {@link getX}\n */\n getRelativeX(): number {\n return this.left;\n }\n\n /**\n * @param {number} value x position according to object's {@link originX} property in parent's coordinate plane\\\n * if parent is canvas then this method is identical to {@link setX}\n */\n setRelativeX(value: number) {\n this.left = value;\n }\n\n /**\n * @returns {number} y position according to object's {@link originY} property in parent's coordinate plane\\\n * if parent is canvas then this property is identical to {@link getY}\n */\n getRelativeY(): number {\n return this.top;\n }\n\n /**\n * @param {number} value y position according to object's {@link originY} property in parent's coordinate plane\\\n * if parent is canvas then this property is identical to {@link setY}\n */\n setRelativeY(value: number) {\n this.top = value;\n }\n\n /**\n * @returns {Point} x position according to object's {@link originX} {@link originY} properties in canvas coordinate plane\n */\n getXY(): Point {\n const relativePosition = this.getRelativeXY();\n return this.group\n ? transformPoint(relativePosition, this.group.calcTransformMatrix())\n : relativePosition;\n }\n\n /**\n * Set an object position to a particular point, the point is intended in absolute ( canvas ) coordinate.\n * You can specify {@link originX} and {@link originY} values,\n * that otherwise are the object's current values.\n * @example Set object's bottom left corner to point (5,5) on canvas\n * object.setXY(new Point(5, 5), 'left', 'bottom').\n * @param {Point} point position in scene coordinate plane\n * @param {TOriginX} [originX] Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} [originY] Vertical origin: 'top', 'center' or 'bottom'\n */\n setXY(point: Point, originX?: TOriginX, originY?: TOriginY) {\n if (this.group) {\n point = transformPoint(\n point,\n invertTransform(this.group.calcTransformMatrix()),\n );\n }\n this.setRelativeXY(point, originX, originY);\n }\n\n /**\n * @returns {Point} x,y position according to object's {@link originX} {@link originY} properties in parent's coordinate plane\n */\n getRelativeXY(): Point {\n return new Point(this.left, this.top);\n }\n\n /**\n * As {@link setXY}, but in current parent's coordinate plane (the current group if any or the canvas)\n * @param {Point} point position according to object's {@link originX} {@link originY} properties in parent's coordinate plane\n * @param {TOriginX} [originX] Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} [originY] Vertical origin: 'top', 'center' or 'bottom'\n */\n setRelativeXY(\n point: Point,\n originX: TOriginX = this.originX,\n originY: TOriginY = this.originY,\n ) {\n this.setPositionByOrigin(point, originX, originY);\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return false;\n }\n\n /**\n * @return {Point[]} [tl, tr, br, bl] in the scene plane\n */\n getCoords(): Point[] {\n const { tl, tr, br, bl } =\n this.aCoords || (this.aCoords = this.calcACoords());\n const coords = [tl, tr, br, bl];\n if (this.group) {\n const t = this.group.calcTransformMatrix();\n return coords.map((p) => transformPoint(p, t));\n }\n return coords;\n }\n\n /**\n * Checks if object intersects with the scene rect formed by {@link tl} and {@link br}\n */\n intersectsWithRect(tl: Point, br: Point): boolean {\n const intersection = Intersection.intersectPolygonRectangle(\n this.getCoords(),\n tl,\n br,\n );\n return intersection.status === 'Intersection';\n }\n\n /**\n * Checks if object intersects with another object\n * @param {Object} other Object to test\n * @return {Boolean} true if object intersects with another object\n */\n intersectsWithObject(other: ObjectGeometry): boolean {\n const intersection = Intersection.intersectPolygonPolygon(\n this.getCoords(),\n other.getCoords(),\n );\n\n return (\n intersection.status === 'Intersection' ||\n intersection.status === 'Coincident' ||\n other.isContainedWithinObject(this) ||\n this.isContainedWithinObject(other)\n );\n }\n\n /**\n * Checks if object is fully contained within area of another object\n * @param {Object} other Object to test\n * @return {Boolean} true if object is fully contained within area of another object\n */\n isContainedWithinObject(other: ObjectGeometry): boolean {\n const points = this.getCoords();\n return points.every((point) => other.containsPoint(point));\n }\n\n /**\n * Checks if object is fully contained within the scene rect formed by {@link tl} and {@link br}\n */\n isContainedWithinRect(tl: Point, br: Point): boolean {\n const { left, top, width, height } = this.getBoundingRect();\n return (\n left >= tl.x &&\n left + width <= br.x &&\n top >= tl.y &&\n top + height <= br.y\n );\n }\n\n isOverlapping(other: T): boolean {\n return (\n this.intersectsWithObject(other) ||\n this.isContainedWithinObject(other) ||\n other.isContainedWithinObject(this)\n );\n }\n\n /**\n * Checks if point is inside the object\n * @param {Point} point Point to check against\n * @return {Boolean} true if point is inside the object\n */\n containsPoint(point: Point): boolean {\n return Intersection.isPointInPolygon(point, this.getCoords());\n }\n\n /**\n * Checks if object is contained within the canvas with current viewportTransform\n * the check is done stopping at first point that appears on screen\n * @return {Boolean} true if object is fully or partially contained within canvas\n */\n isOnScreen(): boolean {\n if (!this.canvas) {\n return false;\n }\n const { tl, br } = this.canvas.vptCoords;\n const points = this.getCoords();\n // if some point is on screen, the object is on screen.\n if (\n points.some(\n (point) =>\n point.x <= br.x &&\n point.x >= tl.x &&\n point.y <= br.y &&\n point.y >= tl.y,\n )\n ) {\n return true;\n }\n // no points on screen, check intersection with absolute coordinates\n if (this.intersectsWithRect(tl, br)) {\n return true;\n }\n // check if the object is so big that it contains the entire viewport\n return this.containsPoint(tl.midPointFrom(br));\n }\n\n /**\n * Checks if object is partially contained within the canvas with current viewportTransform\n * @return {Boolean} true if object is partially contained within canvas\n */\n isPartiallyOnScreen(): boolean {\n if (!this.canvas) {\n return false;\n }\n const { tl, br } = this.canvas.vptCoords;\n if (this.intersectsWithRect(tl, br)) {\n return true;\n }\n const allPointsAreOutside = this.getCoords().every(\n (point) =>\n (point.x >= br.x || point.x <= tl.x) &&\n (point.y >= br.y || point.y <= tl.y),\n );\n // check if the object is so big that it contains the entire viewport\n return allPointsAreOutside && this.containsPoint(tl.midPointFrom(br));\n }\n\n /**\n * Returns coordinates of object's bounding rectangle (left, top, width, height)\n * the box is intended as aligned to axis of canvas.\n * @return {Object} Object with left, top, width, height properties\n */\n getBoundingRect(): TBBox {\n return makeBoundingBoxFromPoints(this.getCoords());\n }\n\n /**\n * Returns width of an object's bounding box counting transformations\n * @todo shouldn't this account for group transform and return the actual size in canvas coordinate plane?\n * @return {Number} width value\n */\n getScaledWidth(): number {\n return this._getTransformedDimensions().x;\n }\n\n /**\n * Returns height of an object bounding box counting transformations\n * @todo shouldn't this account for group transform and return the actual size in canvas coordinate plane?\n * @return {Number} height value\n */\n getScaledHeight(): number {\n return this._getTransformedDimensions().y;\n }\n\n /**\n * Scales an object (equally by x and y)\n * @param {Number} value Scale factor\n * @return {void}\n */\n scale(value: number): void {\n this._set(SCALE_X, value);\n this._set(SCALE_Y, value);\n this.setCoords();\n }\n\n /**\n * Scales an object to a given width, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New width value\n * @return {void}\n */\n scaleToWidth(value: number) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n const boundingRectFactor =\n this.getBoundingRect().width / this.getScaledWidth();\n return this.scale(value / this.width / boundingRectFactor);\n }\n\n /**\n * Scales an object to a given height, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New height value\n * @return {void}\n */\n scaleToHeight(value: number) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n const boundingRectFactor =\n this.getBoundingRect().height / this.getScaledHeight();\n return this.scale(value / this.height / boundingRectFactor);\n }\n\n getCanvasRetinaScaling() {\n return this.canvas?.getRetinaScaling() || 1;\n }\n\n /**\n * Returns the object angle relative to canvas counting also the group property\n * @returns {TDegree}\n */\n getTotalAngle(): TDegree {\n return this.group\n ? radiansToDegrees(calcPlaneRotation(this.calcTransformMatrix()))\n : this.angle;\n }\n\n /**\n * Retrieves viewportTransform from Object's canvas if available\n * @return {TMat2D}\n */\n getViewportTransform(): TMat2D {\n return this.canvas?.viewportTransform || (iMatrix.concat() as TMat2D);\n }\n\n /**\n * Calculates the coordinates of the 4 corner of the bbox, in absolute coordinates.\n * those never change with zoom or viewport changes.\n * @return {TCornerPoint}\n */\n calcACoords(): TCornerPoint {\n const rotateMatrix = createRotateMatrix({ angle: this.angle }),\n { x, y } = this.getRelativeCenterPoint(),\n tMatrix = createTranslateMatrix(x, y),\n finalMatrix = multiplyTransformMatrices(tMatrix, rotateMatrix),\n dim = this._getTransformedDimensions(),\n w = dim.x / 2,\n h = dim.y / 2;\n return {\n // corners\n tl: transformPoint({ x: -w, y: -h }, finalMatrix),\n tr: transformPoint({ x: w, y: -h }, finalMatrix),\n bl: transformPoint({ x: -w, y: h }, finalMatrix),\n br: transformPoint({ x: w, y: h }, finalMatrix),\n };\n }\n\n /**\n * Sets corner and controls position coordinates based on current angle, width and height, left and top.\n * aCoords are used to quickly find an object on the canvas.\n * See {@link https://github.com/fabricjs/fabric.js/wiki/When-to-call-setCoords} and {@link http://fabricjs.com/fabric-gotchas}\n */\n setCoords(): void {\n this.aCoords = this.calcACoords();\n }\n\n transformMatrixKey(skipGroup = false): number[] {\n let prefix: number[] = [];\n if (!skipGroup && this.group) {\n prefix = this.group.transformMatrixKey(skipGroup);\n }\n prefix.push(\n this.top,\n this.left,\n this.width,\n this.height,\n this.scaleX,\n this.scaleY,\n this.angle,\n this.strokeWidth,\n this.skewX,\n this.skewY,\n +this.flipX,\n +this.flipY,\n resolveOrigin(this.originX),\n resolveOrigin(this.originY),\n );\n\n return prefix;\n }\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties.\n * @param {Boolean} [skipGroup] return transform matrix for object not counting parent transformations\n * There are some situation in which this is useful to avoid the fake rotation.\n * @return {TMat2D} transform matrix for the object\n */\n calcTransformMatrix(skipGroup = false): TMat2D {\n let matrix = this.calcOwnMatrix();\n if (skipGroup || !this.group) {\n return matrix;\n }\n const key = this.transformMatrixKey(skipGroup),\n cache = this.matrixCache;\n if (cache && cache.key.every((x, i) => x === key[i])) {\n return cache.value;\n }\n if (this.group) {\n matrix = multiplyTransformMatrices(\n this.group.calcTransformMatrix(false),\n matrix,\n );\n }\n this.matrixCache = {\n key,\n value: matrix,\n };\n return matrix;\n }\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties, this matrix does not include the group transformation\n * @return {TMat2D} transform matrix for the object\n */\n calcOwnMatrix(): TMat2D {\n const key = this.transformMatrixKey(true),\n cache = this.ownMatrixCache;\n if (cache && cache.key === key) {\n return cache.value;\n }\n const center = this.getRelativeCenterPoint(),\n options = {\n angle: this.angle,\n translateX: center.x,\n translateY: center.y,\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n flipX: this.flipX,\n flipY: this.flipY,\n },\n value = composeMatrix(options);\n this.ownMatrixCache = {\n key,\n value,\n };\n return value;\n }\n\n /**\n * Calculate object dimensions from its properties\n * @private\n * @returns {Point} dimensions\n */\n _getNonTransformedDimensions(): Point {\n return new Point(this.width, this.height).scalarAdd(this.strokeWidth);\n }\n\n /**\n * Calculate object dimensions for controls box, including padding and canvas zoom.\n * and active selection\n * @private\n * @param {object} [options] transform options\n * @returns {Point} dimensions\n */\n _calculateCurrentDimensions(options?: any): Point {\n return this._getTransformedDimensions(options)\n .transform(this.getViewportTransform(), true)\n .scalarAdd(2 * this.padding);\n }\n\n // #region Origin\n\n declare top: number;\n declare left: number;\n declare width: number;\n declare height: number;\n declare flipX: boolean;\n declare flipY: boolean;\n declare scaleX: number;\n declare scaleY: number;\n declare skewX: number;\n declare skewY: number;\n /**\n * @deprecated please use 'center' as value in new projects\n * */\n declare originX: TOriginX;\n /**\n * @deprecated please use 'center' as value in new projects\n * */\n declare originY: TOriginY;\n declare angle: TDegree;\n declare strokeWidth: number;\n declare strokeUniform: boolean;\n\n /**\n * Object containing this object.\n * can influence its size and position\n */\n declare group?: Group;\n\n /**\n * Calculate object bounding box dimensions from its properties scale, skew.\n * This bounding box is aligned with object angle and not with canvas axis or screen.\n * @param {Object} [options]\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewY]\n * @private\n * @returns {Point} dimensions\n */\n _getTransformedDimensions(options: any = {}): Point {\n const dimOptions = {\n // if scaleX or scaleY are negative numbers,\n // this will return dimensions that are negative.\n // and this will break assumptions around the codebase\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n width: this.width,\n height: this.height,\n strokeWidth: this.strokeWidth,\n ...options,\n };\n // stroke is applied before/after transformations are applied according to `strokeUniform`\n const strokeWidth = dimOptions.strokeWidth;\n let preScalingStrokeValue = strokeWidth,\n postScalingStrokeValue = 0;\n\n if (this.strokeUniform) {\n preScalingStrokeValue = 0;\n postScalingStrokeValue = strokeWidth;\n }\n const dimX = dimOptions.width + preScalingStrokeValue,\n dimY = dimOptions.height + preScalingStrokeValue,\n noSkew = dimOptions.skewX === 0 && dimOptions.skewY === 0;\n let finalDimensions;\n if (noSkew) {\n finalDimensions = new Point(\n dimX * dimOptions.scaleX,\n dimY * dimOptions.scaleY,\n );\n } else {\n finalDimensions = sizeAfterTransform(\n dimX,\n dimY,\n calcDimensionsMatrix(dimOptions),\n );\n }\n\n return finalDimensions.scalarAdd(postScalingStrokeValue);\n }\n\n /**\n * Translates the coordinates from a set of origin to another (based on the object's dimensions)\n * @param {Point} point The point which corresponds to the originX and originY params\n * @param {TOriginX} fromOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} fromOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @param {TOriginX} toOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} toOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n translateToGivenOrigin(\n point: Point,\n fromOriginX: TOriginX,\n fromOriginY: TOriginY,\n toOriginX: TOriginX,\n toOriginY: TOriginY,\n ): Point {\n let x = point.x,\n y = point.y;\n const offsetX = resolveOrigin(toOriginX) - resolveOrigin(fromOriginX),\n offsetY = resolveOrigin(toOriginY) - resolveOrigin(fromOriginY);\n\n if (offsetX || offsetY) {\n const dim = this._getTransformedDimensions();\n x += offsetX * dim.x;\n y += offsetY * dim.y;\n }\n\n return new Point(x, y);\n }\n\n /**\n * Translates the coordinates from origin to center coordinates (based on the object's dimensions)\n * @param {Point} point The point which corresponds to the originX and originY params\n * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n translateToCenterPoint(\n point: Point,\n originX: TOriginX,\n originY: TOriginY,\n ): Point {\n if (originX === CENTER && originY === CENTER) {\n return point;\n }\n const p = this.translateToGivenOrigin(\n point,\n originX,\n originY,\n CENTER,\n CENTER,\n );\n if (this.angle) {\n return p.rotate(degreesToRadians(this.angle), point);\n }\n return p;\n }\n\n /**\n * Translates the coordinates from center to origin coordinates (based on the object's dimensions)\n * @param {Point} center The point which corresponds to center of the object\n * @param {OriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {OriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n translateToOriginPoint(\n center: Point,\n originX: TOriginX,\n originY: TOriginY,\n ): Point {\n const p = this.translateToGivenOrigin(\n center,\n CENTER,\n CENTER,\n originX,\n originY,\n );\n if (this.angle) {\n return p.rotate(degreesToRadians(this.angle), center);\n }\n return p;\n }\n\n /**\n * Returns the center coordinates of the object relative to canvas\n * @return {Point}\n */\n getCenterPoint(): Point {\n const relCenter = this.getRelativeCenterPoint();\n return this.group\n ? transformPoint(relCenter, this.group.calcTransformMatrix())\n : relCenter;\n }\n\n /**\n * Returns the center coordinates of the object relative to it's parent\n * @return {Point}\n */\n getRelativeCenterPoint(): Point {\n return this.translateToCenterPoint(\n new Point(this.left, this.top),\n this.originX,\n this.originY,\n );\n }\n\n /**\n * Returns the position of the object as if it has a different origin.\n * Take an object that has left, top set to 100, 100 with origin 'left', 'top'.\n * Return the values of left top ( wrapped in a point ) that you would need to keep\n * the same position if origin where different.\n * Alternatively you can use this to also find which point in the parent plane is a specific origin\n * ( where is the bottom right corner of my object? )\n * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {Point}\n */\n getPointByOrigin(originX: TOriginX, originY: TOriginY): Point {\n return this.translateToOriginPoint(\n this.getRelativeCenterPoint(),\n originX,\n originY,\n );\n }\n\n /**\n * Sets the position of the object taking into consideration the object's origin\n * @param {Point} pos The new position of the object\n * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {void}\n */\n setPositionByOrigin(pos: Point, originX: TOriginX, originY: TOriginY) {\n const center = this.translateToCenterPoint(pos, originX, originY),\n position = this.translateToOriginPoint(\n center,\n this.originX,\n this.originY,\n );\n this.set({ left: position.x, top: position.y });\n }\n\n /**\n * @private\n */\n _getLeftTopCoords() {\n return this.translateToOriginPoint(\n this.getRelativeCenterPoint(),\n LEFT,\n TOP,\n );\n }\n}\n","import { cache } from '../../cache';\nimport { config } from '../../config';\nimport {\n ALIASING_LIMIT,\n CENTER,\n iMatrix,\n LEFT,\n SCALE_X,\n SCALE_Y,\n STROKE,\n FILL,\n TOP,\n VERSION,\n} from '../../constants';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport { Shadow } from '../../Shadow';\nimport type {\n TDegree,\n TFiller,\n TSize,\n TCacheCanvasDimensions,\n Abortable,\n TOptions,\n ImageFormat,\n} from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { runningAnimations } from '../../util/animation/AnimationRegistry';\nimport { capValue } from '../../util/misc/capValue';\nimport {\n createCanvasElement,\n createCanvasElementFor,\n toDataURL,\n} from '../../util/misc/dom';\nimport { invertTransform, qrDecompose } from '../../util/misc/matrix';\nimport { enlivenObjectEnlivables } from '../../util/misc/objectEnlive';\nimport {\n resetObjectTransform,\n saveObjectTransform,\n} from '../../util/misc/objectTransforms';\nimport { sendObjectToPlane } from '../../util/misc/planeChange';\nimport { pick, pickBy } from '../../util/misc/pick';\nimport { toFixed } from '../../util/misc/toFixed';\nimport type { Group } from '../Group';\nimport { StaticCanvas } from '../../canvas/StaticCanvas';\nimport {\n isFiller,\n isSerializableFiller,\n isTextObject,\n} from '../../util/typeAssertions';\nimport type { FabricImage } from '../Image';\nimport {\n cacheProperties,\n fabricObjectDefaultValues,\n stateProperties,\n} from './defaultValues';\nimport type { Gradient } from '../../gradient/Gradient';\nimport type { Pattern } from '../../Pattern';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { SerializedObjectProps } from './types/SerializedObjectProps';\nimport type { ObjectProps } from './types/ObjectProps';\nimport { getDevicePixelRatio, getEnv } from '../../env';\nimport { log } from '../../util/internals/console';\nimport type { TColorArg } from '../../color/typedefs';\nimport type { TAnimation } from '../../util/animation/animate';\nimport { animate, animateColor } from '../../util/animation/animate';\nimport type {\n AnimationOptions,\n ArrayAnimationOptions,\n ColorAnimationOptions,\n ValueAnimationOptions,\n} from '../../util/animation/types';\nimport { ObjectGeometry } from './ObjectGeometry';\n\ntype TAncestor = FabricObject;\ntype TCollection = Group;\n\nexport type Ancestors =\n | [FabricObject | Group]\n | [FabricObject | Group, ...Group[]]\n | Group[];\n\nexport type AncestryComparison = {\n /**\n * common ancestors of `this` and`other`(may include`this` | `other`)\n */\n common: Ancestors;\n /**\n * ancestors that are of `this` only\n */\n fork: Ancestors;\n /**\n * ancestors that are of `other` only\n */\n otherFork: Ancestors;\n};\n\nexport type TCachedFabricObject = T &\n Required<\n Pick<\n T,\n | 'zoomX'\n | 'zoomY'\n | '_cacheCanvas'\n | '_cacheContext'\n | 'cacheTranslationX'\n | 'cacheTranslationY'\n >\n > & {\n _cacheContext: CanvasRenderingContext2D;\n };\n\nexport type ObjectToCanvasElementOptions = {\n format?: ImageFormat;\n /** Multiplier to scale by */\n multiplier?: number;\n /** Cropping left offset. Introduced in v1.2.14 */\n left?: number;\n /** Cropping top offset. Introduced in v1.2.14 */\n top?: number;\n /** Cropping width. Introduced in v1.2.14 */\n width?: number;\n /** Cropping height. Introduced in v1.2.14 */\n height?: number;\n /** Enable retina scaling for clone image. Introduce in 1.6.4 */\n enableRetinaScaling?: boolean;\n /** Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4 */\n withoutTransform?: boolean;\n /** Remove current object shadow. Introduced in 2.4.2 */\n withoutShadow?: boolean;\n /** Account for canvas viewport transform */\n viewportTransform?: boolean;\n /** Function to create the output canvas to export onto */\n canvasProvider?: (el?: HTMLCanvasElement) => T;\n};\n\ntype toDataURLOptions = ObjectToCanvasElementOptions & {\n quality?: number;\n};\n\nexport type DrawContext =\n | {\n parentClipPaths: FabricObject[];\n width: number;\n height: number;\n cacheTranslationX: number;\n cacheTranslationY: number;\n zoomX: number;\n zoomY: number;\n }\n | Record;\n\n/**\n * Root object class from which all 2d shape classes inherit from\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#objects}\n *\n * @fires added\n * @fires removed\n *\n * @fires selected\n * @fires deselected\n *\n * @fires rotating\n * @fires scaling\n * @fires moving\n * @fires skewing\n * @fires modified\n *\n * @fires mousedown\n * @fires mouseup\n * @fires mouseover\n * @fires mouseout\n * @fires mousewheel\n * @fires mousedblclick\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop\n */\nexport class FabricObject<\n Props extends TOptions = Partial,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends ObjectGeometry\n implements ObjectProps\n{\n declare minScaleLimit: number;\n\n declare opacity: number;\n\n declare paintFirst: 'fill' | 'stroke';\n declare fill: string | TFiller | null;\n declare fillRule: CanvasFillRule;\n declare stroke: string | TFiller | null;\n declare strokeDashArray: number[] | null;\n declare strokeDashOffset: number;\n declare strokeLineCap: CanvasLineCap;\n declare strokeLineJoin: CanvasLineJoin;\n declare strokeMiterLimit: number;\n\n declare globalCompositeOperation: GlobalCompositeOperation;\n declare backgroundColor: string;\n\n declare shadow: Shadow | null;\n\n declare visible: boolean;\n\n declare includeDefaultValues: boolean;\n declare excludeFromExport: boolean;\n\n declare objectCaching: boolean;\n\n declare clipPath?: FabricObject;\n declare inverted: boolean;\n declare absolutePositioned: boolean;\n declare centeredRotation: boolean;\n declare centeredScaling: boolean;\n\n /**\n * This list of properties is used to check if the state of an object is changed.\n * This state change now is only used for children of groups to understand if a group\n * needs its cache regenerated during a .set call\n * @type Array\n */\n static stateProperties: string[] = stateProperties;\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * Those properties are checked by\n * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n * and refreshed at the next render\n * @type Array\n */\n static cacheProperties: string[] = cacheProperties;\n\n /**\n * When set to `true`, object's cache will be rerendered next render call.\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n declare dirty: boolean;\n\n /**\n * Quick access for the _cacheCanvas rendering context\n * This is part of the objectCaching feature\n * since 1.7.0\n * @type boolean\n * @default undefined\n * @private\n */\n _cacheContext: CanvasRenderingContext2D | null = null;\n\n /**\n * A reference to the HTMLCanvasElement that is used to contain the cache of the object\n * this canvas element is resized and cleared as needed\n * Is marked private, you can read it, don't use it since it is handled by fabric\n * since 1.7.0\n * @type HTMLCanvasElement\n * @default undefined\n * @private\n */\n declare _cacheCanvas?: HTMLCanvasElement;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, X axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare zoomX?: number;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, Y axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare zoomY?: number;\n\n /**\n * zoom level used on the cacheCanvas to draw the cache, Y axe\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare cacheTranslationX?: number;\n\n /**\n * translation of the cacheCanvas away from the center, for subpixel accuracy and crispness\n * since 1.7.0\n * @type number\n * @default undefined\n * @private\n */\n declare cacheTranslationY?: number;\n\n /**\n * A reference to the parent of the object, usually a Group\n * @type number\n * @default undefined\n * @private\n */\n declare group?: Group;\n\n /**\n * Indicate if the object is sitting on a cache dedicated to it\n * or is part of a larger cache for many object ( a group for example)\n * @type number\n * @default undefined\n * @private\n */\n declare ownCaching?: boolean;\n\n /**\n * Private. indicates if the object inside a group is on a transformed context or not\n * or is part of a larger cache for many object ( a group for example)\n * @type boolean\n * @default undefined\n * @private\n */\n declare _transformDone?: boolean;\n\n static ownDefaults = fabricObjectDefaultValues;\n\n static getDefaults(): Record {\n return FabricObject.ownDefaults;\n }\n\n /**\n * The class type.\n * This is used for serialization and deserialization purposes and internally it can be used\n * to identify classes.\n * When we transform a class in a plain JS object we need a way to recognize which class it was,\n * and the type is the way we do that. It has no other purposes and you should not give one.\n * Hard to reach on instances and please do not use to drive instance's logic (this.constructor.type).\n * To idenfity a class use instanceof class ( instanceof Rect ).\n * We do not do that in fabricJS code because we want to try to have code splitting possible.\n */\n static type = 'FabricObject';\n\n /**\n * Legacy identifier of the class. Prefer using utils like isType or instanceOf\n * Will be removed in fabric 7 or 8.\n * The setter exists to avoid type errors in old code and possibly current deserialization code.\n * DO NOT build new code around this type value\n * @TODO add sustainable warning message\n * @type string\n * @deprecated\n */\n get type() {\n const name = (this.constructor as typeof FabricObject).type;\n if (name === 'FabricObject') {\n return 'object';\n }\n return name.toLowerCase();\n }\n\n set type(value) {\n log('warn', 'Setting type has no effect', value);\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, FabricObject.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * Create a the canvas used to keep the cached copy of the object\n * @private\n */\n _createCacheCanvas() {\n this._cacheCanvas = createCanvasElement();\n this._cacheContext = this._cacheCanvas.getContext('2d');\n this._updateCacheCanvas();\n // if canvas gets created, is empty, so dirty.\n this.dirty = true;\n }\n\n /**\n * Limit the cache dimensions so that X * Y do not cross config.perfLimitSizeTotal\n * and each side do not cross fabric.cacheSideLimit\n * those numbers are configurable so that you can get as much detail as you want\n * making bargain with performances.\n * @param {Object} dims\n * @param {Object} dims.width width of canvas\n * @param {Object} dims.height height of canvas\n * @param {Object} dims.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @param {Object} dims.zoomY zoomY zoom value to unscale the canvas before drawing cache\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _limitCacheSize(\n dims: TSize & { zoomX: number; zoomY: number; capped: boolean } & any,\n ) {\n const width = dims.width,\n height = dims.height,\n max = config.maxCacheSideLimit,\n min = config.minCacheSideLimit;\n if (\n width <= max &&\n height <= max &&\n width * height <= config.perfLimitSizeTotal\n ) {\n if (width < min) {\n dims.width = min;\n }\n if (height < min) {\n dims.height = min;\n }\n return dims;\n }\n const ar = width / height,\n [limX, limY] = cache.limitDimsByArea(ar),\n x = capValue(min, limX, max),\n y = capValue(min, limY, max);\n if (width > x) {\n dims.zoomX /= width / x;\n dims.width = x;\n dims.capped = true;\n }\n if (height > y) {\n dims.zoomY /= height / y;\n dims.height = y;\n dims.capped = true;\n }\n return dims;\n }\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @return {Object}.x width of object to be cached\n * @return {Object}.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions(): TCacheCanvasDimensions {\n const objectScale = this.getTotalObjectScaling(),\n // calculate dimensions without skewing\n dim = this._getTransformedDimensions({ skewX: 0, skewY: 0 }),\n neededX = (dim.x * objectScale.x) / this.scaleX,\n neededY = (dim.y * objectScale.y) / this.scaleY;\n return {\n // for sure this ALIASING_LIMIT is slightly creating problem\n // in situation in which the cache canvas gets an upper limit\n // also objectScale contains already scaleX and scaleY\n width: neededX + ALIASING_LIMIT,\n height: neededY + ALIASING_LIMIT,\n zoomX: objectScale.x,\n zoomY: objectScale.y,\n x: neededX,\n y: neededY,\n };\n }\n\n /**\n * Update width and height of the canvas for cache\n * returns true or false if canvas needed resize.\n * @private\n * @return {Boolean} true if the canvas has been resized\n */\n _updateCacheCanvas() {\n const canvas = this._cacheCanvas!,\n context = this._cacheContext,\n dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n minCacheSize = config.minCacheSideLimit,\n width = dims.width,\n height = dims.height,\n zoomX = dims.zoomX,\n zoomY = dims.zoomY,\n dimensionsChanged = width !== canvas.width || height !== canvas.height,\n zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY;\n\n if (!canvas || !context) {\n return false;\n }\n\n let drawingWidth,\n drawingHeight,\n shouldRedraw = dimensionsChanged || zoomChanged,\n additionalWidth = 0,\n additionalHeight = 0,\n shouldResizeCanvas = false;\n\n if (dimensionsChanged) {\n const canvasWidth = (this._cacheCanvas as HTMLCanvasElement).width,\n canvasHeight = (this._cacheCanvas as HTMLCanvasElement).height,\n sizeGrowing = width > canvasWidth || height > canvasHeight,\n sizeShrinking =\n (width < canvasWidth * 0.9 || height < canvasHeight * 0.9) &&\n canvasWidth > minCacheSize &&\n canvasHeight > minCacheSize;\n shouldResizeCanvas = sizeGrowing || sizeShrinking;\n if (\n sizeGrowing &&\n !dims.capped &&\n (width > minCacheSize || height > minCacheSize)\n ) {\n additionalWidth = width * 0.1;\n additionalHeight = height * 0.1;\n }\n }\n if (isTextObject(this) && this.path) {\n shouldRedraw = true;\n shouldResizeCanvas = true;\n // IMHO in those lines we are using zoomX and zoomY not the this version.\n additionalWidth += this.getHeightOfLine(0) * this.zoomX!;\n additionalHeight += this.getHeightOfLine(0) * this.zoomY!;\n }\n if (shouldRedraw) {\n if (shouldResizeCanvas) {\n canvas.width = Math.ceil(width + additionalWidth);\n canvas.height = Math.ceil(height + additionalHeight);\n } else {\n context.setTransform(1, 0, 0, 1, 0, 0);\n context.clearRect(0, 0, canvas.width, canvas.height);\n }\n drawingWidth = dims.x / 2;\n drawingHeight = dims.y / 2;\n this.cacheTranslationX =\n Math.round(canvas.width / 2 - drawingWidth) + drawingWidth;\n this.cacheTranslationY =\n Math.round(canvas.height / 2 - drawingHeight) + drawingHeight;\n context.translate(this.cacheTranslationX, this.cacheTranslationY);\n context.scale(zoomX, zoomY);\n this.zoomX = zoomX;\n this.zoomY = zoomY;\n return true;\n }\n return false;\n }\n\n /**\n * Sets object's properties from options, for class constructor only.\n * Needs to be overridden for different defaults.\n * @protected\n * @param {Object} [options] Options object\n */\n protected setOptions(options: Record = {}) {\n this._setOptions(options);\n }\n\n /**\n * Transforms context when rendering an object\n * @param {CanvasRenderingContext2D} ctx Context\n */\n transform(ctx: CanvasRenderingContext2D) {\n const needFullTransform =\n (this.group && !this.group._transformDone) ||\n (this.group && this.canvas && ctx === (this.canvas as Canvas).contextTop);\n const m = this.calcTransformMatrix(!needFullTransform);\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n\n /**\n * Return the object scale factor counting also the group scaling\n * @return {Point}\n */\n getObjectScaling() {\n // if the object is a top level one, on the canvas, we go for simple aritmetic\n // otherwise the complex method with angles will return approximations and decimals\n // and will likely kill the cache when not needed\n // https://github.com/fabricjs/fabric.js/issues/7157\n if (!this.group) {\n return new Point(Math.abs(this.scaleX), Math.abs(this.scaleY));\n }\n // if we are inside a group total zoom calculation is complex, we defer to generic matrices\n const options = qrDecompose(this.calcTransformMatrix());\n return new Point(Math.abs(options.scaleX), Math.abs(options.scaleY));\n }\n\n /**\n * Return the object scale factor counting also the group scaling, zoom and retina\n * @return {Object} object with scaleX and scaleY properties\n */\n getTotalObjectScaling() {\n const scale = this.getObjectScaling();\n if (this.canvas) {\n const zoom = this.canvas.getZoom();\n const retina = this.getCanvasRetinaScaling();\n return scale.scalarMultiply(zoom * retina);\n }\n return scale;\n }\n\n /**\n * Return the object opacity counting also the group property\n * @return {Number}\n */\n getObjectOpacity() {\n let opacity = this.opacity;\n if (this.group) {\n opacity *= this.group.getObjectOpacity();\n }\n return opacity;\n }\n\n /**\n * Makes sure the scale is valid and modifies it if necessary\n * @todo: this is a control action issue, not a geometry one\n * @private\n * @param {Number} value, unconstrained\n * @return {Number} constrained value;\n */\n _constrainScale(value: number): number {\n if (Math.abs(value) < this.minScaleLimit) {\n if (value < 0) {\n return -this.minScaleLimit;\n } else {\n return this.minScaleLimit;\n }\n } else if (value === 0) {\n return 0.0001;\n }\n return value;\n }\n\n /**\n * Handles setting values on the instance and handling internal side effects\n * @protected\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n if (key === SCALE_X || key === SCALE_Y) {\n value = this._constrainScale(value);\n }\n if (key === SCALE_X && value < 0) {\n this.flipX = !this.flipX;\n value *= -1;\n } else if (key === 'scaleY' && value < 0) {\n this.flipY = !this.flipY;\n value *= -1;\n // i don't like this automatic initialization here\n } else if (key === 'shadow' && value && !(value instanceof Shadow)) {\n value = new Shadow(value);\n }\n\n const isChanged = this[key as keyof this] !== value;\n this[key as keyof this] = value;\n\n // invalidate caches\n if (\n isChanged &&\n (this.constructor as typeof FabricObject).cacheProperties.includes(key)\n ) {\n this.dirty = true;\n }\n // a dirty child makes the parent dirty.\n // but a non dirty child does not make the parent not dirty.\n // the parent could be dirty for some other reason.\n this.parent &&\n (this.dirty ||\n (isChanged &&\n (this.constructor as typeof FabricObject).stateProperties.includes(\n key,\n ))) &&\n this.parent._set('dirty', true);\n\n return this;\n }\n\n /*\n * @private\n * return if the object would be visible in rendering\n * @memberOf FabricObject.prototype\n * @return {Boolean}\n */\n isNotVisible() {\n return (\n this.opacity === 0 ||\n (!this.width && !this.height && this.strokeWidth === 0) ||\n !this.visible\n );\n }\n\n /**\n * Renders an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n // do not render if width/height are zeros or object is not visible\n if (this.isNotVisible()) {\n return;\n }\n if (\n this.canvas &&\n this.canvas.skipOffscreen &&\n !this.group &&\n !this.isOnScreen()\n ) {\n return;\n }\n ctx.save();\n this._setupCompositeOperation(ctx);\n this.drawSelectionBackground(ctx);\n this.transform(ctx);\n this._setOpacity(ctx);\n this._setShadow(ctx);\n if (this.shouldCache()) {\n (this as TCachedFabricObject).renderCache();\n (this as TCachedFabricObject).drawCacheOnCanvas(ctx);\n } else {\n this._removeCacheCanvas();\n this.drawObject(ctx, false, {});\n this.dirty = false;\n }\n ctx.restore();\n }\n\n drawSelectionBackground(_ctx: CanvasRenderingContext2D) {\n /* no op */\n }\n\n renderCache(this: TCachedFabricObject, options?: any) {\n options = options || {};\n if (!this._cacheCanvas || !this._cacheContext) {\n this._createCacheCanvas();\n }\n if (this.isCacheDirty() && this._cacheContext) {\n const { zoomX, zoomY, cacheTranslationX, cacheTranslationY } = this;\n const { width, height } = this._cacheCanvas;\n this.drawObject(this._cacheContext, options.forClipping, {\n zoomX,\n zoomY,\n cacheTranslationX,\n cacheTranslationY,\n width,\n height,\n parentClipPaths: [],\n });\n this.dirty = false;\n }\n }\n\n /**\n * Remove cacheCanvas and its dimensions from the objects\n */\n _removeCacheCanvas() {\n this._cacheCanvas = undefined;\n this._cacheContext = null;\n }\n\n /**\n * return true if the object will draw a stroke\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when stroke happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the stroke is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasStroke() {\n return (\n this.stroke && this.stroke !== 'transparent' && this.strokeWidth !== 0\n );\n }\n\n /**\n * return true if the object will draw a fill\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when fill happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the fill is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasFill() {\n return this.fill && this.fill !== 'transparent';\n }\n\n /**\n * When set to `true`, force the object to have its own cache, even if it is inside a group\n * it may be needed when your object behave in a particular way on the cache and always needs\n * its own isolated canvas to render correctly.\n * Created to be overridden\n * since 1.7.12\n * @returns Boolean\n */\n needsItsOwnCache() {\n if (\n this.paintFirst === STROKE &&\n this.hasFill() &&\n this.hasStroke() &&\n !!this.shadow\n ) {\n return true;\n }\n if (this.clipPath) {\n return true;\n }\n return false;\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * Read as: cache if is needed, or if the feature is enabled but we are not already caching.\n * @return {Boolean}\n */\n shouldCache() {\n this.ownCaching =\n this.needsItsOwnCache() ||\n (this.objectCaching && (!this.parent || !this.parent.isOnACache()));\n return this.ownCaching;\n }\n\n /**\n * Check if this object will cast a shadow with an offset.\n * used by Group.shouldCache to know if child has a shadow recursively\n * @return {Boolean}\n * @deprecated\n */\n willDrawShadow() {\n return (\n !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0)\n );\n }\n\n /**\n * Execute the drawing operation for an object clipPath\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {FabricObject} clipPath\n */\n drawClipPathOnCache(\n ctx: CanvasRenderingContext2D,\n clipPath: FabricObject,\n canvasWithClipPath: HTMLCanvasElement,\n ) {\n ctx.save();\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4\n if (clipPath.inverted) {\n ctx.globalCompositeOperation = 'destination-out';\n } else {\n ctx.globalCompositeOperation = 'destination-in';\n }\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n //ctx.scale(1 / 2, 1 / 2);\n ctx.drawImage(canvasWithClipPath, 0, 0);\n ctx.restore();\n }\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {boolean} forClipping apply clipping styles\n * @param {DrawContext} context additional context for rendering\n */\n drawObject(\n ctx: CanvasRenderingContext2D,\n forClipping: boolean | undefined,\n context: DrawContext,\n ) {\n const originalFill = this.fill,\n originalStroke = this.stroke;\n if (forClipping) {\n this.fill = 'black';\n this.stroke = '';\n this._setClippingProperties(ctx);\n } else {\n this._renderBackground(ctx);\n }\n this._render(ctx);\n this._drawClipPath(ctx, this.clipPath, context);\n this.fill = originalFill;\n this.stroke = originalStroke;\n }\n\n private createClipPathLayer(\n this: TCachedFabricObject,\n clipPath: FabricObject,\n context: DrawContext,\n ) {\n const canvas = createCanvasElementFor(context as TSize);\n const ctx = canvas.getContext('2d')!;\n ctx.translate(context.cacheTranslationX, context.cacheTranslationY);\n ctx.scale(context.zoomX, context.zoomY);\n clipPath._cacheCanvas = canvas;\n context.parentClipPaths.forEach((prevClipPath) => {\n prevClipPath.transform(ctx);\n });\n context.parentClipPaths.push(clipPath);\n if (clipPath.absolutePositioned) {\n const m = invertTransform(this.calcTransformMatrix());\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n clipPath.transform(ctx);\n clipPath.drawObject(ctx, true, context);\n return canvas;\n }\n\n /**\n * Prepare clipPath state and cache and draw it on instance's cache\n * @param {CanvasRenderingContext2D} ctx\n * @param {FabricObject} clipPath\n */\n _drawClipPath(\n ctx: CanvasRenderingContext2D,\n clipPath: FabricObject | undefined,\n context: DrawContext,\n ) {\n if (!clipPath) {\n return;\n }\n // needed to setup _transformDone\n // TODO find a better solution?\n clipPath._transformDone = true;\n const canvas = (this as TCachedFabricObject).createClipPathLayer(\n clipPath,\n context,\n );\n this.drawClipPathOnCache(ctx, clipPath, canvas);\n }\n\n /**\n * Paint the cached copy of the object on the target context.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas(this: TCachedFabricObject, ctx: CanvasRenderingContext2D) {\n ctx.scale(1 / this.zoomX, 1 / this.zoomY);\n ctx.drawImage(\n this._cacheCanvas,\n -this.cacheTranslationX,\n -this.cacheTranslationY,\n );\n }\n\n /**\n * Check if cache is dirty\n * @param {Boolean} skipCanvas skip canvas checks because this object is painted\n * on parent canvas.\n */\n isCacheDirty(skipCanvas = false) {\n if (this.isNotVisible()) {\n return false;\n }\n const canvas = this._cacheCanvas;\n const ctx = this._cacheContext;\n if (canvas && ctx && !skipCanvas && this._updateCacheCanvas()) {\n // in this case the context is already cleared.\n return true;\n } else {\n if (this.dirty || (this.clipPath && this.clipPath.absolutePositioned)) {\n if (canvas && ctx && !skipCanvas) {\n ctx.save();\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n }\n return true;\n }\n }\n return false;\n }\n\n /**\n * Draws a background for the object big as its untransformed dimensions\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground(ctx: CanvasRenderingContext2D) {\n if (!this.backgroundColor) {\n return;\n }\n const dim = this._getNonTransformedDimensions();\n ctx.fillStyle = this.backgroundColor;\n\n ctx.fillRect(-dim.x / 2, -dim.y / 2, dim.x, dim.y);\n // if there is background color no other shadows\n // should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setOpacity(ctx: CanvasRenderingContext2D) {\n if (this.group && !this.group._transformDone) {\n ctx.globalAlpha = this.getObjectOpacity();\n } else {\n ctx.globalAlpha *= this.opacity;\n }\n }\n\n _setStrokeStyles(\n ctx: CanvasRenderingContext2D,\n decl: Pick<\n this,\n | 'stroke'\n | 'strokeWidth'\n | 'strokeLineCap'\n | 'strokeDashOffset'\n | 'strokeLineJoin'\n | 'strokeMiterLimit'\n >,\n ) {\n const stroke = decl.stroke;\n if (stroke) {\n ctx.lineWidth = decl.strokeWidth;\n ctx.lineCap = decl.strokeLineCap;\n ctx.lineDashOffset = decl.strokeDashOffset;\n ctx.lineJoin = decl.strokeLineJoin;\n ctx.miterLimit = decl.strokeMiterLimit;\n if (isFiller(stroke)) {\n if (\n (stroke as Gradient<'linear'>).gradientUnits === 'percentage' ||\n (stroke as Gradient<'linear'>).gradientTransform ||\n (stroke as Pattern).patternTransform\n ) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n this._applyPatternForTransformedGradient(ctx, stroke);\n } else {\n // is a simple gradient or pattern\n ctx.strokeStyle = stroke.toLive(ctx)!;\n this._applyPatternGradientTransform(ctx, stroke);\n }\n } else {\n // is a color\n ctx.strokeStyle = decl.stroke as string;\n }\n }\n }\n\n _setFillStyles(ctx: CanvasRenderingContext2D, { fill }: Pick) {\n if (fill) {\n if (isFiller(fill)) {\n ctx.fillStyle = fill.toLive(ctx)!;\n this._applyPatternGradientTransform(ctx, fill);\n } else {\n ctx.fillStyle = fill;\n }\n }\n }\n\n _setClippingProperties(ctx: CanvasRenderingContext2D) {\n ctx.globalAlpha = 1;\n ctx.strokeStyle = 'transparent';\n ctx.fillStyle = '#000000';\n }\n\n /**\n * @private\n * Sets line dash\n * @param {CanvasRenderingContext2D} ctx Context to set the dash line on\n * @param {Array} dashArray array representing dashes\n */\n _setLineDash(ctx: CanvasRenderingContext2D, dashArray?: number[] | null) {\n if (!dashArray || dashArray.length === 0) {\n return;\n }\n // Spec requires the concatenation of two copies of the dash array when the number of elements is odd\n if (1 & dashArray.length) {\n dashArray.push(...dashArray);\n }\n ctx.setLineDash(dashArray);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setShadow(ctx: CanvasRenderingContext2D) {\n if (!this.shadow) {\n return;\n }\n\n const shadow = this.shadow,\n canvas = this.canvas,\n retinaScaling = this.getCanvasRetinaScaling(),\n [sx, , , sy] = canvas?.viewportTransform || iMatrix,\n multX = sx * retinaScaling,\n multY = sy * retinaScaling,\n scaling = shadow.nonScaling ? new Point(1, 1) : this.getObjectScaling();\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur =\n (shadow.blur *\n config.browserShadowBlurConstant *\n (multX + multY) *\n (scaling.x + scaling.y)) /\n 4;\n ctx.shadowOffsetX = shadow.offsetX * multX * scaling.x;\n ctx.shadowOffsetY = shadow.offsetY * multY * scaling.y;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _removeShadow(ctx: CanvasRenderingContext2D) {\n if (!this.shadow) {\n return;\n }\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {TFiller} filler {@link Pattern} or {@link Gradient}\n */\n _applyPatternGradientTransform(\n ctx: CanvasRenderingContext2D,\n filler: TFiller,\n ) {\n if (!isFiller(filler)) {\n return { offsetX: 0, offsetY: 0 };\n }\n const t =\n (filler as Gradient<'linear'>).gradientTransform ||\n (filler as Pattern).patternTransform;\n const offsetX = -this.width / 2 + filler.offsetX || 0,\n offsetY = -this.height / 2 + filler.offsetY || 0;\n\n if ((filler as Gradient<'linear'>).gradientUnits === 'percentage') {\n ctx.transform(this.width, 0, 0, this.height, offsetX, offsetY);\n } else {\n ctx.transform(1, 0, 0, 1, offsetX, offsetY);\n }\n if (t) {\n ctx.transform(t[0], t[1], t[2], t[3], t[4], t[5]);\n }\n return { offsetX: offsetX, offsetY: offsetY };\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderPaintInOrder(ctx: CanvasRenderingContext2D) {\n if (this.paintFirst === STROKE) {\n this._renderStroke(ctx);\n this._renderFill(ctx);\n } else {\n this._renderFill(ctx);\n this._renderStroke(ctx);\n }\n }\n\n /**\n * @private\n * function that actually render something on the context.\n * empty here to allow Obects to work on tests to benchmark fabric functionalites\n * not related to rendering\n * @param {CanvasRenderingContext2D} _ctx Context to render on\n */\n _render(_ctx: CanvasRenderingContext2D) {\n // placeholder to be overridden\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderFill(ctx: CanvasRenderingContext2D) {\n if (!this.fill) {\n return;\n }\n\n ctx.save();\n this._setFillStyles(ctx, this);\n if (this.fillRule === 'evenodd') {\n ctx.fill('evenodd');\n } else {\n ctx.fill();\n }\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderStroke(ctx: CanvasRenderingContext2D) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n if (this.strokeUniform) {\n const scaling = this.getObjectScaling();\n ctx.scale(1 / scaling.x, 1 / scaling.y);\n }\n this._setLineDash(ctx, this.strokeDashArray);\n this._setStrokeStyles(ctx, this);\n ctx.stroke();\n ctx.restore();\n }\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Gradient} filler\n */\n _applyPatternForTransformedGradient(\n ctx: CanvasRenderingContext2D,\n filler: TFiller,\n ) {\n const dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n retinaScaling = this.getCanvasRetinaScaling(),\n width = dims.x / this.scaleX / retinaScaling,\n height = dims.y / this.scaleY / retinaScaling,\n pCanvas = createCanvasElementFor({\n // in case width and height are less than 1px, we have to round up.\n // since the pattern is no-repeat, this is fine\n width: Math.ceil(width),\n height: Math.ceil(height),\n });\n\n const pCtx = pCanvas.getContext('2d');\n if (!pCtx) {\n return;\n }\n pCtx.beginPath();\n pCtx.moveTo(0, 0);\n pCtx.lineTo(width, 0);\n pCtx.lineTo(width, height);\n pCtx.lineTo(0, height);\n pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.scale(\n dims.zoomX / this.scaleX / retinaScaling,\n dims.zoomY / this.scaleY / retinaScaling,\n );\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fillStyle = filler.toLive(ctx)!;\n pCtx.fill();\n ctx.translate(\n -this.width / 2 - this.strokeWidth / 2,\n -this.height / 2 - this.strokeWidth / 2,\n );\n ctx.scale(\n (retinaScaling * this.scaleX) / dims.zoomX,\n (retinaScaling * this.scaleY) / dims.zoomY,\n );\n ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat') ?? '';\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement() {\n return new Point(this.left + this.width / 2, this.top + this.height / 2);\n }\n\n /**\n * Clones an instance.\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @returns {Promise}\n */\n clone(propertiesToInclude?: string[]): Promise {\n const objectForm = this.toObject(propertiesToInclude);\n return (this.constructor as typeof FabricObject).fromObject(\n objectForm,\n ) as unknown as Promise;\n }\n\n /**\n * Creates an instance of Image out of an object\n * makes use of toCanvasElement.\n * Once this method was based on toDataUrl and loadImage, so it also had a quality\n * and format option. toCanvasElement is faster and produce no loss of quality.\n * If you need to get a real Jpeg or Png from an object, using toDataURL is the right way to do it.\n * toCanvasElement and then toBlob from the obtained canvas is also a good option.\n * @todo fix the export type, it could not be Image but the type that getClass return for 'image'.\n * @param {ObjectToCanvasElementOptions} [options] for clone as image, passed to toDataURL\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {FabricImage} Object cloned as image.\n */\n cloneAsImage(options: ObjectToCanvasElementOptions): FabricImage {\n const canvasEl = this.toCanvasElement(options);\n // TODO: how to import Image w/o an import cycle?\n const ImageClass = classRegistry.getClass('image');\n return new ImageClass(canvasEl);\n }\n\n /**\n * Converts an object into a HTMLCanvas element\n * @param {ObjectToCanvasElementOptions} options Options object\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @param {Boolean} [options.viewportTransform] Account for canvas viewport transform\n * @param {(el?: HTMLCanvasElement) => StaticCanvas} [options.canvasProvider] Create the output canvas\n * @return {HTMLCanvasElement} Returns DOM element with the FabricObject\n */\n toCanvasElement(options: ObjectToCanvasElementOptions = {}) {\n const origParams = saveObjectTransform(this),\n originalGroup = this.group,\n originalShadow = this.shadow,\n abs = Math.abs,\n retinaScaling = options.enableRetinaScaling ? getDevicePixelRatio() : 1,\n multiplier = (options.multiplier || 1) * retinaScaling,\n canvasProvider: (el: HTMLCanvasElement) => StaticCanvas =\n options.canvasProvider ||\n ((el: HTMLCanvasElement) =>\n new StaticCanvas(el, {\n enableRetinaScaling: false,\n renderOnAddRemove: false,\n skipOffscreen: false,\n }));\n delete this.group;\n if (options.withoutTransform) {\n resetObjectTransform(this);\n }\n if (options.withoutShadow) {\n this.shadow = null;\n }\n if (options.viewportTransform) {\n sendObjectToPlane(this, this.getViewportTransform());\n }\n\n this.setCoords();\n const el = createCanvasElement(),\n boundingRect = this.getBoundingRect(),\n shadow = this.shadow,\n shadowOffset = new Point();\n\n if (shadow) {\n const shadowBlur = shadow.blur;\n const scaling = shadow.nonScaling\n ? new Point(1, 1)\n : this.getObjectScaling();\n // consider non scaling shadow.\n shadowOffset.x =\n 2 * Math.round(abs(shadow.offsetX) + shadowBlur) * abs(scaling.x);\n shadowOffset.y =\n 2 * Math.round(abs(shadow.offsetY) + shadowBlur) * abs(scaling.y);\n }\n const width = boundingRect.width + shadowOffset.x,\n height = boundingRect.height + shadowOffset.y;\n // if the current width/height is not an integer\n // we need to make it so.\n el.width = Math.ceil(width);\n el.height = Math.ceil(height);\n const canvas = canvasProvider(el);\n if (options.format === 'jpeg') {\n canvas.backgroundColor = '#fff';\n }\n this.setPositionByOrigin(\n new Point(canvas.width / 2, canvas.height / 2),\n CENTER,\n CENTER,\n );\n const originalCanvas = this.canvas;\n // static canvas and canvas have both an array of InteractiveObjects\n // @ts-expect-error this needs to be fixed somehow, or ignored globally\n canvas._objects = [this];\n this.set('canvas', canvas);\n this.setCoords();\n const canvasEl = canvas.toCanvasElement(multiplier || 1, options);\n this.set('canvas', originalCanvas);\n this.shadow = originalShadow;\n if (originalGroup) {\n this.group = originalGroup;\n }\n this.set(origParams);\n this.setCoords();\n // canvas.dispose will call image.dispose that will nullify the elements\n // since this canvas is a simple element for the process, we remove references\n // to objects in this way in order to avoid object trashing.\n canvas._objects = [];\n // since render has settled it is safe to destroy canvas\n canvas.destroy();\n return canvasEl;\n }\n\n /**\n * Converts an object into a data-url-like string\n * @param {Object} options Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n */\n toDataURL(options: toDataURLOptions = {}) {\n return toDataURL(\n this.toCanvasElement(options),\n options.format || 'png',\n options.quality || 1,\n );\n }\n\n /**\n * Returns true if any of the specified types is identical to the type of an instance\n * @param {String} type Type to check against\n * @return {Boolean}\n */\n isType(...types: string[]) {\n return (\n types.includes((this.constructor as typeof FabricObject).type) ||\n types.includes(this.type)\n );\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance (is 1 unless subclassed)\n */\n complexity() {\n return 1;\n }\n\n /**\n * Returns a JSON representation of an instance\n * @return {Object} JSON\n */\n toJSON() {\n // delegate, not alias\n return this.toObject();\n }\n\n /**\n * Sets \"angle\" of an instance with centered rotation\n * @param {TDegree} angle Angle value (in degrees)\n */\n rotate(angle: TDegree) {\n const { centeredRotation, originX, originY } = this;\n\n if (centeredRotation) {\n const { x, y } = this.getRelativeCenterPoint();\n this.originX = CENTER;\n this.originY = CENTER;\n this.left = x;\n this.top = y;\n }\n\n this.set('angle', angle);\n\n if (centeredRotation) {\n const { x, y } = this.translateToOriginPoint(\n this.getRelativeCenterPoint(),\n originX,\n originY,\n );\n this.left = x;\n this.top = y;\n this.originX = originX;\n this.originY = originY;\n }\n }\n\n /**\n * This callback function is called by the parent group of an object every\n * time a non-delegated property changes on the group. It is passed the key\n * and value as parameters. Not adding in this function's signature to avoid\n * Travis build error about unused variables.\n */\n setOnGroup() {\n // implemented by sub-classes, as needed.\n }\n\n /**\n * Sets canvas globalCompositeOperation for specific object\n * custom composition operation for the particular object can be specified using globalCompositeOperation property\n * @param {CanvasRenderingContext2D} ctx Rendering canvas context\n */\n _setupCompositeOperation(ctx: CanvasRenderingContext2D) {\n if (this.globalCompositeOperation) {\n ctx.globalCompositeOperation = this.globalCompositeOperation;\n }\n }\n\n /**\n * cancel instance's running animations\n * override if necessary to dispose artifacts such as `clipPath`\n */\n dispose() {\n runningAnimations.cancelByTarget(this);\n this.off();\n this._set('canvas', undefined);\n // clear caches\n this._cacheCanvas && getEnv().dispose(this._cacheCanvas);\n this._cacheCanvas = undefined;\n this._cacheContext = null;\n }\n\n // #region Animation methods\n /**\n * List of properties to consider for animating colors.\n * @type String[]\n */\n static colorProperties: string[] = [FILL, STROKE, 'backgroundColor'];\n\n /**\n * Animates object's properties\n * @param {Record} animatable map of keys and end values\n * @param {Partial>} options\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#animation}\n * @return {Record>} map of animation contexts\n *\n * As object — multiple properties\n *\n * object.animate({ left: ..., top: ... });\n * object.animate({ left: ..., top: ... }, { duration: ... });\n */\n animate(\n animatable: Record,\n options?: Partial>,\n ): Record> {\n return Object.entries(animatable).reduce(\n (acc, [key, endValue]) => {\n acc[key] = this._animate(key, endValue, options);\n return acc;\n },\n {} as Record>,\n );\n }\n\n /**\n * @private\n * @param {String} key Property to animate\n * @param {String} to Value to animate to\n * @param {Object} [options] Options object\n */\n _animate(\n key: string,\n endValue: T,\n options: Partial> = {},\n ): TAnimation {\n const path = key.split('.');\n const propIsColor = (\n this.constructor as typeof FabricObject\n ).colorProperties.includes(path[path.length - 1]);\n const { abort, startValue, onChange, onComplete } = options;\n const animationOptions = {\n ...options,\n target: this,\n // path.reduce... is the current value in case start value isn't provided\n startValue:\n startValue ?? path.reduce((deep: any, key) => deep[key], this),\n endValue,\n abort: abort?.bind(this),\n onChange: (\n value: number | number[] | string,\n valueProgress: number,\n durationProgress: number,\n ) => {\n path.reduce((deep: Record, key, index) => {\n if (index === path.length - 1) {\n deep[key] = value;\n }\n return deep[key];\n }, this);\n onChange &&\n // @ts-expect-error generic callback arg0 is wrong\n onChange(value, valueProgress, durationProgress);\n },\n onComplete: (\n value: number | number[] | string,\n valueProgress: number,\n durationProgress: number,\n ) => {\n this.setCoords();\n onComplete &&\n // @ts-expect-error generic callback arg0 is wrong\n onComplete(value, valueProgress, durationProgress);\n },\n } as AnimationOptions;\n\n return (\n propIsColor\n ? animateColor(animationOptions as ColorAnimationOptions)\n : animate(\n animationOptions as ValueAnimationOptions | ArrayAnimationOptions,\n )\n ) as TAnimation;\n }\n\n // #region Object stacking methods\n\n /**\n * A reference to the parent of the object\n * Used to keep the original parent ref when the object has been added to an ActiveSelection, hence loosing the `group` ref\n */\n declare parent?: Group;\n\n /**\n * Checks if object is descendant of target\n * Should be used instead of {@link Group.contains} or {@link StaticCanvas.contains} for performance reasons\n * @param {TAncestor} target\n * @returns {boolean}\n */\n isDescendantOf(target: TAncestor): boolean {\n const { parent, group } = this;\n return (\n parent === target ||\n group === target ||\n // walk up\n (!!parent && parent.isDescendantOf(target)) ||\n (!!group && group !== parent && group.isDescendantOf(target))\n );\n }\n\n /**\n * @returns {Ancestors} ancestors (excluding `ActiveSelection`) from bottom to top\n */\n getAncestors(): Ancestors {\n const ancestors: TAncestor[] = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let parent: TAncestor | undefined = this;\n do {\n parent = parent.parent;\n parent && ancestors.push(parent);\n } while (parent);\n return ancestors as Ancestors;\n }\n\n /**\n * Compare ancestors\n *\n * @param {StackedObject} other\n * @returns {AncestryComparison} an object that represent the ancestry situation.\n */\n findCommonAncestors(other: T): AncestryComparison {\n if (this === other) {\n return {\n fork: [],\n otherFork: [],\n common: [this, ...this.getAncestors()],\n } as AncestryComparison;\n }\n const ancestors = this.getAncestors();\n const otherAncestors = other.getAncestors();\n // if `this` has no ancestors and `this` is top ancestor of `other` we must handle the following case\n if (\n ancestors.length === 0 &&\n otherAncestors.length > 0 &&\n this === otherAncestors[otherAncestors.length - 1]\n ) {\n return {\n fork: [],\n otherFork: [\n other,\n ...otherAncestors.slice(0, otherAncestors.length - 1),\n ],\n common: [this],\n } as AncestryComparison;\n }\n // compare ancestors\n for (let i = 0, ancestor; i < ancestors.length; i++) {\n ancestor = ancestors[i];\n if (ancestor === other) {\n return {\n fork: [this, ...ancestors.slice(0, i)],\n otherFork: [],\n common: ancestors.slice(i),\n } as AncestryComparison;\n }\n for (let j = 0; j < otherAncestors.length; j++) {\n if (this === otherAncestors[j]) {\n return {\n fork: [],\n otherFork: [other, ...otherAncestors.slice(0, j)],\n common: [this, ...ancestors],\n } as AncestryComparison;\n }\n if (ancestor === otherAncestors[j]) {\n return {\n fork: [this, ...ancestors.slice(0, i)],\n otherFork: [other, ...otherAncestors.slice(0, j)],\n common: ancestors.slice(i),\n } as AncestryComparison;\n }\n }\n }\n // nothing shared\n return {\n fork: [this, ...ancestors],\n otherFork: [other, ...otherAncestors],\n common: [],\n } as AncestryComparison;\n }\n\n /**\n *\n * @param {StackedObject} other\n * @returns {boolean}\n */\n hasCommonAncestors(other: T): boolean {\n const commonAncestors = this.findCommonAncestors(other);\n return commonAncestors && !!commonAncestors.common.length;\n }\n\n /**\n *\n * @param {FabricObject} other object to compare against\n * @returns {boolean | undefined} if objects do not share a common ancestor or they are strictly equal it is impossible to determine which is in front of the other; in such cases the function returns `undefined`\n */\n isInFrontOf(other: T): boolean | undefined {\n if (this === other) {\n return undefined;\n }\n const ancestorData = this.findCommonAncestors(other);\n\n if (ancestorData.fork.includes(other as any)) {\n return true;\n }\n if (ancestorData.otherFork.includes(this as any)) {\n return false;\n }\n // if there isn't a common ancestor, we take the canvas.\n // if there is no canvas, there is nothing to compare\n const firstCommonAncestor = ancestorData.common[0] || this.canvas;\n if (!firstCommonAncestor) {\n return undefined;\n }\n const headOfFork = ancestorData.fork.pop(),\n headOfOtherFork = ancestorData.otherFork.pop(),\n thisIndex = (firstCommonAncestor as TCollection)._objects.indexOf(\n headOfFork as any,\n ),\n otherIndex = (firstCommonAncestor as TCollection)._objects.indexOf(\n headOfOtherFork as any,\n );\n return thisIndex > -1 && thisIndex > otherIndex;\n }\n\n // #region Serialization\n /**\n * Define a list of custom properties that will be serialized when\n * instance.toObject() gets called\n */\n static customProperties: string[] = [];\n\n /**\n * Returns an object representation of an instance\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject(propertiesToInclude: any[] = []): any {\n const propertiesToSerialize = propertiesToInclude.concat(\n FabricObject.customProperties,\n (this.constructor as typeof FabricObject).customProperties || [],\n );\n let clipPathData: Partial | undefined;\n const NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n const {\n clipPath,\n fill,\n stroke,\n shadow,\n strokeDashArray,\n left,\n top,\n originX,\n originY,\n width,\n height,\n strokeWidth,\n strokeLineCap,\n strokeDashOffset,\n strokeLineJoin,\n strokeUniform,\n strokeMiterLimit,\n scaleX,\n scaleY,\n angle,\n flipX,\n flipY,\n opacity,\n visible,\n backgroundColor,\n fillRule,\n paintFirst,\n globalCompositeOperation,\n skewX,\n skewY,\n } = this;\n if (clipPath && !clipPath.excludeFromExport) {\n clipPathData = clipPath.toObject(\n propertiesToSerialize.concat('inverted', 'absolutePositioned'),\n );\n }\n const toFixedBound = (val: number) => toFixed(val, NUM_FRACTION_DIGITS);\n const object = {\n ...pick(this, propertiesToSerialize as (keyof this)[]),\n type: (this.constructor as typeof FabricObject).type,\n version: VERSION,\n originX,\n originY,\n left: toFixedBound(left),\n top: toFixedBound(top),\n width: toFixedBound(width),\n height: toFixedBound(height),\n fill: isSerializableFiller(fill) ? fill.toObject() : fill,\n stroke: isSerializableFiller(stroke) ? stroke.toObject() : stroke,\n strokeWidth: toFixedBound(strokeWidth),\n strokeDashArray: strokeDashArray\n ? strokeDashArray.concat()\n : strokeDashArray,\n strokeLineCap,\n strokeDashOffset,\n strokeLineJoin,\n strokeUniform,\n strokeMiterLimit: toFixedBound(strokeMiterLimit),\n scaleX: toFixedBound(scaleX),\n scaleY: toFixedBound(scaleY),\n angle: toFixedBound(angle),\n flipX,\n flipY,\n opacity: toFixedBound(opacity),\n shadow: shadow ? shadow.toObject() : shadow,\n visible,\n backgroundColor,\n fillRule,\n paintFirst,\n globalCompositeOperation,\n skewX: toFixedBound(skewX),\n skewY: toFixedBound(skewY),\n ...(clipPathData ? { clipPath: clipPathData } : null),\n };\n\n return !this.includeDefaultValues\n ? this._removeDefaultValues(object)\n : object;\n }\n\n /**\n * Returns (dataless) object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toDatalessObject(propertiesToInclude?: any[]): any {\n // will be overwritten by subclasses\n return this.toObject(propertiesToInclude);\n }\n\n /**\n * @private\n * @param {Object} object\n */\n _removeDefaultValues(object: T): Partial {\n // getDefaults() ( get from static ownDefaults ) should win over prototype since anyway they get assigned to instance\n // ownDefault vs prototype is swappable only if you change all the fabric objects consistently.\n const defaults = (this.constructor as typeof FabricObject).getDefaults();\n const hasStaticDefaultValues = Object.keys(defaults).length > 0;\n const baseValues = hasStaticDefaultValues\n ? defaults\n : Object.getPrototypeOf(this);\n\n return pickBy(object, (value, key) => {\n if (key === LEFT || key === TOP || key === 'type') {\n return true;\n }\n const baseValue = baseValues[key];\n return (\n value !== baseValue &&\n // basically a check for [] === []\n !(\n Array.isArray(value) &&\n Array.isArray(baseValue) &&\n value.length === 0 &&\n baseValue.length === 0\n )\n );\n });\n }\n\n /**\n * Returns a string representation of an instance\n * @return {String}\n */\n toString() {\n return `#<${(this.constructor as typeof FabricObject).type}>`;\n }\n\n /**\n *\n * @param {Function} klass\n * @param {object} object\n * @param {object} [options]\n * @param {string} [options.extraParam] property to pass as first argument to the constructor\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static _fromObject(\n { type, ...serializedObjectOptions }: Record,\n { extraParam, ...options }: Abortable & { extraParam?: string } = {},\n ): Promise {\n return enlivenObjectEnlivables(serializedObjectOptions, options).then(\n (enlivedObjectOptions) => {\n // from the resulting enlived options, extract options.extraParam to arg0\n // to avoid accidental overrides later\n if (extraParam) {\n delete enlivedObjectOptions[extraParam];\n return new this(\n serializedObjectOptions[extraParam],\n // @ts-expect-error different signature\n enlivedObjectOptions,\n );\n } else {\n return new this(enlivedObjectOptions);\n }\n },\n ) as Promise;\n }\n\n /**\n *\n * @param {object} object\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static fromObject>(\n object: T,\n options?: Abortable,\n ) {\n return this._fromObject(object, options);\n }\n}\n\nclassRegistry.setClass(FabricObject);\nclassRegistry.setClass(FabricObject, 'object');\n","import type {\n TModificationEvents,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo } from './util';\n\n/**\n * Wrap an action handler with firing an event if the action is performed\n * @param {TModificationEvents} eventName the event we want to fire\n * @param {TransformActionHandler} actionHandler the function to wrap\n * @param {object} extraEventInfo extra information to pas to the event handler\n * @return {TransformActionHandler} a function with an action handler signature\n */\nexport const wrapWithFireEvent = <\n T extends Transform,\n P extends object = Record,\n>(\n eventName: TModificationEvents,\n actionHandler: TransformActionHandler,\n extraEventInfo?: P,\n) => {\n return ((eventData, transform, x, y) => {\n const actionPerformed = actionHandler(eventData, transform, x, y);\n if (actionPerformed) {\n fireEvent(eventName, {\n ...commonEventInfo(eventData, transform, x, y),\n ...extraEventInfo,\n });\n }\n return actionPerformed;\n }) as TransformActionHandler;\n};\n","import type { Transform, TransformActionHandler } from '../EventTypeDefs';\n\n/**\n * Wrap an action handler with saving/restoring object position on the transform.\n * this is the code that permits to objects to keep their position while transforming.\n * @param {Function} actionHandler the function to wrap\n * @return {Function} a function with an action handler signature\n */\nexport function wrapWithFixedAnchor(\n actionHandler: TransformActionHandler,\n) {\n return ((eventData, transform, x, y) => {\n const { target, originX, originY } = transform,\n centerPoint = target.getRelativeCenterPoint(),\n constraint = target.translateToOriginPoint(centerPoint, originX, originY),\n actionPerformed = actionHandler(eventData, transform, x, y);\n // flipping requires to change the transform origin, so we read from the mutated transform\n // instead of leveraging the one destructured before\n target.setPositionByOrigin(\n constraint,\n transform.originX,\n transform.originY,\n );\n return actionPerformed;\n }) as TransformActionHandler;\n}\n","import type { TransformActionHandler } from '../EventTypeDefs';\nimport { CENTER, LEFT, RESIZING, RIGHT } from '../constants';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { getLocalPoint, isTransformCentered } from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\n\n/**\n * Action handler to change object's width\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const changeObjectWidth: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const localPoint = getLocalPoint(\n transform,\n transform.originX,\n transform.originY,\n x,\n y,\n );\n // make sure the control changes width ONLY from it's side of target\n if (\n resolveOrigin(transform.originX) === resolveOrigin(CENTER) ||\n (resolveOrigin(transform.originX) === resolveOrigin(RIGHT) &&\n localPoint.x < 0) ||\n (resolveOrigin(transform.originX) === resolveOrigin(LEFT) &&\n localPoint.x > 0)\n ) {\n const { target } = transform,\n strokePadding =\n target.strokeWidth / (target.strokeUniform ? target.scaleX : 1),\n multiplier = isTransformCentered(transform) ? 2 : 1,\n oldWidth = target.width,\n newWidth =\n Math.abs((localPoint.x * multiplier) / target.scaleX) - strokePadding;\n target.set('width', Math.max(newWidth, 1));\n // check against actual target width in case `newWidth` was rejected\n return oldWidth !== target.width;\n }\n return false;\n};\n\nexport const changeWidth = wrapWithFireEvent(\n RESIZING,\n wrapWithFixedAnchor(changeObjectWidth),\n);\n","import { FILL, STROKE, twoMathPi } from '../constants';\nimport type { InteractiveFabricObject } from '../shapes/Object/InteractiveObject';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport type { Control } from './Control';\n\nexport type ControlRenderingStyleOverride = Partial<\n Pick<\n InteractiveFabricObject,\n | 'cornerStyle'\n | 'cornerSize'\n | 'cornerColor'\n | 'cornerStrokeColor'\n | 'cornerDashArray'\n | 'transparentCorners'\n >\n>;\n\nexport type ControlRenderer<\n O extends InteractiveFabricObject = InteractiveFabricObject,\n> = (\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: O,\n) => void;\n\n/**\n * Render a round control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for FabricObject controls style\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n */\nexport function renderCircleControl(\n this: Control,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: InteractiveFabricObject,\n) {\n styleOverride = styleOverride || {};\n const xSize =\n this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners =\n typeof styleOverride.transparentCorners !== 'undefined'\n ? styleOverride.transparentCorners\n : fabricObject.transparentCorners,\n methodName = transparentCorners ? STROKE : FILL,\n stroke =\n !transparentCorners &&\n (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor);\n let myLeft = left,\n myTop = top,\n size;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor || '';\n ctx.strokeStyle =\n styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor || '';\n // TODO: use proper ellipse code.\n if (xSize > ySize) {\n size = xSize;\n ctx.scale(1.0, ySize / xSize);\n myTop = (top * xSize) / ySize;\n } else if (ySize > xSize) {\n size = ySize;\n ctx.scale(xSize / ySize, 1.0);\n myLeft = (left * ySize) / xSize;\n } else {\n size = xSize;\n }\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.arc(myLeft, myTop, size / 2, 0, twoMathPi, false);\n ctx[methodName]();\n if (stroke) {\n ctx.stroke();\n }\n ctx.restore();\n}\n\n/**\n * Render a square control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for FabricObject controls style\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n */\nexport function renderSquareControl(\n this: Control,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: InteractiveFabricObject,\n) {\n styleOverride = styleOverride || {};\n const xSize =\n this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners =\n typeof styleOverride.transparentCorners !== 'undefined'\n ? styleOverride.transparentCorners\n : fabricObject.transparentCorners,\n methodName = transparentCorners ? STROKE : FILL,\n stroke =\n !transparentCorners &&\n (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor),\n xSizeBy2 = xSize / 2,\n ySizeBy2 = ySize / 2;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor || '';\n ctx.strokeStyle =\n styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor || '';\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.translate(left, top);\n // angle is relative to canvas plane\n const angle = fabricObject.getTotalAngle();\n ctx.rotate(degreesToRadians(angle));\n // this does not work, and fixed with ( && ) does not make sense.\n // to have real transparent corners we need the controls on upperCanvas\n // transparentCorners || ctx.clearRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n ctx[`${methodName}Rect`](-xSizeBy2, -ySizeBy2, xSize, ySize);\n if (stroke) {\n ctx.strokeRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n }\n ctx.restore();\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type {\n ControlActionHandler,\n TPointerEvent,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { Intersection } from '../Intersection';\nimport { Point } from '../Point';\nimport { SCALE } from '../constants';\nimport type { InteractiveFabricObject } from '../shapes/Object/InteractiveObject';\nimport type { TCornerPoint, TDegree, TMat2D } from '../typedefs';\nimport {\n createRotateMatrix,\n createScaleMatrix,\n createTranslateMatrix,\n multiplyTransformMatrixArray,\n} from '../util/misc/matrix';\nimport type { ControlRenderingStyleOverride } from './controlRendering';\nimport { renderCircleControl, renderSquareControl } from './controlRendering';\n\nexport class Control {\n /**\n * keep track of control visibility.\n * mainly for backward compatibility.\n * if you do not want to see a control, you can remove it\n * from the control set.\n * @type {Boolean}\n * @default true\n */\n visible = true;\n\n /**\n * Name of the action that the control will likely execute.\n * This is optional. FabricJS uses to identify what the user is doing for some\n * extra optimizations. If you are writing a custom control and you want to know\n * somewhere else in the code what is going on, you can use this string here.\n * you can also provide a custom getActionName if your control run multiple actions\n * depending on some external state.\n * default to scale since is the most common, used on 4 corners by default\n * @type {String}\n * @default 'scale'\n */\n actionName = SCALE;\n\n /**\n * Drawing angle of the control.\n * NOT used for now, but name marked as needed for internal logic\n * example: to reuse the same drawing function for different rotated controls\n * @type {Number}\n * @default 0\n */\n angle = 0;\n\n /**\n * Relative position of the control. X\n * 0,0 is the center of the Object, while -0.5 (left) or 0.5 (right) are the extremities\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n x = 0;\n\n /**\n * Relative position of the control. Y\n * 0,0 is the center of the Object, while -0.5 (top) or 0.5 (bottom) are the extremities\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n y = 0;\n\n /**\n * Horizontal offset of the control from the defined position. In pixels\n * Positive offset moves the control to the right, negative to the left.\n * It used when you want to have position of control that does not scale with\n * the bounding box. Example: rotation control is placed at x:0, y: 0.5 on\n * the boundind box, with an offset of 30 pixels vertically. Those 30 pixels will\n * stay 30 pixels no matter how the object is big. Another example is having 2\n * controls in the corner, that stay in the same position when the object scale.\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n offsetX = 0;\n\n /**\n * Vertical offset of the control from the defined position. In pixels\n * Positive offset moves the control to the bottom, negative to the top.\n * @type {Number}\n * @default 0\n */\n offsetY = 0;\n\n /**\n * Sets the length of the control. If null, defaults to object's cornerSize.\n * Expects both sizeX and sizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n sizeX = 0;\n\n /**\n * Sets the height of the control. If null, defaults to object's cornerSize.\n * Expects both sizeX and sizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n sizeY = 0;\n\n /**\n * Sets the length of the touch area of the control. If null, defaults to object's touchCornerSize.\n * Expects both touchSizeX and touchSizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n touchSizeX = 0;\n\n /**\n * Sets the height of the touch area of the control. If null, defaults to object's touchCornerSize.\n * Expects both touchSizeX and touchSizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n touchSizeY = 0;\n\n /**\n * Css cursor style to display when the control is hovered.\n * if the method `cursorStyleHandler` is provided, this property is ignored.\n * @type {String}\n * @default 'crosshair'\n */\n cursorStyle = 'crosshair';\n\n /**\n * If controls has an offsetY or offsetX, draw a line that connects\n * the control to the bounding box\n * @type {Boolean}\n * @default false\n */\n withConnection = false;\n\n constructor(options?: Partial) {\n Object.assign(this, options);\n }\n\n /**\n * The control actionHandler, provide one to handle action ( control being moved )\n * @param {Event} eventData the native mouse event\n * @param {Transform} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n declare actionHandler: TransformActionHandler;\n\n /**\n * The control handler for mouse down, provide one to handle mouse down on control\n * @param {Event} eventData the native mouse event\n * @param {Transform} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n declare mouseDownHandler?: ControlActionHandler;\n\n /**\n * The control mouseUpHandler, provide one to handle an effect on mouse up.\n * @param {Event} eventData the native mouse event\n * @param {Transform} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n declare mouseUpHandler?: ControlActionHandler;\n\n shouldActivate(\n controlKey: string,\n fabricObject: InteractiveFabricObject,\n pointer: Point,\n { tl, tr, br, bl }: TCornerPoint,\n ) {\n // TODO: locking logic can be handled here instead of in the control handler logic\n return (\n fabricObject.canvas?.getActiveObject() === fabricObject &&\n fabricObject.isControlVisible(controlKey) &&\n Intersection.isPointInPolygon(pointer, [tl, tr, br, bl])\n );\n }\n\n /**\n * Returns control actionHandler\n * @param {Event} eventData the native mouse event\n * @param {FabricObject} fabricObject on which the control is displayed\n * @param {Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getActionHandler(\n eventData: TPointerEvent,\n fabricObject: InteractiveFabricObject,\n control: Control,\n ): TransformActionHandler | undefined {\n return this.actionHandler;\n }\n\n /**\n * Returns control mouseDown handler\n * @param {Event} eventData the native mouse event\n * @param {FabricObject} fabricObject on which the control is displayed\n * @param {Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getMouseDownHandler(\n eventData: TPointerEvent,\n fabricObject: InteractiveFabricObject,\n control: Control,\n ): ControlActionHandler | undefined {\n return this.mouseDownHandler;\n }\n\n /**\n * Returns control mouseUp handler.\n * During actions the fabricObject or the control can be of different obj\n * @param {Event} eventData the native mouse event\n * @param {FabricObject} fabricObject on which the control is displayed\n * @param {Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getMouseUpHandler(\n eventData: TPointerEvent,\n fabricObject: InteractiveFabricObject,\n control: Control,\n ): ControlActionHandler | undefined {\n return this.mouseUpHandler;\n }\n\n /**\n * Returns control cursorStyle for css using cursorStyle. If you need a more elaborate\n * function you can pass one in the constructor\n * the cursorStyle property\n * @param {Event} eventData the native mouse event\n * @param {Control} control the current control ( likely this)\n * @param {FabricObject} object on which the control is displayed\n * @return {String}\n */\n cursorStyleHandler(\n eventData: TPointerEvent,\n control: Control,\n fabricObject: InteractiveFabricObject,\n ) {\n return control.cursorStyle;\n }\n\n /**\n * Returns the action name. The basic implementation just return the actionName property.\n * @param {Event} eventData the native mouse event\n * @param {Control} control the current control ( likely this)\n * @param {FabricObject} object on which the control is displayed\n * @return {String}\n */\n getActionName(\n eventData: TPointerEvent,\n control: Control,\n fabricObject: InteractiveFabricObject,\n ) {\n return control.actionName;\n }\n\n /**\n * Returns controls visibility\n * @param {FabricObject} object on which the control is displayed\n * @param {String} controlKey key where the control is memorized on the\n * @return {Boolean}\n */\n getVisibility(fabricObject: InteractiveFabricObject, controlKey: string) {\n return fabricObject._controlsVisibility?.[controlKey] ?? this.visible;\n }\n\n /**\n * Sets controls visibility\n * @param {Boolean} visibility for the object\n * @return {Void}\n */\n setVisibility(\n visibility: boolean,\n name: string,\n fabricObject: InteractiveFabricObject,\n ) {\n this.visible = visibility;\n }\n\n positionHandler(\n dim: Point,\n finalMatrix: TMat2D,\n fabricObject: InteractiveFabricObject,\n currentControl: Control,\n ) {\n return new Point(\n this.x * dim.x + this.offsetX,\n this.y * dim.y + this.offsetY,\n ).transform(finalMatrix);\n }\n\n /**\n * Returns the coords for this control based on object values.\n * @param {Number} objectAngle angle from the fabric object holding the control\n * @param {Number} objectCornerSize cornerSize from the fabric object holding the control (or touchCornerSize if\n * isTouch is true)\n * @param {Number} centerX x coordinate where the control center should be\n * @param {Number} centerY y coordinate where the control center should be\n * @param {boolean} isTouch true if touch corner, false if normal corner\n */\n calcCornerCoords(\n angle: TDegree,\n objectCornerSize: number,\n centerX: number,\n centerY: number,\n isTouch: boolean,\n fabricObject: InteractiveFabricObject,\n ) {\n const t = multiplyTransformMatrixArray([\n createTranslateMatrix(centerX, centerY),\n createRotateMatrix({ angle }),\n createScaleMatrix(\n (isTouch ? this.touchSizeX : this.sizeX) || objectCornerSize,\n (isTouch ? this.touchSizeY : this.sizeY) || objectCornerSize,\n ),\n ]);\n return {\n tl: new Point(-0.5, -0.5).transform(t),\n tr: new Point(0.5, -0.5).transform(t),\n br: new Point(0.5, 0.5).transform(t),\n bl: new Point(-0.5, 0.5).transform(t),\n };\n }\n\n /**\n * Render function for the control.\n * When this function runs the context is unscaled. unrotate. Just retina scaled.\n * all the functions will have to translate to the point left,top before starting Drawing\n * if they want to draw a control where the position is detected.\n * left and top are the result of the positionHandler function\n * @param {RenderingContext2D} ctx the context where the control will be drawn\n * @param {Number} left position of the canvas where we are about to render the control.\n * @param {Number} top position of the canvas where we are about to render the control.\n * @param {Object} styleOverride\n * @param {FabricObject} fabricObject the object where the control is about to be rendered\n */\n render(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: InteractiveFabricObject,\n ) {\n styleOverride = styleOverride || {};\n switch (styleOverride.cornerStyle || fabricObject.cornerStyle) {\n case 'circle':\n renderCircleControl.call(\n this,\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n );\n break;\n default:\n renderSquareControl.call(\n this,\n ctx,\n left,\n top,\n styleOverride,\n fabricObject,\n );\n }\n }\n}\n","import type {\n ControlCursorCallback,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { ROTATING } from '../constants';\nimport { radiansToDegrees } from '../util/misc/radiansDegreesConversion';\nimport { isLocked, NOT_ALLOWED_CURSOR } from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\n\n/**\n * Find the correct style for the control that is used for rotation.\n * this function is very simple and it just take care of not-allowed or standard cursor\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const rotationStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n if (fabricObject.lockRotation) {\n return NOT_ALLOWED_CURSOR;\n }\n return control.cursorStyle;\n};\n\n/**\n * Action handler for rotation and snapping, without anchor point.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n * @private\n */\nconst rotateObjectWithSnapping: TransformActionHandler = (\n eventData,\n { target, ex, ey, theta, originX, originY },\n x,\n y,\n) => {\n const pivotPoint = target.translateToOriginPoint(\n target.getRelativeCenterPoint(),\n originX,\n originY,\n );\n\n if (isLocked(target, 'lockRotation')) {\n return false;\n }\n\n const lastAngle = Math.atan2(ey - pivotPoint.y, ex - pivotPoint.x),\n curAngle = Math.atan2(y - pivotPoint.y, x - pivotPoint.x);\n let angle = radiansToDegrees(curAngle - lastAngle + theta);\n\n if (target.snapAngle && target.snapAngle > 0) {\n const snapAngle = target.snapAngle,\n snapThreshold = target.snapThreshold || snapAngle,\n rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle,\n leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle;\n\n if (Math.abs(angle - leftAngleLocked) < snapThreshold) {\n angle = leftAngleLocked;\n } else if (Math.abs(angle - rightAngleLocked) < snapThreshold) {\n angle = rightAngleLocked;\n }\n }\n\n // normalize angle to positive value\n if (angle < 0) {\n angle = 360 + angle;\n }\n angle %= 360;\n\n const hasRotated = target.angle !== angle;\n // TODO: why aren't we using set?\n target.angle = angle;\n return hasRotated;\n};\n\nexport const rotationWithSnapping = wrapWithFireEvent(\n ROTATING,\n wrapWithFixedAnchor(rotateObjectWithSnapping),\n);\n","import type {\n ControlCursorCallback,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TAxis } from '../typedefs';\nimport type { Canvas } from '../canvas/Canvas';\nimport {\n findCornerQuadrant,\n getLocalPoint,\n invertOrigin,\n isLocked,\n isTransformCentered,\n NOT_ALLOWED_CURSOR,\n} from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\nimport { SCALE_X, SCALE_Y, SCALING } from '../constants';\n\ntype ScaleTransform = Transform & {\n gestureScale?: number;\n signX?: number;\n signY?: number;\n};\n\ntype ScaleBy = TAxis | 'equally' | '' | undefined;\n\n/**\n * Inspect event and fabricObject properties to understand if the scaling action\n * @param {Event} eventData from the user action\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @return {Boolean} true if scale is proportional\n */\nexport function scaleIsProportional(\n eventData: TPointerEvent,\n fabricObject: FabricObject,\n): boolean {\n const canvas = fabricObject.canvas as Canvas,\n uniformIsToggled = eventData[canvas.uniScaleKey!];\n return (\n (canvas.uniformScaling && !uniformIsToggled) ||\n (!canvas.uniformScaling && uniformIsToggled)\n );\n}\n\n/**\n * Inspect fabricObject to understand if the current scaling action is allowed\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @param {String} by 'x' or 'y' or ''\n * @param {Boolean} scaleProportionally true if we are trying to scale proportionally\n * @return {Boolean} true if scaling is not allowed at current conditions\n */\nexport function scalingIsForbidden(\n fabricObject: FabricObject,\n by: ScaleBy,\n scaleProportionally: boolean,\n) {\n const lockX = isLocked(fabricObject, 'lockScalingX'),\n lockY = isLocked(fabricObject, 'lockScalingY');\n if (lockX && lockY) {\n return true;\n }\n if (!by && (lockX || lockY) && scaleProportionally) {\n return true;\n }\n if (lockX && by === 'x') {\n return true;\n }\n if (lockY && by === 'y') {\n return true;\n }\n // code crashes because of a division by 0 if a 0 sized object is scaled\n // forbid to prevent scaling to happen. ISSUE-9475\n const { width, height, strokeWidth } = fabricObject;\n if (width === 0 && strokeWidth === 0 && by !== 'y') {\n return true;\n }\n if (height === 0 && strokeWidth === 0 && by !== 'x') {\n return true;\n }\n return false;\n}\n\nconst scaleMap = ['e', 'se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'];\n\n/**\n * return the correct cursor style for the scale action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const scaleCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n const scaleProportionally = scaleIsProportional(eventData, fabricObject),\n by =\n control.x !== 0 && control.y === 0\n ? 'x'\n : control.x === 0 && control.y !== 0\n ? 'y'\n : '';\n if (scalingIsForbidden(fabricObject, by, scaleProportionally)) {\n return NOT_ALLOWED_CURSOR;\n }\n const n = findCornerQuadrant(fabricObject, control);\n return `${scaleMap[n]}-resize`;\n};\n\n/**\n * Basic scaling logic, reused with different constrain for scaling X,Y, freely or equally.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @param {Object} options additional information for scaling\n * @param {String} options.by 'x', 'y', 'equally' or '' to indicate type of scaling\n * @return {Boolean} true if some change happened\n * @private\n */\nfunction scaleObject(\n eventData: TPointerEvent,\n transform: ScaleTransform,\n x: number,\n y: number,\n options: { by?: ScaleBy } = {},\n) {\n const target = transform.target,\n by = options.by,\n scaleProportionally = scaleIsProportional(eventData, target),\n forbidScaling = scalingIsForbidden(target, by, scaleProportionally);\n let newPoint, scaleX, scaleY, dim, signX, signY;\n\n if (forbidScaling) {\n return false;\n }\n if (transform.gestureScale) {\n scaleX = transform.scaleX * transform.gestureScale;\n scaleY = transform.scaleY * transform.gestureScale;\n } else {\n newPoint = getLocalPoint(\n transform,\n transform.originX,\n transform.originY,\n x,\n y,\n );\n // use of sign: We use sign to detect change of direction of an action. sign usually change when\n // we cross the origin point with the mouse. So a scale flip for example. There is an issue when scaling\n // by center and scaling using one middle control ( default: mr, mt, ml, mb), the mouse movement can easily\n // cross many time the origin point and flip the object. so we need a way to filter out the noise.\n // This ternary here should be ok to filter out X scaling when we want Y only and vice versa.\n signX = by !== 'y' ? Math.sign(newPoint.x || transform.signX || 1) : 1;\n signY = by !== 'x' ? Math.sign(newPoint.y || transform.signY || 1) : 1;\n if (!transform.signX) {\n transform.signX = signX;\n }\n if (!transform.signY) {\n transform.signY = signY;\n }\n\n if (\n isLocked(target, 'lockScalingFlip') &&\n (transform.signX !== signX || transform.signY !== signY)\n ) {\n return false;\n }\n\n dim = target._getTransformedDimensions();\n // missing detection of flip and logic to switch the origin\n if (scaleProportionally && !by) {\n // uniform scaling\n const distance = Math.abs(newPoint.x) + Math.abs(newPoint.y),\n { original } = transform,\n originalDistance =\n Math.abs((dim.x * original.scaleX) / target.scaleX) +\n Math.abs((dim.y * original.scaleY) / target.scaleY),\n scale = distance / originalDistance;\n scaleX = original.scaleX * scale;\n scaleY = original.scaleY * scale;\n } else {\n scaleX = Math.abs((newPoint.x * target.scaleX) / dim.x);\n scaleY = Math.abs((newPoint.y * target.scaleY) / dim.y);\n }\n // if we are scaling by center, we need to double the scale\n if (isTransformCentered(transform)) {\n scaleX *= 2;\n scaleY *= 2;\n }\n if (transform.signX !== signX && by !== 'y') {\n transform.originX = invertOrigin(transform.originX);\n scaleX *= -1;\n transform.signX = signX;\n }\n if (transform.signY !== signY && by !== 'x') {\n transform.originY = invertOrigin(transform.originY);\n scaleY *= -1;\n transform.signY = signY;\n }\n }\n // minScale is taken care of in the setter.\n const oldScaleX = target.scaleX,\n oldScaleY = target.scaleY;\n if (!by) {\n !isLocked(target, 'lockScalingX') && target.set(SCALE_X, scaleX);\n !isLocked(target, 'lockScalingY') && target.set(SCALE_Y, scaleY);\n } else {\n // forbidden cases already handled on top here.\n by === 'x' && target.set(SCALE_X, scaleX);\n by === 'y' && target.set(SCALE_Y, scaleY);\n }\n return oldScaleX !== target.scaleX || oldScaleY !== target.scaleY;\n}\n\n/**\n * Generic scaling logic, to scale from corners either equally or freely.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scaleObjectFromCorner: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y);\n};\n\n/**\n * Scaling logic for the X axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'x' });\n};\n\n/**\n * Scaling logic for the Y axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'y' });\n};\n\nexport const scalingEqually = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectFromCorner),\n);\n\nexport const scalingX = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectX),\n);\n\nexport const scalingY = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectY),\n);\n","import type {\n ControlCursorCallback,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { Point } from '../Point';\nimport type { TAxis, TAxisKey } from '../typedefs';\nimport {\n degreesToRadians,\n radiansToDegrees,\n} from '../util/misc/radiansDegreesConversion';\nimport {\n findCornerQuadrant,\n getLocalPoint,\n isLocked,\n NOT_ALLOWED_CURSOR,\n} from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\nimport {\n CENTER,\n SCALE_X,\n SCALE_Y,\n SKEWING,\n SKEW_X,\n SKEW_Y,\n} from '../constants';\n\nexport type SkewTransform = Transform & { skewingSide: -1 | 1 };\n\nconst AXIS_KEYS: Record<\n TAxis,\n {\n counterAxis: TAxis;\n scale: TAxisKey<'scale'>;\n skew: TAxisKey<'skew'>;\n lockSkewing: TAxisKey<'lockSkewing'>;\n origin: TAxisKey<'origin'>;\n flip: TAxisKey<'flip'>;\n }\n> = {\n x: {\n counterAxis: 'y',\n scale: SCALE_X,\n skew: SKEW_X,\n lockSkewing: 'lockSkewingX',\n origin: 'originX',\n flip: 'flipX',\n },\n y: {\n counterAxis: 'x',\n scale: SCALE_Y,\n skew: SKEW_Y,\n lockSkewing: 'lockSkewingY',\n origin: 'originY',\n flip: 'flipY',\n },\n};\n\nconst skewMap = ['ns', 'nesw', 'ew', 'nwse'];\n\n/**\n * return the correct cursor style for the skew action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const skewCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n if (control.x !== 0 && isLocked(fabricObject, 'lockSkewingY')) {\n return NOT_ALLOWED_CURSOR;\n }\n if (control.y !== 0 && isLocked(fabricObject, 'lockSkewingX')) {\n return NOT_ALLOWED_CURSOR;\n }\n const n = findCornerQuadrant(fabricObject, control) % 4;\n return `${skewMap[n]}-resize`;\n};\n\n/**\n * Since skewing is applied before scaling, calculations are done in a scaleless plane\n * @see https://github.com/fabricjs/fabric.js/pull/8380\n */\nfunction skewObject(\n axis: TAxis,\n { target, ex, ey, skewingSide, ...transform }: SkewTransform,\n pointer: Point,\n) {\n const { skew: skewKey } = AXIS_KEYS[axis],\n offset = pointer\n .subtract(new Point(ex, ey))\n .divide(new Point(target.scaleX, target.scaleY))[axis],\n skewingBefore = target[skewKey],\n skewingStart = transform[skewKey],\n shearingStart = Math.tan(degreesToRadians(skewingStart)),\n // let a, b be the size of target\n // let a' be the value of a after applying skewing\n // then:\n // a' = a + b * skewA => skewA = (a' - a) / b\n // the value b is tricky since skewY is applied before skewX\n b =\n axis === 'y'\n ? target._getTransformedDimensions({\n scaleX: 1,\n scaleY: 1,\n // since skewY is applied before skewX, b (=width) is not affected by skewX\n skewX: 0,\n }).x\n : target._getTransformedDimensions({\n scaleX: 1,\n scaleY: 1,\n }).y;\n\n const shearing =\n (2 * offset * skewingSide) /\n // we max out fractions to safeguard from asymptotic behavior\n Math.max(b, 1) +\n // add starting state\n shearingStart;\n\n const skewing = radiansToDegrees(Math.atan(shearing));\n\n target.set(skewKey, skewing);\n const changed = skewingBefore !== target[skewKey];\n\n if (changed && axis === 'y') {\n // we don't want skewing to affect scaleX\n // so we factor it by the inverse skewing diff to make it seem unchanged to the viewer\n const { skewX, scaleX } = target,\n dimBefore = target._getTransformedDimensions({ skewY: skewingBefore }),\n dimAfter = target._getTransformedDimensions(),\n compensationFactor = skewX !== 0 ? dimBefore.x / dimAfter.x : 1;\n compensationFactor !== 1 &&\n target.set(SCALE_X, compensationFactor * scaleX);\n }\n\n return changed;\n}\n\n/**\n * Wrapped Action handler for skewing on a given axis, takes care of the\n * skew direction and determines the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nfunction skewHandler(\n axis: TAxis,\n eventData: TPointerEvent,\n transform: Transform,\n x: number,\n y: number,\n) {\n const { target } = transform,\n {\n counterAxis,\n origin: originKey,\n lockSkewing: lockSkewingKey,\n skew: skewKey,\n flip: flipKey,\n } = AXIS_KEYS[axis];\n if (isLocked(target, lockSkewingKey)) {\n return false;\n }\n\n const { origin: counterOriginKey, flip: counterFlipKey } =\n AXIS_KEYS[counterAxis],\n counterOriginFactor =\n resolveOrigin(transform[counterOriginKey]) *\n (target[counterFlipKey] ? -1 : 1),\n // if the counter origin is top/left (= -0.5) then we are skewing x/y values on the bottom/right side of target respectively.\n // if the counter origin is bottom/right (= 0.5) then we are skewing x/y values on the top/left side of target respectively.\n // skewing direction on the top/left side of target is OPPOSITE to the direction of the movement of the pointer,\n // so we factor skewing direction by this value.\n skewingSide = (-Math.sign(counterOriginFactor) *\n (target[flipKey] ? -1 : 1)) as 1 | -1,\n skewingDirection =\n ((target[skewKey] === 0 &&\n // in case skewing equals 0 we use the pointer offset from target center to determine the direction of skewing\n getLocalPoint(transform, CENTER, CENTER, x, y)[axis] > 0) ||\n // in case target has skewing we use that as the direction\n target[skewKey] > 0\n ? 1\n : -1) * skewingSide,\n // anchor to the opposite side of the skewing direction\n // normalize value from [-1, 1] to origin value [0, 1]\n origin = -skewingDirection * 0.5 + 0.5;\n\n const finalHandler = wrapWithFireEvent(\n SKEWING,\n wrapWithFixedAnchor((eventData, transform, x, y) =>\n skewObject(axis, transform, new Point(x, y)),\n ),\n );\n\n return finalHandler(\n eventData,\n {\n ...transform,\n [originKey]: origin,\n skewingSide,\n },\n x,\n y,\n );\n}\n\n/**\n * Wrapped Action handler for skewing on the X axis, takes care of the\n * skew direction and determines the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const skewHandlerX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return skewHandler('x', eventData, transform, x, y);\n};\n\n/**\n * Wrapped Action handler for skewing on the Y axis, takes care of the\n * skew direction and determines the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const skewHandlerY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return skewHandler('y', eventData, transform, x, y);\n};\n","import type {\n ControlCallback,\n ControlCursorCallback,\n TPointerEvent,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { SCALE_X, SCALE_Y, SKEW_X, SKEW_Y } from '../constants';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TAxisKey } from '../typedefs';\nimport { scaleCursorStyleHandler, scalingX, scalingY } from './scale';\nimport { skewCursorStyleHandler, skewHandlerX, skewHandlerY } from './skew';\n\nfunction isAltAction(eventData: TPointerEvent, target: FabricObject) {\n return eventData[target.canvas!.altActionKey!];\n}\n\n/**\n * Inspect event, control and fabricObject to return the correct action name\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} an action name\n */\nexport const scaleOrSkewActionName: ControlCallback<\n TAxisKey<'skew' | 'scale'> | ''\n> = (eventData, control, fabricObject) => {\n const isAlternative = isAltAction(eventData, fabricObject);\n if (control.x === 0) {\n // then is scaleY or skewX\n return isAlternative ? SKEW_X : SCALE_Y;\n }\n if (control.y === 0) {\n // then is scaleY or skewX\n return isAlternative ? SKEW_Y : SCALE_X;\n }\n return '';\n};\n\n/**\n * Combine skew and scale style handlers to cover fabric standard use case\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const scaleSkewCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n return isAltAction(eventData, fabricObject)\n ? skewCursorStyleHandler(eventData, control, fabricObject)\n : scaleCursorStyleHandler(eventData, control, fabricObject);\n};\n/**\n * Composed action handler to either scale X or skew Y\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scalingXOrSkewingY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return isAltAction(eventData, transform.target)\n ? skewHandlerY(eventData, transform, x, y)\n : scalingX(eventData, transform, x, y);\n};\n\n/**\n * Composed action handler to either scale Y or skew X\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scalingYOrSkewingX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return isAltAction(eventData, transform.target)\n ? skewHandlerX(eventData, transform, x, y)\n : scalingY(eventData, transform, x, y);\n};\n","import { RESIZING, ROTATE } from '../constants';\nimport { changeWidth } from './changeWidth';\nimport { Control } from './Control';\nimport { rotationStyleHandler, rotationWithSnapping } from './rotate';\nimport { scaleCursorStyleHandler, scalingEqually } from './scale';\nimport {\n scaleOrSkewActionName,\n scaleSkewCursorStyleHandler,\n scalingXOrSkewingY,\n scalingYOrSkewingX,\n} from './scaleSkew';\n\n// use this function if you want to generate new controls for every instance\nexport const createObjectDefaultControls = () => ({\n ml: new Control({\n x: -0.5,\n y: 0,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingXOrSkewingY,\n getActionName: scaleOrSkewActionName,\n }),\n\n mr: new Control({\n x: 0.5,\n y: 0,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingXOrSkewingY,\n getActionName: scaleOrSkewActionName,\n }),\n\n mb: new Control({\n x: 0,\n y: 0.5,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingYOrSkewingX,\n getActionName: scaleOrSkewActionName,\n }),\n\n mt: new Control({\n x: 0,\n y: -0.5,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionHandler: scalingYOrSkewingX,\n getActionName: scaleOrSkewActionName,\n }),\n\n tl: new Control({\n x: -0.5,\n y: -0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n tr: new Control({\n x: 0.5,\n y: -0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n bl: new Control({\n x: -0.5,\n y: 0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n br: new Control({\n x: 0.5,\n y: 0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: scalingEqually,\n }),\n\n mtr: new Control({\n x: 0,\n y: -0.5,\n actionHandler: rotationWithSnapping,\n cursorStyleHandler: rotationStyleHandler,\n offsetY: -40,\n withConnection: true,\n actionName: ROTATE,\n }),\n});\n\nexport const createResizeControls = () => ({\n mr: new Control({\n x: 0.5,\n y: 0,\n actionHandler: changeWidth,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionName: RESIZING,\n }),\n ml: new Control({\n x: -0.5,\n y: 0,\n actionHandler: changeWidth,\n cursorStyleHandler: scaleSkewCursorStyleHandler,\n actionName: RESIZING,\n }),\n});\n\nexport const createTextboxDefaultControls = () => ({\n ...createObjectDefaultControls(),\n ...createResizeControls(),\n});\n","import { Point, ZERO } from '../../Point';\nimport type { TCornerPoint, TDegree } from '../../typedefs';\nimport { FabricObject } from './Object';\nimport { degreesToRadians } from '../../util/misc/radiansDegreesConversion';\nimport type { TQrDecomposeOut } from '../../util/misc/matrix';\nimport {\n calcDimensionsMatrix,\n createRotateMatrix,\n createTranslateMatrix,\n multiplyTransformMatrices,\n qrDecompose,\n} from '../../util/misc/matrix';\nimport type { Control } from '../../controls/Control';\nimport { sizeAfterTransform } from '../../util/misc/objectTransforms';\nimport type { ObjectEvents, TPointerEvent } from '../../EventTypeDefs';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { ControlRenderingStyleOverride } from '../../controls/controlRendering';\nimport type { FabricObjectProps } from './types/FabricObjectProps';\nimport type { TFabricObjectProps, SerializedObjectProps } from './types';\nimport { createObjectDefaultControls } from '../../controls/commonControls';\nimport { interactiveObjectDefaultValues } from './defaultValues';\nimport { SCALE } from '../../constants';\n\nexport type TOCoord = Point & {\n corner: TCornerPoint;\n touchCorner: TCornerPoint;\n};\n\nexport type TControlSet = Record;\n\nexport type TBorderRenderingStyleOverride = Partial<\n Pick\n>;\n\nexport type TStyleOverride = ControlRenderingStyleOverride &\n TBorderRenderingStyleOverride &\n Partial<\n Pick & {\n forActiveSelection: boolean;\n }\n >;\n\nexport class InteractiveFabricObject<\n Props extends TFabricObjectProps = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements FabricObjectProps\n{\n declare noScaleCache: boolean;\n\n declare snapAngle?: TDegree;\n declare snapThreshold?: TDegree;\n\n declare lockMovementX: boolean;\n declare lockMovementY: boolean;\n declare lockRotation: boolean;\n declare lockScalingX: boolean;\n declare lockScalingY: boolean;\n declare lockSkewingX: boolean;\n declare lockSkewingY: boolean;\n declare lockScalingFlip: boolean;\n\n declare cornerSize: number;\n declare touchCornerSize: number;\n declare transparentCorners: boolean;\n declare cornerColor: string;\n declare cornerStrokeColor: string;\n declare cornerStyle: 'rect' | 'circle';\n declare cornerDashArray: number[] | null;\n declare hasControls: boolean;\n\n declare borderColor: string;\n declare borderDashArray: number[] | null;\n declare borderOpacityWhenMoving: number;\n declare borderScaleFactor: number;\n declare hasBorders: boolean;\n declare selectionBackgroundColor: string;\n\n declare selectable: boolean;\n declare evented: boolean;\n declare perPixelTargetFind: boolean;\n declare activeOn: 'down' | 'up';\n\n declare hoverCursor: CSSStyleDeclaration['cursor'] | null;\n declare moveCursor: CSSStyleDeclaration['cursor'] | null;\n\n /**\n * The object's controls' position in viewport coordinates\n * Calculated by {@link Control#positionHandler} and {@link Control#calcCornerCoords}, depending on {@link padding}.\n * `corner/touchCorner` describe the 4 points forming the interactive area of the corner.\n * Used to draw and locate controls.\n */\n declare oCoords: Record;\n\n /**\n * keeps the value of the last hovered corner during mouse move.\n * 0 is no corner, or 'mt', 'ml', 'mtr' etc..\n * It should be private, but there is no harm in using it as\n * a read-only property.\n * this isn't cleaned automatically. Non selected objects may have wrong values\n * @type [string]\n */\n declare __corner?: string;\n\n /**\n * a map of control visibility for this object.\n * this was left when controls were introduced to not break the api too much\n * this takes priority over the generic control visibility\n */\n declare _controlsVisibility: Record;\n\n /**\n * holds the controls for the object.\n * controls are added by default_controls.js\n */\n declare controls: TControlSet;\n\n /**\n * internal boolean to signal the code that the object is\n * part of the move action.\n */\n declare isMoving?: boolean;\n\n /**\n * A boolean used from the gesture module to keep tracking of a scaling\n * action when there is no scaling transform in place.\n * This is an edge case and is used twice in all codebase.\n * Probably added to keep track of some performance issues\n * @TODO use git blame to investigate why it was added\n * DON'T USE IT. WE WILL TRY TO REMOVE IT\n */\n declare _scaling?: boolean;\n\n declare canvas?: Canvas;\n\n static ownDefaults = interactiveObjectDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...InteractiveFabricObject.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(\n this,\n (this.constructor as typeof InteractiveFabricObject).createControls(),\n InteractiveFabricObject.ownDefaults,\n );\n this.setOptions(options);\n }\n\n /**\n * Creates the default control object.\n * If you prefer to have on instance of controls shared among all objects\n * make this function return an empty object and add controls to the ownDefaults\n * @param {Object} [options] Options object\n */\n static createControls(): { controls: Record } {\n return { controls: createObjectDefaultControls() };\n }\n\n /**\n * Update width and height of the canvas for cache\n * returns true or false if canvas needed resize.\n * @private\n * @return {Boolean} true if the canvas has been resized\n */\n _updateCacheCanvas() {\n const targetCanvas = this.canvas;\n if (this.noScaleCache && targetCanvas && targetCanvas._currentTransform) {\n const transform = targetCanvas._currentTransform,\n target = transform.target,\n action = transform.action;\n if (\n this === (target as unknown as this) &&\n action &&\n action.startsWith(SCALE)\n ) {\n return false;\n }\n }\n return super._updateCacheCanvas();\n }\n\n getActiveControl() {\n const key = this.__corner;\n return key\n ? {\n key,\n control: this.controls[key],\n coord: this.oCoords[key],\n }\n : undefined;\n }\n\n /**\n * Determines which corner is under the mouse cursor, represented by `pointer`.\n * This function is return a corner only if the object is the active one.\n * This is done to avoid selecting corner of non active object and activating transformations\n * rather than drag action. The default behavior of fabricJS is that if you want to transform\n * an object, first you select it to show the control set\n * @private\n * @param {Object} pointer The pointer indicating the mouse position\n * @param {boolean} forTouch indicates if we are looking for interaction area with a touch action\n * @return {String|Boolean} corner code (tl, tr, bl, br, etc.), or 0 if nothing is found.\n */\n findControl(\n pointer: Point,\n forTouch = false,\n ): { key: string; control: Control; coord: TOCoord } | undefined {\n if (!this.hasControls || !this.canvas) {\n return undefined;\n }\n\n this.__corner = undefined;\n const cornerEntries = Object.entries(this.oCoords);\n for (let i = cornerEntries.length - 1; i >= 0; i--) {\n const [key, corner] = cornerEntries[i];\n const control = this.controls[key];\n\n if (\n control.shouldActivate(\n key,\n this,\n pointer,\n forTouch ? corner.touchCorner : corner.corner,\n )\n ) {\n // this.canvas.contextTop.fillRect(pointer.x - 1, pointer.y - 1, 2, 2);\n this.__corner = key;\n\n return { key, control, coord: this.oCoords[key] };\n }\n }\n\n return undefined;\n }\n\n /**\n * Calculates the coordinates of the center of each control plus the corners of the control itself\n * This basically just delegates to each control positionHandler\n * WARNING: changing what is passed to positionHandler is a breaking change, since position handler\n * is a public api and should be done just if extremely necessary\n * @return {Record}\n */\n calcOCoords(): Record {\n const vpt = this.getViewportTransform(),\n center = this.getCenterPoint(),\n tMatrix = createTranslateMatrix(center.x, center.y),\n rMatrix = createRotateMatrix({\n angle: this.getTotalAngle() - (!!this.group && this.flipX ? 180 : 0),\n }),\n positionMatrix = multiplyTransformMatrices(tMatrix, rMatrix),\n startMatrix = multiplyTransformMatrices(vpt, positionMatrix),\n finalMatrix = multiplyTransformMatrices(startMatrix, [\n 1 / vpt[0],\n 0,\n 0,\n 1 / vpt[3],\n 0,\n 0,\n ]),\n transformOptions = this.group\n ? qrDecompose(this.calcTransformMatrix())\n : undefined;\n // decomposing could bring negative scaling and `_calculateCurrentDimensions` can't take it\n if (transformOptions) {\n transformOptions.scaleX = Math.abs(transformOptions.scaleX);\n transformOptions.scaleY = Math.abs(transformOptions.scaleY);\n }\n const dim = this._calculateCurrentDimensions(transformOptions),\n coords: Record = {};\n\n this.forEachControl((control, key) => {\n const position = control.positionHandler(dim, finalMatrix, this, control);\n // coords[key] are sometimes used as points. Those are points to which we add\n // the property corner and touchCorner from `_calcCornerCoords`.\n // don't remove this assign for an object spread.\n coords[key] = Object.assign(\n position,\n this._calcCornerCoords(control, position),\n );\n });\n\n // debug code\n /*\n const canvas = this.canvas;\n setTimeout(function () {\n if (!canvas) return;\n canvas.contextTop.clearRect(0, 0, 700, 700);\n canvas.contextTop.fillStyle = 'green';\n Object.keys(coords).forEach(function(key) {\n const control = coords[key];\n canvas.contextTop.fillRect(control.x, control.y, 3, 3);\n });\n } 50);\n */\n return coords;\n }\n\n /**\n * Sets the coordinates that determine the interaction area of each control\n * note: if we would switch to ROUND corner area, all of this would disappear.\n * everything would resolve to a single point and a pythagorean theorem for the distance\n * @todo evaluate simplification of code switching to circle interaction area at runtime\n * @private\n */\n private _calcCornerCoords(control: Control, position: Point) {\n const angle = this.getTotalAngle();\n const corner = control.calcCornerCoords(\n angle,\n this.cornerSize,\n position.x,\n position.y,\n false,\n this,\n );\n const touchCorner = control.calcCornerCoords(\n angle,\n this.touchCornerSize,\n position.x,\n position.y,\n true,\n this,\n );\n return { corner, touchCorner };\n }\n\n /**\n * @override set controls' coordinates as well\n * See {@link https://github.com/fabricjs/fabric.js/wiki/When-to-call-setCoords} and {@link http://fabricjs.com/fabric-gotchas}\n * @return {void}\n */\n setCoords(): void {\n super.setCoords();\n this.canvas && (this.oCoords = this.calcOCoords());\n }\n\n /**\n * Calls a function for each control. The function gets called,\n * with the control, the control's key and the object that is calling the iterator\n * @param {Function} fn function to iterate over the controls over\n */\n forEachControl(\n fn: (\n control: Control,\n key: string,\n fabricObject: InteractiveFabricObject,\n ) => any,\n ) {\n for (const i in this.controls) {\n fn(this.controls[i], i, this);\n }\n }\n\n /**\n * Draws a colored layer behind the object, inside its selection borders.\n * Requires public options: padding, selectionBackgroundColor\n * this function is called when the context is transformed\n * has checks to be skipped when the object is on a staticCanvas\n * @todo evaluate if make this disappear in favor of a pre-render hook for objects\n * this was added by Andrea Bogazzi to make possible some feature for work reasons\n * it seemed a good option, now is an edge case\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n */\n drawSelectionBackground(ctx: CanvasRenderingContext2D): void {\n if (\n !this.selectionBackgroundColor ||\n (this.canvas && (this.canvas._activeObject as unknown as this) !== this)\n ) {\n return;\n }\n ctx.save();\n const center = this.getRelativeCenterPoint(),\n wh = this._calculateCurrentDimensions(),\n vpt = this.getViewportTransform();\n ctx.translate(center.x, center.y);\n ctx.scale(1 / vpt[0], 1 / vpt[3]);\n ctx.rotate(degreesToRadians(this.angle));\n ctx.fillStyle = this.selectionBackgroundColor;\n ctx.fillRect(-wh.x / 2, -wh.y / 2, wh.x, wh.y);\n ctx.restore();\n }\n\n /**\n * @public override this function in order to customize the drawing of the control box, e.g. rounded corners, different border style.\n * @param {CanvasRenderingContext2D} ctx ctx is rotated and translated so that (0,0) is at object's center\n * @param {Point} size the control box size used\n */\n strokeBorders(ctx: CanvasRenderingContext2D, size: Point): void {\n ctx.strokeRect(-size.x / 2, -size.y / 2, size.x, size.y);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Point} size\n * @param {TStyleOverride} styleOverride object to override the object style\n */\n _drawBorders(\n ctx: CanvasRenderingContext2D,\n size: Point,\n styleOverride: TStyleOverride = {},\n ): void {\n const options = {\n hasControls: this.hasControls,\n borderColor: this.borderColor,\n borderDashArray: this.borderDashArray,\n ...styleOverride,\n };\n ctx.save();\n ctx.strokeStyle = options.borderColor;\n this._setLineDash(ctx, options.borderDashArray);\n this.strokeBorders(ctx, size);\n options.hasControls && this.drawControlsConnectingLines(ctx, size);\n ctx.restore();\n }\n\n /**\n * Renders controls and borders for the object\n * the context here is not transformed\n * @todo move to interactivity\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {TStyleOverride} [styleOverride] properties to override the object style\n */\n _renderControls(\n ctx: CanvasRenderingContext2D,\n styleOverride: TStyleOverride = {},\n ) {\n const { hasBorders, hasControls } = this;\n const styleOptions = {\n hasBorders,\n hasControls,\n ...styleOverride,\n };\n const vpt = this.getViewportTransform(),\n shouldDrawBorders = styleOptions.hasBorders,\n shouldDrawControls = styleOptions.hasControls;\n const matrix = multiplyTransformMatrices(vpt, this.calcTransformMatrix());\n const options = qrDecompose(matrix);\n ctx.save();\n ctx.translate(options.translateX, options.translateY);\n ctx.lineWidth = 1 * this.borderScaleFactor;\n // since interactive groups have been introduced, an object could be inside a group and needing controls\n // the following equality check `this.group === this.parent` covers:\n // object without a group ( undefined === undefined )\n // object inside a group\n // excludes object inside a group but multi selected since group and parent will differ in value\n if (this.group === this.parent) {\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n }\n if (this.flipX) {\n options.angle -= 180;\n }\n ctx.rotate(degreesToRadians(this.group ? options.angle : this.angle));\n shouldDrawBorders && this.drawBorders(ctx, options, styleOverride);\n shouldDrawControls && this.drawControls(ctx, styleOverride);\n ctx.restore();\n }\n\n /**\n * Draws borders of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {object} options object representing current object parameters\n * @param {TStyleOverride} [styleOverride] object to override the object style\n */\n drawBorders(\n ctx: CanvasRenderingContext2D,\n options: TQrDecomposeOut,\n styleOverride: TStyleOverride,\n ): void {\n let size;\n if ((styleOverride && styleOverride.forActiveSelection) || this.group) {\n const bbox = sizeAfterTransform(\n this.width,\n this.height,\n calcDimensionsMatrix(options),\n ),\n stroke = !this.isStrokeAccountedForInDimensions()\n ? (this.strokeUniform\n ? new Point().scalarAdd(this.canvas ? this.canvas.getZoom() : 1)\n : // this is extremely confusing. options comes from the upper function\n // and is the qrDecompose of a matrix that takes in account zoom too\n new Point(options.scaleX, options.scaleY)\n ).scalarMultiply(this.strokeWidth)\n : ZERO;\n size = bbox\n .add(stroke)\n .scalarAdd(this.borderScaleFactor)\n .scalarAdd(this.padding * 2);\n } else {\n size = this._calculateCurrentDimensions().scalarAdd(\n this.borderScaleFactor,\n );\n }\n this._drawBorders(ctx, size, styleOverride);\n }\n\n /**\n * Draws lines from a borders of an object's bounding box to controls that have `withConnection` property set.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Point} size object size x = width, y = height\n */\n drawControlsConnectingLines(\n ctx: CanvasRenderingContext2D,\n size: Point,\n ): void {\n let shouldStroke = false;\n\n ctx.beginPath();\n this.forEachControl((control, key) => {\n // in this moment, the ctx is centered on the object.\n // width and height of the above function are the size of the bbox.\n if (control.withConnection && control.getVisibility(this, key)) {\n // reset movement for each control\n shouldStroke = true;\n ctx.moveTo(control.x * size.x, control.y * size.y);\n ctx.lineTo(\n control.x * size.x + control.offsetX,\n control.y * size.y + control.offsetY,\n );\n }\n });\n shouldStroke && ctx.stroke();\n }\n\n /**\n * Draws corners of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: cornerSize, padding\n * Be aware that since fabric 6.0 this function does not call setCoords anymore.\n * setCoords needs to be called manually if the object of which we are rendering controls\n * is outside the standard selection and transform process.\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {ControlRenderingStyleOverride} styleOverride object to override the object style\n */\n drawControls(\n ctx: CanvasRenderingContext2D,\n styleOverride: ControlRenderingStyleOverride = {},\n ) {\n ctx.save();\n const retinaScaling = this.getCanvasRetinaScaling();\n const { cornerStrokeColor, cornerDashArray, cornerColor } = this;\n const options = {\n cornerStrokeColor,\n cornerDashArray,\n cornerColor,\n ...styleOverride,\n };\n ctx.setTransform(retinaScaling, 0, 0, retinaScaling, 0, 0);\n ctx.strokeStyle = ctx.fillStyle = options.cornerColor;\n if (!this.transparentCorners) {\n ctx.strokeStyle = options.cornerStrokeColor;\n }\n this._setLineDash(ctx, options.cornerDashArray);\n this.forEachControl((control, key) => {\n if (control.getVisibility(this, key)) {\n const p = this.oCoords[key];\n control.render(ctx, p.x, p.y, options, this);\n }\n });\n ctx.restore();\n }\n\n /**\n * Returns true if the specified control is visible, false otherwise.\n * @param {string} controlKey The key of the control. Possible values are usually 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr',\n * but since the control api allow for any control name, can be any string.\n * @returns {boolean} true if the specified control is visible, false otherwise\n */\n isControlVisible(controlKey: string): boolean {\n return (\n this.controls[controlKey] &&\n this.controls[controlKey].getVisibility(this, controlKey)\n );\n }\n\n /**\n * Sets the visibility of the specified control.\n * please do not use.\n * @param {String} controlKey The key of the control. Possible values are 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr'.\n * but since the control api allow for any control name, can be any string.\n * @param {Boolean} visible true to set the specified control visible, false otherwise\n * @todo discuss this overlap of priority here with the team. Andrea Bogazzi for details\n */\n setControlVisible(controlKey: string, visible: boolean) {\n if (!this._controlsVisibility) {\n this._controlsVisibility = {};\n }\n this._controlsVisibility[controlKey] = visible;\n }\n\n /**\n * Sets the visibility state of object controls, this is just a bulk option for setControlVisible;\n * @param {Record} [options] with an optional key per control\n * example: {Boolean} [options.bl] true to enable the bottom-left control, false to disable it\n */\n setControlsVisibility(options: Record = {}) {\n Object.entries(options).forEach(([controlKey, visibility]) =>\n this.setControlVisible(controlKey, visibility),\n );\n }\n\n /**\n * Clears the canvas.contextTop in a specific area that corresponds to the object's bounding box\n * that is in the canvas.contextContainer.\n * This function is used to clear pieces of contextTop where we render ephemeral effects on top of the object.\n * Example: blinking cursor text selection, drag effects.\n * @todo discuss swapping restoreManually with a renderCallback, but think of async issues\n * @param {Boolean} [restoreManually] When true won't restore the context after clear, in order to draw something else.\n * @return {CanvasRenderingContext2D|undefined} canvas.contextTop that is either still transformed\n * with the object transformMatrix, or restored to neutral transform\n */\n clearContextTop(\n restoreManually?: boolean,\n ): CanvasRenderingContext2D | undefined {\n if (!this.canvas) {\n return;\n }\n const ctx = this.canvas.contextTop;\n if (!ctx) {\n return;\n }\n const v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n this.transform(ctx);\n // we add 4 pixel, to be sure to do not leave any pixel out\n const width = this.width + 4,\n height = this.height + 4;\n ctx.clearRect(-width / 2, -height / 2, width, height);\n\n restoreManually || ctx.restore();\n return ctx;\n }\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to deselect this object. If the function returns true, the process is cancelled\n * @param {Object} [_options] options sent from the upper functions\n * @param {TPointerEvent} [options.e] event if the process is generated by an event\n * @param {FabricObject} [options.object] next object we are setting as active, and reason why\n * this is being deselected\n */\n onDeselect(_options?: {\n e?: TPointerEvent;\n object?: InteractiveFabricObject;\n }): boolean {\n // implemented by sub-classes, as needed.\n return false;\n }\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to select this object. If the function returns true, the process is cancelled\n * @param {Object} [_options] options sent from the upper functions\n * @param {Event} [_options.e] event if the process is generated by an event\n */\n onSelect(_options?: { e?: TPointerEvent }): boolean {\n // implemented by sub-classes, as needed.\n return false;\n }\n\n /**\n * Override to customize Drag behavior\n * Fired from {@link Canvas#_onMouseMove}\n * @returns true in order for the window to start a drag session\n */\n shouldStartDragging(_e: TPointerEvent) {\n return false;\n }\n\n /**\n * Override to customize Drag behavior\\\n * Fired once a drag session has started\n * @returns true to handle the drag event\n */\n onDragStart(_e: DragEvent) {\n return false;\n }\n\n /**\n * Override to customize drag and drop behavior\n * @public\n * @param {DragEvent} _e\n * @returns {boolean} true if the object currently dragged can be dropped on the target\n */\n canDrop(_e: DragEvent): boolean {\n return false;\n }\n\n /**\n * Override to customize drag and drop behavior\n * render a specific effect when an object is the source of a drag event\n * example: render the selection status for the part of text that is being dragged from a text object\n * @public\n * @param {DragEvent} _e\n */\n renderDragSourceEffect(_e: DragEvent) {\n // for subclasses\n }\n\n /**\n * Override to customize drag and drop behavior\n * render a specific effect when an object is the target of a drag event\n * used to show that the underly object can receive a drop, or to show how the\n * object will change when dropping. example: show the cursor where the text is about to be dropped\n * @public\n * @param {DragEvent} _e\n */\n renderDropTargetEffect(_e: DragEvent) {\n // for subclasses\n }\n}\n","import type { Constructor } from '../typedefs';\n\n/***\n * https://www.typescriptlang.org/docs/handbook/mixins.html#alternative-pattern\n */\nexport function applyMixins(\n derivedCtor: T,\n constructors: S[],\n) {\n constructors.forEach((baseCtor) => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\n name !== 'constructor' &&\n Object.defineProperty(\n derivedCtor.prototype,\n name,\n Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||\n Object.create(null),\n );\n });\n });\n return derivedCtor as T & { prototype: InstanceType };\n}\n","import type { ObjectEvents } from '../../EventTypeDefs';\nimport { FabricObjectSVGExportMixin } from './FabricObjectSVGExportMixin';\nimport { InteractiveFabricObject } from './InteractiveObject';\nimport { applyMixins } from '../../util/applyMixins';\nimport type { FabricObjectProps } from './types/FabricObjectProps';\nimport type { TFabricObjectProps, SerializedObjectProps } from './types';\nimport { classRegistry } from '../../ClassRegistry';\n\n// TODO somehow we have to make a tree-shakeable import\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface FabricObject<\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Props extends TFabricObjectProps = Partial,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n SProps extends SerializedObjectProps = SerializedObjectProps,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObjectSVGExportMixin {}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class FabricObject<\n Props extends TFabricObjectProps = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends InteractiveFabricObject {}\n\napplyMixins(FabricObject, [FabricObjectSVGExportMixin]);\n\nclassRegistry.setClass(FabricObject);\nclassRegistry.setClass(FabricObject, 'object');\n\nexport { cacheProperties } from './defaultValues';\n","/**\n * Returns true if context has transparent pixel\n * at specified location (taking tolerance into account)\n * @param {CanvasRenderingContext2D} ctx context\n * @param {Number} x x coordinate in canvasElementCoordinate, not fabric space. integer\n * @param {Number} y y coordinate in canvasElementCoordinate, not fabric space. integer\n * @param {Number} tolerance Tolerance pixels around the point, not alpha tolerance, integer\n * @return {boolean} true if transparent\n */\nexport const isTransparent = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n tolerance: number,\n): boolean => {\n tolerance = Math.round(tolerance);\n const size = tolerance * 2 + 1;\n const { data } = ctx.getImageData(x - tolerance, y - tolerance, size, size);\n\n // Split image data - for tolerance > 1, pixelDataSize = 4;\n for (let i = 3; i < data.length; i += 4) {\n const alphaChannel = data[i];\n if (alphaChannel > 0) {\n return false;\n }\n }\n return true;\n};\n","import type { Point } from '../../Point';\nimport type { TRadian } from '../../typedefs';\n/**\n * Rotates `point` around `origin` with `radians`\n * @deprecated use the Point.rotate\n * @param {Point} origin The origin of the rotation\n * @param {Point} origin The origin of the rotation\n * @param {TRadian} radians The radians of the angle for the rotation\n * @return {Point} The new rotated point\n */\nexport const rotatePoint = (\n point: Point,\n origin: Point,\n radians: TRadian,\n): Point => point.rotate(radians, origin);\n","export const findIndexRight = (\n array: T[],\n predicate: (value: T, index: number, array: T[]) => boolean,\n) => {\n for (let index = array.length - 1; index >= 0; index--) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n};\n","import type { XY } from '../../../Point';\nimport { Point } from '../../../Point';\nimport { degreesToRadians } from '../radiansDegreesConversion';\nimport { createVector } from '../vectors';\nimport type { TProjectStrokeOnPointsOptions, TProjection } from './types';\n\n/**\n * @see https://github.com/fabricjs/fabric.js/pull/8344\n * @todo consider removing skewing from points before calculating stroke projection,\n * see https://github.com/fabricjs/fabric.js/commit/494a10ee2f8c2278ae9a55b20bf50cf6ee25b064#commitcomment-94751537\n */\nexport abstract class StrokeProjectionsBase {\n declare options: TProjectStrokeOnPointsOptions;\n declare scale: Point;\n declare strokeUniformScalar: Point;\n declare strokeProjectionMagnitude: number;\n\n constructor(options: TProjectStrokeOnPointsOptions) {\n this.options = options;\n this.strokeProjectionMagnitude = this.options.strokeWidth / 2;\n this.scale = new Point(this.options.scaleX, this.options.scaleY);\n this.strokeUniformScalar = this.options.strokeUniform\n ? new Point(1 / this.options.scaleX, 1 / this.options.scaleY)\n : new Point(1, 1);\n }\n\n /**\n * When the stroke is uniform, scaling affects the arrangement of points. So we must take it into account.\n */\n protected createSideVector(from: XY, to: XY) {\n const v = createVector(from, to);\n return this.options.strokeUniform ? v.multiply(this.scale) : v;\n }\n\n protected abstract calcOrthogonalProjection(\n from: Point,\n to: Point,\n magnitude?: number,\n ): Point;\n\n protected projectOrthogonally(from: Point, to: Point, magnitude?: number) {\n return this.applySkew(\n from.add(this.calcOrthogonalProjection(from, to, magnitude)),\n );\n }\n\n protected isSkewed() {\n return this.options.skewX !== 0 || this.options.skewY !== 0;\n }\n\n protected applySkew(point: Point) {\n const p = new Point(point);\n // skewY must be applied before skewX as this distortion affects skewX calculation\n p.y += p.x * Math.tan(degreesToRadians(this.options.skewY));\n p.x += p.y * Math.tan(degreesToRadians(this.options.skewX));\n return p;\n }\n\n protected scaleUnitVector(unitVector: Point, scalar: number) {\n return unitVector.multiply(this.strokeUniformScalar).scalarMultiply(scalar);\n }\n\n protected abstract projectPoints(): Point[];\n\n public abstract project(): TProjection[];\n}\n","import type { XY } from '../../../Point';\nimport { Point } from '../../../Point';\nimport { halfPI, twoMathPi } from '../../../constants';\nimport type { TRadian } from '../../../typedefs';\nimport { degreesToRadians } from '../radiansDegreesConversion';\nimport {\n calcAngleBetweenVectors,\n calcVectorRotation,\n crossProduct,\n getOrthonormalVector,\n getUnitVector,\n isBetweenVectors,\n magnitude,\n rotateVector,\n} from '../vectors';\nimport { StrokeProjectionsBase } from './StrokeProjectionsBase';\nimport type { TProjection, TProjectStrokeOnPointsOptions } from './types';\n\nconst zeroVector = new Point();\n\n/**\n * class in charge of finding projections for each type of line join\n * @see {@link [Closed path projections at #8344](https://github.com/fabricjs/fabric.js/pull/8344#2-closed-path)}\n *\n * - MDN:\n * - https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin\n * - https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin\n * - Spec: https://svgwg.org/svg2-draft/painting.html#StrokeLinejoinProperty\n * - Playground to understand how the line joins works: https://hypertolosana.github.io/efficient-webgl-stroking/index.html\n * - View the calculated projections for each of the control points: https://codesandbox.io/s/project-stroke-points-with-context-to-trace-b8jc4j?file=/src/index.js\n *\n */\nexport class StrokeLineJoinProjections extends StrokeProjectionsBase {\n /**\n * The point being projected (the angle ∠BAC)\n */\n declare A: Point;\n /**\n * The point before A\n */\n declare B: Point;\n /**\n * The point after A\n */\n declare C: Point;\n /**\n * The AB vector\n */\n AB: Point;\n /**\n * The AC vector\n */\n AC: Point;\n /**\n * The angle of A (∠BAC)\n */\n alpha: TRadian;\n /**\n * The bisector of A (∠BAC)\n */\n bisector: Point;\n\n static getOrthogonalRotationFactor(vector1: Point, vector2?: Point) {\n const angle = vector2\n ? calcAngleBetweenVectors(vector1, vector2)\n : calcVectorRotation(vector1);\n return Math.abs(angle) < halfPI ? -1 : 1;\n }\n\n constructor(A: XY, B: XY, C: XY, options: TProjectStrokeOnPointsOptions) {\n super(options);\n this.A = new Point(A);\n this.B = new Point(B);\n this.C = new Point(C);\n this.AB = this.createSideVector(this.A, this.B);\n this.AC = this.createSideVector(this.A, this.C);\n this.alpha = calcAngleBetweenVectors(this.AB, this.AC);\n this.bisector = getUnitVector(\n // if AC is also the zero vector nothing will be projected\n // in that case the next point will handle the projection\n rotateVector(this.AB.eq(zeroVector) ? this.AC : this.AB, this.alpha / 2),\n );\n }\n\n calcOrthogonalProjection(\n from: Point,\n to: Point,\n magnitude: number = this.strokeProjectionMagnitude,\n ) {\n const vector = this.createSideVector(from, to);\n const orthogonalProjection = getOrthonormalVector(vector);\n const correctSide = StrokeLineJoinProjections.getOrthogonalRotationFactor(\n orthogonalProjection,\n this.bisector,\n );\n return this.scaleUnitVector(orthogonalProjection, magnitude * correctSide);\n }\n\n /**\n * BEVEL\n * Calculation: the projection points are formed by the vector orthogonal to the vertex.\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-2-bevel\n */\n projectBevel() {\n const projections: Point[] = [];\n // if `alpha` equals 0 or 2*PI, the projections are the same for `B` and `C`\n (this.alpha % twoMathPi === 0 ? [this.B] : [this.B, this.C]).forEach(\n (to) => {\n projections.push(this.projectOrthogonally(this.A, to));\n projections.push(\n this.projectOrthogonally(this.A, to, -this.strokeProjectionMagnitude),\n );\n },\n );\n return projections;\n }\n\n /**\n * MITER\n * Calculation: the corner is formed by extending the outer edges of the stroke\n * at the tangents of the path segments until they intersect.\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-1-miter\n */\n projectMiter() {\n const projections: Point[] = [],\n alpha = Math.abs(this.alpha),\n hypotUnitScalar = 1 / Math.sin(alpha / 2),\n miterVector = this.scaleUnitVector(\n this.bisector,\n -this.strokeProjectionMagnitude * hypotUnitScalar,\n );\n\n // When two line segments meet at a sharp angle, it is possible for the join to extend,\n // far beyond the thickness of the line stroking the path. The stroke-miterlimit imposes\n // a limit on the extent of the line join.\n // MDN: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit\n // When the stroke is uniform, scaling changes the arrangement of points, this changes the miter-limit\n const strokeMiterLimit = this.options.strokeUniform\n ? magnitude(\n this.scaleUnitVector(this.bisector, this.options.strokeMiterLimit),\n )\n : this.options.strokeMiterLimit;\n\n if (\n magnitude(miterVector) / this.strokeProjectionMagnitude <=\n strokeMiterLimit\n ) {\n projections.push(this.applySkew(this.A.add(miterVector)));\n }\n /* when the miter-limit is reached, the stroke line join becomes of type bevel.\n We always need two orthogonal projections which are basically bevel-type projections,\n so regardless of whether the miter-limit was reached or not, we include these projections.\n */\n projections.push(...this.projectBevel());\n\n return projections;\n }\n\n /**\n * ROUND (without skew)\n * Calculation: the projections are the two vectors parallel to X and Y axes\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-3-1-round-without-skew\n */\n private projectRoundNoSkew(startCircle: Point, endCircle: Point) {\n const projections: Point[] = [],\n // correctSide is used to only consider projecting for the outer side\n correctSide = new Point(\n StrokeLineJoinProjections.getOrthogonalRotationFactor(this.bisector),\n StrokeLineJoinProjections.getOrthogonalRotationFactor(\n new Point(this.bisector.y, this.bisector.x),\n ),\n ),\n radiusOnAxisX = new Point(1, 0)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar)\n .multiply(correctSide),\n radiusOnAxisY = new Point(0, 1)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar)\n .multiply(correctSide);\n\n [radiusOnAxisX, radiusOnAxisY].forEach((vector) => {\n if (isBetweenVectors(vector, startCircle, endCircle)) {\n projections.push(this.A.add(vector));\n }\n });\n return projections;\n }\n\n /**\n * ROUND (with skew)\n * Calculation: the projections are the points furthest from the vertex in\n * the direction of the X and Y axes after distortion.\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#2-3-2-round-skew\n */\n private projectRoundWithSkew(startCircle: Point, endCircle: Point) {\n const projections: Point[] = [];\n\n const { skewX, skewY, scaleX, scaleY, strokeUniform } = this.options,\n shearing = new Point(\n Math.tan(degreesToRadians(skewX)),\n Math.tan(degreesToRadians(skewY)),\n );\n // The points furthest from the vertex in the direction of the X and Y axes after distortion\n const circleRadius = this.strokeProjectionMagnitude,\n newY = strokeUniform\n ? circleRadius /\n scaleY /\n Math.sqrt(1 / scaleY ** 2 + (1 / scaleX ** 2) * shearing.y ** 2)\n : circleRadius / Math.sqrt(1 + shearing.y ** 2),\n furthestY = new Point(\n // Safe guard due to floating point precision. In some situations the square root\n // was returning NaN because of a negative number close to zero.\n Math.sqrt(Math.max(circleRadius ** 2 - newY ** 2, 0)),\n newY,\n ),\n newX = strokeUniform\n ? circleRadius /\n Math.sqrt(\n 1 +\n (shearing.x ** 2 * (1 / scaleY) ** 2) /\n (1 / scaleX + (1 / scaleX) * shearing.x * shearing.y) ** 2,\n )\n : circleRadius /\n Math.sqrt(1 + shearing.x ** 2 / (1 + shearing.x * shearing.y) ** 2),\n furthestX = new Point(\n newX,\n Math.sqrt(Math.max(circleRadius ** 2 - newX ** 2, 0)),\n );\n\n [\n furthestX,\n furthestX.scalarMultiply(-1),\n furthestY,\n furthestY.scalarMultiply(-1),\n ]\n // We need to skew the vector here as this information is used to check if\n // it is between the start and end of the circle segment\n .map((vector) =>\n this.applySkew(\n strokeUniform ? vector.multiply(this.strokeUniformScalar) : vector,\n ),\n )\n .forEach((vector) => {\n if (isBetweenVectors(vector, startCircle, endCircle)) {\n projections.push(this.applySkew(this.A).add(vector));\n }\n });\n\n return projections;\n }\n\n projectRound() {\n const projections: Point[] = [];\n /* Include the start and end points of the circle segment, so that only\n the projections contained within it are included */\n // add the orthogonal projections (start and end points of circle segment)\n projections.push(...this.projectBevel());\n // let's determines which one of the orthogonal projection is the beginning and end of the circle segment.\n // when `alpha` equals 0 or 2*PI, we have a straight line, so the way to find the start/end is different.\n const isStraightLine = this.alpha % twoMathPi === 0,\n // change the origin of the projections to point A\n // so that the cross product calculation is correct\n newOrigin = this.applySkew(this.A),\n proj0 = projections[isStraightLine ? 0 : 2].subtract(newOrigin),\n proj1 = projections[isStraightLine ? 1 : 0].subtract(newOrigin),\n // when `isStraightLine` === true, we compare with the vector opposite AB, otherwise we compare with the bisector.\n comparisonVector = isStraightLine\n ? this.applySkew(this.AB.scalarMultiply(-1))\n : this.applySkew(\n this.bisector.multiply(this.strokeUniformScalar).scalarMultiply(-1),\n ),\n // the beginning of the circle segment is always to the right of the comparison vector (cross product > 0)\n isProj0Start = crossProduct(proj0, comparisonVector) > 0,\n startCircle = isProj0Start ? proj0 : proj1,\n endCircle = isProj0Start ? proj1 : proj0;\n if (!this.isSkewed()) {\n projections.push(...this.projectRoundNoSkew(startCircle, endCircle));\n } else {\n projections.push(...this.projectRoundWithSkew(startCircle, endCircle));\n }\n return projections;\n }\n\n /**\n * Project stroke width on points returning projections for each point as follows:\n * - `miter`: 1 point corresponding to the outer boundary. If the miter limit is exceeded, it will be 2 points (becomes bevel)\n * - `bevel`: 2 points corresponding to the bevel possible boundaries, orthogonal to the stroke.\n * - `round`: same as `bevel` when it has no skew, with skew are 4 points.\n */\n protected projectPoints() {\n switch (this.options.strokeLineJoin) {\n case 'miter':\n return this.projectMiter();\n case 'round':\n return this.projectRound();\n default:\n return this.projectBevel();\n }\n }\n\n public project(): TProjection[] {\n return this.projectPoints().map((point) => ({\n originPoint: this.A,\n projectedPoint: point,\n angle: this.alpha,\n bisector: this.bisector,\n }));\n }\n}\n","import type { XY } from '../../../Point';\nimport { Point } from '../../../Point';\nimport { getOrthonormalVector, getUnitVector } from '../vectors';\nimport { StrokeLineJoinProjections } from './StrokeLineJoinProjections';\nimport { StrokeProjectionsBase } from './StrokeProjectionsBase';\nimport type { TProjection, TProjectStrokeOnPointsOptions } from './types';\n\n/**\n * class in charge of finding projections for each type of line cap for start/end of an open path\n * @see {@link [Open path projections at #8344](https://github.com/fabricjs/fabric.js/pull/8344#1-open-path)}\n *\n * Reference:\n * - MDN:\n * - https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap\n * - https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap\n * - Spec: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-linecap-dev\n * - Playground to understand how the line joins works: https://hypertolosana.github.io/efficient-webgl-stroking/index.html\n * - View the calculated projections for each of the control points: https://codesandbox.io/s/project-stroke-points-with-context-to-trace-b8jc4j?file=/src/index.js\n */\nexport class StrokeLineCapProjections extends StrokeProjectionsBase {\n /**\n * edge point\n */\n declare A: Point;\n /**\n * point next to edge point\n */\n declare T: Point;\n\n constructor(A: XY, T: XY, options: TProjectStrokeOnPointsOptions) {\n super(options);\n this.A = new Point(A);\n this.T = new Point(T);\n }\n\n calcOrthogonalProjection(\n from: Point,\n to: Point,\n magnitude: number = this.strokeProjectionMagnitude,\n ) {\n const vector = this.createSideVector(from, to);\n return this.scaleUnitVector(getOrthonormalVector(vector), magnitude);\n }\n\n /**\n * OPEN PATH START/END - Line cap: Butt\n * Calculation: to find the projections, just find the points orthogonal to the stroke\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#1-1-butt\n */\n projectButt() {\n return [\n this.projectOrthogonally(this.A, this.T, this.strokeProjectionMagnitude),\n this.projectOrthogonally(this.A, this.T, -this.strokeProjectionMagnitude),\n ];\n }\n\n /**\n * OPEN PATH START/END - Line cap: Round\n * Calculation: same as stroke line join `round`\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#1-2-round\n */\n projectRound() {\n const projections: Point[] = [];\n\n if (!this.isSkewed() && this.A.eq(this.T)) {\n /* 1 point case without `skew`\n When `strokeUniform` is true, scaling has no effect.\n So we divide by scale, to remove its effect.\n */\n const projection = new Point(1, 1)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar);\n projections.push(\n this.applySkew(this.A.add(projection)),\n this.applySkew(this.A.subtract(projection)),\n );\n } else {\n projections.push(\n ...new StrokeLineJoinProjections(\n this.A,\n this.T,\n this.T,\n this.options,\n ).projectRound(),\n );\n }\n\n return projections;\n }\n\n /**\n * OPEN PATH START/END - Line cap: Square\n * Calculation: project a rectangle of points on the stroke in the opposite direction of the vector `AT`\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344#1-3-square\n */\n projectSquare() {\n const projections: Point[] = [];\n\n if (this.A.eq(this.T)) {\n /* 1 point case without `skew`\n When `strokeUniform` is true, scaling has no effect.\n So we divide by scale, to remove its effect.\n */\n const projection = new Point(1, 1)\n .scalarMultiply(this.strokeProjectionMagnitude)\n .multiply(this.strokeUniformScalar);\n projections.push(this.A.add(projection), this.A.subtract(projection));\n } else {\n const orthogonalProjection = this.calcOrthogonalProjection(\n this.A,\n this.T,\n this.strokeProjectionMagnitude,\n );\n const strokePointingOut = this.scaleUnitVector(\n getUnitVector(this.createSideVector(this.A, this.T)),\n -this.strokeProjectionMagnitude,\n );\n const projectedA = this.A.add(strokePointingOut);\n projections.push(\n projectedA.add(orthogonalProjection),\n projectedA.subtract(orthogonalProjection),\n );\n }\n\n return projections.map((p) => this.applySkew(p));\n }\n\n protected projectPoints() {\n switch (this.options.strokeLineCap) {\n case 'round':\n return this.projectRound();\n case 'square':\n return this.projectSquare();\n default:\n return this.projectButt();\n }\n }\n\n public project(): TProjection[] {\n return this.projectPoints().map((point) => ({\n originPoint: this.A,\n projectedPoint: point,\n }));\n }\n}\n","import { Point, type XY } from '../../../Point';\nimport { findIndexRight } from '../../internals/findRight';\nimport { StrokeLineCapProjections } from './StrokeLineCapProjections';\nimport { StrokeLineJoinProjections } from './StrokeLineJoinProjections';\nimport type { TProjection, TProjectStrokeOnPointsOptions } from './types';\n\nexport * from './types';\n\n/**\n *\n * Used to calculate object's bounding box\n *\n * @see https://github.com/fabricjs/fabric.js/pull/8344\n *\n */\nexport const projectStrokeOnPoints = (\n points: XY[],\n options: TProjectStrokeOnPointsOptions,\n openPath = false,\n): TProjection[] => {\n const projections: TProjection[] = [];\n\n if (points.length === 0) {\n return projections;\n }\n\n // first we remove duplicate neighboring points\n const reduced = points.reduce(\n (reduced, point) => {\n if (!reduced[reduced.length - 1].eq(point)) {\n reduced.push(new Point(point));\n }\n return reduced;\n },\n [new Point(points[0])],\n );\n\n if (reduced.length === 1) {\n openPath = true;\n } else if (!openPath) {\n // remove points from end in case they equal the first point\n // in order to correctly project the first point\n const start = reduced[0];\n const index = findIndexRight(reduced, (point) => !point.eq(start));\n reduced.splice(index + 1);\n }\n\n reduced.forEach((A, index, points) => {\n let B: XY, C: XY;\n if (index === 0) {\n C = points[1];\n B = openPath ? A : points[points.length - 1];\n } else if (index === points.length - 1) {\n B = points[index - 1];\n C = openPath ? A : points[0];\n } else {\n B = points[index - 1];\n C = points[index + 1];\n }\n\n if (openPath && points.length === 1) {\n projections.push(\n ...new StrokeLineCapProjections(A, A, options).project(),\n );\n } else if (openPath && (index === 0 || index === points.length - 1)) {\n projections.push(\n ...new StrokeLineCapProjections(\n A,\n index === 0 ? C : B,\n options,\n ).project(),\n );\n } else {\n projections.push(\n ...new StrokeLineJoinProjections(A, B, C, options).project(),\n );\n }\n });\n\n return projections;\n};\n","import type { TextStyle } from '../../shapes/Text/StyledText';\n\nexport const cloneStyles = (style: TextStyle): TextStyle => {\n const newObj: TextStyle = {};\n Object.keys(style).forEach((key) => {\n newObj[key] = {};\n Object.keys(style[key]).forEach((keyInner) => {\n newObj[key][keyInner] = { ...style[key][keyInner] };\n });\n });\n return newObj;\n};\n","/**\n * Capitalizes a string\n * @param {String} string String to capitalize\n * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized\n * and other letters stay untouched, if false first letter is capitalized\n * and other letters are converted to lowercase.\n * @return {String} Capitalized version of a string\n */\nexport const capitalize = (string: string, firstLetterOnly = false): string =>\n `${string.charAt(0).toUpperCase()}${\n firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase()\n }`;\n\n/**\n * Escapes XML in a string\n * @param {String} string String to escape\n * @return {String} Escaped version of a string\n */\nexport const escapeXml = (string: string): string =>\n string\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(//g, '>');\n\n/**\n * Divide a string in the user perceived single units\n * @param {String} textstring String to escape\n * @return {Array} array containing the graphemes\n */\nexport const graphemeSplit = (textstring: string): string[] => {\n const graphemes = [];\n for (let i = 0, chr; i < textstring.length; i++) {\n if ((chr = getWholeChar(textstring, i)) === false) {\n continue;\n }\n graphemes.push(chr as string);\n }\n return graphemes;\n};\n\n// taken from mdn in the charAt doc page.\nconst getWholeChar = (str: string, i: number): string | boolean => {\n const code = str.charCodeAt(i);\n if (isNaN(code)) {\n return ''; // Position not found\n }\n if (code < 0xd800 || code > 0xdfff) {\n return str.charAt(i);\n }\n\n // High surrogate (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xd800 <= code && code <= 0xdbff) {\n if (str.length <= i + 1) {\n throw 'High surrogate without following low surrogate';\n }\n const next = str.charCodeAt(i + 1);\n if (0xdc00 > next || next > 0xdfff) {\n throw 'High surrogate without following low surrogate';\n }\n return str.charAt(i) + str.charAt(i + 1);\n }\n // Low surrogate (0xDC00 <= code && code <= 0xDFFF)\n if (i === 0) {\n throw 'Low surrogate without preceding high surrogate';\n }\n const prev = str.charCodeAt(i - 1);\n\n // (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xd800 > prev || prev > 0xdbff) {\n throw 'Low surrogate without preceding high surrogate';\n }\n // We can pass over low surrogates now as the second component\n // in a pair which we have already processed\n return false;\n};\n","import { reNewline } from '../../constants';\nimport type {\n TextStyle,\n TextStyleDeclaration,\n} from '../../shapes/Text/StyledText';\nimport { cloneStyles } from '../internals/cloneStyles';\nimport { graphemeSplit } from '../lang_string';\n\nexport type TextStyleArray = {\n start: number;\n end: number;\n style: TextStyleDeclaration;\n}[];\n\n/**\n * @param {Object} prevStyle first style to compare\n * @param {Object} thisStyle second style to compare\n * @param {boolean} forTextSpans whether to check overline, underline, and line-through properties\n * @return {boolean} true if the style changed\n */\nexport const hasStyleChanged = (\n prevStyle: TextStyleDeclaration,\n thisStyle: TextStyleDeclaration,\n forTextSpans = false,\n) =>\n prevStyle.fill !== thisStyle.fill ||\n prevStyle.stroke !== thisStyle.stroke ||\n prevStyle.strokeWidth !== thisStyle.strokeWidth ||\n prevStyle.fontSize !== thisStyle.fontSize ||\n prevStyle.fontFamily !== thisStyle.fontFamily ||\n prevStyle.fontWeight !== thisStyle.fontWeight ||\n prevStyle.fontStyle !== thisStyle.fontStyle ||\n prevStyle.textBackgroundColor !== thisStyle.textBackgroundColor ||\n prevStyle.deltaY !== thisStyle.deltaY ||\n (forTextSpans &&\n (prevStyle.overline !== thisStyle.overline ||\n prevStyle.underline !== thisStyle.underline ||\n prevStyle.linethrough !== thisStyle.linethrough));\n\n/**\n * Returns the array form of a text object's inline styles property with styles grouped in ranges\n * rather than per character. This format is less verbose, and is better suited for storage\n * so it is used in serialization (not during runtime).\n * @param {object} styles per character styles for a text object\n * @param {String} text the text string that the styles are applied to\n * @return {{start: number, end: number, style: object}[]}\n */\nexport const stylesToArray = (\n styles: TextStyle,\n text: string,\n): TextStyleArray => {\n const textLines = text.split('\\n'),\n stylesArray = [];\n let charIndex = -1,\n prevStyle = {};\n // clone style structure to prevent mutation\n styles = cloneStyles(styles);\n\n //loop through each textLine\n for (let i = 0; i < textLines.length; i++) {\n const chars = graphemeSplit(textLines[i]);\n if (!styles[i]) {\n //no styles exist for this line, so add the line's length to the charIndex total and reset prevStyle\n charIndex += chars.length;\n prevStyle = {};\n continue;\n }\n //loop through each character of the current line\n for (let c = 0; c < chars.length; c++) {\n charIndex++;\n const thisStyle = styles[i][c];\n //check if style exists for this character\n if (thisStyle && Object.keys(thisStyle).length > 0) {\n if (hasStyleChanged(prevStyle, thisStyle, true)) {\n stylesArray.push({\n start: charIndex,\n end: charIndex + 1,\n style: thisStyle,\n });\n } else {\n //if style is the same as previous character, increase end index\n stylesArray[stylesArray.length - 1].end++;\n }\n }\n prevStyle = thisStyle || {};\n }\n }\n return stylesArray;\n};\n\n/**\n * Returns the object form of the styles property with styles that are assigned per\n * character rather than grouped by range. This format is more verbose, and is\n * only used during runtime (not for serialization/storage)\n * @param {Array} styles the serialized form of a text object's styles\n * @param {String} text the text string that the styles are applied to\n * @return {Object}\n */\nexport const stylesFromArray = (\n styles: TextStyleArray | TextStyle,\n text: string,\n): TextStyle => {\n if (!Array.isArray(styles)) {\n // clone to prevent mutation\n return cloneStyles(styles);\n }\n const textLines = text.split(reNewline),\n stylesObject: TextStyle = {};\n let charIndex = -1,\n styleIndex = 0;\n //loop through each textLine\n for (let i = 0; i < textLines.length; i++) {\n const chars = graphemeSplit(textLines[i]);\n\n //loop through each character of the current line\n for (let c = 0; c < chars.length; c++) {\n charIndex++;\n //check if there's a style collection that includes the current character\n if (\n styles[styleIndex] &&\n styles[styleIndex].start <= charIndex &&\n charIndex < styles[styleIndex].end\n ) {\n //create object for line index if it doesn't exist\n stylesObject[i] = stylesObject[i] || {};\n //assign a style at this character's index\n stylesObject[i][c] = { ...styles[styleIndex].style };\n //if character is at the end of the current style collection, move to the next\n if (charIndex === styles[styleIndex].end - 1) {\n styleIndex++;\n }\n }\n }\n }\n return stylesObject;\n};\n","import { FILL, STROKE } from '../constants';\n\n/**\n * Attributes parsed from all SVG elements\n * @type array\n */\nexport const SHARED_ATTRIBUTES = [\n 'display',\n 'transform',\n FILL,\n 'fill-opacity',\n 'fill-rule',\n 'opacity',\n STROKE,\n 'stroke-dasharray',\n 'stroke-linecap',\n 'stroke-dashoffset',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'id',\n 'paint-order',\n 'vector-effect',\n 'instantiated_by_use',\n 'clip-path',\n];\n","export function selectorMatches(element: HTMLElement, selector: string) {\n const nodeName = element.nodeName;\n const classNames = element.getAttribute('class');\n const id = element.getAttribute('id');\n const azAz = '(?![a-zA-Z\\\\-]+)';\n let matcher;\n // i check if a selector matches slicing away part from it.\n // if i get empty string i should match\n matcher = new RegExp('^' + nodeName, 'i');\n selector = selector.replace(matcher, '');\n if (id && selector.length) {\n matcher = new RegExp('#' + id + azAz, 'i');\n selector = selector.replace(matcher, '');\n }\n if (classNames && selector.length) {\n const splitClassNames = classNames.split(' ');\n for (let i = splitClassNames.length; i--; ) {\n matcher = new RegExp('\\\\.' + splitClassNames[i] + azAz, 'i');\n selector = selector.replace(matcher, '');\n }\n }\n return selector.length === 0;\n}\n","import { selectorMatches } from './selectorMatches';\n\nexport function doesSomeParentMatch(element: HTMLElement, selectors: string[]) {\n let selector: string,\n parentMatching = true;\n while (\n element.parentElement &&\n element.parentElement.nodeType === 1 &&\n selectors.length\n ) {\n if (parentMatching) {\n selector = selectors.pop()!;\n }\n element = element.parentElement;\n parentMatching = selectorMatches(element, selector!);\n }\n return selectors.length === 0;\n}\n","import { selectorMatches } from './selectorMatches';\nimport { doesSomeParentMatch } from './doesSomeParentMatch';\n\n/**\n * @private\n */\n\nexport function elementMatchesRule(element: HTMLElement, selectors: string[]) {\n let parentMatching = true;\n // start from rightmost selector.\n const firstMatching = selectorMatches(element, selectors.pop()!);\n if (firstMatching && selectors.length) {\n parentMatching = doesSomeParentMatch(element, selectors);\n }\n return firstMatching && parentMatching && selectors.length === 0;\n}\n","import { elementMatchesRule } from './elementMatchesRule';\nimport type { CSSRules } from './typedefs';\n\n/**\n * @private\n */\n\nexport function getGlobalStylesForElement(\n element: HTMLElement,\n cssRules: CSSRules = {},\n) {\n let styles: Record = {};\n for (const rule in cssRules) {\n if (elementMatchesRule(element, rule.split(' '))) {\n styles = {\n ...styles,\n ...cssRules[rule],\n };\n }\n }\n return styles;\n}\n","import { attributesMap } from './constants';\n\nexport const normalizeAttr = (\n attr: keyof typeof attributesMap | string,\n): string => attributesMap[attr as keyof typeof attributesMap] ?? attr;\n","import { reNum } from '../../parser/constants';\n\nconst regex = new RegExp(`(${reNum})`, 'gi');\n\nexport const cleanupSvgAttribute = (attributeValue: string) =>\n attributeValue\n .replace(regex, ' $1 ')\n // replace annoying commas and arbitrary whitespace with single spaces\n .replace(/,/gi, ' ')\n .replace(/\\s+/gi, ' ');\n","import { ROTATE, SCALE, SKEW_X, SKEW_Y, iMatrix } from '../constants';\nimport { reNum } from './constants';\nimport type { TMat2D } from '../typedefs';\nimport { cleanupSvgAttribute } from '../util/internals/cleanupSvgAttribute';\nimport {\n createRotateMatrix,\n createScaleMatrix,\n createSkewXMatrix,\n createSkewYMatrix,\n createTranslateMatrix,\n multiplyTransformMatrixArray,\n} from '../util/misc/matrix';\n\n// == begin transform regexp\nconst p = `(${reNum})`;\nconst skewX = String.raw`(skewX)\\(${p}\\)`;\nconst skewY = String.raw`(skewY)\\(${p}\\)`;\nconst rotate = String.raw`(rotate)\\(${p}(?: ${p} ${p})?\\)`;\nconst scale = String.raw`(scale)\\(${p}(?: ${p})?\\)`;\nconst translate = String.raw`(translate)\\(${p}(?: ${p})?\\)`;\nconst matrix = String.raw`(matrix)\\(${p} ${p} ${p} ${p} ${p} ${p}\\)`;\nconst transform = `(?:${matrix}|${translate}|${rotate}|${scale}|${skewX}|${skewY})`;\nconst transforms = `(?:${transform}*)`;\nconst transformList = String.raw`^\\s*(?:${transforms}?)\\s*$`;\n// http://www.w3.org/TR/SVG/coords.html#TransformAttribute\nconst reTransformList = new RegExp(transformList);\nconst reTransform = new RegExp(transform);\nconst reTransformAll = new RegExp(transform, 'g');\n// == end transform regexp\n\n/**\n * Parses \"transform\" attribute, returning an array of values\n * @static\n * @function\n * @memberOf fabric\n * @param {String} attributeValue String containing attribute value\n * @return {TTransformMatrix} Array of 6 elements representing transformation matrix\n */\nexport function parseTransformAttribute(attributeValue: string): TMat2D {\n // first we clean the string\n attributeValue = cleanupSvgAttribute(attributeValue)\n // remove spaces around front parentheses\n .replace(/\\s*([()])\\s*/gi, '$1');\n\n // start with identity matrix\n const matrices: TMat2D[] = [];\n\n // return if no argument was given or\n // an argument does not match transform attribute regexp\n if (\n !attributeValue ||\n (attributeValue && !reTransformList.test(attributeValue))\n ) {\n return [...iMatrix];\n }\n\n for (const match of attributeValue.matchAll(reTransformAll)) {\n const transformMatch = reTransform.exec(match[0]);\n if (!transformMatch) {\n continue;\n }\n let matrix: TMat2D = iMatrix;\n const matchedParams = transformMatch.filter((m) => !!m);\n const [, operation, ...rawArgs] = matchedParams;\n const [arg0, arg1, arg2, arg3, arg4, arg5] = rawArgs.map((arg) =>\n parseFloat(arg),\n );\n\n switch (operation) {\n case 'translate':\n matrix = createTranslateMatrix(arg0, arg1);\n break;\n case ROTATE:\n matrix = createRotateMatrix({ angle: arg0 }, { x: arg1, y: arg2 });\n break;\n case SCALE:\n matrix = createScaleMatrix(arg0, arg1);\n break;\n case SKEW_X:\n matrix = createSkewXMatrix(arg0);\n break;\n case SKEW_Y:\n matrix = createSkewYMatrix(arg0);\n break;\n case 'matrix':\n matrix = [arg0, arg1, arg2, arg3, arg4, arg5];\n break;\n }\n\n // snapshot current matrix into matrices array\n matrices.push(matrix);\n }\n\n return multiplyTransformMatrixArray(matrices);\n}\n","import { multiplyTransformMatrices } from '../util/misc/matrix';\nimport { parseUnit } from '../util/misc/svgParsing';\nimport { parseTransformAttribute } from './parseTransformAttribute';\nimport { CENTER, LEFT, RIGHT, NONE, FILL, STROKE } from '../constants';\n\nexport function normalizeValue(\n attr: string,\n value: any,\n parentAttributes: Record,\n fontSize: number,\n): string | null | boolean | number[] | number {\n const isArray = Array.isArray(value);\n let parsed: number | number[];\n let ouputValue: string | null | boolean | number[] | number = value;\n if ((attr === FILL || attr === STROKE) && value === NONE) {\n ouputValue = '';\n } else if (attr === 'strokeUniform') {\n return value === 'non-scaling-stroke';\n } else if (attr === 'strokeDashArray') {\n if (value === NONE) {\n ouputValue = null;\n } else {\n ouputValue = value.replace(/,/g, ' ').split(/\\s+/).map(parseFloat);\n }\n } else if (attr === 'transformMatrix') {\n if (parentAttributes && parentAttributes.transformMatrix) {\n ouputValue = multiplyTransformMatrices(\n parentAttributes.transformMatrix,\n parseTransformAttribute(value),\n );\n } else {\n ouputValue = parseTransformAttribute(value);\n }\n } else if (attr === 'visible') {\n ouputValue = value !== NONE && value !== 'hidden';\n // display=none on parent element always takes precedence over child element\n if (parentAttributes && parentAttributes.visible === false) {\n ouputValue = false;\n }\n } else if (attr === 'opacity') {\n ouputValue = parseFloat(value);\n if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {\n ouputValue *= parentAttributes.opacity as number;\n }\n } else if (attr === 'textAnchor' /* text-anchor */) {\n ouputValue = value === 'start' ? LEFT : value === 'end' ? RIGHT : CENTER;\n } else if (attr === 'charSpacing') {\n // parseUnit returns px and we convert it to em\n parsed = (parseUnit(value, fontSize) / fontSize) * 1000;\n } else if (attr === 'paintFirst') {\n const fillIndex = value.indexOf(FILL);\n const strokeIndex = value.indexOf(STROKE);\n ouputValue = FILL;\n if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {\n ouputValue = STROKE;\n } else if (fillIndex === -1 && strokeIndex > -1) {\n ouputValue = STROKE;\n }\n } else if (\n attr === 'href' ||\n attr === 'xlink:href' ||\n attr === 'font' ||\n attr === 'id'\n ) {\n return value;\n } else if (attr === 'imageSmoothing') {\n return value === 'optimizeQuality';\n } else {\n parsed = isArray\n ? (value as string[]).map(parseUnit)\n : parseUnit(value, fontSize);\n }\n\n return !isArray && isNaN(parsed! as number) ? ouputValue : parsed!;\n}\n","import { parseUnit } from '../util/misc/svgParsing';\nimport { reFontDeclaration } from './constants';\n\n/**\n * Parses a short font declaration, building adding its properties to a style object\n * @static\n * @function\n * @memberOf fabric\n * @param {String} value font declaration\n * @param {Object} oStyle definition\n */\nexport function parseFontDeclaration(\n value: string,\n oStyle: Record,\n): void {\n const match = value.match(reFontDeclaration);\n\n if (!match) {\n return;\n }\n const fontStyle = match[1],\n // font variant is not used\n // fontVariant = match[2],\n fontWeight = match[3],\n fontSize = match[4],\n lineHeight = match[5],\n fontFamily = match[6];\n\n if (fontStyle) {\n oStyle.fontStyle = fontStyle;\n }\n if (fontWeight) {\n oStyle.fontWeight = isNaN(parseFloat(fontWeight))\n ? fontWeight\n : parseFloat(fontWeight);\n }\n if (fontSize) {\n oStyle.fontSize = parseUnit(fontSize);\n }\n if (fontFamily) {\n oStyle.fontFamily = fontFamily;\n }\n if (lineHeight) {\n oStyle.lineHeight = lineHeight === 'normal' ? 1 : lineHeight;\n }\n}\n","/**\n * Takes a style object and parses it in one that has only defined values\n * and lowercases properties\n * @param style\n * @param oStyle\n */\nexport function parseStyleObject(\n style: Record,\n oStyle: Record,\n): void {\n Object.entries(style).forEach(([prop, value]) => {\n if (value === undefined) {\n return;\n }\n oStyle[prop.toLowerCase()] = value;\n });\n}\n","/**\n * Takes a style string and parses it in one that has only defined values\n * and lowercases properties\n * @param style\n * @param oStyle\n */\nexport function parseStyleString(\n style: string,\n oStyle: Record,\n): void {\n style\n .replace(/;\\s*$/, '')\n .split(';')\n .forEach((chunk) => {\n if (!chunk) return;\n const [attr, value] = chunk.split(':');\n oStyle[attr.trim().toLowerCase()] = value.trim();\n });\n}\n","import { parseStyleObject } from './parseStyleObject';\nimport { parseStyleString } from './parseStyleString';\n\n/**\n * Parses \"style\" attribute, retuning an object with values\n * @static\n * @memberOf fabric\n * @param {SVGElement} element Element to parse\n * @return {Object} Objects with values parsed from style attribute of an element\n */\nexport function parseStyleAttribute(element: HTMLElement): Record {\n const oStyle: Record = {},\n style = element.getAttribute('style');\n\n if (!style) {\n return oStyle;\n }\n\n if (typeof style === 'string') {\n parseStyleString(style, oStyle);\n } else {\n parseStyleObject(style, oStyle);\n }\n\n return oStyle;\n}\n","import { Color } from '../color/Color';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject } from '../shapes/Object/FabricObject';\n\nconst colorAttributesMap = {\n stroke: 'strokeOpacity',\n fill: 'fillOpacity',\n};\n\n/**\n * @private\n * @param {Object} attributes Array of attributes to parse\n */\n\nexport function setStrokeFillOpacity(\n attributes: Record,\n): Record {\n const defaults = FabricObject.getDefaults();\n Object.entries(colorAttributesMap).forEach(([attr, colorAttr]) => {\n if (\n typeof attributes[colorAttr] === 'undefined' ||\n attributes[attr] === ''\n ) {\n return;\n }\n if (typeof attributes[attr] === 'undefined') {\n if (!defaults[attr]) {\n return;\n }\n attributes[attr] = defaults[attr];\n }\n if (attributes[attr].indexOf('url(') === 0) {\n return;\n }\n const color = new Color(attributes[attr]);\n attributes[attr] = color\n .setAlpha(toFixed(color.getAlpha() * attributes[colorAttr], 2))\n .toRgba();\n });\n return attributes;\n}\n","import { DEFAULT_SVG_FONT_SIZE } from '../constants';\nimport { parseUnit } from '../util/misc/svgParsing';\nimport { cPath, fSize, svgValidParentsRegEx } from './constants';\nimport { getGlobalStylesForElement } from './getGlobalStylesForElement';\nimport { normalizeAttr } from './normalizeAttr';\nimport { normalizeValue } from './normalizeValue';\nimport { parseFontDeclaration } from './parseFontDeclaration';\nimport { parseStyleAttribute } from './parseStyleAttribute';\nimport { setStrokeFillOpacity } from './setStrokeFillOpacity';\nimport type { CSSRules } from './typedefs';\n\n/**\n * Returns an object of attributes' name/value, given element and an array of attribute names;\n * Parses parent \"g\" nodes recursively upwards.\n * @param {SVGElement | HTMLElement} element Element to parse\n * @param {Array} attributes Array of attributes to parse\n * @return {Object} object containing parsed attributes' names/values\n */\nexport function parseAttributes(\n element: HTMLElement | null,\n attributes: string[],\n cssRules?: CSSRules,\n): Record {\n if (!element) {\n return {};\n }\n\n let parentAttributes: Record = {},\n fontSize: number,\n parentFontSize = DEFAULT_SVG_FONT_SIZE;\n\n // if there's a parent container (`g` or `a` or `symbol` node), parse its attributes recursively upwards\n if (\n element.parentNode &&\n svgValidParentsRegEx.test(element.parentNode.nodeName)\n ) {\n parentAttributes = parseAttributes(\n element.parentElement,\n attributes,\n cssRules,\n );\n if (parentAttributes.fontSize) {\n fontSize = parentFontSize = parseUnit(parentAttributes.fontSize);\n }\n }\n\n const ownAttributes: Record = {\n ...attributes.reduce>((memo, attr) => {\n const value = element.getAttribute(attr);\n if (value) {\n memo[attr] = value;\n }\n return memo;\n }, {}),\n // add values parsed from style, which take precedence over attributes\n // (see: http://www.w3.org/TR/SVG/styling.html#UsingPresentationAttributes)\n ...getGlobalStylesForElement(element, cssRules),\n ...parseStyleAttribute(element),\n };\n\n if (ownAttributes[cPath]) {\n element.setAttribute(cPath, ownAttributes[cPath]);\n }\n if (ownAttributes[fSize]) {\n // looks like the minimum should be 9px when dealing with ems. this is what looks like in browsers.\n fontSize = parseUnit(ownAttributes[fSize], parentFontSize);\n ownAttributes[fSize] = `${fontSize}`;\n }\n\n // this should have its own complex type\n const normalizedStyle: Record<\n string,\n string | boolean | number | number[] | null\n > = {};\n for (const attr in ownAttributes) {\n const normalizedAttr = normalizeAttr(attr);\n const normalizedValue = normalizeValue(\n normalizedAttr,\n ownAttributes[attr],\n parentAttributes,\n fontSize!,\n );\n normalizedStyle[normalizedAttr] = normalizedValue;\n }\n if (normalizedStyle && normalizedStyle.font) {\n parseFontDeclaration(normalizedStyle.font as string, normalizedStyle);\n }\n const mergedAttrs = { ...parentAttributes, ...normalizedStyle };\n return svgValidParentsRegEx.test(element.nodeName)\n ? mergedAttrs\n : setStrokeFillOpacity(mergedAttrs);\n}\n","import { kRect } from '../constants';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const rectDefaultValues: Partial> = {\n rx: 0,\n ry: 0,\n};\n\ninterface UniqueRectProps {\n rx: number;\n ry: number;\n}\n\nexport interface SerializedRectProps\n extends SerializedObjectProps,\n UniqueRectProps {}\n\nexport interface RectProps extends FabricObjectProps, UniqueRectProps {}\n\nconst RECT_PROPS = ['rx', 'ry'] as const;\n\nexport class Rect<\n Props extends TOptions = Partial,\n SProps extends SerializedRectProps = SerializedRectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements RectProps\n{\n /**\n * Horizontal border radius\n * @type Number\n * @default\n */\n declare rx: number;\n\n /**\n * Vertical border radius\n * @type Number\n * @default\n */\n declare ry: number;\n\n static type = 'Rect';\n\n static cacheProperties = [...cacheProperties, ...RECT_PROPS];\n\n static ownDefaults = rectDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Rect.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Rect.ownDefaults);\n this.setOptions(options);\n this._initRxRy();\n }\n /**\n * Initializes rx/ry attributes\n * @private\n */\n _initRxRy() {\n const { rx, ry } = this;\n if (rx && !ry) {\n this.ry = rx;\n } else if (ry && !rx) {\n this.rx = ry;\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const { width: w, height: h } = this;\n const x = -w / 2;\n const y = -h / 2;\n const rx = this.rx ? Math.min(this.rx, w / 2) : 0;\n const ry = this.ry ? Math.min(this.ry, h / 2) : 0;\n const isRounded = rx !== 0 || ry !== 0;\n\n ctx.beginPath();\n\n ctx.moveTo(x + rx, y);\n\n ctx.lineTo(x + w - rx, y);\n isRounded &&\n ctx.bezierCurveTo(\n x + w - kRect * rx,\n y,\n x + w,\n y + kRect * ry,\n x + w,\n y + ry,\n );\n\n ctx.lineTo(x + w, y + h - ry);\n isRounded &&\n ctx.bezierCurveTo(\n x + w,\n y + h - kRect * ry,\n x + w - kRect * rx,\n y + h,\n x + w - rx,\n y + h,\n );\n\n ctx.lineTo(x + rx, y + h);\n isRounded &&\n ctx.bezierCurveTo(\n x + kRect * rx,\n y + h,\n x,\n y + h - kRect * ry,\n x,\n y + h - ry,\n );\n\n ctx.lineTo(x, y + ry);\n isRounded &&\n ctx.bezierCurveTo(x, y + kRect * ry, x + kRect * rx, y, x + rx, y);\n\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([...RECT_PROPS, ...propertiesToInclude]);\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const { width, height, rx, ry } = this;\n return [\n '\\n`,\n ];\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `Rect.fromElement`)\n * @static\n * @memberOf Rect\n * @see: http://www.w3.org/TR/SVG/shapes.html#RectElement\n */\n static ATTRIBUTE_NAMES = [\n ...SHARED_ATTRIBUTES,\n 'x',\n 'y',\n 'rx',\n 'ry',\n 'width',\n 'height',\n ];\n\n /* _FROM_SVG_START_ */\n\n /**\n * Returns {@link Rect} instance from an SVG element\n * @static\n * @memberOf Rect\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const {\n left = 0,\n top = 0,\n width = 0,\n height = 0,\n visible = true,\n ...restOfparsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n\n return new this({\n ...options,\n ...restOfparsedAttributes,\n left,\n top,\n width,\n height,\n visible: Boolean(visible && width && height),\n });\n }\n\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Rect);\nclassRegistry.setSVGClass(Rect);\n","export const LAYOUT_TYPE_INITIALIZATION = 'initialization';\nexport const LAYOUT_TYPE_ADDED = 'added';\nexport const LAYOUT_TYPE_REMOVED = 'removed';\nexport const LAYOUT_TYPE_IMPERATIVE = 'imperative';\nexport const LAYOUT_TYPE_OBJECT_MODIFIED = 'object_modified';\nexport const LAYOUT_TYPE_OBJECT_MODIFYING = 'object_modifying';\n","import { Point, ZERO } from '../../Point';\nimport type { Group } from '../../shapes/Group';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { multiplyTransformMatrixArray } from '../../util/misc/matrix';\nimport { sizeAfterTransform } from '../../util/misc/objectTransforms';\nimport {\n calcPlaneChangeMatrix,\n sendVectorToPlane,\n} from '../../util/misc/planeChange';\n\n/**\n * @returns 2 points, the tl and br corners of the non rotated bounding box of an object\n * in the {@link group} plane, taking into account objects that {@link group} is their parent\n * but also belong to the active selection.\n */\nexport const getObjectBounds = (\n destinationGroup: Group,\n object: FabricObject,\n): Point[] => {\n const {\n strokeUniform,\n strokeWidth,\n width,\n height,\n group: currentGroup,\n } = object;\n const t =\n currentGroup && currentGroup !== destinationGroup\n ? calcPlaneChangeMatrix(\n currentGroup.calcTransformMatrix(),\n destinationGroup.calcTransformMatrix(),\n )\n : null;\n const objectCenter = t\n ? object.getRelativeCenterPoint().transform(t)\n : object.getRelativeCenterPoint();\n const accountForStroke = !object['isStrokeAccountedForInDimensions']();\n const strokeUniformVector =\n strokeUniform && accountForStroke\n ? sendVectorToPlane(\n new Point(strokeWidth, strokeWidth),\n undefined,\n destinationGroup.calcTransformMatrix(),\n )\n : ZERO;\n const scalingStrokeWidth =\n !strokeUniform && accountForStroke ? strokeWidth : 0;\n const sizeVector = sizeAfterTransform(\n width + scalingStrokeWidth,\n height + scalingStrokeWidth,\n multiplyTransformMatrixArray([t, object.calcOwnMatrix()], true),\n )\n .add(strokeUniformVector)\n .scalarDivide(2);\n return [objectCenter.subtract(sizeVector), objectCenter.add(sizeVector)];\n};\n","import { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_IMPERATIVE,\n} from '../constants';\nimport type {\n InitializationLayoutContext,\n LayoutStrategyResult,\n StrictLayoutContext,\n} from '../types';\nimport { getObjectBounds } from './utils';\n\n/**\n * Exposes a main public method {@link calcLayoutResult} that is used by the `LayoutManager` to perform layout.\n * Returning `undefined` signals the `LayoutManager` to skip the layout.\n *\n * In charge of calculating the bounding box of the passed objects.\n */\nexport abstract class LayoutStrategy {\n /**\n * override by subclass for persistence (TS does not support `static abstract`)\n */\n static type = 'strategy';\n\n /**\n * Used by the `LayoutManager` to perform layout\n * @TODO/fix: if this method is calcResult, should calc unconditionally.\n * the condition to not calc should be evaluated by the layoutManager.\n * @returns layout result **OR** `undefined` to skip layout\n */\n public calcLayoutResult(\n context: StrictLayoutContext,\n objects: FabricObject[],\n ): LayoutStrategyResult | undefined {\n if (this.shouldPerformLayout(context)) {\n return this.calcBoundingBox(objects, context);\n }\n }\n\n shouldPerformLayout({ type, prevStrategy, strategy }: StrictLayoutContext) {\n return (\n type === LAYOUT_TYPE_INITIALIZATION ||\n type === LAYOUT_TYPE_IMPERATIVE ||\n (!!prevStrategy && strategy !== prevStrategy)\n );\n }\n\n shouldLayoutClipPath({ type, target: { clipPath } }: StrictLayoutContext) {\n return (\n type !== LAYOUT_TYPE_INITIALIZATION &&\n clipPath &&\n !clipPath.absolutePositioned\n );\n }\n\n getInitialSize(\n context: StrictLayoutContext & InitializationLayoutContext,\n result: Pick,\n ) {\n return result.size;\n }\n\n /**\n * Override this method to customize layout.\n */\n calcBoundingBox(\n objects: FabricObject[],\n context: StrictLayoutContext,\n ): LayoutStrategyResult | undefined {\n const { type, target } = context;\n if (type === LAYOUT_TYPE_IMPERATIVE && context.overrides) {\n return context.overrides;\n }\n if (objects.length === 0) {\n return;\n }\n const { left, top, width, height } = makeBoundingBoxFromPoints(\n objects\n .map((object) => getObjectBounds(target, object))\n .reduce((coords, curr) => coords.concat(curr), []),\n );\n const bboxSize = new Point(width, height);\n const bboxLeftTop = new Point(left, top);\n const bboxCenter = bboxLeftTop.add(bboxSize.scalarDivide(2));\n\n if (type === LAYOUT_TYPE_INITIALIZATION) {\n const actualSize = this.getInitialSize(context, {\n size: bboxSize,\n center: bboxCenter,\n });\n return {\n // in `initialization` we do not account for target's transformation matrix\n center: bboxCenter,\n // TODO: investigate if this is still necessary\n relativeCorrection: new Point(0, 0),\n size: actualSize,\n };\n } else {\n // we send `relativeCenter` up to group's containing plane\n const center = bboxCenter.transform(target.calcOwnMatrix());\n return {\n center,\n size: bboxSize,\n };\n }\n }\n}\n","import type { StrictLayoutContext } from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will adjust the bounding box to fit target's objects.\n */\nexport class FitContentLayout extends LayoutStrategy {\n static readonly type = 'fit-content';\n\n /**\n * @override layout on all triggers\n * Override at will\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n shouldPerformLayout(context: StrictLayoutContext) {\n return true;\n }\n}\n\nclassRegistry.setClass(FitContentLayout);\n","import { Point } from '../Point';\nimport {\n CENTER,\n CHANGED,\n MODIFIED,\n MODIFY_PATH,\n MODIFY_POLY,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n iMatrix,\n} from '../constants';\nimport type { Group } from '../shapes/Group';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { invertTransform } from '../util/misc/matrix';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { FitContentLayout } from './LayoutStrategies/FitContentLayout';\nimport type { LayoutStrategy } from './LayoutStrategies/LayoutStrategy';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_OBJECT_MODIFIED,\n LAYOUT_TYPE_OBJECT_MODIFYING,\n} from './constants';\nimport type {\n LayoutContext,\n LayoutResult,\n RegistrationContext,\n StrictLayoutContext,\n} from './types';\nimport { classRegistry } from '../ClassRegistry';\nimport type { TModificationEvents } from '../EventTypeDefs';\n\nconst LAYOUT_MANAGER = 'layoutManager';\n\nexport type SerializedLayoutManager = {\n type: string;\n strategy: string;\n};\n\nexport class LayoutManager {\n private declare _prevLayoutStrategy?: LayoutStrategy;\n protected declare _subscriptions: Map;\n\n strategy: LayoutStrategy;\n\n constructor(strategy: LayoutStrategy = new FitContentLayout()) {\n this.strategy = strategy;\n this._subscriptions = new Map();\n }\n\n public performLayout(context: LayoutContext) {\n const strictContext: StrictLayoutContext = {\n bubbles: true,\n strategy: this.strategy,\n ...context,\n prevStrategy: this._prevLayoutStrategy,\n stopPropagation() {\n this.bubbles = false;\n },\n };\n\n this.onBeforeLayout(strictContext);\n\n const layoutResult = this.getLayoutResult(strictContext);\n if (layoutResult) {\n this.commitLayout(strictContext, layoutResult);\n }\n\n this.onAfterLayout(strictContext, layoutResult);\n this._prevLayoutStrategy = strictContext.strategy;\n }\n\n /**\n * Attach handlers for events that we know will invalidate the layout when\n * performed on child objects ( general transforms ).\n * Returns the disposers for later unsubscribing and cleanup\n * @param {FabricObject} object\n * @param {RegistrationContext & Partial} context\n * @returns {VoidFunction[]} disposers remove the handlers\n */\n protected attachHandlers(\n object: FabricObject,\n context: RegistrationContext & Partial,\n ): VoidFunction[] {\n const { target } = context;\n return (\n [\n MODIFIED,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n CHANGED,\n MODIFY_POLY,\n MODIFY_PATH,\n ] as (TModificationEvents & 'modified')[]\n ).map((key) =>\n object.on(key, (e) =>\n this.performLayout(\n key === MODIFIED\n ? {\n type: LAYOUT_TYPE_OBJECT_MODIFIED,\n trigger: key,\n e,\n target,\n }\n : {\n type: LAYOUT_TYPE_OBJECT_MODIFYING,\n trigger: key,\n e,\n target,\n },\n ),\n ),\n );\n }\n\n /**\n * Subscribe an object to transform events that will trigger a layout change on the parent\n * This is important only for interactive groups.\n * @param object\n * @param context\n */\n protected subscribe(\n object: FabricObject,\n context: RegistrationContext & Partial,\n ) {\n this.unsubscribe(object, context);\n const disposers = this.attachHandlers(object, context);\n this._subscriptions.set(object, disposers);\n }\n\n /**\n * unsubscribe object layout triggers\n */\n protected unsubscribe(\n object: FabricObject,\n _context?: RegistrationContext & Partial,\n ) {\n (this._subscriptions.get(object) || []).forEach((d) => d());\n this._subscriptions.delete(object);\n }\n\n unsubscribeTargets(\n context: RegistrationContext & Partial,\n ) {\n context.targets.forEach((object) => this.unsubscribe(object, context));\n }\n\n subscribeTargets(\n context: RegistrationContext & Partial,\n ) {\n context.targets.forEach((object) => this.subscribe(object, context));\n }\n\n protected onBeforeLayout(context: StrictLayoutContext) {\n const { target, type } = context;\n const { canvas } = target;\n // handle layout triggers subscription\n // @TODO: gate the registration when the group is interactive\n if (type === LAYOUT_TYPE_INITIALIZATION || type === LAYOUT_TYPE_ADDED) {\n this.subscribeTargets(context);\n } else if (type === LAYOUT_TYPE_REMOVED) {\n this.unsubscribeTargets(context);\n }\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:before', {\n context,\n });\n canvas &&\n canvas.fire('object:layout:before', {\n target,\n context,\n });\n\n if (type === LAYOUT_TYPE_IMPERATIVE && context.deep) {\n const { strategy: _, ...tricklingContext } = context;\n // traverse the tree\n target.forEachObject(\n (object) =>\n (object as Group).layoutManager &&\n (object as Group).layoutManager.performLayout({\n ...tricklingContext,\n bubbles: false,\n target: object as Group,\n }),\n );\n }\n }\n\n protected getLayoutResult(\n context: StrictLayoutContext,\n ): Required | undefined {\n const { target, strategy, type } = context;\n\n const result = strategy.calcLayoutResult(context, target.getObjects());\n\n if (!result) {\n return;\n }\n\n const prevCenter =\n type === LAYOUT_TYPE_INITIALIZATION\n ? new Point()\n : target.getRelativeCenterPoint();\n\n const {\n center: nextCenter,\n correction = new Point(),\n relativeCorrection = new Point(),\n } = result;\n const offset = prevCenter\n .subtract(nextCenter)\n .add(correction)\n .transform(\n // in `initialization` we do not account for target's transformation matrix\n type === LAYOUT_TYPE_INITIALIZATION\n ? iMatrix\n : invertTransform(target.calcOwnMatrix()),\n true,\n )\n .add(relativeCorrection);\n\n return {\n result,\n prevCenter,\n nextCenter,\n offset,\n };\n }\n\n protected commitLayout(\n context: StrictLayoutContext,\n layoutResult: Required,\n ) {\n const { target } = context;\n const {\n result: { size },\n nextCenter,\n } = layoutResult;\n // set dimensions\n target.set({ width: size.x, height: size.y });\n // layout descendants\n this.layoutObjects(context, layoutResult);\n // set position\n // in `initialization` we do not account for target's transformation matrix\n if (context.type === LAYOUT_TYPE_INITIALIZATION) {\n // TODO: what about strokeWidth?\n target.set({\n left:\n context.x ?? nextCenter.x + size.x * resolveOrigin(target.originX),\n top: context.y ?? nextCenter.y + size.y * resolveOrigin(target.originY),\n });\n } else {\n target.setPositionByOrigin(nextCenter, CENTER, CENTER);\n // invalidate\n target.setCoords();\n target.set('dirty', true);\n }\n }\n\n protected layoutObjects(\n context: StrictLayoutContext,\n layoutResult: Required,\n ) {\n const { target } = context;\n // adjust objects to account for new center\n target.forEachObject((object) => {\n object.group === target &&\n this.layoutObject(context, layoutResult, object);\n });\n // adjust clip path to account for new center\n context.strategy.shouldLayoutClipPath(context) &&\n this.layoutObject(context, layoutResult, target.clipPath as FabricObject);\n }\n\n /**\n * @param {FabricObject} object\n * @param {Point} offset\n */\n protected layoutObject(\n context: StrictLayoutContext,\n { offset }: Required,\n object: FabricObject,\n ) {\n // TODO: this is here for cache invalidation.\n // verify if this is necessary since we have explicit\n // cache invalidation at the end of commitLayout\n object.set({\n left: object.left + offset.x,\n top: object.top + offset.y,\n });\n }\n\n protected onAfterLayout(\n context: StrictLayoutContext,\n layoutResult?: LayoutResult,\n ) {\n const {\n target,\n strategy,\n bubbles,\n prevStrategy: _,\n ...bubblingContext\n } = context;\n const { canvas } = target;\n\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:after', {\n context,\n result: layoutResult,\n });\n canvas &&\n canvas.fire('object:layout:after', {\n context,\n result: layoutResult,\n target,\n });\n\n // bubble\n const parent = target.parent;\n if (bubbles && parent?.layoutManager) {\n // add target to context#path\n (bubblingContext.path || (bubblingContext.path = [])).push(target);\n // all parents should invalidate their layout\n parent.layoutManager.performLayout({\n ...bubblingContext,\n target: parent,\n });\n }\n target.set('dirty', true);\n }\n\n dispose() {\n const { _subscriptions } = this;\n _subscriptions.forEach((disposers) => disposers.forEach((d) => d()));\n _subscriptions.clear();\n }\n\n toObject() {\n return {\n type: LAYOUT_MANAGER,\n strategy: (this.strategy.constructor as typeof LayoutStrategy).type,\n };\n }\n\n toJSON() {\n return this.toObject();\n }\n}\n\nclassRegistry.setClass(LayoutManager, LAYOUT_MANAGER);\n","import type { CollectionEvents, ObjectEvents } from '../EventTypeDefs';\nimport { createCollectionMixin } from '../Collection';\nimport type {\n TClassProperties,\n TSVGReviver,\n TOptions,\n Abortable,\n} from '../typedefs';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n} from '../util/misc/matrix';\nimport {\n enlivenObjectEnlivables,\n enlivenObjects,\n} from '../util/misc/objectEnlive';\nimport { applyTransformToObject } from '../util/misc/objectTransforms';\nimport { FabricObject } from './Object/FabricObject';\nimport { Rect } from './Rect';\nimport { classRegistry } from '../ClassRegistry';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport { log } from '../util/internals/console';\nimport type {\n ImperativeLayoutOptions,\n LayoutBeforeEvent,\n LayoutAfterEvent,\n} from '../LayoutManager/types';\nimport { LayoutManager } from '../LayoutManager/LayoutManager';\nimport {\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_REMOVED,\n} from '../LayoutManager/constants';\nimport type { SerializedLayoutManager } from '../LayoutManager/LayoutManager';\nimport type { FitContentLayout } from '../LayoutManager';\nimport type { DrawContext } from './Object/Object';\n\n/**\n * This class handles the specific case of creating a group using {@link Group#fromObject} and is not meant to be used in any other case.\n * We could have used a boolean in the constructor, as we did previously, but we think the boolean\n * would stay in the group's constructor interface and create confusion, therefore it was removed.\n * This layout manager doesn't do anything and therefore keeps the exact layout the group had when {@link Group#toObject} was called.\n */\nclass NoopLayoutManager extends LayoutManager {\n performLayout() {}\n}\n\nexport interface GroupEvents extends ObjectEvents, CollectionEvents {\n 'layout:before': LayoutBeforeEvent;\n 'layout:after': LayoutAfterEvent;\n}\n\nexport interface GroupOwnProps {\n subTargetCheck: boolean;\n interactive: boolean;\n}\n\nexport interface SerializedGroupProps\n extends SerializedObjectProps,\n GroupOwnProps {\n objects: SerializedObjectProps[];\n layoutManager: SerializedLayoutManager;\n}\n\nexport interface GroupProps extends FabricObjectProps, GroupOwnProps {\n layoutManager: LayoutManager;\n}\n\nexport const groupDefaultValues: Partial> = {\n strokeWidth: 0,\n subTargetCheck: false,\n interactive: false,\n};\n\n/**\n * @fires object:added\n * @fires object:removed\n * @fires layout:before\n * @fires layout:after\n */\nexport class Group\n extends createCollectionMixin(\n FabricObject,\n )\n implements GroupProps\n{\n /**\n * Used to optimize performance\n * set to `false` if you don't need contained objects to be targets of events\n * @default\n * @type boolean\n */\n declare subTargetCheck: boolean;\n\n /**\n * Used to allow targeting of object inside groups.\n * set to true if you want to select an object inside a group.\\\n * **REQUIRES** `subTargetCheck` set to true\n * This will be not removed but slowly replaced with a method setInteractive\n * that will take care of enabling subTargetCheck and necessary object events.\n * There is too much attached to group interactivity to just be evaluated by a\n * boolean in the code\n * @default\n * @deprecated\n * @type boolean\n */\n declare interactive: boolean;\n\n declare layoutManager: LayoutManager;\n\n /**\n * Used internally to optimize performance\n * Once an object is selected, instance is rendered without the selected object.\n * This way instance is cached only once for the entire interaction with the selected object.\n * @private\n */\n protected _activeObjects: FabricObject[] = [];\n\n static type = 'Group';\n\n static ownDefaults: Record = groupDefaultValues;\n private __objectSelectionTracker: (ev: ObjectEvents['selected']) => void;\n private __objectSelectionDisposer: (ev: ObjectEvents['deselected']) => void;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Group.ownDefaults,\n };\n }\n\n /**\n * Constructor\n *\n * @param {FabricObject[]} [objects] instance objects\n * @param {Object} [options] Options object\n */\n constructor(objects: FabricObject[] = [], options: Partial = {}) {\n super();\n Object.assign(this, Group.ownDefaults);\n this.setOptions(options);\n this.groupInit(objects, options);\n }\n\n /**\n * Shared code between group and active selection\n * Meant to be used by the constructor.\n */\n protected groupInit(\n objects: FabricObject[],\n options: {\n layoutManager?: LayoutManager;\n top?: number;\n left?: number;\n },\n ) {\n this._objects = [...objects]; // Avoid unwanted mutations of Collection to affect the caller\n\n this.__objectSelectionTracker = this.__objectSelectionMonitor.bind(\n this,\n true,\n );\n this.__objectSelectionDisposer = this.__objectSelectionMonitor.bind(\n this,\n false,\n );\n\n this.forEachObject((object) => {\n this.enterGroup(object, false);\n });\n\n // perform initial layout\n this.layoutManager = options.layoutManager ?? new LayoutManager();\n this.layoutManager.performLayout({\n type: LAYOUT_TYPE_INITIALIZATION,\n target: this,\n targets: [...objects],\n // @TODO remove this concept from the layout manager.\n // Layout manager will calculate the correct position,\n // group options can override it later.\n x: options.left,\n y: options.top,\n });\n }\n\n /**\n * Checks if object can enter group and logs relevant warnings\n * @private\n * @param {FabricObject} object\n * @returns\n */\n canEnterGroup(object: FabricObject) {\n if (object === this || this.isDescendantOf(object)) {\n // prevent circular object tree\n log(\n 'error',\n 'Group: circular object trees are not supported, this call has no effect',\n );\n return false;\n } else if (this._objects.indexOf(object) !== -1) {\n // is already in the objects array\n log(\n 'error',\n 'Group: duplicate objects are not supported inside group, this call has no effect',\n );\n return false;\n }\n return true;\n }\n\n /**\n * Override this method to enhance performance (for groups with a lot of objects).\n * If Overriding, be sure not pass illegal objects to group - it will break your app.\n * @private\n */\n protected _filterObjectsBeforeEnteringGroup(objects: FabricObject[]) {\n return objects.filter((object, index, array) => {\n // can enter AND is the first occurrence of the object in the passed args (to prevent adding duplicates)\n return this.canEnterGroup(object) && array.indexOf(object) === index;\n });\n }\n\n /**\n * Add objects\n * @param {...FabricObject[]} objects\n */\n add(...objects: FabricObject[]) {\n const allowedObjects = this._filterObjectsBeforeEnteringGroup(objects);\n const size = super.add(...allowedObjects);\n this._onAfterObjectsChange(LAYOUT_TYPE_ADDED, allowedObjects);\n return size;\n }\n\n /**\n * Inserts an object into collection at specified index\n * @param {FabricObject[]} objects Object to insert\n * @param {Number} index Index to insert object at\n */\n insertAt(index: number, ...objects: FabricObject[]) {\n const allowedObjects = this._filterObjectsBeforeEnteringGroup(objects);\n const size = super.insertAt(index, ...allowedObjects);\n this._onAfterObjectsChange(LAYOUT_TYPE_ADDED, allowedObjects);\n return size;\n }\n\n /**\n * Remove objects\n * @param {...FabricObject[]} objects\n * @returns {FabricObject[]} removed objects\n */\n remove(...objects: FabricObject[]) {\n const removed = super.remove(...objects);\n this._onAfterObjectsChange(LAYOUT_TYPE_REMOVED, removed);\n return removed;\n }\n\n _onObjectAdded(object: FabricObject) {\n this.enterGroup(object, true);\n this.fire('object:added', { target: object });\n object.fire('added', { target: this });\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n _onObjectRemoved(object: FabricObject, removeParentTransform?: boolean) {\n this.exitGroup(object, removeParentTransform);\n this.fire('object:removed', { target: object });\n object.fire('removed', { target: this });\n }\n\n /**\n * @private\n * @param {'added'|'removed'} type\n * @param {FabricObject[]} targets\n */\n _onAfterObjectsChange(type: 'added' | 'removed', targets: FabricObject[]) {\n this.layoutManager.performLayout({\n type,\n targets,\n target: this,\n });\n }\n\n _onStackOrderChanged() {\n this._set('dirty', true);\n }\n\n /**\n * @private\n * @param {string} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n const prev = this[key as keyof this];\n super._set(key, value);\n if (key === 'canvas' && prev !== value) {\n (this._objects || []).forEach((object) => {\n object._set(key, value);\n });\n }\n return this;\n }\n\n /**\n * @private\n */\n _shouldSetNestedCoords() {\n return this.subTargetCheck;\n }\n\n /**\n * Remove all objects\n * @returns {FabricObject[]} removed objects\n */\n removeAll() {\n this._activeObjects = [];\n return this.remove(...this._objects);\n }\n\n /**\n * keeps track of the selected objects\n * @private\n */\n __objectSelectionMonitor(\n selected: T,\n {\n target: object,\n }: ObjectEvents[T extends true ? 'selected' : 'deselected'],\n ) {\n const activeObjects = this._activeObjects;\n if (selected) {\n activeObjects.push(object);\n this._set('dirty', true);\n } else if (activeObjects.length > 0) {\n const index = activeObjects.indexOf(object);\n if (index > -1) {\n activeObjects.splice(index, 1);\n this._set('dirty', true);\n }\n }\n }\n\n /**\n * @private\n * @param {boolean} watch\n * @param {FabricObject} object\n */\n _watchObject(watch: boolean, object: FabricObject) {\n // make sure we listen only once\n watch && this._watchObject(false, object);\n if (watch) {\n object.on('selected', this.__objectSelectionTracker);\n object.on('deselected', this.__objectSelectionDisposer);\n } else {\n object.off('selected', this.__objectSelectionTracker);\n object.off('deselected', this.__objectSelectionDisposer);\n }\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n object.group && object.group.remove(object);\n object._set('parent', this);\n this._enterGroup(object, removeParentTransform);\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n _enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n if (removeParentTransform) {\n // can this be converted to utils (sendObjectToPlane)?\n applyTransformToObject(\n object,\n multiplyTransformMatrices(\n invertTransform(this.calcTransformMatrix()),\n object.calcTransformMatrix(),\n ),\n );\n }\n this._shouldSetNestedCoords() && object.setCoords();\n object._set('group', this);\n object._set('canvas', this.canvas);\n this._watchObject(true, object);\n const activeObject =\n this.canvas &&\n this.canvas.getActiveObject &&\n this.canvas.getActiveObject();\n // if we are adding the activeObject in a group\n if (\n activeObject &&\n (activeObject === object || object.isDescendantOf(activeObject))\n ) {\n this._activeObjects.push(object);\n }\n }\n\n /**\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n this._exitGroup(object, removeParentTransform);\n object._set('parent', undefined);\n object._set('canvas', undefined);\n }\n\n /**\n * Executes the inner fabric logic of exiting a group.\n * - Stop watching the object\n * - Remove the object from the optimization map this._activeObjects\n * - unset the group property of the object\n * @protected\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n _exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n object._set('group', undefined);\n if (!removeParentTransform) {\n applyTransformToObject(\n object,\n multiplyTransformMatrices(\n this.calcTransformMatrix(),\n object.calcTransformMatrix(),\n ),\n );\n object.setCoords();\n }\n this._watchObject(false, object);\n const index =\n this._activeObjects.length > 0 ? this._activeObjects.indexOf(object) : -1;\n if (index > -1) {\n this._activeObjects.splice(index, 1);\n }\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group is already cached.\n * @return {Boolean}\n */\n shouldCache() {\n const ownCache = FabricObject.prototype.shouldCache.call(this);\n if (ownCache) {\n for (let i = 0; i < this._objects.length; i++) {\n if (this._objects[i].willDrawShadow()) {\n this.ownCaching = false;\n return false;\n }\n }\n }\n return ownCache;\n }\n\n /**\n * Check if this object or a child object will cast a shadow\n * @return {Boolean}\n */\n willDrawShadow() {\n if (super.willDrawShadow()) {\n return true;\n }\n for (let i = 0; i < this._objects.length; i++) {\n if (this._objects[i].willDrawShadow()) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Check if instance or its group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache(): boolean {\n return this.ownCaching || (!!this.parent && this.parent.isOnACache());\n }\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawObject(\n ctx: CanvasRenderingContext2D,\n forClipping: boolean | undefined,\n context: DrawContext,\n ) {\n this._renderBackground(ctx);\n for (let i = 0; i < this._objects.length; i++) {\n const obj = this._objects[i];\n // TODO: handle rendering edge case somehow\n if (this.canvas?.preserveObjectStacking && obj.group !== this) {\n ctx.save();\n ctx.transform(...invertTransform(this.calcTransformMatrix()));\n obj.render(ctx);\n ctx.restore();\n } else if (obj.group === this) {\n obj.render(ctx);\n }\n }\n this._drawClipPath(ctx, this.clipPath, context);\n }\n\n /**\n * @override\n * @return {Boolean}\n */\n setCoords() {\n super.setCoords();\n this._shouldSetNestedCoords() &&\n this.forEachObject((object) => object.setCoords());\n }\n\n triggerLayout(options: ImperativeLayoutOptions = {}) {\n this.layoutManager.performLayout({\n target: this,\n type: LAYOUT_TYPE_IMPERATIVE,\n ...options,\n });\n }\n\n /**\n * Renders instance on a given context\n * @param {CanvasRenderingContext2D} ctx context to render instance on\n */\n render(ctx: CanvasRenderingContext2D) {\n this._transformDone = true;\n super.render(ctx);\n this._transformDone = false;\n }\n\n /**\n *\n * @private\n * @param {'toObject'|'toDatalessObject'} [method]\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @returns {FabricObject[]} serialized objects\n */\n __serializeObjects(\n method: 'toObject' | 'toDatalessObject',\n propertiesToInclude?: string[],\n ) {\n const _includeDefaultValues = this.includeDefaultValues;\n return this._objects\n .filter(function (obj) {\n return !obj.excludeFromExport;\n })\n .map(function (obj) {\n const originalDefaults = obj.includeDefaultValues;\n obj.includeDefaultValues = _includeDefaultValues;\n const data = obj[method || 'toObject'](propertiesToInclude);\n obj.includeDefaultValues = originalDefaults;\n // delete data.version;\n return data;\n });\n }\n\n /**\n * Returns object representation of an instance\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit<\n GroupProps & TClassProperties,\n keyof SerializedGroupProps\n >,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SerializedGroupProps {\n const layoutManager = this.layoutManager.toObject();\n\n return {\n ...super.toObject([\n 'subTargetCheck',\n 'interactive',\n ...propertiesToInclude,\n ]),\n ...(layoutManager.strategy !== 'fit-content' || this.includeDefaultValues\n ? { layoutManager }\n : {}),\n objects: this.__serializeObjects(\n 'toObject',\n propertiesToInclude as string[],\n ),\n };\n }\n\n toString() {\n return `#`;\n }\n\n dispose() {\n this.layoutManager.unsubscribeTargets({\n targets: this.getObjects(),\n target: this,\n });\n this._activeObjects = [];\n this.forEachObject((object) => {\n this._watchObject(false, object);\n object.dispose();\n });\n super.dispose();\n }\n\n /**\n * @private\n */\n _createSVGBgRect(reviver?: TSVGReviver) {\n if (!this.backgroundColor) {\n return '';\n }\n const fillStroke = Rect.prototype._toSVG.call(this);\n const commons = fillStroke.indexOf('COMMON_PARTS');\n fillStroke[commons] = 'for=\"group\" ';\n const markup = fillStroke.join('');\n return reviver ? reviver(markup) : markup;\n }\n\n /**\n * Returns svg representation of an instance\n * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n _toSVG(reviver?: TSVGReviver) {\n const svgString = ['\\n'];\n const bg = this._createSVGBgRect(reviver);\n bg && svgString.push('\\t\\t', bg);\n for (let i = 0; i < this._objects.length; i++) {\n svgString.push('\\t\\t', this._objects[i].toSVG(reviver));\n }\n svgString.push('\\n');\n return svgString;\n }\n\n /**\n * Returns styles-string for svg-export, specific version for group\n * @return {String}\n */\n getSvgStyles(): string {\n const opacity =\n typeof this.opacity !== 'undefined' && this.opacity !== 1\n ? `opacity: ${this.opacity};`\n : '',\n visibility = this.visible ? '' : ' visibility: hidden;';\n return [opacity, this.getSvgFilter(), visibility].join('');\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG(reviver?: TSVGReviver): string {\n const svgString = [];\n const bg = this._createSVGBgRect(reviver);\n bg && svgString.push('\\t', bg);\n for (let i = 0; i < this._objects.length; i++) {\n svgString.push('\\t', this._objects[i].toClipPathSVG(reviver));\n }\n return this._createBaseClipPathSVGMarkup(svgString, {\n reviver,\n });\n }\n\n /**\n * @todo support loading from svg\n * @private\n * @static\n * @memberOf Group\n * @param {Object} object Object to create a group from\n * @returns {Promise}\n */\n static fromObject>(\n { type, objects = [], layoutManager, ...options }: T,\n abortable?: Abortable,\n ) {\n return Promise.all([\n enlivenObjects(objects, abortable),\n enlivenObjectEnlivables(options, abortable),\n ]).then(([objects, hydratedOptions]) => {\n const group = new this(objects, {\n ...options,\n ...hydratedOptions,\n layoutManager: new NoopLayoutManager(),\n });\n if (layoutManager) {\n const layoutClass = classRegistry.getClass(\n layoutManager.type,\n );\n const strategyClass = classRegistry.getClass(\n layoutManager.strategy,\n );\n group.layoutManager = new layoutClass(new strategyClass());\n } else {\n group.layoutManager = new LayoutManager();\n }\n group.layoutManager.subscribeTargets({\n type: LAYOUT_TYPE_INITIALIZATION,\n target: group,\n targets: group.getObjects(),\n });\n group.setCoords();\n return group;\n });\n }\n}\n\nclassRegistry.setClass(Group);\n","import type { GroupProps } from '../../shapes/Group';\nimport { Group } from '../../shapes/Group';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\n\n/**\n * TODO experiment with different layout manager and svg results ( fixed fit content )\n * Groups SVG elements (usually those retrieved from SVG document)\n * @static\n * @param {FabricObject[]} elements FabricObject(s) parsed from svg, to group\n * @return {FabricObject | Group}\n */\nexport const groupSVGElements = (\n elements: FabricObject[],\n options?: Partial,\n) => {\n if (elements && elements.length === 1) {\n return elements[0];\n }\n return new Group(elements, options);\n};\n","import type { TSize } from '../../typedefs';\n\n/**\n * Finds the scale for the object source to fit inside the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @param {TSize} source natural unscaled size of the object\n * @param {TSize} destination natural unscaled size of the object\n * @return {Number} scale factor to apply to source to fit into destination\n */\nexport const findScaleToFit = (source: TSize, destination: TSize) =>\n Math.min(\n destination.width / source.width,\n destination.height / source.height,\n );\n\n/**\n * Finds the scale for the object source to cover entirely the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @param {TSize} source natural unscaled size of the object\n * @param {TSize} destination natural unscaled size of the object\n * @return {Number} scale factor to apply to source to cover destination\n */\nexport const findScaleToCover = (source: TSize, destination: TSize) =>\n Math.max(\n destination.width / source.width,\n destination.height / source.height,\n );\n","import { reNum } from '../../parser/constants';\n\nconst commaWsp = `\\\\s*,?\\\\s*`;\n\n/**\n * p for param\n * using \"bad naming\" here because it makes the regex much easier to read\n * p is a number that is preceded by an arbitary number of spaces, maybe 0,\n * a comma or not, and then possibly more spaces or not.\n */\nconst p = `${commaWsp}(${reNum})`;\n\n// const reMoveToCommand = `(M) ?(?:${p}${p} ?)+`;\n\n// const reLineCommand = `(L) ?(?:${p}${p} ?)+`;\n\n// const reHorizontalLineCommand = `(H) ?(?:${p} ?)+`;\n\n// const reVerticalLineCommand = `(V) ?(?:${p} ?)+`;\n\n// const reClosePathCommand = String.raw`(Z)\\s*`;\n\n// const reCubicCurveCommand = `(C) ?(?:${p}${p}${p}${p}${p}${p} ?)+`;\n\n// const reCubicCurveShortcutCommand = `(S) ?(?:${p}${p}${p}${p} ?)+`;\n\n// const reQuadraticCurveCommand = `(Q) ?(?:${p}${p}${p}${p} ?)+`;\n\n// const reQuadraticCurveShortcutCommand = `(T) ?(?:${p}${p} ?)+`;\n\nexport const reArcCommandPoints = `${p}${p}${p}${commaWsp}([01])${commaWsp}([01])${p}${p}`;\n// const reArcCommand = `(A) ?(?:${reArcCommandPoints} ?)+`;\n\n// export const rePathCommandGroups =\n// `(?:(?:${reMoveToCommand})` +\n// `|(?:${reLineCommand})` +\n// `|(?:${reHorizontalLineCommand})` +\n// `|(?:${reVerticalLineCommand})` +\n// `|(?:${reClosePathCommand})` +\n// `|(?:${reCubicCurveCommand})` +\n// `|(?:${reCubicCurveShortcutCommand})` +\n// `|(?:${reQuadraticCurveCommand})` +\n// `|(?:${reQuadraticCurveShortcutCommand})` +\n// `|(?:${reArcCommand}))`;\n\nexport const rePathCommand = '[mzlhvcsqta][^mzlhvcsqta]*';\n","import { cache } from '../../cache';\nimport { config } from '../../config';\nimport { halfPI, PiBy180 } from '../../constants';\nimport type { TMat2D, TRadian, TRectBounds } from '../../typedefs';\nimport { cos } from '../misc/cos';\nimport { multiplyTransformMatrices, transformPoint } from '../misc/matrix';\nimport { sin } from '../misc/sin';\nimport { toFixed } from '../misc/toFixed';\nimport type {\n TCurveInfo,\n TComplexPathData,\n TParsedAbsoluteCubicCurveCommand,\n TPathSegmentInfo,\n TPointAngle,\n TSimpleParsedCommand,\n TSimplePathData,\n TPathSegmentCommandInfo,\n TComplexParsedCommand,\n TPathSegmentInfoCommon,\n TEndPathInfo,\n TParsedArcCommand,\n TComplexParsedCommandType,\n} from './typedefs';\nimport type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport { reArcCommandPoints, rePathCommand } from './regex';\nimport { reNum } from '../../parser/constants';\n\n/**\n * Commands that may be repeated\n */\nconst repeatedCommands: Record = {\n m: 'l',\n M: 'L',\n};\n\n/**\n * Convert an arc of a rotated ellipse to a Bezier Curve\n * @param {TRadian} theta1 start of the arc\n * @param {TRadian} theta2 end of the arc\n * @param cosTh cosine of the angle of rotation\n * @param sinTh sine of the angle of rotation\n * @param rx x-axis radius (before rotation)\n * @param ry y-axis radius (before rotation)\n * @param cx1 center x of the ellipse\n * @param cy1 center y of the ellipse\n * @param mT\n * @param fromX starting point of arc x\n * @param fromY starting point of arc y\n */\nconst segmentToBezier = (\n theta1: TRadian,\n theta2: TRadian,\n cosTh: number,\n sinTh: number,\n rx: number,\n ry: number,\n cx1: number,\n cy1: number,\n mT: number,\n fromX: number,\n fromY: number,\n): TParsedAbsoluteCubicCurveCommand => {\n const costh1 = cos(theta1),\n sinth1 = sin(theta1),\n costh2 = cos(theta2),\n sinth2 = sin(theta2),\n toX = cosTh * rx * costh2 - sinTh * ry * sinth2 + cx1,\n toY = sinTh * rx * costh2 + cosTh * ry * sinth2 + cy1,\n cp1X = fromX + mT * (-cosTh * rx * sinth1 - sinTh * ry * costh1),\n cp1Y = fromY + mT * (-sinTh * rx * sinth1 + cosTh * ry * costh1),\n cp2X = toX + mT * (cosTh * rx * sinth2 + sinTh * ry * costh2),\n cp2Y = toY + mT * (sinTh * rx * sinth2 - cosTh * ry * costh2);\n\n return ['C', cp1X, cp1Y, cp2X, cp2Y, toX, toY];\n};\n\n/**\n * Adapted from {@link http://dxr.mozilla.org/mozilla-central/source/dom/svg/SVGPathDataParser.cpp}\n * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here\n * http://mozilla.org/MPL/2.0/\n * @param toX\n * @param toY\n * @param rx\n * @param ry\n * @param {number} large 0 or 1 flag\n * @param {number} sweep 0 or 1 flag\n * @param rotateX\n */\nconst arcToSegments = (\n toX: number,\n toY: number,\n rx: number,\n ry: number,\n large: number,\n sweep: number,\n rotateX: TRadian,\n): TParsedAbsoluteCubicCurveCommand[] => {\n if (rx === 0 || ry === 0) {\n return [];\n }\n let fromX = 0,\n fromY = 0,\n root = 0;\n const PI = Math.PI,\n theta = rotateX * PiBy180,\n sinTheta = sin(theta),\n cosTh = cos(theta),\n px = 0.5 * (-cosTh * toX - sinTheta * toY),\n py = 0.5 * (-cosTh * toY + sinTheta * toX),\n rx2 = rx ** 2,\n ry2 = ry ** 2,\n py2 = py ** 2,\n px2 = px ** 2,\n pl = rx2 * ry2 - rx2 * py2 - ry2 * px2;\n let _rx = Math.abs(rx);\n let _ry = Math.abs(ry);\n\n if (pl < 0) {\n const s = Math.sqrt(1 - pl / (rx2 * ry2));\n _rx *= s;\n _ry *= s;\n } else {\n root =\n (large === sweep ? -1.0 : 1.0) * Math.sqrt(pl / (rx2 * py2 + ry2 * px2));\n }\n\n const cx = (root * _rx * py) / _ry,\n cy = (-root * _ry * px) / _rx,\n cx1 = cosTh * cx - sinTheta * cy + toX * 0.5,\n cy1 = sinTheta * cx + cosTh * cy + toY * 0.5;\n let mTheta = calcVectorAngle(1, 0, (px - cx) / _rx, (py - cy) / _ry);\n let dtheta = calcVectorAngle(\n (px - cx) / _rx,\n (py - cy) / _ry,\n (-px - cx) / _rx,\n (-py - cy) / _ry,\n );\n\n if (sweep === 0 && dtheta > 0) {\n dtheta -= 2 * PI;\n } else if (sweep === 1 && dtheta < 0) {\n dtheta += 2 * PI;\n }\n\n // Convert into cubic bezier segments <= 90deg\n const segments = Math.ceil(Math.abs((dtheta / PI) * 2)),\n result = [],\n mDelta = dtheta / segments,\n mT =\n ((8 / 3) * Math.sin(mDelta / 4) * Math.sin(mDelta / 4)) /\n Math.sin(mDelta / 2);\n let th3 = mTheta + mDelta;\n\n for (let i = 0; i < segments; i++) {\n result[i] = segmentToBezier(\n mTheta,\n th3,\n cosTh,\n sinTheta,\n _rx,\n _ry,\n cx1,\n cy1,\n mT,\n fromX,\n fromY,\n );\n fromX = result[i][5];\n fromY = result[i][6];\n mTheta = th3;\n th3 += mDelta;\n }\n return result;\n};\n\n/**\n * @private\n * Calculate the angle between two vectors\n * @param ux u endpoint x\n * @param uy u endpoint y\n * @param vx v endpoint x\n * @param vy v endpoint y\n */\nconst calcVectorAngle = (\n ux: number,\n uy: number,\n vx: number,\n vy: number,\n): TRadian => {\n const ta = Math.atan2(uy, ux),\n tb = Math.atan2(vy, vx);\n if (tb >= ta) {\n return tb - ta;\n } else {\n return 2 * Math.PI - (ta - tb);\n }\n};\n\n// functions for the Cubic beizer\n// taken from: https://github.com/konvajs/konva/blob/7.0.5/src/shapes/Path.ts#L350\nconst CB1 = (t: number) => t ** 3;\nconst CB2 = (t: number) => 3 * t ** 2 * (1 - t);\nconst CB3 = (t: number) => 3 * t * (1 - t) ** 2;\nconst CB4 = (t: number) => (1 - t) ** 3;\n\n/**\n * Calculate bounding box of a cubic Bezier curve\n * Taken from http://jsbin.com/ivomiq/56/edit (no credits available)\n * TODO: can we normalize this with the starting points set at 0 and then translated the bbox?\n * @param {number} begx starting point\n * @param {number} begy\n * @param {number} cp1x first control point\n * @param {number} cp1y\n * @param {number} cp2x second control point\n * @param {number} cp2y\n * @param {number} endx end of bezier\n * @param {number} endy\n * @return {TRectBounds} the rectangular bounds\n */\nexport function getBoundsOfCurve(\n begx: number,\n begy: number,\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n endx: number,\n endy: number,\n): TRectBounds {\n let argsString: string;\n if (config.cachesBoundsOfCurve) {\n // eslint-disable-next-line\n argsString = [...arguments].join();\n if (cache.boundsOfCurveCache[argsString]) {\n return cache.boundsOfCurveCache[argsString];\n }\n }\n\n const sqrt = Math.sqrt,\n abs = Math.abs,\n tvalues = [],\n bounds: [[x: number, y: number], [x: number, y: number]] = [\n [0, 0],\n [0, 0],\n ];\n\n let b = 6 * begx - 12 * cp1x + 6 * cp2x;\n let a = -3 * begx + 9 * cp1x - 9 * cp2x + 3 * endx;\n let c = 3 * cp1x - 3 * begx;\n\n for (let i = 0; i < 2; ++i) {\n if (i > 0) {\n b = 6 * begy - 12 * cp1y + 6 * cp2y;\n a = -3 * begy + 9 * cp1y - 9 * cp2y + 3 * endy;\n c = 3 * cp1y - 3 * begy;\n }\n\n if (abs(a) < 1e-12) {\n if (abs(b) < 1e-12) {\n continue;\n }\n const t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n const b2ac = b * b - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n const sqrtb2ac = sqrt(b2ac);\n const t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n const t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n let j = tvalues.length;\n const jlen = j;\n const iterator = getPointOnCubicBezierIterator(\n begx,\n begy,\n cp1x,\n cp1y,\n cp2x,\n cp2y,\n endx,\n endy,\n );\n while (j--) {\n const { x, y } = iterator(tvalues[j]);\n bounds[0][j] = x;\n bounds[1][j] = y;\n }\n\n bounds[0][jlen] = begx;\n bounds[1][jlen] = begy;\n bounds[0][jlen + 1] = endx;\n bounds[1][jlen + 1] = endy;\n const result: TRectBounds = [\n new Point(Math.min(...bounds[0]), Math.min(...bounds[1])),\n new Point(Math.max(...bounds[0]), Math.max(...bounds[1])),\n ];\n if (config.cachesBoundsOfCurve) {\n cache.boundsOfCurveCache[argsString!] = result;\n }\n return result;\n}\n\n/**\n * Converts arc to a bunch of cubic Bezier curves\n * @param {number} fx starting point x\n * @param {number} fy starting point y\n * @param {TParsedArcCommand} coords Arc command\n */\nexport const fromArcToBeziers = (\n fx: number,\n fy: number,\n [_, rx, ry, rot, large, sweep, tx, ty]: TParsedArcCommand,\n): TParsedAbsoluteCubicCurveCommand[] => {\n const segsNorm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\n\n for (let i = 0, len = segsNorm.length; i < len; i++) {\n segsNorm[i][1] += fx;\n segsNorm[i][2] += fy;\n segsNorm[i][3] += fx;\n segsNorm[i][4] += fy;\n segsNorm[i][5] += fx;\n segsNorm[i][6] += fy;\n }\n return segsNorm;\n};\n\n/**\n * This function takes a parsed SVG path and makes it simpler for fabricJS logic.\n * Simplification consist of:\n * - All commands converted to absolute (lowercase to uppercase)\n * - S converted to C\n * - T converted to Q\n * - A converted to C\n * @param {TComplexPathData} path the array of commands of a parsed SVG path for `Path`\n * @return {TSimplePathData} the simplified array of commands of a parsed SVG path for `Path`\n * TODO: figure out how to remove the type assertions in a nice way\n */\nexport const makePathSimpler = (path: TComplexPathData): TSimplePathData => {\n // x and y represent the last point of the path, AKA the previous command point.\n // we add them to each relative command to make it an absolute comment.\n // we also swap the v V h H with L, because are easier to transform.\n let x = 0,\n y = 0;\n // x1 and y1 represent the last point of the subpath. the subpath is started with\n // m or M command. When a z or Z command is drawn, x and y need to be resetted to\n // the last x1 and y1.\n let x1 = 0,\n y1 = 0;\n // previous will host the letter of the previous command, to handle S and T.\n // controlX and controlY will host the previous reflected control point\n const destinationPath: TSimplePathData = [];\n let previous,\n // placeholders\n controlX = 0,\n controlY = 0;\n for (const parsedCommand of path) {\n const current: TComplexParsedCommand = [...parsedCommand];\n let converted: TSimpleParsedCommand | undefined;\n switch (\n current[0] // first letter\n ) {\n case 'l': // lineto, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'L':\n x = current[1];\n y = current[2];\n converted = ['L', x, y];\n break;\n case 'h': // horizontal lineto, relative\n current[1] += x;\n // falls through\n case 'H':\n x = current[1];\n converted = ['L', x, y];\n break;\n case 'v': // vertical lineto, relative\n current[1] += y;\n // falls through\n case 'V':\n y = current[1];\n converted = ['L', x, y];\n break;\n case 'm': // moveTo, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'M':\n x = current[1];\n y = current[2];\n x1 = current[1];\n y1 = current[2];\n converted = ['M', x, y];\n break;\n case 'c': // bezierCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n current[5] += x;\n current[6] += y;\n // falls through\n case 'C':\n controlX = current[3];\n controlY = current[4];\n x = current[5];\n y = current[6];\n converted = ['C', current[1], current[2], controlX, controlY, x, y];\n break;\n case 's': // shorthand cubic bezierCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'S':\n // would be sScC but since we are swapping sSc for C, we check just that.\n if (previous === 'C') {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n } else {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n x = current[3];\n y = current[4];\n converted = ['C', controlX, controlY, current[1], current[2], x, y];\n // converted[3] and converted[4] are NOW the second control point.\n // we keep it for the next reflection.\n controlX = converted[3];\n controlY = converted[4];\n break;\n case 'q': // quadraticCurveTo, relative\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'Q':\n controlX = current[1];\n controlY = current[2];\n x = current[3];\n y = current[4];\n converted = ['Q', controlX, controlY, x, y];\n break;\n case 't': // shorthand quadraticCurveTo, relative\n current[1] += x;\n current[2] += y;\n // falls through\n case 'T':\n if (previous === 'Q') {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n } else {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n x = current[1];\n y = current[2];\n converted = ['Q', controlX, controlY, x, y];\n break;\n case 'a':\n current[6] += x;\n current[7] += y;\n // falls through\n case 'A':\n fromArcToBeziers(x, y, current).forEach((b) => destinationPath.push(b));\n x = current[6];\n y = current[7];\n break;\n case 'z':\n case 'Z':\n x = x1;\n y = y1;\n converted = ['Z'];\n break;\n default:\n }\n if (converted) {\n destinationPath.push(converted);\n previous = converted[0];\n } else {\n previous = '';\n }\n }\n return destinationPath;\n};\n\n// todo verify if we can just use the point class here\n/**\n * Calc length from point x1,y1 to x2,y2\n * @param {number} x1 starting point x\n * @param {number} y1 starting point y\n * @param {number} x2 starting point x\n * @param {number} y2 starting point y\n * @return {number} length of segment\n */\nconst calcLineLength = (\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n): number => Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n\n/**\n * Get an iterator that takes a percentage and returns a point\n * @param {number} begx\n * @param {number} begy\n * @param {number} cp1x\n * @param {number} cp1y\n * @param {number} cp2x\n * @param {number} cp2y\n * @param {number} endx\n * @param {number} endy\n */\nconst getPointOnCubicBezierIterator =\n (\n begx: number,\n begy: number,\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n endx: number,\n endy: number,\n ) =>\n (pct: number) => {\n const c1 = CB1(pct),\n c2 = CB2(pct),\n c3 = CB3(pct),\n c4 = CB4(pct);\n return new Point(\n endx * c1 + cp2x * c2 + cp1x * c3 + begx * c4,\n endy * c1 + cp2y * c2 + cp1y * c3 + begy * c4,\n );\n };\n\nconst QB1 = (t: number) => t ** 2;\nconst QB2 = (t: number) => 2 * t * (1 - t);\nconst QB3 = (t: number) => (1 - t) ** 2;\n\nconst getTangentCubicIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n p4x: number,\n p4y: number,\n ) =>\n (pct: number) => {\n const qb1 = QB1(pct),\n qb2 = QB2(pct),\n qb3 = QB3(pct),\n tangentX =\n 3 * (qb3 * (p2x - p1x) + qb2 * (p3x - p2x) + qb1 * (p4x - p3x)),\n tangentY =\n 3 * (qb3 * (p2y - p1y) + qb2 * (p3y - p2y) + qb1 * (p4y - p3y));\n return Math.atan2(tangentY, tangentX);\n };\n\nconst getPointOnQuadraticBezierIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n ) =>\n (pct: number) => {\n const c1 = QB1(pct),\n c2 = QB2(pct),\n c3 = QB3(pct);\n return new Point(\n p3x * c1 + p2x * c2 + p1x * c3,\n p3y * c1 + p2y * c2 + p1y * c3,\n );\n };\n\nconst getTangentQuadraticIterator =\n (\n p1x: number,\n p1y: number,\n p2x: number,\n p2y: number,\n p3x: number,\n p3y: number,\n ) =>\n (pct: number) => {\n const invT = 1 - pct,\n tangentX = 2 * (invT * (p2x - p1x) + pct * (p3x - p2x)),\n tangentY = 2 * (invT * (p2y - p1y) + pct * (p3y - p2y));\n return Math.atan2(tangentY, tangentX);\n };\n\n// this will run over a path segment (a cubic or quadratic segment) and approximate it\n// with 100 segments. This will good enough to calculate the length of the curve\nconst pathIterator = (\n iterator: (pct: number) => Point,\n x1: number,\n y1: number,\n) => {\n let tempP = new Point(x1, y1),\n tmpLen = 0;\n for (let perc = 1; perc <= 100; perc += 1) {\n const p = iterator(perc / 100);\n tmpLen += calcLineLength(tempP.x, tempP.y, p.x, p.y);\n tempP = p;\n }\n return tmpLen;\n};\n\n/**\n * Given a pathInfo, and a distance in pixels, find the percentage from 0 to 1\n * that correspond to that pixels run over the path.\n * The percentage will be then used to find the correct point on the canvas for the path.\n * @param {Array} segInfo fabricJS collection of information on a parsed path\n * @param {number} distance from starting point, in pixels.\n * @return {TPointAngle} info object with x and y ( the point on canvas ) and angle, the tangent on that point;\n */\nconst findPercentageForDistance = (\n segInfo: TCurveInfo<'Q' | 'C'>,\n distance: number,\n): TPointAngle => {\n let perc = 0,\n tmpLen = 0,\n tempP: XY = { x: segInfo.x, y: segInfo.y },\n p: XY = { ...tempP },\n nextLen: number,\n nextStep = 0.01,\n lastPerc = 0;\n // nextStep > 0.0001 covers 0.00015625 that 1/64th of 1/100\n // the path\n const iterator = segInfo.iterator,\n angleFinder = segInfo.angleFinder;\n while (tmpLen < distance && nextStep > 0.0001) {\n p = iterator(perc);\n lastPerc = perc;\n nextLen = calcLineLength(tempP.x, tempP.y, p.x, p.y);\n // compare tmpLen each cycle with distance, decide next perc to test.\n if (nextLen + tmpLen > distance) {\n // we discard this step and we make smaller steps.\n perc -= nextStep;\n nextStep /= 2;\n } else {\n tempP = p;\n perc += nextStep;\n tmpLen += nextLen;\n }\n }\n return { ...p, angle: angleFinder(lastPerc) };\n};\n\n/**\n * Run over a parsed and simplified path and extract some information (length of each command and starting point)\n * @param {TSimplePathData} path parsed path commands\n * @return {TPathSegmentInfo[]} path commands information\n */\nexport const getPathSegmentsInfo = (\n path: TSimplePathData,\n): TPathSegmentInfo[] => {\n let totalLength = 0,\n //x2 and y2 are the coords of segment start\n //x1 and y1 are the coords of the current point\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n iterator,\n tempInfo: TPathSegmentInfo;\n const info: TPathSegmentInfo[] = [];\n for (const current of path) {\n const basicInfo: TPathSegmentInfoCommon = {\n x: x1,\n y: y1,\n command: current[0],\n length: 0,\n };\n switch (\n current[0] //first letter\n ) {\n case 'M':\n tempInfo = >basicInfo;\n tempInfo.x = x2 = x1 = current[1];\n tempInfo.y = y2 = y1 = current[2];\n break;\n case 'L':\n tempInfo = >basicInfo;\n tempInfo.length = calcLineLength(x1, y1, current[1], current[2]);\n x1 = current[1];\n y1 = current[2];\n break;\n case 'C':\n iterator = getPointOnCubicBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6],\n );\n tempInfo = >basicInfo;\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = getTangentCubicIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6],\n );\n tempInfo.length = pathIterator(iterator, x1, y1);\n\n x1 = current[5];\n y1 = current[6];\n break;\n case 'Q':\n iterator = getPointOnQuadraticBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n );\n tempInfo = >basicInfo;\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = getTangentQuadraticIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n );\n tempInfo.length = pathIterator(iterator, x1, y1);\n x1 = current[3];\n y1 = current[4];\n break;\n case 'Z':\n // we add those in order to ease calculations later\n tempInfo = basicInfo;\n tempInfo.destX = x2;\n tempInfo.destY = y2;\n tempInfo.length = calcLineLength(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n break;\n }\n totalLength += tempInfo.length;\n info.push(tempInfo);\n }\n info.push({ length: totalLength, x: x1, y: y1 });\n return info;\n};\n\n/**\n * Get the point on the path that is distance along the path\n * @param path\n * @param distance\n * @param infos\n */\nexport const getPointOnPath = (\n path: TSimplePathData,\n distance: number,\n infos: TPathSegmentInfo[] = getPathSegmentsInfo(path),\n): TPointAngle | undefined => {\n let i = 0;\n while (distance - infos[i].length > 0 && i < infos.length - 2) {\n distance -= infos[i].length;\n i++;\n }\n const segInfo = infos[i],\n segPercent = distance / segInfo.length,\n segment = path[i];\n\n switch (segInfo.command) {\n case 'M':\n return { x: segInfo.x, y: segInfo.y, angle: 0 };\n case 'Z':\n return {\n ...new Point(segInfo.x, segInfo.y).lerp(\n new Point(segInfo.destX, segInfo.destY),\n segPercent,\n ),\n angle: Math.atan2(segInfo.destY - segInfo.y, segInfo.destX - segInfo.x),\n };\n case 'L':\n return {\n ...new Point(segInfo.x, segInfo.y).lerp(\n new Point(segment[1]!, segment[2]!),\n segPercent,\n ),\n angle: Math.atan2(segment[2]! - segInfo.y, segment[1]! - segInfo.x),\n };\n case 'C':\n return findPercentageForDistance(segInfo, distance);\n case 'Q':\n return findPercentageForDistance(segInfo, distance);\n default:\n // throw Error('Invalid command');\n }\n};\n\nconst rePathCmdAll = new RegExp(rePathCommand, 'gi');\nconst regExpArcCommandPoints = new RegExp(reArcCommandPoints, 'g');\nconst reMyNum = new RegExp(reNum, 'gi');\nconst commandLengths = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7,\n} as const;\n/**\n *\n * @param {string} pathString\n * @return {TComplexPathData} An array of SVG path commands\n * @example Usage\n * parsePath('M 3 4 Q 3 5 2 1 4 0 Q 9 12 2 1 4 0') === [\n * ['M', 3, 4],\n * ['Q', 3, 5, 2, 1, 4, 0],\n * ['Q', 9, 12, 2, 1, 4, 0],\n * ];\n */\nexport const parsePath = (pathString: string): TComplexPathData => {\n const chain: TComplexPathData = [];\n const all = pathString.match(rePathCmdAll) ?? [];\n for (const matchStr of all) {\n // take match string and save the first letter as the command\n const commandLetter = matchStr[0] as TComplexParsedCommandType;\n // in case of Z we have very little to do\n if (commandLetter === 'z' || commandLetter === 'Z') {\n chain.push([commandLetter]);\n continue;\n }\n const commandLength =\n commandLengths[\n commandLetter.toLowerCase() as keyof typeof commandLengths\n ];\n\n let paramArr = [];\n if (commandLetter === 'a' || commandLetter === 'A') {\n // the arc command ha some peculariaties that requires a special regex other than numbers\n // it is possible to avoid using a space between the sweep and large arc flags, making them either\n // 00, 01, 10 or 11, making them identical to a plain number for the regex reMyNum\n // reset the regexp\n regExpArcCommandPoints.lastIndex = 0;\n for (let out = null; (out = regExpArcCommandPoints.exec(matchStr)); ) {\n paramArr.push(...out.slice(1));\n }\n } else {\n paramArr = matchStr.match(reMyNum) || [];\n }\n\n // inspect the length of paramArr, if is longer than commandLength\n // we are dealing with repeated commands\n for (let i = 0; i < paramArr.length; i += commandLength) {\n const newCommand = new Array(commandLength) as TComplexParsedCommand;\n const transformedCommand = repeatedCommands[commandLetter];\n newCommand[0] =\n i > 0 && transformedCommand ? transformedCommand : commandLetter;\n for (let j = 0; j < commandLength; j++) {\n newCommand[j + 1] = parseFloat(paramArr[i + j]);\n }\n chain.push(newCommand);\n }\n }\n return chain;\n};\n\n/**\n *\n * Converts points to a smooth SVG path\n * @param {XY[]} points Array of points\n * @param {number} [correction] Apply a correction to the path (usually we use `width / 1000`). If value is undefined 0 is used as the correction value.\n * @return {(string|number)[][]} An array of SVG path commands\n */\nexport const getSmoothPathFromPoints = (\n points: Point[],\n correction = 0,\n): TSimplePathData => {\n let p1 = new Point(points[0]),\n p2 = new Point(points[1]),\n multSignX = 1,\n multSignY = 0;\n const path: TSimplePathData = [],\n len = points.length,\n manyPoints = len > 2;\n\n if (manyPoints) {\n multSignX = points[2].x < p2.x ? -1 : points[2].x === p2.x ? 0 : 1;\n multSignY = points[2].y < p2.y ? -1 : points[2].y === p2.y ? 0 : 1;\n }\n path.push([\n 'M',\n p1.x - multSignX * correction,\n p1.y - multSignY * correction,\n ]);\n let i;\n for (i = 1; i < len; i++) {\n if (!p1.eq(p2)) {\n const midPoint = p1.midPointFrom(p2);\n // p1 is our bezier control point\n // midpoint is our endpoint\n // start point is p(i-1) value.\n path.push(['Q', p1.x, p1.y, midPoint.x, midPoint.y]);\n }\n p1 = points[i];\n if (i + 1 < points.length) {\n p2 = points[i + 1];\n }\n }\n if (manyPoints) {\n multSignX = p1.x > points[i - 2].x ? 1 : p1.x === points[i - 2].x ? 0 : -1;\n multSignY = p1.y > points[i - 2].y ? 1 : p1.y === points[i - 2].y ? 0 : -1;\n }\n path.push([\n 'L',\n p1.x + multSignX * correction,\n p1.y + multSignY * correction,\n ]);\n return path;\n};\n\n/**\n * Transform a path by transforming each segment.\n * it has to be a simplified path or it won't work.\n * WARNING: this depends from pathOffset for correct operation\n * @param {TSimplePathData} path fabricJS parsed and simplified path commands\n * @param {TMat2D} transform matrix that represent the transformation\n * @param {Point} [pathOffset] `Path.pathOffset`\n * @returns {TSimplePathData} the transformed path\n */\nexport const transformPath = (\n path: TSimplePathData,\n transform: TMat2D,\n pathOffset: Point,\n): TSimplePathData => {\n if (pathOffset) {\n transform = multiplyTransformMatrices(transform, [\n 1,\n 0,\n 0,\n 1,\n -pathOffset.x,\n -pathOffset.y,\n ]);\n }\n return path.map((pathSegment) => {\n const newSegment: TSimpleParsedCommand = [...pathSegment];\n for (let i = 1; i < pathSegment.length - 1; i += 2) {\n // TODO: is there a way to get around casting to any?\n const { x, y } = transformPoint(\n {\n x: pathSegment[i] as number,\n y: pathSegment[i + 1] as number,\n },\n transform,\n );\n newSegment[i] = x;\n newSegment[i + 1] = y;\n }\n return newSegment;\n });\n};\n\n/**\n * Returns an array of path commands to create a regular polygon\n * @param {number} numVertexes\n * @param {number} radius\n * @returns {TSimplePathData} An array of SVG path commands\n */\nexport const getRegularPolygonPath = (\n numVertexes: number,\n radius: number,\n): TSimplePathData => {\n const interiorAngle = (Math.PI * 2) / numVertexes;\n // rotationAdjustment rotates the path by 1/2 the interior angle so that the polygon always has a flat side on the bottom\n // This isn't strictly necessary, but it's how we tend to think of and expect polygons to be drawn\n let rotationAdjustment = -halfPI;\n if (numVertexes % 2 === 0) {\n rotationAdjustment += interiorAngle / 2;\n }\n const d = new Array(numVertexes + 1);\n for (let i = 0; i < numVertexes; i++) {\n const rad = i * interiorAngle + rotationAdjustment;\n const { x, y } = new Point(cos(rad), sin(rad)).scalarMultiply(radius);\n d[i] = [i === 0 ? 'M' : 'L', x, y];\n }\n d[numVertexes] = ['Z'];\n return d;\n};\n\n/**\n * Join path commands to go back to svg format\n * @param {TSimplePathData} pathData fabricJS parsed path commands\n * @param {number} fractionDigits number of fraction digits to \"leave\"\n * @return {String} joined path 'M 0 0 L 20 30'\n */\nexport const joinPath = (pathData: TSimplePathData, fractionDigits?: number) =>\n pathData\n .map((segment) => {\n return segment\n .map((arg, i) => {\n if (i === 0) return arg;\n return fractionDigits === undefined\n ? arg\n : toFixed(arg, fractionDigits);\n })\n .join(' ');\n })\n .join(' ');\n","// TODO this file needs to go away, cross browser style support is not fabricjs domain.\n\n/**\n * wrapper for setting element's style\n * @param {HTMLElement} element\n * @param {Object | string} styles\n */\nexport function setStyle(\n element: HTMLElement,\n styles: string | Record,\n) {\n const elementStyle = element.style;\n if (!elementStyle || !styles) {\n return;\n } else if (typeof styles === 'string') {\n elementStyle.cssText += ';' + styles;\n } else {\n Object.entries(styles).forEach(([property, value]) =>\n elementStyle.setProperty(property, value),\n );\n }\n}\n","import type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { sendObjectToPlane } from './planeChange';\nimport { Group } from '../../shapes/Group';\n/**\n * Merges 2 clip paths into one visually equal clip path\n *\n * **IMPORTANT**:\\\n * Does **NOT** clone the arguments, clone them proir if necessary.\n *\n * Creates a wrapper (group) that contains one clip path and is clipped by the other so content is kept where both overlap.\n * Use this method if both the clip paths may have nested clip paths of their own, so assigning one to the other's clip path property is not possible.\n *\n * In order to handle the `inverted` property we follow logic described in the following cases:\\\n * **(1)** both clip paths are inverted - the clip paths pass the inverted prop to the wrapper and loose it themselves.\\\n * **(2)** one is inverted and the other isn't - the wrapper shouldn't become inverted and the inverted clip path must clip the non inverted one to produce an identical visual effect.\\\n * **(3)** both clip paths are not inverted - wrapper and clip paths remain unchanged.\n *\n * @memberOf fabric.util\n * @param {fabric.Object} c1\n * @param {fabric.Object} c2\n * @returns {fabric.Object} merged clip path\n */\nexport const mergeClipPaths = (c1: FabricObject, c2: FabricObject) => {\n let a = c1,\n b = c2;\n if (a.inverted && !b.inverted) {\n // case (2)\n a = c2;\n b = c1;\n }\n // `b` becomes `a`'s clip path so we transform `b` to `a` coordinate plane\n sendObjectToPlane(b, b.group?.calcTransformMatrix(), a.calcTransformMatrix());\n // assign the `inverted` prop to the wrapping group\n const inverted = a.inverted && b.inverted;\n if (inverted) {\n // case (1)\n a.inverted = b.inverted = false;\n }\n return new Group([a], { clipPath: b, inverted });\n};\n","/**\n * Returns random number between 2 specified ones.\n * @param {Number} min lower limit\n * @param {Number} max upper limit\n * @return {Number} random value (between min and max)\n */\nexport const getRandomInt = (min: number, max: number): number =>\n Math.floor(Math.random() * (max - min + 1)) + min;\n","import { getFabricWindow } from '../../env';\nimport { noop } from '../../constants';\nimport type { Abortable } from '../../typedefs';\nimport { SignalAbortedError } from './console';\n\ntype requestOptions = Abortable & {\n onComplete?: (xhr: XMLHttpRequest) => void;\n};\n\n/**\n * Cross-browser abstraction for sending XMLHttpRequest\n * @deprecated this has to go away, we can use a modern browser method to do the same.\n * @param {String} url URL to send XMLHttpRequest to\n * @param {Object} [options] Options object\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @param {Function} options.onComplete Callback to invoke when request is completed\n * @return {XMLHttpRequest} request\n */\n\nexport function request(url: string, options: requestOptions = {}) {\n const onComplete = options.onComplete || noop,\n xhr = new (getFabricWindow().XMLHttpRequest)(),\n signal = options.signal,\n abort = function () {\n xhr.abort();\n },\n removeListener = function () {\n signal && signal.removeEventListener('abort', abort);\n xhr.onerror = xhr.ontimeout = noop;\n };\n\n if (signal && signal.aborted) {\n throw new SignalAbortedError('request');\n } else if (signal) {\n signal.addEventListener('abort', abort, { once: true });\n }\n\n /** @ignore */\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n removeListener();\n onComplete(xhr);\n xhr.onreadystatechange = noop;\n }\n };\n\n xhr.onerror = xhr.ontimeout = removeListener;\n\n xhr.open('get', url, true);\n\n xhr.send();\n return xhr;\n}\n","import { CENTER, SCALE_X, SCALE_Y } from '../constants';\nimport type { FabricImage } from '../shapes/Image';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { qrDecompose } from './misc/matrix';\n\ntype FabricObjectWithTransformMatrix = FabricObject & {\n transformMatrix?: TMat2D;\n};\n\n/**\n * This function is an helper for svg import. it decompose the transformMatrix\n * and assign properties to object.\n * untransformed coordinates\n * @private\n */\nconst _assignTransformMatrixProps = (\n object: FabricObjectWithTransformMatrix,\n) => {\n if (object.transformMatrix) {\n const { scaleX, scaleY, angle, skewX } = qrDecompose(\n object.transformMatrix,\n );\n object.flipX = false;\n object.flipY = false;\n object.set(SCALE_X, scaleX);\n object.set(SCALE_Y, scaleY);\n object.angle = angle;\n object.skewX = skewX;\n object.skewY = 0;\n }\n};\n\n/**\n * This function is an helper for svg import. it removes the transform matrix\n * and set to object properties that fabricjs can handle\n * @private\n * @param {Object} preserveAspectRatioOptions\n */\nexport const removeTransformMatrixForSvgParsing = (\n object: FabricObjectWithTransformMatrix,\n preserveAspectRatioOptions?: any,\n) => {\n let center = object._findCenterFromElement();\n if (object.transformMatrix) {\n _assignTransformMatrixProps(object);\n center = center.transform(object.transformMatrix);\n }\n delete object.transformMatrix;\n if (preserveAspectRatioOptions) {\n object.scaleX *= preserveAspectRatioOptions.scaleX;\n object.scaleY *= preserveAspectRatioOptions.scaleY;\n (object as FabricImage).cropX = preserveAspectRatioOptions.cropX;\n (object as FabricImage).cropY = preserveAspectRatioOptions.cropY;\n center.x += preserveAspectRatioOptions.offsetLeft;\n center.y += preserveAspectRatioOptions.offsetTop;\n object.width = preserveAspectRatioOptions.width;\n object.height = preserveAspectRatioOptions.height;\n }\n object.setPositionByOrigin(center, CENTER, CENTER);\n};\n","import { getEnv, getFabricDocument } from '../../env';\nimport type { TSize } from '../../typedefs';\nimport { createCanvasElement, setStyle } from '../../util';\nimport type { CSSDimensions } from './util';\nimport { makeElementUnselectable, setCSSDimensions } from './util';\nimport type { CanvasItem } from './StaticCanvasDOMManager';\nimport { StaticCanvasDOMManager } from './StaticCanvasDOMManager';\nimport { setCanvasDimensions } from './util';\nimport { NONE } from '../../constants';\n\nexport class CanvasDOMManager extends StaticCanvasDOMManager {\n upper: CanvasItem;\n container: HTMLDivElement;\n\n constructor(\n arg0?: string | HTMLCanvasElement,\n {\n allowTouchScrolling = false,\n containerClass = '',\n }: {\n allowTouchScrolling?: boolean;\n /**\n * @deprecated here only for backward compatibility\n */\n containerClass?: string;\n } = {},\n ) {\n super(arg0);\n const { el: lowerCanvasEl } = this.lower;\n const upperCanvasEl = this.createUpperCanvas();\n this.upper = { el: upperCanvasEl, ctx: upperCanvasEl.getContext('2d')! };\n this.applyCanvasStyle(lowerCanvasEl, {\n allowTouchScrolling,\n });\n this.applyCanvasStyle(upperCanvasEl, {\n allowTouchScrolling,\n styles: {\n position: 'absolute',\n left: '0',\n top: '0',\n },\n });\n const container = this.createContainerElement();\n container.classList.add(containerClass);\n if (lowerCanvasEl.parentNode) {\n lowerCanvasEl.parentNode.replaceChild(container, lowerCanvasEl);\n }\n container.append(lowerCanvasEl, upperCanvasEl);\n this.container = container;\n }\n\n protected createUpperCanvas() {\n const { el: lowerCanvasEl } = this.lower;\n const el = createCanvasElement();\n // we assign the same classname of the lowerCanvas\n el.className = lowerCanvasEl.className;\n // but then we remove the lower-canvas specific className\n el.classList.remove('lower-canvas');\n // we add the specific upper-canvas class\n el.classList.add('upper-canvas');\n el.setAttribute('data-fabric', 'top');\n el.style.cssText = lowerCanvasEl.style.cssText;\n el.setAttribute('draggable', 'true');\n return el;\n }\n\n protected createContainerElement() {\n const container = getFabricDocument().createElement('div');\n container.setAttribute('data-fabric', 'wrapper');\n setStyle(container, {\n position: 'relative',\n });\n makeElementUnselectable(container);\n return container;\n }\n\n /**\n * @private\n * @param {HTMLCanvasElement} element canvas element to apply styles on\n */\n protected applyCanvasStyle(\n element: HTMLCanvasElement,\n options: {\n allowTouchScrolling?: boolean;\n styles?: Record;\n },\n ) {\n const { styles, allowTouchScrolling } = options;\n setStyle(element, {\n ...styles,\n 'touch-action': allowTouchScrolling ? 'manipulation' : NONE,\n });\n makeElementUnselectable(element);\n }\n\n setDimensions(size: TSize, retinaScaling: number) {\n super.setDimensions(size, retinaScaling);\n const { el, ctx } = this.upper;\n setCanvasDimensions(el, ctx, size, retinaScaling);\n }\n\n setCSSDimensions(size: Partial): void {\n super.setCSSDimensions(size);\n setCSSDimensions(this.upper.el, size);\n setCSSDimensions(this.container, size);\n }\n\n cleanupDOM(size: TSize) {\n const container = this.container,\n { el: lowerCanvasEl } = this.lower,\n { el: upperCanvasEl } = this.upper;\n super.cleanupDOM(size);\n container.removeChild(upperCanvasEl);\n container.removeChild(lowerCanvasEl);\n if (container.parentNode) {\n container.parentNode.replaceChild(lowerCanvasEl, container);\n }\n }\n\n dispose() {\n super.dispose();\n getEnv().dispose(this.upper.el);\n // @ts-expect-error disposing\n delete this.upper;\n // @ts-expect-error disposing\n delete this.container;\n }\n}\n","import type { ModifierKey, TOptionalModifierKey } from '../EventTypeDefs';\nimport type { TOptions } from '../typedefs';\nimport type { StaticCanvasOptions } from './StaticCanvasOptions';\n\nexport interface CanvasTransformOptions {\n /**\n * When true, objects can be transformed by one side (unproportionately)\n * when dragged on the corners that normally would not do that.\n * @type Boolean\n * @default\n * @since fabric 4.0 // changed name and default value\n */\n uniformScaling: boolean;\n\n /**\n * Indicates which key switches uniform scaling.\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * totally wrong named. this sounds like `uniform scaling`\n * if Canvas.uniformScaling is true, pressing this will set it to false\n * and viceversa.\n * @since 1.6.2\n * @type ModifierKey\n * @default\n */\n uniScaleKey: TOptionalModifierKey;\n\n /**\n * When true, objects use center point as the origin of scale transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredScaling: boolean;\n\n /**\n * When true, objects use center point as the origin of rotate transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredRotation: boolean;\n\n /**\n * Indicates which key enable centered Transform\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type ModifierKey\n * @default\n */\n centeredKey: TOptionalModifierKey;\n\n /**\n * Indicates which key enable alternate action on corner\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type ModifierKey\n * @default\n */\n altActionKey: TOptionalModifierKey;\n}\n\nexport interface CanvasSelectionOptions {\n /**\n * Indicates whether group selection should be enabled\n * @type Boolean\n * @default\n */\n selection: boolean;\n\n /**\n * Indicates which key or keys enable multiple click selection\n * Pass value as a string or array of strings\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or empty or containing any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.2\n * @type ModifierKey|ModifierKey[]\n * @default\n */\n selectionKey: TOptionalModifierKey | ModifierKey[];\n\n /**\n * Indicates which key enable alternative selection\n * in case of target overlapping with active object\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * For a series of reason that come from the general expectations on how\n * things should work, this feature works only for preserveObjectStacking true.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.5\n * @type null|ModifierKey\n * @default\n */\n altSelectionKey: TOptionalModifierKey;\n\n /**\n * Color of selection\n * @type String\n * @default\n */\n selectionColor: string;\n\n /**\n * Default dash array pattern\n * If not empty the selection border is dashed\n * @type Array\n */\n selectionDashArray: number[];\n\n /**\n * Color of the border of selection (usually slightly darker than color of selection itself)\n * @type String\n * @default\n */\n selectionBorderColor: string;\n\n /**\n * Width of a line used in object/group selection\n * @type Number\n * @default\n */\n selectionLineWidth: number;\n\n /**\n * Select only shapes that are fully contained in the dragged selection rectangle.\n * @type Boolean\n * @default\n */\n selectionFullyContained: boolean;\n}\n\nexport interface CanvasCursorOptions {\n /**\n * Default cursor value used when hovering over an object on canvas\n * @type CSSStyleDeclaration['cursor']\n * @default move\n */\n hoverCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Default cursor value used when moving an object on canvas\n * @type CSSStyleDeclaration['cursor']\n * @default move\n */\n moveCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Default cursor value used for the entire canvas\n * @type String\n * @default default\n */\n defaultCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Cursor value used during free drawing\n * @type String\n * @default crosshair\n */\n freeDrawingCursor: CSSStyleDeclaration['cursor'];\n\n /**\n * Cursor value used for disabled elements ( corners with disabled action )\n * @type String\n * @since 2.0.0\n * @default not-allowed\n */\n notAllowedCursor: CSSStyleDeclaration['cursor'];\n}\n\nexport interface TargetFindOptions {\n /**\n * When true, object detection happens on per-pixel basis rather than on per-bounding-box\n * @type Boolean\n * @default\n */\n perPixelTargetFind: boolean;\n\n /**\n * Number of pixels around target pixel to tolerate (consider active) during object detection\n * @type Number\n * @default\n */\n targetFindTolerance: number;\n\n /**\n * When true, target detection is skipped. Target detection will return always undefined.\n * click selection won't work anymore, events will fire with no targets.\n * if something is selected before setting it to true, it will be deselected at the first click.\n * area selection will still work. check the `selection` property too.\n * if you deactivate both, you should look into staticCanvas.\n * @type Boolean\n * @default\n */\n skipTargetFind: boolean;\n}\n\nexport interface CanvasEventsOptions {\n /**\n * Indicates if the right click on canvas can output the context menu or not\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n stopContextMenu: boolean;\n\n /**\n * Indicates if the canvas can fire right click events\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n fireRightClick: boolean;\n\n /**\n * Indicates if the canvas can fire middle click events\n * @type Boolean\n * @since 1.7.8\n * @default\n */\n fireMiddleClick: boolean;\n\n /**\n * When the option is enabled, PointerEvent is used instead of TPointerEvent.\n * @type Boolean\n * @default\n */\n enablePointerEvents: boolean;\n}\n\nexport interface CanvasOptions\n extends StaticCanvasOptions,\n CanvasTransformOptions,\n CanvasSelectionOptions,\n CanvasCursorOptions,\n TargetFindOptions,\n CanvasEventsOptions {\n /**\n * Default element class that's given to wrapper (div) element of canvas\n * @type String\n * @default\n * @deprecated customize {@link CanvasDOMManager} instead or access {@link elements} directly\n */\n containerClass: string;\n\n /**\n * Indicates whether objects should remain in current stack position when selected.\n * When false objects are brought to top and rendered as part of the selection group\n * @type Boolean\n * @default\n */\n preserveObjectStacking: boolean;\n}\n\nexport type TCanvasOptions = TOptions;\n\nexport const canvasDefaults: TOptions = {\n uniformScaling: true,\n uniScaleKey: 'shiftKey',\n centeredScaling: false,\n centeredRotation: false,\n centeredKey: 'altKey',\n altActionKey: 'shiftKey',\n\n selection: true,\n selectionKey: 'shiftKey',\n selectionColor: 'rgba(100, 100, 255, 0.3)',\n selectionDashArray: [],\n selectionBorderColor: 'rgba(255, 255, 255, 0.3)',\n selectionLineWidth: 1,\n selectionFullyContained: false,\n\n hoverCursor: 'move',\n moveCursor: 'move',\n defaultCursor: 'default',\n freeDrawingCursor: 'crosshair',\n notAllowedCursor: 'not-allowed',\n\n perPixelTargetFind: false,\n targetFindTolerance: 0,\n skipTargetFind: false,\n\n stopContextMenu: false,\n fireRightClick: false,\n fireMiddleClick: false,\n enablePointerEvents: false,\n\n containerClass: 'canvas-container',\n\n preserveObjectStacking: false,\n};\n","import { dragHandler } from '../controls/drag';\nimport { getActionFromCorner } from '../controls/util';\nimport { Point } from '../Point';\nimport { FabricObject } from '../shapes/Object/FabricObject';\nimport type {\n CanvasEvents,\n ModifierKey,\n TOptionalModifierKey,\n TPointerEvent,\n Transform,\n} from '../EventTypeDefs';\nimport {\n addTransformToObject,\n saveObjectTransform,\n} from '../util/misc/objectTransforms';\nimport type { TCanvasSizeOptions } from './StaticCanvas';\nimport { StaticCanvas } from './StaticCanvas';\nimport { isCollection } from '../Collection';\nimport { isTransparent } from '../util/misc/isTransparent';\nimport type {\n TMat2D,\n TOriginX,\n TOriginY,\n TSize,\n TSVGReviver,\n} from '../typedefs';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { getPointer, isTouchEvent } from '../util/dom_event';\nimport type { IText } from '../shapes/IText/IText';\nimport type { BaseBrush } from '../brushes/BaseBrush';\nimport { pick } from '../util/misc/pick';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { cos, createCanvasElement, sin } from '../util';\nimport { CanvasDOMManager } from './DOMManagers/CanvasDOMManager';\nimport {\n BOTTOM,\n CENTER,\n LEFT,\n MODIFIED,\n RESIZING,\n RIGHT,\n ROTATE,\n SCALE,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CanvasOptions } from './CanvasOptions';\nimport { canvasDefaults } from './CanvasOptions';\nimport { Intersection } from '../Intersection';\nimport { isActiveSelection } from '../util/typeAssertions';\n\n/**\n * Canvas class\n * @class Canvas\n * @extends StaticCanvas\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#canvas}\n *\n * @fires object:modified at the end of a transform\n * @fires object:rotating while an object is being rotated from the control\n * @fires object:scaling while an object is being scaled by controls\n * @fires object:moving while an object is being dragged\n * @fires object:skewing while an object is being skewed from the controls\n *\n * @fires before:transform before a transform is is started\n * @fires before:selection:cleared\n * @fires selection:cleared\n * @fires selection:updated\n * @fires selection:created\n *\n * @fires path:created after a drawing operation ends and the path is added\n * @fires mouse:down\n * @fires mouse:move\n * @fires mouse:up\n * @fires mouse:down:before on mouse down, before the inner fabric logic runs\n * @fires mouse:move:before on mouse move, before the inner fabric logic runs\n * @fires mouse:up:before on mouse up, before the inner fabric logic runs\n * @fires mouse:over\n * @fires mouse:out\n * @fires mouse:dblclick whenever a native dbl click event fires on the canvas.\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drag:enter object drag enter\n * @fires drag:leave object drag leave\n * @fires drop:before before drop event. Prepare for the drop event (same native event).\n * @fires drop\n * @fires drop:after after drop event. Run logic on canvas after event has been accepted/declined (same native event).\n * @example\n * let a: fabric.Object, b: fabric.Object;\n * let flag = false;\n * canvas.add(a, b);\n * a.on('drop:before', opt => {\n * // we want a to accept the drop even though it's below b in the stack\n * flag = this.canDrop(opt.e);\n * });\n * b.canDrop = function(e) {\n * !flag && this.draggableTextDelegate.canDrop(e);\n * }\n * b.on('dragover', opt => b.set('fill', opt.dropTarget === b ? 'pink' : 'black'));\n * a.on('drop', opt => {\n * opt.e.defaultPrevented // drop occurred\n * opt.didDrop // drop occurred on canvas\n * opt.target // drop target\n * opt.target !== a && a.set('text', 'I lost');\n * });\n * canvas.on('drop:after', opt => {\n * // inform user who won\n * if(!opt.e.defaultPrevented) {\n * // no winners\n * }\n * else if(!opt.didDrop) {\n * // my objects didn't win, some other lucky object\n * }\n * else {\n * // we have a winner it's opt.target!!\n * }\n * })\n *\n * @fires after:render at the end of the render process, receives the context in the callback\n * @fires before:render at start the render process, receives the context in the callback\n *\n * @fires contextmenu:before\n * @fires contextmenu\n * @example\n * let handler;\n * targets.forEach(target => {\n * target.on('contextmenu:before', opt => {\n * // decide which target should handle the event before canvas hijacks it\n * if (someCaseHappens && opt.targets.includes(target)) {\n * handler = target;\n * }\n * });\n * target.on('contextmenu', opt => {\n * // do something fantastic\n * });\n * });\n * canvas.on('contextmenu', opt => {\n * if (!handler) {\n * // no one takes responsibility, it's always left to me\n * // let's show them how it's done!\n * }\n * });\n *\n */\nexport class SelectableCanvas\n extends StaticCanvas\n implements Omit\n{\n declare _objects: FabricObject[];\n\n // transform config\n declare uniformScaling: boolean;\n declare uniScaleKey: TOptionalModifierKey;\n declare centeredScaling: boolean;\n declare centeredRotation: boolean;\n declare centeredKey: TOptionalModifierKey;\n declare altActionKey: TOptionalModifierKey;\n\n // selection config\n declare selection: boolean;\n declare selectionKey: TOptionalModifierKey | ModifierKey[];\n declare altSelectionKey: TOptionalModifierKey;\n declare selectionColor: string;\n declare selectionDashArray: number[];\n declare selectionBorderColor: string;\n declare selectionLineWidth: number;\n declare selectionFullyContained: boolean;\n\n // cursors\n declare hoverCursor: CSSStyleDeclaration['cursor'];\n declare moveCursor: CSSStyleDeclaration['cursor'];\n declare defaultCursor: CSSStyleDeclaration['cursor'];\n declare freeDrawingCursor: CSSStyleDeclaration['cursor'];\n declare notAllowedCursor: CSSStyleDeclaration['cursor'];\n\n declare containerClass: string;\n\n // target find config\n declare perPixelTargetFind: boolean;\n declare targetFindTolerance: number;\n declare skipTargetFind: boolean;\n\n /**\n * When true, mouse events on canvas (mousedown/mousemove/mouseup) result in free drawing.\n * After mousedown, mousemove creates a shape,\n * and then mouseup finalizes it and adds an instance of `fabric.Path` onto canvas.\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-4#free_drawing}\n * @type Boolean\n * @default\n */\n declare isDrawingMode: boolean;\n\n declare preserveObjectStacking: boolean;\n\n // event config\n declare stopContextMenu: boolean;\n declare fireRightClick: boolean;\n declare fireMiddleClick: boolean;\n\n /**\n * Keep track of the subTargets for Mouse Events, ordered bottom up from innermost nested subTarget\n * @type FabricObject[]\n */\n targets: FabricObject[] = [];\n\n /**\n * Keep track of the hovered target\n * @type FabricObject | null\n * @private\n */\n declare _hoveredTarget?: FabricObject;\n\n /**\n * hold the list of nested targets hovered\n * @type FabricObject[]\n * @private\n */\n _hoveredTargets: FabricObject[] = [];\n\n /**\n * hold the list of objects to render\n * @type FabricObject[]\n * @private\n */\n _objectsToRender?: FabricObject[];\n\n /**\n * hold a reference to a data structure that contains information\n * on the current on going transform\n * @type\n * @private\n */\n _currentTransform: Transform | null = null;\n\n /**\n * hold a reference to a data structure used to track the selection\n * box on canvas drag\n * on the current on going transform\n * x, y, deltaX and deltaY are in scene plane\n * @type\n * @private\n */\n protected _groupSelector: {\n x: number;\n y: number;\n deltaX: number;\n deltaY: number;\n } | null = null;\n\n /**\n * internal flag used to understand if the context top requires a cleanup\n * in case this is true, the contextTop will be cleared at the next render\n * @type boolean\n * @private\n */\n contextTopDirty = false;\n\n /**\n * During a mouse event we may need the pointer multiple times in multiple functions.\n * _absolutePointer holds a reference to the pointer in fabricCanvas/design coordinates that is valid for the event\n * lifespan. Every fabricJS mouse event create and delete the cache every time\n * We do this because there are some HTML DOM inspection functions to get the actual pointer coordinates\n * @type {Point}\n */\n protected declare _absolutePointer?: Point;\n\n /**\n * During a mouse event we may need the pointer multiple times in multiple functions.\n * _pointer holds a reference to the pointer in html coordinates that is valid for the event\n * lifespan. Every fabricJS mouse event create and delete the cache every time\n * We do this because there are some HTML DOM inspection functions to get the actual pointer coordinates\n * @type {Point}\n */\n protected declare _pointer?: Point;\n\n /**\n * During a mouse event we may need the target multiple times in multiple functions.\n * _target holds a reference to the target that is valid for the event\n * lifespan. Every fabricJS mouse event create and delete the cache every time\n * @type {FabricObject}\n */\n protected declare _target?: FabricObject;\n\n static ownDefaults = canvasDefaults;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...SelectableCanvas.ownDefaults };\n }\n\n declare elements: CanvasDOMManager;\n get upperCanvasEl() {\n return this.elements.upper?.el;\n }\n get contextTop() {\n return this.elements.upper?.ctx;\n }\n get wrapperEl() {\n return this.elements.container;\n }\n private declare pixelFindCanvasEl: HTMLCanvasElement;\n private declare pixelFindContext: CanvasRenderingContext2D;\n\n protected declare _isCurrentlyDrawing: boolean;\n declare freeDrawingBrush?: BaseBrush;\n declare _activeObject?: FabricObject;\n\n protected initElements(el?: string | HTMLCanvasElement) {\n this.elements = new CanvasDOMManager(el, {\n allowTouchScrolling: this.allowTouchScrolling,\n containerClass: this.containerClass,\n });\n this._createCacheCanvas();\n }\n\n /**\n * @private\n * @param {FabricObject} obj Object that was added\n */\n _onObjectAdded(obj: FabricObject) {\n this._objectsToRender = undefined;\n super._onObjectAdded(obj);\n }\n\n /**\n * @private\n * @param {FabricObject} obj Object that was removed\n */\n _onObjectRemoved(obj: FabricObject) {\n this._objectsToRender = undefined;\n // removing active object should fire \"selection:cleared\" events\n if (obj === this._activeObject) {\n this.fire('before:selection:cleared', { deselected: [obj] });\n this._discardActiveObject();\n this.fire('selection:cleared', { deselected: [obj] });\n obj.fire('deselected', {\n target: obj,\n });\n }\n if (obj === this._hoveredTarget) {\n this._hoveredTarget = undefined;\n this._hoveredTargets = [];\n }\n super._onObjectRemoved(obj);\n }\n\n _onStackOrderChanged() {\n this._objectsToRender = undefined;\n super._onStackOrderChanged();\n }\n\n /**\n * Divides objects in two groups, one to render immediately\n * and one to render as activeGroup.\n * @return {Array} objects to render immediately and pushes the other in the activeGroup.\n */\n _chooseObjectsToRender(): FabricObject[] {\n const activeObject = this._activeObject;\n return !this.preserveObjectStacking && activeObject\n ? this._objects\n .filter((object) => !object.group && object !== activeObject)\n .concat(activeObject)\n : this._objects;\n }\n\n /**\n * Renders both the top canvas and the secondary container canvas.\n */\n renderAll() {\n this.cancelRequestedRender();\n if (this.destroyed) {\n return;\n }\n if (this.contextTopDirty && !this._groupSelector && !this.isDrawingMode) {\n this.clearContext(this.contextTop);\n this.contextTopDirty = false;\n }\n if (this.hasLostContext) {\n this.renderTopLayer(this.contextTop);\n this.hasLostContext = false;\n }\n !this._objectsToRender &&\n (this._objectsToRender = this._chooseObjectsToRender());\n this.renderCanvas(this.getContext(), this._objectsToRender);\n }\n\n /**\n * text selection is rendered by the active text instance during the rendering cycle\n */\n renderTopLayer(ctx: CanvasRenderingContext2D): void {\n ctx.save();\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this.freeDrawingBrush && this.freeDrawingBrush._render();\n this.contextTopDirty = true;\n }\n // we render the top context - last object\n if (this.selection && this._groupSelector) {\n this._drawSelection(ctx);\n this.contextTopDirty = true;\n }\n ctx.restore();\n }\n\n /**\n * Method to render only the top canvas.\n * Also used to render the group selection box.\n * Does not render text selection.\n */\n renderTop() {\n const ctx = this.contextTop;\n this.clearContext(ctx);\n this.renderTopLayer(ctx);\n // todo: how do i know if the after:render is for the top or normal contex?\n this.fire('after:render', { ctx });\n }\n\n /**\n * Set the canvas tolerance value for pixel taret find.\n * Use only integer numbers.\n * @private\n */\n setTargetFindTolerance(value: number) {\n value = Math.round(value);\n this.targetFindTolerance = value;\n const retina = this.getRetinaScaling();\n const size = Math.ceil((value * 2 + 1) * retina);\n this.pixelFindCanvasEl.width = this.pixelFindCanvasEl.height = size;\n this.pixelFindContext.scale(retina, retina);\n }\n\n /**\n * Returns true if object is transparent at a certain location\n * Clarification: this is `is target transparent at location X or are controls there`\n * @TODO this seems dumb that we treat controls with transparency. we can find controls\n * programmatically without painting them, the cache canvas optimization is always valid\n * @param {FabricObject} target Object to check\n * @param {Number} x Left coordinate in viewport space\n * @param {Number} y Top coordinate in viewport space\n * @return {Boolean}\n */\n isTargetTransparent(target: FabricObject, x: number, y: number): boolean {\n const tolerance = this.targetFindTolerance;\n const ctx = this.pixelFindContext;\n this.clearContext(ctx);\n ctx.save();\n ctx.translate(-x + tolerance, -y + tolerance);\n ctx.transform(...this.viewportTransform);\n const selectionBgc = target.selectionBackgroundColor;\n target.selectionBackgroundColor = '';\n target.render(ctx);\n target.selectionBackgroundColor = selectionBgc;\n ctx.restore();\n // our canvas is square, and made around tolerance.\n // so tolerance in this case also represent the center of the canvas.\n const enhancedTolerance = Math.round(tolerance * this.getRetinaScaling());\n return isTransparent(\n ctx,\n enhancedTolerance,\n enhancedTolerance,\n enhancedTolerance,\n );\n }\n\n /**\n * takes an event and determines if selection key has been pressed\n * @private\n * @param {TPointerEvent} e Event object\n */\n _isSelectionKeyPressed(e: TPointerEvent): boolean {\n const sKey = this.selectionKey;\n if (!sKey) {\n return false;\n }\n if (Array.isArray(sKey)) {\n return !!sKey.find((key) => !!key && e[key] === true);\n } else {\n return e[sKey];\n }\n }\n\n /**\n * @private\n * @param {TPointerEvent} e Event object\n * @param {FabricObject} target\n */\n _shouldClearSelection(\n e: TPointerEvent,\n target?: FabricObject,\n ): target is undefined {\n const activeObjects = this.getActiveObjects(),\n activeObject = this._activeObject;\n\n return !!(\n !target ||\n (target &&\n activeObject &&\n activeObjects.length > 1 &&\n activeObjects.indexOf(target) === -1 &&\n activeObject !== target &&\n !this._isSelectionKeyPressed(e)) ||\n (target && !target.evented) ||\n (target && !target.selectable && activeObject && activeObject !== target)\n );\n }\n\n /**\n * This method will take in consideration a modifier key pressed and the control we are\n * about to drag, and try to guess the anchor point ( origin ) of the transormation.\n * This should be really in the realm of controls, and we should remove specific code for legacy\n * embedded actions.\n * @TODO this probably deserve discussion/rediscovery and change/refactor\n * @private\n * @deprecated\n * @param {FabricObject} target\n * @param {string} action\n * @param {boolean} altKey\n * @returns {boolean} true if the transformation should be centered\n */\n private _shouldCenterTransform(\n target: FabricObject,\n action: string,\n modifierKeyPressed: boolean,\n ) {\n if (!target) {\n return;\n }\n\n let centerTransform;\n\n if (\n action === SCALE ||\n action === SCALE_X ||\n action === SCALE_Y ||\n action === RESIZING\n ) {\n centerTransform = this.centeredScaling || target.centeredScaling;\n } else if (action === ROTATE) {\n centerTransform = this.centeredRotation || target.centeredRotation;\n }\n\n return centerTransform ? !modifierKeyPressed : modifierKeyPressed;\n }\n\n /**\n * Given the control clicked, determine the origin of the transform.\n * This is bad because controls can totally have custom names\n * should disappear before release 4.0\n * @private\n * @deprecated\n */\n _getOriginFromCorner(\n target: FabricObject,\n controlName: string,\n ): { x: TOriginX; y: TOriginY } {\n const origin = {\n x: target.originX,\n y: target.originY,\n };\n\n if (!controlName) {\n return origin;\n }\n\n // is a left control ?\n if (['ml', 'tl', 'bl'].includes(controlName)) {\n origin.x = RIGHT;\n // is a right control ?\n } else if (['mr', 'tr', 'br'].includes(controlName)) {\n origin.x = LEFT;\n }\n // is a top control ?\n if (['tl', 'mt', 'tr'].includes(controlName)) {\n origin.y = BOTTOM;\n // is a bottom control ?\n } else if (['bl', 'mb', 'br'].includes(controlName)) {\n origin.y = TOP;\n }\n return origin;\n }\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {FabricObject} target\n * @param {boolean} [alreadySelected] pass true to setup the active control\n */\n _setupCurrentTransform(\n e: TPointerEvent,\n target: FabricObject,\n alreadySelected: boolean,\n ): void {\n const pointer = target.group\n ? // transform pointer to target's containing coordinate plane\n sendPointToPlane(\n this.getScenePoint(e),\n undefined,\n target.group.calcTransformMatrix(),\n )\n : this.getScenePoint(e);\n const { key: corner = '', control } = target.getActiveControl() || {},\n actionHandler =\n alreadySelected && control\n ? control.getActionHandler(e, target, control)?.bind(control)\n : dragHandler,\n action = getActionFromCorner(alreadySelected, corner, e, target),\n altKey = e[this.centeredKey as ModifierKey],\n origin = this._shouldCenterTransform(target, action, altKey)\n ? ({ x: CENTER, y: CENTER } as const)\n : this._getOriginFromCorner(target, corner),\n /**\n * relative to target's containing coordinate plane\n * both agree on every point\n **/\n transform: Transform = {\n target: target,\n action,\n actionHandler,\n actionPerformed: false,\n corner,\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n offsetX: pointer.x - target.left,\n offsetY: pointer.y - target.top,\n originX: origin.x,\n originY: origin.y,\n ex: pointer.x,\n ey: pointer.y,\n lastX: pointer.x,\n lastY: pointer.y,\n theta: degreesToRadians(target.angle),\n width: target.width,\n height: target.height,\n shiftKey: e.shiftKey,\n altKey,\n original: {\n ...saveObjectTransform(target),\n originX: origin.x,\n originY: origin.y,\n },\n };\n\n this._currentTransform = transform;\n\n this.fire('before:transform', {\n e,\n transform,\n });\n }\n\n /**\n * Set the cursor type of the canvas element\n * @param {String} value Cursor type of the canvas element.\n * @see http://www.w3.org/TR/css3-ui/#cursor\n */\n setCursor(value: CSSStyleDeclaration['cursor']): void {\n this.upperCanvasEl.style.cursor = value;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx to draw the selection on\n */\n _drawSelection(ctx: CanvasRenderingContext2D): void {\n const { x, y, deltaX, deltaY } = this._groupSelector!,\n start = new Point(x, y).transform(this.viewportTransform),\n extent = new Point(x + deltaX, y + deltaY).transform(\n this.viewportTransform,\n ),\n strokeOffset = this.selectionLineWidth / 2;\n let minX = Math.min(start.x, extent.x),\n minY = Math.min(start.y, extent.y),\n maxX = Math.max(start.x, extent.x),\n maxY = Math.max(start.y, extent.y);\n\n if (this.selectionColor) {\n ctx.fillStyle = this.selectionColor;\n ctx.fillRect(minX, minY, maxX - minX, maxY - minY);\n }\n\n if (!this.selectionLineWidth || !this.selectionBorderColor) {\n return;\n }\n ctx.lineWidth = this.selectionLineWidth;\n ctx.strokeStyle = this.selectionBorderColor;\n\n minX += strokeOffset;\n minY += strokeOffset;\n maxX -= strokeOffset;\n maxY -= strokeOffset;\n // selection border\n // @TODO: is _setLineDash still necessary on modern canvas?\n FabricObject.prototype._setLineDash.call(\n this,\n ctx,\n this.selectionDashArray,\n );\n ctx.strokeRect(minX, minY, maxX - minX, maxY - minY);\n }\n\n /**\n * Method that determines what object we are clicking on\n * 11/09/2018 TODO: would be cool if findTarget could discern between being a full target\n * or the outside part of the corner.\n * @param {Event} e mouse event\n * @return {FabricObject | null} the target found\n */\n findTarget(e: TPointerEvent): FabricObject | undefined {\n if (this.skipTargetFind) {\n return undefined;\n }\n\n const pointer = this.getViewportPoint(e),\n activeObject = this._activeObject,\n aObjects = this.getActiveObjects();\n\n this.targets = [];\n\n if (activeObject && aObjects.length >= 1) {\n if (activeObject.findControl(pointer, isTouchEvent(e))) {\n // if we hit the corner of the active object, let's return that.\n return activeObject;\n } else if (\n aObjects.length > 1 &&\n // check pointer is over active selection and possibly perform `subTargetCheck`\n this.searchPossibleTargets([activeObject], pointer)\n ) {\n // active selection does not select sub targets like normal groups\n return activeObject;\n } else if (\n activeObject === this.searchPossibleTargets([activeObject], pointer)\n ) {\n // active object is not an active selection\n if (!this.preserveObjectStacking) {\n return activeObject;\n } else {\n const subTargets = this.targets;\n this.targets = [];\n const target = this.searchPossibleTargets(this._objects, pointer);\n if (\n e[this.altSelectionKey as ModifierKey] &&\n target &&\n target !== activeObject\n ) {\n // alt selection: select active object even though it is not the top most target\n // restore targets\n this.targets = subTargets;\n return activeObject;\n }\n return target;\n }\n }\n }\n\n return this.searchPossibleTargets(this._objects, pointer);\n }\n\n /**\n * Checks if the point is inside the object selection area including padding\n * @param {FabricObject} obj Object to test against\n * @param {Object} [pointer] point in scene coordinates\n * @return {Boolean} true if point is contained within an area of given object\n * @private\n */\n private _pointIsInObjectSelectionArea(obj: FabricObject, point: Point) {\n // getCoords will already take care of group de-nesting\n let coords = obj.getCoords();\n const viewportZoom = this.getZoom();\n const padding = obj.padding / viewportZoom;\n if (padding) {\n const [tl, tr, br, bl] = coords;\n // what is the angle of the object?\n // we could use getTotalAngle, but is way easier to look at it\n // from how coords are oriented, since if something went wrong\n // at least we are consistent.\n const angleRadians = Math.atan2(tr.y - tl.y, tr.x - tl.x),\n cosP = cos(angleRadians) * padding,\n sinP = sin(angleRadians) * padding,\n cosPSinP = cosP + sinP,\n cosPMinusSinP = cosP - sinP;\n\n coords = [\n new Point(tl.x - cosPMinusSinP, tl.y - cosPSinP),\n new Point(tr.x + cosPSinP, tr.y - cosPMinusSinP),\n new Point(br.x + cosPMinusSinP, br.y + cosPSinP),\n new Point(bl.x - cosPSinP, bl.y + cosPMinusSinP),\n ];\n // in case of padding we calculate the new coords on the fly.\n // otherwise we have to maintain 2 sets of coordinates for everything.\n // we can reiterate on storing them.\n // if this is slow, for now the semplification is large and doesn't impact\n // rendering.\n // the idea behind this is that outside target check we don't need ot know\n // where those coords are\n }\n return Intersection.isPointInPolygon(point, coords);\n }\n\n /**\n * Checks point is inside the object selection condition. Either area with padding\n * or over pixels if perPixelTargetFind is enabled\n * @param {FabricObject} obj Object to test against\n * @param {Object} [pointer] point from viewport.\n * @return {Boolean} true if point is contained within an area of given object\n * @private\n */\n _checkTarget(obj: FabricObject, pointer: Point): boolean {\n if (\n obj &&\n obj.visible &&\n obj.evented &&\n this._pointIsInObjectSelectionArea(\n obj,\n sendPointToPlane(pointer, undefined, this.viewportTransform),\n )\n ) {\n if (\n (this.perPixelTargetFind || obj.perPixelTargetFind) &&\n !(obj as unknown as IText).isEditing\n ) {\n if (!this.isTargetTransparent(obj, pointer.x, pointer.y)) {\n return true;\n }\n } else {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Internal Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted\n * @param {Array} [objects] objects array to look into\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\n * @return {FabricObject} **top most object from given `objects`** that contains pointer\n * @private\n */\n _searchPossibleTargets(\n objects: FabricObject[],\n pointer: Point,\n ): FabricObject | undefined {\n // Cache all targets where their bounding box contains point.\n let i = objects.length;\n // Do not check for currently grouped objects, since we check the parent group itself.\n // until we call this function specifically to search inside the activeGroup\n while (i--) {\n const target = objects[i];\n if (this._checkTarget(target, pointer)) {\n if (isCollection(target) && target.subTargetCheck) {\n const subTarget = this._searchPossibleTargets(\n target._objects as FabricObject[],\n pointer,\n );\n subTarget && this.targets.push(subTarget);\n }\n return target;\n }\n }\n }\n\n /**\n * Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted\n * @see {@link _searchPossibleTargets}\n * @param {FabricObject[]} [objects] objects array to look into\n * @param {Point} [pointer] coordinates from viewport to check.\n * @return {FabricObject} **top most object on screen** that contains pointer\n */\n searchPossibleTargets(\n objects: FabricObject[],\n pointer: Point,\n ): FabricObject | undefined {\n const target = this._searchPossibleTargets(objects, pointer);\n\n // if we found something in this.targets, and the group is interactive, return the innermost subTarget\n // that is still interactive\n // TODO: reverify why interactive. the target should be returned always, but selected only\n // if interactive.\n if (\n target &&\n isCollection(target) &&\n target.interactive &&\n this.targets[0]\n ) {\n /** targets[0] is the innermost nested target, but it could be inside non interactive groups and so not a selection target */\n const targets = this.targets;\n for (let i = targets.length - 1; i > 0; i--) {\n const t = targets[i];\n if (!(isCollection(t) && t.interactive)) {\n // one of the subtargets was not interactive. that is the last subtarget we can return.\n // we can't dig more deep;\n return t;\n }\n }\n return targets[0];\n }\n\n return target;\n }\n\n /**\n * @returns point existing in the same plane as the {@link HTMLCanvasElement},\n * `(0, 0)` being the top left corner of the {@link HTMLCanvasElement}.\n * This means that changes to the {@link viewportTransform} do not change the values of the point\n * and it remains unchanged from the viewer's perspective.\n *\n * @example\n * const scenePoint = sendPointToPlane(\n * this.getViewportPoint(e),\n * undefined,\n * canvas.viewportTransform\n * );\n *\n */\n getViewportPoint(e: TPointerEvent) {\n if (this._pointer) {\n return this._pointer;\n }\n return this.getPointer(e, true);\n }\n\n /**\n * @returns point existing in the scene (the same plane as the plane {@link FabricObject#getCenterPoint} exists in).\n * This means that changes to the {@link viewportTransform} do not change the values of the point,\n * however, from the viewer's perspective, the point is changed.\n *\n * @example\n * const viewportPoint = sendPointToPlane(\n * this.getScenePoint(e),\n * canvas.viewportTransform\n * );\n *\n */\n getScenePoint(e: TPointerEvent) {\n if (this._absolutePointer) {\n return this._absolutePointer;\n }\n return this.getPointer(e);\n }\n\n /**\n * Returns pointer relative to canvas.\n *\n * @deprecated This method is deprecated since v6 to protect you from misuse.\n * Use {@link getViewportPoint} or {@link getScenePoint} instead.\n *\n * @param {Event} e\n * @param {Boolean} [fromViewport] whether to return the point from the viewport or in the scene\n * @return {Point}\n */\n getPointer(e: TPointerEvent, fromViewport = false): Point {\n const upperCanvasEl = this.upperCanvasEl,\n bounds = upperCanvasEl.getBoundingClientRect();\n let pointer = getPointer(e),\n boundsWidth = bounds.width || 0,\n boundsHeight = bounds.height || 0;\n\n if (!boundsWidth || !boundsHeight) {\n if (TOP in bounds && BOTTOM in bounds) {\n boundsHeight = Math.abs(bounds.top - bounds.bottom);\n }\n if (RIGHT in bounds && LEFT in bounds) {\n boundsWidth = Math.abs(bounds.right - bounds.left);\n }\n }\n\n this.calcOffset();\n pointer.x = pointer.x - this._offset.left;\n pointer.y = pointer.y - this._offset.top;\n if (!fromViewport) {\n pointer = sendPointToPlane(pointer, undefined, this.viewportTransform);\n }\n\n const retinaScaling = this.getRetinaScaling();\n if (retinaScaling !== 1) {\n pointer.x /= retinaScaling;\n pointer.y /= retinaScaling;\n }\n\n // If bounds are not available (i.e. not visible), do not apply scale.\n const cssScale =\n boundsWidth === 0 || boundsHeight === 0\n ? new Point(1, 1)\n : new Point(\n upperCanvasEl.width / boundsWidth,\n upperCanvasEl.height / boundsHeight,\n );\n\n return pointer.multiply(cssScale);\n }\n\n /**\n * Internal use only\n * @protected\n */\n protected _setDimensionsImpl(\n dimensions: TSize,\n options?: TCanvasSizeOptions,\n ) {\n // @ts-expect-error this method exists in the subclass - should be moved or declared as abstract\n this._resetTransformEventData();\n super._setDimensionsImpl(dimensions, options);\n if (this._isCurrentlyDrawing) {\n this.freeDrawingBrush &&\n this.freeDrawingBrush._setBrushStyles(this.contextTop);\n }\n }\n\n protected _createCacheCanvas() {\n this.pixelFindCanvasEl = createCanvasElement();\n this.pixelFindContext = this.pixelFindCanvasEl.getContext('2d', {\n willReadFrequently: true,\n })!;\n this.setTargetFindTolerance(this.targetFindTolerance);\n }\n\n /**\n * Returns context of top canvas where interactions are drawn\n * @returns {CanvasRenderingContext2D}\n */\n getTopContext(): CanvasRenderingContext2D {\n return this.elements.upper.ctx;\n }\n\n /**\n * Returns context of canvas where object selection is drawn\n * @alias\n * @return {CanvasRenderingContext2D}\n */\n getSelectionContext(): CanvasRenderingContext2D {\n return this.elements.upper.ctx;\n }\n\n /**\n * Returns <canvas> element on which object selection is drawn\n * @return {HTMLCanvasElement}\n */\n getSelectionElement(): HTMLCanvasElement {\n return this.elements.upper.el;\n }\n\n /**\n * Returns currently active object\n * @return {FabricObject | null} active object\n */\n getActiveObject(): FabricObject | undefined {\n return this._activeObject;\n }\n\n /**\n * Returns an array with the current selected objects\n * @return {FabricObject[]} active objects array\n */\n getActiveObjects(): FabricObject[] {\n const active = this._activeObject;\n return isActiveSelection(active)\n ? active.getObjects()\n : active\n ? [active]\n : [];\n }\n\n /**\n * @private\n * Compares the old activeObject with the current one and fires correct events\n * @param {FabricObject[]} oldObjects old activeObject\n * @param {TPointerEvent} e mouse event triggering the selection events\n */\n _fireSelectionEvents(oldObjects: FabricObject[], e?: TPointerEvent) {\n let somethingChanged = false,\n invalidate = false;\n const objects = this.getActiveObjects(),\n added: FabricObject[] = [],\n removed: FabricObject[] = [];\n\n oldObjects.forEach((target) => {\n if (!objects.includes(target)) {\n somethingChanged = true;\n target.fire('deselected', {\n e,\n target,\n });\n removed.push(target);\n }\n });\n\n objects.forEach((target) => {\n if (!oldObjects.includes(target)) {\n somethingChanged = true;\n target.fire('selected', {\n e,\n target,\n });\n added.push(target);\n }\n });\n\n if (oldObjects.length > 0 && objects.length > 0) {\n invalidate = true;\n somethingChanged &&\n this.fire('selection:updated', {\n e,\n selected: added,\n deselected: removed,\n });\n } else if (objects.length > 0) {\n invalidate = true;\n this.fire('selection:created', {\n e,\n selected: added,\n });\n } else if (oldObjects.length > 0) {\n invalidate = true;\n this.fire('selection:cleared', {\n e,\n deselected: removed,\n });\n }\n invalidate && (this._objectsToRender = undefined);\n }\n\n /**\n * Sets given object as the only active object on canvas\n * @param {FabricObject} object Object to set as an active one\n * @param {TPointerEvent} [e] Event (passed along when firing \"object:selected\")\n * @return {Boolean} true if the object has been selected\n */\n setActiveObject(object: FabricObject, e?: TPointerEvent) {\n // we can't inline this, since _setActiveObject will change what getActiveObjects returns\n const currentActives = this.getActiveObjects();\n const selected = this._setActiveObject(object, e);\n this._fireSelectionEvents(currentActives, e);\n return selected;\n }\n\n /**\n * This is supposed to be equivalent to setActiveObject but without firing\n * any event. There is commitment to have this stay this way.\n * This is the functional part of setActiveObject.\n * @param {Object} object to set as active\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\n * @return {Boolean} true if the object has been selected\n */\n _setActiveObject(object: FabricObject, e?: TPointerEvent) {\n const prevActiveObject = this._activeObject;\n if (prevActiveObject === object) {\n return false;\n }\n // after calling this._discardActiveObject, this,_activeObject could be undefined\n if (!this._discardActiveObject(e, object) && this._activeObject) {\n // refused to deselect\n return false;\n }\n if (object.onSelect({ e })) {\n return false;\n }\n\n this._activeObject = object;\n\n if (isActiveSelection(object) && prevActiveObject !== object) {\n object.set('canvas', this);\n }\n object.setCoords();\n\n return true;\n }\n\n /**\n * This is supposed to be equivalent to discardActiveObject but without firing\n * any selection events ( can still fire object transformation events ). There is commitment to have this stay this way.\n * This is the functional part of discardActiveObject.\n * @param {Event} [e] Event (passed along when firing \"object:deselected\")\n * @param {Object} object the next object to set as active, reason why we are discarding this\n * @return {Boolean} true if the active object has been discarded\n */\n _discardActiveObject(\n e?: TPointerEvent,\n object?: FabricObject,\n ): this is { _activeObject: undefined } {\n const obj = this._activeObject;\n if (obj) {\n // onDeselect return TRUE to cancel selection;\n if (obj.onDeselect({ e, object })) {\n return false;\n }\n if (this._currentTransform && this._currentTransform.target === obj) {\n this.endCurrentTransform(e);\n }\n if (isActiveSelection(obj) && obj === this._hoveredTarget) {\n this._hoveredTarget = undefined;\n }\n this._activeObject = undefined;\n return true;\n }\n return false;\n }\n\n /**\n * Discards currently active object and fire events. If the function is called by fabric\n * as a consequence of a mouse event, the event is passed as a parameter and\n * sent to the fire function for the custom events. When used as a method the\n * e param does not have any application.\n * @param {event} e\n * @return {Boolean} true if the active object has been discarded\n */\n discardActiveObject(e?: TPointerEvent): this is { _activeObject: undefined } {\n const currentActives = this.getActiveObjects(),\n activeObject = this.getActiveObject();\n if (currentActives.length) {\n this.fire('before:selection:cleared', {\n e,\n deselected: [activeObject!],\n });\n }\n const discarded = this._discardActiveObject(e);\n this._fireSelectionEvents(currentActives, e);\n return discarded;\n }\n\n /**\n * End the current transform.\n * You don't usually need to call this method unless you are interrupting a user initiated transform\n * because of some other event ( a press of key combination, or something that block the user UX )\n * @param {Event} [e] send the mouse event that generate the finalize down, so it can be used in the event\n */\n endCurrentTransform(e?: TPointerEvent) {\n const transform = this._currentTransform;\n this._finalizeCurrentTransform(e);\n if (transform && transform.target) {\n // this could probably go inside _finalizeCurrentTransform\n transform.target.isMoving = false;\n }\n this._currentTransform = null;\n }\n\n /**\n * @private\n * @param {Event} e send the mouse event that generate the finalize down, so it can be used in the event\n */\n _finalizeCurrentTransform(e?: TPointerEvent) {\n const transform = this._currentTransform!,\n target = transform.target,\n options = {\n e,\n target,\n transform,\n action: transform.action,\n };\n\n if (target._scaling) {\n target._scaling = false;\n }\n\n target.setCoords();\n\n if (transform.actionPerformed) {\n this.fire('object:modified', options);\n target.fire(MODIFIED, options);\n }\n }\n\n /**\n * Sets viewport transformation of this canvas instance\n * @param {Array} vpt a Canvas 2D API transform matrix\n */\n setViewportTransform(vpt: TMat2D) {\n super.setViewportTransform(vpt);\n const activeObject = this._activeObject;\n if (activeObject) {\n activeObject.setCoords();\n }\n }\n\n /**\n * @override clears active selection ref and interactive canvas elements and contexts\n */\n destroy() {\n // dispose of active selection\n const activeObject = this._activeObject;\n if (isActiveSelection(activeObject)) {\n activeObject.removeAll();\n activeObject.dispose();\n }\n\n delete this._activeObject;\n\n super.destroy();\n\n // free resources\n\n // pixel find canvas\n // @ts-expect-error disposing\n this.pixelFindContext = null;\n // @ts-expect-error disposing\n this.pixelFindCanvasEl = undefined;\n }\n\n /**\n * Clears all contexts (background, main, top) of an instance\n */\n clear() {\n // discard active object and fire events\n this.discardActiveObject();\n // make sure we clear the active object in case it refused to be discarded\n this._activeObject = undefined;\n this.clearContext(this.contextTop);\n super.clear();\n }\n\n /**\n * Draws objects' controls (borders/controls)\n * @param {CanvasRenderingContext2D} ctx Context to render controls on\n */\n drawControls(ctx: CanvasRenderingContext2D) {\n const activeObject = this._activeObject;\n\n if (activeObject) {\n activeObject._renderControls(ctx);\n }\n }\n\n /**\n * @private\n */\n protected _toObject(\n instance: FabricObject,\n methodName: 'toObject' | 'toDatalessObject',\n propertiesToInclude: string[],\n ): Record {\n // If the object is part of the current selection group, it should\n // be transformed appropriately\n // i.e. it should be serialised as it would appear if the selection group\n // were to be destroyed.\n const originalProperties = this._realizeGroupTransformOnObject(instance),\n object = super._toObject(instance, methodName, propertiesToInclude);\n //Undo the damage we did by changing all of its properties\n instance.set(originalProperties);\n return object;\n }\n\n /**\n * Realizes an object's group transformation on it\n * @private\n * @param {FabricObject} [instance] the object to transform (gets mutated)\n * @returns the original values of instance which were changed\n */\n private _realizeGroupTransformOnObject(\n instance: FabricObject,\n ): Partial {\n const { group } = instance;\n if (group && isActiveSelection(group) && this._activeObject === group) {\n const layoutProps = [\n 'angle',\n 'flipX',\n 'flipY',\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n ] as (keyof typeof instance)[];\n const originalValues = pick(instance, layoutProps);\n addTransformToObject(instance, group.calcOwnMatrix());\n return originalValues;\n } else {\n return {};\n }\n }\n\n /**\n * @private\n */\n _setSVGObject(\n markup: string[],\n instance: FabricObject,\n reviver?: TSVGReviver,\n ) {\n // If the object is in a selection group, simulate what would happen to that\n // object when the group is deselected\n const originalProperties = this._realizeGroupTransformOnObject(instance);\n super._setSVGObject(markup, instance, reviver);\n instance.set(originalProperties);\n }\n}\n","import type { TPointerEvent } from '../EventTypeDefs';\nimport type { ITextBehavior } from '../shapes/IText/ITextBehavior';\nimport { removeFromArray } from '../util/internals/removeFromArray';\nimport type { Canvas } from './Canvas';\n\n/**\n * In charge of synchronizing all interactive text instances of a canvas\n */\nexport class TextEditingManager {\n private targets: ITextBehavior[] = [];\n private declare target?: ITextBehavior;\n private __disposer: VoidFunction;\n\n constructor(canvas: Canvas) {\n const cb = () => {\n const { hiddenTextarea } =\n (canvas.getActiveObject() as ITextBehavior) || {};\n hiddenTextarea && hiddenTextarea.focus();\n };\n const el = canvas.upperCanvasEl;\n el.addEventListener('click', cb);\n this.__disposer = () => el.removeEventListener('click', cb);\n }\n\n exitTextEditing() {\n this.target = undefined;\n this.targets.forEach((target) => {\n if (target.isEditing) {\n target.exitEditing();\n }\n });\n }\n\n add(target: ITextBehavior) {\n this.targets.push(target);\n }\n\n remove(target: ITextBehavior) {\n this.unregister(target);\n removeFromArray(this.targets, target);\n }\n\n register(target: ITextBehavior) {\n this.target = target;\n }\n\n unregister(target: ITextBehavior) {\n if (target === this.target) {\n this.target = undefined;\n }\n }\n\n onMouseMove(e: TPointerEvent) {\n this.target?.isEditing && this.target.updateSelectionOnMouseMove(e);\n }\n\n clear() {\n this.targets = [];\n this.target = undefined;\n }\n\n dispose() {\n this.clear();\n this.__disposer();\n // @ts-expect-error disposing\n delete this.__disposer;\n }\n}\n","import { classRegistry } from '../ClassRegistry';\nimport { NONE } from '../constants';\nimport type {\n CanvasEvents,\n DragEventData,\n ObjectEvents,\n TPointerEvent,\n TPointerEventNames,\n Transform,\n} from '../EventTypeDefs';\nimport { Point } from '../Point';\nimport type { ActiveSelection } from '../shapes/ActiveSelection';\nimport type { Group } from '../shapes/Group';\nimport type { IText } from '../shapes/IText/IText';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { isTouchEvent, stopEvent } from '../util/dom_event';\nimport { getDocumentFromElement, getWindowFromElement } from '../util/dom_misc';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { isActiveSelection } from '../util/typeAssertions';\nimport type { CanvasOptions, TCanvasOptions } from './CanvasOptions';\nimport { SelectableCanvas } from './SelectableCanvas';\nimport { TextEditingManager } from './TextEditingManager';\n\nconst addEventOptions = { passive: false } as EventListenerOptions;\n\nconst getEventPoints = (canvas: Canvas, e: TPointerEvent) => {\n const viewportPoint = canvas.getViewportPoint(e);\n const scenePoint = canvas.getScenePoint(e);\n return {\n viewportPoint,\n scenePoint,\n pointer: viewportPoint,\n absolutePointer: scenePoint,\n };\n};\n\n// just to be clear, the utils are now deprecated and those are here exactly as minifier helpers\n// because el.addEventListener can't me be minified while a const yes and we use it 47 times in this file.\n// few bytes but why give it away.\nconst addListener = (\n el: HTMLElement | Document,\n ...args: Parameters\n) => el.addEventListener(...args);\nconst removeListener = (\n el: HTMLElement | Document,\n ...args: Parameters\n) => el.removeEventListener(...args);\n\nconst syntheticEventConfig = {\n mouse: {\n in: 'over',\n out: 'out',\n targetIn: 'mouseover',\n targetOut: 'mouseout',\n canvasIn: 'mouse:over',\n canvasOut: 'mouse:out',\n },\n drag: {\n in: 'enter',\n out: 'leave',\n targetIn: 'dragenter',\n targetOut: 'dragleave',\n canvasIn: 'drag:enter',\n canvasOut: 'drag:leave',\n },\n} as const;\n\ntype TSyntheticEventContext = {\n mouse: { e: TPointerEvent };\n drag: DragEventData;\n};\n\nexport class Canvas extends SelectableCanvas implements CanvasOptions {\n /**\n * Contains the id of the touch event that owns the fabric transform\n * @type Number\n * @private\n */\n declare mainTouchId?: number;\n\n declare enablePointerEvents: boolean;\n\n /**\n * Holds a reference to a setTimeout timer for event synchronization\n * @type number\n * @private\n */\n private declare _willAddMouseDown: number;\n\n /**\n * Holds a reference to an object on the canvas that is receiving the drag over event.\n * @type FabricObject\n * @private\n */\n private declare _draggedoverTarget?: FabricObject;\n\n /**\n * Holds a reference to an object on the canvas from where the drag operation started\n * @type FabricObject\n * @private\n */\n private declare _dragSource?: FabricObject;\n\n /**\n * Holds a reference to an object on the canvas that is the current drop target\n * May differ from {@link _draggedoverTarget}\n * @todo inspect whether {@link _draggedoverTarget} and {@link _dropTarget} should be merged somehow\n * @type FabricObject\n * @private\n */\n private declare _dropTarget: FabricObject | undefined;\n\n private _isClick: boolean;\n\n textEditingManager = new TextEditingManager(this);\n\n constructor(el?: string | HTMLCanvasElement, options: TCanvasOptions = {}) {\n super(el, options);\n // bind event handlers\n (\n [\n '_onMouseDown',\n '_onTouchStart',\n '_onMouseMove',\n '_onMouseUp',\n '_onTouchEnd',\n '_onResize',\n // '_onGesture',\n // '_onDrag',\n // '_onShake',\n // '_onLongPress',\n // '_onOrientationChange',\n '_onMouseWheel',\n '_onMouseOut',\n '_onMouseEnter',\n '_onContextMenu',\n '_onDoubleClick',\n '_onDragStart',\n '_onDragEnd',\n '_onDragProgress',\n '_onDragOver',\n '_onDragEnter',\n '_onDragLeave',\n '_onDrop',\n ] as (keyof this)[]\n ).forEach((eventHandler) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n this[eventHandler] = (this[eventHandler] as Function).bind(this);\n });\n // register event handlers\n this.addOrRemove(addListener, 'add');\n }\n\n /**\n * return an event prefix pointer or mouse.\n * @private\n */\n private _getEventPrefix() {\n return this.enablePointerEvents ? 'pointer' : 'mouse';\n }\n\n addOrRemove(functor: any, _eventjsFunctor: 'add' | 'remove') {\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n functor(getWindowFromElement(canvasElement), 'resize', this._onResize);\n functor(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n functor(\n canvasElement,\n `${eventTypePrefix}move`,\n this._onMouseMove,\n addEventOptions,\n );\n functor(canvasElement, `${eventTypePrefix}out`, this._onMouseOut);\n functor(canvasElement, `${eventTypePrefix}enter`, this._onMouseEnter);\n functor(canvasElement, 'wheel', this._onMouseWheel);\n functor(canvasElement, 'contextmenu', this._onContextMenu);\n functor(canvasElement, 'dblclick', this._onDoubleClick);\n functor(canvasElement, 'dragstart', this._onDragStart);\n functor(canvasElement, 'dragend', this._onDragEnd);\n functor(canvasElement, 'dragover', this._onDragOver);\n functor(canvasElement, 'dragenter', this._onDragEnter);\n functor(canvasElement, 'dragleave', this._onDragLeave);\n functor(canvasElement, 'drop', this._onDrop);\n if (!this.enablePointerEvents) {\n functor(canvasElement, 'touchstart', this._onTouchStart, addEventOptions);\n }\n // if (typeof eventjs !== 'undefined' && eventjsFunctor in eventjs) {\n // eventjs[eventjsFunctor](canvasElement, 'gesture', this._onGesture);\n // eventjs[eventjsFunctor](canvasElement, 'drag', this._onDrag);\n // eventjs[eventjsFunctor](\n // canvasElement,\n // 'orientation',\n // this._onOrientationChange\n // );\n // eventjs[eventjsFunctor](canvasElement, 'shake', this._onShake);\n // eventjs[eventjsFunctor](canvasElement, 'longpress', this._onLongPress);\n // }\n }\n\n /**\n * Removes all event listeners\n */\n removeListeners() {\n this.addOrRemove(removeListener, 'remove');\n // if you dispose on a mouseDown, before mouse up, you need to clean document to...\n const eventTypePrefix = this._getEventPrefix();\n const doc = getDocumentFromElement(this.upperCanvasEl);\n removeListener(\n doc,\n `${eventTypePrefix}up`,\n this._onMouseUp as EventListener,\n );\n removeListener(\n doc,\n 'touchend',\n this._onTouchEnd as EventListener,\n addEventOptions,\n );\n removeListener(\n doc,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n removeListener(\n doc,\n 'touchmove',\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n }\n\n /**\n * @private\n * @param {Event} [e] Event object fired on wheel event\n */\n private _onMouseWheel(e: MouseEvent) {\n this.__onMouseWheel(e);\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n private _onMouseOut(e: TPointerEvent) {\n const target = this._hoveredTarget;\n const shared = {\n e,\n ...getEventPoints(this, e),\n };\n this.fire('mouse:out', { ...shared, target });\n this._hoveredTarget = undefined;\n target && target.fire('mouseout', { ...shared });\n this._hoveredTargets.forEach((nestedTarget) => {\n this.fire('mouse:out', { ...shared, target: nestedTarget });\n nestedTarget && nestedTarget.fire('mouseout', { ...shared });\n });\n this._hoveredTargets = [];\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseenter\n */\n private _onMouseEnter(e: TPointerEvent) {\n // This find target and consequent 'mouse:over' is used to\n // clear old instances on hovered target.\n // calling findTarget has the side effect of killing target.__corner.\n // as a short term fix we are not firing this if we are currently transforming.\n // as a long term fix we need to separate the action of finding a target with the\n // side effects we added to it.\n if (!this._currentTransform && !this.findTarget(e)) {\n this.fire('mouse:over', {\n e,\n ...getEventPoints(this, e),\n });\n this._hoveredTarget = undefined;\n this._hoveredTargets = [];\n }\n }\n\n /**\n * supports native like text dragging\n * @private\n * @param {DragEvent} e\n */\n private _onDragStart(e: DragEvent) {\n this._isClick = false;\n const activeObject = this.getActiveObject();\n if (activeObject && activeObject.onDragStart(e)) {\n this._dragSource = activeObject;\n const options = { e, target: activeObject };\n this.fire('dragstart', options);\n activeObject.fire('dragstart', options);\n addListener(\n this.upperCanvasEl,\n 'drag',\n this._onDragProgress as EventListener,\n );\n return;\n }\n stopEvent(e);\n }\n\n /**\n * First we clear top context where the effects are being rendered.\n * Then we render the effects.\n * Doing so will render the correct effect for all cases including an overlap between `source` and `target`.\n * @private\n */\n private _renderDragEffects(\n e: DragEvent,\n source?: FabricObject,\n target?: FabricObject,\n ) {\n let dirty = false;\n // clear top context\n const dropTarget = this._dropTarget;\n if (dropTarget && dropTarget !== source && dropTarget !== target) {\n dropTarget.clearContextTop();\n dirty = true;\n }\n source?.clearContextTop();\n target !== source && target?.clearContextTop();\n // render effects\n const ctx = this.contextTop;\n ctx.save();\n ctx.transform(...this.viewportTransform);\n if (source) {\n ctx.save();\n source.transform(ctx);\n source.renderDragSourceEffect(e);\n ctx.restore();\n dirty = true;\n }\n if (target) {\n ctx.save();\n target.transform(ctx);\n target.renderDropTargetEffect(e);\n ctx.restore();\n dirty = true;\n }\n ctx.restore();\n dirty && (this.contextTopDirty = true);\n }\n\n /**\n * supports native like text dragging\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#finishing_a_drag\n * @private\n * @param {DragEvent} e\n */\n private _onDragEnd(e: DragEvent) {\n const didDrop = !!e.dataTransfer && e.dataTransfer.dropEffect !== NONE,\n dropTarget = didDrop ? this._activeObject : undefined,\n options = {\n e,\n target: this._dragSource as FabricObject,\n subTargets: this.targets,\n dragSource: this._dragSource as FabricObject,\n didDrop,\n dropTarget: dropTarget as FabricObject,\n };\n removeListener(\n this.upperCanvasEl,\n 'drag',\n this._onDragProgress as EventListener,\n );\n this.fire('dragend', options);\n this._dragSource && this._dragSource.fire('dragend', options);\n delete this._dragSource;\n // we need to call mouse up synthetically because the browser won't\n this._onMouseUp(e);\n }\n\n /**\n * fire `drag` event on canvas and drag source\n * @private\n * @param {DragEvent} e\n */\n private _onDragProgress(e: DragEvent) {\n const options = {\n e,\n target: this._dragSource as FabricObject | undefined,\n dragSource: this._dragSource as FabricObject | undefined,\n dropTarget: this._draggedoverTarget as FabricObject,\n };\n this.fire('drag', options);\n this._dragSource && this._dragSource.fire('drag', options);\n }\n\n /**\n * As opposed to {@link findTarget} we want the top most object to be returned w/o the active object cutting in line.\n * Override at will\n */\n protected findDragTargets(e: DragEvent) {\n this.targets = [];\n const target = this._searchPossibleTargets(\n this._objects,\n this.getViewportPoint(e),\n );\n return {\n target,\n targets: [...this.targets],\n };\n }\n\n /**\n * prevent default to allow drop event to be fired\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#specifying_drop_targets\n * @private\n * @param {DragEvent} [e] Event object fired on Event.js shake\n */\n private _onDragOver(e: DragEvent) {\n const eventType = 'dragover';\n const { target, targets } = this.findDragTargets(e);\n const dragSource = this._dragSource as FabricObject;\n const options = {\n e,\n target,\n subTargets: targets,\n dragSource,\n canDrop: false,\n dropTarget: undefined,\n };\n let dropTarget;\n // fire on canvas\n this.fire(eventType, options);\n // make sure we fire dragenter events before dragover\n // if dragleave is needed, object will not fire dragover so we don't need to trouble ourselves with it\n this._fireEnterLeaveEvents(target, options);\n if (target) {\n if (target.canDrop(e)) {\n dropTarget = target;\n }\n target.fire(eventType, options);\n }\n // propagate the event to subtargets\n for (let i = 0; i < targets.length; i++) {\n const subTarget = targets[i];\n // accept event only if previous targets didn't (the accepting target calls `preventDefault` to inform that the event is taken)\n // TODO: verify if those should loop in inverse order then?\n // what is the order of subtargets?\n if (subTarget.canDrop(e)) {\n dropTarget = subTarget;\n }\n subTarget.fire(eventType, options);\n }\n // render drag effects now that relations between source and target is clear\n this._renderDragEffects(e, dragSource, dropTarget);\n this._dropTarget = dropTarget;\n }\n\n /**\n * fire `dragleave` on `dragover` targets\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n */\n private _onDragEnter(e: DragEvent) {\n const { target, targets } = this.findDragTargets(e);\n const options = {\n e,\n target,\n subTargets: targets,\n dragSource: this._dragSource,\n };\n this.fire('dragenter', options);\n // fire dragenter on targets\n this._fireEnterLeaveEvents(target, options);\n }\n\n /**\n * fire `dragleave` on `dragover` targets\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n */\n private _onDragLeave(e: DragEvent) {\n const options = {\n e,\n target: this._draggedoverTarget,\n subTargets: this.targets,\n dragSource: this._dragSource,\n };\n this.fire('dragleave', options);\n\n // fire dragleave on targets\n this._fireEnterLeaveEvents(undefined, options);\n this._renderDragEffects(e, this._dragSource);\n this._dropTarget = undefined;\n // clear targets\n this.targets = [];\n this._hoveredTargets = [];\n }\n\n /**\n * `drop:before` is a an event that allows you to schedule logic\n * before the `drop` event. Prefer `drop` event always, but if you need\n * to run some drop-disabling logic on an event, since there is no way\n * to handle event handlers ordering, use `drop:before`\n * @private\n * @param {Event} e\n */\n private _onDrop(e: DragEvent) {\n const { target, targets } = this.findDragTargets(e);\n const options = this._basicEventHandler('drop:before', {\n e,\n target,\n subTargets: targets,\n dragSource: this._dragSource,\n ...getEventPoints(this, e),\n });\n // will be set by the drop target\n options.didDrop = false;\n // will be set by the drop target, used in case options.target refuses the drop\n options.dropTarget = undefined;\n // fire `drop`\n this._basicEventHandler('drop', options);\n // inform canvas of the drop\n // we do this because canvas was unaware of what happened at the time the `drop` event was fired on it\n // use for side effects\n this.fire('drop:after', options);\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n private _onContextMenu(e: TPointerEvent): false {\n const target = this.findTarget(e),\n subTargets = this.targets || [];\n const options = this._basicEventHandler('contextmenu:before', {\n e,\n target,\n subTargets,\n });\n // TODO: this line is silly because the dev can subscribe to the event and prevent it themselves\n this.stopContextMenu && stopEvent(e);\n this._basicEventHandler('contextmenu', options);\n return false;\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n private _onDoubleClick(e: TPointerEvent) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'dblclick');\n this._resetTransformEventData();\n }\n\n /**\n * Return a the id of an event.\n * returns either the pointerId or the identifier or 0 for the mouse event\n * @private\n * @param {Event} evt Event object\n */\n getPointerId(evt: TouchEvent | PointerEvent): number {\n const changedTouches = (evt as TouchEvent).changedTouches;\n\n if (changedTouches) {\n return changedTouches[0] && changedTouches[0].identifier;\n }\n\n if (this.enablePointerEvents) {\n return (evt as PointerEvent).pointerId;\n }\n\n return -1;\n }\n\n /**\n * Determines if an event has the id of the event that is considered main\n * @private\n * @param {evt} event Event object\n */\n _isMainEvent(evt: TPointerEvent): boolean {\n if ((evt as PointerEvent).isPrimary === true) {\n return true;\n }\n if ((evt as PointerEvent).isPrimary === false) {\n return false;\n }\n if (evt.type === 'touchend' && (evt as TouchEvent).touches.length === 0) {\n return true;\n }\n if ((evt as TouchEvent).changedTouches) {\n return (\n (evt as TouchEvent).changedTouches[0].identifier === this.mainTouchId\n );\n }\n return true;\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchStart(e: TouchEvent) {\n // we will prevent scrolling if allowTouchScrolling is not enabled and\n let shouldPreventScrolling = !this.allowTouchScrolling;\n const currentActiveObject = this._activeObject;\n if (this.mainTouchId === undefined) {\n this.mainTouchId = this.getPointerId(e);\n }\n this.__onMouseDown(e);\n // after executing fabric logic for mouse down let's see\n // if we didn't change target or if we are drawing\n // we want to prevent scrolling anyway\n if (\n this.isDrawingMode ||\n (currentActiveObject && this._target === currentActiveObject)\n ) {\n shouldPreventScrolling = true;\n }\n // prevent default, will block scrolling from start\n shouldPreventScrolling && e.preventDefault();\n this._resetTransformEventData();\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n const doc = getDocumentFromElement(canvasElement);\n addListener(\n doc,\n 'touchend',\n this._onTouchEnd as EventListener,\n addEventOptions,\n );\n // if we scroll don't register the touch move event\n shouldPreventScrolling &&\n addListener(\n doc,\n 'touchmove',\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n // Unbind mousedown to prevent double triggers from touch devices\n removeListener(\n canvasElement,\n `${eventTypePrefix}down`,\n this._onMouseDown as EventListener,\n );\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDown(e: TPointerEvent) {\n this.__onMouseDown(e);\n this._resetTransformEventData();\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n removeListener(\n canvasElement,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n const doc = getDocumentFromElement(canvasElement);\n addListener(doc, `${eventTypePrefix}up`, this._onMouseUp as EventListener);\n addListener(\n doc,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchEnd(e: TouchEvent) {\n if (e.touches.length > 0) {\n // if there are still touches stop here\n return;\n }\n this.__onMouseUp(e);\n this._resetTransformEventData();\n delete this.mainTouchId;\n const eventTypePrefix = this._getEventPrefix();\n const doc = getDocumentFromElement(this.upperCanvasEl);\n removeListener(\n doc,\n 'touchend',\n this._onTouchEnd as EventListener,\n addEventOptions,\n );\n removeListener(\n doc,\n 'touchmove',\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n if (this._willAddMouseDown) {\n clearTimeout(this._willAddMouseDown);\n }\n this._willAddMouseDown = setTimeout(() => {\n // Wait 400ms before rebinding mousedown to prevent double triggers\n // from touch devices\n addListener(\n this.upperCanvasEl,\n `${eventTypePrefix}down`,\n this._onMouseDown as EventListener,\n );\n this._willAddMouseDown = 0;\n }, 400) as unknown as number;\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUp(e: TPointerEvent) {\n this.__onMouseUp(e);\n this._resetTransformEventData();\n const canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n if (this._isMainEvent(e)) {\n const doc = getDocumentFromElement(this.upperCanvasEl);\n removeListener(\n doc,\n `${eventTypePrefix}up`,\n this._onMouseUp as EventListener,\n );\n removeListener(\n doc,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n addListener(\n canvasElement,\n `${eventTypePrefix}move`,\n this._onMouseMove as EventListener,\n addEventOptions,\n );\n }\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMove(e: TPointerEvent) {\n const activeObject = this.getActiveObject();\n !this.allowTouchScrolling &&\n (!activeObject ||\n // a drag event sequence is started by the active object flagging itself on mousedown / mousedown:before\n // we must not prevent the event's default behavior in order for the window to start dragging\n !activeObject.shouldStartDragging(e)) &&\n e.preventDefault &&\n e.preventDefault();\n this.__onMouseMove(e);\n }\n\n /**\n * @private\n */\n _onResize() {\n this.calcOffset();\n this._resetTransformEventData();\n }\n\n /**\n * Decides whether the canvas should be redrawn in mouseup and mousedown events.\n * @private\n * @param {Object} target\n */\n _shouldRender(target: FabricObject | undefined) {\n const activeObject = this.getActiveObject();\n // if just one of them is available or if they are both but are different objects\n // this covers: switch of target, from target to no target, selection of target\n // multiSelection with key and mouse\n return (\n !!activeObject !== !!target ||\n (activeObject && target && activeObject !== target)\n );\n }\n\n /**\n * Method that defines the actions when mouse is released on canvas.\n * The method resets the currentTransform parameters, store the image corner\n * position in the image object and render the canvas on top.\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseUp(e: TPointerEvent) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'up:before');\n\n const transform = this._currentTransform;\n const isClick = this._isClick;\n const target = this._target;\n\n // if right/middle click just fire events and return\n // target undefined will make the _handleEvent search the target\n const { button } = e as MouseEvent;\n if (button) {\n ((this.fireMiddleClick && button === 1) ||\n (this.fireRightClick && button === 2)) &&\n this._handleEvent(e, 'up');\n this._resetTransformEventData();\n return;\n }\n\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this._onMouseUpInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n let shouldRender = false;\n if (transform) {\n this._finalizeCurrentTransform(e);\n shouldRender = transform.actionPerformed;\n }\n if (!isClick) {\n const targetWasActive = target === this._activeObject;\n this.handleSelection(e);\n if (!shouldRender) {\n shouldRender =\n this._shouldRender(target) ||\n (!targetWasActive && target === this._activeObject);\n }\n }\n let pointer, corner;\n if (target) {\n const found = target.findControl(\n this.getViewportPoint(e),\n isTouchEvent(e),\n );\n const { key, control } = found || {};\n corner = key;\n if (\n target.selectable &&\n target !== this._activeObject &&\n target.activeOn === 'up'\n ) {\n this.setActiveObject(target, e);\n shouldRender = true;\n } else if (control) {\n const mouseUpHandler = control.getMouseUpHandler(e, target, control);\n if (mouseUpHandler) {\n pointer = this.getScenePoint(e);\n mouseUpHandler.call(control, e, transform!, pointer.x, pointer.y);\n }\n }\n target.isMoving = false;\n }\n // if we are ending up a transform on a different control or a new object\n // fire the original mouse up from the corner that started the transform\n if (\n transform &&\n (transform.target !== target || transform.corner !== corner)\n ) {\n const originalControl =\n transform.target && transform.target.controls[transform.corner],\n originalMouseUpHandler =\n originalControl &&\n originalControl.getMouseUpHandler(\n e,\n transform.target,\n originalControl,\n );\n pointer = pointer || this.getScenePoint(e);\n originalMouseUpHandler &&\n originalMouseUpHandler.call(\n originalControl,\n e,\n transform,\n pointer.x,\n pointer.y,\n );\n }\n this._setCursorFromEvent(e, target);\n this._handleEvent(e, 'up');\n this._groupSelector = null;\n this._currentTransform = null;\n // reset the target information about which corner is selected\n target && (target.__corner = undefined);\n if (shouldRender) {\n this.requestRenderAll();\n } else if (!isClick && !(this._activeObject as IText)?.isEditing) {\n this.renderTop();\n }\n }\n\n _basicEventHandler(\n eventType: T,\n options: (CanvasEvents & ObjectEvents)[T],\n ) {\n const { target, subTargets = [] } = options as {\n target?: FabricObject;\n subTargets: FabricObject[];\n };\n this.fire(eventType, options);\n target && target.fire(eventType, options);\n for (let i = 0; i < subTargets.length; i++) {\n subTargets[i] !== target && subTargets[i].fire(eventType, options);\n }\n return options;\n }\n\n /**\n * @private\n * Handle event firing for target and subtargets\n * @param {TPointerEvent} e event from mouse\n * @param {TPointerEventNames} eventType\n */\n _handleEvent(e: TPointerEvent, eventType: T) {\n const target = this._target,\n targets = this.targets || [],\n options: CanvasEvents[`mouse:${T}`] = {\n e,\n target,\n subTargets: targets,\n ...getEventPoints(this, e),\n transform: this._currentTransform,\n ...(eventType === 'up:before' || eventType === 'up'\n ? {\n isClick: this._isClick,\n currentTarget: this.findTarget(e),\n // set by the preceding `findTarget` call\n currentSubTargets: this.targets,\n }\n : {}),\n } as CanvasEvents[`mouse:${T}`];\n this.fire(`mouse:${eventType}`, options);\n // this may be a little be more complicated of what we want to handle\n target && target.fire(`mouse${eventType}`, options);\n for (let i = 0; i < targets.length; i++) {\n targets[i] !== target && targets[i].fire(`mouse${eventType}`, options);\n }\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDownInDrawingMode(e: TPointerEvent) {\n this._isCurrentlyDrawing = true;\n if (this.getActiveObject()) {\n this.discardActiveObject(e);\n this.requestRenderAll();\n }\n // TODO: this is a scene point so it should be renamed\n const pointer = this.getScenePoint(e);\n this.freeDrawingBrush &&\n this.freeDrawingBrush.onMouseDown(pointer, { e, pointer });\n this._handleEvent(e, 'down');\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMoveInDrawingMode(e: TPointerEvent) {\n if (this._isCurrentlyDrawing) {\n const pointer = this.getScenePoint(e);\n this.freeDrawingBrush &&\n this.freeDrawingBrush.onMouseMove(pointer, {\n e,\n // this is an absolute pointer, the naming is wrong\n pointer,\n });\n }\n this.setCursor(this.freeDrawingCursor);\n this._handleEvent(e, 'move');\n }\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUpInDrawingMode(e: TPointerEvent) {\n const pointer = this.getScenePoint(e);\n if (this.freeDrawingBrush) {\n this._isCurrentlyDrawing = !!this.freeDrawingBrush.onMouseUp({\n e: e,\n // this is an absolute pointer, the naming is wrong\n pointer,\n });\n } else {\n this._isCurrentlyDrawing = false;\n }\n this._handleEvent(e, 'up');\n }\n\n /**\n * Method that defines the actions when mouse is clicked on canvas.\n * The method inits the currentTransform parameters and renders all the\n * canvas so the current image can be placed on the top canvas and the rest\n * in on the container one.\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n __onMouseDown(e: TPointerEvent) {\n this._isClick = true;\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'down:before');\n\n let target: FabricObject | undefined = this._target;\n\n // if right/middle click just fire events\n const { button } = e as MouseEvent;\n if (button) {\n ((this.fireMiddleClick && button === 1) ||\n (this.fireRightClick && button === 2)) &&\n this._handleEvent(e, 'down');\n this._resetTransformEventData();\n return;\n }\n\n if (this.isDrawingMode) {\n this._onMouseDownInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n // ignore if some object is being transformed at this moment\n if (this._currentTransform) {\n return;\n }\n\n let shouldRender = this._shouldRender(target);\n let grouped = false;\n if (this.handleMultiSelection(e, target)) {\n // active object might have changed while grouping\n target = this._activeObject;\n grouped = true;\n shouldRender = true;\n } else if (this._shouldClearSelection(e, target)) {\n this.discardActiveObject(e);\n }\n // we start a group selector rectangle if\n // selection is enabled\n // and there is no target, or the following 3 conditions are satisfied:\n // target is not selectable ( otherwise we selected it )\n // target is not editing\n // target is not already selected ( otherwise we drag )\n if (\n this.selection &&\n (!target ||\n (!target.selectable &&\n !(target as IText).isEditing &&\n target !== this._activeObject))\n ) {\n const p = this.getScenePoint(e);\n this._groupSelector = {\n x: p.x,\n y: p.y,\n deltaY: 0,\n deltaX: 0,\n };\n }\n\n if (target) {\n const alreadySelected = target === this._activeObject;\n if (target.selectable && target.activeOn === 'down') {\n this.setActiveObject(target, e);\n }\n const handle = target.findControl(\n this.getViewportPoint(e),\n isTouchEvent(e),\n );\n if (target === this._activeObject && (handle || !grouped)) {\n this._setupCurrentTransform(e, target, alreadySelected);\n const control = handle ? handle.control : undefined,\n pointer = this.getScenePoint(e),\n mouseDownHandler =\n control && control.getMouseDownHandler(e, target, control);\n mouseDownHandler &&\n mouseDownHandler.call(\n control,\n e,\n this._currentTransform!,\n pointer.x,\n pointer.y,\n );\n }\n }\n // we clear `_objectsToRender` in case of a change in order to repopulate it at rendering\n // run before firing the `down` event to give the dev a chance to populate it themselves\n shouldRender && (this._objectsToRender = undefined);\n this._handleEvent(e, 'down');\n // we must renderAll so that we update the visuals\n shouldRender && this.requestRenderAll();\n }\n\n /**\n * reset cache form common information needed during event processing\n * @private\n */\n _resetTransformEventData() {\n this._target = undefined;\n this._pointer = undefined;\n this._absolutePointer = undefined;\n }\n\n /**\n * Cache common information needed during event processing\n * @private\n * @param {Event} e Event object fired on event\n */\n _cacheTransformEventData(e: TPointerEvent) {\n // reset in order to avoid stale caching\n this._resetTransformEventData();\n this._pointer = this.getViewportPoint(e);\n this._absolutePointer = sendPointToPlane(\n this._pointer,\n undefined,\n this.viewportTransform,\n );\n this._target = this._currentTransform\n ? this._currentTransform.target\n : this.findTarget(e);\n }\n\n /**\n * Method that defines the actions when mouse is hovering the canvas.\n * The currentTransform parameter will define whether the user is rotating/scaling/translating\n * an image or neither of them (only hovering). A group selection is also possible and would cancel\n * all any other type of action.\n * In case of an image transformation only the top canvas will be rendered.\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n __onMouseMove(e: TPointerEvent) {\n this._isClick = false;\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'move:before');\n\n if (this.isDrawingMode) {\n this._onMouseMoveInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n const groupSelector = this._groupSelector;\n\n // We initially clicked in an empty area, so we draw a box for multiple selection\n if (groupSelector) {\n const pointer = this.getScenePoint(e);\n\n groupSelector.deltaX = pointer.x - groupSelector.x;\n groupSelector.deltaY = pointer.y - groupSelector.y;\n\n this.renderTop();\n } else if (!this._currentTransform) {\n const target = this.findTarget(e);\n this._setCursorFromEvent(e, target);\n this._fireOverOutEvents(e, target);\n } else {\n this._transformObject(e);\n }\n this.textEditingManager.onMouseMove(e);\n this._handleEvent(e, 'move');\n this._resetTransformEventData();\n }\n\n /**\n * Manage the mouseout, mouseover events for the fabric object on the canvas\n * @param {Fabric.Object} target the target where the target from the mousemove event\n * @param {Event} e Event object fired on mousemove\n * @private\n */\n _fireOverOutEvents(e: TPointerEvent, target?: FabricObject) {\n const _hoveredTarget = this._hoveredTarget,\n _hoveredTargets = this._hoveredTargets,\n targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents('mouse', {\n e,\n target,\n oldTarget: _hoveredTarget,\n fireCanvas: true,\n });\n for (let i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents('mouse', {\n e,\n target: targets[i],\n oldTarget: _hoveredTargets[i],\n });\n }\n this._hoveredTarget = target;\n this._hoveredTargets = this.targets.concat();\n }\n\n /**\n * Manage the dragEnter, dragLeave events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the onDrag event\n * @param {Object} data Event object fired on dragover\n * @private\n */\n _fireEnterLeaveEvents(target: FabricObject | undefined, data: DragEventData) {\n const draggedoverTarget = this._draggedoverTarget,\n _hoveredTargets = this._hoveredTargets,\n targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents('drag', {\n ...data,\n target,\n oldTarget: draggedoverTarget,\n fireCanvas: true,\n });\n for (let i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents('drag', {\n ...data,\n target: targets[i],\n oldTarget: _hoveredTargets[i],\n });\n }\n this._draggedoverTarget = target;\n }\n\n /**\n * Manage the synthetic in/out events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the supported events\n * @param {Object} data Event object fired\n * @param {Object} config configuration for the function to work\n * @param {String} config.targetName property on the canvas where the old target is stored\n * @param {String} [config.canvasEvtOut] name of the event to fire at canvas level for out\n * @param {String} config.evtOut name of the event to fire for out\n * @param {String} [config.canvasEvtIn] name of the event to fire at canvas level for in\n * @param {String} config.evtIn name of the event to fire for in\n * @private\n */\n fireSyntheticInOutEvents(\n type: T,\n {\n target,\n oldTarget,\n fireCanvas,\n e,\n ...data\n }: TSyntheticEventContext[T] & {\n target?: FabricObject;\n oldTarget?: FabricObject;\n fireCanvas?: boolean;\n },\n ) {\n const { targetIn, targetOut, canvasIn, canvasOut } =\n syntheticEventConfig[type];\n const targetChanged = oldTarget !== target;\n\n if (oldTarget && targetChanged) {\n const outOpt: CanvasEvents[typeof canvasOut] = {\n ...data,\n e,\n target: oldTarget,\n nextTarget: target,\n ...getEventPoints(this, e),\n };\n fireCanvas && this.fire(canvasOut, outOpt);\n oldTarget.fire(targetOut, outOpt);\n }\n if (target && targetChanged) {\n const inOpt: CanvasEvents[typeof canvasIn] = {\n ...data,\n e,\n target,\n previousTarget: oldTarget,\n ...getEventPoints(this, e),\n };\n fireCanvas && this.fire(canvasIn, inOpt);\n target.fire(targetIn, inOpt);\n }\n }\n\n /**\n * Method that defines actions when an Event Mouse Wheel\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseWheel(e: TPointerEvent) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'wheel');\n this._resetTransformEventData();\n }\n\n /**\n * @private\n * @param {Event} e Event fired on mousemove\n */\n _transformObject(e: TPointerEvent) {\n const scenePoint = this.getScenePoint(e),\n transform = this._currentTransform!,\n target = transform.target,\n // transform pointer to target's containing coordinate plane\n // both pointer and object should agree on every point\n localPointer = target.group\n ? sendPointToPlane(\n scenePoint,\n undefined,\n target.group.calcTransformMatrix(),\n )\n : scenePoint;\n transform.shiftKey = e.shiftKey;\n transform.altKey = !!this.centeredKey && e[this.centeredKey];\n\n this._performTransformAction(e, transform, localPointer);\n transform.actionPerformed && this.requestRenderAll();\n }\n\n /**\n * @private\n */\n _performTransformAction(\n e: TPointerEvent,\n transform: Transform,\n pointer: Point,\n ) {\n const { action, actionHandler, target } = transform;\n\n const actionPerformed =\n !!actionHandler && actionHandler(e, transform, pointer.x, pointer.y);\n actionPerformed && target.setCoords();\n\n // this object could be created from the function in the control handlers\n if (action === 'drag' && actionPerformed) {\n transform.target.isMoving = true;\n this.setCursor(transform.target.moveCursor || this.moveCursor);\n }\n transform.actionPerformed = transform.actionPerformed || actionPerformed;\n }\n\n /**\n * Sets the cursor depending on where the canvas is being hovered.\n * Note: very buggy in Opera\n * @param {Event} e Event object\n * @param {Object} target Object that the mouse is hovering, if so.\n */\n _setCursorFromEvent(e: TPointerEvent, target?: FabricObject) {\n if (!target) {\n this.setCursor(this.defaultCursor);\n return;\n }\n let hoverCursor = target.hoverCursor || this.hoverCursor;\n const activeSelection = isActiveSelection(this._activeObject)\n ? this._activeObject\n : null,\n // only show proper corner when group selection is not active\n corner =\n (!activeSelection || target.group !== activeSelection) &&\n // here we call findTargetCorner always with undefined for the touch parameter.\n // we assume that if you are using a cursor you do not need to interact with\n // the bigger touch area.\n target.findControl(this.getViewportPoint(e));\n\n if (!corner) {\n if ((target as Group).subTargetCheck) {\n // hoverCursor should come from top-most subTarget,\n // so we walk the array backwards\n this.targets\n .concat()\n .reverse()\n .map((_target) => {\n hoverCursor = _target.hoverCursor || hoverCursor;\n });\n }\n this.setCursor(hoverCursor);\n } else {\n const control = corner.control;\n this.setCursor(control.cursorStyleHandler(e, control, target));\n }\n }\n\n /**\n * ## Handles multiple selection\n * - toggles `target` selection (selects/deselects `target` if it isn't/is selected respectively)\n * - sets the active object in case it is not set or in case there is a single active object left under active selection.\n * ---\n * - If the active object is the active selection we add/remove `target` from it\n * - If not, add the active object and `target` to the active selection and make it the active object.\n * @private\n * @param {TPointerEvent} e Event object\n * @param {FabricObject} target target of event to select/deselect\n * @returns true if grouping occurred\n */\n protected handleMultiSelection(e: TPointerEvent, target?: FabricObject) {\n const activeObject = this._activeObject;\n const isAS = isActiveSelection(activeObject);\n if (\n // check if an active object exists on canvas and if the user is pressing the `selectionKey` while canvas supports multi selection.\n !!activeObject &&\n this._isSelectionKeyPressed(e) &&\n this.selection &&\n // on top of that the user also has to hit a target that is selectable.\n !!target &&\n target.selectable &&\n // group target and active object only if they are different objects\n // else we try to find a subtarget of `ActiveSelection`\n (activeObject !== target || isAS) &&\n // make sure `activeObject` and `target` aren't ancestors of each other in case `activeObject` is not `ActiveSelection`\n // if it is then we want to remove `target` from it\n (isAS ||\n (!target.isDescendantOf(activeObject) &&\n !activeObject.isDescendantOf(target))) &&\n // target accepts selection\n !target.onSelect({ e }) &&\n // make sure we are not on top of a control\n !activeObject.getActiveControl()\n ) {\n if (isAS) {\n const prevActiveObjects = activeObject.getObjects();\n if (target === activeObject) {\n const pointer = this.getViewportPoint(e);\n target =\n // first search active objects for a target to remove\n this.searchPossibleTargets(prevActiveObjects, pointer) ||\n // if not found, search under active selection for a target to add\n // `prevActiveObjects` will be searched but we already know they will not be found\n this.searchPossibleTargets(this._objects, pointer);\n // if nothing is found bail out\n if (!target || !target.selectable) {\n return false;\n }\n }\n if (target.group === activeObject) {\n // `target` is part of active selection => remove it\n activeObject.remove(target);\n this._hoveredTarget = target;\n this._hoveredTargets = [...this.targets];\n // if after removing an object we are left with one only...\n if (activeObject.size() === 1) {\n // activate last remaining object\n // deselecting the active selection will remove the remaining object from it\n this._setActiveObject(activeObject.item(0), e);\n }\n } else {\n // `target` isn't part of active selection => add it\n activeObject.multiSelectAdd(target);\n this._hoveredTarget = activeObject;\n this._hoveredTargets = [...this.targets];\n }\n this._fireSelectionEvents(prevActiveObjects, e);\n } else {\n (activeObject as IText).exitEditing &&\n (activeObject as IText).exitEditing();\n // add the active object and the target to the active selection and set it as the active object\n const klass =\n classRegistry.getClass('ActiveSelection');\n const newActiveSelection = new klass([], {\n /**\n * it is crucial to pass the canvas ref before calling {@link ActiveSelection#multiSelectAdd}\n * since it uses {@link FabricObject#isInFrontOf} which relies on the canvas ref\n */\n canvas: this,\n });\n newActiveSelection.multiSelectAdd(activeObject, target);\n this._hoveredTarget = newActiveSelection;\n // ISSUE 4115: should we consider subTargets here?\n // this._hoveredTargets = [];\n // this._hoveredTargets = this.targets.concat();\n this._setActiveObject(newActiveSelection, e);\n this._fireSelectionEvents([activeObject], e);\n }\n return true;\n }\n return false;\n }\n\n /**\n * ## Handles selection\n * - selects objects that are contained in (and possibly intersecting) the selection bounding box\n * - sets the active object\n * ---\n * runs on mouse up after a mouse move\n */\n protected handleSelection(e: TPointerEvent) {\n if (!this.selection || !this._groupSelector) {\n return false;\n }\n const { x, y, deltaX, deltaY } = this._groupSelector,\n point1 = new Point(x, y),\n point2 = point1.add(new Point(deltaX, deltaY)),\n tl = point1.min(point2),\n br = point1.max(point2),\n size = br.subtract(tl);\n\n const collectedObjects = this.collectObjects(\n {\n left: tl.x,\n top: tl.y,\n width: size.x,\n height: size.y,\n },\n { includeIntersecting: !this.selectionFullyContained },\n ) as FabricObject[];\n\n const objects =\n // though this method runs only after mouse move the pointer could do a mouse up on the same position as mouse down\n // should it be handled as is?\n point1.eq(point2)\n ? collectedObjects[0]\n ? [collectedObjects[0]]\n : []\n : collectedObjects.length > 1\n ? collectedObjects\n .filter((object) => !object.onSelect({ e }))\n .reverse()\n : // `setActiveObject` will call `onSelect(collectedObjects[0])` in this case\n collectedObjects;\n\n // set active object\n if (objects.length === 1) {\n // set as active object\n this.setActiveObject(objects[0], e);\n } else if (objects.length > 1) {\n // add to active selection and make it the active object\n const klass =\n classRegistry.getClass('ActiveSelection');\n this.setActiveObject(new klass(objects, { canvas: this }), e);\n }\n\n // cleanup\n this._groupSelector = null;\n return true;\n }\n\n /**\n * @override clear {@link textEditingManager}\n */\n clear() {\n this.textEditingManager.clear();\n super.clear();\n }\n\n /**\n * @override clear {@link textEditingManager}\n */\n destroy() {\n this.removeListeners();\n this.textEditingManager.dispose();\n super.destroy();\n }\n}\n","export const linearDefaultCoords = {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n};\n\nexport const radialDefaultCoords = {\n ...linearDefaultCoords,\n r1: 0,\n r2: 0,\n};\n","/**\n *\n * @param value value to check if NaN\n * @param [valueIfNaN]\n * @returns `fallback` is `value is NaN\n */\nexport const ifNaN = (value: number, valueIfNaN?: number) => {\n return isNaN(value) && typeof valueIfNaN === 'number' ? valueIfNaN : value;\n};\n","import { ifNaN } from '../util/internals/ifNaN';\nimport { capValue } from '../util/misc/capValue';\n\nconst RE_PERCENT = /^(\\d+\\.\\d+)%|(\\d+)%$/;\n\nexport function isPercent(value: string | null) {\n return value && RE_PERCENT.test(value);\n}\n\n/**\n *\n * @param value\n * @param valueIfNaN\n * @returns ∈ [0, 1]\n */\nexport function parsePercent(\n value: string | number | null | undefined,\n valueIfNaN?: number,\n) {\n const parsed =\n typeof value === 'number'\n ? value\n : typeof value === 'string'\n ? parseFloat(value) / (isPercent(value) ? 100 : 1)\n : NaN;\n return capValue(0, ifNaN(parsed, valueIfNaN), 1);\n}\n","import { Color } from '../../color/Color';\nimport { parsePercent } from '../../parser/percent';\nimport { ifNaN } from '../../util/internals/ifNaN';\nimport type { ColorStop } from '../typedefs';\n\nconst RE_KEY_VALUE_PAIRS = /\\s*;\\s*/;\nconst RE_KEY_VALUE = /\\s*:\\s*/;\n\nfunction parseColorStop(el: SVGStopElement, multiplier: number) {\n let colorValue, opacity;\n const style = el.getAttribute('style');\n if (style) {\n const keyValuePairs = style.split(RE_KEY_VALUE_PAIRS);\n\n if (keyValuePairs[keyValuePairs.length - 1] === '') {\n keyValuePairs.pop();\n }\n\n for (let i = keyValuePairs.length; i--; ) {\n const [key, value] = keyValuePairs[i]\n .split(RE_KEY_VALUE)\n .map((s) => s.trim());\n if (key === 'stop-color') {\n colorValue = value;\n } else if (key === 'stop-opacity') {\n opacity = value;\n }\n }\n }\n\n const color = new Color(\n colorValue || el.getAttribute('stop-color') || 'rgb(0,0,0)',\n );\n\n return {\n offset: parsePercent(el.getAttribute('offset'), 0),\n color: color.toRgb(),\n opacity:\n ifNaN(parseFloat(opacity || el.getAttribute('stop-opacity') || ''), 1) *\n color.getAlpha() *\n multiplier,\n };\n}\n\nexport function parseColorStops(\n el: SVGGradientElement,\n opacityAttr: string | null,\n) {\n const colorStops: ColorStop[] = [],\n colorStopEls = el.getElementsByTagName('stop'),\n multiplier = parsePercent(opacityAttr, 1);\n for (let i = colorStopEls.length; i--; ) {\n colorStops.push(parseColorStop(colorStopEls[i], multiplier));\n }\n return colorStops;\n}\n","import type { GradientType, GradientUnits } from '../typedefs';\n\nexport function parseType(el: SVGGradientElement): GradientType {\n return el.nodeName === 'linearGradient' || el.nodeName === 'LINEARGRADIENT'\n ? 'linear'\n : 'radial';\n}\n\nexport function parseGradientUnits(el: SVGGradientElement): GradientUnits {\n return el.getAttribute('gradientUnits') === 'userSpaceOnUse'\n ? 'pixels'\n : 'percentage';\n}\n","import { isPercent } from '../../parser/percent';\nimport type { TSize } from '../../typedefs';\nimport type { GradientCoords, GradientType, GradientUnits } from '../typedefs';\nimport { parseGradientUnits, parseType } from './misc';\n\nfunction convertPercentUnitsToValues<\n T extends GradientType,\n K extends keyof GradientCoords,\n>(\n valuesToConvert: Record,\n { width, height, gradientUnits }: TSize & { gradientUnits: GradientUnits },\n) {\n let finalValue;\n return (Object.keys(valuesToConvert) as K[]).reduce(\n (acc, prop) => {\n const propValue = valuesToConvert[prop];\n if (propValue === 'Infinity') {\n finalValue = 1;\n } else if (propValue === '-Infinity') {\n finalValue = 0;\n } else {\n finalValue =\n typeof propValue === 'string' ? parseFloat(propValue) : propValue;\n if (typeof propValue === 'string' && isPercent(propValue)) {\n finalValue *= 0.01;\n if (gradientUnits === 'pixels') {\n // then we need to fix those percentages here in svg parsing\n if (prop === 'x1' || prop === 'x2' || prop === 'r2') {\n finalValue *= width;\n }\n if (prop === 'y1' || prop === 'y2') {\n finalValue *= height;\n }\n }\n }\n }\n acc[prop] = finalValue;\n return acc;\n },\n {} as Record,\n );\n}\n\nfunction getValue(el: SVGGradientElement, key: string) {\n return el.getAttribute(key);\n}\n\nexport function parseLinearCoords(el: SVGGradientElement) {\n return {\n x1: getValue(el, 'x1') || 0,\n y1: getValue(el, 'y1') || 0,\n x2: getValue(el, 'x2') || '100%',\n y2: getValue(el, 'y2') || 0,\n };\n}\n\nexport function parseRadialCoords(el: SVGGradientElement) {\n return {\n x1: getValue(el, 'fx') || getValue(el, 'cx') || '50%',\n y1: getValue(el, 'fy') || getValue(el, 'cy') || '50%',\n r1: 0,\n x2: getValue(el, 'cx') || '50%',\n y2: getValue(el, 'cy') || '50%',\n r2: getValue(el, 'r') || '50%',\n };\n}\n\nexport function parseCoords(el: SVGGradientElement, size: TSize) {\n return convertPercentUnitsToValues(\n parseType(el) === 'linear' ? parseLinearCoords(el) : parseRadialCoords(el),\n {\n ...size,\n gradientUnits: parseGradientUnits(el),\n },\n );\n}\n","import { Color } from '../color/Color';\nimport { iMatrix } from '../constants';\nimport { parseTransformAttribute } from '../parser/parseTransformAttribute';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { uid } from '../util/internals/uid';\nimport { pick } from '../util/misc/pick';\nimport { matrixToSVG } from '../util/misc/svgParsing';\nimport { linearDefaultCoords, radialDefaultCoords } from './constants';\nimport { parseColorStops } from './parser/parseColorStops';\nimport { parseCoords } from './parser/parseCoords';\nimport { parseType, parseGradientUnits } from './parser/misc';\nimport type {\n ColorStop,\n GradientCoords,\n GradientOptions,\n GradientType,\n GradientUnits,\n SVGOptions,\n} from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { isPath } from '../util/typeAssertions';\n\n/**\n * Gradient class\n * @class Gradient\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#gradients}\n */\nexport class Gradient<\n S,\n T extends GradientType = S extends GradientType ? S : 'linear',\n> {\n /**\n * Horizontal offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n declare offsetX: number;\n\n /**\n * Vertical offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n declare offsetY: number;\n\n /**\n * A transform matrix to apply to the gradient before painting.\n * Imported from svg gradients, is not applied with the current transform in the center.\n * Before this transform is applied, the origin point is at the top left corner of the object\n * plus the addition of offsetY and offsetX.\n * @type Number[]\n * @default null\n */\n declare gradientTransform?: TMat2D;\n\n /**\n * coordinates units for coords.\n * If `pixels`, the number of coords are in the same unit of width / height.\n * If set as `percentage` the coords are still a number, but 1 means 100% of width\n * for the X and 100% of the height for the y. It can be bigger than 1 and negative.\n * allowed values pixels or percentage.\n * @type GradientUnits\n * @default 'pixels'\n */\n declare gradientUnits: GradientUnits;\n\n /**\n * Gradient type linear or radial\n * @type GradientType\n * @default 'linear'\n */\n declare type: T;\n\n /**\n * Defines how the gradient is located in space and spread\n * @type GradientCoords\n */\n declare coords: GradientCoords;\n\n /**\n * Defines how many colors a gradient has and how they are located on the axis\n * defined by coords\n * @type GradientCoords\n */\n declare colorStops: ColorStop[];\n\n /**\n * If true, this object will not be exported during the serialization of a canvas\n * @type boolean\n */\n declare excludeFromExport?: boolean;\n\n /**\n * ID used for SVG export functionalities\n * @type number | string\n */\n declare readonly id: string | number;\n\n static type = 'Gradient';\n\n constructor(options: GradientOptions) {\n const {\n type = 'linear' as T,\n gradientUnits = 'pixels',\n coords = {},\n colorStops = [],\n offsetX = 0,\n offsetY = 0,\n gradientTransform,\n id,\n } = options || {};\n Object.assign(this, {\n type,\n gradientUnits,\n coords: {\n ...(type === 'radial' ? radialDefaultCoords : linearDefaultCoords),\n ...coords,\n },\n colorStops,\n offsetX,\n offsetY,\n gradientTransform,\n id: id ? `${id}_${uid()}` : uid(),\n });\n }\n\n /**\n * Adds another colorStop\n * @param {Record} colorStop Object with offset and color\n * @return {Gradient} thisArg\n */\n addColorStop(colorStops: Record) {\n for (const position in colorStops) {\n const color = new Color(colorStops[position]);\n this.colorStops.push({\n offset: parseFloat(position),\n color: color.toRgb(),\n opacity: color.getAlpha(),\n });\n }\n return this;\n }\n\n /**\n * Returns object representation of a gradient\n * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {object}\n */\n toObject(propertiesToInclude?: (keyof this | string)[]) {\n return {\n ...pick(this, propertiesToInclude as (keyof this)[]),\n type: this.type,\n coords: { ...this.coords },\n colorStops: this.colorStops.map((colorStop) => ({ ...colorStop })),\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n gradientUnits: this.gradientUnits,\n gradientTransform: this.gradientTransform\n ? [...this.gradientTransform]\n : undefined,\n };\n }\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of an gradient\n * @param {FabricObject} object Object to create a gradient for\n * @return {String} SVG representation of an gradient (linear/radial)\n */\n toSVG(\n object: FabricObject,\n {\n additionalTransform: preTransform,\n }: { additionalTransform?: string } = {},\n ) {\n const markup = [],\n transform = (\n this.gradientTransform\n ? this.gradientTransform.concat()\n : iMatrix.concat()\n ) as TMat2D,\n gradientUnits =\n this.gradientUnits === 'pixels'\n ? 'userSpaceOnUse'\n : 'objectBoundingBox';\n // colorStops must be sorted ascending, and guarded against deep mutations\n const colorStops = this.colorStops\n .map((colorStop) => ({ ...colorStop }))\n .sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let offsetX = -this.offsetX,\n offsetY = -this.offsetY;\n if (gradientUnits === 'objectBoundingBox') {\n offsetX /= object.width;\n offsetY /= object.height;\n } else {\n offsetX += object.width / 2;\n offsetY += object.height / 2;\n }\n // todo what about polygon/polyline?\n if (isPath(object) && this.gradientUnits !== 'percentage') {\n offsetX -= object.pathOffset.x;\n offsetY -= object.pathOffset.y;\n }\n transform[4] -= offsetX;\n transform[5] -= offsetY;\n\n const commonAttributes = [\n `id=\"SVGID_${this.id}\"`,\n `gradientUnits=\"${gradientUnits}\"`,\n `gradientTransform=\"${\n preTransform ? preTransform + ' ' : ''\n }${matrixToSVG(transform)}\"`,\n '',\n ].join(' ');\n\n if (this.type === 'linear') {\n const { x1, y1, x2, y2 } = this.coords;\n markup.push(\n '\\n',\n );\n } else if (this.type === 'radial') {\n const { x1, y1, x2, y2, r1, r2 } = this\n .coords as GradientCoords<'radial'>;\n const needsSwap = r1 > r2;\n // svg radial gradient has just 1 radius. the biggest.\n markup.push(\n '\\n',\n );\n if (needsSwap) {\n // svg goes from internal to external radius. if radius are inverted, swap color stops.\n colorStops.reverse(); // mutates array\n colorStops.forEach((colorStop) => {\n colorStop.offset = 1 - colorStop.offset;\n });\n }\n const minRadius = Math.min(r1, r2);\n if (minRadius > 0) {\n // i have to shift all colorStops and add new one in 0.\n const maxRadius = Math.max(r1, r2),\n percentageShift = minRadius / maxRadius;\n colorStops.forEach((colorStop) => {\n colorStop.offset += percentageShift * (1 - colorStop.offset);\n });\n }\n }\n\n colorStops.forEach(({ color, offset, opacity }) => {\n markup.push(\n '\\n',\n );\n });\n\n markup.push(\n this.type === 'linear' ? '' : '',\n '\\n',\n );\n\n return markup.join('');\n }\n /* _TO_SVG_END_ */\n\n /**\n * Returns an instance of CanvasGradient\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {CanvasGradient}\n */\n toLive(ctx: CanvasRenderingContext2D): CanvasGradient {\n const { x1, y1, x2, y2, r1, r2 } = this.coords as GradientCoords<'radial'>;\n const gradient =\n this.type === 'linear'\n ? ctx.createLinearGradient(x1, y1, x2, y2)\n : ctx.createRadialGradient(x1, y1, r1, x2, y2, r2);\n\n this.colorStops.forEach(({ color, opacity, offset }) => {\n gradient.addColorStop(\n offset,\n typeof opacity !== 'undefined'\n ? new Color(color).setAlpha(opacity).toRgba()\n : color,\n );\n });\n\n return gradient;\n }\n\n static async fromObject(\n options: GradientOptions<'linear'>,\n ): Promise>;\n static async fromObject(\n options: GradientOptions<'radial'>,\n ): Promise>;\n static async fromObject(\n options: GradientOptions<'linear'> | GradientOptions<'radial'>,\n ) {\n const { colorStops, gradientTransform } = options;\n return new this({\n ...options,\n colorStops: colorStops\n ? colorStops.map((colorStop) => ({ ...colorStop }))\n : undefined,\n gradientTransform: gradientTransform ? [...gradientTransform] : undefined,\n });\n }\n\n /* _FROM_SVG_START_ */\n /**\n * Returns {@link Gradient} instance from an SVG element\n * @static\n * @memberOf Gradient\n * @param {SVGGradientElement} el SVG gradient element\n * @param {FabricObject} instance\n * @param {String} opacity A fill-opacity or stroke-opacity attribute to multiply to each stop's opacity.\n * @param {SVGOptions} svgOptions an object containing the size of the SVG in order to parse correctly gradients\n * that uses gradientUnits as 'userSpaceOnUse' and percentages.\n * @return {Gradient} Gradient instance\n * @see http://www.w3.org/TR/SVG/pservers.html#LinearGradientElement\n * @see http://www.w3.org/TR/SVG/pservers.html#RadialGradientElement\n *\n * @example\n *\n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n * \n *\n */\n static fromElement(\n el: SVGGradientElement,\n instance: FabricObject,\n svgOptions: SVGOptions,\n ): Gradient {\n const gradientUnits = parseGradientUnits(el);\n const center = instance._findCenterFromElement();\n return new this({\n id: el.getAttribute('id') || undefined,\n type: parseType(el),\n coords: parseCoords(el, {\n width: svgOptions.viewBoxWidth || svgOptions.width,\n height: svgOptions.viewBoxHeight || svgOptions.height,\n }),\n colorStops: parseColorStops(el, svgOptions.opacity),\n gradientUnits,\n gradientTransform: parseTransformAttribute(\n el.getAttribute('gradientTransform') || '',\n ),\n ...(gradientUnits === 'pixels'\n ? {\n offsetX: instance.width / 2 - center.x,\n offsetY: instance.height / 2 - center.y,\n }\n : {\n offsetX: 0,\n offsetY: 0,\n }),\n });\n }\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Gradient, 'gradient');\nclassRegistry.setClass(Gradient, 'linear');\nclassRegistry.setClass(Gradient, 'radial');\n","import { config } from '../config';\nimport type { Abortable, TCrossOrigin, TMat2D, TSize } from '../typedefs';\nimport { ifNaN } from '../util/internals/ifNaN';\nimport { uid } from '../util/internals/uid';\nimport { loadImage } from '../util/misc/objectEnlive';\nimport { pick } from '../util/misc/pick';\nimport { toFixed } from '../util/misc/toFixed';\nimport { classRegistry } from '../ClassRegistry';\nimport type {\n PatternRepeat,\n PatternOptions,\n SerializedPatternOptions,\n} from './types';\nimport { log } from '../util/internals/console';\n\n/**\n * @see {@link http://fabricjs.com/patterns demo}\n * @see {@link http://fabricjs.com/dynamic-patterns demo}\n */\nexport class Pattern {\n static type = 'Pattern';\n\n /**\n * Legacy identifier of the class. Prefer using this.constructor.type 'Pattern'\n * or utils like isPattern, or instance of to indentify a pattern in your code.\n * Will be removed in future versiones\n * @TODO add sustainable warning message\n * @type string\n * @deprecated\n */\n get type() {\n return 'pattern';\n }\n\n set type(value) {\n log('warn', 'Setting type has no effect', value);\n }\n\n /**\n * @type PatternRepeat\n * @defaults\n */\n repeat: PatternRepeat = 'repeat';\n\n /**\n * Pattern horizontal offset from object's left/top corner\n * @type Number\n * @default\n */\n offsetX = 0;\n\n /**\n * Pattern vertical offset from object's left/top corner\n * @type Number\n * @default\n */\n offsetY = 0;\n\n /**\n * @type TCrossOrigin\n * @default\n */\n crossOrigin: TCrossOrigin = '';\n\n /**\n * transform matrix to change the pattern, imported from svgs.\n * @todo verify if using the identity matrix as default makes the rest of the code more easy\n * @type Array\n * @default\n */\n declare patternTransform?: TMat2D;\n\n /**\n * The actual pixel source of the pattern\n */\n declare source: CanvasImageSource;\n\n /**\n * If true, this object will not be exported during the serialization of a canvas\n * @type boolean\n */\n declare excludeFromExport?: boolean;\n\n /**\n * ID used for SVG export functionalities\n * @type number\n */\n declare readonly id: number;\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n * @param {option.source} [source] the pattern source, eventually empty or a drawable\n */\n constructor(options: PatternOptions) {\n this.id = uid();\n Object.assign(this, options);\n }\n\n /**\n * @returns true if {@link source} is an element\n */\n isImageSource(): this is { source: HTMLImageElement } {\n return (\n !!this.source && typeof (this.source as HTMLImageElement).src === 'string'\n );\n }\n\n /**\n * @returns true if {@link source} is a element\n */\n isCanvasSource(): this is { source: HTMLCanvasElement } {\n return !!this.source && !!(this.source as HTMLCanvasElement).toDataURL;\n }\n\n sourceToString(): string {\n return this.isImageSource()\n ? this.source.src\n : this.isCanvasSource()\n ? this.source.toDataURL()\n : '';\n }\n\n /**\n * Returns an instance of CanvasPattern\n * @param {CanvasRenderingContext2D} ctx Context to create pattern\n * @return {CanvasPattern}\n */\n toLive(ctx: CanvasRenderingContext2D): CanvasPattern | null {\n if (\n // if the image failed to load, return, and allow rest to continue loading\n !this.source ||\n // if an image\n (this.isImageSource() &&\n (!this.source.complete ||\n this.source.naturalWidth === 0 ||\n this.source.naturalHeight === 0))\n ) {\n return null;\n }\n\n return ctx.createPattern(this.source, this.repeat)!;\n }\n\n /**\n * Returns object representation of a pattern\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {object} Object representation of a pattern instance\n */\n toObject(propertiesToInclude: string[] = []): Record {\n const { repeat, crossOrigin } = this;\n return {\n ...pick(this, propertiesToInclude as (keyof this)[]),\n type: 'pattern',\n source: this.sourceToString(),\n repeat,\n crossOrigin,\n offsetX: toFixed(this.offsetX, config.NUM_FRACTION_DIGITS),\n offsetY: toFixed(this.offsetY, config.NUM_FRACTION_DIGITS),\n patternTransform: this.patternTransform\n ? [...this.patternTransform]\n : null,\n };\n }\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of a pattern\n */\n toSVG({ width, height }: TSize): string {\n const { source: patternSource, repeat, id } = this,\n patternOffsetX = ifNaN(this.offsetX / width, 0),\n patternOffsetY = ifNaN(this.offsetY / height, 0),\n patternWidth =\n repeat === 'repeat-y' || repeat === 'no-repeat'\n ? 1 + Math.abs(patternOffsetX || 0)\n : ifNaN(\n ((patternSource as HTMLImageElement).width as number) / width,\n 0,\n ),\n patternHeight =\n repeat === 'repeat-x' || repeat === 'no-repeat'\n ? 1 + Math.abs(patternOffsetY || 0)\n : ifNaN(\n ((patternSource as HTMLImageElement).height as number) / height,\n 0,\n );\n\n return [\n ``,\n ``,\n ``,\n '',\n ].join('\\n');\n }\n /* _TO_SVG_END_ */\n\n static async fromObject(\n {\n type,\n source,\n patternTransform,\n ...otherOptions\n }: SerializedPatternOptions,\n options?: Abortable,\n ): Promise {\n const img = await loadImage(source, {\n ...options,\n crossOrigin: otherOptions.crossOrigin,\n });\n return new this({\n ...otherOptions,\n patternTransform:\n patternTransform && (patternTransform.slice(0) as TMat2D),\n source: img,\n });\n }\n}\n\nclassRegistry.setClass(Pattern);\n// kept for compatibility reason\nclassRegistry.setClass(Pattern, 'pattern');\n","import { Color } from '../color/Color';\nimport type { Point } from '../Point';\nimport type { Shadow } from '../Shadow';\nimport type { Canvas } from '../canvas/Canvas';\nimport type { TBrushEventData } from './typedefs';\n\n/**\n * @see {@link http://fabricjs.com/freedrawing|Freedrawing demo}\n */\nexport abstract class BaseBrush {\n /**\n * Color of a brush\n * @type String\n * @default\n */\n color = 'rgb(0, 0, 0)';\n\n /**\n * Width of a brush, has to be a Number, no string literals\n * @type Number\n * @default\n */\n width = 1;\n\n /**\n * Shadow object representing shadow of this shape.\n * Backwards incompatibility note: This property replaces \"shadowColor\" (String), \"shadowOffsetX\" (Number),\n * \"shadowOffsetY\" (Number) and \"shadowBlur\" (Number) since v1.2.12\n * @type Shadow\n * @default\n */\n shadow: Shadow | null = null;\n\n /**\n * Line endings style of a brush (one of \"butt\", \"round\", \"square\")\n * @type String\n * @default\n */\n strokeLineCap: CanvasLineCap = 'round';\n\n /**\n * Corner style of a brush (one of \"bevel\", \"round\", \"miter\")\n * @type String\n * @default\n */\n strokeLineJoin: CanvasLineJoin = 'round';\n\n /**\n * Maximum miter length (used for strokeLineJoin = \"miter\") of a brush's\n * @type Number\n * @default\n */\n strokeMiterLimit = 10;\n\n /**\n * Stroke Dash Array.\n * @type Array\n * @default\n */\n strokeDashArray: number[] | null = null;\n\n /**\n * When `true`, the free drawing is limited to the whiteboard size. Default to false.\n * @type Boolean\n * @default false\n */\n\n limitedToCanvasSize = false;\n\n /**\n * @todo add type\n */\n declare canvas: Canvas;\n\n constructor(canvas: Canvas) {\n this.canvas = canvas;\n }\n\n abstract _render(): void;\n abstract onMouseDown(pointer: Point, ev: TBrushEventData): void;\n abstract onMouseMove(pointer: Point, ev: TBrushEventData): void;\n /**\n * @returns true if brush should continue blocking interaction\n */\n abstract onMouseUp(ev: TBrushEventData): boolean | void;\n\n /**\n * Sets brush styles\n * @private\n * @param {CanvasRenderingContext2D} ctx\n */\n _setBrushStyles(ctx: CanvasRenderingContext2D) {\n ctx.strokeStyle = this.color;\n ctx.lineWidth = this.width;\n ctx.lineCap = this.strokeLineCap;\n ctx.miterLimit = this.strokeMiterLimit;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.setLineDash(this.strokeDashArray || []);\n }\n\n /**\n * Sets the transformation on given context\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @private\n */\n protected _saveAndTransform(ctx: CanvasRenderingContext2D) {\n const v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n }\n\n protected needsFullRender() {\n const color = new Color(this.color);\n return color.getAlpha() < 1 || !!this.shadow;\n }\n\n /**\n * Sets brush shadow styles\n * @private\n */\n protected _setShadow() {\n if (!this.shadow || !this.canvas) {\n return;\n }\n\n const canvas = this.canvas,\n shadow = this.shadow,\n ctx = canvas.contextTop,\n zoom = canvas.getZoom() * canvas.getRetinaScaling();\n\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur = shadow.blur * zoom;\n ctx.shadowOffsetX = shadow.offsetX * zoom;\n ctx.shadowOffsetY = shadow.offsetY * zoom;\n }\n\n /**\n * Removes brush shadow styles\n * @private\n */\n protected _resetShadow() {\n const ctx = this.canvas.contextTop;\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n }\n\n /**\n * Check is pointer is outside canvas boundaries\n * @param {Object} pointer\n * @private\n */\n protected _isOutSideCanvas(pointer: Point) {\n return (\n pointer.x < 0 ||\n pointer.x > this.canvas.getWidth() ||\n pointer.y < 0 ||\n pointer.y > this.canvas.getHeight()\n );\n }\n}\n","import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { toFixed } from '../util/misc/toFixed';\nimport {\n getBoundsOfCurve,\n joinPath,\n makePathSimpler,\n parsePath,\n} from '../util/path';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type {\n TComplexPathData,\n TPathSegmentInfo,\n TSimplePathData,\n} from '../util/path/typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type {\n TBBox,\n TClassProperties,\n TSVGReviver,\n TOptions,\n} from '../typedefs';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\ninterface UniquePathProps {\n sourcePath?: string;\n path?: TSimplePathData;\n}\n\nexport interface SerializedPathProps\n extends SerializedObjectProps,\n UniquePathProps {}\n\nexport interface PathProps extends FabricObjectProps, UniquePathProps {}\n\nexport interface IPathBBox extends TBBox {\n left: number;\n top: number;\n pathOffset: Point;\n}\n\nexport class Path<\n Props extends TOptions = Partial,\n SProps extends SerializedPathProps = SerializedPathProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject {\n /**\n * Array of path points\n * @type Array\n * @default\n */\n declare path: TSimplePathData;\n\n declare pathOffset: Point;\n\n declare sourcePath?: string;\n\n declare segmentsInfo?: TPathSegmentInfo[];\n\n static type = 'Path';\n\n static cacheProperties = [...cacheProperties, 'path', 'fillRule'];\n\n /**\n * Constructor\n * @param {TComplexPathData} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {Partial} [options] Options object\n * @return {Path} thisArg\n */\n constructor(\n path: TComplexPathData | string,\n // todo: evaluate this spread here\n { path: _, left, top, ...options }: Partial = {},\n ) {\n super();\n Object.assign(this, Path.ownDefaults);\n this.setOptions(options);\n this._setPath(path || [], true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n /**\n * @private\n * @param {TComplexPathData | string} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {boolean} [adjustPosition] pass true to reposition the object according to the bounding box\n * @returns {Point} top left position of the bounding box, useful for complementary positioning\n */\n _setPath(path: TComplexPathData | string, adjustPosition?: boolean) {\n this.path = makePathSimpler(Array.isArray(path) ? path : parsePath(path));\n this.setBoundingBox(adjustPosition);\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = this._calcBoundsFromPath();\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _renderPathCommands(ctx: CanvasRenderingContext2D) {\n const l = -this.pathOffset.x,\n t = -this.pathOffset.y;\n\n ctx.beginPath();\n\n for (const command of this.path) {\n switch (\n command[0] // first letter\n ) {\n case 'L': // lineto, absolute\n ctx.lineTo(command[1] + l, command[2] + t);\n break;\n\n case 'M': // moveTo, absolute\n ctx.moveTo(command[1] + l, command[2] + t);\n break;\n\n case 'C': // bezierCurveTo, absolute\n ctx.bezierCurveTo(\n command[1] + l,\n command[2] + t,\n command[3] + l,\n command[4] + t,\n command[5] + l,\n command[6] + t,\n );\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n ctx.quadraticCurveTo(\n command[1] + l,\n command[2] + t,\n command[3] + l,\n command[4] + t,\n );\n break;\n\n case 'Z':\n ctx.closePath();\n break;\n }\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _render(ctx: CanvasRenderingContext2D) {\n this._renderPathCommands(ctx);\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns string representation of an instance\n * @return {string} string representation of an instance\n */\n toString() {\n return `#`;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n path: this.path.map((pathCmd) => pathCmd.slice()),\n };\n }\n\n /**\n * Returns dataless object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n const o = this.toObject(propertiesToInclude);\n if (this.sourcePath) {\n delete o.path;\n o.sourcePath = this.sourcePath;\n }\n return o;\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const path = joinPath(this.path, config.NUM_FRACTION_DIGITS);\n return [\n '\\n`,\n ];\n }\n\n /**\n * @private\n * @return the path command's translate transform attribute\n */\n _getOffsetTransform() {\n const digits = config.NUM_FRACTION_DIGITS;\n return ` translate(${toFixed(-this.pathOffset.x, digits)}, ${toFixed(\n -this.pathOffset.y,\n digits,\n )})`;\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {string} svg representation of an instance\n */\n toClipPathSVG(reviver?: TSVGReviver): string {\n const additionalTransform = this._getOffsetTransform();\n return (\n '\\t' +\n this._createBaseClipPathSVGMarkup(this._toSVG(), {\n reviver,\n additionalTransform: additionalTransform,\n })\n );\n }\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {string} svg representation of an instance\n */\n toSVG(reviver?: TSVGReviver): string {\n const additionalTransform = this._getOffsetTransform();\n return this._createBaseSVGMarkup(this._toSVG(), {\n reviver,\n additionalTransform: additionalTransform,\n });\n }\n\n /**\n * Returns number representation of an instance complexity\n * @return {number} complexity of this instance\n */\n complexity() {\n return this.path.length;\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { width, height, pathOffset } = this._calcDimensions();\n this.set({ width, height, pathOffset });\n // using pathOffset because it match the use case.\n // if pathOffset change here we need to use left + width/2 , top + height/2\n adjustPosition && this.setPositionByOrigin(pathOffset, CENTER, CENTER);\n }\n\n _calcBoundsFromPath(): TBBox {\n const bounds: XY[] = [];\n let subpathStartX = 0,\n subpathStartY = 0,\n x = 0, // current x\n y = 0; // current y\n\n for (const command of this.path) {\n // current instruction\n switch (\n command[0] // first letter\n ) {\n case 'L': // lineto, absolute\n x = command[1];\n y = command[2];\n bounds.push({ x: subpathStartX, y: subpathStartY }, { x, y });\n break;\n\n case 'M': // moveTo, absolute\n x = command[1];\n y = command[2];\n subpathStartX = x;\n subpathStartY = y;\n break;\n\n case 'C': // bezierCurveTo, absolute\n bounds.push(\n ...getBoundsOfCurve(\n x,\n y,\n command[1],\n command[2],\n command[3],\n command[4],\n command[5],\n command[6],\n ),\n );\n x = command[5];\n y = command[6];\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n bounds.push(\n ...getBoundsOfCurve(\n x,\n y,\n command[1],\n command[2],\n command[1],\n command[2],\n command[3],\n command[4],\n ),\n );\n x = command[3];\n y = command[4];\n break;\n\n case 'Z':\n x = subpathStartX;\n y = subpathStartY;\n break;\n }\n }\n return makeBoundingBoxFromPoints(bounds);\n }\n\n /**\n * @private\n */\n _calcDimensions(): IPathBBox {\n const bbox = this._calcBoundsFromPath();\n\n return {\n ...bbox,\n pathOffset: new Point(\n bbox.left + bbox.width / 2,\n bbox.top + bbox.height / 2,\n ),\n };\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `Path.fromElement`)\n * @static\n * @memberOf Path\n * @see http://www.w3.org/TR/SVG/paths.html#PathElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'd'];\n\n /**\n * Creates an instance of Path from an object\n * @static\n * @memberOf Path\n * @param {Object} object\n * @returns {Promise}\n */\n static fromObject>(object: T) {\n return this._fromObject(object, {\n extraParam: 'path',\n });\n }\n\n /**\n * Creates an instance of Path from an SVG element\n * @static\n * @memberOf Path\n * @param {HTMLElement} element to parse\n * @param {Partial} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Partial,\n cssRules?: CSSRules,\n ) {\n const { d, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(d, {\n ...parsedAttributes,\n ...options,\n // we pass undefined to instruct the constructor to position the object using the bbox\n left: undefined,\n top: undefined,\n });\n }\n}\n\nclassRegistry.setClass(Path);\nclassRegistry.setSVGClass(Path);\n\n/* _FROM_SVG_START_ */\n","import type { ModifierKey, TEvent } from '../EventTypeDefs';\nimport type { Point } from '../Point';\nimport { Shadow } from '../Shadow';\nimport { Path } from '../shapes/Path';\nimport { getSmoothPathFromPoints, joinPath } from '../util/path';\nimport type { Canvas } from '../canvas/Canvas';\nimport { BaseBrush } from './BaseBrush';\nimport type { TSimplePathData } from '../util/path/typedefs';\n\n/**\n * @private\n * @param {TSimplePathData} pathData SVG path commands\n * @returns {boolean}\n */\nfunction isEmptySVGPath(pathData: TSimplePathData): boolean {\n return joinPath(pathData) === 'M 0 0 Q 0 0 0 0 L 0 0';\n}\n\nexport class PencilBrush extends BaseBrush {\n /**\n * Discard points that are less than `decimate` pixel distant from each other\n * @type Number\n * @default 0.4\n */\n decimate = 0.4;\n\n /**\n * Draws a straight line between last recorded point to current pointer\n * Used for `shift` functionality\n *\n * @type boolean\n * @default false\n */\n drawStraightLine = false;\n\n /**\n * The event modifier key that makes the brush draw a straight line.\n * If `null` or 'none' or any other string that is not a modifier key the feature is disabled.\n * @type {ModifierKey | undefined | null}\n */\n straightLineKey: ModifierKey | undefined | null = 'shiftKey';\n\n private declare _points: Point[];\n private declare _hasStraightLine: boolean;\n private declare oldEnd?: Point;\n\n constructor(canvas: Canvas) {\n super(canvas);\n this._points = [];\n this._hasStraightLine = false;\n }\n\n needsFullRender() {\n return super.needsFullRender() || this._hasStraightLine;\n }\n\n static drawSegment(ctx: CanvasRenderingContext2D, p1: Point, p2: Point) {\n const midPoint = p1.midPointFrom(p2);\n ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n return midPoint;\n }\n\n /**\n * Invoked on mouse down\n * @param {Point} pointer\n */\n onMouseDown(pointer: Point, { e }: TEvent) {\n if (!this.canvas._isMainEvent(e)) {\n return;\n }\n this.drawStraightLine = !!this.straightLineKey && e[this.straightLineKey];\n this._prepareForDrawing(pointer);\n // capture coordinates immediately\n // this allows to draw dots (when movement never occurs)\n this._addPoint(pointer);\n this._render();\n }\n\n /**\n * Invoked on mouse move\n * @param {Point} pointer\n */\n onMouseMove(pointer: Point, { e }: TEvent) {\n if (!this.canvas._isMainEvent(e)) {\n return;\n }\n this.drawStraightLine = !!this.straightLineKey && e[this.straightLineKey];\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n if (this._addPoint(pointer) && this._points.length > 1) {\n if (this.needsFullRender()) {\n // redraw curve\n // clear top canvas\n this.canvas.clearContext(this.canvas.contextTop);\n this._render();\n } else {\n const points = this._points,\n length = points.length,\n ctx = this.canvas.contextTop;\n // draw the curve update\n this._saveAndTransform(ctx);\n if (this.oldEnd) {\n ctx.beginPath();\n ctx.moveTo(this.oldEnd.x, this.oldEnd.y);\n }\n this.oldEnd = PencilBrush.drawSegment(\n ctx,\n points[length - 2],\n points[length - 1],\n );\n ctx.stroke();\n ctx.restore();\n }\n }\n }\n\n /**\n * Invoked on mouse up\n */\n onMouseUp({ e }: TEvent) {\n if (!this.canvas._isMainEvent(e)) {\n return true;\n }\n this.drawStraightLine = false;\n this.oldEnd = undefined;\n this._finalizeAndAddPath();\n return false;\n }\n\n /**\n * @private\n * @param {Point} pointer Actual mouse position related to the canvas.\n */\n _prepareForDrawing(pointer: Point) {\n this._reset();\n this._addPoint(pointer);\n this.canvas.contextTop.moveTo(pointer.x, pointer.y);\n }\n\n /**\n * @private\n * @param {Point} point Point to be added to points array\n */\n _addPoint(point: Point) {\n if (\n this._points.length > 1 &&\n point.eq(this._points[this._points.length - 1])\n ) {\n return false;\n }\n if (this.drawStraightLine && this._points.length > 1) {\n this._hasStraightLine = true;\n this._points.pop();\n }\n this._points.push(point);\n return true;\n }\n\n /**\n * Clear points array and set contextTop canvas style.\n * @private\n */\n _reset() {\n this._points = [];\n this._setBrushStyles(this.canvas.contextTop);\n this._setShadow();\n this._hasStraightLine = false;\n }\n\n /**\n * Draw a smooth path on the topCanvas using quadraticCurveTo\n * @private\n * @param {CanvasRenderingContext2D} [ctx]\n */\n _render(ctx: CanvasRenderingContext2D = this.canvas.contextTop) {\n let p1 = this._points[0],\n p2 = this._points[1];\n this._saveAndTransform(ctx);\n ctx.beginPath();\n //if we only have 2 points in the path and they are the same\n //it means that the user only clicked the canvas without moving the mouse\n //then we should be drawing a dot. A path isn't drawn between two identical dots\n //that's why we set them apart a bit\n if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) {\n const width = this.width / 1000;\n p1.x -= width;\n p2.x += width;\n }\n ctx.moveTo(p1.x, p1.y);\n\n for (let i = 1; i < this._points.length; i++) {\n // we pick the point between pi + 1 & pi + 2 as the\n // end point and p1 as our control point.\n PencilBrush.drawSegment(ctx, p1, p2);\n p1 = this._points[i];\n p2 = this._points[i + 1];\n }\n // Draw last line as a straight line while\n // we wait for the next point to be able to calculate\n // the bezier control point\n ctx.lineTo(p1.x, p1.y);\n ctx.stroke();\n ctx.restore();\n }\n\n /**\n * Converts points to SVG path\n * @param {Point[]} points Array of points\n * @return {TSimplePathData} SVG path commands\n */\n convertPointsToSVGPath(points: Point[]): TSimplePathData {\n const correction = this.width / 1000;\n return getSmoothPathFromPoints(points, correction);\n }\n\n /**\n * Creates a Path object to add on canvas\n * @param {TSimplePathData} pathData Path data\n * @return {Path} Path to add on canvas\n */\n createPath(pathData: TSimplePathData): Path {\n const path = new Path(pathData, {\n fill: null,\n stroke: this.color,\n strokeWidth: this.width,\n strokeLineCap: this.strokeLineCap,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeLineJoin: this.strokeLineJoin,\n strokeDashArray: this.strokeDashArray,\n });\n if (this.shadow) {\n this.shadow.affectStroke = true;\n path.shadow = new Shadow(this.shadow);\n }\n\n return path;\n }\n\n /**\n * Decimate points array with the decimate value\n */\n decimatePoints(points: Point[], distance: number) {\n if (points.length <= 2) {\n return points;\n }\n let lastPoint = points[0],\n cDistance;\n const zoom = this.canvas.getZoom(),\n adjustedDistance = Math.pow(distance / zoom, 2),\n l = points.length - 1,\n newPoints = [lastPoint];\n for (let i = 1; i < l - 1; i++) {\n cDistance =\n Math.pow(lastPoint.x - points[i].x, 2) +\n Math.pow(lastPoint.y - points[i].y, 2);\n if (cDistance >= adjustedDistance) {\n lastPoint = points[i];\n newPoints.push(lastPoint);\n }\n }\n // Add the last point from the original line to the end of the array.\n // This ensures decimate doesn't delete the last point on the line, and ensures the line is > 1 point.\n newPoints.push(points[l]);\n return newPoints;\n }\n\n /**\n * On mouseup after drawing the path on contextTop canvas\n * we use the points captured to create an new Path object\n * and add it to the canvas.\n */\n _finalizeAndAddPath() {\n const ctx = this.canvas.contextTop;\n ctx.closePath();\n if (this.decimate) {\n this._points = this.decimatePoints(this._points, this.decimate);\n }\n const pathData = this.convertPointsToSVGPath(this._points);\n if (isEmptySVGPath(pathData)) {\n // do not create 0 width/height paths, as they are\n // rendered inconsistently across browsers\n // Firefox 4, for example, renders a dot,\n // whereas Chrome 10 renders nothing\n this.canvas.requestRenderAll();\n return;\n }\n\n const path = this.createPath(pathData);\n this.canvas.clearContext(this.canvas.contextTop);\n this.canvas.fire('before:path:created', { path: path });\n this.canvas.add(path);\n this.canvas.requestRenderAll();\n path.setCoords();\n this._resetShadow();\n\n // fire event 'path' created\n this.canvas.fire('path:created', { path: path });\n }\n}\n","import type { ObjectEvents } from '../EventTypeDefs';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { cos } from '../util/misc/cos';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { sin } from '../util/misc/sin';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { CSSRules } from '../parser/typedefs';\nimport { SCALE_X, SCALE_Y } from '../constants';\n\ninterface UniqueCircleProps {\n /**\n * Radius of this circle\n * @type Number\n * @default 0\n */\n radius: number;\n\n /**\n * Angle for the start of the circle, in degrees.\n * @type TDegree 0 - 359\n * @default 0\n */\n startAngle: number;\n\n /**\n * Angle for the end of the circle, in degrees\n * @type TDegree 1 - 360\n * @default 360\n */\n endAngle: number;\n\n /**\n * Orientation for the direction of the circle.\n * Setting to true will switch the arc of the circle to traverse from startAngle to endAngle in a counter-clockwise direction.\n * Note: this will only change how the circle is drawn, and does not affect rotational transformation.\n * @default false\n */\n counterClockwise: boolean;\n}\n\nexport interface SerializedCircleProps\n extends SerializedObjectProps,\n UniqueCircleProps {}\n\nexport interface CircleProps extends FabricObjectProps, UniqueCircleProps {}\n\nconst CIRCLE_PROPS = [\n 'radius',\n 'startAngle',\n 'endAngle',\n 'counterClockwise',\n] as const;\n\nexport const circleDefaultValues: Partial> = {\n radius: 0,\n startAngle: 0,\n endAngle: 360,\n counterClockwise: false,\n};\n\nexport class Circle<\n Props extends TOptions = Partial,\n SProps extends SerializedCircleProps = SerializedCircleProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements UniqueCircleProps\n{\n declare radius: number;\n declare startAngle: number;\n declare endAngle: number;\n declare counterClockwise: boolean;\n\n static type = 'Circle';\n\n static cacheProperties = [...cacheProperties, ...CIRCLE_PROPS];\n\n static ownDefaults = circleDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Circle.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Circle.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n super._set(key, value);\n\n if (key === 'radius') {\n this.setRadius(value);\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n ctx.arc(\n 0,\n 0,\n this.radius,\n degreesToRadians(this.startAngle),\n degreesToRadians(this.endAngle),\n this.counterClockwise,\n );\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusX(): number {\n return this.get('radius') * this.get(SCALE_X);\n }\n\n /**\n * Returns vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusY(): number {\n return this.get('radius') * this.get(SCALE_Y);\n }\n\n /**\n * Sets radius of an object (and updates width accordingly)\n */\n setRadius(value: number) {\n this.radius = value;\n this.set({ width: value * 2, height: value * 2 });\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([...CIRCLE_PROPS, ...propertiesToInclude]);\n }\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG(): string[] {\n const angle = (this.endAngle - this.startAngle) % 360;\n\n if (angle === 0) {\n return [\n '\\n',\n ];\n } else {\n const { radius } = this;\n const start = degreesToRadians(this.startAngle),\n end = degreesToRadians(this.endAngle),\n startX = cos(start) * radius,\n startY = sin(start) * radius,\n endX = cos(end) * radius,\n endY = sin(end) * radius,\n largeFlag = angle > 180 ? 1 : 0,\n sweepFlag = this.counterClockwise ? 0 : 1;\n return [\n `\\n',\n ];\n }\n }\n /* _TO_SVG_END_ */\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Circle.fromElement})\n * @static\n * @memberOf Circle\n * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement\n */\n static ATTRIBUTE_NAMES = ['cx', 'cy', 'r', ...SHARED_ATTRIBUTES];\n\n /**\n * Returns {@link Circle} instance from an SVG element\n * @static\n * @memberOf Circle\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Partial Circle object to default missing properties on the element.\n * @throws {Error} If value of `r` attribute is missing or invalid\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ): Promise {\n const {\n left = 0,\n top = 0,\n radius = 0,\n ...otherParsedAttributes\n } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n ) as Partial;\n\n // this probably requires to be fixed for default origins not being top/left.\n\n return new this({\n ...otherParsedAttributes,\n radius,\n left: left - radius,\n top: top - radius,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * @todo how do we declare this??\n */\n static fromObject>(object: T) {\n return super._fromObject(object);\n }\n}\n\nclassRegistry.setClass(Circle);\nclassRegistry.setSVGClass(Circle);\n","import { Color } from '../color/Color';\nimport type { Point } from '../Point';\nimport { Shadow } from '../Shadow';\nimport { Circle } from '../shapes/Circle';\nimport { Group } from '../shapes/Group';\nimport { getRandomInt } from '../util/internals/getRandomInt';\nimport type { Canvas } from '../canvas/Canvas';\nimport { BaseBrush } from './BaseBrush';\nimport type { CircleBrushPoint } from './typedefs';\nimport { CENTER } from '../constants';\n\nexport class CircleBrush extends BaseBrush {\n /**\n * Width of a brush\n * @type Number\n * @default\n */\n width = 10;\n\n declare points: CircleBrushPoint[];\n\n constructor(canvas: Canvas) {\n super(canvas);\n this.points = [];\n }\n\n /**\n * Invoked inside on mouse down and mouse move\n * @param {Point} pointer\n */\n drawDot(pointer: Point) {\n const point = this.addPoint(pointer),\n ctx = this.canvas.contextTop;\n this._saveAndTransform(ctx);\n this.dot(ctx, point);\n ctx.restore();\n }\n\n dot(ctx: CanvasRenderingContext2D, point: CircleBrushPoint) {\n ctx.fillStyle = point.fill;\n ctx.beginPath();\n ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n }\n\n /**\n * Invoked on mouse down\n */\n onMouseDown(pointer: Point) {\n this.points = [];\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n this.drawDot(pointer);\n }\n\n /**\n * Render the full state of the brush\n * @private\n */\n _render() {\n const ctx = this.canvas.contextTop,\n points = this.points;\n this._saveAndTransform(ctx);\n for (let i = 0; i < points.length; i++) {\n this.dot(ctx, points[i]);\n }\n ctx.restore();\n }\n\n /**\n * Invoked on mouse move\n * @param {Point} pointer\n */\n onMouseMove(pointer: Point) {\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n if (this.needsFullRender()) {\n this.canvas.clearContext(this.canvas.contextTop);\n this.addPoint(pointer);\n this._render();\n } else {\n this.drawDot(pointer);\n }\n }\n\n /**\n * Invoked on mouse up\n */\n onMouseUp() {\n const originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\n this.canvas.renderOnAddRemove = false;\n\n const circles: Circle[] = [];\n\n for (let i = 0; i < this.points.length; i++) {\n const point = this.points[i],\n circle = new Circle({\n radius: point.radius,\n left: point.x,\n top: point.y,\n originX: CENTER,\n originY: CENTER,\n fill: point.fill,\n });\n\n this.shadow && (circle.shadow = new Shadow(this.shadow));\n\n circles.push(circle);\n }\n const group = new Group(circles, { canvas: this.canvas });\n\n this.canvas.fire('before:path:created', { path: group });\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n }\n\n /**\n * @param {Object} pointer\n * @return {Point} Just added pointer point\n */\n addPoint({ x, y }: Point) {\n const pointerPoint: CircleBrushPoint = {\n x,\n y,\n radius: getRandomInt(Math.max(0, this.width - 20), this.width + 20) / 2,\n fill: new Color(this.color).setAlpha(getRandomInt(0, 100) / 100).toRgba(),\n };\n\n this.points.push(pointerPoint);\n\n return pointerPoint;\n }\n}\n","import type { Point } from '../Point';\nimport { Group } from '../shapes/Group';\nimport { Shadow } from '../Shadow';\nimport { Rect } from '../shapes/Rect';\nimport { getRandomInt } from '../util/internals/getRandomInt';\nimport type { Canvas } from '../canvas/Canvas';\nimport { BaseBrush } from './BaseBrush';\nimport type { SprayBrushPoint } from './typedefs';\nimport { CENTER } from '../constants';\n\n/**\n *\n * @param rects\n * @returns\n */\nfunction getUniqueRects(rects: Rect[]) {\n const uniqueRects: Record = {};\n const uniqueRectsArray: Rect[] = [];\n\n for (let i = 0, key: string; i < rects.length; i++) {\n key = `${rects[i].left}${rects[i].top}`;\n if (!uniqueRects[key]) {\n uniqueRects[key] = true;\n uniqueRectsArray.push(rects[i]);\n }\n }\n\n return uniqueRectsArray;\n}\n\nexport class SprayBrush extends BaseBrush {\n /**\n * Width of a spray\n * @type Number\n * @default\n */\n width = 10;\n\n /**\n * Density of a spray (number of dots per chunk)\n * @type Number\n * @default\n */\n density = 20;\n\n /**\n * Width of spray dots\n * @type Number\n * @default\n */\n dotWidth = 1;\n\n /**\n * Width variance of spray dots\n * @type Number\n * @default\n */\n dotWidthVariance = 1;\n\n /**\n * Whether opacity of a dot should be random\n * @type Boolean\n * @default\n */\n randomOpacity = false;\n\n /**\n * Whether overlapping dots (rectangles) should be removed (for performance reasons)\n * @type Boolean\n * @default\n */\n optimizeOverlapping = true;\n\n private declare sprayChunks: SprayBrushPoint[][];\n\n private declare sprayChunk: SprayBrushPoint[];\n\n /**\n * Constructor\n * @param {Canvas} canvas\n * @return {SprayBrush} Instance of a spray brush\n */\n constructor(canvas: Canvas) {\n super(canvas);\n this.sprayChunks = [];\n this.sprayChunk = [];\n }\n\n /**\n * Invoked on mouse down\n * @param {Point} pointer\n */\n onMouseDown(pointer: Point) {\n this.sprayChunks = [];\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n\n this.addSprayChunk(pointer);\n this.renderChunck(this.sprayChunk);\n }\n\n /**\n * Invoked on mouse move\n * @param {Point} pointer\n */\n onMouseMove(pointer: Point) {\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n this.addSprayChunk(pointer);\n this.renderChunck(this.sprayChunk);\n }\n\n /**\n * Invoked on mouse up\n */\n onMouseUp() {\n const originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\n this.canvas.renderOnAddRemove = false;\n\n const rects: Rect[] = [];\n\n for (let i = 0; i < this.sprayChunks.length; i++) {\n const sprayChunk = this.sprayChunks[i];\n for (let j = 0; j < sprayChunk.length; j++) {\n const chunck = sprayChunk[j];\n const rect = new Rect({\n width: chunck.width,\n height: chunck.width,\n left: chunck.x + 1,\n top: chunck.y + 1,\n originX: CENTER,\n originY: CENTER,\n fill: this.color,\n });\n rects.push(rect);\n }\n }\n\n const group = new Group(\n this.optimizeOverlapping ? getUniqueRects(rects) : rects,\n {\n objectCaching: true,\n subTargetCheck: false,\n interactive: false,\n },\n );\n this.shadow && group.set('shadow', new Shadow(this.shadow));\n this.canvas.fire('before:path:created', { path: group });\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n }\n\n renderChunck(sprayChunck: SprayBrushPoint[]) {\n const ctx = this.canvas.contextTop;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (let i = 0; i < sprayChunck.length; i++) {\n const point = sprayChunck[i];\n ctx.globalAlpha = point.opacity;\n ctx.fillRect(point.x, point.y, point.width, point.width);\n }\n\n ctx.restore();\n }\n\n /**\n * Render all spray chunks\n */\n _render() {\n const ctx = this.canvas.contextTop;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (let i = 0; i < this.sprayChunks.length; i++) {\n this.renderChunck(this.sprayChunks[i]);\n }\n ctx.restore();\n }\n\n /**\n * @param {Point} pointer\n */\n addSprayChunk(pointer: Point) {\n this.sprayChunk = [];\n const radius = this.width / 2;\n\n for (let i = 0; i < this.density; i++) {\n this.sprayChunk.push({\n x: getRandomInt(pointer.x - radius, pointer.x + radius),\n y: getRandomInt(pointer.y - radius, pointer.y + radius),\n width: this.dotWidthVariance\n ? getRandomInt(\n // bottom clamp width to 1\n Math.max(1, this.dotWidth - this.dotWidthVariance),\n this.dotWidth + this.dotWidthVariance,\n )\n : this.dotWidth,\n opacity: this.randomOpacity ? getRandomInt(0, 100) / 100 : 1,\n });\n }\n\n this.sprayChunks.push(this.sprayChunk);\n }\n}\n","import { Pattern } from '../Pattern';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type { Canvas } from '../canvas/Canvas';\nimport { PencilBrush } from './PencilBrush';\nimport type { TSimplePathData } from '../util/path/typedefs';\n\nexport class PatternBrush extends PencilBrush {\n declare source?: CanvasImageSource;\n\n constructor(canvas: Canvas) {\n super(canvas);\n }\n\n getPatternSrc() {\n const dotWidth = 20,\n dotDistance = 5,\n patternCanvas = createCanvasElement(),\n patternCtx = patternCanvas.getContext('2d');\n\n patternCanvas.width = patternCanvas.height = dotWidth + dotDistance;\n if (patternCtx) {\n patternCtx.fillStyle = this.color;\n patternCtx.beginPath();\n patternCtx.arc(\n dotWidth / 2,\n dotWidth / 2,\n dotWidth / 2,\n 0,\n Math.PI * 2,\n false,\n );\n patternCtx.closePath();\n patternCtx.fill();\n }\n return patternCanvas;\n }\n\n /**\n * Creates \"pattern\" instance property\n * @param {CanvasRenderingContext2D} ctx\n */\n getPattern(ctx: CanvasRenderingContext2D) {\n return ctx.createPattern(this.source || this.getPatternSrc(), 'repeat');\n }\n\n /**\n * Sets brush styles\n * @param {CanvasRenderingContext2D} ctx\n */\n _setBrushStyles(ctx: CanvasRenderingContext2D) {\n super._setBrushStyles(ctx);\n const pattern = this.getPattern(ctx);\n pattern && (ctx.strokeStyle = pattern);\n }\n\n /**\n * Creates path\n */\n createPath(pathData: TSimplePathData) {\n const path = super.createPath(pathData),\n topLeft = path._getLeftTopCoords().scalarAdd(path.strokeWidth / 2);\n\n path.stroke = new Pattern({\n source: this.source || this.getPatternSrc(),\n offsetX: -topLeft.x,\n offsetY: -topLeft.y,\n });\n return path;\n }\n}\n","import { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport { Point } from '../Point';\nimport { isFiller } from '../util/typeAssertions';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { makeBoundingBoxFromPoints } from '../util';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\n// @TODO this code is terrible and Line should be a special case of polyline.\n\nconst coordProps = ['x1', 'x2', 'y1', 'y2'] as const;\n\ninterface UniqueLineProps {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n}\n\nexport interface SerializedLineProps\n extends SerializedObjectProps,\n UniqueLineProps {}\n\nexport class Line<\n Props extends TOptions = Partial,\n SProps extends SerializedLineProps = SerializedLineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements UniqueLineProps\n{\n /**\n * x value or first line edge\n * @type number\n * @default\n */\n declare x1: number;\n\n /**\n * y value or first line edge\n * @type number\n * @default\n */\n declare y1: number;\n\n /**\n * x value or second line edge\n * @type number\n * @default\n */\n declare x2: number;\n\n /**\n * y value or second line edge\n * @type number\n * @default\n */\n declare y2: number;\n\n static type = 'Line';\n\n static cacheProperties = [...cacheProperties, ...coordProps];\n /**\n * Constructor\n * @param {Array} [points] Array of points\n * @param {Object} [options] Options object\n * @return {Line} thisArg\n */\n constructor([x1, y1, x2, y2] = [0, 0, 0, 0], options: Partial = {}) {\n super();\n Object.assign(this, Line.ownDefaults);\n this.setOptions(options);\n this.x1 = x1;\n this.x2 = x2;\n this.y1 = y1;\n this.y2 = y2;\n this._setWidthHeight();\n const { left, top } = options;\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n /**\n * @private\n * @param {Object} [options] Options\n */\n _setWidthHeight() {\n const { x1, y1, x2, y2 } = this;\n this.width = Math.abs(x2 - x1);\n this.height = Math.abs(y2 - y1);\n const { left, top, width, height } = makeBoundingBoxFromPoints([\n { x: x1, y: y1 },\n { x: x2, y: y2 },\n ]);\n const position = new Point(left + width / 2, top + height / 2);\n this.setPositionByOrigin(position, CENTER, CENTER);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n super._set(key, value);\n if (coordProps.includes(key as keyof UniqueLineProps)) {\n // this doesn't make sense very much, since setting x1 when top or left\n // are already set, is just going to show a strange result since the\n // line will move way more than the developer expect.\n // in fabric5 it worked only when the line didn't have extra transformations,\n // in fabric6 too. With extra transform they behave bad in different ways.\n // This needs probably a good rework or a tutorial if you have to create a dynamic line\n this._setWidthHeight();\n }\n return this;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n\n const p = this.calcLinePoints();\n ctx.moveTo(p.x1, p.y1);\n ctx.lineTo(p.x2, p.y2);\n\n ctx.lineWidth = this.strokeWidth;\n\n // TODO: test this\n // make sure setting \"fill\" changes color of a line\n // (by copying fillStyle to strokeStyle, since line is stroked, not filled)\n const origStrokeStyle = ctx.strokeStyle;\n if (isFiller(this.stroke)) {\n ctx.strokeStyle = this.stroke.toLive(ctx)!;\n } else {\n ctx.strokeStyle = this.stroke ?? ctx.fillStyle;\n }\n this.stroke && this._renderStroke(ctx);\n ctx.strokeStyle = origStrokeStyle;\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n return new Point((this.x1 + this.x2) / 2, (this.y1 + this.y2) / 2);\n }\n\n /**\n * Returns object representation of an instance\n * @method toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n ...this.calcLinePoints(),\n };\n }\n\n /*\n * Calculate object dimensions from its properties\n * @private\n */\n _getNonTransformedDimensions(): Point {\n const dim = super._getNonTransformedDimensions();\n if (this.strokeLineCap === 'butt') {\n if (this.width === 0) {\n dim.y -= this.strokeWidth;\n }\n if (this.height === 0) {\n dim.x -= this.strokeWidth;\n }\n }\n return dim;\n }\n\n /**\n * Recalculates line points given width and height\n * Those points are simply placed around the center,\n * This is not useful outside internal render functions and svg output\n * Is not meant to be for the developer.\n * @private\n */\n calcLinePoints(): UniqueLineProps {\n const { x1: _x1, x2: _x2, y1: _y1, y2: _y2, width, height } = this;\n const xMult = _x1 <= _x2 ? -1 : 1,\n yMult = _y1 <= _y2 ? -1 : 1,\n x1 = (xMult * width) / 2,\n y1 = (yMult * height) / 2,\n x2 = (xMult * -width) / 2,\n y2 = (yMult * -height) / 2;\n\n return {\n x1,\n x2,\n y1,\n y2,\n };\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const { x1, x2, y1, y2 } = this.calcLinePoints();\n return [\n '\\n`,\n ];\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Line.fromElement})\n * @static\n * @memberOf Line\n * @see http://www.w3.org/TR/SVG/shapes.html#LineElement\n */\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(coordProps);\n\n /**\n * Returns Line instance from an SVG element\n * @static\n * @memberOf Line\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {Function} [callback] callback function invoked after parsing\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const {\n x1 = 0,\n y1 = 0,\n x2 = 0,\n y2 = 0,\n ...parsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n return new this([x1, y1, x2, y2], parsedAttributes);\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Line instance from an object representation\n * @static\n * @memberOf Line\n * @param {Object} object Object to create an instance from\n * @returns {Promise}\n */\n static fromObject>({\n x1,\n y1,\n x2,\n y2,\n ...object\n }: T) {\n return this._fromObject(\n {\n ...object,\n points: [x1, y1, x2, y2],\n },\n {\n extraParam: 'points',\n },\n );\n }\n}\n\nclassRegistry.setClass(Line);\nclassRegistry.setSVGClass(Line);\n","import { classRegistry } from '../ClassRegistry';\nimport { FabricObject } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { TClassProperties, TOptions } from '../typedefs';\nimport type { ObjectEvents } from '../EventTypeDefs';\n\nexport const triangleDefaultValues: Partial> = {\n width: 100,\n height: 100,\n};\n\nexport class Triangle<\n Props extends TOptions = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements FabricObjectProps\n{\n static type = 'Triangle';\n\n static ownDefaults = triangleDefaultValues;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...Triangle.ownDefaults };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Triangle.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const widthBy2 = this.width / 2,\n heightBy2 = this.height / 2;\n\n ctx.beginPath();\n ctx.moveTo(-widthBy2, heightBy2);\n ctx.lineTo(0, -heightBy2);\n ctx.lineTo(widthBy2, heightBy2);\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const widthBy2 = this.width / 2,\n heightBy2 = this.height / 2,\n points = `${-widthBy2} ${heightBy2},0 ${-heightBy2},${widthBy2} ${heightBy2}`;\n return [''];\n }\n}\n\nclassRegistry.setClass(Triangle);\nclassRegistry.setSVGClass(Triangle);\n","import { SCALE_X, SCALE_Y, twoMathPi } from '../constants';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const ellipseDefaultValues: Partial> = {\n rx: 0,\n ry: 0,\n};\n\ninterface UniqueEllipseProps {\n rx: number;\n ry: number;\n}\n\nexport interface SerializedEllipseProps\n extends SerializedObjectProps,\n UniqueEllipseProps {}\n\nexport interface EllipseProps extends FabricObjectProps, UniqueEllipseProps {}\n\nconst ELLIPSE_PROPS = ['rx', 'ry'] as const;\n\nexport class Ellipse<\n Props extends TOptions = Partial,\n SProps extends SerializedEllipseProps = SerializedEllipseProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements EllipseProps\n{\n /**\n * Horizontal radius\n * @type Number\n * @default\n */\n declare rx: number;\n\n /**\n * Vertical radius\n * @type Number\n * @default\n */\n declare ry: number;\n\n static type = 'Ellipse';\n\n static cacheProperties = [...cacheProperties, ...ELLIPSE_PROPS];\n\n static ownDefaults = ellipseDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Ellipse.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Ellipse.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {Ellipse} thisArg\n */\n _set(key: string, value: any) {\n super._set(key, value);\n switch (key) {\n case 'rx':\n this.rx = value;\n this.set('width', value * 2);\n break;\n\n case 'ry':\n this.ry = value;\n this.set('height', value * 2);\n break;\n }\n return this;\n }\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRx() {\n return this.get('rx') * this.get(SCALE_X);\n }\n\n /**\n * Returns Vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRy() {\n return this.get('ry') * this.get(SCALE_Y);\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([...ELLIPSE_PROPS, ...propertiesToInclude]);\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG(): string[] {\n return [\n '\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n ctx.save();\n ctx.transform(1, 0, 0, this.ry / this.rx, 0, 0);\n ctx.arc(0, 0, this.rx, 0, twoMathPi, false);\n ctx.restore();\n this._renderPaintInOrder(ctx);\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Ellipse.fromElement})\n * @static\n * @memberOf Ellipse\n * @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'cx', 'cy', 'rx', 'ry'];\n\n /**\n * Returns {@link Ellipse} instance from an SVG element\n * @static\n * @memberOf Ellipse\n * @param {HTMLElement} element Element to parse\n * @return {Ellipse}\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const parsedAttributes = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n\n parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx;\n parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry;\n return new this(parsedAttributes);\n }\n\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Ellipse);\nclassRegistry.setSVGClass(Ellipse);\n","import type { XY } from '../Point';\n\n/**\n * Parses \"points\" attribute, returning an array of values\n * @static\n * @memberOf fabric\n * @param {String} points points attribute string\n * @return {Array} array of points\n */\nexport function parsePointsAttribute(points: string | null): XY[] {\n // points attribute is required and must not be empty\n if (!points) {\n return [];\n }\n\n // replace commas with whitespace and remove bookending whitespace\n const pointsSplit: string[] = points.replace(/,/g, ' ').trim().split(/\\s+/);\n\n const parsedPoints = [];\n\n for (let i = 0; i < pointsSplit.length; i += 2) {\n parsedPoints.push({\n x: parseFloat(pointsSplit[i]),\n y: parseFloat(pointsSplit[i + 1]),\n });\n }\n\n // odd number of points is an error\n // if (parsedPoints.length % 2 !== 0) {\n // return null;\n // }\n return parsedPoints;\n}\n","import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { parsePointsAttribute } from '../parser/parsePointsAttribute';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { calcDimensionsMatrix, transformPoint } from '../util/misc/matrix';\nimport { projectStrokeOnPoints } from '../util/misc/projectStroke';\nimport type { TProjectStrokeOnPointsOptions } from '../util/misc/projectStroke/types';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport {\n CENTER,\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const polylineDefaultValues: Partial> = {\n /**\n * @deprecated transient option soon to be removed in favor of a different design\n */\n exactBoundingBox: false,\n};\n\nexport interface SerializedPolylineProps extends SerializedObjectProps {\n points: XY[];\n}\n\nexport class Polyline<\n Props extends TOptions = Partial,\n SProps extends SerializedPolylineProps = SerializedPolylineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject {\n /**\n * Points array\n * @type Array\n * @default\n */\n declare points: XY[];\n\n /**\n * WARNING: Feature in progress\n * Calculate the exact bounding box taking in account strokeWidth on acute angles\n * this will be turned to true by default on fabric 6.0\n * maybe will be left in as an optimization since calculations may be slow\n * @deprecated transient option soon to be removed in favor of a different design\n * @type Boolean\n * @default false\n */\n declare exactBoundingBox: boolean;\n\n private declare initialized: true | undefined;\n\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polyline';\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Polyline.ownDefaults,\n };\n }\n\n /**\n * A list of properties that if changed trigger a recalculation of dimensions\n * @todo check if you really need to recalculate for all cases\n */\n static layoutProperties: (keyof Polyline)[] = [\n SKEW_X,\n SKEW_Y,\n 'strokeLineCap',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'strokeWidth',\n 'strokeUniform',\n 'points',\n ];\n\n declare pathOffset: Point;\n\n declare strokeOffset: Point;\n\n static cacheProperties = [...cacheProperties, 'points'];\n\n strokeDiff: Point;\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {Polyline} thisArg\n * @example\n * var poly = new Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n constructor(points: XY[] = [], options: Props = {} as Props) {\n super();\n Object.assign(this, Polyline.ownDefaults);\n this.setOptions(options);\n this.points = points;\n const { left, top } = options;\n this.initialized = true;\n this.setBoundingBox(true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n protected isOpen() {\n return true;\n }\n\n private _projectStrokeOnPoints(options: TProjectStrokeOnPointsOptions) {\n return projectStrokeOnPoints(this.points, options, this.isOpen());\n }\n\n /**\n * Calculate the polygon bounding box\n * @private\n */\n _calcDimensions(options?: Partial) {\n options = {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n strokeLineCap: this.strokeLineCap,\n strokeLineJoin: this.strokeLineJoin,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeUniform: this.strokeUniform,\n strokeWidth: this.strokeWidth,\n ...(options || {}),\n };\n const points = this.exactBoundingBox\n ? this._projectStrokeOnPoints(\n options as TProjectStrokeOnPointsOptions,\n ).map((projection) => projection.projectedPoint)\n : this.points;\n if (points.length === 0) {\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n pathOffset: new Point(),\n strokeOffset: new Point(),\n strokeDiff: new Point(),\n };\n }\n const bbox = makeBoundingBoxFromPoints(points),\n // Remove scale effect, since it's applied after\n matrix = calcDimensionsMatrix({ ...options, scaleX: 1, scaleY: 1 }),\n bboxNoStroke = makeBoundingBoxFromPoints(\n this.points.map((p) => transformPoint(p, matrix, true)),\n ),\n scale = new Point(this.scaleX, this.scaleY);\n let offsetX = bbox.left + bbox.width / 2,\n offsetY = bbox.top + bbox.height / 2;\n if (this.exactBoundingBox) {\n offsetX = offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));\n // Order of those assignments is important.\n // offsetY relies on offsetX being already changed by the line above\n offsetY = offsetY - offsetX * Math.tan(degreesToRadians(this.skewY));\n }\n\n return {\n ...bbox,\n pathOffset: new Point(offsetX, offsetY),\n strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top)\n .subtract(new Point(bbox.left, bbox.top))\n .multiply(scale),\n strokeDiff: new Point(bbox.width, bbox.height)\n .subtract(new Point(bboxNoStroke.width, bboxNoStroke.height))\n .multiply(scale),\n };\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = makeBoundingBoxFromPoints(this.points);\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { left, top, width, height, pathOffset, strokeOffset, strokeDiff } =\n this._calcDimensions();\n this.set({ width, height, pathOffset, strokeOffset, strokeDiff });\n adjustPosition &&\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER,\n );\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return this.exactBoundingBox;\n }\n\n /**\n * @override stroke is taken in account in size\n */\n _getNonTransformedDimensions() {\n return this.exactBoundingBox\n ? // TODO: fix this\n new Point(this.width, this.height)\n : super._getNonTransformedDimensions();\n }\n\n /**\n * @override stroke and skewing are taken into account when projecting stroke on points,\n * therefore we don't want the default calculation to account for skewing as well.\n * Though it is possible to pass `width` and `height` in `options`, doing so is very strange, use with discretion.\n *\n * @private\n */\n _getTransformedDimensions(options: any = {}) {\n if (this.exactBoundingBox) {\n let size: Point;\n /* When `strokeUniform = true`, any changes to the properties require recalculating the `width` and `height` because\n the stroke projections are affected.\n When `strokeUniform = false`, we don't need to recalculate for scale transformations, as the effect of scale on\n projections follows a linear function (e.g. scaleX of 2 just multiply width by 2)*/\n if (\n Object.keys(options).some(\n (key) =>\n this.strokeUniform ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof TProjectStrokeOnPointsOptions,\n ),\n )\n ) {\n const { width, height } = this._calcDimensions(options);\n size = new Point(options.width ?? width, options.height ?? height);\n } else {\n size = new Point(\n options.width ?? this.width,\n options.height ?? this.height,\n );\n }\n return size.multiply(\n new Point(options.scaleX || this.scaleX, options.scaleY || this.scaleY),\n );\n } else {\n return super._getTransformedDimensions(options);\n }\n }\n\n /**\n * Recalculates dimensions when changing skew and scale\n * @private\n */\n _set(key: string, value: any) {\n const changed = this.initialized && this[key as keyof this] !== value;\n const output = super._set(key, value);\n if (\n this.exactBoundingBox &&\n changed &&\n (((key === SCALE_X || key === SCALE_Y) &&\n this.strokeUniform &&\n (this.constructor as typeof Polyline).layoutProperties.includes(\n 'strokeUniform',\n )) ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof Polyline,\n ))\n ) {\n this.setDimensions();\n }\n return output;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n points: this.points.map(({ x, y }) => ({ x, y })),\n };\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const points = [],\n diffX = this.pathOffset.x,\n diffY = this.pathOffset.y,\n NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n\n for (let i = 0, len = this.points.length; i < len; i++) {\n points.push(\n toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS),\n ',',\n toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS),\n ' ',\n );\n }\n return [\n `<${\n (this.constructor as typeof Polyline).type.toLowerCase() as\n | 'polyline'\n | 'polygon'\n } `,\n 'COMMON_PARTS',\n `points=\"${points.join('')}\" />\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return;\n }\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (let i = 0; i < len; i++) {\n const point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n !this.isOpen() && ctx.closePath();\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity(): number {\n return this.points.length;\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Polyline.fromElement})\n * @static\n * @memberOf Polyline\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES];\n\n /**\n * Returns Polyline instance from an SVG element\n * @static\n * @memberOf Polyline\n * @param {HTMLElement} element Element to parser\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const points = parsePointsAttribute(element.getAttribute('points')),\n // we omit left and top to instruct the constructor to position the object using the bbox\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n { left, top, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(points, {\n ...parsedAttributes,\n ...options,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Polyline instance from an object representation\n * @static\n * @memberOf Polyline\n * @param {Object} object Object to create an instance from\n * @returns {Promise}\n */\n static fromObject>(object: T) {\n return this._fromObject(object, {\n extraParam: 'points',\n });\n }\n}\n\nclassRegistry.setClass(Polyline);\nclassRegistry.setSVGClass(Polyline);\n","import { classRegistry } from '../ClassRegistry';\nimport { Polyline, polylineDefaultValues } from './Polyline';\n\nexport class Polygon extends Polyline {\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polygon';\n\n protected isOpen() {\n return false;\n }\n}\n\nclassRegistry.setClass(Polygon);\nclassRegistry.setSVGClass(Polygon);\n","import { FILL, LEFT, STROKE, reNewline } from '../../constants';\nimport type { TClassProperties } from '../../typedefs';\nimport type { FabricText } from './Text';\n\nconst fontProperties = [\n 'fontSize',\n 'fontWeight',\n 'fontFamily',\n 'fontStyle',\n] as const;\n\nexport const textDecorationProperties = [\n 'underline',\n 'overline',\n 'linethrough',\n] as const;\n\nexport const textLayoutProperties: string[] = [\n ...fontProperties,\n 'lineHeight',\n 'text',\n 'charSpacing',\n 'textAlign',\n 'styles',\n 'path',\n 'pathStartOffset',\n 'pathSide',\n 'pathAlign',\n];\n\nexport const additionalProps = [\n ...textLayoutProperties,\n ...textDecorationProperties,\n 'textBackgroundColor',\n 'direction',\n] as const;\n\nexport type StylePropertiesType =\n | 'fill'\n | 'stroke'\n | 'strokeWidth'\n | 'fontSize'\n | 'fontFamily'\n | 'fontWeight'\n | 'fontStyle'\n | 'textBackgroundColor'\n | 'deltaY'\n | 'overline'\n | 'underline'\n | 'linethrough';\n\nexport const styleProperties: Readonly = [\n ...fontProperties,\n ...textDecorationProperties,\n STROKE,\n 'strokeWidth',\n FILL,\n 'deltaY',\n 'textBackgroundColor',\n] as const;\n\n// @TODO: Many things here are configuration related and shouldn't be on the class nor prototype\n// regexes, list of properties that are not suppose to change by instances, magic consts.\n// this will be a separated effort\nexport const textDefaultValues: Partial> = {\n _reNewline: reNewline,\n _reSpacesAndTabs: /[ \\t\\r]/g,\n _reSpaceAndTab: /[ \\t\\r]/,\n _reWords: /\\S+/g,\n fontSize: 40,\n fontWeight: 'normal',\n fontFamily: 'Times New Roman',\n underline: false,\n overline: false,\n linethrough: false,\n textAlign: LEFT,\n fontStyle: 'normal',\n lineHeight: 1.16,\n superscript: {\n size: 0.6, // fontSize factor\n baseline: -0.35, // baseline-shift factor (upwards)\n },\n subscript: {\n size: 0.6, // fontSize factor\n baseline: 0.11, // baseline-shift factor (downwards)\n },\n textBackgroundColor: '',\n stroke: null,\n shadow: null,\n path: undefined,\n pathStartOffset: 0,\n pathSide: LEFT,\n pathAlign: 'baseline',\n _fontSizeFraction: 0.222,\n offsets: {\n underline: 0.1,\n linethrough: -0.315,\n overline: -0.88,\n },\n _fontSizeMult: 1.13,\n charSpacing: 0,\n deltaY: 0,\n direction: 'ltr',\n CACHE_FONT_SIZE: 400,\n MIN_TEXT_WIDTH: 2,\n};\n\nexport const JUSTIFY = 'justify';\nexport const JUSTIFY_LEFT = 'justify-left';\nexport const JUSTIFY_RIGHT = 'justify-right';\nexport const JUSTIFY_CENTER = 'justify-center';\n","import type { ObjectEvents } from '../../EventTypeDefs';\nimport type { FabricObjectProps, SerializedObjectProps } from '../Object/types';\nimport type { TOptions } from '../../typedefs';\nimport { FabricObject } from '../Object/FabricObject';\nimport { styleProperties } from './constants';\nimport type { StylePropertiesType } from './constants';\nimport type { FabricText } from './Text';\nimport { pick } from '../../util';\nimport { pickBy } from '../../util/misc/pick';\n\nexport type CompleteTextStyleDeclaration = Pick<\n FabricText,\n StylePropertiesType\n>;\n\nexport type TextStyleDeclaration = Partial;\n\nexport type TextStyle = {\n [line: number | string]: { [char: number | string]: TextStyleDeclaration };\n};\n\nexport abstract class StyledText<\n Props extends TOptions = Partial,\n SProps extends SerializedObjectProps = SerializedObjectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject {\n declare abstract styles: TextStyle;\n protected declare abstract _textLines: string[][];\n protected declare _forceClearCache: boolean;\n static _styleProperties: Readonly = styleProperties;\n abstract get2DCursorLocation(\n selectionStart: number,\n skipWrapping?: boolean,\n ): { charIndex: number; lineIndex: number };\n\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles(lineIndex?: number): boolean {\n if (!this.styles) {\n return true;\n }\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return true;\n }\n const obj =\n typeof lineIndex === 'undefined'\n ? this.styles\n : { line: this.styles[lineIndex] };\n for (const p1 in obj) {\n for (const p2 in obj[p1]) {\n // eslint-disable-next-line no-unused-vars\n for (const p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * Returns true if object has a style property or has it ina specified line\n * This function is used to detect if a text will use a particular property or not.\n * @param {String} property to check for\n * @param {Number} lineIndex to check the style on\n * @return {Boolean}\n */\n styleHas(property: keyof TextStyleDeclaration, lineIndex?: number): boolean {\n if (!this.styles) {\n return false;\n }\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return false;\n }\n const obj =\n typeof lineIndex === 'undefined'\n ? this.styles\n : { 0: this.styles[lineIndex] };\n // eslint-disable-next-line\n for (const p1 in obj) {\n // eslint-disable-next-line\n for (const p2 in obj[p1]) {\n if (typeof obj[p1][p2][property] !== 'undefined') {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * Check if characters in a text have a value for a property\n * whose value matches the textbox's value for that property. If so,\n * the character-level property is deleted. If the character\n * has no other properties, then it is also deleted. Finally,\n * if the line containing that character has no other characters\n * then it also is deleted.\n *\n * @param {string} property The property to compare between characters and text.\n */\n cleanStyle(property: keyof TextStyleDeclaration) {\n if (!this.styles) {\n return false;\n }\n const obj = this.styles;\n let stylesCount = 0,\n letterCount,\n stylePropertyValue,\n allStyleObjectPropertiesMatch = true,\n graphemeCount = 0;\n for (const p1 in obj) {\n letterCount = 0;\n for (const p2 in obj[p1]) {\n const styleObject = obj[p1][p2] || {},\n stylePropertyHasBeenSet = styleObject[property] !== undefined;\n\n stylesCount++;\n\n if (stylePropertyHasBeenSet) {\n if (!stylePropertyValue) {\n stylePropertyValue = styleObject[property];\n } else if (styleObject[property] !== stylePropertyValue) {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (styleObject[property] === this[property as keyof this]) {\n delete styleObject[property];\n }\n } else {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (Object.keys(styleObject).length !== 0) {\n letterCount++;\n } else {\n delete obj[p1][p2];\n }\n }\n\n if (letterCount === 0) {\n delete obj[p1];\n }\n }\n // if every grapheme has the same style set then\n // delete those styles and set it on the parent\n for (let i = 0; i < this._textLines.length; i++) {\n graphemeCount += this._textLines[i].length;\n }\n if (allStyleObjectPropertiesMatch && stylesCount === graphemeCount) {\n // @ts-expect-error conspiracy theory of TS\n this[property as keyof this] = stylePropertyValue;\n this.removeStyle(property);\n }\n }\n\n /**\n * Remove a style property or properties from all individual character styles\n * in a text object. Deletes the character style object if it contains no other style\n * props. Deletes a line style object if it contains no other character styles.\n *\n * @param {String} props The property to remove from character styles.\n */\n removeStyle(property: keyof TextStyleDeclaration) {\n if (!this.styles) {\n return;\n }\n const obj = this.styles;\n let line, lineNum, charNum;\n for (lineNum in obj) {\n line = obj[lineNum];\n for (charNum in line) {\n delete line[charNum][property];\n if (Object.keys(line[charNum]).length === 0) {\n delete line[charNum];\n }\n }\n if (Object.keys(line).length === 0) {\n delete obj[lineNum];\n }\n }\n }\n\n private _extendStyles(index: number, style: TextStyleDeclaration): void {\n const { lineIndex, charIndex } = this.get2DCursorLocation(index);\n\n if (!this._getLineStyle(lineIndex)) {\n this._setLineStyle(lineIndex);\n }\n\n const newStyle = pickBy(\n {\n // first create a new object that is a merge of existing and new\n ...this._getStyleDeclaration(lineIndex, charIndex),\n ...style,\n // use the predicate to discard undefined values\n },\n (value) => value !== undefined,\n );\n\n // finally assign to the old position the new style\n this._setStyleDeclaration(lineIndex, charIndex, newStyle);\n }\n\n /**\n * Gets style of a current selection/cursor (at the start position)\n * @param {Number} startIndex Start index to get styles at\n * @param {Number} endIndex End index to get styles at, if not specified startIndex + 1\n * @param {Boolean} [complete] get full style or not\n * @return {Array} styles an array with one, zero or more Style objects\n */\n getSelectionStyles(\n startIndex: number,\n endIndex?: number,\n complete?: boolean,\n ): TextStyleDeclaration[] {\n const styles: TextStyleDeclaration[] = [];\n for (let i = startIndex; i < (endIndex || startIndex); i++) {\n styles.push(this.getStyleAtPosition(i, complete));\n }\n return styles;\n }\n\n /**\n * Gets style of a current selection/cursor position\n * @param {Number} position to get styles at\n * @param {Boolean} [complete] full style if true\n * @return {Object} style Style object at a specified index\n * @private\n */\n getStyleAtPosition(position: number, complete?: boolean) {\n const { lineIndex, charIndex } = this.get2DCursorLocation(position);\n return complete\n ? this.getCompleteStyleDeclaration(lineIndex, charIndex)\n : this._getStyleDeclaration(lineIndex, charIndex);\n }\n\n /**\n * Sets style of a current selection, if no selection exist, do not set anything.\n * @param {Object} styles Styles object\n * @param {Number} startIndex Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified startIndex + 1\n */\n setSelectionStyles(styles: object, startIndex: number, endIndex?: number) {\n for (let i = startIndex; i < (endIndex || startIndex); i++) {\n this._extendStyles(i, styles);\n }\n /* not included in _extendStyles to avoid clearing cache more than once */\n this._forceClearCache = true;\n }\n\n /**\n * Get a reference, not a clone, to the style object for a given character,\n * if no style is set for a line or char, return a new empty object.\n * This is tricky and confusing because when you get an empty object you can't\n * determine if it is a reference or a new one.\n * @TODO this should always return a reference or always a clone or undefined when necessary.\n * @protected\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {TextStyleDeclaration} a style object reference to the existing one or a new empty object when undefined\n */\n _getStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n ): TextStyleDeclaration {\n const lineStyle = this.styles && this.styles[lineIndex];\n return lineStyle ? lineStyle[charIndex] ?? {} : {};\n }\n\n /**\n * return a new object that contains all the style property for a character\n * the object returned is newly created\n * @param {Number} lineIndex of the line where the character is\n * @param {Number} charIndex position of the character on the line\n * @return {Object} style object\n */\n getCompleteStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n ): CompleteTextStyleDeclaration {\n return {\n // @ts-expect-error readonly\n ...pick(this, (this.constructor as typeof StyledText)._styleProperties),\n ...this._getStyleDeclaration(lineIndex, charIndex),\n } as CompleteTextStyleDeclaration;\n }\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n protected _setStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n style: object,\n ) {\n this.styles[lineIndex][charIndex] = style;\n }\n\n /**\n *\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n protected _deleteStyleDeclaration(lineIndex: number, charIndex: number) {\n delete this.styles[lineIndex][charIndex];\n }\n\n /**\n * @param {Number} lineIndex\n * @return {Boolean} if the line exists or not\n * @private\n */\n protected _getLineStyle(lineIndex: number): boolean {\n return !!this.styles[lineIndex];\n }\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @private\n */\n protected _setLineStyle(lineIndex: number) {\n this.styles[lineIndex] = {};\n }\n\n protected _deleteLineStyle(lineIndex: number) {\n delete this.styles[lineIndex];\n }\n}\n","import { config } from '../../config';\nimport type { TSVGReviver } from '../../typedefs';\nimport { escapeXml } from '../../util/lang_string';\nimport { colorPropToSVG, createSVGRect } from '../../util/misc/svgParsing';\nimport { hasStyleChanged } from '../../util/misc/textStyles';\nimport { toFixed } from '../../util/misc/toFixed';\nimport { FabricObjectSVGExportMixin } from '../Object/FabricObjectSVGExportMixin';\nimport { type TextStyleDeclaration } from './StyledText';\nimport { JUSTIFY } from '../Text/constants';\nimport type { FabricText } from './Text';\nimport { STROKE, FILL } from '../../constants';\n\nconst multipleSpacesRegex = / +/g;\nconst dblQuoteRegex = /\"/g;\n\nfunction createSVGInlineRect(\n color: string,\n left: number,\n top: number,\n width: number,\n height: number,\n) {\n return `\\t\\t${createSVGRect(color, { left, top, width, height })}\\n`;\n}\n\nexport class TextSVGExportMixin extends FabricObjectSVGExportMixin {\n _toSVG(this: TextSVGExportMixin & FabricText): string[] {\n const offsets = this._getSVGLeftTopOffsets(),\n textAndBg = this._getSVGTextAndBg(offsets.textTop, offsets.textLeft);\n return this._wrapSVGTextAndBg(textAndBg);\n }\n\n toSVG(this: TextSVGExportMixin & FabricText, reviver?: TSVGReviver): string {\n return this._createBaseSVGMarkup(this._toSVG(), {\n reviver,\n noStyle: true,\n withShadow: true,\n });\n }\n\n private _getSVGLeftTopOffsets(this: TextSVGExportMixin & FabricText) {\n return {\n textLeft: -this.width / 2,\n textTop: -this.height / 2,\n lineTop: this.getHeightOfLine(0),\n };\n }\n\n private _wrapSVGTextAndBg(\n this: TextSVGExportMixin & FabricText,\n {\n textBgRects,\n textSpans,\n }: {\n textSpans: string[];\n textBgRects: string[];\n },\n ) {\n const noShadow = true,\n textDecoration = this.getSvgTextDecoration(this);\n return [\n textBgRects.join(''),\n '\\t\\t',\n textSpans.join(''),\n '\\n',\n ];\n }\n\n /**\n * @private\n * @param {Number} textTopOffset Text top offset\n * @param {Number} textLeftOffset Text left offset\n * @return {Object}\n */\n private _getSVGTextAndBg(\n this: TextSVGExportMixin & FabricText,\n textTopOffset: number,\n textLeftOffset: number,\n ) {\n const textSpans: string[] = [],\n textBgRects: string[] = [];\n let height = textTopOffset,\n lineOffset;\n\n // bounding-box background\n this.backgroundColor &&\n textBgRects.push(\n ...createSVGInlineRect(\n this.backgroundColor,\n -this.width / 2,\n -this.height / 2,\n this.width,\n this.height,\n ),\n );\n\n // text and text-background\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n lineOffset = this._getLineLeftOffset(i);\n if (this.direction === 'rtl') {\n lineOffset += this.width;\n }\n if (this.textBackgroundColor || this.styleHas('textBackgroundColor', i)) {\n this._setSVGTextLineBg(\n textBgRects,\n i,\n textLeftOffset + lineOffset,\n height,\n );\n }\n this._setSVGTextLineText(\n textSpans,\n i,\n textLeftOffset + lineOffset,\n height,\n );\n height += this.getHeightOfLine(i);\n }\n\n return {\n textSpans,\n textBgRects,\n };\n }\n\n private _createTextCharSpan(\n this: TextSVGExportMixin & FabricText,\n char: string,\n styleDecl: TextStyleDeclaration,\n left: number,\n top: number,\n ) {\n const styleProps = this.getSvgSpanStyles(\n styleDecl,\n char !== char.trim() || !!char.match(multipleSpacesRegex),\n ),\n fillStyles = styleProps ? `style=\"${styleProps}\"` : '',\n dy = styleDecl.deltaY,\n dySpan = dy ? ` dy=\"${toFixed(dy, config.NUM_FRACTION_DIGITS)}\" ` : '';\n\n return `${escapeXml(char)}`;\n }\n\n private _setSVGTextLineText(\n this: TextSVGExportMixin & FabricText,\n textSpans: string[],\n lineIndex: number,\n textLeftOffset: number,\n textTopOffset: number,\n ) {\n const lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.includes(JUSTIFY),\n line = this._textLines[lineIndex];\n let actualStyle,\n nextStyle,\n charsToRender = '',\n charBox,\n style,\n boxWidth = 0,\n timeToRender;\n\n textTopOffset +=\n (lineHeight * (1 - this._fontSizeFraction)) / this.lineHeight;\n for (let i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i];\n if (boxWidth === 0) {\n textLeftOffset += charBox.kernedWidth - charBox.width;\n boxWidth += charBox.width;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle =\n actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = hasStyleChanged(actualStyle, nextStyle, true);\n }\n if (timeToRender) {\n style = this._getStyleDeclaration(lineIndex, i);\n textSpans.push(\n this._createTextCharSpan(\n charsToRender,\n style,\n textLeftOffset,\n textTopOffset,\n ),\n );\n charsToRender = '';\n actualStyle = nextStyle;\n if (this.direction === 'rtl') {\n textLeftOffset -= boxWidth;\n } else {\n textLeftOffset += boxWidth;\n }\n boxWidth = 0;\n }\n }\n }\n\n private _setSVGTextLineBg(\n this: TextSVGExportMixin & FabricText,\n textBgRects: (string | number)[],\n i: number,\n leftOffset: number,\n textTopOffset: number,\n ) {\n const line = this._textLines[i],\n heightOfLine = this.getHeightOfLine(i) / this.lineHeight;\n let boxWidth = 0,\n boxStart = 0,\n currentColor,\n lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (let j = 0; j < line.length; j++) {\n const { left, width, kernedWidth } = this.__charBounds[i][j];\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (currentColor !== lastColor) {\n lastColor &&\n textBgRects.push(\n ...createSVGInlineRect(\n lastColor,\n leftOffset + boxStart,\n textTopOffset,\n boxWidth,\n heightOfLine,\n ),\n );\n boxStart = left;\n boxWidth = width;\n lastColor = currentColor;\n } else {\n boxWidth += kernedWidth;\n }\n }\n currentColor &&\n textBgRects.push(\n ...createSVGInlineRect(\n lastColor,\n leftOffset + boxStart,\n textTopOffset,\n boxWidth,\n heightOfLine,\n ),\n );\n }\n\n /**\n * @deprecated unused\n */\n _getSVGLineTopOffset(\n this: TextSVGExportMixin & FabricText,\n lineIndex: number,\n ) {\n let lineTopOffset = 0,\n j;\n for (j = 0; j < lineIndex; j++) {\n lineTopOffset += this.getHeightOfLine(j);\n }\n const lastHeight = this.getHeightOfLine(j);\n return {\n lineTop: lineTopOffset,\n offset:\n ((this._fontSizeMult - this._fontSizeFraction) * lastHeight) /\n (this.lineHeight * this._fontSizeMult),\n };\n }\n\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles(this: TextSVGExportMixin & FabricText, skipShadow?: boolean) {\n return `${super.getSvgStyles(skipShadow)} white-space: pre;`;\n }\n\n /**\n * Returns styles-string for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @param {Boolean} useWhiteSpace a boolean to include an additional attribute in the style.\n * @return {String}\n */\n getSvgSpanStyles(\n this: TextSVGExportMixin & FabricText,\n style: TextStyleDeclaration,\n useWhiteSpace?: boolean,\n ) {\n const {\n fontFamily,\n strokeWidth,\n stroke,\n fill,\n fontSize,\n fontStyle,\n fontWeight,\n deltaY,\n } = style;\n\n const textDecoration = this.getSvgTextDecoration(style);\n\n return [\n stroke ? colorPropToSVG(STROKE, stroke) : '',\n strokeWidth ? `stroke-width: ${strokeWidth}; ` : '',\n fontFamily\n ? `font-family: ${\n !fontFamily.includes(\"'\") && !fontFamily.includes('\"')\n ? `'${fontFamily}'`\n : fontFamily\n }; `\n : '',\n fontSize ? `font-size: ${fontSize}px; ` : '',\n fontStyle ? `font-style: ${fontStyle}; ` : '',\n fontWeight ? `font-weight: ${fontWeight}; ` : '',\n textDecoration ? `text-decoration: ${textDecoration}; ` : textDecoration,\n fill ? colorPropToSVG(FILL, fill) : '',\n deltaY ? `baseline-shift: ${-deltaY}; ` : '',\n useWhiteSpace ? 'white-space: pre; ' : '',\n ].join('');\n }\n\n /**\n * Returns text-decoration property for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @return {String}\n */\n getSvgTextDecoration(\n this: TextSVGExportMixin & FabricText,\n style: TextStyleDeclaration,\n ) {\n return (['overline', 'underline', 'line-through'] as const)\n .filter(\n (decoration) =>\n style[\n decoration.replace('-', '') as\n | 'overline'\n | 'underline'\n | 'linethrough'\n ],\n )\n .join(' ');\n }\n}\n","import { cache } from '../../cache';\nimport { DEFAULT_SVG_FONT_SIZE, FILL, STROKE } from '../../constants';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport type {\n CompleteTextStyleDeclaration,\n TextStyle,\n TextStyleDeclaration,\n} from './StyledText';\nimport { StyledText } from './StyledText';\nimport { SHARED_ATTRIBUTES } from '../../parser/attributes';\nimport { parseAttributes } from '../../parser/parseAttributes';\nimport type {\n Abortable,\n TCacheCanvasDimensions,\n TClassProperties,\n TFiller,\n TOptions,\n TRadian,\n} from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { graphemeSplit } from '../../util/lang_string';\nimport { createCanvasElementFor } from '../../util/misc/dom';\nimport type { TextStyleArray } from '../../util/misc/textStyles';\nimport {\n hasStyleChanged,\n stylesFromArray,\n stylesToArray,\n} from '../../util/misc/textStyles';\nimport { getPathSegmentsInfo, getPointOnPath } from '../../util/path';\nimport { cacheProperties } from '../Object/FabricObject';\nimport type { Path } from '../Path';\nimport { TextSVGExportMixin } from './TextSVGExportMixin';\nimport { applyMixins } from '../../util/applyMixins';\nimport type { FabricObjectProps, SerializedObjectProps } from '../Object/types';\nimport type { StylePropertiesType } from './constants';\nimport {\n additionalProps,\n textDefaultValues,\n textLayoutProperties,\n JUSTIFY,\n JUSTIFY_CENTER,\n JUSTIFY_LEFT,\n JUSTIFY_RIGHT,\n} from './constants';\nimport { CENTER, LEFT, RIGHT, TOP, BOTTOM } from '../../constants';\nimport { isFiller } from '../../util/typeAssertions';\nimport type { Gradient } from '../../gradient/Gradient';\nimport type { Pattern } from '../../Pattern';\nimport type { CSSRules } from '../../parser/typedefs';\nimport { Point } from '../../Point';\nimport { createRotateMatrix } from '../../util/misc/matrix';\nimport { makeBoundingBoxFromPoints, radiansToDegrees } from '../../util';\n\nlet measuringContext: CanvasRenderingContext2D | null;\n\n/**\n * Return a context for measurement of text string.\n * if created it gets stored for reuse\n */\nfunction getMeasuringContext() {\n if (!measuringContext) {\n const canvas = createCanvasElementFor({\n width: 0,\n height: 0,\n });\n measuringContext = canvas.getContext('2d');\n }\n return measuringContext;\n}\n\nexport type TPathSide = 'left' | 'right';\n\nexport type TPathAlign = 'baseline' | 'center' | 'ascender' | 'descender';\n\nexport type TextLinesInfo = {\n lines: string[];\n graphemeLines: string[][];\n graphemeText: string[];\n _unwrappedLines: string[][];\n};\n\n/**\n * Measure and return the info of a single grapheme.\n * needs the the info of previous graphemes already filled\n * Override to customize measuring\n */\nexport type GraphemeBBox = {\n width: number;\n height: number;\n kernedWidth: number;\n left: number;\n deltaY: number;\n renderLeft?: number;\n renderTop?: number;\n angle?: TRadian;\n};\n\n// @TODO this is not complete\ninterface UniqueTextProps {\n charSpacing: number;\n lineHeight: number;\n fontSize: number;\n fontWeight: string | number;\n fontFamily: string;\n fontStyle: string;\n pathSide: TPathSide;\n pathAlign: TPathAlign;\n underline: boolean;\n overline: boolean;\n linethrough: boolean;\n textAlign: string;\n direction: CanvasDirection;\n path?: Path;\n}\n\nexport interface SerializedTextProps\n extends SerializedObjectProps,\n UniqueTextProps {\n styles: TextStyleArray | TextStyle;\n}\n\nexport interface TextProps extends FabricObjectProps, UniqueTextProps {\n styles: TextStyle;\n}\n\n/**\n * Text class\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#text}\n */\nexport class FabricText<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends StyledText\n implements UniqueTextProps\n{\n /**\n * Properties that requires a text layout recalculation when changed\n * @type string[]\n * @protected\n */\n static textLayoutProperties: string[] = textLayoutProperties;\n\n /**\n * @private\n */\n declare _reNewline: RegExp;\n\n /**\n * Use this regular expression to filter for whitespaces that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reSpacesAndTabs: RegExp;\n\n /**\n * Use this regular expression to filter for whitespace that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reSpaceAndTab: RegExp;\n\n /**\n * Use this regular expression to filter consecutive groups of non spaces.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reWords: RegExp;\n\n declare text: string;\n\n /**\n * Font size (in pixels)\n * @type Number\n * @default\n */\n declare fontSize: number;\n\n /**\n * Font weight (e.g. bold, normal, 400, 600, 800)\n * @type {(Number|String)}\n * @default\n */\n declare fontWeight: string | number;\n\n /**\n * Font family\n * @type String\n * @default\n */\n declare fontFamily: string;\n\n /**\n * Text decoration underline.\n * @type Boolean\n * @default\n */\n declare underline: boolean;\n\n /**\n * Text decoration overline.\n * @type Boolean\n * @default\n */\n declare overline: boolean;\n\n /**\n * Text decoration linethrough.\n * @type Boolean\n * @default\n */\n declare linethrough: boolean;\n\n /**\n * Text alignment. Possible values: \"left\", \"center\", \"right\", \"justify\",\n * \"justify-left\", \"justify-center\" or \"justify-right\".\n * @type String\n * @default\n */\n declare textAlign: string;\n\n /**\n * Font style . Possible values: \"\", \"normal\", \"italic\" or \"oblique\".\n * @type String\n * @default\n */\n declare fontStyle: string;\n\n /**\n * Line height\n * @type Number\n * @default\n */\n declare lineHeight: number;\n\n /**\n * Superscript schema object (minimum overlap)\n */\n declare superscript: {\n /**\n * fontSize factor\n * @default 0.6\n */\n size: number;\n /**\n * baseline-shift factor (upwards)\n * @default -0.35\n */\n baseline: number;\n };\n\n /**\n * Subscript schema object (minimum overlap)\n */\n declare subscript: {\n /**\n * fontSize factor\n * @default 0.6\n */\n size: number;\n /**\n * baseline-shift factor (downwards)\n * @default 0.11\n */\n baseline: number;\n };\n\n /**\n * Background color of text lines\n * @type String\n * @default\n */\n declare textBackgroundColor: string;\n\n declare styles: TextStyle;\n\n /**\n * Path that the text should follow.\n * since 4.6.0 the path will be drawn automatically.\n * if you want to make the path visible, give it a stroke and strokeWidth or fill value\n * if you want it to be hidden, assign visible = false to the path.\n * This feature is in BETA, and SVG import/export is not yet supported.\n * @type Path\n * @example\n * const textPath = new Text('Text on a path', {\n * top: 150,\n * left: 150,\n * textAlign: 'center',\n * charSpacing: -50,\n * path: new Path('M 0 0 C 50 -100 150 -100 200 0', {\n * strokeWidth: 1,\n * visible: false\n * }),\n * pathSide: 'left',\n * pathStartOffset: 0\n * });\n * @default\n */\n declare path?: Path;\n\n /**\n * Offset amount for text path starting position\n * Only used when text has a path\n * @type Number\n * @default\n */\n declare pathStartOffset: number;\n\n /**\n * Which side of the path the text should be drawn on.\n * Only used when text has a path\n * @type {TPathSide} 'left|right'\n * @default\n */\n declare pathSide: TPathSide;\n\n /**\n * How text is aligned to the path. This property determines\n * the perpendicular position of each character relative to the path.\n * (one of \"baseline\", \"center\", \"ascender\", \"descender\")\n * This feature is in BETA, and its behavior may change\n * @type TPathAlign\n * @default\n */\n declare pathAlign: TPathAlign;\n\n /**\n * @private\n */\n declare _fontSizeFraction: number;\n\n /**\n * @private\n */\n declare offsets: { underline: number; linethrough: number; overline: number };\n\n /**\n * Text Line proportion to font Size (in pixels)\n * @type Number\n * @default\n */\n declare _fontSizeMult: number;\n\n /**\n * additional space between characters\n * expressed in thousands of em unit\n * @type Number\n * @default\n */\n declare charSpacing: number;\n\n /**\n * Baseline shift, styles only, keep at 0 for the main text object\n * @type {Number}\n * @default\n */\n declare deltaY: number;\n\n /**\n * WARNING: EXPERIMENTAL. NOT SUPPORTED YET\n * determine the direction of the text.\n * This has to be set manually together with textAlign and originX for proper\n * experience.\n * some interesting link for the future\n * https://www.w3.org/International/questions/qa-bidi-unicode-controls\n * @since 4.5.0\n * @type {CanvasDirection} 'ltr|rtl'\n * @default\n */\n declare direction: CanvasDirection;\n\n /**\n * contains characters bounding boxes\n * This variable is considered to be protected.\n * But for how mixins are implemented right now, we can't leave it private\n * @protected\n */\n __charBounds: GraphemeBBox[][] = [];\n\n /**\n * use this size when measuring text. To avoid IE11 rounding errors\n * @type {Number}\n * @default\n * @readonly\n * @private\n */\n declare CACHE_FONT_SIZE: number;\n\n /**\n * contains the min text width to avoid getting 0\n * @type {Number}\n * @default\n */\n declare MIN_TEXT_WIDTH: number;\n\n /**\n * contains the the text of the object, divided in lines as they are displayed\n * on screen. Wrapping will divide the text independently of line breaks\n * @type {string[]}\n * @default\n */\n declare textLines: string[];\n\n /**\n * same as textlines, but each line is an array of graphemes as split by splitByGrapheme\n * @type {string[]}\n * @default\n */\n declare _textLines: string[][];\n\n declare _unwrappedTextLines: string[][];\n declare _text: string[];\n declare cursorWidth: number;\n declare __lineHeights: number[];\n declare __lineWidths: number[];\n declare initialized?: true;\n\n declare pathOffset: Point;\n\n static cacheProperties = [...cacheProperties, ...additionalProps];\n\n static ownDefaults = textDefaultValues;\n\n static type = 'Text';\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...FabricText.ownDefaults };\n }\n\n constructor(text: string, options?: Props) {\n super();\n Object.assign(this, FabricText.ownDefaults);\n this.setOptions(options);\n if (!this.styles) {\n this.styles = {};\n }\n this.text = text;\n this.initialized = true;\n if (this.path) {\n this.setPathInfo();\n }\n this.initDimensions();\n this.setCoords();\n }\n\n /**\n * If text has a path, it will add the extra information needed\n * for path and text calculations\n */\n setPathInfo() {\n const path = this.path;\n if (path) {\n path.segmentsInfo = getPathSegmentsInfo(path.path);\n }\n }\n\n /**\n * @private\n * Divides text into lines of text and lines of graphemes.\n */\n _splitText(): TextLinesInfo {\n const newLines = this._splitTextIntoLines(this.text);\n this.textLines = newLines.lines;\n this._textLines = newLines.graphemeLines;\n this._unwrappedTextLines = newLines._unwrappedLines;\n this._text = newLines.graphemeText;\n return newLines;\n }\n\n /**\n * Initialize or update text dimensions.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n */\n initDimensions() {\n this._splitText();\n this._clearCache();\n this.dirty = true;\n if (this.path) {\n this.calcTextWidth();\n // gets all the charboxes and transform by the path angle\n const points: Point[] = [];\n this.__charBounds.forEach((lineBoxes) => {\n lineBoxes.forEach(({ width, height, renderLeft, renderTop, angle }) => {\n const wBy2 = width / 2;\n const h = height * 0.75;\n const m = createRotateMatrix({ angle: radiansToDegrees(angle!) });\n m[4] = renderLeft!;\n m[5] = renderTop!;\n points.push(\n new Point(-wBy2, -h).transform(m),\n new Point(wBy2, -h).transform(m),\n new Point(wBy2, h).transform(m),\n new Point(-wBy2, h).transform(m),\n );\n });\n });\n const bbox = makeBoundingBoxFromPoints(points);\n this.pathOffset = new Point(\n bbox.width / 2 + bbox.left,\n bbox.height / 2 + bbox.top,\n );\n this.width = bbox.width;\n this.height = bbox.height;\n } else {\n this.width =\n this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH;\n this.height = this.calcTextHeight();\n this.pathOffset = new Point(0, 0);\n }\n if (this.textAlign.includes(JUSTIFY)) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n }\n\n /**\n * Enlarge space boxes and shift the others\n */\n enlargeSpaces() {\n let diffSpace,\n currentLineWidth,\n numberOfSpaces,\n accumulatedSpace,\n line,\n charBound,\n spaces;\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n if (\n this.textAlign !== JUSTIFY &&\n (i === len - 1 || this.isEndOfWrapping(i))\n ) {\n continue;\n }\n accumulatedSpace = 0;\n line = this._textLines[i];\n currentLineWidth = this.getLineWidth(i);\n if (\n currentLineWidth < this.width &&\n (spaces = this.textLines[i].match(this._reSpacesAndTabs))\n ) {\n numberOfSpaces = spaces.length;\n diffSpace = (this.width - currentLineWidth) / numberOfSpaces;\n for (let j = 0; j <= line.length; j++) {\n charBound = this.__charBounds[i][j];\n if (this._reSpaceAndTab.test(line[j])) {\n charBound.width += diffSpace;\n charBound.kernedWidth += diffSpace;\n charBound.left += accumulatedSpace;\n accumulatedSpace += diffSpace;\n } else {\n charBound.left += accumulatedSpace;\n }\n }\n }\n }\n }\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @return {Boolean}\n */\n isEndOfWrapping(lineIndex: number): boolean {\n return lineIndex === this._textLines.length - 1;\n }\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * It return always 1 for text and Itext. Textbox has its own implementation\n * @return Number\n */\n missingNewlineOffset(lineIndex: number, skipWrapping?: boolean): 0 | 1;\n missingNewlineOffset(_lineIndex: number): 1 {\n return 1;\n }\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor\n * @param {Number} selectionStart\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.\n */\n get2DCursorLocation(selectionStart: number, skipWrapping?: boolean) {\n const lines = skipWrapping ? this._unwrappedTextLines : this._textLines;\n let i: number;\n for (i = 0; i < lines.length; i++) {\n if (selectionStart <= lines[i].length) {\n return {\n lineIndex: i,\n charIndex: selectionStart,\n };\n }\n selectionStart -=\n lines[i].length + this.missingNewlineOffset(i, skipWrapping);\n }\n return {\n lineIndex: i - 1,\n charIndex:\n lines[i - 1].length < selectionStart\n ? lines[i - 1].length\n : selectionStart,\n };\n }\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of text object\n */\n toString(): string {\n return `#`;\n }\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @param {Object} dim.x width of object to be cached\n * @param {Object} dim.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions(): TCacheCanvasDimensions {\n const dims = super._getCacheCanvasDimensions();\n const fontSize = this.fontSize;\n dims.width += fontSize * dims.zoomX;\n dims.height += fontSize * dims.zoomY;\n return dims;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const path = this.path;\n ctx.translate(-this.pathOffset.x, -this.pathOffset.y);\n path && !path.isNotVisible() && path._render(ctx);\n this._setTextStyles(ctx);\n this._renderTextLinesBackground(ctx);\n this._renderTextDecoration(ctx, 'underline');\n this._renderText(ctx);\n this._renderTextDecoration(ctx, 'overline');\n this._renderTextDecoration(ctx, 'linethrough');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderText(ctx: CanvasRenderingContext2D) {\n if (this.paintFirst === STROKE) {\n this._renderTextStroke(ctx);\n this._renderTextFill(ctx);\n } else {\n this._renderTextFill(ctx);\n this._renderTextStroke(ctx);\n }\n }\n\n /**\n * Set the font parameter of the context with the object properties or with charStyle\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [charStyle] object with font style properties\n * @param {String} [charStyle.fontFamily] Font Family\n * @param {Number} [charStyle.fontSize] Font size in pixels. ( without px suffix )\n * @param {String} [charStyle.fontWeight] Font weight\n * @param {String} [charStyle.fontStyle] Font style (italic|normal)\n */\n _setTextStyles(\n ctx: CanvasRenderingContext2D,\n charStyle?: any,\n forMeasuring?: boolean,\n ) {\n ctx.textBaseline = 'alphabetic';\n if (this.path) {\n switch (this.pathAlign) {\n case CENTER:\n ctx.textBaseline = 'middle';\n break;\n case 'ascender':\n ctx.textBaseline = TOP;\n break;\n case 'descender':\n ctx.textBaseline = BOTTOM;\n break;\n }\n }\n ctx.font = this._getFontDeclaration(charStyle, forMeasuring);\n }\n\n /**\n * calculate and return the text Width measuring each line.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {Number} Maximum width of Text object\n */\n calcTextWidth(): number {\n let maxWidth = this.getLineWidth(0);\n\n for (let i = 1, len = this._textLines.length; i < len; i++) {\n const currentLineWidth = this.getLineWidth(i);\n if (currentLineWidth > maxWidth) {\n maxWidth = currentLineWidth;\n }\n }\n return maxWidth;\n }\n\n /**\n * @private\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} line Text to render\n * @param {Number} left Left position of text\n * @param {Number} top Top position of text\n * @param {Number} lineIndex Index of a line in a text\n */\n _renderTextLine(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n line: string[],\n left: number,\n top: number,\n lineIndex: number,\n ) {\n this._renderChars(method, ctx, line, left, top, lineIndex);\n }\n\n /**\n * Renders the text background for lines, taking care of style\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextLinesBackground(ctx: CanvasRenderingContext2D) {\n if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor')) {\n return;\n }\n const originalFill = ctx.fillStyle,\n leftOffset = this._getLeftOffset();\n let lineTopOffset = this._getTopOffset();\n\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i);\n if (\n !this.textBackgroundColor &&\n !this.styleHas('textBackgroundColor', i)\n ) {\n lineTopOffset += heightOfLine;\n continue;\n }\n const jlen = this._textLines[i].length;\n const lineLeftOffset = this._getLineLeftOffset(i);\n let boxWidth = 0;\n let boxStart = 0;\n let drawStart;\n let currentColor;\n let lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (let j = 0; j < jlen; j++) {\n // at this point charbox are either standard or full with pathInfo if there is a path.\n const charBox = this.__charBounds[i][j] as Required;\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (this.path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillStyle = currentColor;\n currentColor &&\n ctx.fillRect(\n -charBox.width / 2,\n (-heightOfLine / this.lineHeight) * (1 - this._fontSizeFraction),\n charBox.width,\n heightOfLine / this.lineHeight,\n );\n ctx.restore();\n } else if (currentColor !== lastColor) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = lastColor;\n lastColor &&\n ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight,\n );\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastColor = currentColor;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n }\n if (currentColor && !this.path) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentColor;\n ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight,\n );\n }\n lineTopOffset += heightOfLine;\n }\n ctx.fillStyle = originalFill;\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * measure and return the width of a single character.\n * possibly overridden to accommodate different measure logic or\n * to hook some external lib for character measurement\n * @private\n * @param {String} _char, char to be measured\n * @param {Object} charStyle style of char to be measured\n * @param {String} [previousChar] previous char\n * @param {Object} [prevCharStyle] style of previous char\n */\n _measureChar(\n _char: string,\n charStyle: CompleteTextStyleDeclaration,\n previousChar: string | undefined,\n prevCharStyle: CompleteTextStyleDeclaration | Record,\n ) {\n const fontCache = cache.getFontCache(charStyle),\n fontDeclaration = this._getFontDeclaration(charStyle),\n couple = previousChar + _char,\n stylesAreEqual =\n previousChar &&\n fontDeclaration === this._getFontDeclaration(prevCharStyle),\n fontMultiplier = charStyle.fontSize / this.CACHE_FONT_SIZE;\n let width: number | undefined,\n coupleWidth: number | undefined,\n previousWidth: number | undefined,\n kernedWidth: number | undefined;\n\n if (previousChar && fontCache[previousChar] !== undefined) {\n previousWidth = fontCache[previousChar];\n }\n if (fontCache[_char] !== undefined) {\n kernedWidth = width = fontCache[_char];\n }\n if (stylesAreEqual && fontCache[couple] !== undefined) {\n coupleWidth = fontCache[couple];\n kernedWidth = coupleWidth - previousWidth!;\n }\n if (\n width === undefined ||\n previousWidth === undefined ||\n coupleWidth === undefined\n ) {\n const ctx = getMeasuringContext()!;\n // send a TRUE to specify measuring font size CACHE_FONT_SIZE\n this._setTextStyles(ctx, charStyle, true);\n if (width === undefined) {\n kernedWidth = width = ctx.measureText(_char).width;\n fontCache[_char] = width;\n }\n if (previousWidth === undefined && stylesAreEqual && previousChar) {\n previousWidth = ctx.measureText(previousChar).width;\n fontCache[previousChar] = previousWidth;\n }\n if (stylesAreEqual && coupleWidth === undefined) {\n // we can measure the kerning couple and subtract the width of the previous character\n coupleWidth = ctx.measureText(couple).width;\n fontCache[couple] = coupleWidth;\n // safe to use the non-null since if undefined we defined it before.\n kernedWidth = coupleWidth - previousWidth!;\n }\n }\n return {\n width: width * fontMultiplier,\n kernedWidth: kernedWidth! * fontMultiplier,\n };\n }\n\n /**\n * Computes height of character at given position\n * @param {Number} line the line index number\n * @param {Number} _char the character index number\n * @return {Number} fontSize of the character\n */\n getHeightOfChar(line: number, _char: number): number {\n return this.getValueOfPropertyAt(line, _char, 'fontSize');\n }\n\n /**\n * measure a text line measuring all characters.\n * @param {Number} lineIndex line number\n */\n measureLine(lineIndex: number) {\n const lineInfo = this._measureLine(lineIndex);\n if (this.charSpacing !== 0) {\n lineInfo.width -= this._getWidthOfCharSpacing();\n }\n if (lineInfo.width < 0) {\n lineInfo.width = 0;\n }\n return lineInfo;\n }\n\n /**\n * measure every grapheme of a line, populating __charBounds\n * @param {Number} lineIndex\n * @return {Object} object.width total width of characters\n * @return {Object} object.numOfSpaces length of chars that match this._reSpacesAndTabs\n */\n _measureLine(lineIndex: number) {\n let width = 0,\n prevGrapheme: string | undefined,\n graphemeInfo: GraphemeBBox | undefined;\n\n const reverse = this.pathSide === RIGHT,\n path = this.path,\n line = this._textLines[lineIndex],\n llength = line.length,\n lineBounds = new Array(llength);\n this.__charBounds[lineIndex] = lineBounds;\n for (let i = 0; i < llength; i++) {\n const grapheme = line[i];\n graphemeInfo = this._getGraphemeBox(grapheme, lineIndex, i, prevGrapheme);\n lineBounds[i] = graphemeInfo;\n width += graphemeInfo.kernedWidth;\n prevGrapheme = grapheme;\n }\n // this latest bound box represent the last character of the line\n // to simplify cursor handling in interactive mode.\n lineBounds[llength] = {\n left: graphemeInfo ? graphemeInfo.left + graphemeInfo.width : 0,\n width: 0,\n kernedWidth: 0,\n height: this.fontSize,\n deltaY: 0,\n } as GraphemeBBox;\n if (path && path.segmentsInfo) {\n let positionInPath = 0;\n const totalPathLength =\n path.segmentsInfo[path.segmentsInfo.length - 1].length;\n switch (this.textAlign) {\n case LEFT:\n positionInPath = reverse ? totalPathLength - width : 0;\n break;\n case CENTER:\n positionInPath = (totalPathLength - width) / 2;\n break;\n case RIGHT:\n positionInPath = reverse ? 0 : totalPathLength - width;\n break;\n //todo - add support for justify\n }\n positionInPath += this.pathStartOffset * (reverse ? -1 : 1);\n for (\n let i = reverse ? llength - 1 : 0;\n reverse ? i >= 0 : i < llength;\n reverse ? i-- : i++\n ) {\n graphemeInfo = lineBounds[i];\n if (positionInPath > totalPathLength) {\n positionInPath %= totalPathLength;\n } else if (positionInPath < 0) {\n positionInPath += totalPathLength;\n }\n // it would probably much faster to send all the grapheme position for a line\n // and calculate path position/angle at once.\n this._setGraphemeOnPath(positionInPath, graphemeInfo);\n positionInPath += graphemeInfo.kernedWidth;\n }\n }\n return { width: width, numOfSpaces: 0 };\n }\n\n /**\n * Calculate the angle and the left,top position of the char that follow a path.\n * It appends it to graphemeInfo to be reused later at rendering\n * @private\n * @param {Number} positionInPath to be measured\n * @param {GraphemeBBox} graphemeInfo current grapheme box information\n * @param {Object} startingPoint position of the point\n */\n _setGraphemeOnPath(positionInPath: number, graphemeInfo: GraphemeBBox) {\n const centerPosition = positionInPath + graphemeInfo.kernedWidth / 2,\n path = this.path!;\n\n // we are at currentPositionOnPath. we want to know what point on the path is.\n const info = getPointOnPath(path.path, centerPosition, path.segmentsInfo)!;\n graphemeInfo.renderLeft = info.x - path.pathOffset.x;\n graphemeInfo.renderTop = info.y - path.pathOffset.y;\n graphemeInfo.angle = info.angle + (this.pathSide === RIGHT ? Math.PI : 0);\n }\n\n /**\n *\n * @param {String} grapheme to be measured\n * @param {Number} lineIndex index of the line where the char is\n * @param {Number} charIndex position in the line\n * @param {String} [prevGrapheme] character preceding the one to be measured\n * @returns {GraphemeBBox} grapheme bbox\n */\n _getGraphemeBox(\n grapheme: string,\n lineIndex: number,\n charIndex: number,\n prevGrapheme?: string,\n skipLeft?: boolean,\n ): GraphemeBBox {\n const style = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n prevStyle = prevGrapheme\n ? this.getCompleteStyleDeclaration(lineIndex, charIndex - 1)\n : {},\n info = this._measureChar(grapheme, style, prevGrapheme, prevStyle);\n let kernedWidth = info.kernedWidth,\n width = info.width,\n charSpacing;\n\n if (this.charSpacing !== 0) {\n charSpacing = this._getWidthOfCharSpacing();\n width += charSpacing;\n kernedWidth += charSpacing;\n }\n\n const box: GraphemeBBox = {\n width,\n left: 0,\n height: style.fontSize,\n kernedWidth,\n deltaY: style.deltaY,\n };\n if (charIndex > 0 && !skipLeft) {\n const previousBox = this.__charBounds[lineIndex][charIndex - 1];\n box.left =\n previousBox.left + previousBox.width + info.kernedWidth - info.width;\n }\n return box;\n }\n\n /**\n * Calculate height of line at 'lineIndex'\n * @param {Number} lineIndex index of line to calculate\n * @return {Number}\n */\n getHeightOfLine(lineIndex: number): number {\n if (this.__lineHeights[lineIndex]) {\n return this.__lineHeights[lineIndex];\n }\n\n // char 0 is measured before the line cycle because it needs to char\n // emptylines\n let maxHeight = this.getHeightOfChar(lineIndex, 0);\n for (let i = 1, len = this._textLines[lineIndex].length; i < len; i++) {\n maxHeight = Math.max(this.getHeightOfChar(lineIndex, i), maxHeight);\n }\n\n return (this.__lineHeights[lineIndex] =\n maxHeight * this.lineHeight * this._fontSizeMult);\n }\n\n /**\n * Calculate text box height\n */\n calcTextHeight() {\n let lineHeight,\n height = 0;\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n lineHeight = this.getHeightOfLine(i);\n height += i === len - 1 ? lineHeight / this.lineHeight : lineHeight;\n }\n return height;\n }\n\n /**\n * @private\n * @return {Number} Left offset\n */\n _getLeftOffset(): number {\n return this.direction === 'ltr' ? -this.width / 2 : this.width / 2;\n }\n\n /**\n * @private\n * @return {Number} Top offset\n */\n _getTopOffset(): number {\n return -this.height / 2;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n */\n _renderTextCommon(\n ctx: CanvasRenderingContext2D,\n method: 'fillText' | 'strokeText',\n ) {\n ctx.save();\n let lineHeights = 0;\n const left = this._getLeftOffset(),\n top = this._getTopOffset();\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i),\n maxHeight = heightOfLine / this.lineHeight,\n leftOffset = this._getLineLeftOffset(i);\n this._renderTextLine(\n method,\n ctx,\n this._textLines[i],\n left + leftOffset,\n top + lineHeights + maxHeight,\n i,\n );\n lineHeights += heightOfLine;\n }\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextFill(ctx: CanvasRenderingContext2D) {\n if (!this.fill && !this.styleHas(FILL)) {\n return;\n }\n\n this._renderTextCommon(ctx, 'fillText');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextStroke(ctx: CanvasRenderingContext2D) {\n if ((!this.stroke || this.strokeWidth === 0) && this.isEmptyStyles()) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n this._setLineDash(ctx, this.strokeDashArray);\n ctx.beginPath();\n this._renderTextCommon(ctx, 'strokeText');\n ctx.closePath();\n ctx.restore();\n }\n\n /**\n * @private\n * @param {String} method fillText or strokeText.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Array} line Content of the line, splitted in an array by grapheme\n * @param {Number} left\n * @param {Number} top\n * @param {Number} lineIndex\n */\n _renderChars(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n line: Array,\n left: number,\n top: number,\n lineIndex: number,\n ) {\n const lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.includes(JUSTIFY),\n path = this.path,\n shortCut =\n !isJustify &&\n this.charSpacing === 0 &&\n this.isEmptyStyles(lineIndex) &&\n !path,\n isLtr = this.direction === 'ltr',\n sign = this.direction === 'ltr' ? 1 : -1,\n // this was changed in the PR #7674\n // currentDirection = ctx.canvas.getAttribute('dir');\n currentDirection = ctx.direction;\n\n let actualStyle,\n nextStyle,\n charsToRender = '',\n charBox,\n boxWidth = 0,\n timeToRender,\n drawingLeft;\n\n ctx.save();\n if (currentDirection !== this.direction) {\n ctx.canvas.setAttribute('dir', isLtr ? 'ltr' : 'rtl');\n ctx.direction = isLtr ? 'ltr' : 'rtl';\n ctx.textAlign = isLtr ? LEFT : RIGHT;\n }\n top -= (lineHeight * this._fontSizeFraction) / this.lineHeight;\n if (shortCut) {\n // render all the line in one pass without checking\n // drawingLeft = isLtr ? left : left - this.getLineWidth(lineIndex);\n this._renderChar(method, ctx, lineIndex, 0, line.join(''), left, top);\n ctx.restore();\n return;\n }\n for (let i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing || path;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i] as Required;\n if (boxWidth === 0) {\n left += sign * (charBox.kernedWidth - charBox.width);\n boxWidth += charBox.width;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle =\n actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = hasStyleChanged(actualStyle, nextStyle, false);\n }\n if (timeToRender) {\n if (path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n this._renderChar(\n method,\n ctx,\n lineIndex,\n i,\n charsToRender,\n -boxWidth / 2,\n 0,\n );\n ctx.restore();\n } else {\n drawingLeft = left;\n this._renderChar(\n method,\n ctx,\n lineIndex,\n i,\n charsToRender,\n drawingLeft,\n top,\n );\n }\n charsToRender = '';\n actualStyle = nextStyle;\n left += sign * boxWidth;\n boxWidth = 0;\n }\n }\n ctx.restore();\n }\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {TFiller} filler a fabric gradient instance\n * @return {CanvasPattern} a pattern to use as fill/stroke style\n */\n _applyPatternGradientTransformText(filler: TFiller) {\n // TODO: verify compatibility with strokeUniform\n const width = this.width + this.strokeWidth,\n height = this.height + this.strokeWidth,\n pCanvas = createCanvasElementFor({\n width,\n height,\n }),\n pCtx = pCanvas.getContext('2d')!;\n pCanvas.width = width;\n pCanvas.height = height;\n pCtx.beginPath();\n pCtx.moveTo(0, 0);\n pCtx.lineTo(width, 0);\n pCtx.lineTo(width, height);\n pCtx.lineTo(0, height);\n pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.fillStyle = filler.toLive(pCtx)!;\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fill();\n return pCtx.createPattern(pCanvas, 'no-repeat')!;\n }\n\n handleFiller(\n ctx: CanvasRenderingContext2D,\n property: `${T}Style`,\n filler: TFiller | string,\n ): { offsetX: number; offsetY: number } {\n let offsetX: number, offsetY: number;\n if (isFiller(filler)) {\n if (\n (filler as Gradient<'linear'>).gradientUnits === 'percentage' ||\n (filler as Gradient<'linear'>).gradientTransform ||\n (filler as Pattern).patternTransform\n ) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n offsetX = -this.width / 2;\n offsetY = -this.height / 2;\n ctx.translate(offsetX, offsetY);\n ctx[property] = this._applyPatternGradientTransformText(filler);\n return { offsetX, offsetY };\n } else {\n // is a simple gradient or pattern\n ctx[property] = filler.toLive(ctx)!;\n return this._applyPatternGradientTransform(ctx, filler);\n }\n } else {\n // is a color\n ctx[property] = filler;\n }\n return { offsetX: 0, offsetY: 0 };\n }\n\n /**\n * This function prepare the canvas for a stroke style, and stroke and strokeWidth\n * need to be sent in as defined\n * @param {CanvasRenderingContext2D} ctx\n * @param {CompleteTextStyleDeclaration} style with stroke and strokeWidth defined\n * @returns\n */\n _setStrokeStyles(\n ctx: CanvasRenderingContext2D,\n {\n stroke,\n strokeWidth,\n }: Pick,\n ) {\n ctx.lineWidth = strokeWidth;\n ctx.lineCap = this.strokeLineCap;\n ctx.lineDashOffset = this.strokeDashOffset;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.miterLimit = this.strokeMiterLimit;\n return this.handleFiller(ctx, 'strokeStyle', stroke!);\n }\n\n /**\n * This function prepare the canvas for a ill style, and fill\n * need to be sent in as defined\n * @param {CanvasRenderingContext2D} ctx\n * @param {CompleteTextStyleDeclaration} style with ill defined\n * @returns\n */\n _setFillStyles(ctx: CanvasRenderingContext2D, { fill }: Pick) {\n return this.handleFiller(ctx, 'fillStyle', fill!);\n }\n\n /**\n * @private\n * @param {String} method\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {String} _char\n * @param {Number} left Left coordinate\n * @param {Number} top Top coordinate\n * @param {Number} lineHeight Height of the line\n */\n _renderChar(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n lineIndex: number,\n charIndex: number,\n _char: string,\n left: number,\n top: number,\n ) {\n const decl = this._getStyleDeclaration(lineIndex, charIndex),\n fullDecl = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n shouldFill = method === 'fillText' && fullDecl.fill,\n shouldStroke =\n method === 'strokeText' && fullDecl.stroke && fullDecl.strokeWidth;\n\n if (!shouldStroke && !shouldFill) {\n return;\n }\n ctx.save();\n\n ctx.font = this._getFontDeclaration(fullDecl);\n\n if (decl.textBackgroundColor) {\n this._removeShadow(ctx);\n }\n if (decl.deltaY) {\n top += decl.deltaY;\n }\n\n if (shouldFill) {\n const fillOffsets = this._setFillStyles(ctx, fullDecl);\n ctx.fillText(\n _char,\n left - fillOffsets.offsetX,\n top - fillOffsets.offsetY,\n );\n }\n\n if (shouldStroke) {\n const strokeOffsets = this._setStrokeStyles(ctx, fullDecl);\n ctx.strokeText(\n _char,\n left - strokeOffsets.offsetX,\n top - strokeOffsets.offsetY,\n );\n }\n\n ctx.restore();\n }\n\n /**\n * Turns the character into a 'superior figure' (i.e. 'superscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n */\n setSuperscript(start: number, end: number) {\n this._setScript(start, end, this.superscript);\n }\n\n /**\n * Turns the character into an 'inferior figure' (i.e. 'subscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n */\n setSubscript(start: number, end: number) {\n this._setScript(start, end, this.subscript);\n }\n\n /**\n * Applies 'schema' at given position\n * @private\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @param {Number} schema\n */\n protected _setScript(\n start: number,\n end: number,\n schema: {\n size: number;\n baseline: number;\n },\n ) {\n const loc = this.get2DCursorLocation(start, true),\n fontSize = this.getValueOfPropertyAt(\n loc.lineIndex,\n loc.charIndex,\n 'fontSize',\n ),\n dy = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'deltaY'),\n style = {\n fontSize: fontSize * schema.size,\n deltaY: dy + fontSize * schema.baseline,\n };\n this.setSelectionStyles(style, start, end);\n }\n\n /**\n * @private\n * @param {Number} lineIndex index text line\n * @return {Number} Line left offset\n */\n _getLineLeftOffset(lineIndex: number): number {\n const lineWidth = this.getLineWidth(lineIndex),\n lineDiff = this.width - lineWidth,\n textAlign = this.textAlign,\n direction = this.direction,\n isEndOfWrapping = this.isEndOfWrapping(lineIndex);\n let leftOffset = 0;\n if (\n textAlign === JUSTIFY ||\n (textAlign === JUSTIFY_CENTER && !isEndOfWrapping) ||\n (textAlign === JUSTIFY_RIGHT && !isEndOfWrapping) ||\n (textAlign === JUSTIFY_LEFT && !isEndOfWrapping)\n ) {\n return 0;\n }\n if (textAlign === CENTER) {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === RIGHT) {\n leftOffset = lineDiff;\n }\n if (textAlign === JUSTIFY_CENTER) {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === JUSTIFY_RIGHT) {\n leftOffset = lineDiff;\n }\n if (direction === 'rtl') {\n if (\n textAlign === RIGHT ||\n textAlign === JUSTIFY ||\n textAlign === JUSTIFY_RIGHT\n ) {\n leftOffset = 0;\n } else if (textAlign === LEFT || textAlign === JUSTIFY_LEFT) {\n leftOffset = -lineDiff;\n } else if (textAlign === CENTER || textAlign === JUSTIFY_CENTER) {\n leftOffset = -lineDiff / 2;\n }\n }\n return leftOffset;\n }\n\n /**\n * @private\n */\n _clearCache() {\n this._forceClearCache = false;\n this.__lineWidths = [];\n this.__lineHeights = [];\n this.__charBounds = [];\n }\n\n /**\n * Measure a single line given its index. Used to calculate the initial\n * text bounding box. The values are calculated and stored in __lineWidths cache.\n * @private\n * @param {Number} lineIndex line number\n * @return {Number} Line width\n */\n getLineWidth(lineIndex: number): number {\n if (this.__lineWidths[lineIndex] !== undefined) {\n return this.__lineWidths[lineIndex];\n }\n\n const { width } = this.measureLine(lineIndex);\n this.__lineWidths[lineIndex] = width;\n return width;\n }\n\n _getWidthOfCharSpacing() {\n if (this.charSpacing !== 0) {\n return (this.fontSize * this.charSpacing) / 1000;\n }\n return 0;\n }\n\n /**\n * Retrieves the value of property at given character position\n * @param {Number} lineIndex the line number\n * @param {Number} charIndex the character number\n * @param {String} property the property name\n * @returns the value of 'property'\n */\n getValueOfPropertyAt(\n lineIndex: number,\n charIndex: number,\n property: T,\n ): this[T] {\n const charStyle = this._getStyleDeclaration(lineIndex, charIndex);\n return (charStyle[property] ?? this[property]) as this[T];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextDecoration(\n ctx: CanvasRenderingContext2D,\n type: 'underline' | 'linethrough' | 'overline',\n ) {\n if (!this[type] && !this.styleHas(type)) {\n return;\n }\n let topOffset = this._getTopOffset();\n const leftOffset = this._getLeftOffset(),\n path = this.path,\n charSpacing = this._getWidthOfCharSpacing(),\n offsetY = this.offsets[type];\n\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i);\n if (!this[type] && !this.styleHas(type, i)) {\n topOffset += heightOfLine;\n continue;\n }\n const line = this._textLines[i];\n const maxHeight = heightOfLine / this.lineHeight;\n const lineLeftOffset = this._getLineLeftOffset(i);\n let boxStart = 0;\n let boxWidth = 0;\n let lastDecoration = this.getValueOfPropertyAt(i, 0, type);\n let lastFill = this.getValueOfPropertyAt(i, 0, FILL);\n let currentDecoration;\n let currentFill;\n const top = topOffset + maxHeight * (1 - this._fontSizeFraction);\n let size = this.getHeightOfChar(i, 0);\n let dy = this.getValueOfPropertyAt(i, 0, 'deltaY');\n for (let j = 0, jlen = line.length; j < jlen; j++) {\n const charBox = this.__charBounds[i][j] as Required;\n currentDecoration = this.getValueOfPropertyAt(i, j, type);\n currentFill = this.getValueOfPropertyAt(i, j, FILL);\n const currentSize = this.getHeightOfChar(i, j);\n const currentDy = this.getValueOfPropertyAt(i, j, 'deltaY');\n if (path && currentDecoration && currentFill) {\n ctx.save();\n // bug? verify lastFill is a valid fill here.\n ctx.fillStyle = lastFill as string;\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillRect(\n -charBox.kernedWidth / 2,\n offsetY * currentSize + currentDy,\n charBox.kernedWidth,\n this.fontSize / 15,\n );\n ctx.restore();\n } else if (\n (currentDecoration !== lastDecoration ||\n currentFill !== lastFill ||\n currentSize !== size ||\n currentDy !== dy) &&\n boxWidth > 0\n ) {\n let drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n if (lastDecoration && lastFill) {\n // bug? verify lastFill is a valid fill here.\n ctx.fillStyle = lastFill as string;\n ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth,\n this.fontSize / 15,\n );\n }\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastDecoration = currentDecoration;\n lastFill = currentFill;\n size = currentSize;\n dy = currentDy;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n }\n let drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentFill as string;\n currentDecoration &&\n currentFill &&\n ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth - charSpacing,\n this.fontSize / 15,\n );\n topOffset += heightOfLine;\n }\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * return font declaration string for canvas context\n * @param {Object} [styleObject] object\n * @returns {String} font declaration formatted for canvas context.\n */\n _getFontDeclaration(\n {\n fontFamily = this.fontFamily,\n fontStyle = this.fontStyle,\n fontWeight = this.fontWeight,\n fontSize = this.fontSize,\n }: Partial<\n Pick<\n TextStyleDeclaration,\n 'fontFamily' | 'fontStyle' | 'fontWeight' | 'fontSize'\n >\n > = {},\n forMeasuring?: boolean,\n ): string {\n const parsedFontFamily =\n fontFamily.includes(\"'\") ||\n fontFamily.includes('\"') ||\n fontFamily.includes(',') ||\n FabricText.genericFonts.includes(fontFamily.toLowerCase())\n ? fontFamily\n : `\"${fontFamily}\"`;\n return [\n fontStyle,\n fontWeight,\n `${forMeasuring ? this.CACHE_FONT_SIZE : fontSize}px`,\n parsedFontFamily,\n ].join(' ');\n }\n\n /**\n * Renders text instance on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n if (!this.visible) {\n return;\n }\n if (\n this.canvas &&\n this.canvas.skipOffscreen &&\n !this.group &&\n !this.isOnScreen()\n ) {\n return;\n }\n if (this._forceClearCache) {\n this.initDimensions();\n }\n super.render(ctx);\n }\n\n /**\n * Override this method to customize grapheme splitting\n * @todo the util `graphemeSplit` needs to be injectable in some way.\n * is more comfortable to inject the correct util rather than having to override text\n * in the middle of the prototype chain\n * @param {string} value\n * @returns {string[]} array of graphemes\n */\n graphemeSplit(value: string): string[] {\n return graphemeSplit(value);\n }\n\n /**\n * Returns the text as an array of lines.\n * @param {String} text text to split\n * @returns Lines in the text\n */\n _splitTextIntoLines(text: string): TextLinesInfo {\n const lines = text.split(this._reNewline),\n newLines = new Array(lines.length),\n newLine = ['\\n'];\n let newText: string[] = [];\n for (let i = 0; i < lines.length; i++) {\n newLines[i] = this.graphemeSplit(lines[i]);\n newText = newText.concat(newLines[i], newLine);\n }\n newText.pop();\n return {\n _unwrappedLines: newLines,\n lines: lines,\n graphemeText: newText,\n graphemeLines: newLines,\n };\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return {\n ...super.toObject([...additionalProps, ...propertiesToInclude] as K[]),\n styles: stylesToArray(this.styles, this.text),\n ...(this.path ? { path: this.path.toObject() } : {}),\n };\n }\n\n set(key: string | any, value?: any) {\n const { textLayoutProperties } = this.constructor as typeof FabricText;\n super.set(key, value);\n let needsDims = false;\n let isAddingPath = false;\n if (typeof key === 'object') {\n for (const _key in key) {\n if (_key === 'path') {\n this.setPathInfo();\n }\n needsDims = needsDims || textLayoutProperties.includes(_key);\n isAddingPath = isAddingPath || _key === 'path';\n }\n } else {\n needsDims = textLayoutProperties.includes(key);\n isAddingPath = key === 'path';\n }\n if (isAddingPath) {\n this.setPathInfo();\n }\n if (needsDims && this.initialized) {\n this.initDimensions();\n this.setCoords();\n }\n return this;\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity\n */\n complexity(): number {\n return 1;\n }\n\n /**\n * List of generic font families\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/font-family#generic-name\n */\n static genericFonts = [\n 'serif',\n 'sans-serif',\n 'monospace',\n 'cursive',\n 'fantasy',\n 'system-ui',\n 'ui-serif',\n 'ui-sans-serif',\n 'ui-monospace',\n 'ui-rounded',\n 'math',\n 'emoji',\n 'fangsong',\n ];\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link FabricText.fromElement})\n * @static\n * @memberOf Text\n * @see: http://www.w3.org/TR/SVG/text.html#TextElement\n */\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(\n 'x',\n 'y',\n 'dx',\n 'dy',\n 'font-family',\n 'font-style',\n 'font-weight',\n 'font-size',\n 'letter-spacing',\n 'text-decoration',\n 'text-anchor',\n );\n\n /**\n * Returns FabricText instance from an SVG element (not yet implemented)\n * @static\n * @memberOf Text\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const parsedAttributes = parseAttributes(\n element,\n FabricText.ATTRIBUTE_NAMES,\n cssRules,\n );\n\n const {\n textAnchor = LEFT as typeof LEFT | typeof CENTER | typeof RIGHT,\n textDecoration = '',\n dx = 0,\n dy = 0,\n top = 0,\n left = 0,\n fontSize = DEFAULT_SVG_FONT_SIZE,\n strokeWidth = 1,\n ...restOfOptions\n } = { ...options, ...parsedAttributes };\n\n const textContent = (element.textContent || '')\n .replace(/^\\s+|\\s+$|\\n+/g, '')\n .replace(/\\s+/g, ' ');\n\n // this code here is probably the usual issue for SVG center find\n // this can later looked at again and probably removed.\n\n const text = new this(textContent, {\n left: left + dx,\n top: top + dy,\n underline: textDecoration.includes('underline'),\n overline: textDecoration.includes('overline'),\n linethrough: textDecoration.includes('line-through'),\n // we initialize this as 0\n strokeWidth: 0,\n fontSize,\n ...restOfOptions,\n }),\n textHeightScaleFactor = text.getScaledHeight() / text.height,\n lineHeightDiff =\n (text.height + text.strokeWidth) * text.lineHeight - text.height,\n scaledDiff = lineHeightDiff * textHeightScaleFactor,\n textHeight = text.getScaledHeight() + scaledDiff;\n\n let offX = 0;\n /*\n Adjust positioning:\n x/y attributes in SVG correspond to the bottom-left corner of text bounding box\n fabric output by default at top, left.\n */\n if (textAnchor === CENTER) {\n offX = text.getScaledWidth() / 2;\n }\n if (textAnchor === RIGHT) {\n offX = text.getScaledWidth();\n }\n text.set({\n left: text.left - offX,\n top:\n text.top -\n (textHeight - text.fontSize * (0.07 + text._fontSizeFraction)) /\n text.lineHeight,\n strokeWidth,\n });\n return text;\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns FabricText instance from an object representation\n * @param {Object} object plain js Object to create an instance from\n * @returns {Promise}\n */\n static fromObject<\n T extends TOptions,\n S extends FabricText,\n >(object: T) {\n return this._fromObject(\n {\n ...object,\n styles: stylesFromArray(object.styles || {}, object.text),\n },\n {\n extraParam: 'text',\n },\n );\n }\n}\n\napplyMixins(FabricText, [TextSVGExportMixin]);\nclassRegistry.setClass(FabricText);\nclassRegistry.setSVGClass(FabricText);\n","import type {\n DragEventData,\n DropEventData,\n TPointerEvent,\n} from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport type { IText } from './IText';\nimport { setStyle } from '../../util/dom_style';\nimport { cloneStyles } from '../../util/internals/cloneStyles';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { CHANGED, NONE } from '../../constants';\n\n/**\n * #### Dragging IText/Textbox Lifecycle\n * - {@link start} is called from `mousedown` {@link IText#_mouseDownHandler} and determines if dragging should start by testing {@link isPointerOverSelection}\n * - if true `mousedown` {@link IText#_mouseDownHandler} is blocked to keep selection\n * - if the pointer moves, canvas fires numerous mousemove {@link Canvas#_onMouseMove} that we make sure **aren't** prevented ({@link IText#shouldStartDragging}) in order for the window to start a drag session\n * - once/if the session starts canvas calls {@link onDragStart} on the active object to determine if dragging should occur\n * - canvas fires relevant drag events that are handled by the handlers defined in this scope\n * - {@link end} is called from `mouseup` {@link IText#mouseUpHandler}, blocking IText default click behavior\n * - in case the drag session didn't occur, {@link end} handles a click, since logic to do so was blocked during `mousedown`\n */\nexport class DraggableTextDelegate {\n readonly target: IText;\n private __mouseDownInPlace = false;\n private __dragStartFired = false;\n private __isDraggingOver = false;\n private __dragStartSelection?: {\n selectionStart: number;\n selectionEnd: number;\n };\n private __dragImageDisposer?: VoidFunction;\n private _dispose?: () => void;\n\n constructor(target: IText) {\n this.target = target;\n const disposers = [\n this.target.on('dragenter', this.dragEnterHandler.bind(this)),\n this.target.on('dragover', this.dragOverHandler.bind(this)),\n this.target.on('dragleave', this.dragLeaveHandler.bind(this)),\n this.target.on('dragend', this.dragEndHandler.bind(this)),\n this.target.on('drop', this.dropHandler.bind(this)),\n ];\n this._dispose = () => {\n disposers.forEach((d) => d());\n this._dispose = undefined;\n };\n }\n\n isPointerOverSelection(e: TPointerEvent) {\n const target = this.target;\n const newSelection = target.getSelectionStartFromPointer(e);\n return (\n target.isEditing &&\n newSelection >= target.selectionStart &&\n newSelection <= target.selectionEnd &&\n target.selectionStart < target.selectionEnd\n );\n }\n\n /**\n * @public override this method to disable dragging and default to mousedown logic\n */\n start(e: TPointerEvent) {\n return (this.__mouseDownInPlace = this.isPointerOverSelection(e));\n }\n\n /**\n * @public override this method to disable dragging without discarding selection\n */\n isActive() {\n return this.__mouseDownInPlace;\n }\n\n /**\n * Ends interaction and sets cursor in case of a click\n * @returns true if was active\n */\n end(e: TPointerEvent) {\n const active = this.isActive();\n if (active && !this.__dragStartFired) {\n // mousedown has been blocked since `active` is true => cursor has not been set.\n // `__dragStartFired` is false => dragging didn't occur, pointer didn't move and is over selection.\n // meaning this is actually a click, `active` is a false positive.\n this.target.setCursorByClick(e);\n this.target.initDelayedCursor(true);\n }\n this.__mouseDownInPlace = false;\n this.__dragStartFired = false;\n this.__isDraggingOver = false;\n return active;\n }\n\n getDragStartSelection() {\n return this.__dragStartSelection;\n }\n\n /**\n * Override to customize the drag image\n * https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/setDragImage\n */\n setDragImage(\n e: DragEvent,\n {\n selectionStart,\n selectionEnd,\n }: {\n selectionStart: number;\n selectionEnd: number;\n },\n ) {\n const target = this.target;\n const canvas = target.canvas!;\n const flipFactor = new Point(target.flipX ? -1 : 1, target.flipY ? -1 : 1);\n const boundaries = target._getCursorBoundaries(selectionStart);\n const selectionPosition = new Point(\n boundaries.left + boundaries.leftOffset,\n boundaries.top + boundaries.topOffset,\n ).multiply(flipFactor);\n const pos = selectionPosition.transform(target.calcTransformMatrix());\n const pointer = canvas.getScenePoint(e);\n const diff = pointer.subtract(pos);\n const retinaScaling = target.getCanvasRetinaScaling();\n const bbox = target.getBoundingRect();\n const correction = pos.subtract(new Point(bbox.left, bbox.top));\n const vpt = canvas.viewportTransform;\n const offset = correction.add(diff).transform(vpt, true);\n // prepare instance for drag image snapshot by making all non selected text invisible\n const bgc = target.backgroundColor;\n const styles = cloneStyles(target.styles);\n target.backgroundColor = '';\n const styleOverride = {\n stroke: 'transparent',\n fill: 'transparent',\n textBackgroundColor: 'transparent',\n };\n target.setSelectionStyles(styleOverride, 0, selectionStart);\n target.setSelectionStyles(styleOverride, selectionEnd, target.text.length);\n target.dirty = true;\n const dragImage = target.toCanvasElement({\n enableRetinaScaling: canvas.enableRetinaScaling,\n viewportTransform: true,\n });\n // restore values\n target.backgroundColor = bgc;\n target.styles = styles;\n target.dirty = true;\n // position drag image offscreen\n setStyle(dragImage, {\n position: 'fixed',\n left: `${-dragImage.width}px`,\n border: NONE,\n width: `${dragImage.width / retinaScaling}px`,\n height: `${dragImage.height / retinaScaling}px`,\n });\n this.__dragImageDisposer && this.__dragImageDisposer();\n this.__dragImageDisposer = () => {\n dragImage.remove();\n };\n getDocumentFromElement(\n (e.target || this.target.hiddenTextarea)! as HTMLElement,\n ).body.appendChild(dragImage);\n e.dataTransfer?.setDragImage(dragImage, offset.x, offset.y);\n }\n\n /**\n * @returns {boolean} determines whether {@link target} should/shouldn't become a drag source\n */\n onDragStart(e: DragEvent): boolean {\n this.__dragStartFired = true;\n const target = this.target;\n const active = this.isActive();\n if (active && e.dataTransfer) {\n const selection = (this.__dragStartSelection = {\n selectionStart: target.selectionStart,\n selectionEnd: target.selectionEnd,\n });\n const value = target._text\n .slice(selection.selectionStart, selection.selectionEnd)\n .join('');\n const data = { text: target.text, value, ...selection };\n e.dataTransfer.setData('text/plain', value);\n e.dataTransfer.setData(\n 'application/fabric',\n JSON.stringify({\n value: value,\n styles: target.getSelectionStyles(\n selection.selectionStart,\n selection.selectionEnd,\n true,\n ),\n }),\n );\n e.dataTransfer.effectAllowed = 'copyMove';\n this.setDragImage(e, data);\n }\n target.abortCursorAnimation();\n return active;\n }\n\n /**\n * use {@link targetCanDrop} to respect overriding\n * @returns {boolean} determines whether {@link target} should/shouldn't become a drop target\n */\n canDrop(e: DragEvent): boolean {\n if (\n this.target.editable &&\n !this.target.getActiveControl() &&\n !e.defaultPrevented\n ) {\n if (this.isActive() && this.__dragStartSelection) {\n // drag source trying to drop over itself\n // allow dropping only outside of drag start selection\n const index = this.target.getSelectionStartFromPointer(e);\n const dragStartSelection = this.__dragStartSelection;\n return (\n index < dragStartSelection.selectionStart ||\n index > dragStartSelection.selectionEnd\n );\n }\n return true;\n }\n return false;\n }\n\n /**\n * in order to respect overriding {@link IText#canDrop} we call that instead of calling {@link canDrop} directly\n */\n protected targetCanDrop(e: DragEvent) {\n return this.target.canDrop(e);\n }\n\n dragEnterHandler({ e }: DragEventData) {\n const canDrop = this.targetCanDrop(e);\n if (!this.__isDraggingOver && canDrop) {\n this.__isDraggingOver = true;\n }\n }\n\n dragOverHandler(ev: DragEventData) {\n const { e } = ev;\n const canDrop = this.targetCanDrop(e);\n if (!this.__isDraggingOver && canDrop) {\n this.__isDraggingOver = true;\n } else if (this.__isDraggingOver && !canDrop) {\n // drop state has changed\n this.__isDraggingOver = false;\n }\n if (this.__isDraggingOver) {\n // can be dropped, inform browser\n e.preventDefault();\n // inform event subscribers\n ev.canDrop = true;\n ev.dropTarget = this.target;\n }\n }\n\n dragLeaveHandler() {\n if (this.__isDraggingOver || this.isActive()) {\n this.__isDraggingOver = false;\n }\n }\n\n /**\n * Override the `text/plain | application/fabric` types of {@link DragEvent#dataTransfer}\n * in order to change the drop value or to customize styling respectively, by listening to the `drop:before` event\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#performing_a_drop\n */\n dropHandler(ev: DropEventData) {\n const { e } = ev;\n const didDrop = e.defaultPrevented;\n this.__isDraggingOver = false;\n // inform browser that the drop has been accepted\n e.preventDefault();\n let insert = e.dataTransfer?.getData('text/plain');\n if (insert && !didDrop) {\n const target = this.target;\n const canvas = target.canvas!;\n let insertAt = target.getSelectionStartFromPointer(e);\n const { styles } = (\n e.dataTransfer!.types.includes('application/fabric')\n ? JSON.parse(e.dataTransfer!.getData('application/fabric'))\n : {}\n ) as { styles: TextStyleDeclaration[] };\n const trailing = insert[Math.max(0, insert.length - 1)];\n const selectionStartOffset = 0;\n // drag and drop in same instance\n if (this.__dragStartSelection) {\n const selectionStart = this.__dragStartSelection.selectionStart;\n const selectionEnd = this.__dragStartSelection.selectionEnd;\n if (insertAt > selectionStart && insertAt <= selectionEnd) {\n insertAt = selectionStart;\n } else if (insertAt > selectionEnd) {\n insertAt -= selectionEnd - selectionStart;\n }\n target.removeChars(selectionStart, selectionEnd);\n // prevent `dragend` from handling event\n delete this.__dragStartSelection;\n }\n // remove redundant line break\n if (\n target._reNewline.test(trailing) &&\n (target._reNewline.test(target._text[insertAt]) ||\n insertAt === target._text.length)\n ) {\n insert = insert.trimEnd();\n }\n // inform subscribers\n ev.didDrop = true;\n ev.dropTarget = target;\n // finalize\n target.insertChars(insert, styles, insertAt);\n // can this part be moved in an outside event? andrea to check.\n canvas.setActiveObject(target);\n target.enterEditing(e);\n target.selectionStart = Math.min(\n insertAt + selectionStartOffset,\n target._text.length,\n );\n target.selectionEnd = Math.min(\n target.selectionStart + insert.length,\n target._text.length,\n );\n target.hiddenTextarea!.value = target.text;\n target._updateTextarea();\n target.hiddenTextarea!.focus();\n target.fire(CHANGED, {\n index: insertAt + selectionStartOffset,\n action: 'drop',\n });\n canvas.fire('text:changed', { target });\n canvas.contextTopDirty = true;\n canvas.requestRenderAll();\n }\n }\n\n /**\n * fired only on the drag source after drop (if occurred)\n * handle changes to the drag source in case of a drop on another object or a cancellation\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#finishing_a_drag\n */\n dragEndHandler({ e }: DragEventData) {\n if (this.isActive() && this.__dragStartFired) {\n // once the drop event finishes we check if we need to change the drag source\n // if the drag source received the drop we bail out since the drop handler has already handled logic\n if (this.__dragStartSelection) {\n const target = this.target;\n const canvas = this.target.canvas!;\n const { selectionStart, selectionEnd } = this.__dragStartSelection;\n const dropEffect = e.dataTransfer?.dropEffect || NONE;\n if (dropEffect === NONE) {\n // pointer is back over selection\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n target._updateTextarea();\n target.hiddenTextarea!.focus();\n } else {\n target.clearContextTop();\n if (dropEffect === 'move') {\n target.removeChars(selectionStart, selectionEnd);\n target.selectionStart = target.selectionEnd = selectionStart;\n target.hiddenTextarea &&\n (target.hiddenTextarea.value = target.text);\n target._updateTextarea();\n target.fire(CHANGED, {\n index: selectionStart,\n action: 'dragend',\n });\n canvas.fire('text:changed', { target });\n canvas.requestRenderAll();\n }\n target.exitEditing();\n }\n }\n }\n\n this.__dragImageDisposer && this.__dragImageDisposer();\n delete this.__dragImageDisposer;\n delete this.__dragStartSelection;\n this.__isDraggingOver = false;\n }\n\n dispose() {\n this._dispose && this._dispose();\n }\n}\n","import type {\n ObjectEvents,\n TPointerEvent,\n TPointerEventInfo,\n} from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport type { FabricObject } from '../Object/FabricObject';\nimport { FabricText } from '../Text/Text';\nimport { animate } from '../../util/animation/animate';\nimport type { TOnAnimationChangeCallback } from '../../util/animation/types';\nimport type { ValueAnimation } from '../../util/animation/ValueAnimation';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\nimport type { SerializedTextProps, TextProps } from '../Text/Text';\nimport type { TOptions } from '../../typedefs';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { LEFT, MODIFIED, RIGHT, reNewline } from '../../constants';\nimport type { IText } from './IText';\n\n/**\n * extend this regex to support non english languages\n *\n * - ` ` Matches a SPACE character (char code 32).\n * - `\\n` Matches a LINE FEED character (char code 10).\n * - `\\.` Matches a \".\" character (char code 46).\n * - `,` Matches a \",\" character (char code 44).\n * - `;` Matches a \";\" character (char code 59).\n * - `!` Matches a \"!\" character (char code 33).\n * - `\\?` Matches a \"?\" character (char code 63).\n * - `\\-` Matches a \"-\" character (char code 45).\n */\n// eslint-disable-next-line no-useless-escape\nconst reNonWord = /[ \\n\\.,;!\\?\\-]/;\n\nexport type ITextEvents = ObjectEvents & {\n 'selection:changed': never;\n changed: never | { index: number; action: string };\n tripleclick: TPointerEventInfo;\n 'editing:entered': never | { e: TPointerEvent };\n 'editing:exited': never;\n};\n\nexport abstract class ITextBehavior<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ITextEvents = ITextEvents,\n> extends FabricText {\n declare abstract isEditing: boolean;\n declare abstract cursorDelay: number;\n declare abstract selectionStart: number;\n declare abstract selectionEnd: number;\n declare abstract cursorDuration: number;\n declare abstract editable: boolean;\n declare abstract editingBorderColor: string;\n\n declare abstract compositionStart: number;\n declare abstract compositionEnd: number;\n\n declare abstract hiddenTextarea: HTMLTextAreaElement | null;\n\n /**\n * Helps determining when the text is in composition, so that the cursor\n * rendering is altered.\n */\n protected declare inCompositionMode: boolean;\n\n protected declare _reSpace: RegExp;\n private declare _currentTickState?: ValueAnimation;\n private declare _currentTickCompleteState?: ValueAnimation;\n protected _currentCursorOpacity = 1;\n private declare _textBeforeEdit: string;\n protected declare __selectionStartOnMouseDown: number;\n\n protected declare selected: boolean;\n protected declare cursorOffsetCache: { left?: number; top?: number };\n protected declare _savedProps?: {\n hasControls: boolean;\n borderColor: string;\n lockMovementX: boolean;\n lockMovementY: boolean;\n selectable: boolean;\n hoverCursor: CSSStyleDeclaration['cursor'] | null;\n defaultCursor?: CSSStyleDeclaration['cursor'];\n moveCursor?: CSSStyleDeclaration['cursor'];\n };\n protected declare _selectionDirection: 'left' | 'right' | null;\n\n abstract initHiddenTextarea(): void;\n abstract _fireSelectionChanged(): void;\n abstract renderCursorOrSelection(): void;\n abstract getSelectionStartFromPointer(e: TPointerEvent): number;\n abstract _getCursorBoundaries(\n index: number,\n skipCaching?: boolean,\n ): {\n left: number;\n top: number;\n leftOffset: number;\n topOffset: number;\n };\n\n /**\n * Initializes all the interactive behavior of IText\n */\n initBehavior() {\n this._tick = this._tick.bind(this);\n this._onTickComplete = this._onTickComplete.bind(this);\n this.updateSelectionOnMouseMove =\n this.updateSelectionOnMouseMove.bind(this);\n }\n\n onDeselect(options?: { e?: TPointerEvent; object?: FabricObject }) {\n this.isEditing && this.exitEditing();\n this.selected = false;\n return super.onDeselect(options);\n }\n\n /**\n * @private\n */\n _animateCursor({\n toValue,\n duration,\n delay,\n onComplete,\n }: {\n toValue: number;\n duration: number;\n delay?: number;\n onComplete?: TOnAnimationChangeCallback;\n }) {\n return animate({\n startValue: this._currentCursorOpacity,\n endValue: toValue,\n duration,\n delay,\n onComplete,\n abort: () =>\n !this.canvas ||\n // we do not want to animate a selection, only cursor\n this.selectionStart !== this.selectionEnd,\n onChange: (value) => {\n this._currentCursorOpacity = value;\n this.renderCursorOrSelection();\n },\n });\n }\n\n /**\n * changes the cursor from visible to invisible\n */\n private _tick(delay?: number) {\n this._currentTickState = this._animateCursor({\n toValue: 0,\n duration: this.cursorDuration / 2,\n delay: Math.max(delay || 0, 100),\n onComplete: this._onTickComplete,\n });\n }\n\n /**\n * Changes the cursor from invisible to visible\n */\n private _onTickComplete() {\n this._currentTickCompleteState?.abort();\n this._currentTickCompleteState = this._animateCursor({\n toValue: 1,\n duration: this.cursorDuration,\n onComplete: this._tick,\n });\n }\n\n /**\n * Initializes delayed cursor\n */\n initDelayedCursor(restart?: boolean) {\n this.abortCursorAnimation();\n this._tick(restart ? 0 : this.cursorDelay);\n }\n\n /**\n * Aborts cursor animation, clears all timeouts and clear textarea context if necessary\n */\n abortCursorAnimation() {\n let shouldClear = false;\n [this._currentTickState, this._currentTickCompleteState].forEach(\n (cursorAnimation) => {\n if (cursorAnimation && !cursorAnimation.isDone()) {\n shouldClear = true;\n cursorAnimation.abort();\n }\n },\n );\n\n this._currentCursorOpacity = 1;\n\n // make sure we clear context even if instance is not editing\n if (shouldClear) {\n this.clearContextTop();\n }\n }\n\n /**\n * Restart tue cursor animation if either is in complete state ( between animations )\n * or if it never started before\n */\n restartCursorIfNeeded() {\n if (\n [this._currentTickState, this._currentTickCompleteState].some(\n (cursorAnimation) => !cursorAnimation || cursorAnimation.isDone(),\n )\n ) {\n this.initDelayedCursor();\n }\n }\n\n /**\n * Selects entire text\n */\n selectAll() {\n this.selectionStart = 0;\n this.selectionEnd = this._text.length;\n this._fireSelectionChanged();\n this._updateTextarea();\n return this;\n }\n\n /**\n * Returns selected text\n * @return {String}\n */\n getSelectedText(): string {\n return this._text.slice(this.selectionStart, this.selectionEnd).join('');\n }\n\n /**\n * Find new selection index representing start of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryLeft(startFrom: number): number {\n let offset = 0,\n index = startFrom - 1;\n\n // remove space before cursor first\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index--;\n }\n }\n while (/\\S/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n }\n\n /**\n * Find new selection index representing end of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryRight(startFrom: number): number {\n let offset = 0,\n index = startFrom;\n\n // remove space after cursor first\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index++;\n }\n }\n while (/\\S/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n }\n\n /**\n * Find new selection index representing start of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryLeft(startFrom: number): number {\n let offset = 0,\n index = startFrom - 1;\n\n while (!/\\n/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n }\n\n /**\n * Find new selection index representing end of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryRight(startFrom: number): number {\n let offset = 0,\n index = startFrom;\n\n while (!/\\n/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n }\n\n /**\n * Finds index corresponding to beginning or end of a word\n * @param {Number} selectionStart Index of a character\n * @param {Number} direction 1 or -1\n * @return {Number} Index of the beginning or end of a word\n */\n searchWordBoundary(selectionStart: number, direction: 1 | -1): number {\n const text = this._text;\n // if we land on a space we move the cursor backwards\n // if we are searching boundary end we move the cursor backwards ONLY if we don't land on a line break\n let index =\n selectionStart > 0 &&\n this._reSpace.test(text[selectionStart]) &&\n (direction === -1 || !reNewline.test(text[selectionStart - 1]))\n ? selectionStart - 1\n : selectionStart,\n _char = text[index];\n while (index > 0 && index < text.length && !reNonWord.test(_char)) {\n index += direction;\n _char = text[index];\n }\n if (direction === -1 && reNonWord.test(_char)) {\n index++;\n }\n return index;\n }\n\n /**\n * TODO fix: selectionStart set as 0 will be ignored?\n * Selects a word based on the index\n * @param {Number} selectionStart Index of a character\n */\n selectWord(selectionStart?: number) {\n selectionStart = selectionStart || this.selectionStart;\n // search backwards\n const newSelectionStart = this.searchWordBoundary(selectionStart, -1),\n // search forward\n newSelectionEnd = Math.max(\n newSelectionStart,\n this.searchWordBoundary(selectionStart, 1),\n );\n\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n this._fireSelectionChanged();\n this._updateTextarea();\n this.renderCursorOrSelection();\n }\n\n /**\n * TODO fix: selectionStart set as 0 will be ignored?\n * Selects a line based on the index\n * @param {Number} selectionStart Index of a character\n */\n selectLine(selectionStart?: number) {\n selectionStart = selectionStart || this.selectionStart;\n const newSelectionStart = this.findLineBoundaryLeft(selectionStart),\n newSelectionEnd = this.findLineBoundaryRight(selectionStart);\n\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n this._fireSelectionChanged();\n this._updateTextarea();\n return this;\n }\n\n /**\n * Enters editing state\n */\n enterEditing(e?: TPointerEvent) {\n if (this.isEditing || !this.editable) {\n return;\n }\n this.enterEditingImpl();\n this.fire('editing:entered', e ? { e } : undefined);\n this._fireSelectionChanged();\n if (this.canvas) {\n this.canvas.fire('text:editing:entered', {\n target: this as unknown as IText,\n e,\n });\n this.canvas.requestRenderAll();\n }\n }\n\n /**\n * runs the actual logic that enter from editing state, see {@link enterEditing}\n */\n enterEditingImpl() {\n if (this.canvas) {\n this.canvas.calcOffset();\n this.canvas.textEditingManager.exitTextEditing();\n }\n\n this.isEditing = true;\n\n this.initHiddenTextarea();\n this.hiddenTextarea!.focus();\n this.hiddenTextarea!.value = this.text;\n this._updateTextarea();\n this._saveEditingProps();\n this._setEditingProps();\n this._textBeforeEdit = this.text;\n\n this._tick();\n }\n\n /**\n * called by {@link Canvas#textEditingManager}\n */\n updateSelectionOnMouseMove(e: TPointerEvent) {\n if (this.getActiveControl()) {\n return;\n }\n\n const el = this.hiddenTextarea!;\n // regain focus\n getDocumentFromElement(el).activeElement !== el && el.focus();\n\n const newSelectionStart = this.getSelectionStartFromPointer(e),\n currentStart = this.selectionStart,\n currentEnd = this.selectionEnd;\n if (\n (newSelectionStart !== this.__selectionStartOnMouseDown ||\n currentStart === currentEnd) &&\n (currentStart === newSelectionStart || currentEnd === newSelectionStart)\n ) {\n return;\n }\n if (newSelectionStart > this.__selectionStartOnMouseDown) {\n this.selectionStart = this.__selectionStartOnMouseDown;\n this.selectionEnd = newSelectionStart;\n } else {\n this.selectionStart = newSelectionStart;\n this.selectionEnd = this.__selectionStartOnMouseDown;\n }\n if (\n this.selectionStart !== currentStart ||\n this.selectionEnd !== currentEnd\n ) {\n this._fireSelectionChanged();\n this._updateTextarea();\n this.renderCursorOrSelection();\n }\n }\n\n /**\n * @private\n */\n _setEditingProps() {\n this.hoverCursor = 'text';\n\n if (this.canvas) {\n this.canvas.defaultCursor = this.canvas.moveCursor = 'text';\n }\n\n this.borderColor = this.editingBorderColor;\n this.hasControls = this.selectable = false;\n this.lockMovementX = this.lockMovementY = true;\n }\n\n /**\n * convert from textarea to grapheme indexes\n */\n fromStringToGraphemeSelection(start: number, end: number, text: string) {\n const smallerTextStart = text.slice(0, start),\n graphemeStart = this.graphemeSplit(smallerTextStart).length;\n if (start === end) {\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n }\n const smallerTextEnd = text.slice(start, end),\n graphemeEnd = this.graphemeSplit(smallerTextEnd).length;\n return {\n selectionStart: graphemeStart,\n selectionEnd: graphemeStart + graphemeEnd,\n };\n }\n\n /**\n * convert from fabric to textarea values\n */\n fromGraphemeToStringSelection(\n start: number,\n end: number,\n graphemes: string[],\n ) {\n const smallerTextStart = graphemes.slice(0, start),\n graphemeStart = smallerTextStart.join('').length;\n if (start === end) {\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n }\n const smallerTextEnd = graphemes.slice(start, end),\n graphemeEnd = smallerTextEnd.join('').length;\n return {\n selectionStart: graphemeStart,\n selectionEnd: graphemeStart + graphemeEnd,\n };\n }\n\n /**\n * @private\n */\n _updateTextarea() {\n this.cursorOffsetCache = {};\n if (!this.hiddenTextarea) {\n return;\n }\n if (!this.inCompositionMode) {\n const newSelection = this.fromGraphemeToStringSelection(\n this.selectionStart,\n this.selectionEnd,\n this._text,\n );\n this.hiddenTextarea.selectionStart = newSelection.selectionStart;\n this.hiddenTextarea.selectionEnd = newSelection.selectionEnd;\n }\n this.updateTextareaPosition();\n }\n\n /**\n * @private\n */\n updateFromTextArea() {\n if (!this.hiddenTextarea) {\n return;\n }\n this.cursorOffsetCache = {};\n const textarea = this.hiddenTextarea;\n this.text = textarea.value;\n this.set('dirty', true);\n this.initDimensions();\n this.setCoords();\n const newSelection = this.fromStringToGraphemeSelection(\n textarea.selectionStart,\n textarea.selectionEnd,\n textarea.value,\n );\n this.selectionEnd = this.selectionStart = newSelection.selectionEnd;\n if (!this.inCompositionMode) {\n this.selectionStart = newSelection.selectionStart;\n }\n this.updateTextareaPosition();\n }\n\n /**\n * @private\n */\n updateTextareaPosition() {\n if (this.selectionStart === this.selectionEnd) {\n const style = this._calcTextareaPosition();\n this.hiddenTextarea!.style.left = style.left;\n this.hiddenTextarea!.style.top = style.top;\n }\n }\n\n /**\n * @private\n * @return {Object} style contains style for hiddenTextarea\n */\n _calcTextareaPosition() {\n if (!this.canvas) {\n return { left: '1px', top: '1px' };\n }\n const desiredPosition = this.inCompositionMode\n ? this.compositionStart\n : this.selectionStart,\n boundaries = this._getCursorBoundaries(desiredPosition),\n cursorLocation = this.get2DCursorLocation(desiredPosition),\n lineIndex = cursorLocation.lineIndex,\n charIndex = cursorLocation.charIndex,\n charHeight =\n this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize') *\n this.lineHeight,\n leftOffset = boundaries.leftOffset,\n retinaScaling = this.getCanvasRetinaScaling(),\n upperCanvas = this.canvas.upperCanvasEl,\n upperCanvasWidth = upperCanvas.width / retinaScaling,\n upperCanvasHeight = upperCanvas.height / retinaScaling,\n maxWidth = upperCanvasWidth - charHeight,\n maxHeight = upperCanvasHeight - charHeight;\n\n const p = new Point(\n boundaries.left + leftOffset,\n boundaries.top + boundaries.topOffset + charHeight,\n )\n .transform(this.calcTransformMatrix())\n .transform(this.canvas.viewportTransform)\n .multiply(\n new Point(\n upperCanvas.clientWidth / upperCanvasWidth,\n upperCanvas.clientHeight / upperCanvasHeight,\n ),\n );\n\n if (p.x < 0) {\n p.x = 0;\n }\n if (p.x > maxWidth) {\n p.x = maxWidth;\n }\n if (p.y < 0) {\n p.y = 0;\n }\n if (p.y > maxHeight) {\n p.y = maxHeight;\n }\n\n // add canvas offset on document\n p.x += this.canvas._offset.left;\n p.y += this.canvas._offset.top;\n\n return {\n left: `${p.x}px`,\n top: `${p.y}px`,\n fontSize: `${charHeight}px`,\n charHeight: charHeight,\n };\n }\n\n /**\n * @private\n */\n _saveEditingProps() {\n this._savedProps = {\n hasControls: this.hasControls,\n borderColor: this.borderColor,\n lockMovementX: this.lockMovementX,\n lockMovementY: this.lockMovementY,\n hoverCursor: this.hoverCursor,\n selectable: this.selectable,\n defaultCursor: this.canvas && this.canvas.defaultCursor,\n moveCursor: this.canvas && this.canvas.moveCursor,\n };\n }\n\n /**\n * @private\n */\n _restoreEditingProps() {\n if (!this._savedProps) {\n return;\n }\n\n this.hoverCursor = this._savedProps.hoverCursor;\n this.hasControls = this._savedProps.hasControls;\n this.borderColor = this._savedProps.borderColor;\n this.selectable = this._savedProps.selectable;\n this.lockMovementX = this._savedProps.lockMovementX;\n this.lockMovementY = this._savedProps.lockMovementY;\n\n if (this.canvas) {\n this.canvas.defaultCursor =\n this._savedProps.defaultCursor || this.canvas.defaultCursor;\n this.canvas.moveCursor =\n this._savedProps.moveCursor || this.canvas.moveCursor;\n }\n\n delete this._savedProps;\n }\n\n /**\n * runs the actual logic that exits from editing state, see {@link exitEditing}\n * Please use exitEditingImpl, this function was kept to avoid breaking changes.\n * Will be removed in fabric 7.0\n * @deprecated use \"exitEditingImpl\"\n */\n protected _exitEditing() {\n const hiddenTextarea = this.hiddenTextarea;\n this.selected = false;\n this.isEditing = false;\n\n if (hiddenTextarea) {\n hiddenTextarea.blur && hiddenTextarea.blur();\n hiddenTextarea.parentNode &&\n hiddenTextarea.parentNode.removeChild(hiddenTextarea);\n }\n this.hiddenTextarea = null;\n this.abortCursorAnimation();\n this.selectionStart !== this.selectionEnd && this.clearContextTop();\n }\n\n /**\n * runs the actual logic that exits from editing state, see {@link exitEditing}\n * But it does not fire events\n */\n exitEditingImpl() {\n this._exitEditing();\n this.selectionEnd = this.selectionStart;\n this._restoreEditingProps();\n if (this._forceClearCache) {\n this.initDimensions();\n this.setCoords();\n }\n }\n\n /**\n * Exits from editing state and fires relevant events\n */\n exitEditing() {\n const isTextChanged = this._textBeforeEdit !== this.text;\n this.exitEditingImpl();\n\n this.fire('editing:exited');\n isTextChanged && this.fire(MODIFIED);\n if (this.canvas) {\n this.canvas.fire('text:editing:exited', {\n target: this as unknown as IText,\n });\n // todo: evaluate add an action to this event\n isTextChanged && this.canvas.fire('object:modified', { target: this });\n }\n return this;\n }\n\n /**\n * @private\n */\n _removeExtraneousStyles() {\n for (const prop in this.styles) {\n if (!this._textLines[prop as unknown as number]) {\n delete this.styles[prop];\n }\n }\n }\n\n /**\n * remove and reflow a style block from start to end.\n * @param {Number} start linear start position for removal (included in removal)\n * @param {Number} end linear end position for removal ( excluded from removal )\n */\n removeStyleFromTo(start: number, end: number) {\n const { lineIndex: lineStart, charIndex: charStart } =\n this.get2DCursorLocation(start, true),\n { lineIndex: lineEnd, charIndex: charEnd } = this.get2DCursorLocation(\n end,\n true,\n );\n if (lineStart !== lineEnd) {\n // step1 remove the trailing of lineStart\n if (this.styles[lineStart]) {\n for (\n let i = charStart;\n i < this._unwrappedTextLines[lineStart].length;\n i++\n ) {\n delete this.styles[lineStart][i];\n }\n }\n // step2 move the trailing of lineEnd to lineStart if needed\n if (this.styles[lineEnd]) {\n for (\n let i = charEnd;\n i < this._unwrappedTextLines[lineEnd].length;\n i++\n ) {\n const styleObj = this.styles[lineEnd][i];\n if (styleObj) {\n this.styles[lineStart] || (this.styles[lineStart] = {});\n this.styles[lineStart][charStart + i - charEnd] = styleObj;\n }\n }\n }\n // step3 detects lines will be completely removed.\n for (let i = lineStart + 1; i <= lineEnd; i++) {\n delete this.styles[i];\n }\n // step4 shift remaining lines.\n this.shiftLineStyles(lineEnd, lineStart - lineEnd);\n } else {\n // remove and shift left on the same line\n if (this.styles[lineStart]) {\n const styleObj = this.styles[lineStart];\n const diff = charEnd - charStart;\n for (let i = charStart; i < charEnd; i++) {\n delete styleObj[i];\n }\n for (const char in this.styles[lineStart]) {\n const numericChar = parseInt(char, 10);\n if (numericChar >= charEnd) {\n styleObj[numericChar - diff] = styleObj[char];\n delete styleObj[char];\n }\n }\n }\n }\n }\n\n /**\n * Shifts line styles up or down\n * @param {Number} lineIndex Index of a line\n * @param {Number} offset Can any number?\n */\n shiftLineStyles(lineIndex: number, offset: number) {\n const clonedStyles = Object.assign({}, this.styles);\n for (const line in this.styles) {\n const numericLine = parseInt(line, 10);\n if (numericLine > lineIndex) {\n this.styles[numericLine + offset] = clonedStyles[numericLine];\n if (!clonedStyles[numericLine - offset]) {\n delete this.styles[numericLine];\n }\n }\n }\n }\n\n /**\n * Handle insertion of more consecutive style lines for when one or more\n * newlines gets added to the text. Since current style needs to be shifted\n * first we shift the current style of the number lines needed, then we add\n * new lines from the last to the first.\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} qty number of lines to add\n * @param {Array} copiedStyle Array of objects styles\n */\n insertNewlineStyleObject(\n lineIndex: number,\n charIndex: number,\n qty: number,\n copiedStyle?: { [index: number]: TextStyleDeclaration },\n ) {\n const newLineStyles: { [index: number]: TextStyleDeclaration } = {};\n const originalLineLength = this._unwrappedTextLines[lineIndex].length;\n const isEndOfLine = originalLineLength === charIndex;\n\n let someStyleIsCarryingOver = false;\n qty || (qty = 1);\n this.shiftLineStyles(lineIndex, qty);\n const currentCharStyle = this.styles[lineIndex]\n ? this.styles[lineIndex][charIndex === 0 ? charIndex : charIndex - 1]\n : undefined;\n\n // we clone styles of all chars\n // after cursor onto the current line\n for (const index in this.styles[lineIndex]) {\n const numIndex = parseInt(index, 10);\n if (numIndex >= charIndex) {\n someStyleIsCarryingOver = true;\n newLineStyles[numIndex - charIndex] = this.styles[lineIndex][index];\n // remove lines from the previous line since they're on a new line now\n if (!(isEndOfLine && charIndex === 0)) {\n delete this.styles[lineIndex][index];\n }\n }\n }\n let styleCarriedOver = false;\n if (someStyleIsCarryingOver && !isEndOfLine) {\n // if is end of line, the extra style we copied\n // is probably not something we want\n this.styles[lineIndex + qty] = newLineStyles;\n styleCarriedOver = true;\n }\n if (styleCarriedOver || originalLineLength > charIndex) {\n // skip the last line of since we already prepared it.\n // or contains text without style that we don't want to style\n // just because it changed lines\n qty--;\n }\n // for the all the lines or all the other lines\n // we clone current char style onto the next (otherwise empty) line\n while (qty > 0) {\n if (copiedStyle && copiedStyle[qty - 1]) {\n this.styles[lineIndex + qty] = {\n 0: { ...copiedStyle[qty - 1] },\n };\n } else if (currentCharStyle) {\n this.styles[lineIndex + qty] = {\n 0: { ...currentCharStyle },\n };\n } else {\n delete this.styles[lineIndex + qty];\n }\n qty--;\n }\n this._forceClearCache = true;\n }\n\n /**\n * Inserts style object for a given line/char index\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} quantity number Style object to insert, if given\n * @param {Array} copiedStyle array of style objects\n */\n insertCharStyleObject(\n lineIndex: number,\n charIndex: number,\n quantity: number,\n copiedStyle?: TextStyleDeclaration[],\n ) {\n if (!this.styles) {\n this.styles = {};\n }\n const currentLineStyles = this.styles[lineIndex],\n currentLineStylesCloned = currentLineStyles\n ? { ...currentLineStyles }\n : {};\n\n quantity || (quantity = 1);\n // shift all char styles by quantity forward\n // 0,1,2,3 -> (charIndex=2) -> 0,1,3,4 -> (insert 2) -> 0,1,2,3,4\n for (const index in currentLineStylesCloned) {\n const numericIndex = parseInt(index, 10);\n if (numericIndex >= charIndex) {\n currentLineStyles[numericIndex + quantity] =\n currentLineStylesCloned[numericIndex];\n // only delete the style if there was nothing moved there\n if (!currentLineStylesCloned[numericIndex - quantity]) {\n delete currentLineStyles[numericIndex];\n }\n }\n }\n this._forceClearCache = true;\n if (copiedStyle) {\n while (quantity--) {\n if (!Object.keys(copiedStyle[quantity]).length) {\n continue;\n }\n if (!this.styles[lineIndex]) {\n this.styles[lineIndex] = {};\n }\n this.styles[lineIndex][charIndex + quantity] = {\n ...copiedStyle[quantity],\n };\n }\n return;\n }\n if (!currentLineStyles) {\n return;\n }\n const newStyle = currentLineStyles[charIndex ? charIndex - 1 : 1];\n while (newStyle && quantity--) {\n this.styles[lineIndex][charIndex + quantity] = { ...newStyle };\n }\n }\n\n /**\n * Inserts style object(s)\n * @param {Array} insertedText Characters at the location where style is inserted\n * @param {Number} start cursor index for inserting style\n * @param {Array} [copiedStyle] array of style objects to insert.\n */\n insertNewStyleBlock(\n insertedText: string[],\n start: number,\n copiedStyle?: TextStyleDeclaration[],\n ) {\n const cursorLoc = this.get2DCursorLocation(start, true),\n addedLines = [0];\n let linesLength = 0;\n // get an array of how many char per lines are being added.\n for (let i = 0; i < insertedText.length; i++) {\n if (insertedText[i] === '\\n') {\n linesLength++;\n addedLines[linesLength] = 0;\n } else {\n addedLines[linesLength]++;\n }\n }\n // for the first line copy the style from the current char position.\n if (addedLines[0] > 0) {\n this.insertCharStyleObject(\n cursorLoc.lineIndex,\n cursorLoc.charIndex,\n addedLines[0],\n copiedStyle,\n );\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[0] + 1);\n }\n linesLength &&\n this.insertNewlineStyleObject(\n cursorLoc.lineIndex,\n cursorLoc.charIndex + addedLines[0],\n linesLength,\n );\n let i;\n for (i = 1; i < linesLength; i++) {\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(\n cursorLoc.lineIndex + i,\n 0,\n addedLines[i],\n copiedStyle,\n );\n } else if (copiedStyle) {\n // this test is required in order to close #6841\n // when a pasted buffer begins with a newline then\n // this.styles[cursorLoc.lineIndex + i] and copiedStyle[0]\n // may be undefined for some reason\n if (this.styles[cursorLoc.lineIndex + i] && copiedStyle[0]) {\n this.styles[cursorLoc.lineIndex + i][0] = copiedStyle[0];\n }\n }\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[i] + 1);\n }\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(\n cursorLoc.lineIndex + i,\n 0,\n addedLines[i],\n copiedStyle,\n );\n }\n }\n\n /**\n * Removes characters from start/end\n * start/end ar per grapheme position in _text array.\n *\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n removeChars(start: number, end: number = start + 1) {\n this.removeStyleFromTo(start, end);\n this._text.splice(start, end - start);\n this.text = this._text.join('');\n this.set('dirty', true);\n this.initDimensions();\n this.setCoords();\n this._removeExtraneousStyles();\n }\n\n /**\n * insert characters at start position, before start position.\n * start equal 1 it means the text get inserted between actual grapheme 0 and 1\n * if style array is provided, it must be as the same length of text in graphemes\n * if end is provided and is bigger than start, old text is replaced.\n * start/end ar per grapheme position in _text array.\n *\n * @param {String} text text to insert\n * @param {Array} style array of style objects\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n insertChars(\n text: string,\n style: TextStyleDeclaration[] | undefined,\n start: number,\n end: number = start,\n ) {\n if (end > start) {\n this.removeStyleFromTo(start, end);\n }\n const graphemes = this.graphemeSplit(text);\n this.insertNewStyleBlock(graphemes, start, style);\n this._text = [\n ...this._text.slice(0, start),\n ...graphemes,\n ...this._text.slice(end),\n ];\n this.text = this._text.join('');\n this.set('dirty', true);\n this.initDimensions();\n this.setCoords();\n this._removeExtraneousStyles();\n }\n\n /**\n * Set the selectionStart and selectionEnd according to the new position of cursor\n * mimic the key - mouse navigation when shift is pressed.\n */\n setSelectionStartEndWithShift(\n start: number,\n end: number,\n newSelection: number,\n ) {\n if (newSelection <= start) {\n if (end === start) {\n this._selectionDirection = LEFT;\n } else if (this._selectionDirection === RIGHT) {\n this._selectionDirection = LEFT;\n this.selectionEnd = start;\n }\n this.selectionStart = newSelection;\n } else if (newSelection > start && newSelection < end) {\n if (this._selectionDirection === RIGHT) {\n this.selectionEnd = newSelection;\n } else {\n this.selectionStart = newSelection;\n }\n } else {\n // newSelection is > selection start and end\n if (end === start) {\n this._selectionDirection = RIGHT;\n } else if (this._selectionDirection === LEFT) {\n this._selectionDirection = RIGHT;\n this.selectionStart = end;\n }\n this.selectionEnd = newSelection;\n }\n }\n}\n","import { config } from '../../config';\nimport { getFabricDocument, getEnv } from '../../env';\nimport { capValue } from '../../util/misc/capValue';\nimport type { ITextEvents } from './ITextBehavior';\nimport { ITextBehavior } from './ITextBehavior';\nimport type { TKeyMapIText } from './constants';\nimport type { TOptions } from '../../typedefs';\nimport type { TextProps, SerializedTextProps } from '../Text/Text';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { CHANGED, LEFT, RIGHT } from '../../constants';\nimport type { IText } from './IText';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\n\nexport abstract class ITextKeyBehavior<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ITextEvents = ITextEvents,\n> extends ITextBehavior {\n /**\n * For functionalities on keyDown\n * Map a special key to a function of the instance/prototype\n * If you need different behavior for ESC or TAB or arrows, you have to change\n * this map setting the name of a function that you build on the IText or\n * your prototype.\n * the map change will affect all Instances unless you need for only some text Instances\n * in that case you have to clone this object and assign your Instance.\n * this.keysMap = Object.assign({}, this.keysMap);\n * The function must be in IText.prototype.myFunction And will receive event as args[0]\n */\n declare keysMap: TKeyMapIText;\n\n declare keysMapRtl: TKeyMapIText;\n\n /**\n * For functionalities on keyUp + ctrl || cmd\n */\n declare ctrlKeysMapUp: TKeyMapIText;\n\n /**\n * For functionalities on keyDown + ctrl || cmd\n */\n declare ctrlKeysMapDown: TKeyMapIText;\n\n declare hiddenTextarea: HTMLTextAreaElement | null;\n\n /**\n * DOM container to append the hiddenTextarea.\n * An alternative to attaching to the document.body.\n * Useful to reduce laggish redraw of the full document.body tree and\n * also with modals event capturing that won't let the textarea take focus.\n * @type HTMLElement\n * @default\n */\n declare hiddenTextareaContainer?: HTMLElement | null;\n\n private declare _clickHandlerInitialized: boolean;\n private declare _copyDone: boolean;\n private declare fromPaste: boolean;\n\n /**\n * Initializes hidden textarea (needed to bring up keyboard in iOS)\n */\n initHiddenTextarea() {\n const doc =\n (this.canvas && getDocumentFromElement(this.canvas.getElement())) ||\n getFabricDocument();\n const textarea = doc.createElement('textarea');\n Object.entries({\n autocapitalize: 'off',\n autocorrect: 'off',\n autocomplete: 'off',\n spellcheck: 'false',\n 'data-fabric': 'textarea',\n wrap: 'off',\n }).map(([attribute, value]) => textarea.setAttribute(attribute, value));\n const { top, left, fontSize } = this._calcTextareaPosition();\n // line-height: 1px; was removed from the style to fix this:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=870966\n textarea.style.cssText = `position: absolute; top: ${top}; left: ${left}; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: ${fontSize};`;\n\n (this.hiddenTextareaContainer || doc.body).appendChild(textarea);\n\n Object.entries({\n blur: 'blur',\n keydown: 'onKeyDown',\n keyup: 'onKeyUp',\n input: 'onInput',\n copy: 'copy',\n cut: 'copy',\n paste: 'paste',\n compositionstart: 'onCompositionStart',\n compositionupdate: 'onCompositionUpdate',\n compositionend: 'onCompositionEnd',\n } as Record).map(([eventName, handler]) =>\n textarea.addEventListener(\n eventName,\n (this[handler] as EventListener).bind(this),\n ),\n );\n this.hiddenTextarea = textarea;\n }\n\n /**\n * Override this method to customize cursor behavior on textbox blur\n */\n blur() {\n this.abortCursorAnimation();\n }\n\n /**\n * Handles keydown event\n * only used for arrows and combination of modifier keys.\n * @param {KeyboardEvent} e Event object\n */\n onKeyDown(e: KeyboardEvent) {\n if (!this.isEditing) {\n return;\n }\n const keyMap = this.direction === 'rtl' ? this.keysMapRtl : this.keysMap;\n if (e.keyCode in keyMap) {\n // @ts-expect-error legacy method calling pattern\n this[keyMap[e.keyCode]](e);\n } else if (e.keyCode in this.ctrlKeysMapDown && (e.ctrlKey || e.metaKey)) {\n // @ts-expect-error legacy method calling pattern\n this[this.ctrlKeysMapDown[e.keyCode]](e);\n } else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n if (e.keyCode >= 33 && e.keyCode <= 40) {\n // if i press an arrow key just update selection\n this.inCompositionMode = false;\n this.clearContextTop();\n this.renderCursorOrSelection();\n } else {\n this.canvas && this.canvas.requestRenderAll();\n }\n }\n\n /**\n * Handles keyup event\n * We handle KeyUp because ie11 and edge have difficulties copy/pasting\n * if a copy/cut event fired, keyup is dismissed\n * @param {KeyboardEvent} e Event object\n */\n onKeyUp(e: KeyboardEvent) {\n if (!this.isEditing || this._copyDone || this.inCompositionMode) {\n this._copyDone = false;\n return;\n }\n if (e.keyCode in this.ctrlKeysMapUp && (e.ctrlKey || e.metaKey)) {\n // @ts-expect-error legacy method calling pattern\n this[this.ctrlKeysMapUp[e.keyCode]](e);\n } else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n this.canvas && this.canvas.requestRenderAll();\n }\n\n /**\n * Handles onInput event\n * @param {Event} e Event object\n */\n onInput(this: this & { hiddenTextarea: HTMLTextAreaElement }, e: Event) {\n const fromPaste = this.fromPaste;\n this.fromPaste = false;\n e && e.stopPropagation();\n if (!this.isEditing) {\n return;\n }\n const updateAndFire = () => {\n this.updateFromTextArea();\n this.fire(CHANGED);\n if (this.canvas) {\n this.canvas.fire('text:changed', { target: this as unknown as IText });\n this.canvas.requestRenderAll();\n }\n };\n if (this.hiddenTextarea.value === '') {\n this.styles = {};\n updateAndFire();\n return;\n }\n // decisions about style changes.\n const nextText = this._splitTextIntoLines(\n this.hiddenTextarea.value,\n ).graphemeText,\n charCount = this._text.length,\n nextCharCount = nextText.length,\n selectionStart = this.selectionStart,\n selectionEnd = this.selectionEnd,\n selection = selectionStart !== selectionEnd;\n let copiedStyle: TextStyleDeclaration[] | undefined,\n removedText,\n charDiff = nextCharCount - charCount,\n removeFrom,\n removeTo;\n\n const textareaSelection = this.fromStringToGraphemeSelection(\n this.hiddenTextarea.selectionStart,\n this.hiddenTextarea.selectionEnd,\n this.hiddenTextarea.value,\n );\n const backDelete = selectionStart > textareaSelection.selectionStart;\n\n if (selection) {\n removedText = this._text.slice(selectionStart, selectionEnd);\n charDiff += selectionEnd - selectionStart;\n } else if (nextCharCount < charCount) {\n if (backDelete) {\n removedText = this._text.slice(selectionEnd + charDiff, selectionEnd);\n } else {\n removedText = this._text.slice(\n selectionStart,\n selectionStart - charDiff,\n );\n }\n }\n const insertedText = nextText.slice(\n textareaSelection.selectionEnd - charDiff,\n textareaSelection.selectionEnd,\n );\n if (removedText && removedText.length) {\n if (insertedText.length) {\n // let's copy some style before deleting.\n // we want to copy the style before the cursor OR the style at the cursor if selection\n // is bigger than 0.\n copiedStyle = this.getSelectionStyles(\n selectionStart,\n selectionStart + 1,\n false,\n );\n // now duplicate the style one for each inserted text.\n copiedStyle = insertedText.map(\n () =>\n // this return an array of references, but that is fine since we are\n // copying the style later.\n copiedStyle![0],\n );\n }\n if (selection) {\n removeFrom = selectionStart;\n removeTo = selectionEnd;\n } else if (backDelete) {\n // detect differences between forwardDelete and backDelete\n removeFrom = selectionEnd - removedText.length;\n removeTo = selectionEnd;\n } else {\n removeFrom = selectionEnd;\n removeTo = selectionEnd + removedText.length;\n }\n this.removeStyleFromTo(removeFrom, removeTo);\n }\n if (insertedText.length) {\n const { copyPasteData } = getEnv();\n if (\n fromPaste &&\n insertedText.join('') === copyPasteData.copiedText &&\n !config.disableStyleCopyPaste\n ) {\n copiedStyle = copyPasteData.copiedTextStyle;\n }\n this.insertNewStyleBlock(insertedText, selectionStart, copiedStyle);\n }\n updateAndFire();\n }\n\n /**\n * Composition start\n */\n onCompositionStart() {\n this.inCompositionMode = true;\n }\n\n /**\n * Composition end\n */\n onCompositionEnd() {\n this.inCompositionMode = false;\n }\n\n onCompositionUpdate({ target }: CompositionEvent) {\n const { selectionStart, selectionEnd } = target as HTMLTextAreaElement;\n this.compositionStart = selectionStart;\n this.compositionEnd = selectionEnd;\n this.updateTextareaPosition();\n }\n\n /**\n * Copies selected text\n */\n copy() {\n if (this.selectionStart === this.selectionEnd) {\n //do not cut-copy if no selection\n return;\n }\n const { copyPasteData } = getEnv();\n copyPasteData.copiedText = this.getSelectedText();\n if (!config.disableStyleCopyPaste) {\n copyPasteData.copiedTextStyle = this.getSelectionStyles(\n this.selectionStart,\n this.selectionEnd,\n true,\n );\n } else {\n copyPasteData.copiedTextStyle = undefined;\n }\n this._copyDone = true;\n }\n\n /**\n * Pastes text\n */\n paste() {\n this.fromPaste = true;\n }\n\n /**\n * Finds the width in pixels before the cursor on the same line\n * @private\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {Number} widthBeforeCursor width before cursor\n */\n _getWidthBeforeCursor(lineIndex: number, charIndex: number): number {\n let widthBeforeCursor = this._getLineLeftOffset(lineIndex),\n bound;\n\n if (charIndex > 0) {\n bound = this.__charBounds[lineIndex][charIndex - 1];\n widthBeforeCursor += bound.left + bound.width;\n }\n return widthBeforeCursor;\n }\n\n /**\n * Gets start offset of a selection\n * @param {KeyboardEvent} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getDownCursorOffset(e: KeyboardEvent, isRight: boolean): number {\n const selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n // if on last line, down cursor goes to end of line\n if (\n lineIndex === this._textLines.length - 1 ||\n e.metaKey ||\n e.keyCode === 34\n ) {\n // move to the end of a text\n return this._text.length - selectionProp;\n }\n const charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex + 1, widthBeforeCursor),\n textAfterCursor = this._textLines[lineIndex].slice(charIndex);\n return (\n textAfterCursor.length +\n indexOnOtherLine +\n 1 +\n this.missingNewlineOffset(lineIndex)\n );\n }\n\n /**\n * private\n * Helps finding if the offset should be counted from Start or End\n * @param {KeyboardEvent} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n _getSelectionForOffset(e: KeyboardEvent, isRight: boolean): number {\n if (e.shiftKey && this.selectionStart !== this.selectionEnd && isRight) {\n return this.selectionEnd;\n } else {\n return this.selectionStart;\n }\n }\n\n /**\n * @param {KeyboardEvent} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getUpCursorOffset(e: KeyboardEvent, isRight: boolean): number {\n const selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n if (lineIndex === 0 || e.metaKey || e.keyCode === 33) {\n // if on first line, up cursor goes to start of line\n return -selectionProp;\n }\n const charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex - 1, widthBeforeCursor),\n textBeforeCursor = this._textLines[lineIndex].slice(0, charIndex),\n missingNewlineOffset = this.missingNewlineOffset(lineIndex - 1);\n // return a negative offset\n return (\n -this._textLines[lineIndex - 1].length +\n indexOnOtherLine -\n textBeforeCursor.length +\n (1 - missingNewlineOffset)\n );\n }\n\n /**\n * for a given width it founds the matching character.\n * @private\n */\n _getIndexOnLine(lineIndex: number, width: number) {\n const line = this._textLines[lineIndex],\n lineLeftOffset = this._getLineLeftOffset(lineIndex);\n let widthOfCharsOnLine = lineLeftOffset,\n indexOnLine = 0,\n charWidth,\n foundMatch;\n\n for (let j = 0, jlen = line.length; j < jlen; j++) {\n charWidth = this.__charBounds[lineIndex][j].width;\n widthOfCharsOnLine += charWidth;\n if (widthOfCharsOnLine > width) {\n foundMatch = true;\n const leftEdge = widthOfCharsOnLine - charWidth,\n rightEdge = widthOfCharsOnLine,\n offsetFromLeftEdge = Math.abs(leftEdge - width),\n offsetFromRightEdge = Math.abs(rightEdge - width);\n\n indexOnLine = offsetFromRightEdge < offsetFromLeftEdge ? j : j - 1;\n break;\n }\n }\n\n // reached end\n if (!foundMatch) {\n indexOnLine = line.length - 1;\n }\n\n return indexOnLine;\n }\n\n /**\n * Moves cursor down\n * @param {KeyboardEvent} e Event object\n */\n moveCursorDown(e: KeyboardEvent) {\n if (\n this.selectionStart >= this._text.length &&\n this.selectionEnd >= this._text.length\n ) {\n return;\n }\n this._moveCursorUpOrDown('Down', e);\n }\n\n /**\n * Moves cursor up\n * @param {KeyboardEvent} e Event object\n */\n moveCursorUp(e: KeyboardEvent) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorUpOrDown('Up', e);\n }\n\n /**\n * Moves cursor up or down, fires the events\n * @param {String} direction 'Up' or 'Down'\n * @param {KeyboardEvent} e Event object\n */\n _moveCursorUpOrDown(direction: 'Up' | 'Down', e: KeyboardEvent) {\n const offset = this[`get${direction}CursorOffset`](\n e,\n this._selectionDirection === RIGHT,\n );\n if (e.shiftKey) {\n this.moveCursorWithShift(offset);\n } else {\n this.moveCursorWithoutShift(offset);\n }\n if (offset !== 0) {\n const max = this.text.length;\n this.selectionStart = capValue(0, this.selectionStart, max);\n this.selectionEnd = capValue(0, this.selectionEnd, max);\n // TODO fix: abort and init should be an alternative depending\n // on selectionStart/End being equal or different\n this.abortCursorAnimation();\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n }\n\n /**\n * Moves cursor with shift\n * @param {Number} offset\n */\n moveCursorWithShift(offset: number) {\n const newSelection =\n this._selectionDirection === LEFT\n ? this.selectionStart + offset\n : this.selectionEnd + offset;\n this.setSelectionStartEndWithShift(\n this.selectionStart,\n this.selectionEnd,\n newSelection,\n );\n return offset !== 0;\n }\n\n /**\n * Moves cursor up without shift\n * @param {Number} offset\n */\n moveCursorWithoutShift(offset: number) {\n if (offset < 0) {\n this.selectionStart += offset;\n this.selectionEnd = this.selectionStart;\n } else {\n this.selectionEnd += offset;\n this.selectionStart = this.selectionEnd;\n }\n return offset !== 0;\n }\n\n /**\n * Moves cursor left\n * @param {KeyboardEvent} e Event object\n */\n moveCursorLeft(e: KeyboardEvent) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorLeftOrRight('Left', e);\n }\n\n /**\n * @private\n * @return {Boolean} true if a change happened\n *\n * @todo refactor not to use method name composition\n */\n _move(\n e: KeyboardEvent,\n prop: 'selectionStart' | 'selectionEnd',\n direction: 'Left' | 'Right',\n ): boolean {\n let newValue: number | undefined;\n if (e.altKey) {\n newValue = this[`findWordBoundary${direction}`](this[prop]);\n } else if (e.metaKey || e.keyCode === 35 || e.keyCode === 36) {\n newValue = this[`findLineBoundary${direction}`](this[prop]);\n } else {\n this[prop] += direction === 'Left' ? -1 : 1;\n return true;\n }\n if (typeof newValue !== 'undefined' && this[prop] !== newValue) {\n this[prop] = newValue;\n return true;\n }\n return false;\n }\n\n /**\n * @private\n */\n _moveLeft(e: KeyboardEvent, prop: 'selectionStart' | 'selectionEnd') {\n return this._move(e, prop, 'Left');\n }\n\n /**\n * @private\n */\n _moveRight(e: KeyboardEvent, prop: 'selectionStart' | 'selectionEnd') {\n return this._move(e, prop, 'Right');\n }\n\n /**\n * Moves cursor left without keeping selection\n * @param {KeyboardEvent} e\n */\n moveCursorLeftWithoutShift(e: KeyboardEvent) {\n let change = true;\n this._selectionDirection = LEFT;\n\n // only move cursor when there is no selection,\n // otherwise we discard it, and leave cursor on same place\n if (\n this.selectionEnd === this.selectionStart &&\n this.selectionStart !== 0\n ) {\n change = this._moveLeft(e, 'selectionStart');\n }\n this.selectionEnd = this.selectionStart;\n return change;\n }\n\n /**\n * Moves cursor left while keeping selection\n * @param {KeyboardEvent} e\n */\n moveCursorLeftWithShift(e: KeyboardEvent) {\n if (\n this._selectionDirection === RIGHT &&\n this.selectionStart !== this.selectionEnd\n ) {\n return this._moveLeft(e, 'selectionEnd');\n } else if (this.selectionStart !== 0) {\n this._selectionDirection = LEFT;\n return this._moveLeft(e, 'selectionStart');\n }\n }\n\n /**\n * Moves cursor right\n * @param {KeyboardEvent} e Event object\n */\n moveCursorRight(e: KeyboardEvent) {\n if (\n this.selectionStart >= this._text.length &&\n this.selectionEnd >= this._text.length\n ) {\n return;\n }\n this._moveCursorLeftOrRight('Right', e);\n }\n\n /**\n * Moves cursor right or Left, fires event\n * @param {String} direction 'Left', 'Right'\n * @param {KeyboardEvent} e Event object\n */\n _moveCursorLeftOrRight(direction: 'Left' | 'Right', e: KeyboardEvent) {\n const actionName = `moveCursor${direction}${\n e.shiftKey ? 'WithShift' : 'WithoutShift'\n }` as const;\n this._currentCursorOpacity = 1;\n if (this[actionName](e)) {\n // TODO fix: abort and init should be an alternative depending\n // on selectionStart/End being equal or different\n this.abortCursorAnimation();\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n }\n\n /**\n * Moves cursor right while keeping selection\n * @param {KeyboardEvent} e\n */\n moveCursorRightWithShift(e: KeyboardEvent) {\n if (\n this._selectionDirection === LEFT &&\n this.selectionStart !== this.selectionEnd\n ) {\n return this._moveRight(e, 'selectionStart');\n } else if (this.selectionEnd !== this._text.length) {\n this._selectionDirection = RIGHT;\n return this._moveRight(e, 'selectionEnd');\n }\n }\n\n /**\n * Moves cursor right without keeping selection\n * @param {KeyboardEvent} e Event object\n */\n moveCursorRightWithoutShift(e: KeyboardEvent) {\n let changed = true;\n this._selectionDirection = RIGHT;\n\n if (this.selectionStart === this.selectionEnd) {\n changed = this._moveRight(e, 'selectionStart');\n this.selectionEnd = this.selectionStart;\n } else {\n this.selectionStart = this.selectionEnd;\n }\n return changed;\n }\n}\n","import type { TPointerEvent, TPointerEventInfo } from '../../EventTypeDefs';\nimport type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport { stopEvent } from '../../util/dom_event';\nimport { invertTransform } from '../../util/misc/matrix';\nimport { DraggableTextDelegate } from './DraggableTextDelegate';\nimport type { ITextEvents } from './ITextBehavior';\nimport { ITextKeyBehavior } from './ITextKeyBehavior';\nimport type { TOptions } from '../../typedefs';\nimport type { TextProps, SerializedTextProps } from '../Text/Text';\n\n/**\n * `LEFT_CLICK === 0`\n */\nconst notALeftClick = (e: Event) => !!(e as MouseEvent).button;\n\nexport abstract class ITextClickBehavior<\n Props extends TOptions = Partial,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ITextEvents = ITextEvents,\n> extends ITextKeyBehavior {\n private declare __lastSelected: boolean;\n private declare __lastClickTime: number;\n private declare __lastLastClickTime: number;\n private declare __lastPointer: XY | Record;\n private declare __newClickTime: number;\n\n protected draggableTextDelegate: DraggableTextDelegate;\n\n initBehavior() {\n // Initializes event handlers related to cursor or selection\n this.on('mousedown', this._mouseDownHandler);\n this.on('mousedown:before', this._mouseDownHandlerBefore);\n this.on('mouseup', this.mouseUpHandler);\n this.on('mousedblclick', this.doubleClickHandler);\n this.on('tripleclick', this.tripleClickHandler);\n\n // Initializes \"dbclick\" event handler\n this.__lastClickTime = +new Date();\n // for triple click\n this.__lastLastClickTime = +new Date();\n this.__lastPointer = {};\n this.on('mousedown', this.onMouseDown);\n\n // @ts-expect-error in reality it is an IText instance\n this.draggableTextDelegate = new DraggableTextDelegate(this);\n\n super.initBehavior();\n }\n\n /**\n * If this method returns true a mouse move operation over a text selection\n * will not prevent the native mouse event allowing the browser to start a drag operation.\n * shouldStartDragging can be read 'do not prevent default for mouse move event'\n * To prevent drag and drop between objects both shouldStartDragging and onDragStart should return false\n * @returns\n */\n shouldStartDragging() {\n return this.draggableTextDelegate.isActive();\n }\n\n /**\n * @public override this method to control whether instance should/shouldn't become a drag source,\n * @see also {@link DraggableTextDelegate#isActive}\n * To prevent drag and drop between objects both shouldStartDragging and onDragStart should return false\n * @returns {boolean} should handle event\n */\n onDragStart(e: DragEvent) {\n return this.draggableTextDelegate.onDragStart(e);\n }\n\n /**\n * @public override this method to control whether instance should/shouldn't become a drop target\n */\n canDrop(e: DragEvent) {\n return this.draggableTextDelegate.canDrop(e);\n }\n\n /**\n * Default event handler to simulate triple click\n * @private\n */\n onMouseDown(options: TPointerEventInfo) {\n if (!this.canvas) {\n return;\n }\n this.__newClickTime = +new Date();\n const newPointer = options.pointer;\n if (this.isTripleClick(newPointer)) {\n this.fire('tripleclick', options);\n stopEvent(options.e);\n }\n this.__lastLastClickTime = this.__lastClickTime;\n this.__lastClickTime = this.__newClickTime;\n this.__lastPointer = newPointer;\n this.__lastSelected = this.selected && !this.getActiveControl();\n }\n\n isTripleClick(newPointer: XY) {\n return (\n this.__newClickTime - this.__lastClickTime < 500 &&\n this.__lastClickTime - this.__lastLastClickTime < 500 &&\n this.__lastPointer.x === newPointer.x &&\n this.__lastPointer.y === newPointer.y\n );\n }\n\n /**\n * Default handler for double click, select a word\n */\n doubleClickHandler(options: TPointerEventInfo) {\n if (!this.isEditing) {\n return;\n }\n this.selectWord(this.getSelectionStartFromPointer(options.e));\n }\n\n /**\n * Default handler for triple click, select a line\n */\n tripleClickHandler(options: TPointerEventInfo) {\n if (!this.isEditing) {\n return;\n }\n this.selectLine(this.getSelectionStartFromPointer(options.e));\n }\n\n /**\n * Default event handler for the basic functionalities needed on _mouseDown\n * can be overridden to do something different.\n * Scope of this implementation is: find the click position, set selectionStart\n * find selectionEnd, initialize the drawing of either cursor or selection area\n * initializing a mousedDown on a text area will cancel fabricjs knowledge of\n * current compositionMode. It will be set to false.\n */\n _mouseDownHandler({ e }: TPointerEventInfo) {\n if (\n !this.canvas ||\n !this.editable ||\n notALeftClick(e) ||\n this.getActiveControl()\n ) {\n return;\n }\n\n if (this.draggableTextDelegate.start(e)) {\n return;\n }\n\n this.canvas.textEditingManager.register(this);\n\n if (this.selected) {\n this.inCompositionMode = false;\n this.setCursorByClick(e);\n }\n\n if (this.isEditing) {\n this.__selectionStartOnMouseDown = this.selectionStart;\n if (this.selectionStart === this.selectionEnd) {\n this.abortCursorAnimation();\n }\n this.renderCursorOrSelection();\n }\n }\n\n /**\n * Default event handler for the basic functionalities needed on mousedown:before\n * can be overridden to do something different.\n * Scope of this implementation is: verify the object is already selected when mousing down\n */\n _mouseDownHandlerBefore({ e }: TPointerEventInfo) {\n if (!this.canvas || !this.editable || notALeftClick(e)) {\n return;\n }\n // we want to avoid that an object that was selected and then becomes unselectable,\n // may trigger editing mode in some way.\n this.selected = this === this.canvas._activeObject;\n }\n\n /**\n * standard handler for mouse up, overridable\n * @private\n */\n mouseUpHandler({ e, transform }: TPointerEventInfo) {\n const didDrag = this.draggableTextDelegate.end(e);\n if (this.canvas) {\n this.canvas.textEditingManager.unregister(this);\n\n const activeObject = this.canvas._activeObject;\n if (activeObject && activeObject !== this) {\n // avoid running this logic when there is an active object\n // this because is possible with shift click and fast clicks,\n // to rapidly deselect and reselect this object and trigger an enterEdit\n return;\n }\n }\n if (\n !this.editable ||\n (this.group && !this.group.interactive) ||\n (transform && transform.actionPerformed) ||\n notALeftClick(e) ||\n didDrag\n ) {\n return;\n }\n\n if (this.__lastSelected && !this.getActiveControl()) {\n this.selected = false;\n this.__lastSelected = false;\n this.enterEditing(e);\n if (this.selectionStart === this.selectionEnd) {\n this.initDelayedCursor(true);\n } else {\n this.renderCursorOrSelection();\n }\n } else {\n this.selected = true;\n }\n }\n\n /**\n * Changes cursor location in a text depending on passed pointer (x/y) object\n * @param {TPointerEvent} e Event object\n */\n setCursorByClick(e: TPointerEvent) {\n const newSelection = this.getSelectionStartFromPointer(e),\n start = this.selectionStart,\n end = this.selectionEnd;\n if (e.shiftKey) {\n this.setSelectionStartEndWithShift(start, end, newSelection);\n } else {\n this.selectionStart = newSelection;\n this.selectionEnd = newSelection;\n }\n if (this.isEditing) {\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n }\n\n /**\n * Returns index of a character corresponding to where an object was clicked\n * @param {TPointerEvent} e Event object\n * @return {Number} Index of a character\n */\n getSelectionStartFromPointer(e: TPointerEvent): number {\n const mouseOffset = this.canvas!.getScenePoint(e)\n .transform(invertTransform(this.calcTransformMatrix()))\n .add(new Point(-this._getLeftOffset(), -this._getTopOffset()));\n let height = 0,\n charIndex = 0,\n lineIndex = 0;\n\n for (let i = 0; i < this._textLines.length; i++) {\n if (height <= mouseOffset.y) {\n height += this.getHeightOfLine(i);\n lineIndex = i;\n if (i > 0) {\n charIndex +=\n this._textLines[i - 1].length + this.missingNewlineOffset(i - 1);\n }\n } else {\n break;\n }\n }\n const lineLeftOffset = Math.abs(this._getLineLeftOffset(lineIndex));\n let width = lineLeftOffset;\n const charLength = this._textLines[lineIndex].length;\n const chars = this.__charBounds[lineIndex];\n for (let j = 0; j < charLength; j++) {\n // i removed something about flipX here, check.\n const charWidth = chars[j].kernedWidth;\n const widthAfter = width + charWidth;\n if (mouseOffset.x <= widthAfter) {\n // if the pointer is closer to the end of the char we increment charIndex\n // in order to position the cursor after the char\n if (\n Math.abs(mouseOffset.x - widthAfter) <=\n Math.abs(mouseOffset.x - width)\n ) {\n charIndex++;\n }\n break;\n }\n width = widthAfter;\n charIndex++;\n }\n\n return Math.min(\n // if object is horizontally flipped, mirror cursor location from the end\n this.flipX ? charLength - charIndex : charIndex,\n this._text.length,\n );\n }\n}\n","export type TKeyMapIText = Record<\n KeyboardEvent['keyCode'],\n CursorHandlingMethods\n>;\n\nexport type CursorHandlingMethods =\n | 'moveCursorUp'\n | 'moveCursorDown'\n | 'moveCursorLeft'\n | 'moveCursorRight'\n | 'exitEditing'\n | 'copy'\n | 'cut'\n | 'selectAll';\n\nconst MOVE_CURSOR_UP: CursorHandlingMethods = 'moveCursorUp';\nconst MOVE_CURSOR_DOWN: CursorHandlingMethods = 'moveCursorDown';\nconst MOVE_CURSOR_LEFT: CursorHandlingMethods = 'moveCursorLeft';\nconst MOVE_CURSOR_RIGHT: CursorHandlingMethods = 'moveCursorRight';\nconst EXIT_EDITING: CursorHandlingMethods = 'exitEditing';\n\n// @TODO look into import { Key } from 'ts-key-enum';\n// and transition from keyCode to Key\n// also reduce string duplication\nexport const keysMap: TKeyMapIText = {\n 9: EXIT_EDITING,\n 27: EXIT_EDITING,\n 33: MOVE_CURSOR_UP,\n 34: MOVE_CURSOR_DOWN,\n 35: MOVE_CURSOR_RIGHT,\n 36: MOVE_CURSOR_LEFT,\n 37: MOVE_CURSOR_LEFT,\n 38: MOVE_CURSOR_UP,\n 39: MOVE_CURSOR_RIGHT,\n 40: MOVE_CURSOR_DOWN,\n};\n\nexport const keysMapRtl: TKeyMapIText = {\n 9: EXIT_EDITING,\n 27: EXIT_EDITING,\n 33: MOVE_CURSOR_UP,\n 34: MOVE_CURSOR_DOWN,\n 35: MOVE_CURSOR_LEFT,\n 36: MOVE_CURSOR_RIGHT,\n 37: MOVE_CURSOR_RIGHT,\n 38: MOVE_CURSOR_UP,\n 39: MOVE_CURSOR_LEFT,\n 40: MOVE_CURSOR_DOWN,\n};\n\n/**\n * For functionalities on keyUp + ctrl || cmd\n */\nexport const ctrlKeysMapUp: TKeyMapIText = {\n 67: 'copy',\n // there was a reason this wasn't deleted. for now leave it here\n 88: 'cut',\n};\n\n/**\n * For functionalities on keyDown + ctrl || cmd\n */\nexport const ctrlKeysMapDown: TKeyMapIText = {\n 65: 'selectAll',\n};\n","import { Canvas } from '../../canvas/Canvas';\nimport type { ITextEvents } from './ITextBehavior';\nimport { ITextClickBehavior } from './ITextClickBehavior';\nimport {\n ctrlKeysMapDown,\n ctrlKeysMapUp,\n keysMap,\n keysMapRtl,\n} from './constants';\nimport type { TClassProperties, TFiller, TOptions } from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport type { SerializedTextProps, TextProps } from '../Text/Text';\nimport {\n JUSTIFY,\n JUSTIFY_CENTER,\n JUSTIFY_LEFT,\n JUSTIFY_RIGHT,\n} from '../Text/constants';\nimport { CENTER, FILL, LEFT, RIGHT } from '../../constants';\nimport type { ObjectToCanvasElementOptions } from '../Object/Object';\n\nexport type CursorBoundaries = {\n left: number;\n top: number;\n leftOffset: number;\n topOffset: number;\n};\n\nexport type CursorRenderingData = {\n color: string;\n opacity: number;\n left: number;\n top: number;\n width: number;\n height: number;\n};\n\n// Declare IText protected properties to workaround TS\nconst protectedDefaultValues = {\n _selectionDirection: null,\n _reSpace: /\\s|\\r?\\n/,\n inCompositionMode: false,\n};\n\nexport const iTextDefaultValues: Partial> = {\n selectionStart: 0,\n selectionEnd: 0,\n selectionColor: 'rgba(17,119,255,0.3)',\n isEditing: false,\n editable: true,\n editingBorderColor: 'rgba(102,153,255,0.25)',\n cursorWidth: 2,\n cursorColor: '',\n cursorDelay: 1000,\n cursorDuration: 600,\n caching: true,\n hiddenTextareaContainer: null,\n keysMap,\n keysMapRtl,\n ctrlKeysMapDown,\n ctrlKeysMapUp,\n ...protectedDefaultValues,\n};\n\n// @TODO this is not complete\ninterface UniqueITextProps {\n selectionStart: number;\n selectionEnd: number;\n}\n\nexport interface SerializedITextProps\n extends SerializedTextProps,\n UniqueITextProps {}\n\nexport interface ITextProps extends TextProps, UniqueITextProps {}\n\n/**\n * @fires changed\n * @fires selection:changed\n * @fires editing:entered\n * @fires editing:exited\n * @fires dragstart\n * @fires drag drag event firing on the drag source\n * @fires dragend\n * @fires copy\n * @fires cut\n * @fires paste\n *\n * #### Supported key combinations\n * ```\n * Move cursor: left, right, up, down\n * Select character: shift + left, shift + right\n * Select text vertically: shift + up, shift + down\n * Move cursor by word: alt + left, alt + right\n * Select words: shift + alt + left, shift + alt + right\n * Move cursor to line start/end: cmd + left, cmd + right or home, end\n * Select till start/end of line: cmd + shift + left, cmd + shift + right or shift + home, shift + end\n * Jump to start/end of text: cmd + up, cmd + down\n * Select till start/end of text: cmd + shift + up, cmd + shift + down or shift + pgUp, shift + pgDown\n * Delete character: backspace\n * Delete word: alt + backspace\n * Delete line: cmd + backspace\n * Forward delete: delete\n * Copy text: ctrl/cmd + c\n * Paste text: ctrl/cmd + v\n * Cut text: ctrl/cmd + x\n * Select entire text: ctrl/cmd + a\n * Quit editing tab or esc\n * ```\n *\n * #### Supported mouse/touch combination\n * ```\n * Position cursor: click/touch\n * Create selection: click/touch & drag\n * Create selection: click & shift + click\n * Select word: double click\n * Select line: triple click\n * ```\n */\nexport class IText<\n Props extends TOptions = Partial,\n SProps extends SerializedITextProps = SerializedITextProps,\n EventSpec extends ITextEvents = ITextEvents,\n >\n extends ITextClickBehavior\n implements UniqueITextProps\n{\n /**\n * Index where text selection starts (or where cursor is when there is no selection)\n * @type Number\n * @default\n */\n declare selectionStart: number;\n\n /**\n * Index where text selection ends\n * @type Number\n * @default\n */\n declare selectionEnd: number;\n\n declare compositionStart: number;\n\n declare compositionEnd: number;\n\n /**\n * Color of text selection\n * @type String\n * @default\n */\n declare selectionColor: string;\n\n /**\n * Indicates whether text is in editing mode\n * @type Boolean\n * @default\n */\n declare isEditing: boolean;\n\n /**\n * Indicates whether a text can be edited\n * @type Boolean\n * @default\n */\n declare editable: boolean;\n\n /**\n * Border color of text object while it's in editing mode\n * @type String\n * @default\n */\n declare editingBorderColor: string;\n\n /**\n * Width of cursor (in px)\n * @type Number\n * @default\n */\n declare cursorWidth: number;\n\n /**\n * Color of text cursor color in editing mode.\n * if not set (default) will take color from the text.\n * if set to a color value that fabric can understand, it will\n * be used instead of the color of the text at the current position.\n * @type String\n * @default\n */\n declare cursorColor: string;\n\n /**\n * Delay between cursor blink (in ms)\n * @type Number\n * @default\n */\n declare cursorDelay: number;\n\n /**\n * Duration of cursor fade in (in ms)\n * @type Number\n * @default\n */\n declare cursorDuration: number;\n\n declare compositionColor: string;\n\n /**\n * Indicates whether internal text char widths can be cached\n * @type Boolean\n * @default\n */\n declare caching: boolean;\n\n static ownDefaults = iTextDefaultValues;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...IText.ownDefaults };\n }\n\n static type = 'IText';\n\n get type() {\n const type = super.type;\n // backward compatibility\n return type === 'itext' ? 'i-text' : type;\n }\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n */\n constructor(text: string, options?: Props) {\n super(text, { ...IText.ownDefaults, ...options } as Props);\n this.initBehavior();\n }\n\n /**\n * While editing handle differently\n * @private\n * @param {string} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n if (this.isEditing && this._savedProps && key in this._savedProps) {\n // @ts-expect-error irritating TS\n this._savedProps[key] = value;\n return this;\n }\n if (key === 'canvas') {\n this.canvas instanceof Canvas &&\n this.canvas.textEditingManager.remove(this);\n value instanceof Canvas && value.textEditingManager.add(this);\n }\n return super._set(key, value);\n }\n\n /**\n * Sets selection start (left boundary of a selection)\n * @param {Number} index Index to set selection start to\n */\n setSelectionStart(index: number) {\n index = Math.max(index, 0);\n this._updateAndFire('selectionStart', index);\n }\n\n /**\n * Sets selection end (right boundary of a selection)\n * @param {Number} index Index to set selection end to\n */\n setSelectionEnd(index: number) {\n index = Math.min(index, this.text.length);\n this._updateAndFire('selectionEnd', index);\n }\n\n /**\n * @private\n * @param {String} property 'selectionStart' or 'selectionEnd'\n * @param {Number} index new position of property\n */\n protected _updateAndFire(\n property: 'selectionStart' | 'selectionEnd',\n index: number,\n ) {\n if (this[property] !== index) {\n this._fireSelectionChanged();\n this[property] = index;\n }\n this._updateTextarea();\n }\n\n /**\n * Fires the even of selection changed\n * @private\n */\n _fireSelectionChanged() {\n this.fire('selection:changed');\n this.canvas && this.canvas.fire('text:selection:changed', { target: this });\n }\n\n /**\n * Initialize text dimensions. Render all text on given context\n * or on a offscreen canvas to get the text width with measureText.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n * @private\n */\n initDimensions() {\n this.isEditing && this.initDelayedCursor();\n super.initDimensions();\n }\n\n /**\n * Gets style of a current selection/cursor (at the start position)\n * if startIndex or endIndex are not provided, selectionStart or selectionEnd will be used.\n * @param {Number} startIndex Start index to get styles at\n * @param {Number} endIndex End index to get styles at, if not specified selectionEnd or startIndex + 1\n * @param {Boolean} [complete] get full style or not\n * @return {Array} styles an array with one, zero or more Style objects\n */\n getSelectionStyles(\n startIndex: number = this.selectionStart || 0,\n endIndex: number = this.selectionEnd,\n complete?: boolean,\n ) {\n return super.getSelectionStyles(startIndex, endIndex, complete);\n }\n\n /**\n * Sets style of a current selection, if no selection exist, do not set anything.\n * @param {Object} [styles] Styles object\n * @param {Number} [startIndex] Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n */\n setSelectionStyles(\n styles: object,\n startIndex: number = this.selectionStart || 0,\n endIndex: number = this.selectionEnd,\n ) {\n return super.setSelectionStyles(styles, startIndex, endIndex);\n }\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor (or selection start)\n * @param {Number} [selectionStart] Optional index. When not given, current selectionStart is used.\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.\n */\n get2DCursorLocation(\n selectionStart = this.selectionStart,\n skipWrapping?: boolean,\n ) {\n return super.get2DCursorLocation(selectionStart, skipWrapping);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n super.render(ctx);\n // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor\n // the correct position but not at every cursor animation.\n this.cursorOffsetCache = {};\n this.renderCursorOrSelection();\n }\n\n /**\n * @override block cursor/selection logic while rendering the exported canvas\n * @todo this workaround should be replaced with a more robust solution\n */\n toCanvasElement(options?: ObjectToCanvasElementOptions): HTMLCanvasElement {\n const isEditing = this.isEditing;\n this.isEditing = false;\n const canvas = super.toCanvasElement(options);\n this.isEditing = isEditing;\n return canvas;\n }\n\n /**\n * Renders cursor or selection (depending on what exists)\n * it does on the contextTop. If contextTop is not available, do nothing.\n */\n renderCursorOrSelection() {\n if (!this.isEditing) {\n return;\n }\n const ctx = this.clearContextTop(true);\n if (!ctx) {\n return;\n }\n const boundaries = this._getCursorBoundaries();\n if (this.selectionStart === this.selectionEnd && !this.inCompositionMode) {\n this.renderCursor(ctx, boundaries);\n } else {\n this.renderSelection(ctx, boundaries);\n }\n this.canvas!.contextTopDirty = true;\n ctx.restore();\n }\n\n /**\n * Returns cursor boundaries (left, top, leftOffset, topOffset)\n * left/top are left/top of entire text box\n * leftOffset/topOffset are offset from that left/top point of a text box\n * @private\n * @param {number} [index] index from start\n * @param {boolean} [skipCaching]\n */\n _getCursorBoundaries(\n index: number = this.selectionStart,\n skipCaching?: boolean,\n ): CursorBoundaries {\n const left = this._getLeftOffset(),\n top = this._getTopOffset(),\n offsets = this._getCursorBoundariesOffsets(index, skipCaching);\n return {\n left: left,\n top: top,\n leftOffset: offsets.left,\n topOffset: offsets.top,\n };\n }\n\n /**\n * Caches and returns cursor left/top offset relative to instance's center point\n * @private\n * @param {number} index index from start\n * @param {boolean} [skipCaching]\n */\n _getCursorBoundariesOffsets(\n index: number,\n skipCaching?: boolean,\n ): { left: number; top: number } {\n if (skipCaching) {\n return this.__getCursorBoundariesOffsets(index);\n }\n if (this.cursorOffsetCache && 'top' in this.cursorOffsetCache) {\n return this.cursorOffsetCache as { left: number; top: number };\n }\n return (this.cursorOffsetCache = this.__getCursorBoundariesOffsets(index));\n }\n\n /**\n * Calculates cursor left/top offset relative to instance's center point\n * @private\n * @param {number} index index from start\n */\n __getCursorBoundariesOffsets(index: number) {\n let topOffset = 0,\n leftOffset = 0;\n const { charIndex, lineIndex } = this.get2DCursorLocation(index);\n\n for (let i = 0; i < lineIndex; i++) {\n topOffset += this.getHeightOfLine(i);\n }\n const lineLeftOffset = this._getLineLeftOffset(lineIndex);\n const bound = this.__charBounds[lineIndex][charIndex];\n bound && (leftOffset = bound.left);\n if (\n this.charSpacing !== 0 &&\n charIndex === this._textLines[lineIndex].length\n ) {\n leftOffset -= this._getWidthOfCharSpacing();\n }\n const boundaries = {\n top: topOffset,\n left: lineLeftOffset + (leftOffset > 0 ? leftOffset : 0),\n };\n if (this.direction === 'rtl') {\n if (\n this.textAlign === RIGHT ||\n this.textAlign === JUSTIFY ||\n this.textAlign === JUSTIFY_RIGHT\n ) {\n boundaries.left *= -1;\n } else if (this.textAlign === LEFT || this.textAlign === JUSTIFY_LEFT) {\n boundaries.left = lineLeftOffset - (leftOffset > 0 ? leftOffset : 0);\n } else if (\n this.textAlign === CENTER ||\n this.textAlign === JUSTIFY_CENTER\n ) {\n boundaries.left = lineLeftOffset - (leftOffset > 0 ? leftOffset : 0);\n }\n }\n return boundaries;\n }\n\n /**\n * Renders cursor on context Top, outside the animation cycle, on request\n * Used for the drag/drop effect.\n * If contextTop is not available, do nothing.\n */\n renderCursorAt(selectionStart: number) {\n this._renderCursor(\n this.canvas!.contextTop,\n this._getCursorBoundaries(selectionStart, true),\n selectionStart,\n );\n }\n\n /**\n * Renders cursor\n * @param {Object} boundaries\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderCursor(ctx: CanvasRenderingContext2D, boundaries: CursorBoundaries) {\n this._renderCursor(ctx, boundaries, this.selectionStart);\n }\n\n /**\n * Return the data needed to render the cursor for given selection start\n * The left,top are relative to the object, while width and height are prescaled\n * to look think with canvas zoom and object scaling,\n * so they depend on canvas and object scaling\n */\n getCursorRenderingData(\n selectionStart: number = this.selectionStart,\n boundaries: CursorBoundaries = this._getCursorBoundaries(selectionStart),\n ): CursorRenderingData {\n const cursorLocation = this.get2DCursorLocation(selectionStart),\n lineIndex = cursorLocation.lineIndex,\n charIndex =\n cursorLocation.charIndex > 0 ? cursorLocation.charIndex - 1 : 0,\n charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize'),\n multiplier = this.getObjectScaling().x * this.canvas!.getZoom(),\n cursorWidth = this.cursorWidth / multiplier,\n dy = this.getValueOfPropertyAt(lineIndex, charIndex, 'deltaY'),\n topOffset =\n boundaries.topOffset +\n ((1 - this._fontSizeFraction) * this.getHeightOfLine(lineIndex)) /\n this.lineHeight -\n charHeight * (1 - this._fontSizeFraction);\n\n return {\n color:\n this.cursorColor ||\n (this.getValueOfPropertyAt(lineIndex, charIndex, 'fill') as string),\n opacity: this._currentCursorOpacity,\n left: boundaries.left + boundaries.leftOffset - cursorWidth / 2,\n top: topOffset + boundaries.top + dy,\n width: cursorWidth,\n height: charHeight,\n };\n }\n\n /**\n * Render the cursor at the given selectionStart.\n *\n */\n _renderCursor(\n ctx: CanvasRenderingContext2D,\n boundaries: CursorBoundaries,\n selectionStart: number,\n ) {\n const { color, opacity, left, top, width, height } =\n this.getCursorRenderingData(selectionStart, boundaries);\n ctx.fillStyle = color;\n ctx.globalAlpha = opacity;\n ctx.fillRect(left, top, width, height);\n }\n\n /**\n * Renders text selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderSelection(ctx: CanvasRenderingContext2D, boundaries: CursorBoundaries) {\n const selection = {\n selectionStart: this.inCompositionMode\n ? this.hiddenTextarea!.selectionStart\n : this.selectionStart,\n selectionEnd: this.inCompositionMode\n ? this.hiddenTextarea!.selectionEnd\n : this.selectionEnd,\n };\n this._renderSelection(ctx, selection, boundaries);\n }\n\n /**\n * Renders drag start text selection\n */\n renderDragSourceEffect() {\n const dragStartSelection =\n this.draggableTextDelegate.getDragStartSelection()!;\n this._renderSelection(\n this.canvas!.contextTop,\n dragStartSelection,\n this._getCursorBoundaries(dragStartSelection.selectionStart, true),\n );\n }\n\n renderDropTargetEffect(e: DragEvent) {\n const dragSelection = this.getSelectionStartFromPointer(e);\n this.renderCursorAt(dragSelection);\n }\n\n /**\n * Renders text selection\n * @private\n * @param {{ selectionStart: number, selectionEnd: number }} selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n _renderSelection(\n ctx: CanvasRenderingContext2D,\n selection: { selectionStart: number; selectionEnd: number },\n boundaries: CursorBoundaries,\n ) {\n const selectionStart = selection.selectionStart,\n selectionEnd = selection.selectionEnd,\n isJustify = this.textAlign.includes(JUSTIFY),\n start = this.get2DCursorLocation(selectionStart),\n end = this.get2DCursorLocation(selectionEnd),\n startLine = start.lineIndex,\n endLine = end.lineIndex,\n startChar = start.charIndex < 0 ? 0 : start.charIndex,\n endChar = end.charIndex < 0 ? 0 : end.charIndex;\n\n for (let i = startLine; i <= endLine; i++) {\n const lineOffset = this._getLineLeftOffset(i) || 0;\n let lineHeight = this.getHeightOfLine(i),\n realLineHeight = 0,\n boxStart = 0,\n boxEnd = 0;\n\n if (i === startLine) {\n boxStart = this.__charBounds[startLine][startChar].left;\n }\n if (i >= startLine && i < endLine) {\n boxEnd =\n isJustify && !this.isEndOfWrapping(i)\n ? this.width\n : this.getLineWidth(i) || 5; // WTF is this 5?\n } else if (i === endLine) {\n if (endChar === 0) {\n boxEnd = this.__charBounds[endLine][endChar].left;\n } else {\n const charSpacing = this._getWidthOfCharSpacing();\n boxEnd =\n this.__charBounds[endLine][endChar - 1].left +\n this.__charBounds[endLine][endChar - 1].width -\n charSpacing;\n }\n }\n realLineHeight = lineHeight;\n if (this.lineHeight < 1 || (i === endLine && this.lineHeight > 1)) {\n lineHeight /= this.lineHeight;\n }\n let drawStart = boundaries.left + lineOffset + boxStart,\n drawHeight = lineHeight,\n extraTop = 0;\n const drawWidth = boxEnd - boxStart;\n if (this.inCompositionMode) {\n ctx.fillStyle = this.compositionColor || 'black';\n drawHeight = 1;\n extraTop = lineHeight;\n } else {\n ctx.fillStyle = this.selectionColor;\n }\n if (this.direction === 'rtl') {\n if (\n this.textAlign === RIGHT ||\n this.textAlign === JUSTIFY ||\n this.textAlign === JUSTIFY_RIGHT\n ) {\n drawStart = this.width - drawStart - drawWidth;\n } else if (this.textAlign === LEFT || this.textAlign === JUSTIFY_LEFT) {\n drawStart = boundaries.left + lineOffset - boxEnd;\n } else if (\n this.textAlign === CENTER ||\n this.textAlign === JUSTIFY_CENTER\n ) {\n drawStart = boundaries.left + lineOffset - boxEnd;\n }\n }\n ctx.fillRect(\n drawStart,\n boundaries.top + boundaries.topOffset + extraTop,\n drawWidth,\n drawHeight,\n );\n boundaries.topOffset += realLineHeight;\n }\n }\n\n /**\n * High level function to know the height of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns fontSize of char at the current cursor\n * Unused from the library, is for the end user\n * @return {Number} Character font size\n */\n getCurrentCharFontSize(): number {\n const cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, 'fontSize');\n }\n\n /**\n * High level function to know the color of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns color (fill) of char at the current cursor\n * if the text object has a pattern or gradient for filler, it will return that.\n * Unused by the library, is for the end user\n * @return {String | TFiller} Character color (fill)\n */\n getCurrentCharColor(): string | TFiller | null {\n const cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, FILL);\n }\n\n /**\n * Returns the cursor position for the getCurrent.. functions\n * @private\n */\n _getCurrentCharIndex() {\n const cursorPosition = this.get2DCursorLocation(this.selectionStart, true),\n charIndex =\n cursorPosition.charIndex > 0 ? cursorPosition.charIndex - 1 : 0;\n return { l: cursorPosition.lineIndex, c: charIndex };\n }\n\n dispose() {\n this.exitEditingImpl();\n this.draggableTextDelegate.dispose();\n super.dispose();\n }\n}\n\nclassRegistry.setClass(IText);\n// legacy\nclassRegistry.setClass(IText, 'i-text');\n","import type { TClassProperties, TOptions } from '../typedefs';\nimport { IText } from './IText/IText';\nimport { classRegistry } from '../ClassRegistry';\nimport { createTextboxDefaultControls } from '../controls/commonControls';\nimport { JUSTIFY } from './Text/constants';\nimport type { TextStyleDeclaration } from './Text/StyledText';\nimport type { SerializedITextProps, ITextProps } from './IText/IText';\nimport type { ITextEvents } from './IText/ITextBehavior';\nimport type { TextLinesInfo } from './Text/Text';\nimport type { Control } from '../controls/Control';\n\n// @TODO: Many things here are configuration related and shouldn't be on the class nor prototype\n// regexes, list of properties that are not suppose to change by instances, magic consts.\n// this will be a separated effort\nexport const textboxDefaultValues: Partial> = {\n minWidth: 20,\n dynamicMinWidth: 2,\n lockScalingFlip: true,\n noScaleCache: false,\n _wordJoiners: /[ \\t\\r]/,\n splitByGrapheme: false,\n};\n\nexport type GraphemeData = {\n wordsData: {\n word: string[];\n width: number;\n }[][];\n largestWordWidth: number;\n};\n\nexport type StyleMap = Record;\n\n// @TODO this is not complete\ninterface UniqueTextboxProps {\n minWidth: number;\n splitByGrapheme: boolean;\n dynamicMinWidth: number;\n _wordJoiners: RegExp;\n}\n\nexport interface SerializedTextboxProps\n extends SerializedITextProps,\n Pick {}\n\nexport interface TextboxProps extends ITextProps, UniqueTextboxProps {}\n\n/**\n * Textbox class, based on IText, allows the user to resize the text rectangle\n * and wraps lines automatically. Textboxes have their Y scaling locked, the\n * user can only change width. Height is adjusted automatically based on the\n * wrapping of lines.\n */\nexport class Textbox<\n Props extends TOptions = Partial,\n SProps extends SerializedTextboxProps = SerializedTextboxProps,\n EventSpec extends ITextEvents = ITextEvents,\n >\n extends IText\n implements UniqueTextboxProps\n{\n /**\n * Minimum width of textbox, in pixels.\n * @type Number\n * @default\n */\n declare minWidth: number;\n\n /**\n * Minimum calculated width of a textbox, in pixels.\n * fixed to 2 so that an empty textbox cannot go to 0\n * and is still selectable without text.\n * @type Number\n * @default\n */\n declare dynamicMinWidth: number;\n\n /**\n * Use this boolean property in order to split strings that have no white space concept.\n * this is a cheap way to help with chinese/japanese\n * @type Boolean\n * @since 2.6.0\n */\n declare splitByGrapheme: boolean;\n\n declare _wordJoiners: RegExp;\n\n declare _styleMap: StyleMap;\n\n declare isWrapping: boolean;\n\n static type = 'Textbox';\n\n static textLayoutProperties = [...IText.textLayoutProperties, 'width'];\n\n static ownDefaults = textboxDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...Textbox.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n */\n constructor(text: string, options?: Props) {\n super(text, { ...Textbox.ownDefaults, ...options } as Props);\n }\n\n /**\n * Creates the default control object.\n * If you prefer to have on instance of controls shared among all objects\n * make this function return an empty object and add controls to the ownDefaults object\n */\n static createControls(): { controls: Record } {\n return { controls: createTextboxDefaultControls() };\n }\n\n /**\n * Unlike superclass's version of this function, Textbox does not update\n * its width.\n * @private\n * @override\n */\n initDimensions() {\n if (!this.initialized) {\n return;\n }\n this.isEditing && this.initDelayedCursor();\n this._clearCache();\n // clear dynamicMinWidth as it will be different after we re-wrap line\n this.dynamicMinWidth = 0;\n // wrap lines\n this._styleMap = this._generateStyleMap(this._splitText());\n // if after wrapping, the width is smaller than dynamicMinWidth, change the width and re-wrap\n if (this.dynamicMinWidth > this.width) {\n this._set('width', this.dynamicMinWidth);\n }\n if (this.textAlign.includes(JUSTIFY)) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n // clear cache and re-calculate height\n this.height = this.calcTextHeight();\n }\n\n /**\n * Generate an object that translates the style object so that it is\n * broken up by visual lines (new lines and automatic wrapping).\n * The original text styles object is broken up by actual lines (new lines only),\n * which is only sufficient for Text / IText\n * @private\n */\n _generateStyleMap(textInfo: TextLinesInfo): StyleMap {\n let realLineCount = 0,\n realLineCharCount = 0,\n charCount = 0;\n const map: StyleMap = {};\n\n for (let i = 0; i < textInfo.graphemeLines.length; i++) {\n if (textInfo.graphemeText[charCount] === '\\n' && i > 0) {\n realLineCharCount = 0;\n charCount++;\n realLineCount++;\n } else if (\n !this.splitByGrapheme &&\n this._reSpaceAndTab.test(textInfo.graphemeText[charCount]) &&\n i > 0\n ) {\n // this case deals with space's that are removed from end of lines when wrapping\n realLineCharCount++;\n charCount++;\n }\n\n map[i] = { line: realLineCount, offset: realLineCharCount };\n\n charCount += textInfo.graphemeLines[i].length;\n realLineCharCount += textInfo.graphemeLines[i].length;\n }\n\n return map;\n }\n\n /**\n * Returns true if object has a style property or has it on a specified line\n * @param {Number} lineIndex\n * @return {Boolean}\n */\n styleHas(property: keyof TextStyleDeclaration, lineIndex: number): boolean {\n if (this._styleMap && !this.isWrapping) {\n const map = this._styleMap[lineIndex];\n if (map) {\n lineIndex = map.line;\n }\n }\n return super.styleHas(property, lineIndex);\n }\n\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles(lineIndex: number): boolean {\n if (!this.styles) {\n return true;\n }\n let offset = 0,\n nextLineIndex = lineIndex + 1,\n nextOffset: number,\n shouldLimit = false;\n const map = this._styleMap[lineIndex],\n mapNextLine = this._styleMap[lineIndex + 1];\n if (map) {\n lineIndex = map.line;\n offset = map.offset;\n }\n if (mapNextLine) {\n nextLineIndex = mapNextLine.line;\n shouldLimit = nextLineIndex === lineIndex;\n nextOffset = mapNextLine.offset;\n }\n const obj =\n typeof lineIndex === 'undefined'\n ? this.styles\n : { line: this.styles[lineIndex] };\n for (const p1 in obj) {\n for (const p2 in obj[p1]) {\n const p2Number = parseInt(p2, 10);\n if (p2Number >= offset && (!shouldLimit || p2Number < nextOffset!)) {\n // eslint-disable-next-line no-unused-vars\n for (const p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n /**\n * @protected\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {TextStyleDeclaration} a style object reference to the existing one or a new empty object when undefined\n */\n _getStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n ): TextStyleDeclaration {\n if (this._styleMap && !this.isWrapping) {\n const map = this._styleMap[lineIndex];\n if (!map) {\n return {};\n }\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n }\n return super._getStyleDeclaration(lineIndex, charIndex);\n }\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n protected _setStyleDeclaration(\n lineIndex: number,\n charIndex: number,\n style: object,\n ) {\n const map = this._styleMap[lineIndex];\n super._setStyleDeclaration(map.line, map.offset + charIndex, style);\n }\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n protected _deleteStyleDeclaration(lineIndex: number, charIndex: number) {\n const map = this._styleMap[lineIndex];\n super._deleteStyleDeclaration(map.line, map.offset + charIndex);\n }\n\n /**\n * probably broken need a fix\n * Returns the real style line that correspond to the wrapped lineIndex line\n * Used just to verify if the line does exist or not.\n * @param {Number} lineIndex\n * @returns {Boolean} if the line exists or not\n * @private\n */\n protected _getLineStyle(lineIndex: number): boolean {\n const map = this._styleMap[lineIndex];\n return !!this.styles[map.line];\n }\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @param {Object} style\n * @private\n */\n protected _setLineStyle(lineIndex: number) {\n const map = this._styleMap[lineIndex];\n super._setLineStyle(map.line);\n }\n\n /**\n * Wraps text using the 'width' property of Textbox. First this function\n * splits text on newlines, so we preserve newlines entered by the user.\n * Then it wraps each line using the width of the Textbox by calling\n * _wrapLine().\n * @param {Array} lines The string array of text that is split into lines\n * @param {Number} desiredWidth width you want to wrap to\n * @returns {Array} Array of lines\n */\n _wrapText(lines: string[], desiredWidth: number): string[][] {\n this.isWrapping = true;\n // extract all thewords and the widths to optimally wrap lines.\n const data = this.getGraphemeDataForRender(lines);\n const wrapped: string[][] = [];\n for (let i = 0; i < data.wordsData.length; i++) {\n wrapped.push(...this._wrapLine(i, desiredWidth, data));\n }\n this.isWrapping = false;\n return wrapped;\n }\n\n /**\n * For each line of text terminated by an hard line stop,\n * measure each word width and extract the largest word from all.\n * The returned words here are the one that at the end will be rendered.\n * @param {string[]} lines the lines we need to measure\n *\n */\n getGraphemeDataForRender(lines: string[]): GraphemeData {\n const splitByGrapheme = this.splitByGrapheme,\n infix = splitByGrapheme ? '' : ' ';\n\n let largestWordWidth = 0;\n\n const data = lines.map((line, lineIndex) => {\n let offset = 0;\n const wordsOrGraphemes = splitByGrapheme\n ? this.graphemeSplit(line)\n : this.wordSplit(line);\n\n if (wordsOrGraphemes.length === 0) {\n return [{ word: [], width: 0 }];\n }\n\n return wordsOrGraphemes.map((word: string) => {\n // if using splitByGrapheme words are already in graphemes.\n const graphemeArray = splitByGrapheme\n ? [word]\n : this.graphemeSplit(word);\n const width = this._measureWord(graphemeArray, lineIndex, offset);\n largestWordWidth = Math.max(width, largestWordWidth);\n offset += graphemeArray.length + infix.length;\n return { word: graphemeArray, width };\n });\n });\n\n return {\n wordsData: data,\n largestWordWidth,\n };\n }\n\n /**\n * Helper function to measure a string of text, given its lineIndex and charIndex offset\n * It gets called when charBounds are not available yet.\n * Override if necessary\n * Use with {@link Textbox#wordSplit}\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {String} text\n * @param {number} lineIndex\n * @param {number} charOffset\n * @returns {number}\n */\n _measureWord(word: string[], lineIndex: number, charOffset = 0): number {\n let width = 0,\n prevGrapheme;\n const skipLeft = true;\n for (let i = 0, len = word.length; i < len; i++) {\n const box = this._getGraphemeBox(\n word[i],\n lineIndex,\n i + charOffset,\n prevGrapheme,\n skipLeft,\n );\n width += box.kernedWidth;\n prevGrapheme = word[i];\n }\n return width;\n }\n\n /**\n * Override this method to customize word splitting\n * Use with {@link Textbox#_measureWord}\n * @param {string} value\n * @returns {string[]} array of words\n */\n wordSplit(value: string): string[] {\n return value.split(this._wordJoiners);\n }\n\n /**\n * Wraps a line of text using the width of the Textbox as desiredWidth\n * and leveraging the known width o words from GraphemeData\n * @private\n * @param {Number} lineIndex\n * @param {Number} desiredWidth width you want to wrap the line to\n * @param {GraphemeData} graphemeData an object containing all the lines' words width.\n * @param {Number} reservedSpace space to remove from wrapping for custom functionalities\n * @returns {Array} Array of line(s) into which the given text is wrapped\n * to.\n */\n _wrapLine(\n lineIndex: number,\n desiredWidth: number,\n { largestWordWidth, wordsData }: GraphemeData,\n reservedSpace = 0,\n ): string[][] {\n const additionalSpace = this._getWidthOfCharSpacing(),\n splitByGrapheme = this.splitByGrapheme,\n graphemeLines = [],\n infix = splitByGrapheme ? '' : ' ';\n\n let lineWidth = 0,\n line: string[] = [],\n // spaces in different languages?\n offset = 0,\n infixWidth = 0,\n lineJustStarted = true;\n\n desiredWidth -= reservedSpace;\n\n const maxWidth = Math.max(\n desiredWidth,\n largestWordWidth,\n this.dynamicMinWidth,\n );\n // layout words\n const data = wordsData[lineIndex];\n offset = 0;\n let i;\n for (i = 0; i < data.length; i++) {\n const { word, width: wordWidth } = data[i];\n offset += word.length;\n\n lineWidth += infixWidth + wordWidth - additionalSpace;\n if (lineWidth > maxWidth && !lineJustStarted) {\n graphemeLines.push(line);\n line = [];\n lineWidth = wordWidth;\n lineJustStarted = true;\n } else {\n lineWidth += additionalSpace;\n }\n\n if (!lineJustStarted && !splitByGrapheme) {\n line.push(infix);\n }\n line = line.concat(word);\n\n infixWidth = splitByGrapheme\n ? 0\n : this._measureWord([infix], lineIndex, offset);\n offset++;\n lineJustStarted = false;\n }\n\n i && graphemeLines.push(line);\n\n // TODO: this code is probably not necessary anymore.\n // it can be moved out of this function since largestWordWidth is now\n // known in advance\n if (largestWordWidth + reservedSpace > this.dynamicMinWidth) {\n this.dynamicMinWidth = largestWordWidth - additionalSpace + reservedSpace;\n }\n return graphemeLines;\n }\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @param {Number} lineIndex text to split\n * @return {Boolean}\n */\n isEndOfWrapping(lineIndex: number): boolean {\n if (!this._styleMap[lineIndex + 1]) {\n // is last line, return true;\n return true;\n }\n if (this._styleMap[lineIndex + 1].line !== this._styleMap[lineIndex].line) {\n // this is last line before a line break, return true;\n return true;\n }\n return false;\n }\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * This is important only for splitByGrapheme at the end of wrapping.\n * If we are not wrapping the offset is always 1\n * @return Number\n */\n missingNewlineOffset(lineIndex: number, skipWrapping?: boolean): 0 | 1 {\n if (this.splitByGrapheme && !skipWrapping) {\n return this.isEndOfWrapping(lineIndex) ? 1 : 0;\n }\n return 1;\n }\n\n /**\n * Gets lines of text to render in the Textbox. This function calculates\n * text wrapping on the fly every time it is called.\n * @param {String} text text to split\n * @returns {Array} Array of lines in the Textbox.\n * @override\n */\n _splitTextIntoLines(text: string) {\n const newText = super._splitTextIntoLines(text),\n graphemeLines = this._wrapText(newText.lines, this.width),\n lines = new Array(graphemeLines.length);\n for (let i = 0; i < graphemeLines.length; i++) {\n lines[i] = graphemeLines[i].join('');\n }\n newText.lines = lines;\n newText.graphemeLines = graphemeLines;\n return newText;\n }\n\n getMinWidth() {\n return Math.max(this.minWidth, this.dynamicMinWidth);\n }\n\n _removeExtraneousStyles() {\n const linesToKeep = new Map();\n for (const prop in this._styleMap) {\n const propNumber = parseInt(prop, 10);\n if (this._textLines[propNumber]) {\n const lineIndex = this._styleMap[prop].line;\n linesToKeep.set(`${lineIndex}`, true);\n }\n }\n for (const prop in this.styles) {\n if (!linesToKeep.has(prop)) {\n delete this.styles[prop];\n }\n }\n }\n\n /**\n * Returns object representation of an instance\n * @method toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n return super.toObject([\n 'minWidth',\n 'splitByGrapheme',\n ...propertiesToInclude,\n ] as K[]) as Pick & SProps;\n }\n}\n\nclassRegistry.setClass(Textbox);\n","import { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\nimport { sendPointToPlane } from '../../util/misc/planeChange';\nimport type { LayoutStrategyResult, StrictLayoutContext } from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { getObjectBounds } from './utils';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will adjust the bounding box to match the clip path bounding box.\n */\nexport class ClipPathLayout extends LayoutStrategy {\n static readonly type = 'clip-path';\n\n shouldPerformLayout(context: StrictLayoutContext): boolean {\n return !!context.target.clipPath && super.shouldPerformLayout(context);\n }\n\n shouldLayoutClipPath() {\n return false;\n }\n\n calcLayoutResult(\n context: StrictLayoutContext,\n objects: FabricObject[],\n ): LayoutStrategyResult | undefined {\n const { target } = context;\n const { clipPath, group } = target;\n if (!clipPath || !this.shouldPerformLayout(context)) {\n return;\n }\n // TODO: remove stroke calculation from this case\n const { width, height } = makeBoundingBoxFromPoints(\n getObjectBounds(target, clipPath as FabricObject),\n );\n const size = new Point(width, height);\n if (clipPath.absolutePositioned) {\n // we want the center point to exist in group's containing plane\n const clipPathCenter = sendPointToPlane(\n clipPath.getRelativeCenterPoint(),\n undefined,\n group ? group.calcTransformMatrix() : undefined,\n );\n return {\n center: clipPathCenter,\n size,\n };\n } else {\n // we want the center point to exist in group's containing plane, so we send it upwards\n const clipPathCenter = clipPath\n .getRelativeCenterPoint()\n .transform(target.calcOwnMatrix(), true);\n if (this.shouldPerformLayout(context)) {\n // the clip path is positioned relative to the group's center which is affected by the bbox\n // so we first calculate the bbox\n const { center = new Point(), correction = new Point() } =\n this.calcBoundingBox(objects, context) || {};\n return {\n center: center.add(clipPathCenter),\n correction: correction.subtract(clipPathCenter),\n size,\n };\n } else {\n return {\n center: target.getRelativeCenterPoint().add(clipPathCenter),\n size,\n };\n }\n }\n }\n}\n\nclassRegistry.setClass(ClipPathLayout);\n","import { Point } from '../../Point';\nimport type {\n InitializationLayoutContext,\n LayoutStrategyResult,\n StrictLayoutContext,\n} from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { classRegistry } from '../../ClassRegistry';\n\n/**\n * Layout will keep target's initial size.\n */\nexport class FixedLayout extends LayoutStrategy {\n static readonly type = 'fixed';\n\n /**\n * @override respect target's initial size\n */\n getInitialSize(\n { target }: StrictLayoutContext & InitializationLayoutContext,\n { size }: Pick,\n ): Point {\n return new Point(target.width || size.x, target.height || size.y);\n }\n}\n\nclassRegistry.setClass(FixedLayout);\n","import { LayoutManager } from './LayoutManager';\nimport type { RegistrationContext, StrictLayoutContext } from './types';\nimport type { Group } from '../shapes/Group';\n\n/**\n * Today the LayoutManager class also takes care of subscribing event handlers\n * to update the group layout when the group is interactive and a transform is applied\n * to a child object.\n * The ActiveSelection is never interactive, but it could contain objects from\n * groups that are.\n * The standard LayoutManager would subscribe the children of the activeSelection to\n * perform layout changes to the active selection itself, what we need instead is that\n * the transformation applied to the active selection will trigger changes to the\n * original group of the children ( the one referenced under the parent property )\n * This subclass of the LayoutManager has a single duty to fill the gap of this difference.`\n */\nexport class ActiveSelectionLayoutManager extends LayoutManager {\n subscribeTargets(\n context: RegistrationContext & Partial,\n ): void {\n const activeSelection = context.target;\n const parents = context.targets.reduce((parents, target) => {\n target.parent && parents.add(target.parent);\n return parents;\n }, new Set());\n parents.forEach((parent) => {\n parent.layoutManager.subscribeTargets({\n target: parent,\n targets: [activeSelection],\n });\n });\n }\n\n /**\n * unsubscribe from parent only if all its children were deselected\n */\n unsubscribeTargets(\n context: RegistrationContext & Partial,\n ): void {\n const activeSelection = context.target;\n const selectedObjects = activeSelection.getObjects();\n const parents = context.targets.reduce((parents, target) => {\n target.parent && parents.add(target.parent);\n return parents;\n }, new Set());\n parents.forEach((parent) => {\n !selectedObjects.some((object) => object.parent === parent) &&\n parent.layoutManager.unsubscribeTargets({\n target: parent,\n targets: [activeSelection],\n });\n });\n }\n}\n","import type { ControlRenderingStyleOverride } from '../controls/controlRendering';\nimport { classRegistry } from '../ClassRegistry';\nimport type { GroupProps } from './Group';\nimport { Group } from './Group';\nimport type { FabricObject } from './Object/FabricObject';\nimport {\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n} from '../LayoutManager/constants';\nimport type { TClassProperties } from '../typedefs';\nimport { log } from '../util/internals/console';\nimport { ActiveSelectionLayoutManager } from '../LayoutManager/ActiveSelectionLayoutManager';\n\nexport type MultiSelectionStacking = 'canvas-stacking' | 'selection-order';\n\nexport interface ActiveSelectionOptions extends GroupProps {\n multiSelectionStacking: MultiSelectionStacking;\n}\n\nconst activeSelectionDefaultValues: Partial> =\n {\n multiSelectionStacking: 'canvas-stacking',\n };\n\n/**\n * Used by Canvas to manage selection.\n *\n * @example\n * class MyActiveSelection extends ActiveSelection {\n * ...\n * }\n *\n * // override the default `ActiveSelection` class\n * classRegistry.setClass(MyActiveSelection)\n */\nexport class ActiveSelection extends Group {\n static type = 'ActiveSelection';\n\n static ownDefaults: Record = activeSelectionDefaultValues;\n\n static getDefaults(): Record {\n return { ...super.getDefaults(), ...ActiveSelection.ownDefaults };\n }\n\n /**\n * The ActiveSelection needs to use the ActiveSelectionLayoutManager\n * or selections on interactive groups may be broken\n */\n declare layoutManager: ActiveSelectionLayoutManager;\n\n /**\n * controls how selected objects are added during a multiselection event\n * - `canvas-stacking` adds the selected object to the active selection while respecting canvas object stacking order\n * - `selection-order` adds the selected object to the top of the stack,\n * meaning that the stack is ordered by the order in which objects were selected\n * @default `canvas-stacking`\n */\n declare multiSelectionStacking: MultiSelectionStacking;\n\n constructor(\n objects: FabricObject[] = [],\n options: Partial = {},\n ) {\n super();\n Object.assign(this, ActiveSelection.ownDefaults);\n this.setOptions(options);\n const { left, top, layoutManager } = options;\n this.groupInit(objects, {\n left,\n top,\n layoutManager: layoutManager ?? new ActiveSelectionLayoutManager(),\n });\n }\n\n /**\n * @private\n */\n _shouldSetNestedCoords() {\n return true;\n }\n\n /**\n * @private\n * @override we don't want the selection monitor to be active\n */\n __objectSelectionMonitor() {\n // noop\n }\n\n /**\n * Adds objects with respect to {@link multiSelectionStacking}\n * @param targets object to add to selection\n */\n multiSelectAdd(...targets: FabricObject[]) {\n if (this.multiSelectionStacking === 'selection-order') {\n this.add(...targets);\n } else {\n // respect object stacking as it is on canvas\n // perf enhancement for large ActiveSelection: consider a binary search of `isInFrontOf`\n targets.forEach((target) => {\n const index = this._objects.findIndex((obj) => obj.isInFrontOf(target));\n const insertAt =\n index === -1\n ? // `target` is in front of all other objects\n this.size()\n : index;\n this.insertAt(insertAt, target);\n });\n }\n }\n\n /**\n * @override block ancestors/descendants of selected objects from being selected to prevent a circular object tree\n */\n canEnterGroup(object: FabricObject) {\n if (\n this.getObjects().some(\n (o) => o.isDescendantOf(object) || object.isDescendantOf(o),\n )\n ) {\n // prevent circular object tree\n log(\n 'error',\n 'ActiveSelection: circular object trees are not supported, this call has no effect',\n );\n return false;\n }\n\n return super.canEnterGroup(object);\n }\n\n /**\n * Change an object so that it can be part of an active selection.\n * this method is called by multiselectAdd from canvas code.\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n */\n enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n // This condition check that the object has currently a group, and the group\n // is also its parent, meaning that is not in an active selection, but is\n // in a normal group.\n if (object.parent && object.parent === object.group) {\n // Disconnect the object from the group functionalities, but keep the ref parent intact\n // for later re-enter\n object.parent._exitGroup(object);\n // in this case the object is probably inside an active selection.\n } else if (object.group && object.parent !== object.group) {\n // in this case group.remove will also clear the old parent reference.\n object.group.remove(object);\n }\n // enter the active selection from a render perspective\n // the object will be in the objects array of both the ActiveSelection and the Group\n // but referenced in the group's _activeObjects so that it won't be rendered twice.\n this._enterGroup(object, removeParentTransform);\n }\n\n /**\n * we want objects to retain their canvas ref when exiting instance\n * @private\n * @param {FabricObject} object\n * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n */\n exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n this._exitGroup(object, removeParentTransform);\n // return to parent\n object.parent && object.parent._enterGroup(object, true);\n }\n\n /**\n * @private\n * @param {'added'|'removed'} type\n * @param {FabricObject[]} targets\n */\n _onAfterObjectsChange(type: 'added' | 'removed', targets: FabricObject[]) {\n super._onAfterObjectsChange(type, targets);\n const groups = new Set();\n targets.forEach((object) => {\n const { parent } = object;\n parent && groups.add(parent);\n });\n if (type === LAYOUT_TYPE_REMOVED) {\n // invalidate groups' layout and mark as dirty\n groups.forEach((group) => {\n group._onAfterObjectsChange(LAYOUT_TYPE_ADDED, targets);\n });\n } else {\n // mark groups as dirty\n groups.forEach((group) => {\n group._set('dirty', true);\n });\n }\n }\n\n /**\n * @override remove all objects\n */\n onDeselect() {\n this.removeAll();\n return false;\n }\n\n /**\n * Returns string representation of a group\n * @return {String}\n */\n toString() {\n return `#`;\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * @return {Boolean}\n */\n shouldCache() {\n return false;\n }\n\n /**\n * Check if this group or its parent group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache() {\n return false;\n }\n\n /**\n * Renders controls and borders for the object\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [styleOverride] properties to override the object style\n * @param {Object} [childrenOverride] properties to override the children overrides\n */\n _renderControls(\n ctx: CanvasRenderingContext2D,\n styleOverride?: ControlRenderingStyleOverride,\n childrenOverride?: ControlRenderingStyleOverride,\n ) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n const options = {\n hasControls: false,\n ...childrenOverride,\n forActiveSelection: true,\n };\n for (let i = 0; i < this._objects.length; i++) {\n this._objects[i]._renderControls(ctx, options);\n }\n super._renderControls(ctx, styleOverride);\n ctx.restore();\n }\n}\n\nclassRegistry.setClass(ActiveSelection);\nclassRegistry.setClass(ActiveSelection, 'activeSelection');\n","/**\n * Canvas 2D filter backend.\n */\nimport type { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TPipelineResources } from './typedefs';\n\nexport class Canvas2dFilterBackend {\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: TPipelineResources = {};\n\n /**\n * Apply a set of filters against a source image and draw the filtered output\n * to the provided destination canvas.\n *\n * @param {EnhancedFilter} filters The filter to apply.\n * @param {HTMLImageElement|HTMLCanvasElement} sourceElement The source to be filtered.\n * @param {Number} sourceWidth The width of the source input.\n * @param {Number} sourceHeight The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n */\n applyFilters(\n filters: BaseFilter>[],\n sourceElement: CanvasImageSource,\n sourceWidth: number,\n sourceHeight: number,\n targetCanvas: HTMLCanvasElement,\n ): T2DPipelineState | void {\n const ctx = targetCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.drawImage(sourceElement, 0, 0, sourceWidth, sourceHeight);\n const imageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n const originalImageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n const pipelineState: T2DPipelineState = {\n sourceWidth,\n sourceHeight,\n imageData,\n originalEl: sourceElement,\n originalImageData,\n canvasEl: targetCanvas,\n ctx,\n filterBackend: this,\n };\n filters.forEach((filter) => {\n filter.applyTo(pipelineState);\n });\n const { imageData: imageDataPostFilter } = pipelineState;\n if (\n imageDataPostFilter.width !== sourceWidth ||\n imageDataPostFilter.height !== sourceHeight\n ) {\n targetCanvas.width = imageDataPostFilter.width;\n targetCanvas.height = imageDataPostFilter.height;\n }\n ctx.putImageData(imageDataPostFilter, 0, 0);\n return pipelineState;\n }\n}\n","import { config } from '../config';\nimport { createCanvasElementFor } from '../util/misc/dom';\nimport type {\n TWebGLPipelineState,\n TProgramCache,\n TTextureCache,\n TPipelineResources,\n} from './typedefs';\nimport type { BaseFilter } from './BaseFilter';\n\nexport class WebGLFilterBackend {\n declare tileSize: number;\n\n /**\n * Define ...\n **/\n aPosition: Float32Array = new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]);\n\n /**\n * If GLPut data is the fastest operation, or if forced, this buffer will be used\n * to transfer the data back in the 2d logic\n **/\n declare imageBuffer?: ArrayBuffer;\n\n declare canvas: HTMLCanvasElement;\n\n /**\n * The Webgl context that will execute the operations for filtering\n **/\n declare gl: WebGLRenderingContext;\n\n /**\n * Keyed map for shader cache\n **/\n declare programCache: TProgramCache;\n\n /**\n * Keyed map for texture cache\n **/\n declare textureCache: TTextureCache;\n\n /**\n * Contains GPU info for debug\n **/\n declare gpuInfo: any;\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: TPipelineResources = {};\n\n constructor({ tileSize = config.textureSize } = {}) {\n this.tileSize = tileSize;\n this.setupGLContext(tileSize, tileSize);\n this.captureGPUInfo();\n }\n\n /**\n * Setup a WebGL context suitable for filtering, and bind any needed event handlers.\n */\n setupGLContext(width: number, height: number): void {\n this.dispose();\n this.createWebGLCanvas(width, height);\n }\n\n /**\n * Create a canvas element and associated WebGL context and attaches them as\n * class properties to the GLFilterBackend class.\n */\n createWebGLCanvas(width: number, height: number): void {\n const canvas = createCanvasElementFor({ width, height });\n const glOptions = {\n alpha: true,\n premultipliedAlpha: false,\n depth: false,\n stencil: false,\n antialias: false,\n },\n gl = canvas.getContext('webgl', glOptions) as WebGLRenderingContext;\n\n if (!gl) {\n return;\n }\n gl.clearColor(0, 0, 0, 0);\n // this canvas can fire webglcontextlost and webglcontextrestored\n this.canvas = canvas;\n this.gl = gl;\n }\n\n /**\n * Attempts to apply the requested filters to the source provided, drawing the filtered output\n * to the provided target canvas.\n *\n * @param {Array} filters The filters to apply.\n * @param {TexImageSource} source The source to be filtered.\n * @param {Number} width The width of the source input.\n * @param {Number} height The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n * @param {String|undefined} cacheKey A key used to cache resources related to the source. If\n * omitted, caching will be skipped.\n */\n applyFilters(\n filters: BaseFilter>[],\n source: TexImageSource,\n width: number,\n height: number,\n targetCanvas: HTMLCanvasElement,\n cacheKey?: string,\n ): TWebGLPipelineState | undefined {\n const gl = this.gl;\n const ctx = targetCanvas.getContext('2d');\n if (!gl || !ctx) {\n return;\n }\n let cachedTexture;\n if (cacheKey) {\n cachedTexture = this.getCachedTexture(cacheKey, source);\n }\n const pipelineState: TWebGLPipelineState = {\n originalWidth:\n (source as HTMLImageElement).width ||\n // @ts-expect-error is this a bug? should this be naturalWidth? or is this the pipeline state?\n (source as HTMLImageElement).originalWidth ||\n 0,\n originalHeight:\n (source as HTMLImageElement).height ||\n // @ts-expect-error is this a bug? should this be naturalHeight? or is this the pipeline state?\n (source as HTMLImageElement).originalHeight ||\n 0,\n sourceWidth: width,\n sourceHeight: height,\n destinationWidth: width,\n destinationHeight: height,\n context: gl,\n sourceTexture: this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined,\n ),\n targetTexture: this.createTexture(gl, width, height),\n originalTexture:\n cachedTexture ||\n this.createTexture(\n gl,\n width,\n height,\n !cachedTexture ? source : undefined,\n )!,\n passes: filters.length,\n webgl: true,\n aPosition: this.aPosition,\n programCache: this.programCache,\n pass: 0,\n filterBackend: this,\n targetCanvas: targetCanvas,\n };\n const tempFbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, tempFbo);\n filters.forEach((filter: any) => {\n filter && filter.applyTo(pipelineState);\n });\n resizeCanvasIfNeeded(pipelineState);\n this.copyGLTo2D(gl, pipelineState);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.deleteTexture(pipelineState.sourceTexture);\n gl.deleteTexture(pipelineState.targetTexture);\n gl.deleteFramebuffer(tempFbo);\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n return pipelineState;\n }\n\n /**\n * Detach event listeners, remove references, and clean up caches.\n */\n dispose() {\n if (this.canvas) {\n // we are disposing, we don't care about the fact\n // that the canvas shouldn't be null.\n // @ts-expect-error disposing\n this.canvas = null;\n // @ts-expect-error disposing\n this.gl = null;\n }\n this.clearWebGLCaches();\n }\n\n /**\n * Wipe out WebGL-related caches.\n */\n clearWebGLCaches() {\n this.programCache = {};\n this.textureCache = {};\n }\n\n /**\n * Create a WebGL texture object.\n *\n * Accepts specific dimensions to initialize the texture to or a source image.\n *\n * @param {WebGLRenderingContext} gl The GL context to use for creating the texture.\n * @param {number} width The width to initialize the texture at.\n * @param {number} height The height to initialize the texture.\n * @param {TexImageSource} textureImageSource A source for the texture data.\n * @param {number} filter gl.NEAREST default or gl.LINEAR filters for the texture.\n * This filter is very useful for LUTs filters. If you need interpolation use gl.LINEAR\n * @returns {WebGLTexture}\n */\n createTexture(\n gl: WebGLRenderingContext,\n width: number,\n height: number,\n textureImageSource?: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR'],\n ) {\n const {\n NEAREST,\n TEXTURE_2D,\n RGBA,\n UNSIGNED_BYTE,\n CLAMP_TO_EDGE,\n TEXTURE_MAG_FILTER,\n TEXTURE_MIN_FILTER,\n TEXTURE_WRAP_S,\n TEXTURE_WRAP_T,\n } = gl;\n const texture = gl.createTexture();\n gl.bindTexture(TEXTURE_2D, texture);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, filter || NEAREST);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE);\n gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE);\n if (textureImageSource) {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n RGBA,\n UNSIGNED_BYTE,\n textureImageSource,\n );\n } else {\n gl.texImage2D(\n TEXTURE_2D,\n 0,\n RGBA,\n width,\n height,\n 0,\n RGBA,\n UNSIGNED_BYTE,\n null,\n );\n }\n return texture;\n }\n\n /**\n * Can be optionally used to get a texture from the cache array\n *\n * If an existing texture is not found, a new texture is created and cached.\n *\n * @param {String} uniqueId A cache key to use to find an existing texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source to use to create the\n * texture cache entry if one does not already exist.\n */\n getCachedTexture(\n uniqueId: string,\n textureImageSource: TexImageSource,\n filter?:\n | WebGLRenderingContextBase['NEAREST']\n | WebGLRenderingContextBase['LINEAR'],\n ): WebGLTexture | null {\n const { textureCache } = this;\n if (textureCache[uniqueId]) {\n return textureCache[uniqueId];\n } else {\n const texture = this.createTexture(\n this.gl,\n (textureImageSource as HTMLImageElement).width,\n (textureImageSource as HTMLImageElement).height,\n textureImageSource,\n filter,\n );\n if (texture) {\n textureCache[uniqueId] = texture;\n }\n return texture;\n }\n }\n\n /**\n * Clear out cached resources related to a source image that has been\n * filtered previously.\n *\n * @param {String} cacheKey The cache key provided when the source image was filtered.\n */\n evictCachesForKey(cacheKey: string) {\n if (this.textureCache[cacheKey]) {\n this.gl.deleteTexture(this.textureCache[cacheKey]);\n delete this.textureCache[cacheKey];\n }\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas.\n *\n * The WebGL canvas is assumed to be upside down, with the top-left pixel of the\n * desired output image appearing in the bottom-left corner of the WebGL canvas.\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2D(gl: WebGLRenderingContext, pipelineState: TWebGLPipelineState) {\n const glCanvas = gl.canvas,\n targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d');\n if (!ctx) {\n return;\n }\n ctx.translate(0, targetCanvas.height); // move it down again\n ctx.scale(1, -1); // vertical flip\n // where is my image on the big glcanvas?\n const sourceY = glCanvas.height - targetCanvas.height;\n ctx.drawImage(\n glCanvas,\n 0,\n sourceY,\n targetCanvas.width,\n targetCanvas.height,\n 0,\n 0,\n targetCanvas.width,\n targetCanvas.height,\n );\n }\n\n /**\n * Copy an input WebGL canvas on to an output 2D canvas using 2d canvas' putImageData\n * API. Measurably faster than using ctx.drawImage in Firefox (version 54 on OSX Sierra).\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\n copyGLTo2DPutImageData(\n this: Required,\n gl: WebGLRenderingContext,\n pipelineState: TWebGLPipelineState,\n ) {\n const targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d'),\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight,\n numBytes = dWidth * dHeight * 4;\n if (!ctx) {\n return;\n }\n const u8 = new Uint8Array(this.imageBuffer, 0, numBytes);\n const u8Clamped = new Uint8ClampedArray(this.imageBuffer, 0, numBytes);\n\n gl.readPixels(0, 0, dWidth, dHeight, gl.RGBA, gl.UNSIGNED_BYTE, u8);\n const imgData = new ImageData(u8Clamped, dWidth, dHeight);\n ctx.putImageData(imgData, 0, 0);\n }\n\n /**\n * Attempt to extract GPU information strings from a WebGL context.\n *\n * Useful information when debugging or blacklisting specific GPUs.\n *\n * @returns {Object} A GPU info object with renderer and vendor strings.\n */\n captureGPUInfo() {\n if (this.gpuInfo) {\n return this.gpuInfo;\n }\n const gl = this.gl,\n gpuInfo = { renderer: '', vendor: '' };\n if (!gl) {\n return gpuInfo;\n }\n const ext = gl.getExtension('WEBGL_debug_renderer_info');\n if (ext) {\n const renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);\n const vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);\n if (renderer) {\n gpuInfo.renderer = renderer.toLowerCase();\n }\n if (vendor) {\n gpuInfo.vendor = vendor.toLowerCase();\n }\n }\n this.gpuInfo = gpuInfo;\n return gpuInfo;\n }\n}\n\nfunction resizeCanvasIfNeeded(pipelineState: TWebGLPipelineState): void {\n const targetCanvas = pipelineState.targetCanvas,\n width = targetCanvas.width,\n height = targetCanvas.height,\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight;\n\n if (width !== dWidth || height !== dHeight) {\n targetCanvas.width = dWidth;\n targetCanvas.height = dHeight;\n }\n}\n","import { config } from '../config';\nimport { getEnv } from '../env';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { Canvas2dFilterBackend } from './Canvas2dFilterBackend';\nimport { WebGLFilterBackend } from './WebGLFilterBackend';\n\nexport type FilterBackend = WebGLFilterBackend | Canvas2dFilterBackend;\n\nlet filterBackend: FilterBackend;\n\n/**\n * Verifies if it is possible to initialize webgl or fallback on a canvas2d filtering backend\n */\nexport function initFilterBackend(): FilterBackend {\n const { WebGLProbe } = getEnv();\n WebGLProbe.queryWebGL(createCanvasElement());\n if (config.enableGLFiltering && WebGLProbe.isSupported(config.textureSize)) {\n return new WebGLFilterBackend({ tileSize: config.textureSize });\n } else {\n return new Canvas2dFilterBackend();\n }\n}\n\n/**\n * Get the current fabricJS filter backend or initialize one if not available yet\n * @param [strict] pass `true` to create the backend if it wasn't created yet (default behavior),\n * pass `false` to get the backend ref without mutating it\n */\nexport function getFilterBackend(strict = true): FilterBackend {\n if (!filterBackend && strict) {\n filterBackend = initFilterBackend();\n }\n return filterBackend;\n}\n\nexport function setFilterBackend(backend: FilterBackend) {\n filterBackend = backend;\n}\n","import { getFabricDocument, getEnv } from '../env';\nimport type { BaseFilter } from '../filters/BaseFilter';\nimport { getFilterBackend } from '../filters/FilterBackend';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type {\n TClassProperties,\n TCrossOrigin,\n TSize,\n Abortable,\n TOptions,\n} from '../typedefs';\nimport { uid } from '../util/internals/uid';\nimport { createCanvasElementFor } from '../util/misc/dom';\nimport { findScaleToCover, findScaleToFit } from '../util/misc/findScaleTo';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\nimport {\n enlivenObjectEnlivables,\n enlivenObjects,\n loadImage,\n} from '../util/misc/objectEnlive';\nimport { parsePreserveAspectRatioAttribute } from '../util/misc/svgParsing';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { WebGLFilterBackend } from '../filters/WebGLFilterBackend';\nimport { FILL, NONE } from '../constants';\nimport { getDocumentFromElement } from '../util/dom_misc';\nimport type { CSSRules } from '../parser/typedefs';\nimport type { Resize } from '../filters/Resize';\nimport type { TCachedFabricObject } from './Object/Object';\nimport { log } from '../util/internals/console';\n\n// @todo Would be nice to have filtering code not imported directly.\n\nexport type ImageSource =\n | HTMLImageElement\n | HTMLVideoElement\n | HTMLCanvasElement;\n\ninterface UniqueImageProps {\n srcFromAttribute: boolean;\n minimumScaleTrigger: number;\n cropX: number;\n cropY: number;\n imageSmoothing: boolean;\n filters: BaseFilter>[];\n resizeFilter?: Resize;\n}\n\nexport const imageDefaultValues: Partial> = {\n strokeWidth: 0,\n srcFromAttribute: false,\n minimumScaleTrigger: 0.5,\n cropX: 0,\n cropY: 0,\n imageSmoothing: true,\n};\n\nexport interface SerializedImageProps extends SerializedObjectProps {\n src: string;\n crossOrigin: TCrossOrigin;\n filters: any[];\n resizeFilter?: any;\n cropX: number;\n cropY: number;\n}\n\nexport interface ImageProps extends FabricObjectProps, UniqueImageProps {}\n\nconst IMAGE_PROPS = ['cropX', 'cropY'] as const;\n\n/**\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#images}\n */\nexport class FabricImage<\n Props extends TOptions = Partial,\n SProps extends SerializedImageProps = SerializedImageProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject\n implements ImageProps\n{\n /**\n * When calling {@link FabricImage.getSrc}, return value from element src with `element.getAttribute('src')`.\n * This allows for relative urls as image src.\n * @since 2.7.0\n * @type Boolean\n * @default false\n */\n declare srcFromAttribute: boolean;\n\n /**\n * private\n * contains last value of scaleX to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n protected _lastScaleX = 1;\n\n /**\n * private\n * contains last value of scaleY to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n protected _lastScaleY = 1;\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n protected _filterScalingX = 1;\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n protected _filterScalingY = 1;\n\n /**\n * minimum scale factor under which any resizeFilter is triggered to resize the image\n * 0 will disable the automatic resize. 1 will trigger automatically always.\n * number bigger than 1 are not implemented yet.\n * @type Number\n */\n declare minimumScaleTrigger: number;\n\n /**\n * key used to retrieve the texture representing this image\n * @since 2.0.0\n * @type String\n * @default\n */\n declare cacheKey: string;\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n declare cropX: number;\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n declare cropY: number;\n\n /**\n * Indicates whether this canvas will use image smoothing when painting this image.\n * Also influence if the cacheCanvas for this image uses imageSmoothing\n * @since 4.0.0-beta.11\n * @type Boolean\n * @default\n */\n declare imageSmoothing: boolean;\n\n declare preserveAspectRatio: string;\n\n protected declare src: string;\n\n declare filters: BaseFilter>[];\n declare resizeFilter: Resize;\n\n declare _element: ImageSource;\n declare _filteredEl?: HTMLCanvasElement;\n declare _originalElement: ImageSource;\n\n static type = 'Image';\n\n static cacheProperties = [...cacheProperties, ...IMAGE_PROPS];\n\n static ownDefaults = imageDefaultValues;\n\n static getDefaults(): Record {\n return {\n ...super.getDefaults(),\n ...FabricImage.ownDefaults,\n };\n }\n /**\n * Constructor\n * Image can be initialized with any canvas drawable or a string.\n * The string should be a url and will be loaded as an image.\n * Canvas and Image element work out of the box, while videos require extra code to work.\n * Please check video element events for seeking.\n * @param {ImageSource | string} element Image element\n * @param {Object} [options] Options object\n */\n constructor(elementId: string, options?: Props);\n constructor(element: ImageSource, options?: Props);\n constructor(arg0: ImageSource | string, options?: Props) {\n super();\n this.filters = [];\n Object.assign(this, FabricImage.ownDefaults);\n this.setOptions(options);\n this.cacheKey = `texture${uid()}`;\n this.setElement(\n typeof arg0 === 'string'\n ? ((\n (this.canvas && getDocumentFromElement(this.canvas.getElement())) ||\n getFabricDocument()\n ).getElementById(arg0) as ImageSource)\n : arg0,\n options,\n );\n }\n\n /**\n * Returns image element which this instance if based on\n */\n getElement() {\n return this._element;\n }\n\n /**\n * Sets image element for this instance to a specified one.\n * If filters defined they are applied to new image.\n * You might need to call `canvas.renderAll` and `object.setCoords` after replacing, to render new image and update controls area.\n * @param {HTMLImageElement} element\n * @param {Partial} [size] Options object\n */\n setElement(element: ImageSource, size: Partial = {}) {\n this.removeTexture(this.cacheKey);\n this.removeTexture(`${this.cacheKey}_filtered`);\n this._element = element;\n this._originalElement = element;\n this._setWidthHeight(size);\n element.classList.add(FabricImage.CSS_CANVAS);\n if (this.filters.length !== 0) {\n this.applyFilters();\n }\n // resizeFilters work on the already filtered copy.\n // we need to apply resizeFilters AFTER normal filters.\n // applyResizeFilters is run more often than normal filters\n // and is triggered by user interactions rather than dev code\n if (this.resizeFilter) {\n this.applyResizeFilters();\n }\n }\n\n /**\n * Delete a single texture if in webgl mode\n */\n removeTexture(key: string) {\n const backend = getFilterBackend(false);\n if (backend instanceof WebGLFilterBackend) {\n backend.evictCachesForKey(key);\n }\n }\n\n /**\n * Delete textures, reference to elements and eventually JSDOM cleanup\n */\n dispose() {\n super.dispose();\n this.removeTexture(this.cacheKey);\n this.removeTexture(`${this.cacheKey}_filtered`);\n this._cacheContext = null;\n (\n ['_originalElement', '_element', '_filteredEl', '_cacheCanvas'] as const\n ).forEach((elementKey) => {\n const el = this[elementKey];\n el && getEnv().dispose(el);\n // @ts-expect-error disposing\n this[elementKey] = undefined;\n });\n }\n\n /**\n * Get the crossOrigin value (of the corresponding image element)\n */\n getCrossOrigin(): string | null {\n return (\n this._originalElement &&\n ((this._originalElement as any).crossOrigin || null)\n );\n }\n\n /**\n * Returns original size of an image\n */\n getOriginalSize() {\n const element = this.getElement() as any;\n if (!element) {\n return {\n width: 0,\n height: 0,\n };\n }\n return {\n width: element.naturalWidth || element.width,\n height: element.naturalHeight || element.height,\n };\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _stroke(ctx: CanvasRenderingContext2D) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n const w = this.width / 2,\n h = this.height / 2;\n ctx.beginPath();\n ctx.moveTo(-w, -h);\n ctx.lineTo(w, -h);\n ctx.lineTo(w, h);\n ctx.lineTo(-w, h);\n ctx.lineTo(-w, -h);\n ctx.closePath();\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick & SProps {\n const filters: Record[] = [];\n this.filters.forEach((filterObj) => {\n filterObj && filters.push(filterObj.toObject());\n });\n return {\n ...super.toObject([...IMAGE_PROPS, ...propertiesToInclude]),\n src: this.getSrc(),\n crossOrigin: this.getCrossOrigin(),\n filters,\n ...(this.resizeFilter\n ? { resizeFilter: this.resizeFilter.toObject() }\n : {}),\n };\n }\n\n /**\n * Returns true if an image has crop applied, inspecting values of cropX,cropY,width,height.\n * @return {Boolean}\n */\n hasCrop() {\n return (\n !!this.cropX ||\n !!this.cropY ||\n this.width < this._element.width ||\n this.height < this._element.height\n );\n }\n\n /**\n * Returns svg representation of an instance\n * @return {string[]} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const imageMarkup: string[] = [],\n element = this._element,\n x = -this.width / 2,\n y = -this.height / 2;\n let svgString: string[] = [],\n strokeSvg: string[] = [],\n clipPath = '',\n imageRendering = '';\n if (!element) {\n return [];\n }\n if (this.hasCrop()) {\n const clipPathId = uid();\n svgString.push(\n '\\n',\n '\\t\\n',\n '\\n',\n );\n clipPath = ' clip-path=\"url(#imageCrop_' + clipPathId + ')\" ';\n }\n if (!this.imageSmoothing) {\n imageRendering = ' image-rendering=\"optimizeSpeed\"';\n }\n imageMarkup.push(\n '\\t element with actual transformation, then offsetting object to the top/left\n // so that object's center aligns with container's left/top\n }\" width=\"${\n element.width || (element as HTMLImageElement).naturalWidth\n }\" height=\"${\n element.height || (element as HTMLImageElement).naturalHeight\n }\"${imageRendering}${clipPath}>\\n`,\n );\n\n if (this.stroke || this.strokeDashArray) {\n const origFill = this.fill;\n this.fill = null;\n strokeSvg = [\n `\\t\\n`,\n ];\n this.fill = origFill;\n }\n if (this.paintFirst !== FILL) {\n svgString = svgString.concat(strokeSvg, imageMarkup);\n } else {\n svgString = svgString.concat(imageMarkup, strokeSvg);\n }\n return svgString;\n }\n\n /**\n * Returns source of an image\n * @param {Boolean} filtered indicates if the src is needed for svg\n * @return {String} Source of an image\n */\n getSrc(filtered?: boolean): string {\n const element = filtered ? this._element : this._originalElement;\n if (element) {\n if ((element as HTMLCanvasElement).toDataURL) {\n return (element as HTMLCanvasElement).toDataURL();\n }\n\n if (this.srcFromAttribute) {\n return element.getAttribute('src') || '';\n } else {\n return (element as HTMLImageElement).src;\n }\n } else {\n return this.src || '';\n }\n }\n\n /**\n * Alias for getSrc\n * @param filtered\n * @deprecated\n */\n getSvgSrc(filtered?: boolean) {\n return this.getSrc(filtered);\n }\n\n /**\n * Loads and sets source of an image\\\n * **IMPORTANT**: It is recommended to abort loading tasks before calling this method to prevent race conditions and unnecessary networking\n * @param {String} src Source string (URL)\n * @param {LoadImageOptions} [options] Options object\n */\n setSrc(src: string, { crossOrigin, signal }: LoadImageOptions = {}) {\n return loadImage(src, { crossOrigin, signal }).then((img) => {\n typeof crossOrigin !== 'undefined' && this.set({ crossOrigin });\n this.setElement(img);\n });\n }\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of an instance\n */\n toString() {\n return `#`;\n }\n\n applyResizeFilters() {\n const filter = this.resizeFilter,\n minimumScale = this.minimumScaleTrigger,\n objectScale = this.getTotalObjectScaling(),\n scaleX = objectScale.x,\n scaleY = objectScale.y,\n elementToFilter = this._filteredEl || this._originalElement;\n if (this.group) {\n this.set('dirty', true);\n }\n if (!filter || (scaleX > minimumScale && scaleY > minimumScale)) {\n this._element = elementToFilter;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n this._lastScaleX = scaleX;\n this._lastScaleY = scaleY;\n return;\n }\n const canvasEl = createCanvasElementFor(elementToFilter),\n { width, height } = elementToFilter;\n this._element = canvasEl;\n this._lastScaleX = filter.scaleX = scaleX;\n this._lastScaleY = filter.scaleY = scaleY;\n getFilterBackend().applyFilters(\n [filter],\n elementToFilter,\n width,\n height,\n this._element,\n );\n this._filterScalingX = canvasEl.width / this._originalElement.width;\n this._filterScalingY = canvasEl.height / this._originalElement.height;\n }\n\n /**\n * Applies filters assigned to this image (from \"filters\" array) or from filter param\n * @method applyFilters\n * @param {Array} filters to be applied\n * @param {Boolean} forResizing specify if the filter operation is a resize operation\n */\n applyFilters(\n filters: BaseFilter>[] = this.filters || [],\n ) {\n filters = filters.filter((filter) => filter && !filter.isNeutralState());\n this.set('dirty', true);\n\n // needs to clear out or WEBGL will not resize correctly\n this.removeTexture(`${this.cacheKey}_filtered`);\n\n if (filters.length === 0) {\n this._element = this._originalElement;\n // this is unsafe and needs to be rethinkend\n this._filteredEl = undefined;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n return;\n }\n\n const imgElement = this._originalElement,\n sourceWidth =\n (imgElement as HTMLImageElement).naturalWidth || imgElement.width,\n sourceHeight =\n (imgElement as HTMLImageElement).naturalHeight || imgElement.height;\n\n if (this._element === this._originalElement) {\n // if the _element a reference to _originalElement\n // we need to create a new element to host the filtered pixels\n const canvasEl = createCanvasElementFor({\n width: sourceWidth,\n height: sourceHeight,\n });\n this._element = canvasEl;\n this._filteredEl = canvasEl;\n } else if (this._filteredEl) {\n // if the _element is it own element,\n // and we also have a _filteredEl, then we clean up _filteredEl\n // and we assign it to _element.\n // in this way we invalidate the eventual old resize filtered element\n this._element = this._filteredEl;\n this._filteredEl\n .getContext('2d')!\n .clearRect(0, 0, sourceWidth, sourceHeight);\n // we also need to resize again at next renderAll, so remove saved _lastScaleX/Y\n this._lastScaleX = 1;\n this._lastScaleY = 1;\n }\n getFilterBackend().applyFilters(\n filters,\n this._originalElement,\n sourceWidth,\n sourceHeight,\n this._element as HTMLCanvasElement,\n );\n if (\n this._originalElement.width !== this._element.width ||\n this._originalElement.height !== this._element.height\n ) {\n this._filterScalingX = this._element.width / this._originalElement.width;\n this._filterScalingY =\n this._element.height / this._originalElement.height;\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.imageSmoothingEnabled = this.imageSmoothing;\n if (this.isMoving !== true && this.resizeFilter && this._needsResize()) {\n this.applyResizeFilters();\n }\n this._stroke(ctx);\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Paint the cached copy of the object on the target context.\n * it will set the imageSmoothing for the draw operation\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas(\n this: TCachedFabricObject,\n ctx: CanvasRenderingContext2D,\n ) {\n ctx.imageSmoothingEnabled = this.imageSmoothing;\n super.drawCacheOnCanvas(ctx);\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * This is the special image version where we would like to avoid caching where possible.\n * Essentially images do not benefit from caching. They may require caching, and in that\n * case we do it. Also caching an image usually ends in a loss of details.\n * A full performance audit should be done.\n * @return {Boolean}\n */\n shouldCache() {\n return this.needsItsOwnCache();\n }\n\n _renderFill(ctx: CanvasRenderingContext2D) {\n const elementToDraw = this._element;\n if (!elementToDraw) {\n return;\n }\n const scaleX = this._filterScalingX,\n scaleY = this._filterScalingY,\n w = this.width,\n h = this.height,\n // crop values cannot be lesser than 0.\n cropX = Math.max(this.cropX, 0),\n cropY = Math.max(this.cropY, 0),\n elWidth =\n (elementToDraw as HTMLImageElement).naturalWidth || elementToDraw.width,\n elHeight =\n (elementToDraw as HTMLImageElement).naturalHeight ||\n elementToDraw.height,\n sX = cropX * scaleX,\n sY = cropY * scaleY,\n // the width height cannot exceed element width/height, starting from the crop offset.\n sW = Math.min(w * scaleX, elWidth - sX),\n sH = Math.min(h * scaleY, elHeight - sY),\n x = -w / 2,\n y = -h / 2,\n maxDestW = Math.min(w, elWidth / scaleX - cropX),\n maxDestH = Math.min(h, elHeight / scaleY - cropY);\n\n elementToDraw &&\n ctx.drawImage(elementToDraw, sX, sY, sW, sH, x, y, maxDestW, maxDestH);\n }\n\n /**\n * needed to check if image needs resize\n * @private\n */\n _needsResize() {\n const scale = this.getTotalObjectScaling();\n return scale.x !== this._lastScaleX || scale.y !== this._lastScaleY;\n }\n\n /**\n * @private\n * @deprecated unused\n */\n _resetWidthHeight() {\n this.set(this.getOriginalSize());\n }\n\n /**\n * @private\n * Set the width and the height of the image object, using the element or the\n * options.\n */\n _setWidthHeight({ width, height }: Partial = {}) {\n const size = this.getOriginalSize();\n this.width = width || size.width;\n this.height = height || size.height;\n }\n\n /**\n * Calculate offset for center and scale factor for the image in order to respect\n * the preserveAspectRatio attribute\n * @private\n */\n parsePreserveAspectRatioAttribute() {\n const pAR = parsePreserveAspectRatioAttribute(\n this.preserveAspectRatio || '',\n ),\n pWidth = this.width,\n pHeight = this.height,\n parsedAttributes = { width: pWidth, height: pHeight };\n let rWidth = this._element.width,\n rHeight = this._element.height,\n scaleX = 1,\n scaleY = 1,\n offsetLeft = 0,\n offsetTop = 0,\n cropX = 0,\n cropY = 0,\n offset;\n\n if (pAR && (pAR.alignX !== NONE || pAR.alignY !== NONE)) {\n if (pAR.meetOrSlice === 'meet') {\n scaleX = scaleY = findScaleToFit(this._element, parsedAttributes);\n offset = (pWidth - rWidth * scaleX) / 2;\n if (pAR.alignX === 'Min') {\n offsetLeft = -offset;\n }\n if (pAR.alignX === 'Max') {\n offsetLeft = offset;\n }\n offset = (pHeight - rHeight * scaleY) / 2;\n if (pAR.alignY === 'Min') {\n offsetTop = -offset;\n }\n if (pAR.alignY === 'Max') {\n offsetTop = offset;\n }\n }\n if (pAR.meetOrSlice === 'slice') {\n scaleX = scaleY = findScaleToCover(this._element, parsedAttributes);\n offset = rWidth - pWidth / scaleX;\n if (pAR.alignX === 'Mid') {\n cropX = offset / 2;\n }\n if (pAR.alignX === 'Max') {\n cropX = offset;\n }\n offset = rHeight - pHeight / scaleY;\n if (pAR.alignY === 'Mid') {\n cropY = offset / 2;\n }\n if (pAR.alignY === 'Max') {\n cropY = offset;\n }\n rWidth = pWidth / scaleX;\n rHeight = pHeight / scaleY;\n }\n } else {\n scaleX = pWidth / rWidth;\n scaleY = pHeight / rHeight;\n }\n return {\n width: rWidth,\n height: rHeight,\n scaleX,\n scaleY,\n offsetLeft,\n offsetTop,\n cropX,\n cropY,\n };\n }\n\n /**\n * Default CSS class name for canvas\n * @static\n * @type String\n * @default\n */\n static CSS_CANVAS = 'canvas-img';\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link FabricImage.fromElement})\n * @static\n * @see {@link http://www.w3.org/TR/SVG/struct.html#ImageElement}\n */\n static ATTRIBUTE_NAMES = [\n ...SHARED_ATTRIBUTES,\n 'x',\n 'y',\n 'width',\n 'height',\n 'preserveAspectRatio',\n 'xlink:href',\n 'crossOrigin',\n 'image-rendering',\n ];\n\n /**\n * Creates an instance of FabricImage from its object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {object} [options] Options object\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static fromObject>(\n { filters: f, resizeFilter: rf, src, crossOrigin, type, ...object }: T,\n options?: Abortable,\n ) {\n return Promise.all([\n loadImage(src!, { ...options, crossOrigin }),\n f && enlivenObjects>(f, options),\n // TODO: redundant - handled by enlivenObjectEnlivables\n rf && enlivenObjects>([rf], options),\n enlivenObjectEnlivables(object, options),\n ]).then(([el, filters = [], [resizeFilter] = [], hydratedProps = {}]) => {\n return new this(el, {\n ...object,\n // TODO: this creates a difference between image creation and restoring from JSON\n src,\n filters,\n resizeFilter,\n ...hydratedProps,\n });\n });\n }\n\n /**\n * Creates an instance of Image from an URL string\n * @static\n * @param {String} url URL to create an image from\n * @param {LoadImageOptions} [options] Options object\n * @returns {Promise}\n */\n static fromURL>(\n url: string,\n { crossOrigin = null, signal }: LoadImageOptions = {},\n imageOptions?: T,\n ): Promise {\n return loadImage(url, { crossOrigin, signal }).then(\n (img) => new this(img, imageOptions),\n );\n }\n\n /**\n * Returns {@link FabricImage} instance from an SVG element\n * @static\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @param {Function} callback Callback to execute when Image object is created\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable = {},\n cssRules?: CSSRules,\n ) {\n const parsedAttributes = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return this.fromURL(\n parsedAttributes['xlink:href'],\n options,\n parsedAttributes,\n ).catch((err) => {\n log('log', 'Unable to parse Image', err);\n return null;\n });\n }\n}\n\nclassRegistry.setClass(FabricImage);\nclassRegistry.setSVGClass(FabricImage);\n","import { svgNS } from './constants';\nimport {\n parsePreserveAspectRatioAttribute,\n parseUnit,\n} from '../util/misc/svgParsing';\nimport { svgViewBoxElementsRegEx, reViewBoxAttrValue } from './constants';\nimport { NONE } from '../constants';\n\nexport type ParsedViewboxTransform = Partial<{\n width: number;\n height: number;\n minX: number;\n minY: number;\n viewBoxWidth: number;\n viewBoxHeight: number;\n}>;\n\n/**\n * Add a element that envelop all child elements and makes the viewbox transformMatrix descend on all elements\n */\nexport function applyViewboxTransform(\n element: Element,\n): ParsedViewboxTransform {\n if (!svgViewBoxElementsRegEx.test(element.nodeName)) {\n return {};\n }\n const viewBoxAttr: string | null = element.getAttribute('viewBox');\n let scaleX = 1;\n let scaleY = 1;\n let minX = 0;\n let minY = 0;\n let matrix;\n let el;\n const widthAttr = element.getAttribute('width');\n const heightAttr = element.getAttribute('height');\n const x = element.getAttribute('x') || 0;\n const y = element.getAttribute('y') || 0;\n const goodViewbox = viewBoxAttr && reViewBoxAttrValue.test(viewBoxAttr);\n const missingViewBox = !goodViewbox;\n const missingDimAttr =\n !widthAttr || !heightAttr || widthAttr === '100%' || heightAttr === '100%';\n\n let translateMatrix = '';\n let widthDiff = 0;\n let heightDiff = 0;\n\n if (missingViewBox) {\n if (\n (x || y) &&\n element.parentNode &&\n element.parentNode.nodeName !== '#document'\n ) {\n translateMatrix =\n ' translate(' + parseUnit(x || '0') + ' ' + parseUnit(y || '0') + ') ';\n matrix = (element.getAttribute('transform') || '') + translateMatrix;\n element.setAttribute('transform', matrix);\n element.removeAttribute('x');\n element.removeAttribute('y');\n }\n }\n\n if (missingViewBox && missingDimAttr) {\n return {\n width: 0,\n height: 0,\n };\n }\n\n const parsedDim: ParsedViewboxTransform = {\n width: 0,\n height: 0,\n };\n\n if (missingViewBox) {\n parsedDim.width = parseUnit(widthAttr!);\n parsedDim.height = parseUnit(heightAttr!);\n // set a transform for elements that have x y and are inner(only) SVGs\n return parsedDim;\n }\n\n const pasedViewBox = viewBoxAttr.match(reViewBoxAttrValue)!;\n minX = -parseFloat(pasedViewBox[1]);\n minY = -parseFloat(pasedViewBox[2]);\n const viewBoxWidth = parseFloat(pasedViewBox[3]);\n const viewBoxHeight = parseFloat(pasedViewBox[4]);\n parsedDim.minX = minX;\n parsedDim.minY = minY;\n parsedDim.viewBoxWidth = viewBoxWidth;\n parsedDim.viewBoxHeight = viewBoxHeight;\n if (!missingDimAttr) {\n parsedDim.width = parseUnit(widthAttr);\n parsedDim.height = parseUnit(heightAttr);\n scaleX = parsedDim.width / viewBoxWidth;\n scaleY = parsedDim.height / viewBoxHeight;\n } else {\n parsedDim.width = viewBoxWidth;\n parsedDim.height = viewBoxHeight;\n }\n\n // default is to preserve aspect ratio\n const preserveAspectRatio = parsePreserveAspectRatioAttribute(\n element.getAttribute('preserveAspectRatio') || '',\n );\n if (preserveAspectRatio.alignX !== NONE) {\n //translate all container for the effect of Mid, Min, Max\n if (preserveAspectRatio.meetOrSlice === 'meet') {\n scaleY = scaleX = scaleX > scaleY ? scaleY : scaleX;\n // calculate additional translation to move the viewbox\n }\n if (preserveAspectRatio.meetOrSlice === 'slice') {\n scaleY = scaleX = scaleX > scaleY ? scaleX : scaleY;\n // calculate additional translation to move the viewbox\n }\n widthDiff = parsedDim.width - viewBoxWidth * scaleX;\n heightDiff = parsedDim.height - viewBoxHeight * scaleX;\n if (preserveAspectRatio.alignX === 'Mid') {\n widthDiff /= 2;\n }\n if (preserveAspectRatio.alignY === 'Mid') {\n heightDiff /= 2;\n }\n if (preserveAspectRatio.alignX === 'Min') {\n widthDiff = 0;\n }\n if (preserveAspectRatio.alignY === 'Min') {\n heightDiff = 0;\n }\n }\n\n if (\n scaleX === 1 &&\n scaleY === 1 &&\n minX === 0 &&\n minY === 0 &&\n x === 0 &&\n y === 0\n ) {\n return parsedDim;\n }\n if ((x || y) && element.parentNode!.nodeName !== '#document') {\n translateMatrix =\n ' translate(' + parseUnit(x || '0') + ' ' + parseUnit(y || '0') + ') ';\n }\n\n matrix =\n translateMatrix +\n ' matrix(' +\n scaleX +\n ' 0' +\n ' 0 ' +\n scaleY +\n ' ' +\n (minX * scaleX + widthDiff) +\n ' ' +\n (minY * scaleY + heightDiff) +\n ') ';\n // seems unused.\n // parsedDim.viewboxTransform = parseTransformAttribute(matrix);\n if (element.nodeName === 'svg') {\n el = element.ownerDocument.createElementNS(svgNS, 'g');\n // element.firstChild != null\n while (element.firstChild) {\n el.appendChild(element.firstChild);\n }\n element.appendChild(el);\n } else {\n el = element;\n el.removeAttribute('x');\n el.removeAttribute('y');\n matrix = el.getAttribute('transform') + matrix;\n }\n el.setAttribute('transform', matrix);\n return parsedDim;\n}\n","export const getTagName = (node: Element) => node.tagName.replace('svg:', '');\n","import { svgInvalidAncestors } from './constants';\nimport { getSvgRegex } from './getSvgRegex';\nimport { getTagName } from './getTagName';\n\nconst svgInvalidAncestorsRegEx = getSvgRegex(svgInvalidAncestors);\n\nexport function hasInvalidAncestor(element: Element) {\n let _element: Element | null = element;\n while (_element && (_element = _element.parentElement)) {\n if (\n _element &&\n _element.nodeName &&\n svgInvalidAncestorsRegEx.test(getTagName(_element)) &&\n !_element.getAttribute('instantiated_by_use')\n ) {\n return true;\n }\n }\n return false;\n}\n","export function getMultipleNodes(\n doc: Document,\n nodeNames: string[],\n): Element[] {\n let nodeName,\n nodeArray: Element[] = [],\n nodeList,\n i,\n len;\n for (i = 0, len = nodeNames.length; i < len; i++) {\n nodeName = nodeNames[i];\n nodeList = doc.getElementsByTagNameNS(\n 'http://www.w3.org/2000/svg',\n nodeName,\n );\n nodeArray = nodeArray.concat(Array.from(nodeList));\n }\n return nodeArray;\n}\n","import { svgNS } from './constants';\nimport { getMultipleNodes } from './getMultipleNodes';\nimport { applyViewboxTransform } from './applyViewboxTransform';\nimport { parseStyleString } from './parseStyleString';\n\nexport function parseUseDirectives(doc: Document) {\n const nodelist = getMultipleNodes(doc, ['use', 'svg:use']);\n const skipAttributes = ['x', 'y', 'xlink:href', 'href', 'transform'];\n\n for (const useElement of nodelist) {\n const useAttributes: NamedNodeMap = useElement.attributes;\n\n const useAttrMap: Record = {};\n for (const attr of useAttributes) {\n attr.value && (useAttrMap[attr.name] = attr.value);\n }\n\n const xlink = (useAttrMap['xlink:href'] || useAttrMap.href || '').slice(1);\n\n if (xlink === '') {\n return;\n }\n const referencedElement = doc.getElementById(xlink);\n if (referencedElement === null) {\n // if we can't find the target of the xlink, consider this use tag bad, similar to no xlink\n return;\n }\n let clonedOriginal = referencedElement.cloneNode(true) as Element;\n\n const originalAttributes: NamedNodeMap = clonedOriginal.attributes;\n\n const originalAttrMap: Record = {};\n for (const attr of originalAttributes) {\n attr.value && (originalAttrMap[attr.name] = attr.value);\n }\n\n // Transform attribute needs to be merged in a particular way\n const { x = 0, y = 0, transform = '' } = useAttrMap;\n const currentTrans = `${transform} ${\n originalAttrMap.transform || ''\n } translate(${x}, ${y})`;\n\n applyViewboxTransform(clonedOriginal);\n\n if (/^svg$/i.test(clonedOriginal.nodeName)) {\n // if is an SVG, create a group and apply all the attributes on top of it\n const el3 = clonedOriginal.ownerDocument.createElementNS(svgNS, 'g');\n Object.entries(originalAttrMap).forEach(([name, value]) =>\n el3.setAttributeNS(svgNS, name, value),\n );\n el3.append(...clonedOriginal.childNodes);\n clonedOriginal = el3;\n }\n\n for (const attr of useAttributes) {\n if (!attr) {\n continue;\n }\n const { name, value } = attr;\n if (skipAttributes.includes(name)) {\n continue;\n }\n\n if (name === 'style') {\n // when use has a style, merge the two styles, with the ref being priority (not use)\n // priority is by feature. an attribute for fill on the original element\n // will overwrite the fill in style or attribute for tha use\n const styleRecord: Record = {};\n parseStyleString(value!, styleRecord);\n // cleanup styleRecord from attributes of original\n Object.entries(originalAttrMap).forEach(([name, value]) => {\n styleRecord[name] = value;\n });\n // now we can put in the style of the original that will overwrite the original attributes\n parseStyleString(originalAttrMap.style || '', styleRecord);\n const mergedStyles = Object.entries(styleRecord)\n .map((entry) => entry.join(':'))\n .join(';');\n clonedOriginal.setAttribute(name, mergedStyles);\n } else {\n // set the attribute from use element only if the original does not have it already\n !originalAttrMap[name] && clonedOriginal.setAttribute(name, value!);\n }\n }\n\n clonedOriginal.setAttribute('transform', currentTrans);\n clonedOriginal.setAttribute('instantiated_by_use', '1');\n clonedOriginal.removeAttribute('id');\n useElement.parentNode!.replaceChild(clonedOriginal, useElement);\n }\n}\n","const gradientsAttrs = [\n 'gradientTransform',\n 'x1',\n 'x2',\n 'y1',\n 'y2',\n 'gradientUnits',\n 'cx',\n 'cy',\n 'r',\n 'fx',\n 'fy',\n];\nconst xlinkAttr = 'xlink:href';\n\nexport function recursivelyParseGradientsXlink(\n doc: Document,\n gradient: Element,\n) {\n const xLink = gradient.getAttribute(xlinkAttr)?.slice(1) || '',\n referencedGradient = doc.getElementById(xLink);\n if (referencedGradient && referencedGradient.getAttribute(xlinkAttr)) {\n recursivelyParseGradientsXlink(doc, referencedGradient as Element);\n }\n if (referencedGradient) {\n gradientsAttrs.forEach((attr) => {\n const value = referencedGradient.getAttribute(attr);\n if (!gradient.hasAttribute(attr) && value) {\n gradient.setAttribute(attr, value);\n }\n });\n if (!gradient.children.length) {\n const referenceClone = referencedGradient.cloneNode(true);\n while (referenceClone.firstChild) {\n gradient.appendChild(referenceClone.firstChild);\n }\n }\n }\n gradient.removeAttribute(xlinkAttr);\n}\n","import { getMultipleNodes } from './getMultipleNodes';\nimport { recursivelyParseGradientsXlink } from './recursivelyParseGradientsXlink';\n\nconst tagArray = [\n 'linearGradient',\n 'radialGradient',\n 'svg:linearGradient',\n 'svg:radialGradient',\n];\n\n/**\n * Parses an SVG document, returning all of the gradient declarations found in it\n * @param {SVGDocument} doc SVG document to parse\n * @return {Object} Gradient definitions; key corresponds to element id, value -- to gradient definition element\n */\nexport function getGradientDefs(\n doc: Document,\n): Record {\n const elList = getMultipleNodes(doc, tagArray);\n const gradientDefs: Record = {};\n let j = elList.length;\n while (j--) {\n const el = elList[j];\n if (el.getAttribute('xlink:href')) {\n recursivelyParseGradientsXlink(doc, el);\n }\n const id = el.getAttribute('id');\n if (id) {\n gradientDefs[id] = el as SVGGradientElement;\n }\n }\n return gradientDefs;\n}\n","import type { CSSRules } from './typedefs';\n\n/**\n * Returns CSS rules for a given SVG document\n * @param {HTMLElement} doc SVG document to parse\n * @return {Object} CSS rules of this document\n */\nexport function getCSSRules(doc: Document) {\n const styles = doc.getElementsByTagName('style');\n let i;\n let len;\n const allRules: CSSRules = {};\n\n // very crude parsing of style contents\n for (i = 0, len = styles.length; i < len; i++) {\n const styleContents = (styles[i].textContent || '').replace(\n // remove comments\n /\\/\\*[\\s\\S]*?\\*\\//g,\n '',\n );\n\n if (styleContents.trim() === '') {\n continue;\n }\n // recovers all the rule in this form `body { style code... }`\n // rules = styleContents.match(/[^{]*\\{[\\s\\S]*?\\}/g);\n styleContents\n .split('}')\n // remove empty rules and remove everything if we didn't split in at least 2 pieces\n .filter((rule, index, array) => array.length > 1 && rule.trim())\n // at this point we have hopefully an array of rules `body { style code... `\n .forEach((rule) => {\n // if there is more than one opening bracket and the rule starts with '@', it is likely\n // a nested at-rule like @media, @supports, @scope, etc. Ignore these as the code below\n // can not handle it.\n if (\n (rule.match(/{/g) || []).length > 1 &&\n rule.trim().startsWith('@')\n ) {\n return;\n }\n\n const match = rule.split('{'),\n ruleObj: Record = {},\n declaration = match[1].trim(),\n propertyValuePairs = declaration.split(';').filter(function (pair) {\n return pair.trim();\n });\n\n for (i = 0, len = propertyValuePairs.length; i < len; i++) {\n const pair = propertyValuePairs[i].split(':'),\n property = pair[0].trim(),\n value = pair[1].trim();\n ruleObj[property] = value;\n }\n rule = match[0].trim();\n rule.split(',').forEach((_rule) => {\n _rule = _rule.replace(/^svg/i, '').trim();\n if (_rule === '') {\n return;\n }\n allRules[_rule] = {\n ...(allRules[_rule] || {}),\n ...ruleObj,\n };\n });\n });\n }\n return allRules;\n}\n","import { Gradient } from '../gradient/Gradient';\nimport { Group } from '../shapes/Group';\nimport { FabricImage } from '../shapes/Image';\nimport { classRegistry } from '../ClassRegistry';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n qrDecompose,\n} from '../util/misc/matrix';\nimport { removeTransformMatrixForSvgParsing } from '../util/transform_matrix_removal';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { Point } from '../Point';\nimport { CENTER, FILL, STROKE } from '../constants';\nimport { getGradientDefs } from './getGradientDefs';\nimport { getCSSRules } from './getCSSRules';\nimport type { LoadImageOptions } from '../util';\nimport type { CSSRules, TSvgReviverCallback } from './typedefs';\nimport type { ParsedViewboxTransform } from './applyViewboxTransform';\nimport type { SVGOptions } from '../gradient';\nimport { getTagName } from './getTagName';\nimport { parseTransformAttribute } from './parseTransformAttribute';\n\nconst findTag = (el: Element) =>\n classRegistry.getSVGClass(getTagName(el).toLowerCase());\n\ntype StorageType = {\n fill: SVGGradientElement;\n stroke: SVGGradientElement;\n clipPath: Element[];\n};\n\ntype NotParsedFabricObject = FabricObject & {\n fill: string;\n stroke: string;\n clipPath?: string;\n clipRule?: CanvasFillRule;\n};\n\nexport class ElementsParser {\n declare elements: Element[];\n declare options: LoadImageOptions & ParsedViewboxTransform;\n declare reviver?: TSvgReviverCallback;\n declare regexUrl: RegExp;\n declare doc: Document;\n declare clipPaths: Record;\n declare gradientDefs: Record;\n declare cssRules: CSSRules;\n\n constructor(\n elements: Element[],\n options: LoadImageOptions & ParsedViewboxTransform,\n reviver: TSvgReviverCallback | undefined,\n doc: Document,\n clipPaths: Record,\n ) {\n this.elements = elements;\n this.options = options;\n this.reviver = reviver;\n this.regexUrl = /^url\\(['\"]?#([^'\"]+)['\"]?\\)/g;\n this.doc = doc;\n this.clipPaths = clipPaths;\n this.gradientDefs = getGradientDefs(doc);\n this.cssRules = getCSSRules(doc);\n }\n\n parse(): Promise> {\n return Promise.all(\n this.elements.map((element) => this.createObject(element)),\n );\n }\n\n async createObject(el: Element): Promise {\n const klass = findTag(el);\n if (klass) {\n const obj: NotParsedFabricObject = await klass.fromElement(\n el,\n this.options,\n this.cssRules,\n );\n this.resolveGradient(obj, el, FILL);\n this.resolveGradient(obj, el, STROKE);\n if (obj instanceof FabricImage && obj._originalElement) {\n removeTransformMatrixForSvgParsing(\n obj,\n obj.parsePreserveAspectRatioAttribute(),\n );\n } else {\n removeTransformMatrixForSvgParsing(obj);\n }\n await this.resolveClipPath(obj, el);\n this.reviver && this.reviver(el, obj);\n return obj;\n }\n return null;\n }\n\n extractPropertyDefinition(\n obj: NotParsedFabricObject,\n property: 'fill' | 'stroke' | 'clipPath',\n storage: Record,\n ): StorageType[typeof property] | undefined {\n const value = obj[property]!,\n regex = this.regexUrl;\n if (!regex.test(value)) {\n return undefined;\n }\n // verify: can we remove the 'g' flag? and remove lastIndex changes?\n regex.lastIndex = 0;\n // we passed the regex test, so we know is not null;\n const id = regex.exec(value)![1];\n regex.lastIndex = 0;\n // @todo fix this\n return storage[id];\n }\n\n resolveGradient(\n obj: NotParsedFabricObject,\n el: Element,\n property: 'fill' | 'stroke',\n ) {\n const gradientDef = this.extractPropertyDefinition(\n obj,\n property,\n this.gradientDefs,\n ) as SVGGradientElement;\n if (gradientDef) {\n const opacityAttr = el.getAttribute(property + '-opacity');\n const gradient = Gradient.fromElement(gradientDef, obj, {\n ...this.options,\n opacity: opacityAttr,\n } as SVGOptions);\n obj.set(property, gradient);\n }\n }\n\n // TODO: resolveClipPath could be run once per clippath with minor work per object.\n // is a refactor that i m not sure is worth on this code\n async resolveClipPath(\n obj: NotParsedFabricObject,\n usingElement: Element,\n exactOwner?: Element,\n ) {\n const clipPathElements = this.extractPropertyDefinition(\n obj,\n 'clipPath',\n this.clipPaths,\n ) as Element[];\n if (clipPathElements) {\n const objTransformInv = invertTransform(obj.calcTransformMatrix());\n const clipPathTag = clipPathElements[0].parentElement!;\n let clipPathOwner = usingElement;\n while (\n !exactOwner &&\n clipPathOwner.parentElement &&\n clipPathOwner.getAttribute('clip-path') !== obj.clipPath\n ) {\n clipPathOwner = clipPathOwner.parentElement;\n }\n // move the clipPath tag as sibling to the real element that is using it\n clipPathOwner.parentElement!.appendChild(clipPathTag!);\n\n // this multiplication order could be opposite.\n // but i don't have an svg to test it\n // at the first SVG that has a transform on both places and is misplaced\n // try to invert this multiplication order\n const finalTransform = parseTransformAttribute(\n `${clipPathOwner.getAttribute('transform') || ''} ${\n clipPathTag.getAttribute('originalTransform') || ''\n }`,\n );\n\n clipPathTag.setAttribute(\n 'transform',\n `matrix(${finalTransform.join(',')})`,\n );\n\n const container = await Promise.all(\n clipPathElements.map((clipPathElement) => {\n return findTag(clipPathElement)\n .fromElement(clipPathElement, this.options, this.cssRules)\n .then((enlivedClippath: NotParsedFabricObject) => {\n removeTransformMatrixForSvgParsing(enlivedClippath);\n enlivedClippath.fillRule = enlivedClippath.clipRule!;\n delete enlivedClippath.clipRule;\n return enlivedClippath;\n });\n }),\n );\n const clipPath =\n container.length === 1 ? container[0] : new Group(container);\n const gTransform = multiplyTransformMatrices(\n objTransformInv,\n clipPath.calcTransformMatrix(),\n );\n if (clipPath.clipPath) {\n await this.resolveClipPath(\n clipPath,\n clipPathOwner,\n // this is tricky.\n // it tries to differentiate from when clipPaths are inherited by outside groups\n // or when are really clipPaths referencing other clipPaths\n clipPathTag.getAttribute('clip-path') ? clipPathOwner : undefined,\n );\n }\n const { scaleX, scaleY, angle, skewX, translateX, translateY } =\n qrDecompose(gTransform);\n clipPath.set({\n flipX: false,\n flipY: false,\n });\n clipPath.set({\n scaleX,\n scaleY,\n angle,\n skewX,\n skewY: 0,\n });\n clipPath.setPositionByOrigin(\n new Point(translateX, translateY),\n CENTER,\n CENTER,\n );\n obj.clipPath = clipPath;\n } else {\n // if clip-path does not resolve to any element, delete the property.\n delete obj.clipPath;\n return;\n }\n }\n}\n","import { applyViewboxTransform } from './applyViewboxTransform';\nimport { svgValidTagNamesRegEx } from './constants';\nimport { hasInvalidAncestor } from './hasInvalidAncestor';\nimport { parseUseDirectives } from './parseUseDirectives';\nimport type { SVGParsingOutput, TSvgReviverCallback } from './typedefs';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\nimport { ElementsParser } from './elements_parser';\nimport { log, SignalAbortedError } from '../util/internals/console';\nimport { getTagName } from './getTagName';\n\nconst isValidSvgTag = (el: Element) =>\n svgValidTagNamesRegEx.test(getTagName(el));\n\nexport const createEmptyResponse = (): SVGParsingOutput => ({\n objects: [],\n elements: [],\n options: {},\n allElements: [],\n});\n\n/**\n * Parses an SVG document, converts it to an array of corresponding fabric.* instances and passes them to a callback\n * @static\n * @function\n * @memberOf fabric\n * @param {HTMLElement} doc SVG document to parse\n * @param {TSvgParsedCallback} callback Invoked when the parsing is done, with null if parsing wasn't possible with the list of svg nodes.\n * @param {TSvgReviverCallback} [reviver] Extra callback for further parsing of SVG elements, called after each fabric object has been created.\n * Takes as input the original svg element and the generated `FabricObject` as arguments. Used to inspect extra properties not parsed by fabric,\n * or extra custom manipulation\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin setting to use for external resources\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @return {SVGParsingOutput}\n * {@link SVGParsingOutput} also receives `allElements` array as the last argument. This is the full list of svg nodes available in the document.\n * You may want to use it if you are trying to regroup the objects as they were originally grouped in the SVG. ( This was the reason why it was added )\n */\nexport async function parseSVGDocument(\n doc: Document,\n reviver?: TSvgReviverCallback,\n { crossOrigin, signal }: LoadImageOptions = {},\n): Promise {\n if (signal && signal.aborted) {\n log('log', new SignalAbortedError('parseSVGDocument'));\n // this is an unhappy path, we dont care about speed\n return createEmptyResponse();\n }\n const documentElement = doc.documentElement;\n parseUseDirectives(doc);\n\n const descendants = Array.from(documentElement.getElementsByTagName('*')),\n options = {\n ...applyViewboxTransform(documentElement),\n crossOrigin,\n signal,\n };\n const elements = descendants.filter((el) => {\n applyViewboxTransform(el);\n return isValidSvgTag(el) && !hasInvalidAncestor(el); // http://www.w3.org/TR/SVG/struct.html#DefsElement\n });\n if (!elements || (elements && !elements.length)) {\n return {\n ...createEmptyResponse(),\n options,\n allElements: descendants,\n };\n }\n const localClipPaths: Record = {};\n descendants\n .filter((el) => getTagName(el) === 'clipPath')\n .forEach((el) => {\n el.setAttribute('originalTransform', el.getAttribute('transform') || '');\n const id = el.getAttribute('id')!;\n localClipPaths[id] = Array.from(el.getElementsByTagName('*')).filter(\n (el) => isValidSvgTag(el),\n );\n });\n\n // Precedence of rules: style > class > attribute\n const elementParser = new ElementsParser(\n elements,\n options,\n reviver,\n doc,\n localClipPaths,\n );\n\n const instances = await elementParser.parse();\n\n return {\n objects: instances,\n elements,\n options,\n allElements: descendants,\n };\n}\n","import { getFabricWindow } from '../env';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\nimport { parseSVGDocument } from './parseSVGDocument';\nimport type { SVGParsingOutput, TSvgReviverCallback } from './typedefs';\n\n/**\n * Takes string corresponding to an SVG document, and parses it into a set of fabric objects\n * @memberOf fabric\n * @param {String} string representing the svg\n * @param {TSvgParsedCallback} callback Invoked when the parsing is done, with null if parsing wasn't possible with the list of svg nodes.\n * {@link TSvgParsedCallback} also receives `allElements` array as the last argument. This is the full list of svg nodes available in the document.\n * You may want to use it if you are trying to regroup the objects as they were originally grouped in the SVG. ( This was the reason why it was added )\n * @param {TSvgReviverCallback} [reviver] Extra callback for further parsing of SVG elements, called after each fabric object has been created.\n * Takes as input the original svg element and the generated `FabricObject` as arguments. Used to inspect extra properties not parsed by fabric,\n * or extra custom manipulation\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin setting to use for external resources\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n */\nexport function loadSVGFromString(\n string: string,\n reviver?: TSvgReviverCallback,\n options?: LoadImageOptions,\n): Promise {\n const parser = new (getFabricWindow().DOMParser)(),\n // should we use `image/svg+xml` here?\n doc = parser.parseFromString(string.trim(), 'text/xml');\n return parseSVGDocument(doc, reviver, options);\n}\n","import { request } from '../util/internals/dom_request';\nimport { parseSVGDocument, createEmptyResponse } from './parseSVGDocument';\nimport type { SVGParsingOutput, TSvgReviverCallback } from './typedefs';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\n\n/**\n * Takes url corresponding to an SVG document, and parses it into a set of fabric objects.\n * Note that SVG is fetched via XMLHttpRequest, so it needs to conform to SOP (Same Origin Policy)\n * @memberOf fabric\n * @param {string} url where the SVG is\n * @param {TSvgParsedCallback} callback Invoked when the parsing is done, with null if parsing wasn't possible with the list of svg nodes.\n * {@link TSvgParsedCallback} also receives `allElements` array as the last argument. This is the full list of svg nodes available in the document.\n * You may want to use it if you are trying to regroup the objects as they were originally grouped in the SVG. ( This was the reason why it was added )\n * @param {TSvgReviverCallback} [reviver] Extra callback for further parsing of SVG elements, called after each fabric object has been created.\n * Takes as input the original svg element and the generated `FabricObject` as arguments. Used to inspect extra properties not parsed by fabric,\n * or extra custom manipulation\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin setting to use for external resources\n * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n */\nexport function loadSVGFromURL(\n url: string,\n reviver?: TSvgReviverCallback,\n options: LoadImageOptions = {},\n): Promise {\n // need to handle error properly\n return new Promise((resolve, reject) => {\n const onComplete = (r: XMLHttpRequest) => {\n const xml = r.responseXML;\n if (xml) {\n resolve(xml);\n }\n reject();\n };\n\n request(url.replace(/^\\n\\s*/, '').trim(), {\n onComplete,\n signal: options.signal,\n });\n })\n .then((parsedDoc) => parseSVGDocument(parsedDoc, reviver, options))\n .catch(() => {\n // this is an unhappy path, we dont care about speed\n return createEmptyResponse();\n });\n}\n","import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Polyline } from '../shapes/Polyline';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { MODIFY_POLY } from '../constants';\n\nconst ACTION_NAME: TModificationEvents = MODIFY_POLY;\n\ntype TTransformAnchor = Transform & { pointIndex: number };\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nexport const createPolyPositionHandler = (pointIndex: number) => {\n return function (dim: Point, finalMatrix: TMat2D, polyObject: Polyline) {\n const { points, pathOffset } = polyObject;\n return new Point(points[pointIndex])\n .subtract(pathOffset)\n .transform(\n multiplyTransformMatrices(\n polyObject.getViewportTransform(),\n polyObject.calcTransformMatrix(),\n ),\n );\n };\n};\n\n/**\n * This function defines what the control does.\n * It'll be called on every mouse move after a control has been clicked and is being dragged.\n * The function receives as argument the mouse event, the current transform object\n * and the current position in canvas coordinate `transform.target` is a reference to the\n * current object being transformed.\n */\nexport const polyActionHandler = (\n eventData: TPointerEvent,\n transform: TTransformAnchor,\n x: number,\n y: number,\n) => {\n const { target, pointIndex } = transform;\n const poly = target as Polyline;\n const mouseLocalPosition = sendPointToPlane(\n new Point(x, y),\n undefined,\n poly.calcOwnMatrix(),\n );\n\n poly.points[pointIndex] = mouseLocalPosition.add(poly.pathOffset);\n poly.setDimensions();\n\n return true;\n};\n\n/**\n * Keep the polygon in the same position when we change its `width`/`height`/`top`/`left`.\n */\nexport const factoryPolyActionHandler = (\n pointIndex: number,\n fn: TransformActionHandler,\n) => {\n return function (\n eventData: TPointerEvent,\n transform: Transform,\n x: number,\n y: number,\n ) {\n const poly = transform.target as Polyline,\n anchorPoint = new Point(\n poly.points[(pointIndex > 0 ? pointIndex : poly.points.length) - 1],\n ),\n anchorPointInParentPlane = anchorPoint\n .subtract(poly.pathOffset)\n .transform(poly.calcOwnMatrix()),\n actionPerformed = fn(eventData, { ...transform, pointIndex }, x, y);\n\n const newAnchorPointInParentPlane = anchorPoint\n .subtract(poly.pathOffset)\n .transform(poly.calcOwnMatrix());\n\n const diff = newAnchorPointInParentPlane.subtract(anchorPointInParentPlane);\n poly.left -= diff.x;\n poly.top -= diff.y;\n\n return actionPerformed;\n };\n};\n\nexport const createPolyActionHandler = (pointIndex: number) =>\n wrapWithFireEvent(\n ACTION_NAME,\n factoryPolyActionHandler(pointIndex, polyActionHandler),\n );\n\nexport function createPolyControls(\n poly: Polyline,\n options?: Partial,\n): Record;\nexport function createPolyControls(\n numOfControls: number,\n options?: Partial,\n): Record;\nexport function createPolyControls(\n arg0: number | Polyline,\n options: Partial = {},\n) {\n const controls = {} as Record;\n for (\n let idx = 0;\n idx < (typeof arg0 === 'number' ? arg0 : arg0.points.length);\n idx++\n ) {\n controls[`p${idx}`] = new Control({\n actionName: ACTION_NAME,\n positionHandler: createPolyPositionHandler(idx),\n actionHandler: createPolyActionHandler(idx),\n ...options,\n });\n }\n return controls;\n}\n","import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Path } from '../shapes/Path';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n} from '../EventTypeDefs';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport type { TSimpleParseCommandType } from '../util/path/typedefs';\nimport type { ControlRenderingStyleOverride } from './controlRendering';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo } from './util';\n\nconst ACTION_NAME: TModificationEvents = 'modifyPath' as const;\n\ntype TTransformAnchor = Transform;\n\nexport type PathPointControlStyle = {\n controlFill?: string;\n controlStroke?: string;\n connectionDashArray?: number[];\n};\n\nconst calcPathPointPosition = (\n pathObject: Path,\n commandIndex: number,\n pointIndex: number,\n) => {\n const { path, pathOffset } = pathObject;\n const command = path[commandIndex];\n return new Point(\n (command[pointIndex] as number) - pathOffset.x,\n (command[pointIndex + 1] as number) - pathOffset.y,\n ).transform(\n multiplyTransformMatrices(\n pathObject.getViewportTransform(),\n pathObject.calcTransformMatrix(),\n ),\n );\n};\n\nconst movePathPoint = (\n pathObject: Path,\n x: number,\n y: number,\n commandIndex: number,\n pointIndex: number,\n) => {\n const { path, pathOffset } = pathObject;\n\n const anchorCommand =\n path[(commandIndex > 0 ? commandIndex : path.length) - 1];\n const anchorPoint = new Point(\n anchorCommand[pointIndex] as number,\n anchorCommand[pointIndex + 1] as number,\n );\n\n const anchorPointInParentPlane = anchorPoint\n .subtract(pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const mouseLocalPosition = sendPointToPlane(\n new Point(x, y),\n undefined,\n pathObject.calcOwnMatrix(),\n );\n\n path[commandIndex][pointIndex] = mouseLocalPosition.x + pathOffset.x;\n path[commandIndex][pointIndex + 1] = mouseLocalPosition.y + pathOffset.y;\n pathObject.setDimensions();\n\n const newAnchorPointInParentPlane = anchorPoint\n .subtract(pathObject.pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const diff = newAnchorPointInParentPlane.subtract(anchorPointInParentPlane);\n pathObject.left -= diff.x;\n pathObject.top -= diff.y;\n pathObject.set('dirty', true);\n return true;\n};\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nfunction pathPositionHandler(\n this: PathPointControl,\n dim: Point,\n finalMatrix: TMat2D,\n pathObject: Path,\n) {\n const { commandIndex, pointIndex } = this;\n return calcPathPointPosition(pathObject, commandIndex, pointIndex);\n}\n\n/**\n * This function defines what the control does.\n * It'll be called on every mouse move after a control has been clicked and is being dragged.\n * The function receives as argument the mouse event, the current transform object\n * and the current position in canvas coordinate `transform.target` is a reference to the\n * current object being transformed.\n */\nfunction pathActionHandler(\n this: PathPointControl,\n eventData: TPointerEvent,\n transform: TTransformAnchor,\n x: number,\n y: number,\n) {\n const { target } = transform;\n const { commandIndex, pointIndex } = this;\n const actionPerformed = movePathPoint(\n target as Path,\n x,\n y,\n commandIndex,\n pointIndex,\n );\n if (actionPerformed) {\n fireEvent(this.actionName as TModificationEvents, {\n ...commonEventInfo(eventData, transform, x, y),\n commandIndex,\n pointIndex,\n });\n }\n return actionPerformed;\n}\n\nconst indexFromPrevCommand = (previousCommandType: TSimpleParseCommandType) =>\n previousCommandType === 'C' ? 5 : previousCommandType === 'Q' ? 3 : 1;\n\nclass PathPointControl extends Control {\n declare commandIndex: number;\n declare pointIndex: number;\n declare controlFill: string;\n declare controlStroke: string;\n constructor(options?: Partial) {\n super(options);\n }\n\n render(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path,\n ) {\n const overrides: ControlRenderingStyleOverride = {\n ...styleOverride,\n cornerColor: this.controlFill,\n cornerStrokeColor: this.controlStroke,\n transparentCorners: !this.controlFill,\n };\n super.render(ctx, left, top, overrides, fabricObject);\n }\n}\n\nclass PathControlPointControl extends PathPointControl {\n declare connectionDashArray?: number[];\n declare connectToCommandIndex: number;\n declare connectToPointIndex: number;\n constructor(options?: Partial) {\n super(options);\n }\n\n render(\n this: PathControlPointControl,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path,\n ) {\n const { path } = fabricObject;\n const {\n commandIndex,\n pointIndex,\n connectToCommandIndex,\n connectToPointIndex,\n } = this;\n ctx.save();\n ctx.strokeStyle = this.controlStroke;\n if (this.connectionDashArray) {\n ctx.setLineDash(this.connectionDashArray);\n }\n const [commandType] = path[commandIndex];\n const point = calcPathPointPosition(\n fabricObject,\n connectToCommandIndex,\n connectToPointIndex,\n );\n\n if (commandType === 'Q') {\n // one control point connects to 2 points\n const point2 = calcPathPointPosition(\n fabricObject,\n commandIndex,\n pointIndex + 2,\n );\n ctx.moveTo(point2.x, point2.y);\n ctx.lineTo(left, top);\n } else {\n ctx.moveTo(left, top);\n }\n ctx.lineTo(point.x, point.y);\n ctx.stroke();\n ctx.restore();\n\n super.render(ctx, left, top, styleOverride, fabricObject);\n }\n}\n\nconst createControl = (\n commandIndexPos: number,\n pointIndexPos: number,\n isControlPoint: boolean,\n options: Partial & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n },\n connectToCommandIndex?: number,\n connectToPointIndex?: number,\n) =>\n new (isControlPoint ? PathControlPointControl : PathPointControl)({\n commandIndex: commandIndexPos,\n pointIndex: pointIndexPos,\n actionName: ACTION_NAME,\n positionHandler: pathPositionHandler,\n actionHandler: pathActionHandler,\n connectToCommandIndex,\n connectToPointIndex,\n ...options,\n ...(isControlPoint ? options.controlPointStyle : options.pointStyle),\n } as Partial);\n\nexport function createPathControls(\n path: Path,\n options: Partial & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n } = {},\n): Record {\n const controls = {} as Record;\n let previousCommandType: TSimpleParseCommandType = 'M';\n path.path.forEach((command, commandIndex) => {\n const commandType = command[0];\n\n if (commandType !== 'Z') {\n controls[`c_${commandIndex}_${commandType}`] = createControl(\n commandIndex,\n command.length - 2,\n false,\n options,\n );\n }\n switch (commandType) {\n case 'C':\n controls[`c_${commandIndex}_C_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex - 1,\n indexFromPrevCommand(previousCommandType),\n );\n controls[`c_${commandIndex}_C_CP_2`] = createControl(\n commandIndex,\n 3,\n true,\n options,\n commandIndex,\n 5,\n );\n break;\n case 'Q':\n controls[`c_${commandIndex}_Q_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex,\n 3,\n );\n break;\n }\n previousCommandType = commandType;\n });\n return controls;\n}\n","import { getFabricWindow } from '../env';\nimport { createCanvasElement, createCanvasElementFor } from '../util/misc/dom';\nimport { WebGLFilterBackend } from './WebGLFilterBackend';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\n\nexport const isWebGLPipelineState = (\n options: TWebGLPipelineState | T2DPipelineState,\n): options is TWebGLPipelineState => {\n return (options as TWebGLPipelineState).webgl !== undefined;\n};\n\n/**\n * Pick a method to copy data from GL context to 2d canvas. In some browsers using\n * drawImage should be faster, but is also bugged for a small combination of old hardware\n * and drivers.\n * putImageData is faster than drawImage for that specific operation.\n */\nexport const isPutImageFaster = (width: number, height: number): boolean => {\n const targetCanvas = createCanvasElementFor({ width, height });\n const sourceCanvas = createCanvasElement();\n const gl = sourceCanvas.getContext('webgl')!;\n // eslint-disable-next-line no-undef\n const imageBuffer = new ArrayBuffer(width * height * 4);\n\n const testContext = {\n imageBuffer: imageBuffer,\n } as unknown as Required;\n const testPipelineState = {\n destinationWidth: width,\n destinationHeight: height,\n targetCanvas: targetCanvas,\n } as unknown as TWebGLPipelineState;\n let startTime;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2D.call(\n testContext,\n gl,\n testPipelineState,\n );\n const drawImageTime = getFabricWindow().performance.now() - startTime;\n\n startTime = getFabricWindow().performance.now();\n WebGLFilterBackend.prototype.copyGLTo2DPutImageData.call(\n testContext,\n gl,\n testPipelineState,\n );\n const putImageDataTime = getFabricWindow().performance.now() - startTime;\n\n return drawImageTime > putImageDataTime;\n};\n","export const highPsourceCode = `precision highp float`;\n\nexport const identityFragmentShader = `\n ${highPsourceCode};\n varying vec2 vTexCoord;\n uniform sampler2D uTexture;\n void main() {\n gl_FragColor = texture2D(uTexture, vTexCoord);\n }`;\n\nexport const vertexSource = `\n attribute vec2 aPosition;\n varying vec2 vTexCoord;\n void main() {\n vTexCoord = aPosition;\n gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n }`;\n","import { getEnv } from '../env';\nimport type {\n T2DPipelineState,\n TWebGLAttributeLocationMap,\n TWebGLPipelineState,\n TWebGLProgramCacheItem,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport {\n highPsourceCode,\n identityFragmentShader,\n vertexSource,\n} from './shaders/baseFilter';\nimport type { Abortable } from '../typedefs';\nimport { FabricError } from '../util/internals/console';\nimport { createCanvasElementFor } from '../util/misc/dom';\n\nconst regex = new RegExp(highPsourceCode, 'g');\n\nexport class BaseFilter<\n Name extends string,\n OwnProps extends Record = object,\n> {\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n get type(): Name {\n return (this.constructor as typeof BaseFilter).type as Name;\n }\n\n /**\n * The class type. Used to identify which class this is.\n * This is used for serialization purposes and internally it can be used\n * to identify classes. As a developer you could use `instance of Class`\n * but to avoid importing all the code and blocking tree shaking we try\n * to avoid doing that.\n */\n static type = 'BaseFilter';\n\n /**\n * Contains the uniform locations for the fragment shader.\n * uStepW and uStepH are handled by the BaseFilter, each filter class\n * needs to specify all the one that are needed\n */\n static uniformLocations: string[] = [];\n\n declare static defaults: Record;\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor({\n type,\n ...options\n }: { type?: never } & Partial & Record = {}) {\n Object.assign(\n this,\n (this.constructor as typeof BaseFilter).defaults,\n options,\n );\n }\n\n protected getFragmentSource(): string {\n return identityFragmentShader;\n }\n\n getVertexSource(): string {\n return vertexSource;\n }\n\n /**\n * Compile this filter's shader program.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context to use for shader compilation.\n * @param {String} fragmentSource fragmentShader source for compilation\n * @param {String} vertexSource vertexShader source for compilation\n */\n createProgram(\n gl: WebGLRenderingContext,\n fragmentSource: string = this.getFragmentSource(),\n vertexSource: string = this.getVertexSource(),\n ) {\n const {\n WebGLProbe: { GLPrecision = 'highp' },\n } = getEnv();\n if (GLPrecision !== 'highp') {\n fragmentSource = fragmentSource.replace(\n regex,\n highPsourceCode.replace('highp', GLPrecision),\n );\n }\n const vertexShader = gl.createShader(gl.VERTEX_SHADER);\n const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n const program = gl.createProgram();\n\n if (!vertexShader || !fragmentShader || !program) {\n throw new FabricError(\n 'Vertex, fragment shader or program creation error',\n );\n }\n gl.shaderSource(vertexShader, vertexSource);\n gl.compileShader(vertexShader);\n if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n throw new FabricError(\n `Vertex shader compile error for ${this.type}: ${gl.getShaderInfoLog(\n vertexShader,\n )}`,\n );\n }\n\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n throw new FabricError(\n `Fragment shader compile error for ${this.type}: ${gl.getShaderInfoLog(\n fragmentShader,\n )}`,\n );\n }\n\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n throw new FabricError(\n `Shader link error for \"${this.type}\" ${gl.getProgramInfoLog(program)}`,\n );\n }\n\n const uniformLocations = this.getUniformLocations(gl, program) || {};\n uniformLocations.uStepW = gl.getUniformLocation(program, 'uStepW');\n uniformLocations.uStepH = gl.getUniformLocation(program, 'uStepH');\n\n return {\n program,\n attributeLocations: this.getAttributeLocations(gl, program),\n uniformLocations,\n };\n }\n\n /**\n * Return a map of attribute names to WebGLAttributeLocation objects.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take attribute locations.\n * @returns {Object} A map of attribute names to attribute locations.\n */\n getAttributeLocations(\n gl: WebGLRenderingContext,\n program: WebGLProgram,\n ): TWebGLAttributeLocationMap {\n return {\n aPosition: gl.getAttribLocation(program, 'aPosition'),\n };\n }\n\n /**\n * Return a map of uniform names to WebGLUniformLocation objects.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take uniform locations.\n * @returns {Object} A map of uniform names to uniform locations.\n */\n getUniformLocations(\n gl: WebGLRenderingContext,\n program: WebGLProgram,\n ): TWebGLUniformLocationMap {\n const locations = (this.constructor as unknown as typeof BaseFilter)\n .uniformLocations;\n\n const uniformLocations: Record = {};\n for (let i = 0; i < locations.length; i++) {\n uniformLocations[locations[i]] = gl.getUniformLocation(\n program,\n locations[i],\n );\n }\n return uniformLocations;\n }\n\n /**\n * Send attribute data from this filter to its shader program on the GPU.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {Object} attributeLocations A map of shader attribute names to their locations.\n */\n sendAttributeData(\n gl: WebGLRenderingContext,\n attributeLocations: Record,\n aPositionData: Float32Array,\n ) {\n const attributeLocation = attributeLocations.aPosition;\n const buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.enableVertexAttribArray(attributeLocation);\n gl.vertexAttribPointer(attributeLocation, 2, gl.FLOAT, false, 0, 0);\n gl.bufferData(gl.ARRAY_BUFFER, aPositionData, gl.STATIC_DRAW);\n }\n\n _setupFrameBuffer(options: TWebGLPipelineState) {\n const gl = options.context;\n if (options.passes > 1) {\n const width = options.destinationWidth;\n const height = options.destinationHeight;\n if (options.sourceWidth !== width || options.sourceHeight !== height) {\n gl.deleteTexture(options.targetTexture);\n options.targetTexture = options.filterBackend.createTexture(\n gl,\n width,\n height,\n );\n }\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n options.targetTexture,\n 0,\n );\n } else {\n // draw last filter on canvas and not to framebuffer.\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.finish();\n }\n }\n\n _swapTextures(options: TWebGLPipelineState) {\n options.passes--;\n options.pass++;\n const temp = options.targetTexture;\n options.targetTexture = options.sourceTexture;\n options.sourceTexture = temp;\n }\n\n /**\n * Generic isNeutral implementation for one parameter based filters.\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * Other filters may need their own version ( ColorMatrix, HueRotation, gamma, ComposedFilter )\n * @param {Object} options\n **/\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isNeutralState(options?: any): boolean {\n return false;\n }\n\n /**\n * Apply this filter to the input image data provided.\n *\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n this._setupFrameBuffer(options);\n this.applyToWebGL(options);\n this._swapTextures(options);\n } else {\n this.applyTo2d(options);\n }\n }\n\n applyTo2d(_options: T2DPipelineState): void {\n // override by subclass\n }\n\n /**\n * Returns a string that represent the current selected shader code for the filter.\n * Used to force recompilation when parameters change or to retrieve the shader from cache\n * @type string\n **/\n getCacheKey(): string {\n return this.type;\n }\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n * @return {WebGLProgram} the compiled program shader\n */\n retrieveShader(options: TWebGLPipelineState): TWebGLProgramCacheItem {\n const key = this.getCacheKey();\n if (!options.programCache[key]) {\n options.programCache[key] = this.createProgram(options.context);\n }\n return options.programCache[key];\n }\n\n /**\n * Apply this filter using webgl.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.originalTexture The texture of the original input image.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyToWebGL(options: TWebGLPipelineState) {\n const gl = options.context;\n const shader = this.retrieveShader(options);\n if (options.pass === 0 && options.originalTexture) {\n gl.bindTexture(gl.TEXTURE_2D, options.originalTexture);\n } else {\n gl.bindTexture(gl.TEXTURE_2D, options.sourceTexture);\n }\n gl.useProgram(shader.program);\n this.sendAttributeData(gl, shader.attributeLocations, options.aPosition);\n\n gl.uniform1f(shader.uniformLocations.uStepW, 1 / options.sourceWidth);\n gl.uniform1f(shader.uniformLocations.uStepH, 1 / options.sourceHeight);\n\n this.sendUniformData(gl, shader.uniformLocations);\n gl.viewport(0, 0, options.destinationWidth, options.destinationHeight);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n }\n\n bindAdditionalTexture(\n gl: WebGLRenderingContext,\n texture: WebGLTexture,\n textureUnit: number,\n ) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n // reset active texture to 0 as usual\n gl.activeTexture(gl.TEXTURE0);\n }\n\n unbindAdditionalTexture(gl: WebGLRenderingContext, textureUnit: number) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.activeTexture(gl.TEXTURE0);\n }\n\n /**\n * Send uniform data from this filter to its shader program on the GPU.\n *\n * Intended to be overridden by subclasses.\n *\n * @param {WebGLRenderingContext} _gl The canvas context used to compile the shader program.\n * @param {Object} _uniformLocations A map of shader uniform names to their locations.\n */\n sendUniformData(\n _gl: WebGLRenderingContext,\n _uniformLocations: TWebGLUniformLocationMap,\n ): void {\n // override by subclass\n }\n\n /**\n * If needed by a 2d filter, this functions can create an helper canvas to be used\n * remember that options.targetCanvas is available for use till end of chain.\n */\n createHelpLayer(options: T2DPipelineState) {\n if (!options.helpLayer) {\n const { sourceWidth, sourceHeight } = options;\n const helpLayer = createCanvasElementFor({\n width: sourceWidth,\n height: sourceHeight,\n });\n options.helpLayer = helpLayer;\n }\n }\n\n /**\n * Returns object representation of an instance\n * It will automatically export the default values of a filter,\n * stored in the static defaults property.\n * @return {Object} Object representation of an instance\n */\n toObject(): { type: Name } & OwnProps {\n const defaultKeys = Object.keys(\n (this.constructor as typeof BaseFilter).defaults || {},\n ) as (keyof OwnProps)[];\n\n return {\n type: this.type,\n ...defaultKeys.reduce((acc, key) => {\n acc[key] = this[\n key as keyof this\n ] as unknown as (typeof acc)[typeof key];\n return acc;\n }, {} as OwnProps),\n };\n }\n\n /**\n * Returns a JSON representation of an instance\n * @return {Object} JSON\n */\n toJSON() {\n // delegate, not alias\n return this.toObject();\n }\n\n static async fromObject(\n { type, ...filterOptions }: Record,\n _options: Abortable,\n ): Promise> {\n return new this(filterOptions);\n }\n}\n","export const blendColorFragmentSource = {\n multiply: 'gl_FragColor.rgb *= uColor.rgb;\\n',\n screen:\n 'gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);\\n',\n add: 'gl_FragColor.rgb += uColor.rgb;\\n',\n difference: 'gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);\\n',\n subtract: 'gl_FragColor.rgb -= uColor.rgb;\\n',\n lighten: 'gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);\\n',\n darken: 'gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);\\n',\n exclusion:\n 'gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);\\n',\n overlay: `\n if (uColor.r < 0.5) {\n gl_FragColor.r *= 2.0 * uColor.r;\n } else {\n gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);\n }\n if (uColor.g < 0.5) {\n gl_FragColor.g *= 2.0 * uColor.g;\n } else {\n gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);\n }\n if (uColor.b < 0.5) {\n gl_FragColor.b *= 2.0 * uColor.b;\n } else {\n gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);\n }\n `,\n tint: `\n gl_FragColor.rgb *= (1.0 - uColor.a);\n gl_FragColor.rgb += uColor.rgb;\n `,\n} as const;\n","import { Color } from '../color/Color';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { blendColorFragmentSource } from './shaders/blendColor';\n\nexport type TBlendMode =\n | 'multiply'\n | 'add'\n | 'difference'\n | 'screen'\n | 'subtract'\n | 'darken'\n | 'lighten'\n | 'overlay'\n | 'exclusion'\n | 'tint';\n\ntype BlendColorOwnProps = {\n color: string;\n mode: TBlendMode;\n alpha: number;\n};\n\nexport const blendColorDefaultValues: BlendColorOwnProps = {\n color: '#F95C63',\n mode: 'multiply',\n alpha: 1,\n};\n\n/**\n * Color Blend filter class\n * @example\n * const filter = new BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * const filter = new BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply'\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class BlendColor extends BaseFilter<'BlendColor', BlendColorOwnProps> {\n /**\n * Color to make the blend operation with. default to a reddish color since black or white\n * gives always strong result.\n * @type String\n * @default\n **/\n declare color: BlendColorOwnProps['color'];\n\n /**\n * Blend mode for the filter: one of multiply, add, difference, screen, subtract,\n * darken, lighten, overlay, exclusion, tint.\n * @type String\n * @default\n **/\n declare mode: BlendColorOwnProps['mode'];\n /**\n * alpha value. represent the strength of the blend color operation.\n * @type Number\n * @default\n **/\n declare alpha: BlendColorOwnProps['alpha'];\n\n static defaults = blendColorDefaultValues;\n\n static type = 'BlendColor';\n\n static uniformLocations = ['uColor'];\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n protected getFragmentSource(): string {\n return `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec4 uColor;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n gl_FragColor = color;\n if (color.a > 0.0) {\n ${blendColorFragmentSource[this.mode]}\n }\n }\n `;\n }\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const source = new Color(this.color).getSource();\n const tr = source[0] * this.alpha;\n const tg = source[1] * this.alpha;\n const tb = source[2] * this.alpha;\n const alpha1 = 1 - this.alpha;\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = (r * tr) / 255;\n data[i + 1] = (g * tg) / 255;\n data[i + 2] = (b * tb) / 255;\n break;\n case 'screen':\n data[i] = 255 - ((255 - r) * (255 - tr)) / 255;\n data[i + 1] = 255 - ((255 - g) * (255 - tg)) / 255;\n data[i + 2] = 255 - ((255 - b) * (255 - tb)) / 255;\n break;\n case 'add':\n data[i] = r + tr;\n data[i + 1] = g + tg;\n data[i + 2] = b + tb;\n break;\n case 'difference':\n data[i] = Math.abs(r - tr);\n data[i + 1] = Math.abs(g - tg);\n data[i + 2] = Math.abs(b - tb);\n break;\n case 'subtract':\n data[i] = r - tr;\n data[i + 1] = g - tg;\n data[i + 2] = b - tb;\n break;\n case 'darken':\n data[i] = Math.min(r, tr);\n data[i + 1] = Math.min(g, tg);\n data[i + 2] = Math.min(b, tb);\n break;\n case 'lighten':\n data[i] = Math.max(r, tr);\n data[i + 1] = Math.max(g, tg);\n data[i + 2] = Math.max(b, tb);\n break;\n case 'overlay':\n data[i] =\n tr < 128\n ? (2 * r * tr) / 255\n : 255 - (2 * (255 - r) * (255 - tr)) / 255;\n data[i + 1] =\n tg < 128\n ? (2 * g * tg) / 255\n : 255 - (2 * (255 - g) * (255 - tg)) / 255;\n data[i + 2] =\n tb < 128\n ? (2 * b * tb) / 255\n : 255 - (2 * (255 - b) * (255 - tb)) / 255;\n break;\n case 'exclusion':\n data[i] = tr + r - (2 * tr * r) / 255;\n data[i + 1] = tg + g - (2 * tg * g) / 255;\n data[i + 2] = tb + b - (2 * tb * b) / 255;\n break;\n case 'tint':\n data[i] = tr + r * alpha1;\n data[i + 1] = tg + g * alpha1;\n data[i + 2] = tb + b * alpha1;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const source = new Color(this.color).getSource();\n source[0] = (this.alpha * source[0]) / 255;\n source[1] = (this.alpha * source[1]) / 255;\n source[2] = (this.alpha * source[2]) / 255;\n source[3] = this.alpha;\n gl.uniform4fv(uniformLocations.uColor, source);\n }\n}\n\nclassRegistry.setClass(BlendColor);\n","import type { TBlendImageMode } from '../BlendImage';\n\nexport const fragmentSource: Record = {\n multiply: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform sampler2D uImage;\n uniform vec4 uColor;\n varying vec2 vTexCoord;\n varying vec2 vTexCoord2;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n vec4 color2 = texture2D(uImage, vTexCoord2);\n color.rgba *= color2.rgba;\n gl_FragColor = color;\n }\n `,\n mask: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform sampler2D uImage;\n uniform vec4 uColor;\n varying vec2 vTexCoord;\n varying vec2 vTexCoord2;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n vec4 color2 = texture2D(uImage, vTexCoord2);\n color.a = color2.a;\n gl_FragColor = color;\n }\n `,\n} as const;\n\nexport const vertexSource = `\n attribute vec2 aPosition;\n varying vec2 vTexCoord;\n varying vec2 vTexCoord2;\n uniform mat3 uTransformMatrix;\n void main() {\n vTexCoord = aPosition;\n vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\n gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n }\n ` as const;\n","import { FabricImage } from '../shapes/Image';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { BaseFilter } from './BaseFilter';\nimport type {\n T2DPipelineState,\n TWebGLPipelineState,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport type { WebGLFilterBackend } from './WebGLFilterBackend';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource, vertexSource } from './shaders/blendImage';\n\nexport type TBlendImageMode = 'multiply' | 'mask';\n\ntype BlendImageOwnProps = {\n mode: TBlendImageMode;\n alpha: number;\n};\n\nexport const blendImageDefaultValues: BlendImageOwnProps = {\n mode: 'multiply',\n alpha: 1,\n};\n\n/**\n * Image Blend filter class\n * @example\n * const filter = new filters.BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * const filter = new BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply'\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class BlendImage extends BaseFilter<'BlendImage', BlendImageOwnProps> {\n /**\n * Image to make the blend operation with.\n **/\n declare image: FabricImage;\n\n /**\n * Blend mode for the filter: either 'multiply' or 'mask'. 'multiply' will\n * multiply the values of each channel (R, G, B, and A) of the filter image by\n * their corresponding values in the base image. 'mask' will only look at the\n * alpha channel of the filter image, and apply those values to the base\n * image's alpha channel.\n * @type String\n * @default\n **/\n declare mode: BlendImageOwnProps['mode'];\n\n /**\n * alpha value. represent the strength of the blend image operation.\n * not implemented.\n **/\n declare alpha: BlendImageOwnProps['alpha'];\n\n static type = 'BlendImage';\n\n static defaults = blendImageDefaultValues;\n\n static uniformLocations = ['uTransformMatrix', 'uImage'];\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n getFragmentSource(): string {\n return fragmentSource[this.mode];\n }\n\n getVertexSource(): string {\n return vertexSource;\n }\n\n applyToWebGL(options: TWebGLPipelineState) {\n const gl = options.context,\n texture = this.createTexture(options.filterBackend, this.image);\n this.bindAdditionalTexture(gl, texture!, gl.TEXTURE1);\n super.applyToWebGL(options);\n this.unbindAdditionalTexture(gl, gl.TEXTURE1);\n }\n\n createTexture(backend: WebGLFilterBackend, image: FabricImage) {\n return backend.getCachedTexture(image.cacheKey, image.getElement());\n }\n\n /**\n * Calculate a transformMatrix to adapt the image to blend over\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n calculateMatrix() {\n const image = this.image,\n { width, height } = image.getElement();\n return [\n 1 / image.scaleX,\n 0,\n 0,\n 0,\n 1 / image.scaleY,\n 0,\n -image.left / width,\n -image.top / height,\n 1,\n ];\n }\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({\n imageData: { data, width, height },\n filterBackend: { resources },\n }: T2DPipelineState) {\n const image = this.image;\n if (!resources.blendImage) {\n resources.blendImage = createCanvasElement();\n }\n const canvas1 = resources.blendImage;\n const context = canvas1.getContext('2d')!;\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas1.width = width;\n canvas1.height = height;\n } else {\n context.clearRect(0, 0, width, height);\n }\n context.setTransform(\n image.scaleX,\n 0,\n 0,\n image.scaleY,\n image.left,\n image.top,\n );\n context.drawImage(image.getElement(), 0, 0, width, height);\n const blendData = context.getImageData(0, 0, width, height).data;\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n const a = data[i + 3];\n\n const tr = blendData[i];\n const tg = blendData[i + 1];\n const tb = blendData[i + 2];\n const ta = blendData[i + 3];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = (r * tr) / 255;\n data[i + 1] = (g * tg) / 255;\n data[i + 2] = (b * tb) / 255;\n data[i + 3] = (a * ta) / 255;\n break;\n case 'mask':\n data[i + 3] = ta;\n break;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const matrix = this.calculateMatrix();\n gl.uniform1i(uniformLocations.uImage, 1); // texture unit 1.\n gl.uniformMatrix3fv(uniformLocations.uTransformMatrix, false, matrix);\n }\n\n /**\n * Returns object representation of an instance\n * TODO: Handle the possibility of missing image better.\n * As of now a BlendImage filter without image can't be used with fromObject\n * @return {Object} Object representation of an instance\n */\n toObject(): {\n type: 'BlendImage';\n image: ReturnType;\n } & BlendImageOwnProps {\n return {\n ...super.toObject(),\n image: this.image && this.image.toObject(),\n };\n }\n\n /**\n * Create filter instance from an object representation\n * @static\n * @param {object} object Object to create an instance from\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting image loading, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static async fromObject(\n { type, image, ...filterOptions }: Record,\n options: { signal: AbortSignal },\n ): Promise> {\n return FabricImage.fromObject(image, options).then(\n (enlivedImage) =>\n new this({ ...filterOptions, image: enlivedImage }) as BlendImage,\n );\n }\n}\n\nclassRegistry.setClass(BlendImage);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec2 uDelta;\n varying vec2 vTexCoord;\n const float nSamples = 15.0;\n vec3 v3offset = vec3(12.9898, 78.233, 151.7182);\n float random(vec3 scale) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\n }\n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n float offset = random(v3offset);\n for (float t = -nSamples; t <= nSamples; t++) {\n float percent = (t + offset - 0.5) / nSamples;\n float weight = 1.0 - abs(percent);\n color += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;\n total += weight;\n }\n gl_FragColor = color / total;\n }\n ` as const;\n","import { createCanvasElement } from '../util/misc/dom';\nimport { BaseFilter } from './BaseFilter';\nimport type {\n TWebGLPipelineState,\n T2DPipelineState,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/blur';\n\ntype BlurOwnProps = {\n blur: number;\n};\n\nexport const blurDefaultValues: BlurOwnProps = {\n blur: 0,\n};\n\n/**\n * Blur filter class\n * @example\n * const filter = new Blur({\n * blur: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class Blur extends BaseFilter<'Blur', BlurOwnProps> {\n /**\n * blur value, in percentage of image dimensions.\n * specific to keep the image blur constant at different resolutions\n * range between 0 and 1.\n * @type Number\n * @default\n */\n declare blur: BlurOwnProps['blur'];\n\n declare horizontal: boolean;\n declare aspectRatio: number;\n\n static type = 'Blur';\n\n static defaults = blurDefaultValues;\n\n static uniformLocations = ['uDelta'];\n\n getFragmentSource(): string {\n return fragmentSource;\n }\n\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n // this aspectRatio is used to give the same blur to vertical and horizontal\n this.aspectRatio = options.sourceWidth / options.sourceHeight;\n options.passes++;\n this._setupFrameBuffer(options);\n this.horizontal = true;\n this.applyToWebGL(options);\n this._swapTextures(options);\n this._setupFrameBuffer(options);\n this.horizontal = false;\n this.applyToWebGL(options);\n this._swapTextures(options);\n } else {\n this.applyTo2d(options);\n }\n }\n\n applyTo2d(options: T2DPipelineState) {\n options.imageData = this.simpleBlur(options);\n }\n\n simpleBlur({\n ctx,\n imageData,\n filterBackend: { resources },\n }: T2DPipelineState) {\n const { width, height } = imageData;\n if (!resources.blurLayer1) {\n resources.blurLayer1 = createCanvasElement();\n resources.blurLayer2 = createCanvasElement();\n }\n const canvas1 = resources.blurLayer1!;\n const canvas2 = resources.blurLayer2!;\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas2.width = canvas1.width = width;\n canvas2.height = canvas1.height = height;\n }\n const ctx1 = canvas1.getContext('2d')!,\n ctx2 = canvas2.getContext('2d')!,\n nSamples = 15,\n blur = this.blur * 0.06 * 0.5;\n let random, percent, j, i;\n\n // load first canvas\n ctx1.putImageData(imageData, 0, 0);\n ctx2.clearRect(0, 0, width, height);\n\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * width + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, j, random);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * height + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, random, j);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n ctx.drawImage(canvas1, 0, 0);\n const newImageData = ctx.getImageData(0, 0, canvas1.width, canvas1.height);\n ctx1.globalAlpha = 1;\n ctx1.clearRect(0, 0, canvas1.width, canvas1.height);\n return newImageData;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const delta = this.chooseRightDelta();\n gl.uniform2fv(uniformLocations.uDelta, delta);\n }\n\n isNeutralState() {\n return this.blur === 0;\n }\n\n /**\n * choose right value of image percentage to blur with\n * @returns {Array} a numeric array with delta values\n */\n chooseRightDelta() {\n let blurScale = 1;\n const delta = [0, 0];\n if (this.horizontal) {\n if (this.aspectRatio > 1) {\n // image is wide, i want to shrink radius horizontal\n blurScale = 1 / this.aspectRatio;\n }\n } else {\n if (this.aspectRatio < 1) {\n // image is tall, i want to shrink radius vertical\n blurScale = this.aspectRatio;\n }\n }\n const blur = blurScale * this.blur * 0.12;\n if (this.horizontal) {\n delta[0] = blur;\n } else {\n delta[1] = blur;\n }\n return delta;\n }\n}\n\nclassRegistry.setClass(Blur);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uBrightness;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n color.rgb += uBrightness;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/brightness';\n\ntype BrightnessOwnProps = {\n brightness: number;\n};\n\nexport const brightnessDefaultValues: BrightnessOwnProps = {\n brightness: 0,\n};\n\n/**\n * Brightness filter class\n * @example\n * const filter = new Brightness({\n * brightness: 0.05\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Brightness extends BaseFilter<'Brightness', BrightnessOwnProps> {\n /**\n * Brightness value, from -1 to 1.\n * translated to -255 to 255 for 2d\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Number} brightness\n * @default\n */\n declare brightness: BrightnessOwnProps['brightness'];\n\n static type = 'Brightness';\n\n static defaults = brightnessDefaultValues;\n\n static uniformLocations = ['uBrightness'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const brightness = Math.round(this.brightness * 255);\n for (let i = 0; i < data.length; i += 4) {\n data[i] = data[i] + brightness;\n data[i + 1] = data[i + 1] + brightness;\n data[i + 2] = data[i + 2] + brightness;\n }\n }\n\n isNeutralState() {\n return this.brightness === 0;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uBrightness, this.brightness);\n }\n}\n\nclassRegistry.setClass(Brightness);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n varying vec2 vTexCoord;\n uniform mat4 uColorMatrix;\n uniform vec4 uConstants;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n color *= uColorMatrix;\n color += uConstants;\n gl_FragColor = color;\n }`;\n","import { BaseFilter } from './BaseFilter';\nimport type {\n T2DPipelineState,\n TMatColorMatrix,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/colorMatrix';\n\ntype ColorMatrixOwnProps = {\n matrix: TMatColorMatrix;\n colorsOnly: boolean;\n};\n\nexport const colorMatrixDefaultValues: ColorMatrixOwnProps = {\n matrix: [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],\n colorsOnly: true,\n};\n\n/**\n * Color Matrix filter class\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @see {@Link http://phoboslab.org/log/2013/11/fast-image-filters-with-webgl demo}\n * @example Kodachrome filter\n * const filter = new ColorMatrix({\n * matrix: [\n 1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,\n -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,\n -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,\n 0, 0, 0, 1, 0\n ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class ColorMatrix<\n Name extends string = 'ColorMatrix',\n OwnProps extends object = ColorMatrixOwnProps,\n> extends BaseFilter {\n /**\n * Colormatrix for pixels.\n * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning\n * outside the -1, 1 range.\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Array} matrix array of 20 numbers.\n * @default\n */\n declare matrix: ColorMatrixOwnProps['matrix'];\n\n /**\n * Lock the colormatrix on the color part, skipping alpha, mainly for non webgl scenario\n * to save some calculation\n * @type Boolean\n * @default true\n */\n declare colorsOnly: ColorMatrixOwnProps['colorsOnly'];\n\n static type = 'ColorMatrix';\n\n static defaults = colorMatrixDefaultValues;\n\n static uniformLocations = ['uColorMatrix', 'uConstants'];\n\n getFragmentSource(): string {\n return fragmentSource;\n }\n\n /**\n * Apply the ColorMatrix operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d(options: T2DPipelineState) {\n const imageData = options.imageData,\n data = imageData.data,\n m = this.matrix,\n colorsOnly = this.colorsOnly;\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n if (colorsOnly) {\n data[i] = r * m[0] + g * m[1] + b * m[2] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + m[9] * 255;\n data[i + 2] = r * m[10] + g * m[11] + b * m[12] + m[14] * 255;\n } else {\n const a = data[i + 3];\n data[i] = r * m[0] + g * m[1] + b * m[2] + a * m[3] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + a * m[8] + m[9] * 255;\n data[i + 2] =\n r * m[10] + g * m[11] + b * m[12] + a * m[13] + m[14] * 255;\n data[i + 3] =\n r * m[15] + g * m[16] + b * m[17] + a * m[18] + m[19] * 255;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const m = this.matrix,\n matrix = [\n m[0],\n m[1],\n m[2],\n m[3],\n m[5],\n m[6],\n m[7],\n m[8],\n m[10],\n m[11],\n m[12],\n m[13],\n m[15],\n m[16],\n m[17],\n m[18],\n ],\n constants = [m[4], m[9], m[14], m[19]];\n gl.uniformMatrix4fv(uniformLocations.uColorMatrix, false, matrix);\n gl.uniform4fv(uniformLocations.uConstants, constants);\n }\n\n toObject() {\n return {\n ...super.toObject(),\n matrix: [...this.matrix] as TMatColorMatrix,\n };\n }\n}\n\nclassRegistry.setClass(ColorMatrix);\n","import { ColorMatrix } from './ColorMatrix';\nimport { classRegistry } from '../ClassRegistry';\nimport type { TMatColorMatrix } from './typedefs';\n\ntype FixedFiltersOwnProps = {\n colorsOnly: boolean;\n};\n\nexport function createColorMatrixFilter(key: string, matrix: TMatColorMatrix) {\n const newClass = class extends ColorMatrix {\n static type = key;\n\n static defaults = {\n colorsOnly: false,\n matrix,\n };\n\n //@ts-expect-error TS wants matrix to be exported.\n toObject(): { type: string } & FixedFiltersOwnProps {\n return { type: this.type, colorsOnly: this.colorsOnly };\n }\n };\n classRegistry.setClass(newClass, key);\n return newClass as typeof ColorMatrix;\n}\n\nexport const Brownie = createColorMatrixFilter(\n 'Brownie',\n [\n 0.5997, 0.34553, -0.27082, 0, 0.186, -0.0377, 0.86095, 0.15059, 0, -0.1449,\n 0.24113, -0.07441, 0.44972, 0, -0.02965, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Vintage = createColorMatrixFilter(\n 'Vintage',\n [\n 0.62793, 0.32021, -0.03965, 0, 0.03784, 0.02578, 0.64411, 0.03259, 0,\n 0.02926, 0.0466, -0.08512, 0.52416, 0, 0.02023, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Kodachrome = createColorMatrixFilter(\n 'Kodachrome',\n [\n 1.12855, -0.39673, -0.03992, 0, 0.24991, -0.16404, 1.08352, -0.05498, 0,\n 0.09698, -0.16786, -0.56034, 1.60148, 0, 0.13972, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Technicolor = createColorMatrixFilter(\n 'Technicolor',\n [\n 1.91252, -0.85453, -0.09155, 0, 0.04624, -0.30878, 1.76589, -0.10601, 0,\n -0.27589, -0.2311, -0.75018, 1.84759, 0, 0.12137, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Polaroid = createColorMatrixFilter(\n 'Polaroid',\n [\n 1.438, -0.062, -0.062, 0, 0, -0.122, 1.378, -0.122, 0, 0, -0.016, -0.016,\n 1.483, 0, 0, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const Sepia = createColorMatrixFilter(\n 'Sepia',\n [\n 0.393, 0.769, 0.189, 0, 0, 0.349, 0.686, 0.168, 0, 0, 0.272, 0.534, 0.131,\n 0, 0, 0, 0, 0, 1, 0,\n ],\n);\n\nexport const BlackWhite = createColorMatrixFilter(\n 'BlackWhite',\n [\n 1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 0, 0, 0,\n 1, 0,\n ],\n);\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLPipelineState } from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport { classRegistry } from '../ClassRegistry';\n\ntype ComposedOwnProps = {\n subFilters: BaseFilter[];\n};\n\n/**\n * A container class that knows how to apply a sequence of filters to an input image.\n */\nexport class Composed extends BaseFilter<'Composed', ComposedOwnProps> {\n /**\n * A non sparse array of filters to apply\n */\n declare subFilters: ComposedOwnProps['subFilters'];\n\n static type = 'Composed';\n\n constructor(\n options: { subFilters?: BaseFilter[] } & Record<\n string,\n any\n > = {},\n ) {\n super(options);\n this.subFilters = options.subFilters || [];\n }\n\n /**\n * Apply this container's filters to the input image provided.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be applied.\n */\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n options.passes += this.subFilters.length - 1;\n }\n this.subFilters.forEach((filter) => {\n filter.applyTo(options);\n });\n }\n\n /**\n * Serialize this filter into JSON.\n * @returns {Object} A JSON representation of this filter.\n */\n //@ts-expect-error TS doesn't like this toObject\n toObject(): {\n type: 'Composed';\n subFilters: ReturnType['toObject']>[];\n } {\n return {\n type: this.type,\n subFilters: this.subFilters.map((filter) => filter.toObject()),\n };\n }\n\n isNeutralState() {\n return !this.subFilters.some((filter) => !filter.isNeutralState());\n }\n\n /**\n * Deserialize a JSON definition of a ComposedFilter into a concrete instance.\n * @static\n * @param {oject} object Object to create an instance from\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] handle aborting `BlendImage` filter loading, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n * @returns {Promise}\n */\n static fromObject(\n object: Record,\n options: { signal: AbortSignal },\n ): Promise {\n return Promise.all(\n ((object.subFilters || []) as BaseFilter[]).map(\n (filter) =>\n classRegistry\n .getClass(filter.type)\n .fromObject(filter, options),\n ),\n ).then(\n (enlivedFilters) => new this({ subFilters: enlivedFilters }) as Composed,\n );\n }\n}\n\nclassRegistry.setClass(Composed);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uContrast;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\n color.rgb = contrastF * (color.rgb - 0.5) + 0.5;\n gl_FragColor = color;\n }`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/constrast';\n\ntype ContrastOwnProps = {\n contrast: number;\n};\n\nexport const contrastDefaultValues: ContrastOwnProps = {\n contrast: 0,\n};\n\n/**\n * Contrast filter class\n * @example\n * const filter = new Contrast({\n * contrast: 0.25\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Contrast extends BaseFilter<'Contrast', ContrastOwnProps> {\n /**\n * contrast value, range from -1 to 1.\n * @param {Number} contrast\n * @default 0\n */\n declare contrast: ContrastOwnProps['contrast'];\n\n static type = 'Contrast';\n\n static defaults = contrastDefaultValues;\n\n static uniformLocations = ['uContrast'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n isNeutralState() {\n return this.contrast === 0;\n }\n\n /**\n * Apply the Contrast operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const contrast = Math.floor(this.contrast * 255),\n contrastF = (259 * (contrast + 255)) / (255 * (259 - contrast));\n\n for (let i = 0; i < data.length; i += 4) {\n data[i] = contrastF * (data[i] - 128) + 128;\n data[i + 1] = contrastF * (data[i + 1] - 128) + 128;\n data[i + 2] = contrastF * (data[i + 2] - 128) + 128;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uContrast, this.contrast);\n }\n}\n\nclassRegistry.setClass(Contrast);\n","export const fragmentSource = {\n Convolute_3_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[9];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 3.0; h+=1.0) {\n for (float w = 0.0; w < 3.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_3_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[9];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 3.0; h+=1.0) {\n for (float w = 0.0; w < 3.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n Convolute_5_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[25];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 5.0; h+=1.0) {\n for (float w = 0.0; w < 5.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_5_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[25];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 5.0; h+=1.0) {\n for (float w = 0.0; w < 5.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n Convolute_7_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[49];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 7.0; h+=1.0) {\n for (float w = 0.0; w < 7.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_7_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[49];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 7.0; h+=1.0) {\n for (float w = 0.0; w < 7.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n Convolute_9_1: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[81];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 0);\n for (float h = 0.0; h < 9.0; h+=1.0) {\n for (float w = 0.0; w < 9.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\n color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\n }\n }\n gl_FragColor = color;\n }\n `,\n Convolute_9_0: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uMatrix[81];\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = vec4(0, 0, 0, 1);\n for (float h = 0.0; h < 9.0; h+=1.0) {\n for (float w = 0.0; w < 9.0; w+=1.0) {\n vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\n color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\n }\n }\n float alpha = texture2D(uTexture, vTexCoord).a;\n gl_FragColor = color;\n gl_FragColor.a = alpha;\n }\n `,\n};\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/convolute';\n\nexport type ConvoluteOwnProps = {\n opaque: boolean;\n matrix: number[];\n};\n\nexport const convoluteDefaultValues: ConvoluteOwnProps = {\n opaque: false,\n matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0],\n};\n\n/**\n * Adapted from html5rocks article\n * @example Sharpen filter\n * const filter = new Convolute({\n * matrix: [ 0, -1, 0,\n * -1, 5, -1,\n * 0, -1, 0 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Blur filter\n * const filter = new Convolute({\n * matrix: [ 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter\n * const filter = new Convolute({\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter with opaqueness\n * const filter = new Convolute({\n * opaque: true,\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class Convolute extends BaseFilter<'Convolute', ConvoluteOwnProps> {\n /*\n * Opaque value (true/false)\n */\n declare opaque: ConvoluteOwnProps['opaque'];\n\n /*\n * matrix for the filter, max 9x9\n */\n declare matrix: ConvoluteOwnProps['matrix'];\n\n static type = 'Convolute';\n\n static defaults = convoluteDefaultValues;\n\n static uniformLocations = ['uMatrix', 'uOpaque', 'uHalfSize', 'uSize'];\n\n getCacheKey() {\n return `${this.type}_${Math.sqrt(this.matrix.length)}_${\n this.opaque ? 1 : 0\n }` as keyof typeof fragmentSource;\n }\n\n getFragmentSource() {\n return fragmentSource[this.getCacheKey()];\n }\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d(options: T2DPipelineState) {\n const imageData = options.imageData,\n data = imageData.data,\n weights = this.matrix,\n side = Math.round(Math.sqrt(weights.length)),\n halfSide = Math.floor(side / 2),\n sw = imageData.width,\n sh = imageData.height,\n output = options.ctx.createImageData(sw, sh),\n dst = output.data,\n // go through the destination image pixels\n alphaFac = this.opaque ? 1 : 0;\n let r, g, b, a, dstOff, scx, scy, srcOff, wt, x, y, cx, cy;\n\n for (y = 0; y < sh; y++) {\n for (x = 0; x < sw; x++) {\n dstOff = (y * sw + x) * 4;\n // calculate the weighed sum of the source image pixels that\n // fall under the convolution matrix\n r = 0;\n g = 0;\n b = 0;\n a = 0;\n\n for (cy = 0; cy < side; cy++) {\n for (cx = 0; cx < side; cx++) {\n scy = y + cy - halfSide;\n scx = x + cx - halfSide;\n\n // eslint-disable-next-line max-depth\n if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {\n continue;\n }\n\n srcOff = (scy * sw + scx) * 4;\n wt = weights[cy * side + cx];\n\n r += data[srcOff] * wt;\n g += data[srcOff + 1] * wt;\n b += data[srcOff + 2] * wt;\n // eslint-disable-next-line max-depth\n if (!alphaFac) {\n a += data[srcOff + 3] * wt;\n }\n }\n }\n dst[dstOff] = r;\n dst[dstOff + 1] = g;\n dst[dstOff + 2] = b;\n if (!alphaFac) {\n dst[dstOff + 3] = a;\n } else {\n dst[dstOff + 3] = data[dstOff + 3];\n }\n }\n }\n options.imageData = output;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1fv(uniformLocations.uMatrix, this.matrix);\n }\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject() {\n return {\n ...super.toObject(),\n opaque: this.opaque,\n matrix: [...this.matrix],\n };\n }\n}\n\nclassRegistry.setClass(Convolute);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec3 uGamma;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n vec3 correction = (1.0 / uGamma);\n color.r = pow(color.r, correction.r);\n color.g = pow(color.g, correction.g);\n color.b = pow(color.b, correction.b);\n gl_FragColor = color;\n gl_FragColor.rgb *= color.a;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/gamma';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\n\nconst GAMMA = 'Gamma' as const;\n\nexport type GammaInput = [number, number, number];\n\nexport type GammaOwnProps = {\n gamma: GammaInput;\n};\n\nexport const gammaDefaultValues: GammaOwnProps = {\n gamma: [1, 1, 1],\n};\n\n/**\n * Gamma filter class\n * @example\n * const filter = new Gamma({\n * gamma: [1, 0.5, 2.1]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Gamma extends BaseFilter {\n /**\n * Gamma array value, from 0.01 to 2.2.\n * @param {Array} gamma\n * @default\n */\n declare gamma: GammaOwnProps['gamma'];\n declare rgbValues?: {\n r: Uint8Array;\n g: Uint8Array;\n b: Uint8Array;\n };\n\n static type = GAMMA;\n\n static defaults = gammaDefaultValues;\n\n static uniformLocations = ['uGamma'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n constructor(options: { gamma?: GammaInput } = {}) {\n super(options);\n this.gamma =\n options.gamma ||\n ((\n this.constructor as typeof Gamma\n ).defaults.gamma.concat() as GammaInput);\n }\n\n /**\n * Apply the Gamma operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const gamma = this.gamma,\n rInv = 1 / gamma[0],\n gInv = 1 / gamma[1],\n bInv = 1 / gamma[2];\n\n if (!this.rgbValues) {\n this.rgbValues = {\n r: new Uint8Array(256),\n g: new Uint8Array(256),\n b: new Uint8Array(256),\n };\n }\n\n // This is an optimization - pre-compute a look-up table for each color channel\n // instead of performing these pow calls for each pixel in the image.\n const rgb = this.rgbValues;\n for (let i = 0; i < 256; i++) {\n rgb.r[i] = Math.pow(i / 255, rInv) * 255;\n rgb.g[i] = Math.pow(i / 255, gInv) * 255;\n rgb.b[i] = Math.pow(i / 255, bInv) * 255;\n }\n for (let i = 0; i < data.length; i += 4) {\n data[i] = rgb.r[data[i]];\n data[i + 1] = rgb.g[data[i + 1]];\n data[i + 2] = rgb.b[data[i + 2]];\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform3fv(uniformLocations.uGamma, this.gamma);\n }\n\n isNeutralState() {\n const { gamma } = this;\n return gamma[0] === 1 && gamma[1] === 1 && gamma[2] === 1;\n }\n\n toObject(): { type: typeof GAMMA; gamma: GammaInput } {\n return {\n type: GAMMA,\n gamma: this.gamma.concat() as GammaInput,\n };\n }\n}\n\nclassRegistry.setClass(Gamma);\n","import type { TGrayscaleMode } from '../Grayscale';\n\nexport const fragmentSource: Record = {\n average: `\n precision highp float;\n uniform sampler2D uTexture;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float average = (color.r + color.b + color.g) / 3.0;\n gl_FragColor = vec4(average, average, average, color.a);\n }\n `,\n lightness: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform int uMode;\n varying vec2 vTexCoord;\n void main() {\n vec4 col = texture2D(uTexture, vTexCoord);\n float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\n gl_FragColor = vec4(average, average, average, col.a);\n }\n `,\n luminosity: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform int uMode;\n varying vec2 vTexCoord;\n void main() {\n vec4 col = texture2D(uTexture, vTexCoord);\n float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\n gl_FragColor = vec4(average, average, average, col.a);\n }\n `,\n};\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/grayscale';\n\nexport type TGrayscaleMode = 'average' | 'lightness' | 'luminosity';\n\ntype GrayscaleOwnProps = {\n mode: TGrayscaleMode;\n};\n\nexport const grayscaleDefaultValues: GrayscaleOwnProps = {\n mode: 'average',\n};\n\n/**\n * Grayscale image filter class\n * @example\n * const filter = new Grayscale();\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Grayscale extends BaseFilter<'Grayscale', GrayscaleOwnProps> {\n declare mode: TGrayscaleMode;\n\n static type = 'Grayscale';\n\n static defaults = grayscaleDefaultValues;\n\n static uniformLocations = ['uMode'];\n\n /**\n * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n for (let i = 0, value: number; i < data.length; i += 4) {\n switch (this.mode) {\n case 'average':\n value = (data[i] + data[i + 1] + data[i + 2]) / 3;\n break;\n case 'lightness':\n value =\n (Math.min(data[i], data[i + 1], data[i + 2]) +\n Math.max(data[i], data[i + 1], data[i + 2])) /\n 2;\n break;\n case 'luminosity':\n value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];\n break;\n }\n\n data[i] = value;\n data[i + 1] = value;\n data[i + 2] = value;\n }\n }\n\n getCacheKey() {\n return `${this.type}_${this.mode}`;\n }\n\n getFragmentSource() {\n return fragmentSource[this.mode];\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const mode = 1;\n gl.uniform1i(uniformLocations.uMode, mode);\n }\n\n /**\n * Grayscale filter isNeutralState implementation\n * The filter is never neutral\n * on the image\n **/\n isNeutralState() {\n return false;\n }\n}\n\nclassRegistry.setClass(Grayscale);\n","import { cos } from '../util/misc/cos';\nimport { sin } from '../util/misc/sin';\nimport { ColorMatrix } from './ColorMatrix';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\n\nexport type HueRotationOwnProps = {\n rotation: number;\n};\n\nexport const hueRotationDefaultValues: HueRotationOwnProps = {\n rotation: 0,\n};\n\n/**\n * HueRotation filter class\n * @example\n * const filter = new HueRotation({\n * rotation: -0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class HueRotation extends ColorMatrix<\n 'HueRotation',\n HueRotationOwnProps\n> {\n /**\n * HueRotation value, from -1 to 1.\n */\n declare rotation: HueRotationOwnProps['rotation'];\n\n static type = 'HueRotation';\n\n static defaults = hueRotationDefaultValues;\n\n calculateMatrix() {\n const rad = this.rotation * Math.PI,\n cosine = cos(rad),\n sine = sin(rad),\n aThird = 1 / 3,\n aThirdSqtSin = Math.sqrt(aThird) * sine,\n OneMinusCos = 1 - cosine;\n this.matrix = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n this.matrix[0] = cosine + OneMinusCos / 3;\n this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[6] = cosine + aThird * OneMinusCos;\n this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[12] = cosine + aThird * OneMinusCos;\n }\n\n isNeutralState() {\n return this.rotation === 0;\n }\n\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n this.calculateMatrix();\n super.applyTo(options);\n }\n\n //@ts-expect-error TS and classes with different methods\n toObject(): { type: 'HueRotation'; rotation: number } {\n return {\n type: this.type,\n rotation: this.rotation,\n };\n }\n}\n\nclassRegistry.setClass(HueRotation);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform int uInvert;\n uniform int uAlpha;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n if (uInvert == 1) {\n if (uAlpha == 1) {\n gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,1.0 -color.a);\n } else {\n gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\n }\n } else {\n gl_FragColor = color;\n }\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/invert';\n\nexport type InvertOwnProps = {\n alpha: boolean;\n invert: boolean;\n};\n\nexport const invertDefaultValues: InvertOwnProps = {\n alpha: false,\n invert: true,\n};\n\n/**\n * @example\n * const filter = new Invert();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\nexport class Invert extends BaseFilter<'Invert', InvertOwnProps> {\n /**\n * Invert also alpha.\n * @param {Boolean} alpha\n * @default\n **/\n declare alpha: InvertOwnProps['alpha'];\n\n /**\n * Filter invert. if false, does nothing\n * @param {Boolean} invert\n * @default\n */\n declare invert: InvertOwnProps['invert'];\n\n static type = 'Invert';\n\n static defaults = invertDefaultValues;\n\n static uniformLocations = ['uInvert', 'uAlpha'];\n\n /**\n * Apply the Invert operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n for (let i = 0; i < data.length; i += 4) {\n data[i] = 255 - data[i];\n data[i + 1] = 255 - data[i + 1];\n data[i + 2] = 255 - data[i + 2];\n\n if (this.alpha) {\n data[i + 3] = 255 - data[i + 3];\n }\n }\n }\n\n protected getFragmentSource(): string {\n return fragmentSource;\n }\n\n /**\n * Invert filter isNeutralState implementation\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * @param {Object} options\n **/\n isNeutralState() {\n return !this.invert;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1i(uniformLocations.uInvert, Number(this.invert));\n gl.uniform1i(uniformLocations.uAlpha, Number(this.alpha));\n }\n}\n\nclassRegistry.setClass(Invert);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uStepH;\n uniform float uNoise;\n uniform float uSeed;\n varying vec2 vTexCoord;\n float rand(vec2 co, float seed, float vScale) {\n return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\n }\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/noise';\n\nexport type NoiseOwnProps = {\n noise: number;\n};\n\nexport const noiseDefaultValues: NoiseOwnProps = {\n noise: 0,\n};\n\n/**\n * Noise filter class\n * @example\n * const filter = new Noise({\n * noise: 700\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class Noise extends BaseFilter<'Noise', NoiseOwnProps> {\n /**\n * Noise value, from\n * @param {Number} noise\n * @default\n */\n declare noise: NoiseOwnProps['noise'];\n\n static type = 'Noise';\n\n static defaults = noiseDefaultValues;\n\n static uniformLocations = ['uNoise', 'uSeed'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const noise = this.noise;\n for (let i = 0; i < data.length; i += 4) {\n const rand = (0.5 - Math.random()) * noise;\n data[i] += rand;\n data[i + 1] += rand;\n data[i + 2] += rand;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uNoise, this.noise / 255);\n gl.uniform1f(uniformLocations.uSeed, Math.random());\n }\n\n isNeutralState() {\n return this.noise === 0;\n }\n}\n\nclassRegistry.setClass(Noise);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uBlocksize;\n uniform float uStepW;\n uniform float uStepH;\n varying vec2 vTexCoord;\n void main() {\n float blockW = uBlocksize * uStepW;\n float blockH = uBlocksize * uStepH;\n int posX = int(vTexCoord.x / blockW);\n int posY = int(vTexCoord.y / blockH);\n float fposX = float(posX);\n float fposY = float(posY);\n vec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\n vec4 color = texture2D(uTexture, squareCoords);\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/pixelate';\n\nexport type PixelateOwnProps = {\n blocksize: number;\n};\n\nexport const pixelateDefaultValues: PixelateOwnProps = {\n blocksize: 4,\n};\n\n/**\n * Pixelate filter class\n * @example\n * const filter = new Pixelate({\n * blocksize: 8\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Pixelate extends BaseFilter<'Pixelate', PixelateOwnProps> {\n declare blocksize: PixelateOwnProps['blocksize'];\n\n static type = 'Pixelate';\n\n static defaults = pixelateDefaultValues;\n\n static uniformLocations = ['uBlocksize'];\n\n /**\n * Apply the Pixelate operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data, width, height } }: T2DPipelineState) {\n for (let i = 0; i < height; i += this.blocksize) {\n for (let j = 0; j < width; j += this.blocksize) {\n const index = i * 4 * width + j * 4;\n const r = data[index];\n const g = data[index + 1];\n const b = data[index + 2];\n const a = data[index + 3];\n\n for (let _i = i; _i < Math.min(i + this.blocksize, height); _i++) {\n for (let _j = j; _j < Math.min(j + this.blocksize, width); _j++) {\n const index = _i * 4 * width + _j * 4;\n data[index] = r;\n data[index + 1] = g;\n data[index + 2] = b;\n data[index + 3] = a;\n }\n }\n }\n }\n }\n\n /**\n * Indicate when the filter is not gonna apply changes to the image\n **/\n isNeutralState() {\n return this.blocksize === 1;\n }\n\n protected getFragmentSource(): string {\n return fragmentSource;\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uBlocksize, this.blocksize);\n }\n}\n\nclassRegistry.setClass(Pixelate);\n","export const fragmentShader = `\nprecision highp float;\nuniform sampler2D uTexture;\nuniform vec4 uLow;\nuniform vec4 uHigh;\nvarying vec2 vTexCoord;\nvoid main() {\n gl_FragColor = texture2D(uTexture, vTexCoord);\n if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\n gl_FragColor.a = 0.0;\n }\n}\n`;\n","import { classRegistry } from '../ClassRegistry';\nimport { Color } from '../color/Color';\nimport { BaseFilter } from './BaseFilter';\nimport { fragmentShader } from './shaders/removeColor';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\n\nexport type RemoveColorOwnProps = {\n color: string;\n distance: number;\n useAlpha: boolean;\n};\n\nexport const removeColorDefaultValues: RemoveColorOwnProps = {\n color: '#FFFFFF',\n distance: 0.02,\n useAlpha: false,\n};\n\n/**\n * Remove white filter class\n * @example\n * const filter = new RemoveColor({\n * threshold: 0.2,\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class RemoveColor extends BaseFilter<\n 'RemoveColor',\n RemoveColorOwnProps\n> {\n /**\n * Color to remove, in any format understood by {@link Color}.\n * @param {String} type\n * @default\n */\n declare color: RemoveColorOwnProps['color'];\n\n /**\n * distance to actual color, as value up or down from each r,g,b\n * between 0 and 1\n **/\n declare distance: RemoveColorOwnProps['distance'];\n\n /**\n * For color to remove inside distance, use alpha channel for a smoother deletion\n * NOT IMPLEMENTED YET\n **/\n declare useAlpha: RemoveColorOwnProps['useAlpha'];\n\n static type = 'RemoveColor';\n\n static defaults = removeColorDefaultValues;\n\n static uniformLocations = ['uLow', 'uHigh'];\n\n getFragmentSource() {\n return fragmentShader;\n }\n\n /**\n * Applies filter to canvas element\n * @param {Object} canvasEl Canvas element to apply filter to\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const distance = this.distance * 255,\n source = new Color(this.color).getSource(),\n lowC = [source[0] - distance, source[1] - distance, source[2] - distance],\n highC = [\n source[0] + distance,\n source[1] + distance,\n source[2] + distance,\n ];\n\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i];\n const g = data[i + 1];\n const b = data[i + 2];\n\n if (\n r > lowC[0] &&\n g > lowC[1] &&\n b > lowC[2] &&\n r < highC[0] &&\n g < highC[1] &&\n b < highC[2]\n ) {\n data[i + 3] = 0;\n }\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n const source = new Color(this.color).getSource(),\n distance = this.distance,\n lowC = [\n 0 + source[0] / 255 - distance,\n 0 + source[1] / 255 - distance,\n 0 + source[2] / 255 - distance,\n 1,\n ],\n highC = [\n source[0] / 255 + distance,\n source[1] / 255 + distance,\n source[2] / 255 + distance,\n 1,\n ];\n gl.uniform4fv(uniformLocations.uLow, lowC);\n gl.uniform4fv(uniformLocations.uHigh, highC);\n }\n}\n\nclassRegistry.setClass(RemoveColor);\n","import { BaseFilter } from './BaseFilter';\nimport type {\n T2DPipelineState,\n TWebGLPipelineState,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport { classRegistry } from '../ClassRegistry';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type { XY } from '../Point';\n\nexport type TResizeType = 'bilinear' | 'hermite' | 'sliceHack' | 'lanczos';\n\nexport type ResizeOwnProps = {\n resizeType: TResizeType;\n scaleX: number;\n scaleY: number;\n lanczosLobes: number;\n};\n\nexport const resizeDefaultValues: ResizeOwnProps = {\n resizeType: 'hermite',\n scaleX: 1,\n scaleY: 1,\n lanczosLobes: 3,\n};\n\ntype ResizeDuring2DResize = Resize & {\n rcpScaleX: number;\n rcpScaleY: number;\n};\n\ntype ResizeDuringWEBGLResize = Resize & {\n rcpScaleX: number;\n rcpScaleY: number;\n horizontal: boolean;\n width: number;\n height: number;\n taps: number[];\n tempScale: number;\n dH: number;\n dW: number;\n};\n\n/**\n * Resize image filter class\n * @example\n * const filter = new Resize();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\nexport class Resize extends BaseFilter<'Resize', ResizeOwnProps> {\n /**\n * Resize type\n * for webgl resizeType is just lanczos, for canvas2d can be:\n * bilinear, hermite, sliceHack, lanczos.\n * @default\n */\n declare resizeType: ResizeOwnProps['resizeType'];\n\n /**\n * Scale factor for resizing, x axis\n * @param {Number} scaleX\n * @default\n */\n declare scaleX: ResizeOwnProps['scaleX'];\n\n /**\n * Scale factor for resizing, y axis\n * @param {Number} scaleY\n * @default\n */\n declare scaleY: ResizeOwnProps['scaleY'];\n\n /**\n * LanczosLobes parameter for lanczos filter, valid for resizeType lanczos\n * @param {Number} lanczosLobes\n * @default\n */\n declare lanczosLobes: ResizeOwnProps['lanczosLobes'];\n\n static type = 'Resize';\n\n static defaults = resizeDefaultValues;\n\n static uniformLocations = ['uDelta', 'uTaps'];\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n this: ResizeDuringWEBGLResize,\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform2fv(\n uniformLocations.uDelta,\n this.horizontal ? [1 / this.width, 0] : [0, 1 / this.height],\n );\n gl.uniform1fv(uniformLocations.uTaps, this.taps);\n }\n\n getFilterWindow(this: ResizeDuringWEBGLResize) {\n const scale = this.tempScale;\n return Math.ceil(this.lanczosLobes / scale);\n }\n\n getCacheKey(this: ResizeDuringWEBGLResize): string {\n const filterWindow = this.getFilterWindow();\n return `${this.type}_${filterWindow}`;\n }\n\n getFragmentSource(this: ResizeDuringWEBGLResize): string {\n const filterWindow = this.getFilterWindow();\n return this.generateShader(filterWindow);\n }\n\n getTaps(this: ResizeDuringWEBGLResize) {\n const lobeFunction = this.lanczosCreate(this.lanczosLobes),\n scale = this.tempScale,\n filterWindow = this.getFilterWindow(),\n taps = new Array(filterWindow);\n for (let i = 1; i <= filterWindow; i++) {\n taps[i - 1] = lobeFunction(i * scale);\n }\n return taps;\n }\n\n /**\n * Generate vertex and shader sources from the necessary steps numbers\n * @param {Number} filterWindow\n */\n generateShader(filterWindow: number) {\n const offsets = new Array(filterWindow);\n for (let i = 1; i <= filterWindow; i++) {\n offsets[i - 1] = `${i}.0 * uDelta`;\n }\n return `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec2 uDelta;\n varying vec2 vTexCoord;\n uniform float uTaps[${filterWindow}];\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float sum = 1.0;\n ${offsets\n .map(\n (offset, i) => `\n color += texture2D(uTexture, vTexCoord + ${offset}) * uTaps[${i}] + texture2D(uTexture, vTexCoord - ${offset}) * uTaps[${i}];\n sum += 2.0 * uTaps[${i}];\n `,\n )\n .join('\\n')}\n gl_FragColor = color / sum;\n }\n `;\n }\n\n applyToForWebgl(this: ResizeDuringWEBGLResize, options: TWebGLPipelineState) {\n options.passes++;\n this.width = options.sourceWidth;\n this.horizontal = true;\n this.dW = Math.round(this.width * this.scaleX);\n this.dH = options.sourceHeight;\n this.tempScale = this.dW / this.width;\n this.taps = this.getTaps();\n options.destinationWidth = this.dW;\n super.applyTo(options);\n options.sourceWidth = options.destinationWidth;\n\n this.height = options.sourceHeight;\n this.horizontal = false;\n this.dH = Math.round(this.height * this.scaleY);\n this.tempScale = this.dH / this.height;\n this.taps = this.getTaps();\n options.destinationHeight = this.dH;\n super.applyTo(options);\n options.sourceHeight = options.destinationHeight;\n }\n\n /**\n * Apply the resize filter to the image\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n (this as unknown as ResizeDuringWEBGLResize).applyToForWebgl(options);\n } else {\n (this as unknown as ResizeDuring2DResize).applyTo2d(options);\n }\n }\n\n isNeutralState() {\n return this.scaleX === 1 && this.scaleY === 1;\n }\n\n lanczosCreate(lobes: number) {\n return (x: number) => {\n if (x >= lobes || x <= -lobes) {\n return 0.0;\n }\n if (x < 1.1920929e-7 && x > -1.1920929e-7) {\n return 1.0;\n }\n x *= Math.PI;\n const xx = x / lobes;\n return ((Math.sin(x) / x) * Math.sin(xx)) / xx;\n };\n }\n\n applyTo2d(this: ResizeDuring2DResize, options: T2DPipelineState) {\n const imageData = options.imageData,\n scaleX = this.scaleX,\n scaleY = this.scaleY;\n\n this.rcpScaleX = 1 / scaleX;\n this.rcpScaleY = 1 / scaleY;\n\n const oW = imageData.width;\n const oH = imageData.height;\n const dW = Math.round(oW * scaleX);\n const dH = Math.round(oH * scaleY);\n let newData: ImageData;\n\n if (this.resizeType === 'sliceHack') {\n newData = this.sliceByTwo(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'hermite') {\n newData = this.hermiteFastResize(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'bilinear') {\n newData = this.bilinearFiltering(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'lanczos') {\n newData = this.lanczosResize(options, oW, oH, dW, dH);\n } else {\n // this should never trigger, is here just for safety net.\n newData = new ImageData(dW, dH);\n }\n options.imageData = newData;\n }\n\n /**\n * Filter sliceByTwo\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n sliceByTwo(\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ) {\n const imageData = options.imageData;\n const mult = 0.5;\n let doneW = false;\n let doneH = false;\n let stepW = oW * mult;\n let stepH = oH * mult;\n const resources = options.filterBackend.resources;\n let sX = 0;\n let sY = 0;\n const dX = oW;\n let dY = 0;\n if (!resources.sliceByTwo) {\n resources.sliceByTwo = createCanvasElement();\n }\n const tmpCanvas = resources.sliceByTwo;\n if (tmpCanvas.width < oW * 1.5 || tmpCanvas.height < oH) {\n tmpCanvas.width = oW * 1.5;\n tmpCanvas.height = oH;\n }\n const ctx = tmpCanvas.getContext('2d')!;\n ctx.clearRect(0, 0, oW * 1.5, oH);\n ctx.putImageData(imageData, 0, 0);\n\n dW = Math.floor(dW);\n dH = Math.floor(dH);\n\n while (!doneW || !doneH) {\n oW = stepW;\n oH = stepH;\n if (dW < Math.floor(stepW * mult)) {\n stepW = Math.floor(stepW * mult);\n } else {\n stepW = dW;\n doneW = true;\n }\n if (dH < Math.floor(stepH * mult)) {\n stepH = Math.floor(stepH * mult);\n } else {\n stepH = dH;\n doneH = true;\n }\n ctx.drawImage(tmpCanvas, sX, sY, oW, oH, dX, dY, stepW, stepH);\n sX = dX;\n sY = dY;\n dY += stepH;\n }\n return ctx.getImageData(sX, sY, dW, dH);\n }\n\n /**\n * Filter lanczosResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n lanczosResize(\n this: ResizeDuring2DResize,\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ): ImageData {\n function process(u: number): ImageData {\n let v, i, weight, idx, a, red, green, blue, alpha, fX, fY;\n center.x = (u + 0.5) * ratioX;\n icenter.x = Math.floor(center.x);\n for (v = 0; v < dH; v++) {\n center.y = (v + 0.5) * ratioY;\n icenter.y = Math.floor(center.y);\n a = 0;\n red = 0;\n green = 0;\n blue = 0;\n alpha = 0;\n for (i = icenter.x - range2X; i <= icenter.x + range2X; i++) {\n if (i < 0 || i >= oW) {\n continue;\n }\n fX = Math.floor(1000 * Math.abs(i - center.x));\n if (!cacheLanc[fX]) {\n cacheLanc[fX] = {};\n }\n for (let j = icenter.y - range2Y; j <= icenter.y + range2Y; j++) {\n if (j < 0 || j >= oH) {\n continue;\n }\n fY = Math.floor(1000 * Math.abs(j - center.y));\n if (!cacheLanc[fX][fY]) {\n cacheLanc[fX][fY] = lanczos(\n Math.sqrt(\n Math.pow(fX * rcpRatioX, 2) + Math.pow(fY * rcpRatioY, 2),\n ) / 1000,\n );\n }\n weight = cacheLanc[fX][fY];\n if (weight > 0) {\n idx = (j * oW + i) * 4;\n a += weight;\n red += weight * srcData[idx];\n green += weight * srcData[idx + 1];\n blue += weight * srcData[idx + 2];\n alpha += weight * srcData[idx + 3];\n }\n }\n }\n idx = (v * dW + u) * 4;\n destData[idx] = red / a;\n destData[idx + 1] = green / a;\n destData[idx + 2] = blue / a;\n destData[idx + 3] = alpha / a;\n }\n\n if (++u < dW) {\n return process(u);\n } else {\n return destImg;\n }\n }\n\n const srcData = options.imageData.data,\n destImg = options.ctx.createImageData(dW, dH),\n destData = destImg.data,\n lanczos = this.lanczosCreate(this.lanczosLobes),\n ratioX = this.rcpScaleX,\n ratioY = this.rcpScaleY,\n rcpRatioX = 2 / this.rcpScaleX,\n rcpRatioY = 2 / this.rcpScaleY,\n range2X = Math.ceil((ratioX * this.lanczosLobes) / 2),\n range2Y = Math.ceil((ratioY * this.lanczosLobes) / 2),\n cacheLanc: Record> = {},\n center: XY = { x: 0, y: 0 },\n icenter: XY = { x: 0, y: 0 };\n\n return process(0);\n }\n\n /**\n * bilinearFiltering\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n bilinearFiltering(\n this: ResizeDuring2DResize,\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ) {\n let a;\n let b;\n let c;\n let d;\n let x;\n let y;\n let i;\n let j;\n let xDiff;\n let yDiff;\n let chnl;\n let color;\n let offset = 0;\n let origPix;\n const ratioX = this.rcpScaleX;\n const ratioY = this.rcpScaleY;\n const w4 = 4 * (oW - 1);\n const img = options.imageData;\n const pixels = img.data;\n const destImage = options.ctx.createImageData(dW, dH);\n const destPixels = destImage.data;\n for (i = 0; i < dH; i++) {\n for (j = 0; j < dW; j++) {\n x = Math.floor(ratioX * j);\n y = Math.floor(ratioY * i);\n xDiff = ratioX * j - x;\n yDiff = ratioY * i - y;\n origPix = 4 * (y * oW + x);\n\n for (chnl = 0; chnl < 4; chnl++) {\n a = pixels[origPix + chnl];\n b = pixels[origPix + 4 + chnl];\n c = pixels[origPix + w4 + chnl];\n d = pixels[origPix + w4 + 4 + chnl];\n color =\n a * (1 - xDiff) * (1 - yDiff) +\n b * xDiff * (1 - yDiff) +\n c * yDiff * (1 - xDiff) +\n d * xDiff * yDiff;\n destPixels[offset++] = color;\n }\n }\n }\n return destImage;\n }\n\n /**\n * hermiteFastResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n hermiteFastResize(\n this: ResizeDuring2DResize,\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ) {\n const ratioW = this.rcpScaleX,\n ratioH = this.rcpScaleY,\n ratioWHalf = Math.ceil(ratioW / 2),\n ratioHHalf = Math.ceil(ratioH / 2),\n img = options.imageData,\n data = img.data,\n img2 = options.ctx.createImageData(dW, dH),\n data2 = img2.data;\n for (let j = 0; j < dH; j++) {\n for (let i = 0; i < dW; i++) {\n const x2 = (i + j * dW) * 4;\n let weight = 0;\n let weights = 0;\n let weightsAlpha = 0;\n let gxR = 0;\n let gxG = 0;\n let gxB = 0;\n let gxA = 0;\n const centerY = (j + 0.5) * ratioH;\n for (let yy = Math.floor(j * ratioH); yy < (j + 1) * ratioH; yy++) {\n const dy = Math.abs(centerY - (yy + 0.5)) / ratioHHalf,\n centerX = (i + 0.5) * ratioW,\n w0 = dy * dy;\n for (let xx = Math.floor(i * ratioW); xx < (i + 1) * ratioW; xx++) {\n let dx = Math.abs(centerX - (xx + 0.5)) / ratioWHalf;\n const w = Math.sqrt(w0 + dx * dx);\n /* eslint-disable max-depth */\n if (w > 1 && w < -1) {\n continue;\n }\n //hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n if (weight > 0) {\n dx = 4 * (xx + yy * oW);\n //alpha\n gxA += weight * data[dx + 3];\n weightsAlpha += weight;\n //colors\n if (data[dx + 3] < 255) {\n weight = (weight * data[dx + 3]) / 250;\n }\n gxR += weight * data[dx];\n gxG += weight * data[dx + 1];\n gxB += weight * data[dx + 2];\n weights += weight;\n }\n /* eslint-enable max-depth */\n }\n }\n data2[x2] = gxR / weights;\n data2[x2 + 1] = gxG / weights;\n data2[x2 + 2] = gxB / weights;\n data2[x2 + 3] = gxA / weightsAlpha;\n }\n }\n return img2;\n }\n}\n\nclassRegistry.setClass(Resize);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uSaturation;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float rgMax = max(color.r, color.g);\n float rgbMax = max(rgMax, color.b);\n color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\n color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\n color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/saturation';\n\nexport type SaturationOwnProps = {\n saturation: number;\n};\n\nexport const saturationDefaultValues: SaturationOwnProps = {\n saturation: 0,\n};\n\n/**\n * Saturate filter class\n * @example\n * const filter = new Saturation({\n * saturation: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Saturation extends BaseFilter<'Saturation', SaturationOwnProps> {\n /**\n * Saturation value, from -1 to 1.\n * Increases/decreases the color saturation.\n * A value of 0 has no effect.\n *\n * @param {Number} saturation\n * @default\n */\n declare saturation: SaturationOwnProps['saturation'];\n\n static type = 'Saturation';\n\n static defaults = saturationDefaultValues;\n\n static uniformLocations = ['uSaturation'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Saturation operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const adjust = -this.saturation;\n for (let i = 0; i < data.length; i += 4) {\n const max = Math.max(data[i], data[i + 1], data[i + 2]);\n data[i] += max !== data[i] ? (max - data[i]) * adjust : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * adjust : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * adjust : 0;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uSaturation, -this.saturation);\n }\n\n isNeutralState() {\n return this.saturation === 0;\n }\n}\n\nclassRegistry.setClass(Saturation);\n","export const fragmentSource = `\n precision highp float;\n uniform sampler2D uTexture;\n uniform float uVibrance;\n varying vec2 vTexCoord;\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float max = max(color.r, max(color.g, color.b));\n float avg = (color.r + color.g + color.b) / 3.0;\n float amt = (abs(max - avg) * 2.0) * uVibrance;\n color.r += max != color.r ? (max - color.r) * amt : 0.00;\n color.g += max != color.g ? (max - color.g) * amt : 0.00;\n color.b += max != color.b ? (max - color.b) * amt : 0.00;\n gl_FragColor = color;\n }\n`;\n","import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/vibrance';\n\nexport type VibranceOwnProps = {\n vibrance: number;\n};\n\nexport const vibranceDefaultValues: VibranceOwnProps = {\n vibrance: 0,\n};\n\n/**\n * Vibrance filter class\n * @example\n * const filter = new Vibrance({\n * vibrance: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Vibrance extends BaseFilter<'Vibrance', VibranceOwnProps> {\n /**\n * Vibrance value, from -1 to 1.\n * Increases/decreases the saturation of more muted colors with less effect on saturated colors.\n * A value of 0 has no effect.\n *\n * @param {Number} vibrance\n * @default\n */\n declare vibrance: VibranceOwnProps['vibrance'];\n\n static type = 'Vibrance';\n\n static defaults = vibranceDefaultValues;\n\n static uniformLocations = ['uVibrance'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Vibrance operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const adjust = -this.vibrance;\n for (let i = 0; i < data.length; i += 4) {\n const max = Math.max(data[i], data[i + 1], data[i + 2]);\n const avg = (data[i] + data[i + 1] + data[i + 2]) / 3;\n const amt = ((Math.abs(max - avg) * 2) / 255) * adjust;\n data[i] += max !== data[i] ? (max - data[i]) * amt : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * amt : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * amt : 0;\n }\n }\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {TWebGLUniformLocationMap} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform1f(uniformLocations.uVibrance, -this.vibrance);\n }\n\n isNeutralState() {\n return this.vibrance === 0;\n }\n}\n\nclassRegistry.setClass(Vibrance);\n","// First we set the env variable\n\nimport { setEnv } from './src/env';\nimport { getEnv, getNodeCanvas } from './src/env/node';\n\nsetEnv(getEnv());\n\n// After the env is set we can export everything and expose specific node functionality\n\nimport type { JpegConfig, PngConfig } from 'canvas';\nimport {\n Canvas as CanvasBase,\n StaticCanvas as StaticCanvasBase,\n} from './fabric';\nimport { FabricObject } from './src/shapes/Object/Object';\n\nFabricObject.ownDefaults.objectCaching = false;\n\nexport * from './fabric';\n\nexport class StaticCanvas extends StaticCanvasBase {\n getNodeCanvas() {\n return getNodeCanvas(this.getElement());\n }\n createPNGStream(opts?: PngConfig) {\n return this.getNodeCanvas().createPNGStream(opts);\n }\n createJPEGStream(opts?: JpegConfig) {\n return this.getNodeCanvas().createJPEGStream(opts);\n }\n}\n\n/**\n * **NOTICE**:\n * {@link Canvas} is designed for interactivity.\n * Therefore, using it in node has no benefit.\n * Use {@link StaticCanvas} instead.\n */\nexport class Canvas extends CanvasBase {\n getNodeCanvas() {\n return getNodeCanvas(this.getElement());\n }\n createPNGStream(opts?: PngConfig) {\n return this.getNodeCanvas().createPNGStream(opts);\n }\n createJPEGStream(opts?: JpegConfig) {\n return this.getNodeCanvas().createJPEGStream(opts);\n }\n}\n"],"names":["BaseConfiguration","constructor","_defineProperty","window","devicePixelRatio","Configuration","config","configure","arguments","length","undefined","Object","assign","addFonts","paths","fontPaths","_objectSpread","removeFonts","fontFamilys","forEach","fontFamily","clearFonts","restoreDefaults","keys","defaults","reduce","acc","key","log","severity","_len","optionalParams","Array","_key","console","FabricError","Error","message","options","concat","SignalAbortedError","context","GLProbe","WebGLProbe","testPrecision","gl","precision","fragmentSource","fragmentShader","createShader","FRAGMENT_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","queryWebGL","canvas","getContext","maxTextureSize","getParameter","MAX_TEXTURE_SIZE","GLPrecision","find","getExtension","loseContext","isSupported","textureSize","copyPasteData","getEnv","document","isTouchSupported","navigator","maxTouchPoints","dispose","env","setEnv","value","getBrowserEnv","getFabricDocument","getFabricWindow","getDevicePixelRatio","_config$devicePixelRa","Math","max","NodeGLProbe","implForWrapper","jsdomImplForWrapper","utils","JSDOMWindow","JSDOM","decodeURIComponent","resources","pretendToBeVisual","getNodeCanvas","canvasEl","impl","_canvas","_image","element","_currentSrc","_attributes","_classList","Cache","getFontCache","_ref","fontStyle","fontWeight","toLowerCase","charWidthsCache","fontCache","cacheKey","clearFontCache","limitDimsByArea","ar","perfLimitSizeTotal","roughWidth","sqrt","floor","cache","VERSION","version","noop","halfPI","PI","twoMathPi","PiBy180","iMatrix","freeze","DEFAULT_SVG_FONT_SIZE","ALIASING_LIMIT","kRect","CENTER","LEFT","TOP","BOTTOM","RIGHT","NONE","reNewline","MOVING","SCALING","ROTATING","ROTATE","SKEWING","RESIZING","MODIFY_POLY","MODIFY_PATH","CHANGED","SCALE","SCALE_X","SCALE_Y","SKEW_X","SKEW_Y","FILL","STROKE","MODIFIED","JSON","SVG","ClassRegistry","Map","has","classType","getClass","get","setClass","classConstructor","set","type","getSVGClass","SVGTagName","setSVGClass","classRegistry","AnimationRegistry","remove","index","indexOf","splice","cancelAll","animations","animation","abort","cancelByCanvas","filter","_animation$target","target","cancelByTarget","runningAnimations","Observable","on","arg0","handler","__eventListeners","entries","eventName","off","push","once","disposers","_ref2","d","disposer","onceHandler","args","call","_removeEventListener","eventListener","_ref3","fire","_this$__eventListener","listenersForEvent","i","removeFromArray","array","idx","cos","angle","angleSlice","abs","sin","sign","Point","y","x","add","that","addEquals","scalarAdd","scalar","scalarAddEquals","subtract","subtractEquals","scalarSubtract","scalarSubtractEquals","multiply","scalarMultiply","scalarMultiplyEquals","divide","scalarDivide","scalarDivideEquals","eq","lt","lte","gt","gte","lerp","t","min","distanceFrom","dx","dy","midPointFrom","toString","setXY","setX","setY","setFromPoint","swap","clone","rotate","radians","origin","ZERO","sinus","cosinus","p","rotated","transform","ignoreOffset","isCollection","fabricObject","isArray","_objects","createCollectionMixin","Base","Collection","_onObjectAdded","object","_onObjectRemoved","_onStackOrderChanged","objects","size","insertAt","_len2","_key2","removed","_len3","_key3","forEachObject","callback","getObjects","_len4","types","_key4","o","isType","item","isEmpty","contains","deep","includes","some","obj","complexity","memo","current","sendObjectToBack","unshift","bringObjectToFront","sendObjectBackwards","intersecting","newIdx","findNewLowerIndex","bringObjectForward","findNewUpperIndex","moveObjectTo","isOverlapping","collectObjects","left","top","width","height","includeIntersecting","tl","br","selectable","visible","intersectsWithRect","isContainedWithinRect","containsPoint","CommonMethods","_setOptions","prop","_setObject","_set","toggle","property","requestAnimFrame","requestAnimationFrame","cancelAnimFrame","handle","cancelAnimationFrame","id","uid","createCanvasElement","createElement","createImage","copyCanvasElement","_newCanvas$getContext","newCanvas","createCanvasElementFor","drawImage","toDataURL","format","quality","isHTMLCanvas","degreesToRadians","degrees","radiansToDegrees","isIdentityMatrix","mat","every","transformPoint","invertTransform","a","r","multiplyTransformMatrices","b","is2x2","multiplyTransformMatrixArray","matrices","reduceRight","product","curr","calcPlaneRotation","atan2","qrDecompose","denom","pow","scaleX","scaleY","skewX","skewY","translateX","translateY","createTranslateMatrix","createRotateMatrix","angleRadiant","cosValue","sinValue","createScaleMatrix","angleToSkew","tan","createSkewXMatrix","skewValue","createSkewYMatrix","calcDimensionsMatrix","flipX","flipY","matrix","composeMatrix","scaleMatrix","loadImage","url","signal","crossOrigin","Promise","resolve","reject","aborted","img","err","src","addEventListener","done","onload","onerror","removeEventListener","enlivenObjects","reviver","instances","all","map","fromObject","then","fabricInstance","catch","error","instance","finally","enlivenObjectEnlivables","serializedObject","promises","values","enlived","pick","source","pickBy","predicate","ColorNameMap","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","reRGBa","reHSLa","reHex","hue2rgb","q","rgb2Hsl","g","maxValue","minValue","h","s","l","round","fromAlphaToFloat","parseFloat","endsWith","hexify","toUpperCase","padStart","greyAverage","avg","Color","color","setSource","_source","_tryParsingColor","sourceFromHex","sourceFromRgb","sourceFromHsl","isUnrecognised","getSource","toRgb","toRgba","join","toHsl","toHsla","toHex","fullHex","toHexa","slice","getAlpha","setAlpha","alpha","toGrayscale","toBlackWhite","threshold","average","bOrW","overlayWith","otherColor","otherAlpha","otherSource","R","G","B","fromRgb","fromRgba","match","parsedValue","fromHsl","fromHsla","match1degrees","parseAngletoDegrees","fromHex","isShortNotation","expandedValue","split","hex","hexCouple","parseInt","lowercase","numeric","toFixed","number","fractionDigits","Number","getSvgAttributes","commonAttributes","parseUnit","fontSize","unit","exec","dpi","DPI","parseAlign","align","parsePreserveAspectRatioAttribute","attribute","firstPart","secondPart","trim","alignX","alignY","meetOrSlice","matrixToSVG","NUM_FRACTION_DIGITS","colorPropToSVG","inlineStyle","colorValue","opacityValue","toLive","opacity","createSVGRect","svgColor","w","isFiller","filler","isSerializableFiller","toObject","isPattern","offsetX","isTextObject","_renderText","isPath","_renderPathCommands","isActiveSelection","getScrollLeftTop","doc","getDocumentFromElement","elementLoop","docElement","documentElement","body","scrollLeft","scrollTop","parentNode","host","nodeType","style","position","el","ownerDocument","getWindowFromElement","_el$ownerDocument","defaultView","setCanvasDimensions","ctx","retinaScaling","setAttribute","scale","setCSSDimensions","getElementOffset","_getWindowFromElement","offset","elemStyle","getComputedStyle","borderLeftWidth","borderTopWidth","paddingLeft","paddingTop","box","docElem","getBoundingClientRect","scrollLeftTop","clientLeft","clientTop","makeElementUnselectable","onselectstart","userSelect","StaticCanvasDOMManager","createLowerCanvas","lower","getElementById","hasAttribute","_originalCanvasStyle","cssText","classList","cleanupDOM","removeAttribute","setDimensions","calcOffset","staticCanvasDefaults","backgroundVpt","backgroundColor","overlayVpt","overlayColor","includeDefaultValues","svgViewportTransformation","renderOnAddRemove","skipOffscreen","enableRetinaScaling","imageSmoothingEnabled","controlsAboveOverlay","allowTouchScrolling","viewportTransform","StaticCanvas","lowerCanvasEl","_this$elements$lower","elements","contextContainer","_this$elements$lower2","getDefaults","ownDefaults","initElements","_setDimensionsImpl","skipControlsDrawing","calcViewportBoundaries","requestRenderAll","setCoords","getRetinaScaling","_offset","getWidth","getHeight","setWidth","setHeight","dimensions","cssOnly","backstoreOnly","hasLostContext","getZoom","setViewportTransform","vpt","zoomToPoint","point","before","newPoint","after","setZoom","absolutePan","relativePan","getElement","clearContext","clearRect","clear","backgroundImage","overlayImage","renderAll","cancelRequestedRender","destroyed","renderCanvas","renderAndReset","nextRenderHandle","disposed","iVpt","vptCoords","tr","bl","drawControls","_ctx","v","path","clipPath","patternQuality","_renderBackground","save","_renderObjects","restore","shouldCache","_transformDone","renderCache","forClipping","drawClipPathOnCanvas","_renderOverlay","__cleanupTask","globalCompositeOperation","zoomX","zoomY","_cacheCanvas","cacheTranslationX","cacheTranslationY","len","render","_renderBackgroundOrOverlay","fill","needsVpt","isAFiller","beginPath","moveTo","lineTo","closePath","fillStyle","offsetY","m","gradientTransform","patternTransform","getCenter","getCenterPoint","centerObjectH","_centerObject","centerObjectV","centerObject","viewportCenterObject","getVpCenter","viewportCenterObjectH","viewportCenterObjectV","center","toDatalessJSON","propertiesToInclude","toDatalessObject","_toObjectMethod","toJSON","methodName","clipPathData","excludeFromExport","_toObject","__serializeBgOverlay","originalValue","data","bgImage","bgColor","background","overlay","toSVG","markup","_setSVGPreamble","_setSVGHeader","clipPathId","_setSVGBgOverlayColor","_setSVGBgOverlayImage","_setSVGObjects","suppressPreamble","encoding","optViewBox","viewBox","createSVGFontFacesMarkup","createSVGRefElementsMarkup","createSVGClipPathMarkup","toClipPathSVG","shouldTransform","additionalTransform","fontList","styles","styleRow","fontListMarkup","_setSVGObject","bgOrOverlay","repeat","finalWidth","finalHeight","shouldInvert","loadFromJSON","json","serialized","parse","enlivedMap","properties","cloneWithoutData","multiplier","finalMultiplier","toCanvasElement","scaledWidth","scaledHeight","zoom","originalWidth","originalHeight","originalSkipControlsDrawing","newZoom","vp","newVp","originalRetina","objectsToRender","task","destroy","kill","touchEvents","getTouchInfo","event","touchProp","changedTouches","getPointer","scroll","_evt","clientX","clientY","isTouchEvent","pointerType","stopEvent","e","preventDefault","stopPropagation","makeBoundingBoxFromPoints","points","removeTransformFromObject","inverted","finalTransform","calcOwnMatrix","applyTransformToObject","addTransformToObject","_qrDecompose","otherOptions","_objectWithoutProperties","_excluded","setPositionByOrigin","resetObjectTransform","saveObjectTransform","sizeAfterTransform","dimX","dimY","bbox","calcPlaneChangeMatrix","from","to","sendPointToPlane","sendVectorToPlane","sendObjectToPlane","fireEvent","_target$canvas","originOffset","bottom","right","resolveOrigin","originValue","NOT_ALLOWED_CURSOR","getActionFromCorner","alreadySelected","corner","control","controls","getActionName","isTransformCentered","originX","originY","invertOrigin","isLocked","lockingKey","commonEventInfo","eventData","pointer","findCornerQuadrant","getTotalAngle","cornerAngle","normalizePoint","getRelativeCenterPoint","translateToGivenOrigin","p2","getLocalPoint","padding","localPoint","dragHandler","newLeft","newTop","moveX","moveY","FabricObjectSVGExportMixin","getSvgStyles","skipShadow","fillRule","strokeWidth","strokeDashArray","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","visibility","getSvgFilter","stroke","shadow","getSvgCommons","getSvgTransform","full","calcTransformMatrix","svgTransform","_toSVG","_reviver","_createBaseSVGMarkup","_createBaseClipPathSVGMarkup","objectMarkup","commonPieces","noStyle","withShadow","styleInfo","shadowInfo","vectorEffect","strokeUniform","absoluteClipPath","absolutePositioned","clipPathMarkup","addPaintOrder","paintFirst","getSvgRegex","arr","RegExp","reNum","String","raw","_templateObject","_taggedTemplateLiteral","svgNS","reFontDeclaration","svgValidTagNames","svgViewBoxElements","svgInvalidAncestors","svgValidParents","attributesMap","cx","cy","display","fSize","cPath","svgValidTagNamesRegEx","svgViewBoxElementsRegEx","svgValidParentsRegEx","reViewBoxAttrValue","unitVectorX","zero","rotateVector","vector","createVector","magnitude","calcAngleBetweenVectors","crossProduct","dotProduct","calcVectorRotation","getUnitVector","getOrthonormalVector","counterClockwise","isBetweenVectors","AxB","AxT","BxT","shadowOffsetRegex","reOffsetsAndBlur","shadowDefaultValues","blur","affectStroke","nonScaling","Shadow","parseShadow","shadowStr","replace","BLUR_BOX","fBoxX","fBoxY","capValue","stateProperties","cacheProperties","fabricObjectDefaultValues","minScaleLimit","objectCaching","centeredRotation","centeredScaling","dirty","interactiveObjectDefaultValues","noScaleCache","lockMovementX","lockMovementY","lockRotation","lockScalingX","lockScalingY","lockSkewingX","lockSkewingY","lockScalingFlip","cornerSize","touchCornerSize","transparentCorners","cornerColor","cornerStrokeColor","cornerStyle","cornerDashArray","hasControls","borderColor","borderDashArray","borderOpacityWhenMoving","borderScaleFactor","hasBorders","selectionBackgroundColor","evented","perPixelTargetFind","activeOn","hoverCursor","moveCursor","normalize","c","asin","elastic","defaultEasing","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","normA","normS","normP","easeOutElastic","normC","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeOutBounce","easeInBounce","easeInOutBounce","easeInQuad","easeOutQuad","easeInOutQuad","defaultAbort","AnimationBase","startValue","byValue","duration","delay","easing","onStart","onChange","onComplete","tick","bind","_onStart","_onChange","_onComplete","_abort","endValue","calculate","state","_state","isDone","start","firstTick","timestamp","startTime","Date","register","setTimeout","durationMs","boundDurationMs","durationProgress","valueProgress","unregister","ValueAnimation","timeElapsed","ArrayAnimation","defaultColorEasing","wrapColorCallback","rgba","ColorAnimation","startColor","endColor","isArrayAnimation","animate","animateColor","Intersection","status","append","isPointContained","T","A","infinite","AB","AT","isPointInPolygon","other","hits","inter","intersectSegmentSegment","intersectLineLine","a1","a2","b1","b2","aInfinite","bInfinite","a2xa1x","a2ya1y","b2xb1x","b2yb1y","a1xb1x","a1yb1y","uaT","ubT","uB","ua","ub","segmentsCoincide","intersectSegmentLine","s1","s2","l1","l2","intersectLinePolygon","result","intersectSegmentPolygon","intersectPolygonPolygon","points1","points2","coincidences","intersectPolygonRectangle","r1","r2","topRight","bottomLeft","ObjectGeometry","getX","getXY","getY","getRelativeX","setRelativeX","getRelativeY","setRelativeY","relativePosition","getRelativeXY","group","setRelativeXY","isStrokeAccountedForInDimensions","getCoords","aCoords","calcACoords","coords","intersection","intersectsWithObject","isContainedWithinObject","getBoundingRect","isOnScreen","isPartiallyOnScreen","allPointsAreOutside","getScaledWidth","_getTransformedDimensions","getScaledHeight","scaleToWidth","boundingRectFactor","scaleToHeight","getCanvasRetinaScaling","_this$canvas","getViewportTransform","_this$canvas2","rotateMatrix","tMatrix","finalMatrix","dim","transformMatrixKey","skipGroup","prefix","matrixCache","ownMatrixCache","_getNonTransformedDimensions","_calculateCurrentDimensions","dimOptions","preScalingStrokeValue","postScalingStrokeValue","noSkew","finalDimensions","fromOriginX","fromOriginY","toOriginX","toOriginY","translateToCenterPoint","translateToOriginPoint","relCenter","getPointByOrigin","pos","_getLeftTopCoords","FabricObject","name","setOptions","_createCacheCanvas","_cacheContext","_updateCacheCanvas","_limitCacheSize","dims","maxCacheSideLimit","minCacheSideLimit","limX","limY","capped","_getCacheCanvasDimensions","objectScale","getTotalObjectScaling","neededX","neededY","minCacheSize","dimensionsChanged","zoomChanged","drawingWidth","drawingHeight","shouldRedraw","additionalWidth","additionalHeight","shouldResizeCanvas","canvasWidth","canvasHeight","sizeGrowing","sizeShrinking","getHeightOfLine","ceil","setTransform","translate","needFullTransform","contextTop","getObjectScaling","retina","getObjectOpacity","_constrainScale","isChanged","parent","isNotVisible","_setupCompositeOperation","drawSelectionBackground","_setOpacity","_setShadow","drawCacheOnCanvas","_removeCacheCanvas","drawObject","isCacheDirty","parentClipPaths","hasStroke","hasFill","needsItsOwnCache","ownCaching","isOnACache","willDrawShadow","drawClipPathOnCache","canvasWithClipPath","originalFill","originalStroke","_setClippingProperties","_render","_drawClipPath","createClipPathLayer","prevClipPath","skipCanvas","fillRect","_removeShadow","globalAlpha","_setStrokeStyles","decl","lineWidth","lineCap","lineDashOffset","lineJoin","miterLimit","gradientUnits","_applyPatternForTransformedGradient","strokeStyle","_applyPatternGradientTransform","_setFillStyles","_setLineDash","dashArray","setLineDash","sx","sy","multX","multY","scaling","shadowColor","shadowBlur","browserShadowBlurConstant","shadowOffsetX","shadowOffsetY","_renderPaintInOrder","_renderStroke","_renderFill","_pCtx$createPattern","pCanvas","pCtx","createPattern","_findCenterFromElement","objectForm","cloneAsImage","ImageClass","origParams","originalGroup","originalShadow","canvasProvider","withoutTransform","withoutShadow","boundingRect","shadowOffset","originalCanvas","setOnGroup","animatable","_animate","propIsColor","colorProperties","animationOptions","isDescendantOf","getAncestors","ancestors","findCommonAncestors","fork","otherFork","common","otherAncestors","ancestor","j","hasCommonAncestors","commonAncestors","isInFrontOf","ancestorData","firstCommonAncestor","headOfFork","pop","headOfOtherFork","thisIndex","otherIndex","propertiesToSerialize","customProperties","toFixedBound","val","_removeDefaultValues","hasStaticDefaultValues","baseValues","getPrototypeOf","baseValue","_fromObject","serializedObjectOptions","_ref4","extraParam","_excluded2","enlivedObjectOptions","wrapWithFireEvent","actionHandler","extraEventInfo","actionPerformed","wrapWithFixedAnchor","centerPoint","constraint","changeObjectWidth","strokePadding","oldWidth","newWidth","changeWidth","renderCircleControl","styleOverride","xSize","sizeX","ySize","sizeY","myLeft","myTop","arc","renderSquareControl","xSizeBy2","ySizeBy2","strokeRect","Control","shouldActivate","controlKey","_fabricObject$canvas","getActiveObject","isControlVisible","getActionHandler","getMouseDownHandler","mouseDownHandler","getMouseUpHandler","mouseUpHandler","cursorStyleHandler","cursorStyle","actionName","getVisibility","_fabricObject$_contro","_fabricObject$_contro2","_controlsVisibility","setVisibility","positionHandler","currentControl","calcCornerCoords","objectCornerSize","centerX","centerY","isTouch","touchSizeX","touchSizeY","rotationStyleHandler","rotateObjectWithSnapping","ex","ey","theta","pivotPoint","lastAngle","curAngle","snapAngle","snapThreshold","rightAngleLocked","leftAngleLocked","hasRotated","rotationWithSnapping","scaleIsProportional","uniformIsToggled","uniScaleKey","uniformScaling","scalingIsForbidden","by","scaleProportionally","lockX","lockY","scaleMap","scaleCursorStyleHandler","n","scaleObject","forbidScaling","signX","signY","gestureScale","distance","original","originalDistance","oldScaleX","oldScaleY","scaleObjectFromCorner","scaleObjectX","scaleObjectY","scalingEqually","scalingX","scalingY","AXIS_KEYS","counterAxis","skew","lockSkewing","flip","skewMap","skewCursorStyleHandler","skewObject","axis","skewingSide","skewKey","skewingBefore","skewingStart","shearingStart","shearing","skewing","atan","changed","dimBefore","dimAfter","compensationFactor","skewHandler","originKey","lockSkewingKey","flipKey","counterOriginKey","counterFlipKey","counterOriginFactor","skewingDirection","finalHandler","skewHandlerX","skewHandlerY","isAltAction","altActionKey","scaleOrSkewActionName","isAlternative","scaleSkewCursorStyleHandler","scalingXOrSkewingY","scalingYOrSkewingX","createObjectDefaultControls","ml","mr","mb","mt","mtr","withConnection","createResizeControls","createTextboxDefaultControls","InteractiveFabricObject","createControls","targetCanvas","_currentTransform","action","startsWith","getActiveControl","__corner","coord","oCoords","findControl","forTouch","cornerEntries","touchCorner","calcOCoords","rMatrix","positionMatrix","startMatrix","transformOptions","forEachControl","_calcCornerCoords","fn","_activeObject","wh","strokeBorders","_drawBorders","drawControlsConnectingLines","_renderControls","styleOptions","shouldDrawBorders","shouldDrawControls","isMoving","drawBorders","forActiveSelection","shouldStroke","setControlVisible","setControlsVisibility","clearContextTop","restoreManually","onDeselect","_options","onSelect","shouldStartDragging","_e","onDragStart","canDrop","renderDragSourceEffect","renderDropTargetEffect","applyMixins","derivedCtor","constructors","baseCtor","getOwnPropertyNames","prototype","defineProperty","getOwnPropertyDescriptor","create","isTransparent","tolerance","getImageData","alphaChannel","rotatePoint","findIndexRight","StrokeProjectionsBase","strokeProjectionMagnitude","strokeUniformScalar","createSideVector","projectOrthogonally","applySkew","calcOrthogonalProjection","isSkewed","scaleUnitVector","unitVector","zeroVector","StrokeLineJoinProjections","getOrthogonalRotationFactor","vector1","vector2","C","AC","bisector","orthogonalProjection","correctSide","projectBevel","projections","projectMiter","hypotUnitScalar","miterVector","projectRoundNoSkew","startCircle","endCircle","radiusOnAxisX","radiusOnAxisY","projectRoundWithSkew","circleRadius","newY","furthestY","newX","furthestX","projectRound","isStraightLine","newOrigin","proj0","proj1","comparisonVector","isProj0Start","projectPoints","project","originPoint","projectedPoint","StrokeLineCapProjections","projectButt","projection","projectSquare","strokePointingOut","projectedA","projectStrokeOnPoints","openPath","reduced","cloneStyles","newObj","keyInner","capitalize","string","firstLetterOnly","charAt","escapeXml","graphemeSplit","textstring","graphemes","chr","getWholeChar","str","code","charCodeAt","isNaN","next","prev","hasStyleChanged","prevStyle","thisStyle","forTextSpans","textBackgroundColor","deltaY","overline","underline","linethrough","stylesToArray","text","textLines","stylesArray","charIndex","chars","end","stylesFromArray","stylesObject","styleIndex","SHARED_ATTRIBUTES","selectorMatches","selector","nodeName","classNames","getAttribute","azAz","matcher","splitClassNames","doesSomeParentMatch","selectors","parentMatching","parentElement","elementMatchesRule","firstMatching","getGlobalStylesForElement","cssRules","rule","normalizeAttr","attr","_attributesMap","regex","cleanupSvgAttribute","attributeValue","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","transforms","transformList","_templateObject7","reTransformList","reTransform","reTransformAll","parseTransformAttribute","test","matchAll","transformMatch","matchedParams","operation","rawArgs","arg1","arg2","arg3","arg4","arg5","arg","normalizeValue","parentAttributes","parsed","ouputValue","transformMatrix","fillIndex","strokeIndex","parseFontDeclaration","oStyle","lineHeight","parseStyleObject","parseStyleString","chunk","parseStyleAttribute","colorAttributesMap","setStrokeFillOpacity","attributes","colorAttr","parseAttributes","parentFontSize","ownAttributes","normalizedStyle","normalizedAttr","normalizedValue","font","mergedAttrs","rectDefaultValues","rx","ry","RECT_PROPS","Rect","_initRxRy","isRounded","bezierCurveTo","fromElement","_parseAttributes","ATTRIBUTE_NAMES","restOfparsedAttributes","Boolean","LAYOUT_TYPE_INITIALIZATION","LAYOUT_TYPE_ADDED","LAYOUT_TYPE_REMOVED","LAYOUT_TYPE_IMPERATIVE","LAYOUT_TYPE_OBJECT_MODIFIED","LAYOUT_TYPE_OBJECT_MODIFYING","getObjectBounds","destinationGroup","currentGroup","objectCenter","accountForStroke","strokeUniformVector","scalingStrokeWidth","sizeVector","LayoutStrategy","calcLayoutResult","shouldPerformLayout","calcBoundingBox","prevStrategy","strategy","shouldLayoutClipPath","getInitialSize","overrides","bboxSize","bboxLeftTop","bboxCenter","actualSize","relativeCorrection","FitContentLayout","LAYOUT_MANAGER","LayoutManager","_subscriptions","performLayout","strictContext","bubbles","_prevLayoutStrategy","onBeforeLayout","layoutResult","getLayoutResult","commitLayout","onAfterLayout","attachHandlers","trigger","subscribe","unsubscribe","_context","delete","unsubscribeTargets","targets","subscribeTargets","tricklingContext","layoutManager","prevCenter","nextCenter","correction","layoutObjects","_context$x","_context$y","layoutObject","_","bubblingContext","NoopLayoutManager","groupDefaultValues","subTargetCheck","interactive","Group","groupInit","_options$layoutManage","__objectSelectionTracker","__objectSelectionMonitor","__objectSelectionDisposer","enterGroup","canEnterGroup","_filterObjectsBeforeEnteringGroup","allowedObjects","_onAfterObjectsChange","removeParentTransform","exitGroup","_shouldSetNestedCoords","removeAll","_activeObjects","selected","activeObjects","_watchObject","watch","_enterGroup","activeObject","_exitGroup","ownCache","preserveObjectStacking","triggerLayout","__serializeObjects","method","_includeDefaultValues","originalDefaults","_createSVGBgRect","fillStroke","commons","svgString","bg","abortable","hydratedOptions","layoutClass","strategyClass","groupSVGElements","findScaleToFit","destination","findScaleToCover","commaWsp","reArcCommandPoints","rePathCommand","repeatedCommands","M","segmentToBezier","theta1","theta2","cosTh","sinTh","cx1","cy1","mT","fromX","fromY","costh1","sinth1","costh2","sinth2","toX","toY","cp1X","cp1Y","cp2X","cp2Y","arcToSegments","large","sweep","rotateX","root","sinTheta","px","py","rx2","ry2","py2","px2","pl","_rx","_ry","mTheta","calcVectorAngle","dtheta","segments","mDelta","th3","ux","uy","vx","vy","ta","tb","CB1","CB2","CB3","CB4","getBoundsOfCurve","begx","begy","cp1x","cp1y","cp2x","cp2y","endx","endy","argsString","cachesBoundsOfCurve","boundsOfCurveCache","tvalues","bounds","b2ac","sqrtb2ac","t1","t2","jlen","iterator","getPointOnCubicBezierIterator","fromArcToBeziers","fx","fy","rot","tx","ty","segsNorm","makePathSimpler","x1","y1","destinationPath","previous","controlX","controlY","parsedCommand","converted","calcLineLength","x2","y2","pct","c1","c2","c3","c4","QB1","QB2","QB3","getTangentCubicIterator","p1x","p1y","p2x","p2y","p3x","p3y","p4x","p4y","qb1","qb2","qb3","tangentX","tangentY","getPointOnQuadraticBezierIterator","getTangentQuadraticIterator","invT","pathIterator","tempP","tmpLen","perc","findPercentageForDistance","segInfo","nextLen","nextStep","lastPerc","angleFinder","getPathSegmentsInfo","totalLength","tempInfo","info","basicInfo","command","destX","destY","getPointOnPath","infos","segPercent","segment","rePathCmdAll","regExpArcCommandPoints","reMyNum","commandLengths","parsePath","pathString","_pathString$match","chain","matchStr","commandLetter","commandLength","paramArr","lastIndex","out","newCommand","transformedCommand","getSmoothPathFromPoints","p1","multSignX","multSignY","manyPoints","midPoint","transformPath","pathOffset","pathSegment","newSegment","getRegularPolygonPath","numVertexes","radius","interiorAngle","rotationAdjustment","rad","joinPath","pathData","setStyle","elementStyle","setProperty","mergeClipPaths","_b$group","getRandomInt","random","request","xhr","XMLHttpRequest","removeListener","ontimeout","onreadystatechange","readyState","open","send","_assignTransformMatrixProps","removeTransformMatrixForSvgParsing","preserveAspectRatioOptions","cropX","cropY","offsetLeft","offsetTop","CanvasDOMManager","containerClass","upperCanvasEl","createUpperCanvas","upper","applyCanvasStyle","container","createContainerElement","replaceChild","className","removeChild","canvasDefaults","centeredKey","selection","selectionKey","selectionColor","selectionDashArray","selectionBorderColor","selectionLineWidth","selectionFullyContained","defaultCursor","freeDrawingCursor","notAllowedCursor","targetFindTolerance","skipTargetFind","stopContextMenu","fireRightClick","fireMiddleClick","enablePointerEvents","SelectableCanvas","_this$elements$upper","_this$elements$upper2","wrapperEl","_objectsToRender","deselected","_discardActiveObject","_hoveredTarget","_hoveredTargets","_chooseObjectsToRender","contextTopDirty","_groupSelector","isDrawingMode","renderTopLayer","_isCurrentlyDrawing","freeDrawingBrush","_drawSelection","renderTop","setTargetFindTolerance","pixelFindCanvasEl","pixelFindContext","isTargetTransparent","selectionBgc","enhancedTolerance","_isSelectionKeyPressed","sKey","_shouldClearSelection","getActiveObjects","_shouldCenterTransform","modifierKeyPressed","centerTransform","_getOriginFromCorner","controlName","_setupCurrentTransform","_control$getActionHan","getScenePoint","altKey","lastX","lastY","shiftKey","setCursor","cursor","deltaX","extent","strokeOffset","minX","minY","maxX","maxY","findTarget","getViewportPoint","aObjects","searchPossibleTargets","subTargets","altSelectionKey","_pointIsInObjectSelectionArea","viewportZoom","angleRadians","cosP","sinP","cosPSinP","cosPMinusSinP","_checkTarget","isEditing","_searchPossibleTargets","subTarget","_pointer","_absolutePointer","fromViewport","boundsWidth","boundsHeight","cssScale","_resetTransformEventData","_setBrushStyles","willReadFrequently","getTopContext","getSelectionContext","getSelectionElement","active","_fireSelectionEvents","oldObjects","somethingChanged","invalidate","added","setActiveObject","currentActives","_setActiveObject","prevActiveObject","endCurrentTransform","discardActiveObject","discarded","_finalizeCurrentTransform","_scaling","originalProperties","_realizeGroupTransformOnObject","layoutProps","originalValues","TextEditingManager","cb","hiddenTextarea","focus","__disposer","exitTextEditing","exitEditing","onMouseMove","_this$target","updateSelectionOnMouseMove","addEventOptions","passive","getEventPoints","viewportPoint","scenePoint","absolutePointer","addListener","syntheticEventConfig","mouse","in","targetIn","targetOut","canvasIn","canvasOut","drag","Canvas","eventHandler","addOrRemove","_getEventPrefix","functor","_eventjsFunctor","canvasElement","eventTypePrefix","_onResize","_onMouseDown","_onMouseMove","_onMouseOut","_onMouseEnter","_onMouseWheel","_onContextMenu","_onDoubleClick","_onDragStart","_onDragEnd","_onDragOver","_onDragEnter","_onDragLeave","_onDrop","_onTouchStart","removeListeners","_onMouseUp","_onTouchEnd","__onMouseWheel","shared","nestedTarget","_isClick","_dragSource","_onDragProgress","_renderDragEffects","dropTarget","_dropTarget","didDrop","dataTransfer","dropEffect","dragSource","_draggedoverTarget","findDragTargets","eventType","_fireEnterLeaveEvents","_basicEventHandler","_cacheTransformEventData","_handleEvent","getPointerId","evt","identifier","pointerId","_isMainEvent","isPrimary","touches","mainTouchId","shouldPreventScrolling","currentActiveObject","__onMouseDown","_target","__onMouseUp","_willAddMouseDown","clearTimeout","__onMouseMove","_shouldRender","_this$_activeObject","isClick","button","_onMouseUpInDrawingMode","shouldRender","targetWasActive","handleSelection","found","originalControl","originalMouseUpHandler","_setCursorFromEvent","currentTarget","currentSubTargets","_onMouseDownInDrawingMode","onMouseDown","_onMouseMoveInDrawingMode","onMouseUp","grouped","handleMultiSelection","groupSelector","_fireOverOutEvents","_transformObject","textEditingManager","fireSyntheticInOutEvents","oldTarget","fireCanvas","draggedoverTarget","targetChanged","outOpt","nextTarget","inOpt","previousTarget","localPointer","_performTransformAction","activeSelection","reverse","isAS","prevActiveObjects","multiSelectAdd","klass","newActiveSelection","point1","point2","collectedObjects","linearDefaultCoords","radialDefaultCoords","ifNaN","valueIfNaN","RE_PERCENT","isPercent","parsePercent","NaN","RE_KEY_VALUE_PAIRS","RE_KEY_VALUE","parseColorStop","keyValuePairs","parseColorStops","opacityAttr","colorStops","colorStopEls","getElementsByTagName","parseType","parseGradientUnits","convertPercentUnitsToValues","valuesToConvert","finalValue","propValue","getValue","parseLinearCoords","parseRadialCoords","parseCoords","Gradient","addColorStop","colorStop","preTransform","sort","needsSwap","minRadius","maxRadius","percentageShift","gradient","createLinearGradient","createRadialGradient","svgOptions","viewBoxWidth","viewBoxHeight","Pattern","isImageSource","isCanvasSource","sourceToString","complete","naturalWidth","naturalHeight","patternSource","patternOffsetX","patternOffsetY","patternWidth","patternHeight","BaseBrush","_saveAndTransform","needsFullRender","_resetShadow","_isOutSideCanvas","Path","_setPath","adjustPosition","setBoundingBox","_calcBoundsFromPath","quadraticCurveTo","pathCmd","sourcePath","_getOffsetTransform","digits","_calcDimensions","subpathStartX","subpathStartY","parsedAttributes","isEmptySVGPath","PencilBrush","_points","_hasStraightLine","drawSegment","drawStraightLine","straightLineKey","_prepareForDrawing","_addPoint","limitedToCanvasSize","oldEnd","_finalizeAndAddPath","_reset","convertPointsToSVGPath","createPath","decimatePoints","lastPoint","cDistance","adjustedDistance","newPoints","decimate","CIRCLE_PROPS","circleDefaultValues","startAngle","endAngle","Circle","setRadius","getRadiusX","getRadiusY","startX","startY","endX","endY","largeFlag","sweepFlag","otherParsedAttributes","CircleBrush","drawDot","addPoint","dot","originalRenderOnAddRemove","circles","circle","pointerPoint","getUniqueRects","rects","uniqueRects","uniqueRectsArray","SprayBrush","sprayChunks","sprayChunk","addSprayChunk","renderChunck","chunck","rect","optimizeOverlapping","sprayChunck","density","dotWidthVariance","dotWidth","randomOpacity","PatternBrush","getPatternSrc","dotDistance","patternCanvas","patternCtx","getPattern","pattern","topLeft","coordProps","Line","_setWidthHeight","calcLinePoints","origStrokeStyle","_this$stroke","_x1","_x2","_y1","_y2","xMult","yMult","triangleDefaultValues","Triangle","widthBy2","heightBy2","ellipseDefaultValues","ELLIPSE_PROPS","Ellipse","getRx","getRy","parsePointsAttribute","pointsSplit","parsedPoints","polylineDefaultValues","exactBoundingBox","Polyline","initialized","isOpen","_projectStrokeOnPoints","strokeDiff","bboxNoStroke","layoutProperties","_options$width","_options$height","_options$width2","_options$height2","output","diffX","diffY","Polygon","fontProperties","textDecorationProperties","textLayoutProperties","additionalProps","styleProperties","textDefaultValues","_reNewline","_reSpacesAndTabs","_reSpaceAndTab","_reWords","textAlign","superscript","baseline","subscript","pathStartOffset","pathSide","pathAlign","_fontSizeFraction","offsets","_fontSizeMult","charSpacing","direction","CACHE_FONT_SIZE","MIN_TEXT_WIDTH","JUSTIFY","JUSTIFY_LEFT","JUSTIFY_RIGHT","JUSTIFY_CENTER","StyledText","isEmptyStyles","lineIndex","line","p3","styleHas","cleanStyle","stylesCount","letterCount","stylePropertyValue","allStyleObjectPropertiesMatch","graphemeCount","styleObject","stylePropertyHasBeenSet","_textLines","removeStyle","lineNum","charNum","_extendStyles","get2DCursorLocation","_getLineStyle","_setLineStyle","newStyle","_getStyleDeclaration","_setStyleDeclaration","getSelectionStyles","startIndex","endIndex","getStyleAtPosition","getCompleteStyleDeclaration","setSelectionStyles","_forceClearCache","_lineStyle$charIndex","lineStyle","_styleProperties","_deleteStyleDeclaration","_deleteLineStyle","multipleSpacesRegex","dblQuoteRegex","createSVGInlineRect","TextSVGExportMixin","_getSVGLeftTopOffsets","textAndBg","_getSVGTextAndBg","textTop","textLeft","_wrapSVGTextAndBg","lineTop","textBgRects","textSpans","noShadow","textDecoration","getSvgTextDecoration","textTopOffset","textLeftOffset","lineOffset","_getLineLeftOffset","_setSVGTextLineBg","_setSVGTextLineText","_createTextCharSpan","char","styleDecl","styleProps","getSvgSpanStyles","fillStyles","dySpan","isJustify","actualStyle","nextStyle","charsToRender","charBox","boxWidth","timeToRender","__charBounds","kernedWidth","leftOffset","heightOfLine","boxStart","currentColor","lastColor","getValueOfPropertyAt","_getSVGLineTopOffset","lineTopOffset","lastHeight","useWhiteSpace","decoration","measuringContext","getMeasuringContext","FabricText","setPathInfo","initDimensions","segmentsInfo","_splitText","newLines","_splitTextIntoLines","lines","graphemeLines","_unwrappedTextLines","_unwrappedLines","_text","graphemeText","_clearCache","calcTextWidth","lineBoxes","renderLeft","wBy2","cursorWidth","calcTextHeight","enlargeSpaces","diffSpace","currentLineWidth","numberOfSpaces","accumulatedSpace","charBound","spaces","isEndOfWrapping","getLineWidth","missingNewlineOffset","_lineIndex","selectionStart","skipWrapping","_setTextStyles","_renderTextLinesBackground","_renderTextDecoration","_renderTextStroke","_renderTextFill","charStyle","forMeasuring","textBaseline","_getFontDeclaration","maxWidth","_renderTextLine","_renderChars","_getLeftOffset","_getTopOffset","lineLeftOffset","drawStart","_measureChar","_char","previousChar","prevCharStyle","fontDeclaration","couple","stylesAreEqual","fontMultiplier","coupleWidth","previousWidth","measureText","getHeightOfChar","measureLine","lineInfo","_measureLine","_getWidthOfCharSpacing","prevGrapheme","graphemeInfo","llength","lineBounds","grapheme","_getGraphemeBox","positionInPath","totalPathLength","_setGraphemeOnPath","numOfSpaces","centerPosition","skipLeft","previousBox","__lineHeights","maxHeight","_renderTextCommon","lineHeights","shortCut","isLtr","currentDirection","drawingLeft","_renderChar","_applyPatternGradientTransformText","handleFiller","fullDecl","shouldFill","fillOffsets","fillText","strokeOffsets","strokeText","setSuperscript","_setScript","setSubscript","schema","loc","lineDiff","__lineWidths","_charStyle$property","topOffset","lastDecoration","lastFill","currentDecoration","currentFill","currentSize","currentDy","parsedFontFamily","genericFonts","newLine","newText","needsDims","isAddingPath","_options$parsedAttrib","textAnchor","restOfOptions","textContent","textHeightScaleFactor","lineHeightDiff","scaledDiff","textHeight","offX","DraggableTextDelegate","dragEnterHandler","dragOverHandler","dragLeaveHandler","dragEndHandler","dropHandler","_dispose","isPointerOverSelection","newSelection","getSelectionStartFromPointer","selectionEnd","__mouseDownInPlace","isActive","__dragStartFired","setCursorByClick","initDelayedCursor","__isDraggingOver","getDragStartSelection","__dragStartSelection","setDragImage","_e$dataTransfer","flipFactor","boundaries","_getCursorBoundaries","selectionPosition","diff","bgc","dragImage","border","__dragImageDisposer","appendChild","setData","stringify","effectAllowed","abortCursorAnimation","editable","defaultPrevented","dragStartSelection","targetCanDrop","ev","_e$dataTransfer2","insert","getData","trailing","selectionStartOffset","removeChars","trimEnd","insertChars","enterEditing","_updateTextarea","_e$dataTransfer3","reNonWord","ITextBehavior","initBehavior","_tick","_onTickComplete","_animateCursor","toValue","_currentCursorOpacity","renderCursorOrSelection","_currentTickState","cursorDuration","_this$_currentTickCom","_currentTickCompleteState","restart","cursorDelay","shouldClear","cursorAnimation","restartCursorIfNeeded","selectAll","_fireSelectionChanged","getSelectedText","findWordBoundaryLeft","startFrom","_reSpace","findWordBoundaryRight","findLineBoundaryLeft","findLineBoundaryRight","searchWordBoundary","selectWord","newSelectionStart","newSelectionEnd","selectLine","enterEditingImpl","initHiddenTextarea","_saveEditingProps","_setEditingProps","_textBeforeEdit","activeElement","currentStart","currentEnd","__selectionStartOnMouseDown","editingBorderColor","fromStringToGraphemeSelection","smallerTextStart","graphemeStart","smallerTextEnd","graphemeEnd","fromGraphemeToStringSelection","cursorOffsetCache","inCompositionMode","updateTextareaPosition","updateFromTextArea","textarea","_calcTextareaPosition","desiredPosition","compositionStart","cursorLocation","charHeight","upperCanvas","upperCanvasWidth","upperCanvasHeight","clientWidth","clientHeight","_savedProps","_restoreEditingProps","_exitEditing","exitEditingImpl","isTextChanged","_removeExtraneousStyles","removeStyleFromTo","lineStart","charStart","lineEnd","charEnd","styleObj","shiftLineStyles","numericChar","clonedStyles","numericLine","insertNewlineStyleObject","qty","copiedStyle","newLineStyles","originalLineLength","isEndOfLine","someStyleIsCarryingOver","currentCharStyle","numIndex","styleCarriedOver","insertCharStyleObject","quantity","currentLineStyles","currentLineStylesCloned","numericIndex","insertNewStyleBlock","insertedText","cursorLoc","addedLines","linesLength","setSelectionStartEndWithShift","_selectionDirection","ITextKeyBehavior","autocapitalize","autocorrect","autocomplete","spellcheck","wrap","hiddenTextareaContainer","keydown","keyup","input","copy","cut","paste","compositionstart","compositionupdate","compositionend","onKeyDown","keyMap","keysMapRtl","keysMap","keyCode","ctrlKeysMapDown","ctrlKey","metaKey","stopImmediatePropagation","onKeyUp","_copyDone","ctrlKeysMapUp","onInput","fromPaste","updateAndFire","nextText","charCount","nextCharCount","removedText","charDiff","removeFrom","removeTo","textareaSelection","backDelete","copiedText","disableStyleCopyPaste","copiedTextStyle","onCompositionStart","onCompositionEnd","onCompositionUpdate","compositionEnd","_getWidthBeforeCursor","widthBeforeCursor","bound","getDownCursorOffset","isRight","selectionProp","_getSelectionForOffset","indexOnOtherLine","_getIndexOnLine","textAfterCursor","getUpCursorOffset","textBeforeCursor","widthOfCharsOnLine","indexOnLine","charWidth","foundMatch","leftEdge","rightEdge","offsetFromLeftEdge","offsetFromRightEdge","moveCursorDown","_moveCursorUpOrDown","moveCursorUp","moveCursorWithShift","moveCursorWithoutShift","moveCursorLeft","_moveCursorLeftOrRight","_move","newValue","_moveLeft","_moveRight","moveCursorLeftWithoutShift","change","moveCursorLeftWithShift","moveCursorRight","moveCursorRightWithShift","moveCursorRightWithoutShift","notALeftClick","ITextClickBehavior","_mouseDownHandler","_mouseDownHandlerBefore","doubleClickHandler","tripleClickHandler","__lastClickTime","__lastLastClickTime","__lastPointer","draggableTextDelegate","__newClickTime","newPointer","isTripleClick","__lastSelected","didDrag","mouseOffset","charLength","widthAfter","MOVE_CURSOR_UP","MOVE_CURSOR_DOWN","MOVE_CURSOR_LEFT","MOVE_CURSOR_RIGHT","EXIT_EDITING","protectedDefaultValues","iTextDefaultValues","cursorColor","caching","IText","setSelectionStart","_updateAndFire","setSelectionEnd","renderCursor","renderSelection","skipCaching","_getCursorBoundariesOffsets","__getCursorBoundariesOffsets","renderCursorAt","_renderCursor","getCursorRenderingData","_renderSelection","dragSelection","startLine","endLine","startChar","endChar","realLineHeight","boxEnd","drawHeight","extraTop","drawWidth","compositionColor","getCurrentCharFontSize","cp","_getCurrentCharIndex","getCurrentCharColor","cursorPosition","textboxDefaultValues","minWidth","dynamicMinWidth","_wordJoiners","splitByGrapheme","Textbox","_styleMap","_generateStyleMap","textInfo","realLineCount","realLineCharCount","isWrapping","nextLineIndex","nextOffset","shouldLimit","mapNextLine","p2Number","_wrapText","desiredWidth","getGraphemeDataForRender","wrapped","wordsData","_wrapLine","infix","largestWordWidth","wordsOrGraphemes","wordSplit","word","graphemeArray","_measureWord","charOffset","reservedSpace","additionalSpace","infixWidth","lineJustStarted","wordWidth","getMinWidth","linesToKeep","propNumber","ClipPathLayout","clipPathCenter","FixedLayout","ActiveSelectionLayoutManager","parents","Set","selectedObjects","activeSelectionDefaultValues","multiSelectionStacking","ActiveSelection","findIndex","groups","childrenOverride","Canvas2dFilterBackend","applyFilters","filters","sourceElement","sourceWidth","sourceHeight","imageData","originalImageData","pipelineState","originalEl","filterBackend","applyTo","imageDataPostFilter","putImageData","WebGLFilterBackend","tileSize","Float32Array","setupGLContext","captureGPUInfo","createWebGLCanvas","glOptions","premultipliedAlpha","depth","stencil","antialias","clearColor","cachedTexture","getCachedTexture","destinationWidth","destinationHeight","sourceTexture","createTexture","targetTexture","originalTexture","passes","webgl","aPosition","programCache","pass","tempFbo","createFramebuffer","bindFramebuffer","FRAMEBUFFER","resizeCanvasIfNeeded","copyGLTo2D","bindTexture","TEXTURE_2D","deleteTexture","deleteFramebuffer","clearWebGLCaches","textureCache","textureImageSource","NEAREST","RGBA","UNSIGNED_BYTE","CLAMP_TO_EDGE","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","texture","texParameteri","texImage2D","uniqueId","evictCachesForKey","glCanvas","sourceY","copyGLTo2DPutImageData","dWidth","dHeight","numBytes","u8","Uint8Array","imageBuffer","u8Clamped","Uint8ClampedArray","readPixels","imgData","ImageData","gpuInfo","renderer","vendor","ext","UNMASKED_RENDERER_WEBGL","UNMASKED_VENDOR_WEBGL","initFilterBackend","enableGLFiltering","getFilterBackend","strict","setFilterBackend","backend","imageDefaultValues","srcFromAttribute","minimumScaleTrigger","imageSmoothing","IMAGE_PROPS","FabricImage","setElement","_element","removeTexture","_originalElement","CSS_CANVAS","resizeFilter","applyResizeFilters","elementKey","getCrossOrigin","getOriginalSize","_stroke","filterObj","getSrc","hasCrop","imageMarkup","strokeSvg","imageRendering","getSvgSrc","origFill","filtered","setSrc","minimumScale","elementToFilter","_filteredEl","_filterScalingX","_filterScalingY","_lastScaleX","_lastScaleY","isNeutralState","imgElement","_needsResize","elementToDraw","elWidth","elHeight","sX","sY","sW","sH","maxDestW","maxDestH","_resetWidthHeight","pAR","preserveAspectRatio","pWidth","pHeight","rWidth","rHeight","f","rf","hydratedProps","fromURL","imageOptions","applyViewboxTransform","viewBoxAttr","widthAttr","heightAttr","goodViewbox","missingViewBox","missingDimAttr","translateMatrix","widthDiff","heightDiff","parsedDim","pasedViewBox","createElementNS","firstChild","getTagName","node","tagName","svgInvalidAncestorsRegEx","hasInvalidAncestor","getMultipleNodes","nodeNames","nodeArray","nodeList","getElementsByTagNameNS","parseUseDirectives","nodelist","skipAttributes","useElement","useAttributes","useAttrMap","xlink","href","referencedElement","clonedOriginal","cloneNode","originalAttributes","originalAttrMap","currentTrans","el3","setAttributeNS","childNodes","styleRecord","mergedStyles","entry","gradientsAttrs","xlinkAttr","recursivelyParseGradientsXlink","_gradient$getAttribut","xLink","referencedGradient","children","referenceClone","tagArray","getGradientDefs","elList","gradientDefs","getCSSRules","allRules","styleContents","ruleObj","declaration","propertyValuePairs","pair","_rule","findTag","ElementsParser","clipPaths","regexUrl","createObject","resolveGradient","resolveClipPath","extractPropertyDefinition","storage","gradientDef","usingElement","exactOwner","clipPathElements","objTransformInv","clipPathTag","clipPathOwner","clipPathElement","enlivedClippath","clipRule","gTransform","isValidSvgTag","createEmptyResponse","allElements","parseSVGDocument","descendants","localClipPaths","elementParser","loadSVGFromString","parser","DOMParser","parseFromString","loadSVGFromURL","xml","responseXML","parsedDoc","ACTION_NAME","createPolyPositionHandler","pointIndex","polyObject","polyActionHandler","poly","mouseLocalPosition","factoryPolyActionHandler","anchorPoint","anchorPointInParentPlane","newAnchorPointInParentPlane","createPolyActionHandler","createPolyControls","calcPathPointPosition","pathObject","commandIndex","movePathPoint","anchorCommand","pathPositionHandler","pathActionHandler","indexFromPrevCommand","previousCommandType","PathPointControl","controlFill","controlStroke","PathControlPointControl","connectToCommandIndex","connectToPointIndex","connectionDashArray","commandType","createControl","commandIndexPos","pointIndexPos","isControlPoint","controlPointStyle","pointStyle","createPathControls","isWebGLPipelineState","isPutImageFaster","sourceCanvas","ArrayBuffer","testContext","testPipelineState","performance","now","drawImageTime","putImageDataTime","highPsourceCode","identityFragmentShader","vertexSource","BaseFilter","getFragmentSource","getVertexSource","createProgram","vertexShader","VERTEX_SHADER","program","getShaderInfoLog","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","uniformLocations","getUniformLocations","uStepW","getUniformLocation","uStepH","attributeLocations","getAttributeLocations","getAttribLocation","locations","sendAttributeData","aPositionData","attributeLocation","buffer","createBuffer","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bufferData","STATIC_DRAW","_setupFrameBuffer","framebufferTexture2D","COLOR_ATTACHMENT0","finish","_swapTextures","temp","applyToWebGL","applyTo2d","getCacheKey","retrieveShader","shader","useProgram","uniform1f","sendUniformData","viewport","drawArrays","TRIANGLE_STRIP","bindAdditionalTexture","textureUnit","activeTexture","TEXTURE0","unbindAdditionalTexture","_gl","_uniformLocations","createHelpLayer","helpLayer","defaultKeys","filterOptions","blendColorFragmentSource","screen","difference","lighten","darken","exclusion","tint","blendColorDefaultValues","mode","BlendColor","tg","alpha1","uniform4fv","uColor","mask","blendImageDefaultValues","BlendImage","image","TEXTURE1","calculateMatrix","blendImage","canvas1","blendData","uniform1i","uImage","uniformMatrix3fv","uTransformMatrix","enlivedImage","blurDefaultValues","Blur","aspectRatio","horizontal","simpleBlur","blurLayer1","blurLayer2","canvas2","ctx1","ctx2","nSamples","percent","newImageData","delta","chooseRightDelta","uniform2fv","uDelta","blurScale","brightnessDefaultValues","brightness","Brightness","uBrightness","colorMatrixDefaultValues","colorsOnly","ColorMatrix","constants","uniformMatrix4fv","uColorMatrix","uConstants","createColorMatrixFilter","_Class","newClass","Brownie","Vintage","Kodachrome","Technicolor","Polaroid","Sepia","BlackWhite","Composed","subFilters","enlivedFilters","contrastDefaultValues","contrast","Contrast","contrastF","uContrast","Convolute_3_1","Convolute_3_0","Convolute_5_1","Convolute_5_0","Convolute_7_1","Convolute_7_0","Convolute_9_1","Convolute_9_0","convoluteDefaultValues","opaque","Convolute","weights","side","halfSide","sw","sh","createImageData","dst","alphaFac","dstOff","scx","scy","srcOff","wt","uniform1fv","uMatrix","GAMMA","gammaDefaultValues","gamma","Gamma","rInv","gInv","bInv","rgbValues","rgb","uniform3fv","uGamma","lightness","luminosity","grayscaleDefaultValues","Grayscale","uMode","hueRotationDefaultValues","rotation","HueRotation","cosine","sine","aThird","aThirdSqtSin","OneMinusCos","invertDefaultValues","invert","Invert","uInvert","uAlpha","noiseDefaultValues","noise","Noise","rand","uNoise","uSeed","pixelateDefaultValues","blocksize","Pixelate","_i","_j","uBlocksize","removeColorDefaultValues","useAlpha","RemoveColor","lowC","highC","uLow","uHigh","resizeDefaultValues","resizeType","lanczosLobes","Resize","uTaps","taps","getFilterWindow","tempScale","filterWindow","generateShader","getTaps","lobeFunction","lanczosCreate","applyToForWebgl","dW","dH","lobes","xx","rcpScaleX","rcpScaleY","oW","oH","newData","sliceByTwo","hermiteFastResize","bilinearFiltering","lanczosResize","mult","doneW","doneH","stepW","stepH","dX","dY","tmpCanvas","process","u","weight","fX","fY","ratioX","icenter","ratioY","range2X","cacheLanc","range2Y","lanczos","rcpRatioX","rcpRatioY","srcData","destData","destImg","xDiff","yDiff","chnl","origPix","w4","pixels","destImage","destPixels","ratioW","ratioH","ratioWHalf","ratioHHalf","img2","data2","weightsAlpha","gxR","gxG","gxB","gxA","yy","w0","saturationDefaultValues","saturation","Saturation","adjust","uSaturation","vibranceDefaultValues","vibrance","Vibrance","amt","uVibrance","StaticCanvasBase","createPNGStream","opts","createJPEGStream","CanvasBase"],"mappings":"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CjBC,EAAAA,UAAU,EAAE,SAAS;AACrBC,EAAAA,QAAQ,EAAE,SAAS;AACnBC,EAAAA,QAAQ,EAAE,SAAS;AACnBC,EAAAA,MAAM,EAAE,SAAS;AACjBC,EAAAA,MAAM,EAAE,SAAS;AACjBC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,IAAI,EAAE,SAAS;AACfC,EAAAA,WAAW,EAAE,SAAS;AACtBC,EAAAA,SAAS,EAAE,SAAS;AACpBxL,EAAAA,GAAG,EAAE,SAAS;AACdyL,EAAAA,IAAI,EAAE,SAAS;AACfC,EAAAA,OAAO,EAAE,SAAS;AAClBC,EAAAA,MAAM,EAAE,SAAS;AACjBC,EAAAA,SAAS,EAAE,SAAS;AACpBC,EAAAA,MAAM,EAAE,SAAS;AACjBC,EAAAA,KAAK,EAAE,SAAS;AAChBC,EAAAA,KAAK,EAAE,MAAM;AACbC,EAAAA,UAAU,EAAE,SAAS;AACrBC,EAAAA,MAAM,EAAE,MAAM;AACdC,EAAAA,WAAW,EAAE,SAAA;AACf,CAAC;;ACzJD;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,MAAM,GAAGA,MACpB,kJAAkJ,CAAA;;AAEpJ;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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"} \ No newline at end of file diff --git a/src/shapes/Text/Text.ts b/src/shapes/Text/Text.ts index 3ab492b5a22..8da33a9fc77 100644 --- a/src/shapes/Text/Text.ts +++ b/src/shapes/Text/Text.ts @@ -15,6 +15,7 @@ import type { TClassProperties, TFiller, TOptions, + TRadian, } from '../../typedefs'; import { classRegistry } from '../../ClassRegistry'; import { graphemeSplit } from '../../util/lang_string'; @@ -46,6 +47,9 @@ import { isFiller } from '../../util/typeAssertions'; import type { Gradient } from '../../gradient/Gradient'; import type { Pattern } from '../../Pattern'; import type { CSSRules } from '../../parser/typedefs'; +import { Point } from '../../Point'; +import { createRotateMatrix } from '../../util/misc/matrix'; +import { makeBoundingBoxFromPoints, radiansToDegrees } from '../../util'; let measuringContext: CanvasRenderingContext2D | null; @@ -88,7 +92,7 @@ export type GraphemeBBox = { deltaY: number; renderLeft?: number; renderTop?: number; - angle?: number; + angle?: TRadian; }; // @TODO this is not complete @@ -412,6 +416,8 @@ export class FabricText< declare __lineWidths: number[]; declare initialized?: true; + declare pathOffset: Point; + static cacheProperties = [...cacheProperties, ...additionalProps]; static ownDefaults = textDefaultValues; @@ -472,12 +478,36 @@ export class FabricText< this._clearCache(); this.dirty = true; if (this.path) { - this.width = this.path.width; - this.height = this.path.height; + this.calcTextWidth(); + // gets all the charboxes and transform by the path angle + const points: Point[] = []; + this.__charBounds.forEach((lineBoxes) => { + lineBoxes.forEach(({ width, height, renderLeft, renderTop, angle }) => { + const wBy2 = width / 2; + const h = height * 0.75; + const m = createRotateMatrix({ angle: radiansToDegrees(angle!) }); + m[4] = renderLeft!; + m[5] = renderTop!; + points.push( + new Point(-wBy2, -h).transform(m), + new Point(wBy2, -h).transform(m), + new Point(wBy2, h).transform(m), + new Point(-wBy2, h).transform(m), + ); + }); + }); + const bbox = makeBoundingBoxFromPoints(points); + this.pathOffset = new Point( + bbox.width / 2 + bbox.left, + bbox.height / 2 + bbox.top, + ); + this.width = bbox.width; + this.height = bbox.height; } else { this.width = this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH; this.height = this.calcTextHeight(); + this.pathOffset = new Point(0, 0); } if (this.textAlign.includes(JUSTIFY)) { // once text is measured we need to make space fatter to make justified text. @@ -609,6 +639,7 @@ export class FabricText< */ _render(ctx: CanvasRenderingContext2D) { const path = this.path; + ctx.translate(-this.pathOffset.x, -this.pathOffset.y); path && !path.isNotVisible() && path._render(ctx); this._setTextStyles(ctx); this._renderTextLinesBackground(ctx); @@ -898,7 +929,6 @@ export class FabricText< line = this._textLines[lineIndex], llength = line.length, lineBounds = new Array(llength); - this.__charBounds[lineIndex] = lineBounds; for (let i = 0; i < llength; i++) { const grapheme = line[i]; From 05f8434cbaeb8978d1a3c04f26caab7528a29b4a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 14 Oct 2024 20:41:27 +0000 Subject: [PATCH 2/2] update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7e299f9594..5d8a286196b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [next] +- WIP: fix() Text on a path bounding box and cursor display [#10209](https://github.com/fabricjs/fabric.js/pull/10209) - feat(IText): expose getCursorRenderingData() function. [#10204](https://github.com/fabricjs/fabric.js/pull/10204) - fix(Canvas): allowTouchScrolling interactions [#10078](https://github.com/fabricjs/fabric.js/pull/10078) - update(IText): Add method enterEditingImpl/exitEditingImpl that executes the logic of enterEditing/exitEditing without events [#10187](https://github.com/fabricjs/fabric.js/issues/10187)