{"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/findRight.ts","../src/util/internals/getRandomInt.ts","../src/util/internals/ifNaN.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/util/dom_style.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/util/animation/easing.ts","../src/util/animation/AnimationBase.ts","../src/util/animation/ValueAnimation.ts","../src/util/animation/ArrayAnimation.ts","../src/util/misc/capValue.ts","../src/util/animation/ColorAnimation.ts","../src/util/animation/animate.ts","../src/util/misc/vectors.ts","../src/Intersection.ts","../src/shapes/Object/ObjectOrigin.ts","../src/shapes/Object/ObjectGeometry.ts","../src/shapes/Object/StackedObject.ts","../src/shapes/Object/AnimatableObject.ts","../src/parser/getSvgRegex.ts","../src/parser/constants.ts","../src/Shadow.ts","../src/util/internals/cloneDeep.ts","../src/shapes/Object/defaultValues.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/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/misc/projectStroke/StrokeProjectionsBase.ts","../src/util/misc/projectStroke/StrokeLineJoinProjections.ts","../src/util/misc/projectStroke/StrokeLineCapProjections.ts","../src/util/misc/projectStroke/index.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/misc/mergeClipPaths.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/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/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/rotate.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","../src/controls/X_commonControls.ts","../src/shapes/canvasx/types.ts","../src/shapes/Textbox.ts","../src/shapes/canvasx/type/widget.entity.textbox.ts","../src/shapes/canvasx/XTextbase.ts","../src/shapes/canvasx/type/widget.entity.circlenote.ts","../src/shapes/canvasx/XCircleNotes.ts","../src/shapes/canvasx/type/widget.entity.rectnote.ts","../src/shapes/canvasx/XRectNotes.ts","../src/shapes/canvasx/XShapeNotes/types.ts","../src/shapes/canvasx/type/widget.entity.shapenote.ts","../src/shapes/canvasx/XShapeNotes/XShapeNotes.ts","../src/shapes/canvasx/XTextbox.ts","../src/shapes/canvasx/type/widget.entity.image.ts","../src/shapes/canvasx/XImage.ts","../src/controls/pathControl.ts","../src/shapes/canvasx/type/widget.entity.connector.ts","../src/shapes/canvasx/XConnector.ts","../src/shapes/canvasx/type/widget.entity.file.ts","../src/shapes/canvasx/XFile/XFile.ts","../src/shapes/canvasx/XFile/XFileAudio.ts","../src/shapes/canvasx/XFile/XFileVideo.ts","../src/shapes/canvasx/XFile/XFileExcel.ts","../src/shapes/canvasx/XFile/XFileWord.ts","../src/shapes/canvasx/XFile/XFileZip.ts","../src/shapes/canvasx/XFile/XFilePDF.ts","../src/shapes/canvasx/XFile/XFilePPT.ts","../src/shapes/canvasx/type/widget.entity.group.ts","../src/shapes/canvasx/XGroup.ts","../src/shapes/canvasx/type/widget.entity.url.ts","../src/shapes/canvasx/XURL/XURL.ts","../src/shapes/canvasx/type/widget.entity.markdown.ts","../src/shapes/canvasx/XMarkdown.ts","../src/shapes/canvasx/type/widget.entity.chart.ts","../src/shapes/canvasx/XChart.ts","../src/shapes/canvasx/type/widget.entity.frame.ts","../src/shapes/canvasx/XFrame.ts","../src/shapes/canvasx/type/widget.entity.path.ts","../src/shapes/canvasx/XPath.ts","../src/canvas/canvasx/bx-canvas.ts","../index.node.ts"],"sourcesContent":["export type TConfiguration = Partial<BaseConfiguration>;\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   * @default true\n   */\n  cachesBoundsOfCurve = true;\n\n  /**\n   * Map of font files\n   * Map<fontFamily, pathToFile> of font files\n   */\n  fontPaths: Record</** fontFamily */ string, /** pathToFile */ string> = {};\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<fontFamily, pathToFile> of font files\n   */\n  addFonts(\n    paths: Record</** fontFamily */ string, /** pathToFile */ string> = {}\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<T extends BaseConfiguration>(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 * <caption>Passing `window` and `document` objects to fabric (in case they are mocked or something)</caption>\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</** char */ string, /** width */ number>\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<string, TRectBounds> = {};\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 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\nexport const reNewline = /\\r?\\n/;\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<string, any>;\n  declare [SVG]: Map<string, any>;\n\n  constructor() {\n    this[JSON] = new Map();\n    this[SVG] = new Map();\n  }\n\n  getClass<T>(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<AnimationBase> {\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<T = any> = (options: T) => any;\n\ntype EventRegistryObject<E> = {\n  [K in keyof E]?: TEventCallback<E[K]>;\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<EventSpec> {\n  private __eventListeners: Record<keyof EventSpec, TEventCallback[]> =\n    {} as Record<keyof EventSpec, TEventCallback[]>;\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<K extends keyof EventSpec, E extends EventSpec[K]>(\n    eventName: K,\n    handler: TEventCallback<E>\n  ): VoidFunction;\n  on(handlers: EventRegistryObject<EventSpec>): VoidFunction;\n  on<K extends keyof EventSpec, E extends EventSpec[K]>(\n    arg0: K | EventRegistryObject<EventSpec>,\n    handler?: TEventCallback<E>\n  ): VoidFunction {\n    if (!this.__eventListeners) {\n      this.__eventListeners = {} as Record<keyof EventSpec, TEventCallback[]>;\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<K extends keyof EventSpec, E extends EventSpec[K]>(\n    eventName: K,\n    handler: TEventCallback<E>\n  ): VoidFunction;\n  once(handlers: EventRegistryObject<EventSpec>): VoidFunction;\n  once<K extends keyof EventSpec, E extends EventSpec[K]>(\n    arg0: K | EventRegistryObject<EventSpec>,\n    handler?: TEventCallback<E>\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<K, E>(\n        arg0,\n        function onceHandler(this: Observable<EventSpec>, ...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<K extends keyof EventSpec>(\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 an event listener\n   * @param {string} eventName event name (eg. 'after:render')\n   * @param {TEventCallback} handler event listener to unsubscribe\n   */\n  off<K extends keyof EventSpec>(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<EventSpec>): void;\n  /**\n   * unsubscribe all event listeners\n   */\n  off(): void;\n  off<K extends keyof EventSpec>(\n    arg0?: K | EventRegistryObject<EventSpec>,\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<K extends keyof EventSpec>(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","export const findIndexRight = <T>(\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","/**\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","/**\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","/**\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 = <T>(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';\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<TBase extends Constructor>(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<EventSpec> extends Observable<EventSpec> {\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<string, any>) {\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<string, any>, 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<TComposeMatrixArgs, 'flipX' | 'flipY'>\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<XY> = {}\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 { Pattern } from '../../Pattern';\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<HTMLImageElement>} the loaded image.\n */\nexport const loadImage = (\n  url: string,\n  { signal, crossOrigin = null }: LoadImageOptions = {}\n) =>\n  new Promise<HTMLImageElement>(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 BaseFabricObject | FabricObject | BaseFilter | Shadow | TFiller\n  >(\n    serializedObj: Record<string, any>,\n    instance: T\n  ) => void;\n};\n\n/**\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<FabricObject[]>}\n */\nexport const enlivenObjects = <\n  T extends BaseFabricObject | FabricObject | BaseFilter | Shadow | TFiller\n>(\n  objects: any[],\n  { signal, reviver = noop }: EnlivenObjectOptions = {}\n) =>\n  new Promise<T[]>((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<T> & {\n              fromObject(options: any, context: Abortable): Promise<T>;\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<Record<string, FabricObject | TFiller | null>>} the input object with enlived values\n */\nexport const enlivenObjectEnlivables = <\n  R = Record<string, FabricObject | TFiller | null>\n>(\n  serializedObject: any,\n  { signal }: Abortable = {}\n) =>\n  new Promise<R>((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      // clipPath or shadow or gradient\n      if (value.type) {\n        return enlivenObjects<FabricObject | Shadow | TFiller>([value], {\n          signal,\n        }).then(([enlived]) => {\n          instances.push(enlived);\n          return enlived;\n        });\n      }\n      // pattern\n      if (value.source) {\n        return classRegistry\n          .getClass<typeof Pattern>('pattern')\n          .fromObject(value, { signal })\n          .then((pattern: Pattern) => {\n            instances.push(pattern);\n            return pattern;\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 = <T extends Record<string, any>>(\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<T>);\n};\n\nexport const pickBy = <T extends Record<string, any>>(\n  source: T,\n  predicate: <K extends keyof T>(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<T>);\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 * <rgb()> =\n *  rgb( [ <percentage> | none ]{3} [ / [ <alpha-value> | none ] ]? )  |\n *  rgb( [ <number> | none ]{3} [ / [ <alpha-value> | none ] ]? )\n * <alpha-value> = <number> | <percentage>\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 * <hsl()> =\n *   hsl( [ <hue> | none ] [ <percentage> | none ] [ <percentage> | none ] [ / [ <alpha-value> | none ] ]? )\n *\n * <hue> =\n *   <number>  |\n *   <angle>\n *\n * <alpha-value> =\n *   <number>      |\n *   <percentage>\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{1,3})         // Hue: Matches one to three digits and captures it in a 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{1,3}%)        // Saturation: Matches one to three digits followed by a percentage sign and captures it in a 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{1,3}%)        // Lightness: Matches one to three digits followed by a percentage sign and captures it in a 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{1,3})\\s*[\\s|,]\\s*(\\d{1,3}%)\\s*[\\s|,]\\s*(\\d{1,3}%)\\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 { 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\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          ([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 <a href=\"https://rawgithub.com/mjijackson/mjijackson.github.com/master/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript.html\">https://github.com/mjijackson</a>\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\n    const h = (((parseFloat(match[1]) % 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 * 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, 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 `<rect ${svgColor} x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"${h}\"></rect>`;\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\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  // @ts-expect-error Set element to element parent, or 'host' in case of ShadowDOM\n  while (element && (element.parentNode || element.host)) {\n    // @ts-expect-error Set element to element parent, or 'host' in case of ShadowDOM\n    element = element.parentNode || element.host;\n    // @ts-expect-error because element is typed as HTMLElement but it can go up to document\n    if (element === doc) {\n      left = body.scrollLeft || docElement.scrollLeft || 0;\n      top = body.scrollTop || docElement.scrollTop || 0;\n    } else {\n      left += element!.scrollLeft || 0;\n      top += element!.scrollTop || 0;\n    }\n\n    if (element!.nodeType === 1 && element!.style.position === 'fixed') {\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","// 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<string, string>\n) {\n  const elementStyle = element.style;\n  if (!elementStyle) {\n    return;\n  } else if (typeof styles === 'string') {\n    element.style.cssText += ';' + styles;\n  } else {\n    Object.entries(styles).forEach(([property, value]) =>\n      elementStyle.setProperty(property, value)\n    );\n  }\n}\n","import { LEFT, NONE, TOP } from '../../constants';\nimport type { TSize } from '../../typedefs';\nimport {\n  getDocumentFromElement,\n  getWindowFromElement,\n  getScrollLeftTop,\n} from '../../util/dom_misc';\nimport { setStyle } from '../../util/dom_style';\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 function allowTouchScrolling(element: HTMLElement, allow: boolean) {\n  const touchAction = allow ? 'manipulation' : NONE;\n  setStyle(element, {\n    'touch-action': touchAction,\n    '-ms-touch-action': touchAction,\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<CSSDimensions>\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  let box = { left: 0, top: 0 };\n  const doc = element && getDocumentFromElement(element),\n    offset = { left: 0, top: 0 },\n    offsetAttributes = {\n      borderLeftWidth: LEFT,\n      borderTopWidth: TOP,\n      paddingLeft: LEFT,\n      paddingTop: TOP,\n    } as const;\n\n  if (!doc) {\n    return offset;\n  }\n  const elemStyle =\n    getWindowFromElement(element)?.getComputedStyle(element, null) || {};\n  for (const attr in offsetAttributes) {\n    // @ts-expect-error TS learn to iterate!\n    offset[offsetAttributes[attr]] += parseInt(elemStyle[attr], 10) || 0;\n  }\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<CSSDimensions>) {\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';\nimport type { StaticCanvas } from './StaticCanvas';\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 <caption>Default transform</caption>\n   * canvas.viewportTransform = [1, 0, 0, 1, 0, 0];\n   * @example <caption>Scale by 70% and translate toward bottom-right by 50, without skewing</caption>\n   * canvas.viewportTransform = [0.7, 0, 0, 0.7, 50, 50];\n   * @default\n   */\n  viewportTransform: TMat2D;\n}\n\nexport const staticCanvasDefaults: TOptions<StaticCanvasOptions> = {\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    EventSpec extends StaticCanvasEvents = StaticCanvasEvents\n  >\n  extends createCollectionMixin(CommonMethods<CanvasEvents>)\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  static ownDefaults = staticCanvasDefaults;\n\n  // reference to\n  protected declare __cleanupTask?: {\n    (): void;\n    kill: (reason?: any) => void;\n  };\n\n  static getDefaults(): Record<string, any> {\n    return StaticCanvas.ownDefaults;\n  }\n\n  constructor(\n    el?: string | HTMLCanvasElement,\n    options: TOptions<StaticCanvasOptions> = {}\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.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<TSize | CSSDimensions>,\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<TSize>),\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<CSSDimensions>,\n    options?: { cssOnly?: true; backstoreOnly?: false }\n  ): void;\n  setDimensions(\n    dimensions: Partial<TSize>,\n    options?: { backstoreOnly?: true; cssOnly?: false }\n  ): void;\n  setDimensions(dimensions: Partial<TSize>, options?: never): void;\n  setDimensions(\n    dimensions: Partial<TSize | CSSDimensions>,\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    const backgroundObject = this.backgroundImage,\n      overlayObject = this.overlayImage,\n      len = this._objects.length;\n\n    this.viewportTransform = vpt;\n    for (let i = 0; i < len; i++) {\n      const object = this._objects[i];\n      object.group || object.setCoords();\n    }\n    if (backgroundObject) {\n      backgroundObject.setCoords();\n    }\n    if (overlayObject) {\n      overlayObject.setCoords();\n    }\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 &lt;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) {\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) {\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 <caption>JSON without additional properties</caption>\n   * var json = canvas.toJSON();\n   * @example <caption>JSON with additional properties included</caption>\n   * var json = canvas.toJSON(['lockMovementX', 'lockMovementY', 'lockRotation', 'lockScalingX', 'lockScalingY']);\n   * @example <caption>JSON without default values</caption>\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 <caption>Normal SVG output</caption>\n   * var svg = canvas.toSVG();\n   * @example <caption>SVG output without preamble (without &lt;?xml ../>)</caption>\n   * var svg = canvas.toSVG({suppressPreamble: true});\n   * @example <caption>SVG output with viewBox attribute</caption>\n   * var svg = canvas.toSVG({\n   *   viewBox: {\n   *     x: 100,\n   *     y: 100,\n   *     width: 200,\n   *     height: 300\n   *   }\n   * });\n   * @example <caption>SVG output with different encoding (default: UTF-8)</caption>\n   * var svg = canvas.toSVG({encoding: 'ISO-8859-1'});\n   * @example <caption>Modify SVG output with reviver function</caption>\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(`<g clip-path=\"url(#${this.clipPath.clipPathId})\" >\\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('</g>\\n');\n    }\n    this._setSVGBgOverlayColor(markup, 'overlay');\n    this._setSVGBgOverlayImage(markup, 'overlayImage', reviver);\n\n    markup.push('</svg>');\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      '<?xml version=\"1.0\" encoding=\"',\n      options.encoding || 'UTF-8',\n      '\" standalone=\"no\" ?>\\n',\n      '<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" ',\n      '\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\\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      '<svg ',\n      'xmlns=\"http://www.w3.org/2000/svg\" ',\n      'xmlns:xlink=\"http://www.w3.org/1999/xlink\" ',\n      'version=\"1.1\" ',\n      'width=\"',\n      width,\n      '\" ',\n      'height=\"',\n      height,\n      '\" ',\n      viewBox,\n      'xml:space=\"preserve\">\\n',\n      '<desc>Created with Fabric.js ',\n      VERSION,\n      '</desc>\\n',\n      '<defs>\\n',\n      this.createSVGFontFacesMarkup(),\n      this.createSVGRefElementsMarkup(),\n      this.createSVGClipPathMarkup(options),\n      '</defs>\\n'\n    );\n  }\n\n  createSVGClipPathMarkup(options: TSVGExportOptions): string {\n    const clipPath = this.clipPath;\n    if (clipPath) {\n      clipPath.clipPathId = `CLIPPATH_${uid()}`;\n      return `<clipPath id=\"${clipPath.clipPathId}\" >\\n${clipPath.toClipPathSVG(\n        options.reviver\n      )}</clipPath>\\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<string, boolean> = {},\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<style type=\"text/css\"><![CDATA[\\n${fontListMarkup}]]></style>\\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        `<rect transform=\"${additionalTransform} translate(${finalWidth / 2},${\n          finalHeight / 2\n        })\" x=\"${filler.offsetX - finalWidth / 2}\" y=\"${\n          filler.offsetY - finalHeight / 2\n        }\" width=\"${\n          (repeat === 'repeat-y' || repeat === 'no-repeat') && isPattern(filler)\n            ? (filler.source as HTMLImageElement).width\n            : finalWidth\n        }\" height=\"${\n          (repeat === 'repeat-x' || repeat === 'no-repeat') && isPattern(filler)\n            ? (filler.source as HTMLImageElement).height\n            : finalHeight\n        }\" fill=\"url(#SVGID_${filler.id})\"></rect>\\n`\n      );\n    } else {\n      markup.push(\n        '<rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" ',\n        'fill=\"',\n        filler,\n        '\"',\n        '></rect>\\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<Canvas | StaticCanvas>} instance\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#deserialization}\n   * @see {@link http://jsfiddle.net/fabricjs/fmgXt/|jsFiddle demo}\n   * @example <caption>loadFromJSON</caption>\n   * canvas.loadFromJSON(json).then((canvas) => canvas.requestRenderAll());\n   * @example <caption>loadFromJSON with reviver</caption>\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<string, any>,\n    reviver?: EnlivenObjectOptions['reviver'],\n    { signal }: Abortable = {}\n  ): Promise<this> {\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<FabricObject>(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<this>)(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 <caption>Generate jpeg dataURL with lower quality</caption>\n   * var dataURL = canvas.toDataURL({\n   *   format: 'jpeg',\n   *   quality: 0.8\n   * });\n   * @example <caption>Generate cropped png dataURL (clipping of canvas)</caption>\n   * var dataURL = canvas.toDataURL({\n   *   format: 'png',\n   *   left: 100,\n   *   top: 100,\n   *   width: 200,\n   *   height: 200\n   * });\n   * @example <caption>Generate double scaled png dataURL</caption>\n   * var dataURL = canvas.toDataURL({\n   *   format: 'png',\n   *   multiplier: 2\n   * });\n   * @example <caption>Generate dataURL with objects that overlap a specified object</caption>\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      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.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    return canvasEl;\n  }\n\n  /**\n   * Waits until rendering has settled to destroy the canvas\n   * @returns {Promise<boolean>} 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<boolean>((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 `#<Canvas (${this.complexity()}): { objects: ${\n      this._objects.length\n    } }>`;\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 { Point } 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  if (points.length === 0) {\n    return {\n      left: 0,\n      top: 0,\n      width: 0,\n      height: 0,\n    };\n  }\n\n  const { min, max } = points.reduce(\n    ({ min, max }, curr) => {\n      return {\n        min: min.min(curr),\n        max: max.max(curr),\n      };\n    },\n    { min: new Point(points[0]), max: new Point(points[0]) }\n  );\n\n  const size = max.subtract(min);\n\n  return {\n    left: min.x,\n    top: min.y,\n    width: size.x,\n    height: size.y,\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 <caption>Send point from canvas plane to group plane</caption>\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 <caption>Move clip path from one object to another while preserving it's appearance as viewed by canvas/viewer</caption>\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 <caption>Clip an object's clip path with an existing object</caption>\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  BasicTransformEvent,\n  TModificationEvents,\n} from '../EventTypeDefs';\n\nexport const fireEvent = (\n  eventName: TModificationEvents,\n  options: BasicTransformEvent\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 transform.originX === CENTER && transform.originY === CENTER;\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 } 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 { NONE } 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 = `<clipPath id=\"${\n        clipPath.clipPathId\n      }\" >\\n${clipPath.toClipPathSVG(reviver)}</clipPath>\\n`;\n    }\n    if (absoluteClipPath) {\n      markup.push('<g ', shadowInfo, this.getSvgCommons(), ' >\\n');\n    }\n    markup.push(\n      '<g ',\n      this.getSvgTransform(false),\n      !absoluteClipPath ? shadowInfo + this.getSvgCommons() : '',\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('</g>\\n');\n    absoluteClipPath && markup.push('</g>\\n');\n    return reviver ? reviver(markup.join('')) : markup.join('');\n  }\n\n  addPaintOrder(this: FabricObjectSVGExportMixin & FabricObject) {\n    return this.paintFirst !== 'fill'\n      ? ` paint-order=\"${this.paintFirst}\" `\n      : '';\n  }\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<T>;\n\n  private declare readonly _onStart: VoidFunction;\n  private declare readonly _onChange: TOnAnimationChangeCallback<T, void>;\n  private declare readonly _onComplete: TOnAnimationChangeCallback<T, void>;\n  private declare readonly _abort: TAbortCallback<T>;\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<T>) {\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<number> {\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<number[]> {\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","export const capValue = (min: number, value: number, max: number) =>\n  Math.max(min, Math.min(value, max));\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 = <R>(\n  callback?: TOnAnimationChangeCallback<string, R>\n) =>\n  callback &&\n  ((rgba: TRGBAColorSource, valueProgress: number, durationProgress: number) =>\n    callback(new Color(rgba).toRgba(), valueProgress, durationProgress));\n\nexport class ColorAnimation extends AnimationBase<TRGBAColorSource> {\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<T extends number | number[] | TColorArg> =\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 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 { 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 { Point } from '../../Point';\nimport type { Group } from '../Group';\nimport type { TDegree, TOriginX, TOriginY } from '../../typedefs';\nimport { calcDimensionsMatrix, transformPoint } from '../../util/misc/matrix';\nimport { sizeAfterTransform } from '../../util/misc/objectTransforms';\nimport { degreesToRadians } from '../../util/misc/radiansDegreesConversion';\nimport { CommonMethods } from '../../CommonMethods';\nimport { resolveOrigin } from '../../util/misc/resolveOrigin';\nimport type { BaseProps } from './types/BaseProps';\nimport type { FillStrokeProps } from './types/FillStrokeProps';\nimport { CENTER, LEFT, TOP } from '../../constants';\n\nexport class ObjectOrigin<EventSpec>\n  extends CommonMethods<EventSpec>\n  implements BaseProps, Pick<FillStrokeProps, 'strokeWidth' | 'strokeUniform'>\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  declare originX: TOriginX;\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    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 coordinates of the object as if it has a different origin\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 type {\n  TBBox,\n  TCornerPoint,\n  TDegree,\n  TMat2D,\n  TOriginX,\n  TOriginY,\n} from '../../typedefs';\nimport { 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 { ObjectOrigin } from './ObjectOrigin';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport type { ControlProps } from './types/ControlProps';\nimport { resolveOrigin } from '../../util/misc/resolveOrigin';\n\ntype TMatrixCache = {\n  key: number[];\n  value: TMat2D;\n};\n\ntype TACoords = TCornerPoint;\n\nexport class ObjectGeometry<EventSpec extends ObjectEvents = ObjectEvents>\n  extends ObjectOrigin<EventSpec>\n  implements Pick<ControlProps, 'padding'>\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 <caption>Set object's bottom left corner to point (5,5) on canvas</caption>\n   * object.setXY(new Point(5, 5), 'left', 'bottom').\n   * @param {Point} point position in canvas 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<T extends ObjectGeometry>(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    console.log('getScaledWidth');\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    console.log('getScaledHeight');\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('scaleX', value);\n    this._set('scaleY', 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","import type { ObjectEvents } from '../../EventTypeDefs';\nimport type { Group } from '../Group';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { StaticCanvas } from '../../canvas/StaticCanvas';\nimport { ObjectGeometry } from './ObjectGeometry';\n\ntype TAncestor = StackedObject | Canvas | StaticCanvas;\ntype TCollection = Group | Canvas | StaticCanvas;\n\n/**\n * Strict: only ancestors that are objects (without canvas)\n */\nexport type Ancestors<Strict> = Strict extends true\n  ? [StackedObject | Group] | [StackedObject | Group, ...Group[]] | Group[]\n  :\n      | [StackedObject | Group | Canvas | StaticCanvas]\n      | [StackedObject | Group, Canvas | StaticCanvas]\n      | [StackedObject, ...Group[]]\n      | Group[]\n      | [StackedObject | Group, ...Group[], Canvas | StaticCanvas];\n\nexport type AncestryComparison<Strict> = {\n  /**\n   * common ancestors of `this` and`other`(may include`this` | `other`)\n   */\n  common: Ancestors<Strict>;\n  /**\n   * ancestors that are of `this` only\n   */\n  fork: Ancestors<Strict>;\n  /**\n   * ancestors that are of `other` only\n   */\n  otherFork: Ancestors<Strict>;\n};\n\nexport class StackedObject<\n  EventSpec extends ObjectEvents = ObjectEvents\n> extends ObjectGeometry<EventSpec> {\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      this.canvas === target ||\n      // walk up\n      (!!parent && parent.isDescendantOf(target)) ||\n      (!!group && group !== parent && group.isDescendantOf(target))\n    );\n  }\n\n  /**\n   *\n   * @param {boolean} [strict] returns only ancestors that are objects (without canvas)\n   * @returns {Ancestors} ancestors (excluding `ActiveSelection`) from bottom to top\n   */\n  getAncestors<T extends boolean>(strict?: T): Ancestors<T> {\n    const ancestors: TAncestor[] = [];\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    let parent: TAncestor | undefined = this;\n    do {\n      parent =\n        parent instanceof StackedObject\n          ? parent.parent ?? (!strict ? parent.canvas : undefined)\n          : undefined;\n      parent && ancestors.push(parent);\n    } while (parent);\n    return ancestors as Ancestors<T>;\n  }\n\n  /**\n   * Compare ancestors\n   *\n   * @param {StackedObject} other\n   * @param {boolean} [strict] finds only ancestors that are objects (without canvas)\n   * @returns {AncestryComparison} an object that represent the ancestry situation.\n   */\n  findCommonAncestors<T extends this, S extends boolean>(\n    other: T,\n    strict?: S\n  ): AncestryComparison<S> {\n    if (this === other) {\n      return {\n        fork: [],\n        otherFork: [],\n        common: [this, ...this.getAncestors(strict)],\n      } as AncestryComparison<S>;\n    }\n    const ancestors = this.getAncestors(strict);\n    const otherAncestors = other.getAncestors(strict);\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<S>;\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<S>;\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<S>;\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<S>;\n        }\n      }\n    }\n    // nothing shared\n    return {\n      fork: [this, ...ancestors],\n      otherFork: [other, ...otherAncestors],\n      common: [],\n    } as AncestryComparison<S>;\n  }\n\n  /**\n   *\n   * @param {StackedObject} other\n   * @param {boolean} [strict] checks only ancestors that are objects (without canvas)\n   * @returns {boolean}\n   */\n  hasCommonAncestors<T extends this>(other: T, strict?: boolean): boolean {\n    const commonAncestors = this.findCommonAncestors(other, strict);\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<T extends this>(other: T): boolean | undefined {\n    if (this === other) {\n      return undefined;\n    }\n    const ancestorData = this.findCommonAncestors(other);\n    if (!ancestorData) {\n      return undefined;\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    const firstCommonAncestor = ancestorData.common[0];\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","import type { TColorArg } from '../../color/typedefs';\nimport type { ObjectEvents } from '../../EventTypeDefs';\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 { StackedObject } from './StackedObject';\n\nexport abstract class AnimatableObject<\n  EventSpec extends ObjectEvents = ObjectEvents\n> extends StackedObject<EventSpec> {\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<string, number | number[] | TColorArg>} animatable map of keys and end values\n   * @param {Partial<AnimationOptions<T>>} options\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#animation}\n   * @return {Record<string, TAnimation<T>>} 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<T extends number | number[] | TColorArg>(\n    animatable: Record<string, T>,\n    options?: Partial<AnimationOptions<T>>\n  ): Record<string, TAnimation<T>> {\n    return Object.entries(animatable).reduce((acc, [key, endValue]) => {\n      acc[key] = this._animate(key, endValue, options);\n      return acc;\n    }, {} as Record<string, TAnimation<T>>);\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<T extends number | number[] | TColorArg>(\n    key: string,\n    endValue: T,\n    options: Partial<AnimationOptions<T>> = {}\n  ): TAnimation<T> {\n    const path = key.split('.');\n    const propIsColor = (\n      this.constructor as typeof AnimatableObject\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<string, any>, 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<T>;\n\n    return (\n      propIsColor\n        ? animateColor(animationOptions as ColorAnimationOptions)\n        : animate(\n            animationOptions as ValueAnimationOptions | ArrayAnimationOptions\n          )\n    ) as TAnimation<T>;\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 commaWsp = String.raw`(?:\\s+,?\\s*|,\\s*|$)`;\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 { 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 = () =>\n  new RegExp(\n    '(?:\\\\s|^)' +\n      shadowOffsetRegex +\n      shadowOffsetRegex +\n      '(' +\n      reNum +\n      '?(?:px)?)?(?:\\\\s?|$)(?:$|\\\\s)'\n  );\n\nexport const shadowDefaultValues: Partial<TClassProperties<Shadow>> = {\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<TClassProperties<Shadow>>);\n  constructor(svgAttribute: string);\n  constructor(arg0: string | Partial<TClassProperties<Shadow>>) {\n    const options: Partial<TClassProperties<Shadow>> =\n      typeof arg0 === 'string' ? Shadow.parseShadow(arg0) : arg0;\n    Object.assign(this, (this.constructor as typeof Shadow).ownDefaults);\n    for (const prop in options) {\n      // @ts-expect-error for loops are so messy in TS\n      this[prop] = options[prop];\n    }\n\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      regex = reOffsetsAndBlur(),\n      [, offsetX = 0, offsetY = 0, blur = 0] = (\n        regex.exec(shadowStr) || []\n      ).map((value) => parseFloat(value) || 0),\n      color = (shadowStr.replace(regex, '') || '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 `<filter id=\"SVGID_${this.id}\" y=\"-${fBoxY}%\" height=\"${\n      100 + 2 * fBoxY\n    }%\" x=\"-${fBoxX}%\" width=\"${\n      100 + 2 * fBoxX\n    }%\" >\\n\\t<feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"${toFixed(\n      this.blur ? this.blur / 2 : 0,\n      config.NUM_FRACTION_DIGITS\n    )}\"></feGaussianBlur>\\n\\t<feOffset dx=\"${toFixed(\n      offset.x,\n      config.NUM_FRACTION_DIGITS\n    )}\" dy=\"${toFixed(\n      offset.y,\n      config.NUM_FRACTION_DIGITS\n    )}\" result=\"oBlur\" ></feOffset>\\n\\t<feFlood flood-color=\"${color.toRgb()}\" flood-opacity=\"${color.getAlpha()}\"/>\\n\\t<feComposite in2=\"oBlur\" operator=\"in\" />\\n\\t<feMerge>\\n\\t\\t<feMergeNode></feMergeNode>\\n\\t\\t<feMergeNode in=\"SourceGraphic\"></feMergeNode>\\n\\t</feMerge>\\n</filter>\\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<TClassProperties<Shadow>>) {\n    return new this(options);\n  }\n}\n\nclassRegistry.setClass(Shadow, 'shadow');\n","export const cloneDeep = <T extends object>(object: T): T =>\n  JSON.parse(JSON.stringify(object));\n","import { TOP, LEFT } 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  'scaleX',\n  'scaleY',\n  'flipX',\n  'flipY',\n  'originX',\n  'originY',\n  'angle',\n  'opacity',\n  'globalCompositeOperation',\n  'shadow',\n  'visible',\n  'skewX',\n  'skewY',\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<FabricObject>\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<InteractiveFabricObject>\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","import { cache } from '../../cache';\nimport { config } from '../../config';\nimport {\n  ALIASING_LIMIT,\n  CENTER,\n  iMatrix,\n  LEFT,\n  TOP,\n  VERSION,\n} from '../../constants';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport { AnimatableObject } from './AnimatableObject';\nimport { Point, XY } 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 { cloneDeep } from '../../util/internals/cloneDeep';\nimport { capValue } from '../../util/misc/capValue';\nimport { createCanvasElement, toDataURL } from '../../util/misc/dom';\nimport {\n  invertTransform,\n  multiplyTransformMatrices,\n  qrDecompose,\n} 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';\n\nexport type TCachedFabricObject<T extends FabricObject = FabricObject> = 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\n  id?: string;\n  /** Function to create the output canvas to export onto */\n  canvasProvider?: <T extends StaticCanvas>(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<ObjectProps> = Partial<ObjectProps>,\n    SProps extends SerializedObjectProps = SerializedObjectProps,\n    EventSpec extends ObjectEvents = ObjectEvents\n  >\n  extends AnimatableObject<EventSpec>\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  //canvasx specific\n  declare id: string;\n  declare locked: 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   * Size of the cache canvas, width\n   * since 1.7.0\n   * @type number\n   * @default undefined\n   * @private\n   */\n  declare cacheWidth?: number;\n\n  /**\n   * Size of the cache canvas, height\n   * since 1.7.0\n   * @type number\n   * @default undefined\n   * @private\n   */\n  declare cacheHeight?: number;\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<string, any> {\n    return { ...FabricObject.ownDefaults };\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 = '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 because is very hard to catch all the ways in which a type value\n   * could be set in the instance\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 = {} as Props) {\n    super();\n    Object.assign(\n      this,\n      (this.constructor as typeof FabricObject).getDefaults()\n    );\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 =\n        width !== this.cacheWidth || height !== this.cacheHeight,\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      this.cacheWidth = width;\n      this.cacheHeight = height;\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<string, any> = {}) {\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   * 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 NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS,\n      clipPathData =\n        this.clipPath && !this.clipPath.excludeFromExport\n          ? {\n              ...this.clipPath.toObject(propertiesToInclude),\n              inverted: this.clipPath.inverted,\n              absolutePositioned: this.clipPath.absolutePositioned,\n            }\n          : null,\n      object = {\n        ...pick(this, propertiesToInclude as (keyof this)[]),\n        type: (this.constructor as typeof FabricObject).type,\n        version: VERSION,\n        originX: this.originX,\n        originY: this.originY,\n        left: toFixed(this.left, NUM_FRACTION_DIGITS),\n        top: toFixed(this.top, NUM_FRACTION_DIGITS),\n        width: toFixed(this.width, NUM_FRACTION_DIGITS),\n        height: toFixed(this.height, NUM_FRACTION_DIGITS),\n        fill: isSerializableFiller(this.fill)\n          ? this.fill.toObject()\n          : this.fill,\n        stroke: isSerializableFiller(this.stroke)\n          ? this.stroke.toObject()\n          : this.stroke,\n        strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS),\n        strokeDashArray: this.strokeDashArray\n          ? this.strokeDashArray.concat()\n          : this.strokeDashArray,\n        strokeLineCap: this.strokeLineCap,\n        strokeDashOffset: this.strokeDashOffset,\n        strokeLineJoin: this.strokeLineJoin,\n        strokeUniform: this.strokeUniform,\n        strokeMiterLimit: toFixed(this.strokeMiterLimit, NUM_FRACTION_DIGITS),\n        scaleX: toFixed(this.scaleX, NUM_FRACTION_DIGITS),\n        scaleY: toFixed(this.scaleY, NUM_FRACTION_DIGITS),\n        angle: toFixed(this.angle, NUM_FRACTION_DIGITS),\n        flipX: this.flipX,\n        flipY: this.flipY,\n        opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS),\n        shadow:\n          this.shadow && this.shadow.toObject\n            ? this.shadow.toObject()\n            : this.shadow,\n        visible: this.visible,\n        backgroundColor: this.backgroundColor,\n        fillRule: this.fillRule,\n        paintFirst: this.paintFirst,\n        globalCompositeOperation: this.globalCompositeOperation,\n        skewX: toFixed(this.skewX, NUM_FRACTION_DIGITS),\n        skewY: toFixed(this.skewY, NUM_FRACTION_DIGITS),\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<T extends object>(object: T): Partial<T> {\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   * 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 === 'scaleX' || key === 'scaleY') {\n      value = this._constrainScale(value);\n    }\n    if (key === 'scaleX' && 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    this.cacheWidth = 0;\n    this.cacheHeight = 0;\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    if (\n      this._cacheCanvas &&\n      this._cacheContext &&\n      !skipCanvas &&\n      this._updateCacheCanvas()\n    ) {\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 (this._cacheCanvas && this._cacheContext && !skipCanvas) {\n          const width = this.cacheWidth! / this.zoomX!;\n          const height = this.cacheHeight! / this.zoomY!;\n          this._cacheContext.clearRect(-width / 2, -height / 2, width, height);\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<this, 'fill'>) {\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<FabricObject>}\n   */\n  clone(propertiesToInclude?: string[]): Promise<this> {\n    const objectForm = this.toObject(propertiesToInclude);\n    return (this.constructor as typeof FabricObject).fromObject(\n      objectForm\n    ) as unknown as Promise<this>;\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<typeof FabricImage>('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 <canvas> 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  /**\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<FabricObject>}\n   */\n  static _fromObject<S extends FabricObject>(\n    { type, ...object }: Record<string, unknown>,\n    { extraParam, ...options }: Abortable & { extraParam?: string } = {}\n  ): Promise<S> {\n    return enlivenObjectEnlivables<any>(cloneDeep(object), options).then(\n      (enlivedMap) => {\n        const allOptions = { ...options, ...enlivedMap };\n        // from the resulting enlived options, extract options.extraParam to arg0\n        // to avoid accidental overrides later\n        if (extraParam) {\n          const { [extraParam]: arg0, ...rest } = allOptions;\n          // @ts-expect-error different signature\n          return new this(arg0, rest);\n        } else {\n          return new this(allOptions);\n        }\n      }\n    ) as Promise<S>;\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<FabricObject>}\n   */\n  static fromObject<T extends TOptions<SerializedObjectProps>>(\n    object: T,\n    options?: Abortable\n  ) {\n    return this._fromObject(object, options);\n  }\n\n  getText() {\n    //@ts-ignore\n    return this.text & this.text?.join('\\n');\n  }\n\n  saveData(type: string, fields: string[]): boolean {\n    return true;\n  }\n  transformPointToCanvas(point: XY) {\n    const self = this;\n    const toTransformPoint = new Point(point);\n    const transformedPoint = toTransformPoint.transform(\n      self.calcTransformMatrix()\n    );\n    return transformedPoint;\n  }\n  transformPointFromCanvas(point: XY) {\n    const self = this;\n    const toTransformPoint = new Point(point);\n    const transformedPoint = toTransformPoint.transform(\n      invertTransform(self.calcTransformMatrix())\n    );\n    return transformedPoint;\n  }\n\n  transformPointToViewport(point: XY) {\n    const self = this;\n    const toTransformPoint = new Point(point);\n\n    const mCanvas = self.canvas?.viewportTransform;\n    const mObject = self.calcTransformMatrix();\n    const matrix = mCanvas\n      ? multiplyTransformMatrices(mCanvas, mObject)\n      : mObject;\n\n    const transformedPoint = toTransformPoint.transform(matrix);\n    return transformedPoint;\n  }\n}\n\n// import '../canvasx/X_Object';\n\n// FabricObject.prototype.helloWorld = function () {\n//   console.log('Hello World');\n// };\n\n// Object.assign(FabricObject.prototype, FabricObject2.prototype);\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<T>} actionHandler the function to wrap\n * @param {object} extraEventInfo extra information to pas to the event handler\n * @return {TransformActionHandler<T>} a function with an action handler signature\n */\nexport const wrapWithFireEvent = <\n  T extends Transform,\n  P extends object = Record<string, never>\n>(\n  eventName: TModificationEvents,\n  actionHandler: TransformActionHandler<T>,\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<T>;\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<T extends Transform>(\n  actionHandler: TransformActionHandler<T>\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<T>;\n}\n","import type { TransformActionHandler } from '../EventTypeDefs';\nimport { CENTER, LEFT, RIGHT } from '../constants';\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    transform.originX === CENTER ||\n    (transform.originX === RIGHT && localPoint.x < 0) ||\n    (transform.originX === LEFT && 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 = Math.ceil(\n        Math.abs((localPoint.x * multiplier) / target.scaleX) - strokePadding\n      );\n    target.set('width', Math.max(newWidth, 0));\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 { 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 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<Control>) {\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  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';\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('scaleX', scaleX);\n    !isLocked(target, 'lockScalingY') && target.set('scaleY', scaleY);\n  } else {\n    // forbidden cases already handled on top here.\n    by === 'x' && target.set('scaleX', scaleX);\n    by === 'y' && target.set('scaleY', 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<ScaleTransform> = (\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<ScaleTransform> = (\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<ScaleTransform> = (\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 { CENTER } 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: 'scaleX',\n    skew: 'skewX',\n    lockSkewing: 'lockSkewingX',\n    origin: 'originX',\n    flip: 'flipX',\n  },\n  y: {\n    counterAxis: 'x',\n    scale: 'scaleY',\n    skew: 'skewY',\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('scaleX', 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<SkewTransform>(\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 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 ? 'skewX' : 'scaleY';\n  }\n  if (control.y === 0) {\n    // then is scaleY or skewX\n    return isAlternative ? 'skewY' : 'scaleX';\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","//@ts-nocheck\nimport { changeWidth } from './changeWidth';\nimport { Control } from './Control';\nimport { scaleCursorStyleHandler, scalingEqually } from './scale';\nimport {\n  scaleOrSkewActionName,\n  scaleSkewCursorStyleHandler,\n  scalingYOrSkewingX,\n} from './scaleSkew';\nimport { renderCircleControl } from './controlRendering';\n\n// use this function if you want to generate new controls for every instance\nexport const createObjectDefaultControls = () => ({\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 createObjectDefaultNoRotateControls = () => ({\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\nexport const createObjectImageControls = () => ({\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});\nexport const createObjectFileControls = () => ({\n  tl: new Control({\n    x: -0.5,\n    y: -0.5,\n    cursorStyleHandler: scaleCursorStyleHandler,\n    actionHandler: scalingEqually,\n  }),\n  br: new Control({\n    x: 0.5,\n    y: 0.5,\n    cursorStyleHandler: scaleCursorStyleHandler,\n    actionHandler: scalingEqually,\n  }),\n});\nexport const createObjectArrowControls = () => ({\n  tl: new Control({\n    x: -0.5,\n    y: -0.5,\n    cursorStyle: 'crosshair',\n    cursorStyleHandler: scaleCursorStyleHandler,\n    actionHandler: scalingEqually,\n  }),\n  br: new Control({\n    x: 0.5,\n    y: 0.5,\n    cursorStyleHandler: scaleCursorStyleHandler,\n    actionHandler: scalingEqually,\n  }),\n});\n\nexport const createObjectConnectorControls = () => {\n  function renderCustomControl(ctx, left, top, fabricObject) {\n    const styleOverride1 = {\n      cornerSize: 10,\n      lineWidth: 2,\n    };\n    renderCircleControl.call(\n      fabricObject,\n      ctx,\n      left,\n      top,\n      styleOverride1,\n      fabricObject\n    );\n  }\n  return {\n    mtaStart: new Control({\n      x: 0,\n      y: -0.5,\n      offsetX: 0,\n      offsetY: -20,\n      render: renderCustomControl,\n      mouseDownHandler: (eventData, transformData) => {\n        // this.controlMousedownProcess(transformData, 0.0, -0.5);\n        return true;\n      },\n      name: 'mtaStart',\n    }),\n    mbaStart: new Control({\n      x: 0,\n      y: 0.5,\n      offsetX: 0,\n      offsetY: 20,\n      render: renderCustomControl,\n      mouseDownHandler: (eventData, transformData) => {\n        // this.controlMousedownProcess(transformData, 0.0, 0.5);\n        return true;\n      },\n      name: 'mbaStart',\n    }),\n    mlaStart: new Control({\n      x: -0.5,\n      y: 0,\n      offsetX: -20,\n      offsetY: 0,\n      render: renderCustomControl,\n      mouseDownHandler: (eventData, transformData) => {\n        // this.controlMousedownProcess(transformData, -0.5, 0.0);\n        return true;\n      },\n      name: 'mlaStart',\n    }),\n    mraStart: new Control({\n      x: 0.5,\n      y: 0,\n      offsetX: 20,\n      offsetY: 0,\n      render: renderCustomControl,\n      mouseDownHandler: (eventData, transformData) => {\n        // this.controlMousedownProcess(transformData, 0.5, 0.0);\n        return true;\n      },\n      name: 'mraStart',\n    }),\n  };\n};\n\nexport const createResizeControls = () => ({\n  mr: new Control({\n    x: 0.5,\n    y: 0,\n    offsetX: 20,\n    offsetY: 0,\n    actionHandler: changeWidth,\n    cursorStyleHandler: scaleSkewCursorStyleHandler,\n    actionName: 'resizing',\n  }),\n  ml: new Control({\n    x: -0.5,\n    y: 0,\n    offsetX: -20,\n    offsetY: 0,\n    actionHandler: changeWidth,\n    cursorStyleHandler: scaleSkewCursorStyleHandler,\n    actionName: 'resizing',\n  }),\n  mb: new Control({\n    x: 0,\n    y: 0.5,\n    offsetX: 0,\n    offsetY: 20,\n    cursorStyleHandler: scaleSkewCursorStyleHandler,\n    actionHandler: scalingYOrSkewingX,\n    getActionName: scaleOrSkewActionName,\n  }),\n\n  mt: new Control({\n    x: 0,\n    y: -0.5,\n    offsetX: 0,\n    offsetY: -20,\n    cursorStyleHandler: scaleSkewCursorStyleHandler,\n    actionHandler: scalingYOrSkewingX,\n    getActionName: scaleOrSkewActionName,\n  }),\n});\n\nexport const createResizeControlsForText = () => ({\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  ...createResizeControlsForText(),\n});\nexport const createRectNotesDefaultControls = () => ({\n  ...createObjectDefaultNoRotateControls(),\n  ...createObjectConnectorControls(),\n});\nexport const createShapeNotesDefaultControls = () => ({\n  ...createObjectDefaultNoRotateControls(),\n  ...createResizeControls(),\n  ...createObjectConnectorControls,\n});\nexport const createPathDefaultControls = () => ({\n  ...createObjectDefaultNoRotateControls(),\n});\nexport const createImageDefaultControls = () => ({\n  ...createObjectImageControls(),\n});\nexport const createFileDefaultControls = () => ({\n  ...createObjectFileControls(),\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';\n\nexport type TOCoord = Point & {\n  corner: TCornerPoint;\n  touchCorner: TCornerPoint;\n};\n\nexport type TControlSet = Record<string, Control>;\n\nexport type TBorderRenderingStyleOverride = Partial<\n  Pick<InteractiveFabricObject, 'borderColor' | 'borderDashArray'>\n>;\n\nexport type TStyleOverride = ControlRenderingStyleOverride &\n  TBorderRenderingStyleOverride &\n  Partial<\n    Pick<InteractiveFabricObject, 'hasBorders' | 'hasControls'> & {\n      forActiveSelection: boolean;\n    }\n  >;\n\nexport class InteractiveFabricObject<\n  Props extends TFabricObjectProps = Partial<FabricObjectProps>,\n  SProps extends SerializedObjectProps = SerializedObjectProps,\n  EventSpec extends ObjectEvents = ObjectEvents\n>\n  extends FabricObject<Props, SProps, EventSpec>\n  implements FabricObjectProps {\n\n\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<string, TOCoord>;\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<string, boolean>;\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<string, any> {\n    return {\n      ...super.getDefaults(),\n      controls: createObjectDefaultControls(),\n      ...InteractiveFabricObject.ownDefaults,\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 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<string, TOCoord>}\n   */\n  calcOCoords(): Record<string, TOCoord> {\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<string, TOCoord> = {};\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   * @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.setCoords();\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<string, boolean>} [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<string, boolean> = {}) {\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<T extends Constructor, S extends Constructor>(\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<T & S> };\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// TODO somehow we have to make a tree-shakeable import\n// eslint-disable-next-line @typescript-eslint/no-empty-interface, @typescript-eslint/no-unused-vars\nexport interface FabricObject<\n  Props extends TFabricObjectProps = Partial<FabricObjectProps>,\n  SProps extends SerializedObjectProps = SerializedObjectProps,\n  EventSpec extends ObjectEvents = ObjectEvents\n> extends FabricObjectSVGExportMixin {}\n\nexport class FabricObject<\n  Props extends TFabricObjectProps = Partial<FabricObjectProps>,\n  SProps extends SerializedObjectProps = SerializedObjectProps,\n  EventSpec extends ObjectEvents = ObjectEvents\n> extends InteractiveFabricObject<Props, SProps, EventSpec> {}\n\napplyMixins(FabricObject, [FabricObjectSVGExportMixin]);\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","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';\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","/**\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, '&amp;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&apos;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;');\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 { cloneDeep } from '../internals/cloneDeep';\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 = cloneDeep(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 cloneDeep(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","/**\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<string, string> = {};\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\nexport const cleanupSvgAttribute = (attributeValue: string) =>\n  attributeValue\n    .replace(new RegExp(`(${reNum})`, 'gi'), ' $1 ')\n    // replace annoying commas and arbitrary whitespace with single spaces\n    .replace(/,/gi, ' ')\n    .replace(/\\s+/gi, ' ');\n","import { 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);\n// == end transform regexp\nconst reTransform = new RegExp(transform, 'g');\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(reTransform)) {\n    const transformMatch = new RegExp(transform).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 'skewX':\n        matrix = createSkewXMatrix(arg0);\n        break;\n      case 'skewY':\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 } from '../constants';\n\nexport function normalizeValue(\n  attr: string,\n  value: any,\n  parentAttributes: Record<string, any>,\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 (attr === 'href' || attr === 'xlink:href' || attr === 'font') {\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<string, any>\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<string, any>,\n  oStyle: Record<string, any>\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<string, any>\n): void {\n  style\n    .replace(/;\\s*$/, '')\n    .split(';')\n    .forEach((chunk) => {\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<string, any> {\n  const oStyle: Record<string, any> = {},\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<string, any>\n): Record<string, any> {\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<string, any> {\n  if (!element) {\n    return {};\n  }\n\n  let parentAttributes: Record<string, string> = {},\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<string, string> = {\n    ...attributes.reduce<Record<string, string>>((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<TClassProperties<Rect>> = {\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<RectProps> = Partial<RectProps>,\n    SProps extends SerializedRectProps = SerializedRectProps,\n    EventSpec extends ObjectEvents = ObjectEvents\n  >\n  extends FabricObject<Props, SProps, EventSpec>\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<string, any> {\n    return {\n      ...super.getDefaults(),\n      ...Rect.ownDefaults,\n    };\n  }\n\n  /**\n   * Constructor\n   * @param {Object} [options] Options object\n   * @return {Object} thisArg\n   */\n  constructor(options: Props) {\n    super(options);\n    this._initRxRy();\n  }\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<Props & TClassProperties<this>, keyof SProps>,\n    K extends keyof T = never\n  >(propertiesToInclude: K[] = []): Pick<T, K> & 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      '<rect ',\n      'COMMON_PARTS',\n      `x=\"${-width / 2}\" y=\"${\n        -height / 2\n      }\" rx=\"${rx}\" ry=\"${ry}\" width=\"${width}\" height=\"${height}\" />\\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(context: StrictLayoutContext) {\n    return (\n      context.type === LAYOUT_TYPE_INITIALIZATION ||\n      context.type === LAYOUT_TYPE_IMPERATIVE ||\n      (!!context.prevStrategy && context.strategy !== context.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<LayoutStrategyResult, 'center' | 'size'>\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    if (context.type === LAYOUT_TYPE_IMPERATIVE && context.overrides) {\n      return context.overrides;\n    }\n    if (objects.length === 0) {\n      return;\n    }\n    const { target } = context;\n    const { left, top, width, height } = makeBoundingBoxFromPoints(\n      objects\n        .map((object) => getObjectBounds(target, object))\n        .reduce<Point[]>((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 (context.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 { CENTER, iMatrix } 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<FabricObject, VoidFunction[]>;\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<StrictLayoutContext>} context\n   * @returns {VoidFunction[]} disposers remove the handlers\n   */\n  protected attachHandlers(\n    object: FabricObject,\n    context: RegistrationContext & Partial<StrictLayoutContext>\n  ): VoidFunction[] {\n    const { target } = context;\n    return (\n      [\n        'modified',\n        'moving',\n        'resizing',\n        'rotating',\n        'scaling',\n        'skewing',\n        'changed',\n        'modifyPoly',\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<StrictLayoutContext>\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<StrictLayoutContext>\n  ) {\n    (this._subscriptions.get(object) || []).forEach((d) => d());\n    this._subscriptions.delete(object);\n  }\n\n  unsubscribeTargets(\n    context: RegistrationContext & Partial<StrictLayoutContext>\n  ) {\n    context.targets.forEach((object) => this.unsubscribe(object, context));\n  }\n\n  subscribeTargets(\n    context: RegistrationContext & Partial<StrictLayoutContext>\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<LayoutResult> | undefined {\n    const { target } = context;\n\n    const result = context.strategy.calcLayoutResult(\n      context,\n      target.getObjects()\n    );\n\n    if (!result) {\n      return;\n    }\n\n    const prevCenter =\n      context.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        context.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<LayoutResult>\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<LayoutResult>\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<LayoutResult>,\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    this._subscriptions.forEach((disposers) => disposers.forEach((d) => d()));\n    this._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<TClassProperties<Group>> = {\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<GroupProps, SerializedGroupProps, GroupEvents>\n  )\n  implements GroupProps {\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<string, any> = groupDefaultValues;\n  private __objectSelectionTracker: (ev: ObjectEvents['selected']) => void;\n  private __objectSelectionDisposer: (ev: ObjectEvents['deselected']) => void;\n\n  static getDefaults(): Record<string, any> {\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<GroupProps> = {}) {\n    // @ts-expect-error options error\n    super(options);\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<T extends boolean>(\n    selected: T,\n    { target: object }: 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<this>,\n      keyof SerializedGroupProps\n    >,\n    K extends keyof T = never\n  >(propertiesToInclude: K[] = []): Pick<T, K> & 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 `#<Group: (${this.complexity()})>`;\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 = ['<g ', 'COMMON_PARTS', ' >\\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('</g>\\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<Group>}\n   */\n  static fromObject<T extends TOptions<SerializedGroupProps>>(\n    { type, objects = [], layoutManager, ...options }: T,\n    abortable?: Abortable\n  ) {\n    return Promise.all([\n      enlivenObjects<FabricObject>(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<typeof LayoutManager>(\n          layoutManager.type\n        );\n        const strategyClass = classRegistry.getClass<typeof FitContentLayout>(\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<GroupProps>\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\n/**\n * p for param\n * using \"bad naming\" here because it makes the regex much easier to read\n */\nconst p = `(${reNum})`;\n\nconst reMoveToCommand = `(M) (?:${p} ${p} ?)+`;\n\nconst reLineCommand = `(L) (?:${p} ${p} ?)+`;\n\nconst reHorizontalLineCommand = `(H) (?:${p} ?)+`;\n\nconst reVerticalLineCommand = `(V) (?:${p} ?)+`;\n\nconst reClosePathCommand = String.raw`(Z)\\s*`;\n\nconst reCubicCurveCommand = `(C) (?:${p} ${p} ${p} ${p} ${p} ${p} ?)+`;\n\nconst reCubicCurveShortcutCommand = `(S) (?:${p} ${p} ${p} ${p} ?)+`;\n\nconst reQuadraticCurveCommand = `(Q) (?:${p} ${p} ${p} ${p} ?)+`;\n\nconst reQuadraticCurveShortcutCommand = `(T) (?:${p} ${p} ?)+`;\n\nconst reArcCommand = `(A) (?:${p} ${p} ${p} ([01]) ?([01]) ${p} ${p} ?)+`;\n\nexport const rePathCommand =\n  `(?:(?:${reMoveToCommand})` +\n  `|(?:${reLineCommand})` +\n  `|(?:${reHorizontalLineCommand})` +\n  `|(?:${reVerticalLineCommand})` +\n  `|(?:${reClosePathCommand})` +\n  `|(?:${reCubicCurveCommand})` +\n  `|(?:${reCubicCurveShortcutCommand})` +\n  `|(?:${reQuadraticCurveCommand})` +\n  `|(?:${reQuadraticCurveShortcutCommand})` +\n  `|(?:${reArcCommand}))`;\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  TParsedCubicCurveCommand,\n  TPathSegmentInfo,\n  TPointAngle,\n  TSimpleParsedCommand,\n  TSimplePathData,\n  TPathSegmentCommandInfo,\n  TComplexParsedCommand,\n  TPathSegmentInfoCommon,\n  TEndPathInfo,\n  TParsedArcCommand,\n} from './typedefs';\nimport type { XY } from '../../Point';\nimport { Point } from '../../Point';\nimport { rePathCommand } from './regex';\nimport { cleanupSvgAttribute } from '../internals/cleanupSvgAttribute';\n\n/**\n * Commands that may be repeated\n */\nconst repeatedCommands: Record<string, string | undefined> = {\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): TParsedCubicCurveCommand => {\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 = new Array(segments),\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<keyof TPathSegmentCommandInfo> = {\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 = <TPathSegmentInfoCommon<'M'>>basicInfo;\n        tempInfo.x = x2 = x1 = current[1];\n        tempInfo.y = y2 = y1 = current[2];\n        break;\n      case 'L':\n        tempInfo = <TPathSegmentInfoCommon<'L'>>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 = <TCurveInfo<'C'>>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 = <TCurveInfo<'Q'>>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 = <TEndPathInfo>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\n/**\n *\n * @param {string} pathString\n * @return {TComplexPathData} An array of SVG path commands\n * @example <caption>Usage</caption>\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 *\n */\nexport const parsePath = (pathString: string): TComplexPathData => {\n  // clean the string\n  // add spaces around the numbers\n  pathString = cleanupSvgAttribute(pathString);\n\n  const res: TComplexPathData = [];\n  for (const match of pathString.matchAll(new RegExp(rePathCommand, 'gi'))) {\n    let matchStr = match[0];\n    const chain: TComplexPathData = [];\n    let paramArr: RegExpExecArray | null;\n    do {\n      paramArr = new RegExp(rePathCommand, 'i').exec(matchStr);\n      if (!paramArr) {\n        break;\n      }\n      // ignore undefined match groups\n      const filteredGroups = paramArr.filter((g) => g);\n      // remove the first element from the match array since it's just the whole command\n      filteredGroups.shift();\n      // if we can't parse the number, just interpret it as a string\n      // (since it's probably the path command)\n      const command = filteredGroups.map((g) => {\n        const numParse = Number.parseFloat(g);\n        if (Number.isNaN(numParse)) {\n          return g;\n        } else {\n          return numParse;\n        }\n      });\n      chain.push(command as any);\n      // stop now if it's a z command\n      if (filteredGroups.length <= 1) {\n        break;\n      }\n      // remove the last part of the chained command\n      filteredGroups.shift();\n      // ` ?` is to support commands with optional spaces between flags\n      matchStr = matchStr.replace(\n        new RegExp(`${filteredGroups.join(' ?')} ?$`),\n        ''\n      );\n    } while (paramArr);\n    // add the chain, convert multiple m's to l's in the process\n    chain.reverse().forEach((c, idx) => {\n      const transformed = repeatedCommands[c[0]];\n      if (idx > 0 && (transformed == 'l' || transformed == 'L')) {\n        c[0] = transformed;\n      }\n      res.push(c);\n    });\n  }\n  return res;\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","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","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 } 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('scaleX', scaleX);\n    object.set('scaleY', 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 {\n  allowTouchScrolling,\n  makeElementUnselectable,\n  setCSSDimensions,\n} from './util';\nimport type { CanvasItem } from './StaticCanvasDOMManager';\nimport { StaticCanvasDOMManager } from './StaticCanvasDOMManager';\nimport { setCanvasDimensions } from './util';\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    });\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    { allowTouchScrolling: allow }: { allowTouchScrolling: boolean }\n  ) {\n    setStyle(element, {\n      position: 'absolute',\n      left: '0',\n      top: '0',\n    });\n    allowTouchScrolling(element, allow);\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<CSSDimensions>): 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   * <b>Backwards incompatibility note:</b> 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   * <b>Backwards incompatibility note:</b> 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<CanvasOptions>;\n\nexport const canvasDefaults: TOptions<CanvasOptions> = {\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 { BOTTOM, CENTER, LEFT, RIGHT, TOP } 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<EventSpec extends CanvasEvents = CanvasEvents>\n  extends StaticCanvas<EventSpec>\n  implements Omit<CanvasOptions, 'enablePointerEvents'>\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<string, any> {\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 === 'scaleX' ||\n      action === 'scaleY' ||\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 &lt;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      object.setCoords();\n    }\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      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<string, any> {\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<typeof instance> {\n    const { group } = instance;\n    if (group && isActiveSelection(group) && this._activeObject === group) {\n      const layoutProps = [\n        'angle',\n        'flipX',\n        'flipY',\n        LEFT,\n        'scaleX',\n        'scaleY',\n        'skewX',\n        'skewY',\n        TOP,\n      ] as (keyof typeof instance)[];\n      const originalValues = pick<typeof instance>(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';\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<HTMLElement['addEventListener']>\n) => el.addEventListener(...args);\nconst removeListener = (\n  el: HTMLElement | Document,\n  ...args: Parameters<HTMLElement['removeEventListener']>\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<ObjectEvents> | 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      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<T extends keyof (CanvasEvents | ObjectEvents)>(\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<T extends TPointerEventNames>(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<T extends keyof TSyntheticEventContext>(\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 x = pointer.x,\n      y = pointer.y,\n      action = transform.action,\n      actionHandler = transform.actionHandler;\n    let actionPerformed = false;\n    // this object could be created from the function in the control handlers\n\n    if (actionHandler) {\n      actionPerformed = actionHandler(e, transform, x, y);\n    }\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<typeof ActiveSelection>('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.filter((object) => !object.onSelect({ e })).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<typeof ActiveSelection>('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","import { ifNaN } from '../util/internals';\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';\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<T>\n>(\n  valuesToConvert: Record<K, string | number>,\n  { width, height, gradientUnits }: TSize & { gradientUnits: GradientUnits }\n) {\n  let finalValue;\n  return (Object.keys(valuesToConvert) as K[]).reduce((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  }, {} as Record<K, number>);\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<T>;\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({\n    type = 'linear' as T,\n    gradientUnits = 'pixels',\n    coords = {},\n    colorStops = [],\n    offsetX = 0,\n    offsetY = 0,\n    gradientTransform,\n    id,\n  }: GradientOptions<T>) {\n    this.id = id ? `${id}_${uid()}` : uid();\n    this.type = type;\n    this.gradientUnits = gradientUnits;\n    this.gradientTransform = gradientTransform;\n    this.offsetX = offsetX;\n    this.offsetY = offsetY;\n    this.coords = {\n      ...(this.type === 'radial' ? radialDefaultCoords : linearDefaultCoords),\n      ...coords,\n    } as GradientCoords<T>;\n    this.colorStops = colorStops.slice();\n  }\n\n  // isType<S extends GradientType>(type: S): this is Gradient<S> {\n  //   return (this.type as GradientType) === type;\n  // }\n\n  /**\n   * Adds another colorStop\n   * @param {Record<string, string>} colorStop Object with offset and color\n   * @return {Gradient} thisArg\n   */\n  addColorStop(colorStops: Record<string, string>) {\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,\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    { additionalTransform: preTransform }: { 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        '<linearGradient ',\n        commonAttributes,\n        ' x1=\"',\n        x1,\n        '\" y1=\"',\n        y1,\n        '\" x2=\"',\n        x2,\n        '\" y2=\"',\n        y2,\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        '<radialGradient ',\n        commonAttributes,\n        ' cx=\"',\n        needsSwap ? x1 : x2,\n        '\" cy=\"',\n        needsSwap ? y1 : y2,\n        '\" r=\"',\n        needsSwap ? r1 : r2,\n        '\" fx=\"',\n        needsSwap ? x2 : x1,\n        '\" fy=\"',\n        needsSwap ? y2 : y1,\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        '<stop ',\n        'offset=\"',\n        offset * 100 + '%',\n        '\" style=\"stop-color:',\n        color,\n        typeof opacity !== 'undefined' ? ';stop-opacity: ' + opacity : ';',\n        '\"/>\\n'\n      );\n    });\n\n    markup.push(\n      this.type === 'linear' ? '</linearGradient>' : '</radialGradient>',\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 coords = this.coords as GradientCoords<'radial'>;\n    const gradient =\n      this.type === 'linear'\n        ? ctx.createLinearGradient(coords.x1, coords.y1, coords.x2, coords.y2)\n        : ctx.createRadialGradient(\n            coords.x1,\n            coords.y1,\n            coords.r1,\n            coords.x2,\n            coords.y2,\n            coords.r2\n          );\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<Gradient<'radial'>>;\n  static async fromObject(\n    options: GradientOptions<'radial'>\n  ): Promise<Gradient<'radial'>>;\n  static async fromObject(\n    options: GradientOptions<'linear'> | GradientOptions<'radial'>\n  ) {\n    return new this(options);\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   *  <linearGradient id=\"linearGrad1\">\n   *    <stop offset=\"0%\" stop-color=\"white\"/>\n   *    <stop offset=\"100%\" stop-color=\"black\"/>\n   *  </linearGradient>\n   *\n   *  OR\n   *\n   *  <linearGradient id=\"linearGrad2\">\n   *    <stop offset=\"0\" style=\"stop-color:rgb(255,255,255)\"/>\n   *    <stop offset=\"1\" style=\"stop-color:rgb(0,0,0)\"/>\n   *  </linearGradient>\n   *\n   *  OR\n   *\n   *  <radialGradient id=\"radialGrad1\">\n   *    <stop offset=\"0%\" stop-color=\"white\" stop-opacity=\"1\" />\n   *    <stop offset=\"50%\" stop-color=\"black\" stop-opacity=\"0.5\" />\n   *    <stop offset=\"100%\" stop-color=\"white\" stop-opacity=\"1\" />\n   *  </radialGradient>\n   *\n   *  OR\n   *\n   *  <radialGradient id=\"radialGrad2\">\n   *    <stop offset=\"0\" stop-color=\"rgb(255,255,255)\" />\n   *    <stop offset=\"0.5\" stop-color=\"rgb(0,0,0)\" />\n   *    <stop offset=\"1\" stop-color=\"rgb(255,255,255)\" />\n   *  </radialGradient>\n   *\n   */\n  static fromElement(\n    el: SVGGradientElement,\n    instance: FabricObject,\n    svgOptions: SVGOptions\n  ): Gradient<GradientType> {\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';\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  patternTransform: TMat2D | null = null;\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 <img> 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 <canvas> 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<string, any> {\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      `<pattern id=\"SVGID_${id}\" x=\"${patternOffsetX}\" y=\"${patternOffsetY}\" width=\"${patternWidth}\" height=\"${patternHeight}\">`,\n      `<image x=\"0\" y=\"0\" width=\"${\n        (patternSource as HTMLImageElement).width\n      }\" height=\"${\n        (patternSource as HTMLImageElement).height\n      }\" xlink:href=\"${this.sourceToString()}\"></image>`,\n      `</pattern>`,\n      '',\n    ].join('\\n');\n  }\n  /* _TO_SVG_END_ */\n\n  static async fromObject(\n    { type, source, ...serialized }: SerializedPatternOptions,\n    options: Abortable\n  ): Promise<Pattern> {\n    const img = await loadImage(source, {\n      ...options,\n      crossOrigin: serialized.crossOrigin,\n    });\n    return new this({ ...serialized, source: img });\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   * <b>Backwards incompatibility note:</b> 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<PathProps> = Partial<PathProps>,\n  SProps extends SerializedPathProps = SerializedPathProps,\n  EventSpec extends ObjectEvents = ObjectEvents\n> extends FabricObject<Props, SProps, EventSpec> {\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  fromObjectId: string;\n  toObjectId: string;\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<PathProps>} [options] Options object\n   * @return {Path} thisArg\n   */\n  constructor(\n    path: TComplexPathData | string,\n    { path: _, left, top, ...options }: Partial<Props> = {}\n  ) {\n    super(options as Props);\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 `#<Path (${this.complexity()}): { \"top\": ${this.top}, \"left\": ${\n      this.left\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<Props & TClassProperties<this>, keyof SProps>,\n    K extends keyof T = never\n  >(propertiesToInclude: K[] = []): Pick<T, K> & 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<Props & TClassProperties<this>, keyof SProps>,\n    K extends keyof T = never\n  >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n    const o = this.toObject<T, K>(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      '<path ',\n      'COMMON_PARTS',\n      `d=\"${path}\" stroke-linecap=\"round\" />\\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: 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: 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(new Point(subpathStartX, subpathStartY), new Point(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<Path>}\n   */\n  static fromObject<T extends TOptions<SerializedPathProps>>(object: T) {\n    return this._fromObject<Path>(object, {\n      extraParam: 'path',\n    });\n  }\n\n  /**\n   * Creates an instance of Path from an SVG <path> element\n   * @static\n   * @memberOf Path\n   * @param {HTMLElement} element to parse\n   * @param {Partial<PathProps>} [options] Options object\n   */\n  static async fromElement(\n    element: HTMLElement,\n    options: Partial<PathProps>,\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';\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<TClassProperties<Circle>> = {\n  radius: 0,\n  startAngle: 0,\n  endAngle: 360,\n  counterClockwise: false,\n};\n\nexport class Circle<\n    Props extends TOptions<CircleProps> = Partial<CircleProps>,\n    SProps extends SerializedCircleProps = SerializedCircleProps,\n    EventSpec extends ObjectEvents = ObjectEvents\n  >\n  extends FabricObject<Props, SProps, EventSpec>\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<string, any> {\n    return {\n      ...super.getDefaults(),\n      ...Circle.ownDefaults,\n    };\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('scaleX');\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('scaleY');\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<Props & TClassProperties<this>, keyof SProps>,\n    K extends keyof T = never\n  >(propertiesToInclude: K[] = []): Pick<T, K> & 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        '<circle ',\n        'COMMON_PARTS',\n        'cx=\"0\" cy=\"0\" ',\n        'r=\"',\n        `${this.radius}`,\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        `<path d=\"M ${startX} ${startY} A ${radius} ${radius} 0 ${largeFlag} ${sweepFlag} ${endX} ${endY}\" `,\n        'COMMON_PARTS',\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<Circle> {\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<CircleProps>;\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<T extends TOptions<SerializedCircleProps>>(object: T) {\n    return super._fromObject<Circle>(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';\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';\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<string, boolean> = {};\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<FabricObjectProps> = Partial<FabricObjectProps>,\n    SProps extends SerializedLineProps = SerializedLineProps,\n    EventSpec extends ObjectEvents = ObjectEvents\n  >\n  extends FabricObject<Props, SProps, EventSpec>\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: Props = {} as Props) {\n    super({ ...options, x1, y1, x2, 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<Props & TClassProperties<this>, keyof SProps>,\n    K extends keyof T = never\n  >(propertiesToInclude: K[] = []): Pick<T, K> & 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      '<line ',\n      'COMMON_PARTS',\n      `x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\" />\\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<Line>}\n   */\n  static fromObject<T extends TOptions<SerializedLineProps>>({\n    x1,\n    y1,\n    x2,\n    y2,\n    ...object\n  }: T) {\n    return this._fromObject<Line>(\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<TClassProperties<Triangle>> = {\n  width: 100,\n  height: 100,\n};\n\nexport class Triangle<\n    Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n    SProps extends SerializedObjectProps = SerializedObjectProps,\n    EventSpec extends ObjectEvents = ObjectEvents\n  >\n  extends FabricObject<Props, SProps, EventSpec>\n  implements FabricObjectProps\n{\n  static type = 'Triangle';\n\n  static ownDefaults = triangleDefaultValues;\n\n  static getDefaults(): Record<string, any> {\n    return { ...super.getDefaults(), ...Triangle.ownDefaults };\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 ['<polygon ', 'COMMON_PARTS', 'points=\"', points, '\" />'];\n  }\n}\n\nclassRegistry.setClass(Triangle);\nclassRegistry.setSVGClass(Triangle);\n","import { 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<TClassProperties<Ellipse>> = {\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<EllipseProps> = Partial<EllipseProps>,\n    SProps extends SerializedEllipseProps = SerializedEllipseProps,\n    EventSpec extends ObjectEvents = ObjectEvents\n  >\n  extends FabricObject<Props, SProps, EventSpec>\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<string, any> {\n    return {\n      ...super.getDefaults(),\n      ...Ellipse.ownDefaults,\n    };\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('scaleX');\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('scaleY');\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<Props & TClassProperties<this>, keyof SProps>,\n    K extends keyof T = never\n  >(propertiesToInclude: K[] = []): Pick<T, K> & 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      '<ellipse ',\n      'COMMON_PARTS',\n      `cx=\"0\" cy=\"0\" rx=\"${this.rx}\" ry=\"${this.ry}\" />\\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 { cloneDeep } from '../util/internals/cloneDeep';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const polylineDefaultValues: Partial<TClassProperties<Polyline>> = {\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<FabricObjectProps> = Partial<FabricObjectProps>,\n  SProps extends SerializedPolylineProps = SerializedPolylineProps,\n  EventSpec extends ObjectEvents = ObjectEvents\n> extends FabricObject<Props, SProps, EventSpec> {\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<string, any> {\n    return {\n      ...super.getDefaults(),\n      ...Polyline.ownDefaults,\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    'skewX',\n    'skewY',\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({ ...options, 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<TProjectStrokeOnPointsOptions>) {\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 === 'scaleX' || key === 'scaleY') &&\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<Props & TClassProperties<this>, keyof SProps>,\n    K extends keyof T = never\n  >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n    return {\n      ...super.toObject(propertiesToInclude),\n      points: cloneDeep(this.points),\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<Polyline>}\n   */\n  static fromObject<T extends TOptions<SerializedPolylineProps>>(object: T) {\n    return this._fromObject<Polyline>(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  static getDefaults(): Record<string, any> {\n    return {\n      ...super.getDefaults(),\n      ...Polyline.ownDefaults,\n    };\n  }\n\n  protected isOpen() {\n    return false;\n  }\n}\n\nclassRegistry.setClass(Polygon);\nclassRegistry.setSVGClass(Polygon);\n","import { LEFT, 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<StylePropertiesType[]> = [\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<TClassProperties<FabricText>> = {\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<CompleteTextStyleDeclaration>;\n\nexport type TextStyle = {\n  [line: number | string]: { [char: number | string]: TextStyleDeclaration };\n};\n\nexport abstract class StyledText<\n  Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n  SProps extends SerializedObjectProps = SerializedObjectProps,\n  EventSpec extends ObjectEvents = ObjectEvents\n> extends FabricObject<Props, SProps, EventSpec> {\n  declare abstract styles: TextStyle;\n  protected declare abstract _textLines: string[][];\n  protected declare _forceClearCache: boolean;\n  static _styleProperties: Readonly<StylePropertiesType[]> = 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';\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<text xml:space=\"preserve\" ',\n      this.fontFamily\n        ? `font-family=\"${this.fontFamily.replace(dblQuoteRegex, \"'\")}\" `\n        : '',\n      this.fontSize ? `font-size=\"${this.fontSize}\" ` : '',\n      this.fontStyle ? `font-style=\"${this.fontStyle}\" ` : '',\n      this.fontWeight ? `font-weight=\"${this.fontWeight}\" ` : '',\n      textDecoration ? `text-decoration=\"${textDecoration}\" ` : '',\n      this.direction === 'rtl' ? `direction=\"${this.direction}\" ` : '',\n      'style=\"',\n      this.getSvgStyles(noShadow),\n      '\"',\n      this.addPaintOrder(),\n      ' >',\n      textSpans.join(''),\n      '</text>\\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 `<tspan x=\"${toFixed(\n      left,\n      config.NUM_FRACTION_DIGITS\n    )}\" y=\"${toFixed(\n      top,\n      config.NUM_FRACTION_DIGITS\n    )}\" ${dySpan}${fillStyles}>${escapeXml(char)}</tspan>`;\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    // cant use ts-expect-error because of ts 5.3 cross check\n    // @ts-ignore TS doesn't respect this type casting\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 } 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;\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<TextProps> = Partial<TextProps>,\n    SProps extends SerializedTextProps = SerializedTextProps,\n    EventSpec extends ObjectEvents = ObjectEvents\n  >\n  extends StyledText<Props, SProps, EventSpec>\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;\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<string, any> {\n    return { ...super.getDefaults(), ...FabricText.ownDefaults };\n  }\n\n  constructor(text: string, options: Props = {} as Props) {\n    super({ ...options, text, styles: options?.styles || {} });\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 `#<Text (${this.complexity()}): { \"text\": \"${\n      this.text\n    }\", \"fontFamily\": \"${this.fontFamily}\" }>`;\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<GraphemeBBox>;\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<string, never>\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<GraphemeBBox>(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<any>,\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<GraphemeBBox>;\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<T extends 'fill' | 'stroke'>(\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<CompleteTextStyleDeclaration, 'stroke' | 'strokeWidth'>\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<this, 'fill'>) {\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<T extends StylePropertiesType>(\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<GraphemeBBox>;\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<string[]>(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<Props & TClassProperties<this>, keyof SProps>,\n    K extends keyof T = never\n  >(propertiesToInclude: K[] = []): Pick<T, K> & 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  static genericFonts = [\n    'sans-serif',\n    'serif',\n    'cursive',\n    'fantasy',\n    'monospace',\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 (<b>not yet implemented</b>)\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<FabricText>}\n   */\n  static fromObject<\n    T extends TOptions<SerializedTextProps>,\n    S extends FabricText\n  >(object: T) {\n    return this._fromObject<S>(\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 { Canvas } from '../../canvas/Canvas';\nimport 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 { cloneDeep } from '../../util/internals/cloneDeep';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { 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 = cloneDeep(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, 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<TextProps> = Partial<TextProps>,\n  SProps extends SerializedTextProps = SerializedTextProps,\n  EventSpec extends ITextEvents = ITextEvents\n> extends FabricText<Props, SProps, EventSpec> {\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<number, void>;\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      // @ts-expect-error in reality it is an IText instance\n      this.canvas.fire('text:editing:entered', { target: this, e });\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      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 { LEFT, RIGHT } from '../../constants';\nimport type { IText } from './IText';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\n\nexport abstract class ITextKeyBehavior<\n  Props extends TOptions<TextProps> = Partial<TextProps>,\n  SProps extends SerializedTextProps = SerializedTextProps,\n  EventSpec extends ITextEvents = ITextEvents\n> extends ITextBehavior<Props, SProps, EventSpec> {\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<string, keyof this>).map(([eventName, handler]) =>\n      textarea.addEventListener(\n        eventName,\n        (this[handler] as Function).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<TextProps> = Partial<TextProps>,\n  SProps extends SerializedTextProps = SerializedTextProps,\n  EventSpec extends ITextEvents = ITextEvents\n> extends ITextKeyBehavior<Props, SProps, EventSpec> {\n  private declare __lastSelected: boolean;\n  private declare __lastClickTime: number;\n  private declare __lastLastClickTime: number;\n  private declare __lastPointer: XY | Record<string, never>;\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, 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<TClassProperties<IText>> = {\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<ITextProps> = Partial<ITextProps>,\n    SProps extends SerializedITextProps = SerializedITextProps,\n    EventSpec extends ITextEvents = ITextEvents\n  >\n  extends ITextClickBehavior<Props, SProps, EventSpec>\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<string, any> {\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\n   * Constructor\n   * @param {String} text Text string\n   * @param {Object} [options] Options object\n   */\n  constructor(text: string, options?: Props) {\n    super(text, options);\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 { 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 } = 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        target.group?.calcTransformMatrix()\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<LayoutStrategyResult, 'center' | 'size'>\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<StrictLayoutContext>\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<Group>());\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<StrictLayoutContext>\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<Group>());\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<TClassProperties<ActiveSelection>> =\n  {\n    multiSelectionStacking: 'canvas-stacking',\n    cornerStyle: 'circle',\n    cornerColor: 'white',\n    cornerStrokeColor: 'gray',\n    transparentCorners: false,\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<string, any> = activeSelectionDefaultValues;\n\n  static getDefaults(): Record<string, any> {\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<ActiveSelectionOptions> = {}\n  ) {\n    super(objects, {\n      ...options,\n      layoutManager:\n        options.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    console.log('enterGroup');\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<Group>();\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 `#<ActiveSelection: (${this.complexity()})>`;\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    super._renderControls(ctx, styleOverride);\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    ctx.restore();\n  }\n\n  //  override the default behavior of `getText` to return a concatenated string of all text objects\\\n  // canvasX custoom method\n  getText(): any {\n    if (this.getObjects().length > 1) {\n      const textsArray = this.getObjects().map((item) => item.getText());\n      return textsArray.join('/n').trim();\n    } else {\n      return '';\n    }\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<WebGLFilterBackend>,\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 { 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<TClassProperties<FabricImage>> = {\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<ImageProps> = Partial<ImageProps>,\n    SProps extends SerializedImageProps = SerializedImageProps,\n    EventSpec extends ObjectEvents = ObjectEvents\n  >\n  extends FabricObject<Props, SProps, EventSpec>\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<string, any> {\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 = {} as Props) {\n    super({ filters: [], ...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<TSize>} [size] Options object\n   */\n  setElement(element: ImageSource, size: Partial<TSize> = {}) {\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<Props & TClassProperties<this>, keyof SProps>,\n    K extends keyof T = never\n  >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n    const filters: Record<string, any>[] = [];\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        '<clipPath id=\"imageCrop_' + clipPathId + '\">\\n',\n        '\\t<rect x=\"' +\n          x +\n          '\" y=\"' +\n          y +\n          '\" width=\"' +\n          this.width +\n          '\" height=\"' +\n          this.height +\n          '\" />\\n',\n        '</clipPath>\\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<image ',\n      'COMMON_PARTS',\n      `xlink:href=\"${this.getSvgSrc(true)}\" x=\"${x - this.cropX}\" y=\"${\n        y - this.cropY\n        // we're essentially moving origin of transformation from top/left corner to the center of the shape\n        // by wrapping it in container <g> 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}></image>\\n`\n    );\n\n    if (this.stroke || this.strokeDashArray) {\n      const origFill = this.fill;\n      this.fill = null;\n      strokeSvg = [\n        `\\t<rect x=\"${x}\" y=\"${y}\" width=\"${this.width}\" height=\"${\n          this.height\n        }\" style=\"${this.getSvgStyles()}\" />\\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 `#<Image: { src: \"${this.getSrc()}\" }>`;\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 as BaseFilter],\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(filters: BaseFilter[] = this.filters || []) {\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<FabricImage>,\n    ctx: CanvasRenderingContext2D\n  ) {\n    ctx.imageSmoothingEnabled = this.imageSmoothing;\n    // cant use ts-expect-error because of ts 5.3 cross check\n    // @ts-ignore TS doesn't respect this type casting\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<TSize> = {}) {\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<FabricImage>}\n   */\n  static fromObject<T extends TOptions<SerializedImageProps>>(\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<BaseFilter>(f, options),\n      // TODO: redundant - handled by enlivenObjectEnlivables\n      rf && enlivenObjects<BaseFilter>([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<FabricImage>}\n   */\n  static fromURL<T extends TOptions<ImageProps>>(\n    url: string,\n    { crossOrigin = null, signal }: LoadImageOptions = {},\n    imageOptions?: T\n  ): Promise<FabricImage> {\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 <g> 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';\n\nexport function parseUseDirectives(doc: Document) {\n  const nodelist = getMultipleNodes(doc, ['use', 'svg:use']);\n  let i = 0;\n  while (nodelist.length && i < nodelist.length) {\n    const el = nodelist[i],\n      xlinkAttribute = el.getAttribute('xlink:href') || el.getAttribute('href');\n\n    if (xlinkAttribute === null) {\n      return;\n    }\n\n    const xlink = xlinkAttribute.slice(1);\n    const x = el.getAttribute('x') || 0;\n    const y = el.getAttribute('y') || 0;\n    const el2Orig = doc.getElementById(xlink);\n    if (el2Orig === 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 el2 = el2Orig.cloneNode(true) as Element;\n    let currentTrans =\n      (el2.getAttribute('transform') || '') +\n      ' translate(' +\n      x +\n      ', ' +\n      y +\n      ')';\n    const oldLength = nodelist.length;\n    const namespace = svgNS;\n\n    applyViewboxTransform(el2);\n    if (/^svg$/i.test(el2.nodeName)) {\n      const el3 = el2.ownerDocument.createElementNS(namespace, 'g');\n      for (\n        let j = 0, attrs = el2.attributes, len = attrs.length;\n        j < len;\n        j++\n      ) {\n        const attr: Attr | null = attrs.item(j);\n        attr && el3.setAttributeNS(namespace, attr.nodeName, attr.nodeValue!);\n      }\n      // el2.firstChild != null\n      while (el2.firstChild) {\n        el3.appendChild(el2.firstChild);\n      }\n      el2 = el3;\n    }\n\n    for (let j = 0, attrs = el.attributes, len = attrs.length; j < len; j++) {\n      const attr = attrs.item(j);\n      if (!attr) {\n        continue;\n      }\n      const { nodeName, nodeValue } = attr;\n      if (\n        nodeName === 'x' ||\n        nodeName === 'y' ||\n        nodeName === 'xlink:href' ||\n        nodeName === 'href'\n      ) {\n        continue;\n      }\n\n      if (nodeName === 'transform') {\n        currentTrans = nodeValue + ' ' + currentTrans;\n      } else {\n        el2.setAttribute(nodeName, nodeValue!);\n      }\n    }\n\n    el2.setAttribute('transform', currentTrans);\n    el2.setAttribute('instantiated_by_use', '1');\n    el2.removeAttribute('id');\n    const parentNode = el.parentNode;\n    parentNode!.replaceChild(el2, el);\n    // some browsers do not shorten nodelist after replaceChild (IE8)\n    if (nodelist.length === oldLength) {\n      i++;\n    }\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<string, SVGGradientElement> {\n  const elList = getMultipleNodes(doc, tagArray);\n  const gradientDefs: Record<string, SVGGradientElement> = {};\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<string, string> = {},\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 } 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 | undefined;\n  declare regexUrl: RegExp;\n  declare doc: Document;\n  declare clipPaths: Record<string, Element[]>;\n  declare gradientDefs: Record<string, SVGGradientElement>;\n  declare cssRules: CSSRules;\n\n  constructor(\n    elements: Element[],\n    options: LoadImageOptions & ParsedViewboxTransform,\n    reviver: TSvgReviverCallback | undefined,\n    doc: Document,\n    clipPaths: Record<string, Element[]>\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<Array<FabricObject | null>> {\n    return Promise.all(\n      this.elements.map((element) => this.createObject(element))\n    );\n  }\n\n  async createObject(el: Element): Promise<FabricObject | null> {\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<string, StorageType[typeof property]>\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<SVGParsingOutput> {\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<string, Element[]> = {};\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<SVGParsingOutput> {\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<SVGParsingOutput> {\n  // need to handle error properly\n  return new Promise<Document>((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';\n\nconst ACTION_NAME: TModificationEvents = 'modifyPoly';\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<TTransformAnchor>\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<Control>\n): Record<string, Control>;\nexport function createPolyControls(\n  numOfControls: number,\n  options?: Partial<Control>\n): Record<string, Control>;\nexport function createPolyControls(\n  arg0: number | Polyline,\n  options: Partial<Control> = {}\n) {\n  const controls = {} as Record<string, Control>;\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 type {\n  ControlCursorCallback,\n  TransformActionHandler,\n} from '../EventTypeDefs';\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 { 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<WebGLFilterBackend>;\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\nexport class BaseFilter {\n  /**\n   * Filter type\n   * @param {String} type\n   * @default\n   */\n  get type(): string {\n    return (this.constructor as typeof BaseFilter).type;\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  declare static defaults: Record<string, any>;\n\n  /**\n   * Array of attributes to send with buffers. do not modify\n   * @private\n   */\n  vertexSource = vertexSource;\n\n  /**\n   * Name of the parameter that can be changed in the filter.\n   * Some filters have more than one parameter and there is no\n   * mainParameter\n   * @private\n   */\n  declare mainParameter?: keyof this | undefined;\n\n  /**\n   * Constructor\n   * @param {Object} [options] Options object\n   */\n  constructor({ type, ...options }: Record<string, any> = {}) {\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  /**\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.vertexSource\n  ) {\n    const {\n      WebGLProbe: { GLPrecision = 'highp' },\n    } = getEnv();\n    if (GLPrecision !== 'highp') {\n      fragmentSource = fragmentSource.replace(\n        new RegExp(highPsourceCode, 'g'),\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    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   * Intended to be overridden by subclasses.\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    return {};\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<string, number>,\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    const main = this.mainParameter,\n      defaultValue = (this.constructor as typeof BaseFilter).defaults[\n        main as string\n      ];\n    if (main) {\n      const thisValue = this[main];\n      if (Array.isArray(defaultValue) && Array.isArray(thisValue)) {\n        return defaultValue.every(\n          (value: any, i: number) => value === thisValue[i]\n        );\n      } else {\n        return defaultValue === thisValue;\n      }\n    } else {\n      return false;\n    }\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() {\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  getMainParameter() {\n    return this.mainParameter ? this[this.mainParameter] : undefined;\n  }\n\n  setMainParameter(value: any) {\n    if (this.mainParameter) {\n      this[this.mainParameter] = value;\n    }\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   * @return {Object} Object representation of an instance\n   */\n  toObject() {\n    const mainP = this.mainParameter;\n    return {\n      type: this.type,\n      ...(mainP ? { [mainP]: this[mainP] } : {}),\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<string, any>,\n    options: Abortable\n  ) {\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 type { TClassProperties } from '../typedefs';\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\nexport const blendColorDefaultValues: Partial<TClassProperties<BlendColor>> = {\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 {\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: string;\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: TBlendMode;\n\n  /**\n   * alpha value. represent the strength of the blend color operation.\n   * @type Number\n   * @default\n   **/\n  declare alpha: number;\n\n  static defaults = blendColorDefaultValues;\n\n  static type = 'BlendColor';\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   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      uColor: gl.getUniformLocation(program, 'uColor'),\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  /**\n   * Returns object representation of an instance\n   * @return {Object} Object representation of an instance\n   */\n  toObject() {\n    return {\n      type: this.type,\n      color: this.color,\n      mode: this.mode,\n      alpha: this.alpha,\n    };\n  }\n}\n\nclassRegistry.setClass(BlendColor);\n","import type { TBlendImageMode } from '../BlendImage';\n\nexport const fragmentSource: Record<TBlendImageMode, string> = {\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","import { FabricImage } from '../shapes/Image';\nimport type { TClassProperties } from '../typedefs';\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 } from './shaders/blendImage';\n\nexport type TBlendImageMode = 'multiply' | 'mask';\n\nexport const blendImageDefaultValues: Partial<TClassProperties<BlendImage>> = {\n  mode: 'multiply',\n  alpha: 1,\n  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    `,\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 {\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: TBlendImageMode;\n\n  /**\n   * alpha value. represent the strength of the blend image operation.\n   * not implemented.\n   **/\n  declare alpha: number;\n\n  static type = 'BlendImage';\n\n  static defaults = blendImageDefaultValues;\n\n  getCacheKey() {\n    return `${this.type}_${this.mode}`;\n  }\n\n  getFragmentSource(): string {\n    return fragmentSource[this.mode];\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   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      uTransformMatrix: gl.getUniformLocation(program, 'uTransformMatrix'),\n      uImage: gl.getUniformLocation(program, 'uImage'),\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   * @return {Object} Object representation of an instance\n   */\n  toObject() {\n    return {\n      type: this.type,\n      image: this.image && this.image.toObject(),\n      mode: this.mode,\n      alpha: this.alpha,\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<BlendImage>}\n   */\n  static fromObject(\n    { type, image, ...filterOptions }: Record<string, any>,\n    options: { signal: AbortSignal }\n  ) {\n    return FabricImage.fromObject(image, options).then(\n      (enlivedImage) =>\n        new this({ ...filterOptions, image: enlivedImage }) as BaseFilter\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 type { TClassProperties } from '../typedefs';\nimport { 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\nexport const blurDefaultValues: Partial<TClassProperties<Blur>> = {\n  blur: 0,\n  mainParameter: 'blur',\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 {\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: number;\n\n  declare horizontal: boolean;\n  declare aspectRatio: number;\n\n  static type = 'Blur';\n\n  static defaults = blurDefaultValues;\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   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      delta: gl.getUniformLocation(program, 'uDelta'),\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 delta = this.chooseRightDelta();\n    gl.uniform2fv(uniformLocations.delta, delta);\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 type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/brightness';\nexport const brightnessDefaultValues: Partial<TClassProperties<Brightness>> = {\n  brightness: 0,\n  mainParameter: 'brightness',\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 {\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: number;\n\n  static type = 'Brightness';\n\n  static defaults = brightnessDefaultValues;\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    if (this.brightness === 0) {\n      return;\n    }\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  /**\n   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      uBrightness: gl.getUniformLocation(program, 'uBrightness'),\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.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 type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/colorMatrix';\nexport const colorMatrixDefaultValues: Partial<TClassProperties<ColorMatrix>> =\n  {\n    matrix: [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],\n    mainParameter: 'matrix',\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 <caption>Kodachrome filter</caption>\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 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: number[];\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: boolean;\n\n  static type = 'ColorMatrix';\n\n  static defaults = colorMatrixDefaultValues;\n\n  setOptions({ matrix, ...options }: Record<string, any>) {\n    if (matrix) {\n      // safeguard against mutation\n      this.matrix = [...matrix];\n    }\n    Object.assign(this, options);\n  }\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   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      uColorMatrix: gl.getUniformLocation(program, 'uColorMatrix'),\n      uConstants: gl.getUniformLocation(program, 'uConstants'),\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\nclassRegistry.setClass(ColorMatrix);\n","import { ColorMatrix, colorMatrixDefaultValues } from './ColorMatrix';\nimport { classRegistry } from '../ClassRegistry';\n\nexport function createColorMatrixFilter(key: string, matrix: number[]) {\n  const newClass = class extends ColorMatrix {\n    static type = key;\n\n    static defaults = {\n      ...colorMatrixDefaultValues,\n      /**\n       * Lock the matrix export for this kind of static, parameter less filters.\n       */\n      mainParameter: undefined,\n      matrix,\n    };\n  };\n  classRegistry.setClass(newClass, key);\n  return newClass;\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\n/**\n * A container class that knows how to apply a sequence of filters to an input image.\n */\nexport class Composed extends BaseFilter {\n  /**\n   * A non sparse array of filters to apply\n   */\n  declare subFilters: BaseFilter[];\n\n  static type = 'Composed';\n\n  constructor({\n    subFilters = [],\n    ...options\n  }: { subFilters?: BaseFilter[] } & Record<string, any> = {}) {\n    super(options);\n    this.subFilters = 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   *\n   * @returns {Object} A JSON representation of this filter.\n   */\n  toObject() {\n    return {\n      ...super.toObject(),\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<Composed>}\n   */\n  static fromObject(\n    object: Record<string, any>,\n    options: { signal: AbortSignal }\n  ) {\n    return Promise.all(\n      ((object.subFilters || []) as BaseFilter[]).map((filter) =>\n        classRegistry\n          .getClass<typeof BaseFilter>(filter.type)\n          .fromObject(filter, options)\n      )\n    ).then(\n      (enlivedFilters) => new this({ subFilters: enlivedFilters }) as BaseFilter\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 type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/constrast';\nexport const contrastDefaultValues: Partial<TClassProperties<Contrast>> = {\n  contrast: 0,\n  mainParameter: 'contrast',\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 {\n  /**\n   * contrast value, range from -1 to 1.\n   * @param {Number} contrast\n   * @default 0\n   */\n  declare contrast: number;\n\n  static type = 'Contrast';\n\n  static defaults = contrastDefaultValues;\n\n  getFragmentSource() {\n    return fragmentSource;\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    if (this.contrast === 0) {\n      return;\n    }\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   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      uContrast: gl.getUniformLocation(program, 'uContrast'),\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 type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/convolute';\n\nexport const convoluteDefaultValues: Partial<TClassProperties<Convolute>> = {\n  opaque: false,\n  matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0],\n};\n\n/**\n * Adapted from <a href=\"http://www.html5rocks.com/en/tutorials/canvas/imagefilters/\">html5rocks article</a>\n * @example <caption>Sharpen filter</caption>\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 <caption>Blur filter</caption>\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 <caption>Emboss filter</caption>\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 <caption>Emboss filter with opaqueness</caption>\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 {\n  /*\n   * Opaque value (true/false)\n   */\n  declare opaque: boolean;\n\n  /*\n   * matrix for the filter, max 9x9\n   */\n  declare matrix: number[];\n\n  static type = 'Convolute';\n\n  static defaults = convoluteDefaultValues;\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   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      uMatrix: gl.getUniformLocation(program, 'uMatrix'),\n      uOpaque: gl.getUniformLocation(program, 'uOpaque'),\n      uHalfSize: gl.getUniformLocation(program, 'uHalfSize'),\n      uSize: gl.getUniformLocation(program, 'uSize'),\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.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 type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/gamma';\nexport type GammaInput = [number, number, number];\n\nexport const gammaDefaultValues: Partial<TClassProperties<Gamma>> = {\n  mainParameter: 'gamma',\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: GammaInput;\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  getFragmentSource() {\n    return fragmentSource;\n  }\n\n  constructor({ gamma = [1, 1, 1], ...options }: { gamma?: GammaInput } = {}) {\n    super(options);\n    this.gamma = gamma;\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   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      uGamma: gl.getUniformLocation(program, 'uGamma'),\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\nclassRegistry.setClass(Gamma);\n","import type { TGrayscaleMode } from '../Grayscale';\n\nexport const fragmentSource: Record<TGrayscaleMode, string> = {\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 type { TClassProperties } from '../typedefs';\nimport { 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\nexport const grayscaleDefaultValues: Partial<TClassProperties<Grayscale>> = {\n  mode: 'average',\n  mainParameter: 'mode',\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 {\n  declare mode: TGrayscaleMode;\n\n  static type = 'Grayscale';\n\n  static defaults = grayscaleDefaultValues;\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   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      uMode: gl.getUniformLocation(program, 'uMode'),\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 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 type { TClassProperties } from '../typedefs';\nimport { 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 const hueRotationDefaultValues: Partial<TClassProperties<HueRotation>> =\n  {\n    rotation: 0,\n    mainParameter: 'rotation',\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 */\n// @ts-expect-error some babbling about mainParameter\nexport class HueRotation extends ColorMatrix {\n  /**\n   * HueRotation value, from -1 to 1.\n   */\n  declare rotation: number;\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    this.calculateMatrix();\n    return super.isNeutralState();\n  }\n\n  applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n    this.calculateMatrix();\n    super.applyTo(options);\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 type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/invert';\n\nexport const invertDefaultValues: Partial<TClassProperties<Invert>> = {\n  alpha: false,\n  invert: true,\n  mainParameter: 'invert',\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 {\n  /**\n   * Invert also alpha.\n   * @param {Boolean} alpha\n   * @default\n   **/\n  declare alpha: boolean;\n\n  /**\n   * Filter invert. if false, does nothing\n   * @param {Boolean} invert\n   * @default\n   */\n  declare invert: boolean;\n\n  static type = 'Invert';\n\n  static defaults = invertDefaultValues;\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   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      uInvert: gl.getUniformLocation(program, 'uInvert'),\n      uAlpha: gl.getUniformLocation(program, 'uAlpha'),\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.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 type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/noise';\n\nexport const noiseDefaultValues: Partial<TClassProperties<Noise>> = {\n  mainParameter: 'noise',\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 {\n  /**\n   * Noise value, from\n   * @param {Number} noise\n   * @default\n   */\n  declare noise: number;\n\n  static type = 'Noise';\n\n  static defaults = noiseDefaultValues;\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    if (this.noise === 0) {\n      return;\n    }\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   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      uNoise: gl.getUniformLocation(program, 'uNoise'),\n      uSeed: gl.getUniformLocation(program, 'uSeed'),\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  /**\n   * Returns object representation of an instance\n   * @return {Object} Object representation of an instance\n   */\n  toObject() {\n    return { ...super.toObject(), noise: this.noise };\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 * uStepW;\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 type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/pixelate';\n\nexport const pixelateDefaultValues: Partial<TClassProperties<Pixelate>> = {\n  blocksize: 4,\n  mainParameter: 'blocksize',\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 {\n  declare blocksize: number;\n\n  static type = 'Pixelate';\n\n  static defaults = pixelateDefaultValues;\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   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      uBlocksize: gl.getUniformLocation(program, 'uBlocksize'),\n      uStepW: gl.getUniformLocation(program, 'uStepW'),\n      uStepH: gl.getUniformLocation(program, 'uStepH'),\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.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 { Color } from '../color/Color';\nimport type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentShader } from './shaders/removeColor';\nexport const removeColorDefaultValues: Partial<TClassProperties<RemoveColor>> =\n  {\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  /**\n   * Color to remove, in any format understood by {@link Color}.\n   * @param {String} type\n   * @default\n   */\n  declare color: string;\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: number;\n\n  /**\n   * For color to remove inside distance, use alpha channel for a smoother deletion\n   * NOT IMPLEMENTED YET\n   **/\n  declare useAlpha: boolean;\n\n  static type = 'RemoveColor';\n\n  static defaults = removeColorDefaultValues;\n\n  getFragmentShader() {\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   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      uLow: gl.getUniformLocation(program, 'uLow'),\n      uHigh: gl.getUniformLocation(program, 'uHigh'),\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  /**\n   * Returns object representation of an instance\n   * @return {Object} Object representation of an instance\n   */\n  toObject() {\n    return { ...super.toObject(), color: this.color, distance: this.distance };\n  }\n}\n\nclassRegistry.setClass(RemoveColor);\n","import type { TClassProperties } from '../typedefs';\nimport { 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 const resizeDefaultValues: Partial<TClassProperties<Resize>> = {\n  resizeType: 'hermite',\n  scaleX: 1,\n  scaleY: 1,\n  lanczosLobes: 3,\n  fragmentSourceTOP: `\n    precision highp float;\n    uniform sampler2D uTexture;\n    uniform vec2 uDelta;\n    varying vec2 vTexCoord;\n  `,\n};\n\nexport type TResizeType = 'bilinear' | 'hermite' | 'sliceHack' | 'lanczos';\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 {\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: TResizeType;\n\n  /**\n   * Scale factor for resizing, x axis\n   * @param {Number} scaleX\n   * @default\n   */\n  declare scaleX: number;\n\n  /**\n   * Scale factor for resizing, y axis\n   * @param {Number} scaleY\n   * @default\n   */\n  declare scaleY: number;\n\n  /**\n   * LanczosLobes parameter for lanczos filter, valid for resizeType lanczos\n   * @param {Number} lanczosLobes\n   * @default\n   */\n  declare lanczosLobes: number;\n\n  declare fragmentSourceTOP: string;\n\n  static type = 'Resize';\n\n  static defaults = resizeDefaultValues;\n\n  /**\n   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(gl: WebGLRenderingContext, program: WebGLProgram) {\n    return {\n      uDelta: gl.getUniformLocation(program, 'uDelta'),\n      uTaps: gl.getUniformLocation(program, 'uTaps'),\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    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      ${this.fragmentSourceTOP}\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<number, Record<number, number>> = {},\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  /**\n   * Returns object representation of an instance\n   * @return {Object} Object representation of an instance\n   */\n  toObject() {\n    return {\n      type: this.type,\n      scaleX: this.scaleX,\n      scaleY: this.scaleY,\n      resizeType: this.resizeType,\n      lanczosLobes: this.lanczosLobes,\n    };\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 type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/saturation';\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 */\n\nexport const saturationDefaultValues: Partial<TClassProperties<Saturation>> = {\n  saturation: 0,\n  mainParameter: 'saturation',\n};\n\nexport class Saturation extends BaseFilter {\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: number;\n\n  static type = 'Saturation';\n\n  static defaults = saturationDefaultValues;\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    if (this.saturation === 0) {\n      return;\n    }\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   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      uSaturation: gl.getUniformLocation(program, 'uSaturation'),\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\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 type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/vibrance';\n\nexport const vibranceDefaultValues: Partial<TClassProperties<Vibrance>> = {\n  vibrance: 0,\n  mainParameter: 'vibrance',\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 {\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: number;\n\n  static type = 'Vibrance';\n\n  static defaults = vibranceDefaultValues;\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    if (this.vibrance === 0) {\n      return;\n    }\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   * Return WebGL uniform locations for this filter's shader.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n   * @param {WebGLShaderProgram} program This filter's compiled shader program.\n   */\n  getUniformLocations(\n    gl: WebGLRenderingContext,\n    program: WebGLProgram\n  ): TWebGLUniformLocationMap {\n    return {\n      uVibrance: gl.getUniformLocation(program, 'uVibrance'),\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.uVibrance, -this.vibrance);\n  }\n}\n\nclassRegistry.setClass(Vibrance);\n","//@ts-nocheck\nimport { changeWidth } from './changeWidth';\nimport { Control } from './Control';\nimport { scaleCursorStyleHandler, scalingEqually } from './scale';\nimport {\n  scaleOrSkewActionName,\n  scaleSkewCursorStyleHandler,\n  scalingYOrSkewingX,\n} from './scaleSkew';\nimport { renderCircleControl } from './controlRendering';\n\n// use this function if you want to generate new controls for every instance\nexport const createObjectDefaultControls = () => ({\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 createObjectDefaultNoRotateControls = () => ({\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\nexport const createObjectImageControls = () => ({\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});\nexport const createObjectFileControls = () => ({\n  tl: new Control({\n    x: -0.5,\n    y: -0.5,\n    cursorStyleHandler: scaleCursorStyleHandler,\n    actionHandler: scalingEqually,\n  }),\n  br: new Control({\n    x: 0.5,\n    y: 0.5,\n    cursorStyleHandler: scaleCursorStyleHandler,\n    actionHandler: scalingEqually,\n  }),\n});\nexport const createObjectArrowControls = () => ({\n  tl: new Control({\n    x: -0.5,\n    y: -0.5,\n    cursorStyle: 'crosshair',\n    cursorStyleHandler: scaleCursorStyleHandler,\n    actionHandler: scalingEqually,\n  }),\n  br: new Control({\n    x: 0.5,\n    y: 0.5,\n    cursorStyleHandler: scaleCursorStyleHandler,\n    actionHandler: scalingEqually,\n  }),\n});\n\nexport const createObjectConnectorControls = function (targetObject: any) {\n  function renderCustomControl(control, ctx, left, top, fabricObject) {\n    let cornerSize, cornerColor;\n\n    // if (control.targetObject.hoveringControl === control.controlName) {\n    //   cornerSize = 15;\n    //   cornerColor = 'red';\n    // } else {\n    cornerSize = 10;\n    cornerColor = 'white';\n    // }\n\n    const styleOverride1 = {\n      cornerSize: cornerSize,\n      cornerColor,\n      lineWidth: 2,\n    };\n\n    renderCircleControl.call(\n      fabricObject,\n      ctx,\n      left,\n      top,\n      styleOverride1,\n      fabricObject\n    );\n  }\n  return {\n    mtaStart: new Control({\n      x: 0,\n      y: -0.5,\n      offsetX: 0,\n      offsetY: -20,\n      render: renderCustomControl.bind(this, {\n        controlName: 'mtaStart',\n        targetObject,\n      }),\n      mouseDownHandler: (eventData, transformData) => {\n        // this.controlMousedownProcess(transformData, 0.0, -0.5);\n\n        return true;\n      },\n      name: 'mtaStart',\n    }),\n    mbaStart: new Control({\n      x: 0,\n      y: 0.5,\n      offsetX: 0,\n      offsetY: 20,\n      render: renderCustomControl.bind(this, {\n        controlName: 'mbaStart',\n        targetObject,\n      }),\n      mouseDownHandler: (eventData, transformData) => {\n        // this.controlMousedownProcess(transformData, 0.0, 0.5);\n        return true;\n      },\n      name: 'mbaStart',\n    }),\n    mlaStart: new Control({\n      x: -0.5,\n      y: 0,\n      offsetX: -20,\n      offsetY: 0,\n      render: renderCustomControl.bind(this, {\n        controlName: 'mlaStart',\n        targetObject,\n      }),\n      mouseDownHandler: (eventData, transformData) => {\n        // this.controlMousedownProcess(transformData, -0.5, 0.0);\n        return true;\n      },\n      name: 'mlaStart',\n    }),\n    mraStart: new Control({\n      x: 0.5,\n      y: 0,\n      offsetX: 20,\n      offsetY: 0,\n      render: renderCustomControl.bind(this, {\n        controlName: 'mraStart',\n        targetObject,\n      }),\n      mouseDownHandler: (eventData, transformData) => {\n        // this.controlMousedownProcess(transformData, 0.5, 0.0);\n        return true;\n      },\n      name: 'mraStart',\n    }),\n  };\n};\n\nexport const createResizeControls = () => ({\n  mr: new Control({\n    x: 0.5,\n    y: 0,\n    offsetX: 20,\n    offsetY: 0,\n    actionHandler: changeWidth,\n    cursorStyleHandler: scaleSkewCursorStyleHandler,\n    actionName: 'resizing',\n  }),\n  ml: new Control({\n    x: -0.5,\n    y: 0,\n    offsetX: -20,\n    offsetY: 0,\n    actionHandler: changeWidth,\n    cursorStyleHandler: scaleSkewCursorStyleHandler,\n    actionName: 'resizing',\n  }),\n  mb: new Control({\n    x: 0,\n    y: 0.5,\n    offsetX: 0,\n    offsetY: 20,\n    cursorStyleHandler: scaleSkewCursorStyleHandler,\n    actionHandler: scalingYOrSkewingX,\n    getActionName: scaleOrSkewActionName,\n  }),\n\n  mt: new Control({\n    x: 0,\n    y: -0.5,\n    offsetX: 0,\n    offsetY: -20,\n    cursorStyleHandler: scaleSkewCursorStyleHandler,\n    actionHandler: scalingYOrSkewingX,\n    getActionName: scaleOrSkewActionName,\n  }),\n});\n\nexport const createResizeControlsForText = () => ({\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  ...createResizeControlsForText(),\n});\nexport const createRectNotesDefaultControls = (targetObject: any) => ({\n  ...createObjectDefaultNoRotateControls(),\n  ...createObjectConnectorControls(targetObject),\n});\nexport const createShapeNotesDefaultControls = (targetObject: any) => ({\n  ...createObjectDefaultNoRotateControls(),\n  // ...createResizeControls(),\n  ...createObjectConnectorControls(targetObject),\n});\nexport const createPathDefaultControls = () => ({\n  ...createObjectDefaultNoRotateControls(),\n});\nexport const createImageDefaultControls = () => ({\n  ...createObjectImageControls(),\n});\nexport const createFileDefaultControls = () => ({\n  ...createObjectFileControls(),\n});\n","export enum EventName {\n  MODIFIED = 'modified',\n  CHANGED = 'changed',\n  TRIPLECLICK = 'tripleclick',\n  DBLCLICK = 'dblclick',\n  MOUSEOUT = 'mouseout',\n  EDITINGENTERED = 'editing:entered',\n  MOUSEOVER = 'mouseover',\n  EDITINGEXITED = 'editing:exited',\n  INITIALIZE = 'initialize',\n  INSERTNEWSTYLEBLOCK = 'insertNewStyleBlock',\n  RENDER = '_render',\n  SET = 'set',\n  OBJECTMOVING = 'object:moving',\n  OBJECTMOVED = 'object:moved',\n  SELECTIONCREATED = 'selection:created',\n  SELECTIONCLEARED = 'selection:cleared',\n  SELECTED = 'selected',\n  DESELECTED = 'deselected',\n  MOUSEDBLCLICK = 'mousedblclick',\n  MOUSEUP = 'mouseup',\n  MOUSE_UP = 'mouse:up',\n  TOUCHSTART = 'touchstart',\n  SETSRC = 'setSrc',\n  REMOVED = 'removed',\n  MOUSEDOWN = 'mousedown',\n  MOVING = 'moving',\n  SELECTABLE = 'selectable',\n  EVENTED = 'evented',\n  FILL = 'fill',\n  ROTATING = 'rotating',\n  SCALING = 'scaling',\n  ADDED = 'added',\n  OBJECTSCALING = 'object:scaling',\n  OBJECTSCALED = 'object:scaled',\n  OBJECTROTATING = 'object:rotating',\n  OBJECTROTATED = 'object:rotated',\n  SELECTIONUPDATED = 'selection:updated',\n  DRAGENTER = 'dragenter',\n  DRAGLEAVE = 'dragleave',\n\n  CANVAS_MOUSE_DOWN = 'canvas:mousedown',\n  CANVAS_MOUSE_DOWN_BEFORE = 'canvas:mousedownbefore',\n  CANVAS_MOUSE_MOVE = 'canvas:mousemove',\n  CANVAS_MOUSE_UP = 'canvas:mouseup',\n  CANVAS_MOUSE_OUT = 'canvas:mouseout',\n  CANVAS_SCROLL = 'canvas:scroll',\n  DOCUMENT_KEY_UP = 'document:keyup',\n  DOCUMENT_KEY_DOWN = 'document:keydown',\n  DOCUMENT_MOUSE_DOWN = 'mousedown',\n  DOCUMENT_MOUSE_UP = 'mouseup',\n  DOCUMENT_MOUSE_MOVE = 'mousemove',\n  DOCUMENT_MOUSE_WHEEL = 'wheel',\n  DOCUMENT_DRAG_OVER = 'dragover',\n  DOCUMENT_PAUSE = 'pause',\n  DOCUMENT_RESUME = 'resume',\n  DOCUMENT_VISIBILITY_CHANGE = 'visibilitychange',\n  DOCUMENT_PASTE = 'paste',\n  WINDOW_BEFORE_UNLOAD = 'beforeunload',\n  WINDOW_MOUSE_MOVE = 'mousemove',\n  WINDOW_GESTURE_START = 'gesturestart',\n  WINDOW_GESTURE_CHANGE = 'gesturechange',\n  A_CTRL_KEY_DOWN = 'a_ctrl:keydown',\n  B_CTRL_KEY_DOWN = 'b_ctrl:keydown',\n  D_CTRL_KEY_DOWN = 'd_ctrl:keydown',\n  G_CTRL_SHIFT_KEY_DOWN = 'g_ctrl_shift:keydown',\n  G_CTRL_KEY_DOWN = 'g_ctrl:keydown',\n  T_KEY_DOWN = 't:keydown',\n  P_KEY_DOWN = 'p:keydown',\n  S_KEY_UP = 's:keyup',\n  S_KEY_DOWN = 's:keydown',\n  O_KEY_UP = 'o:keyup',\n  O_KEY_DOWN = 'o:keydown',\n  R_KEY_UP = 'r:keyup',\n  R_KEY_DOWN = 'r:keydown',\n  F_KEY_UP = 'f:keyup',\n  F_KEY_DOWN = 'f:keydown',\n  L_KEY_UP = 'l:keyup',\n  L_KEY_DOWN = 'l:keydown',\n\n  Z_CTRL_KEY_UP = 'z_ctrl:keyup',\n\n  Z_CTRL_KEY_DOWN = 'z_ctrl:keydown',\n\n  Z_CTRL_SHIFT_KEY_UP = 'z_ctrl_shift:keyup',\n\n  Z_CTRL_SHIFT_KEY_DOWN = 'z_ctrl_shift:keydown',\n\n  SPACE_KEY_UP = 'space:keyup',\n\n  SPACE_KEY_DOWN = 'space:keydown',\n\n  SHIFT_KEY_UP = 'shift:keyup',\n\n  SHIFT_KEY_DOWN = 'shift:keydown',\n\n  SLASH_SHIFT_KEY_DOWN = 'slash_shift:keydown',\n\n  ESC_KEY_DOWN = 'esc:keydown',\n\n  DELETE_KEY_DOWN = 'delete:keydown',\n\n  CTRL_SHIFT_FIVE_KEY_DOWN = 'ctrl_shift_five:keydown',\n\n  CTRL_PLUS_KEY_DOWN = 'ctrl_plus:keydown',\n\n  CTRL_MINUS_KEY_DOWN = 'ctrl_minus:keydown',\n\n  CTRL_ZERO_KEY_DOWN = 'ctrl_zero:keydown',\n\n  UP_DOWN_LEFT_RIGHT_KEY_DOWN = 'up_down_left_right:keydown',\n\n  CANVAS_BEFORE_SELECTION_CLEARED = 'before:selection:cleared',\n\n  CANVAS_SELECTION_UPDATED = 'selection:updated',\n\n  CANVAS_SELECTION_CREATED = 'selection:created',\n\n  SELECTION_CLEARED = 'selection:cleared',\n\n  TEXT_CHANGED = 'text:changed',\n\n  BEFORE_RENDER = 'before:render',\n\n  AFTER_RENDER = 'after:render',\n\n  MOUSE_DOWN_BEFORE = 'mouse:down:before',\n  MOUSE_DOWN = 'mouse:down',\n\n  TEXT_EDITING_EXISTED = 'text:editing:exited',\n\n  MOUSE_DBCLICK = 'mouse:dblclick',\n\n  HAMMER_TAP1 = 'tap1',\n\n  HAMMER_DOUBLE_TAP = 'doubletap',\n\n  HAMMER_PAN1_START = 'pan1start',\n\n  HAMMER_PAN1_MOVE = 'pan1move',\n\n  HAMMER_PAN1_END = 'pan1end',\n\n  HAMMER_PAN3 = 'pan3',\n\n  HAMMER_PINCH_START = 'pinchstart',\n\n  HAMMER_PINCH_MOVE = 'pinchmove',\n\n  RETURN_DEFAULT_ZOOMM = 'returndefaultzoom',\n\n  MOUSE_MOVE = 'mouse:move',\n  RESIZING = 'resizing',\n}\n\nexport enum TextAlign {\n  LEFT = 'left',\n  CENTER = 'center',\n  RIGHT = 'right',\n  JUSTIFY = 'justify',\n  JUSTIFYLEFT = 'justify-left',\n  JUSTIFYCENTER = 'justify-center',\n  JUSTIFYRIGHT = 'justify-right',\n}\nexport enum WidgetType {\n  XActiveSelection = 'activeSelection',\n  XConnector = 'XConnector',\n  XCircleNotes = 'XCircleNotes',\n  XFile = 'XFile',\n  XGroup = 'XGroup',\n  XImage = 'XImage',\n  XIText = 'XIText',\n  XObject = 'XObject',\n  XPath = 'XPath',\n  XPolyline = 'XPolyline',\n  XLine = 'XLine',\n  XRdRectPanel = 'XRdRectPanel',\n  XRect = 'XRect',\n  XRectNotes = 'XRectNotes',\n  XRectPanel = 'XRectPanel',\n  XShape = 'XShape',\n  XShapeNotes = 'XShapeNotes',\n  XTriangle = 'XTriangle',\n  XURL = 'XURL',\n  XText = 'XText',\n  XTextbox = 'XTextbox',\n  Common = 'common',\n}\n\nexport enum NoteType {\n  RECT = 'rect',\n  SQUARE = 'square',\n  CIRCLE = 'circle',\n  TEXT = 'text',\n}\n\nexport enum Origin {\n  Left = 'left',\n  Right = 'right',\n  Center = 'center',\n}\nexport enum ModifiedField {\n  Width = 'width',\n  Height = 'height',\n  Left = 'left',\n  Top = 'top',\n  ShapeScalex = 'shapeScaleX',\n  ScaleX = 'scaleX',\n  ScaleY = 'scaleY',\n  FlipX = 'flipX',\n  FLipY = 'flipY',\n  MaxHeight = 'maxHeight',\n  FixedScaleChange = 'fixedScaleChange',\n  Lines = 'lines',\n  PanelObj = 'panelObj',\n  Relationship = 'relationship',\n  ZIndex = 'zIndex',\n  x1 = 'x1',\n  x2 = 'x2',\n  y1 = 'y1',\n  y2 = 'y2',\n  ConnectorStart = 'connectorStart',\n  ConnectorEnd = 'connectorEnd',\n  Fill = 'fill',\n  Text = 'text',\n}\nexport enum SaveAction {\n  MOVED = 'MOVED',\n  SCALED = 'SCALED',\n  ADDED = 'ADDED',\n  PASTE = 'PASTE',\n  REMOVED = 'REMOVED',\n  MODIFIED = 'MODIFIED',\n  UNBIND = 'UNBIND',\n  BIND = 'BIND',\n  ROTATED = 'ROTATED',\n}\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';\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<TClassProperties<Textbox>> = {\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<string, { line: number; offset: number }>;\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<UniqueTextboxProps, 'minWidth' | 'splitByGrapheme'> { }\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<TextboxProps> = Partial<TextboxProps>,\n  SProps extends SerializedTextboxProps = SerializedTextboxProps,\n  EventSpec extends ITextEvents = ITextEvents\n>\n  extends IText<Props, SProps, EventSpec>\n  implements UniqueTextboxProps {\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<string, any> {\n    return {\n      ...super.getDefaults(),\n      controls: createTextboxDefaultControls(),\n      ...Textbox.ownDefaults,\n    };\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  // cant use ts-expect-error because of ts 5.3 cross check\n  // @ts-ignore TS this typing limitations\n  toObject<\n    T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n    K extends keyof T = never\n  >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n    return super.toObject<T, K>([\n      'minWidth',\n      'splitByGrapheme',\n      ...propertiesToInclude,\n    ] as K[]) as Pick<T, K> & SProps;\n  }\n}\n\nclassRegistry.setClass(Textbox);\n","import { WidgetBaseInterface, TOriginX, TOriginY } from './widget.entity.base';\nimport { xy } from './widget.entity.connector';\nimport { WidgetType } from './widget.type';\n\nexport type Connector = {\n  connectorId: string;\n  connectorType: string;\n  point: xy;\n}\n\n\n\nexport interface WidgetTextboxInterface extends WidgetBaseInterface {\n  fontFamily: string;\n  fill: string | any | null;\n  fontSize: number;\n  fontWeight: string;\n  lineHeight: number;\n  text: string;\n  textAlign: string;\n  editable: boolean;\n  fixedScaleChange: boolean;\n  connectors: Connector[]; // You can replace 'any' with the appropriate type for connectors\n}\n\nexport class WidgetTextboxClass implements WidgetTextboxInterface {\n  updatedBy: string = \"\";\n  updatedByName: string = \"\";\n  fill: string = '#eeeeee';\n  createdByName: string = \"\";\n  fontFamily: string = 'Inter';\n  fontSize: number = 16;\n  fontWeight: string = '400';\n  lineHeight: number = 1.2;\n  text: string = '';\n  textAlign: string = 'left';\n  editable: boolean = true;\n  maxHeight: number = 100;\n  fixedScaleChange: boolean = false;\n  connectors: Connector[] = [];\n  id: string = '';\n  boardId: string = '';\n  backgroundColor: string = '#FFFFFF';\n  width: number = 100;\n  height: number = 50;\n  left: number = 0;\n  locked: boolean = false;\n  objType: WidgetType = \"XTextbox\";\n  originX: TOriginX = 'center';\n  originY: TOriginY = 'center';\n  scaleX: number = 1;\n  scaleY: number = 1;\n  selectable: boolean = true;\n  top: number = 0;\n  zIndex: number = 0;\n  version: string = '1.0';\n  updatedAt: number = Date.now();\n\n  createdAt: number = Date.now();\n  createdBy: string = '';\n  visible: boolean = true;\n}\n\nexport const EntityKeys = Object.keys(new WidgetTextboxClass()) as (keyof WidgetTextboxInterface)[];","import { TClassProperties, TOriginX, TOriginY } from '../../typedefs';\nimport { IText } from '../IText/IText';\nimport { classRegistry } from '../../ClassRegistry';\nimport { createTextboxDefaultControls } from '../../controls/X_commonControls';\nimport { EventName, Origin } from './types';\nimport { Textbox } from '../Textbox';\n\nimport { WidgetType } from './type/widget.type';\nimport { WidgetTextboxInterface, EntityKeys } from './type/widget.entity.textbox';\n\n\nimport { Point } from '../../Point';\nimport { XConnector } from './XConnector';\nimport { FabricObject } from '../Object/Object';\n\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<TClassProperties<XTextbase>> = {\n  minWidth: 20,\n  dynamicMinWidth: 2,\n  // _wordJoiners: /[ \\t\\r]/,\n  splitByGrapheme: false,\n  cornerColor: 'white',\n  cornerSize: 10,\n  cornerStyle: 'circle',\n  transparentCorners: false,\n  cornerStrokeColor: 'gray',\n  connectors: [],\n};\n\nclass Connector {\n  connectorId: string;\n  connectorType: string;\n  point: Point;\n}\n\nexport const XTextbaseProps: Partial<TClassProperties<XTextbase>> = {};\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 XTextbase\n  extends Textbox\n  implements WidgetTextboxInterface {\n  static type: WidgetType = 'XTextbase';\n  static objType: WidgetType = 'XTextbase';\n  /**\n   * Minimum width of textbox, in pixels.\n   * @type Number\n   * @default\n   */\n  declare minWidth: number;\n\n  declare tempTop: number;\n\n  declare hasNoText: boolean;\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  declare oneLine: boolean;\n\n  declare fromCopy: boolean;\n  declare originX: TOriginX;\n  declare originY: TOriginY;\n  declare connectors: Connector[];\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  static textLayoutProperties = [...IText.textLayoutProperties, 'width'];\n\n  static ownDefaults: Record<string, any> = textboxDefaultValues;\n\n\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      controls: createTextboxDefaultControls(),\n      ...XTextbase.ownDefaults,\n    };\n  }\n\n\n\n  constructor(text: string, options: any) {\n\n    options.oneLine = options.oneLine || true;\n    options.connectors = options.connectors || [];\n    options.originX = options.originX || 'center';\n    options.originY = options.originY || 'center';\n    options.minWidth = options.minWidth || 20;\n    options.dynamicMinWidth = options.dynamicMinWidth || 2;\n    options.splitByGrapheme = options.splitByGrapheme || false;\n    options.fixedScaleChange = options.fixedScaleChange || false;\n    options.boardId = options.boardId || '';\n\n    options.userId = options.userId || '';\n    options.zIndex = options.zIndex || 0;\n    options.version = options.version || '';\n    options.updatedAt = options.updatedAt || Date.now();\n    options.lastEditedByName = options.lastEditedByName || '';\n    options.createdByName = options.createdByName || '';\n    options.objType = 'XTextbase';\n\n\n    super(text, options);\n    this.initializeEvent();\n    delete options.height;\n    Object.assign(this, options);\n\n\n    // this.resetResizeControls();\n  }\n  updatedBy: string;\n  updatedByName: string;\n\n  createdByName: string;\n  maxHeight: number;\n  fixedScaleChange: boolean;\n  boardId: string;\n  objType: WidgetType;\n  userId: string;\n  zIndex: number;\n  version: string;\n  updatedAt: number;\n\n  createdAt: number;\n  createdBy: string;\n  /* boardx extend function */\n\n  updateConnector(point: any, connector: XConnector, type: string) {\n    const controlPoint = this.calculateControlPoint(\n      new Point(point.x, point.y)\n    );\n\n    //recalculate the startpoint or endpoint of the connector, and also the ControlPoint\n    if (type === 'from') {\n      connector.update({\n        fromPoint: point,\n        control1: controlPoint,\n      });\n    }\n    if (type === 'to') {\n      connector.update({\n        toPoint: point,\n        control2: controlPoint,\n      });\n    }\n  }\n\n  moveOrScaleHandler(e: any) {\n    //if there is a connector, move the connector\n    if (this.connectors?.length === 0) return;\n    this.connectors?.forEach((connector: any) => {\n      const pointConnector = connector.point;\n\n      //get canvas point of the connector point\n      const point = new Point(pointConnector.x, pointConnector.y);\n      //@ts-ignore\n      const transformedPoint = this.transformPointToCanvas(point);\n\n      //use the connectorId to find the connector and then update the connector\n      //@ts-ignore\n      const connectorObj = this.canvas?.findById(connector.connectorId);\n\n      if (!connectorObj) return;\n\n      if (\n        this.id === connectorObj.fromObjectId &&\n        connector.connectorType === 'from'\n      ) {\n        this.updateConnector(transformedPoint, connectorObj, 'from');\n      }\n\n      if (\n        this.id === connectorObj.toObjectId &&\n        connector.connectorType === 'to'\n      ) {\n        this.updateConnector(transformedPoint, connectorObj, 'to');\n      }\n    });\n  }\n\n  calculateControlPoint(connectingPoint: Point): Point {\n    const boundingBox = this.getBoundingRect();\n    let left = boundingBox.left;\n    let top = boundingBox.top;\n\n    const width = boundingBox.width;\n    const height = boundingBox.height;\n\n    const right = left + width;\n    const bottom = top + height;\n\n    const connectingX = connectingPoint.x;\n    const connectingY = connectingPoint.y;\n\n    let controlX: number = 0;\n    let controlY: number = 0;\n\n    // Find the nearest border and calculate the control point outside the bounding box\n    const distances = [\n      { side: 'left', distance: Math.abs(connectingX - left) },\n      { side: 'right', distance: Math.abs(connectingX - right) },\n      { side: 'top', distance: Math.abs(connectingY - top) },\n      { side: 'bottom', distance: Math.abs(connectingY - bottom) },\n    ];\n\n    const nearestBorder = distances.reduce((min, current) =>\n      current.distance < min.distance ? current : min\n    );\n\n    switch (nearestBorder.side) {\n      case 'left':\n        controlX = left - 220 * this.scaleX;\n        controlY = connectingY;\n        break;\n      case 'right':\n        controlX = right + 220 * this.scaleX;\n        controlY = connectingY;\n        break;\n      case 'top':\n        controlX = connectingX;\n        controlY = top - 220 * this.scaleY;\n        break;\n      case 'bottom':\n        controlX = connectingX;\n        controlY = bottom + 220 * this.scaleY;\n        break;\n    }\n\n    return new Point(controlX, controlY);\n  }\n\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: any) {\n    let realLineCount = 0,\n      realLineCharCount = 0,\n      charCount = 0;\n    const map: any = {};\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: any, 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: number = 0,\n      nextLineIndex = lineIndex + 1,\n      nextOffset: any,\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 as any) {\n      for (const p2 in obj[p1] as any) {\n        if (Number(p2) >= offset && (!shouldLimit || Number(p2) < 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   * 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: any, 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  /**\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   * @return Number\n   */\n  missingNewlineOffset(lineIndex: number) {\n    if (this.splitByGrapheme) {\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    // Check if text contains Chinese characters\n    if (/[\\u3400-\\u9FBF]/.test(this.text)) {\n      this.splitByGrapheme = true;\n    }\n\n    if (!this.fromCopy) {\n      if (\n        (this.objType === 'XText' || this.objType === 'XTextbase') &&\n        this.textLines &&\n        this.textLines.length > 1 &&\n        this.isEditing\n      ) {\n        this.oneLine = false;\n      } else {\n        this.oneLine = true;\n      }\n    } else {\n      this.oneLine = false;\n    }\n    if (\n      (this.objType === 'XText' || this.objType === 'XTextbase') &&\n      newText &&\n      newText.lines &&\n      this.oneLine &&\n      this.isEditing\n    ) {\n      if (newText.lines[0].length > 1) {\n        this.width =\n          this._measureWord(newText.lines[0], 0, 0) > this.width\n            ? this._measureWord(newText.lines[0], 0, 0) + 10\n            : this.width;\n      }\n    }\n    const graphemeLines = this._wrapText(newText.lines, this.width);\n    const 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  controlMousedownProcess(transformData: any, rx: any, ry: any) {\n    return;\n  }\n\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n\n\n  // toObject(propertiesToInclude: Array<any>): object {\n  //   return super.toObject(\n  //     ['minWidth', 'splitByGrapheme'].concat(propertiesToInclude)\n  //   );\n  // }\n  /**extend function for fronted */\n  checkTextboxChange() { }\n  initializeEvent() {\n    const self = this;\n    const canvas = this.canvas;\n\n    self.on(EventName.EDITINGENTERED, () => {\n      // Set originX based on textAlign\n      // self.originX = self.textAlign as TOriginX;\n\n      // Adjust left position to maintain visual consistency\n      // if (self.textAlign === TextAlign.LEFT) {\n      //   self.left -= (self.width * self.scaleX) / 2;\n      // }\n\n      // if (self.textAlign === TextAlign.RIGHT) {\n      //   // Corrected adjustment: Subtract instead of Add\n      //   self.left -= (self.width * self.scaleX) / 2;\n      // }\n\n      if (self.objType === 'XTextbase') {\n        self.originY = 'top';\n\n        self.top -= (self.height * self.scaleY) / 2;\n\n        self.tempTop = self.top;\n\n        if (self.text === 'Type here...') {\n          self.selectAll();\n\n          self.text = '';\n\n          self.dirty = true;\n\n          self.fill = 'rgb(0, 0, 0)';\n\n          canvas?.requestRenderAll();\n        }\n      }\n    });\n\n    self.on(EventName.EDITINGEXITED, () => {\n      // Revert originX and originY to center\n      self.originX = Origin.Center;\n      self.originY = Origin.Center;\n\n      // // Reverse the left adjustment based on textAlign\n      // if (self.textAlign === TextAlign.LEFT) {\n      //   self.left += (self.width * self.scaleX) / 2;\n      // }\n\n      // if (self.textAlign === TextAlign.RIGHT) {\n      //   // Reverse the corrected adjustment: Add back\n      //   self.left += (self.width * self.scaleX) / 2;\n      // }\n\n      if (self.objType === 'XTextbase') {\n        self.top = self.tempTop + (self.height * self.scaleY) / 2;\n        self.tempTop = self.top;\n      }\n    });\n\n\n    this.on('moving', (e: any) => {\n      this.moveOrScaleHandler(e);\n    });\n\n    this.on('scaling', (e: any) => {\n      this.moveOrScaleHandler(e);\n    });\n    self.on(EventName.MODIFIED, () => {\n      self.checkTextboxChange();\n\n      // canvas.requestRenderAll();\n    });\n    self.on(EventName.CHANGED, () => {\n      if (self.styles[0]) {\n        self.styles = {};\n\n        // self.canvas.requestRenderAll();\n      }\n    });\n\n\n    // Other event listeners remain unchanged...\n  }\n\n\n\n\n\n  drawObject(ctx: CanvasRenderingContext2D) {\n    super.drawObject(ctx);\n    // console.log('!@@ drawObject', this.canvas?.dockingWidget, this);\n    //@ts-ignore\n    if (this == this.canvas?.dockingWidget) {\n      this.renderDockingControls(ctx);\n    }\n  }\n\n  renderDockingControls(ctx: CanvasRenderingContext2D) {\n    console.log('!!@renderDockingControls');\n    const self = this;\n    const canvas = self.canvas;\n    const controls = self.controls;\n\n    let cornerColor = 'white';\n\n    if (!canvas) return;\n\n    for (const controlKey in controls) {\n      const control = controls[controlKey];\n      if (\n        !(\n          controlKey === 'mbaStart' ||\n          controlKey === 'mlaStart' ||\n          controlKey === 'mraStart' ||\n          controlKey === 'mtaStart'\n        )\n      )\n        continue;\n\n      if (\n        //@ts-ignore\n        this.canvas!.hoveringControl &&\n        //@ts-ignore\n        this.canvas!.hoveringControl === controlKey\n      ) {\n        cornerColor = '#F21D6B';\n      } else {\n        cornerColor = 'white';\n      }\n\n      //render 4 controls, mbaStart, mlaStart, mraStart, mtaStart\n\n      this._renderControl(\n        ctx,\n        control.x * self.width,\n        control.y * self.height,\n        { cornerStyle: 'circle', cornerColor },\n        self\n      );\n    }\n  }\n\n  _renderControl(\n    ctx: any,\n    left: number,\n    top: number,\n    styleOverride: any,\n    fabricObject: FabricObject\n  ) {\n    console.log('!!@  _renderControl', left, top);\n    let color = styleOverride.cornerColor || 'white';\n\n    ctx.save();\n    ctx.fillStyle = color;\n    ctx.strokeStyle = 'gray';\n    ctx.beginPath();\n    ctx.arc(left, top, 6, 0, Math.PI * 2, false);\n    ctx.closePath();\n    ctx.fill();\n    ctx.stroke();\n    ctx.restore();\n  }\n\n\n\n  resetResizeControls() {\n    const self = this;\n    const textAlign = self.textAlign;\n\n    if (\n      self.objType === 'XTextbase' &&\n      (textAlign === 'left' || textAlign === 'center')\n    ) {\n      self.setControlVisible('ml', false);\n      self.setControlVisible('mr', true);\n    }\n\n    if (self.objType === 'XText' && textAlign === 'right') {\n      self.setControlVisible('ml', true);\n      self.setControlVisible('mr', false);\n    }\n    if (self.canvas) self.canvas.requestRenderAll();\n  }\n}\n\nclassRegistry.setClass(XTextbase);\n// classRegistry.getSVGClass(Textbox);\n","import { TOriginX, TOriginY } from './widget.entity.base';\nimport   { WidgetTextboxInterface,Connector } from './widget.entity.textbox';\nimport { WidgetType } from './widget.type';\n \nexport   interface WidgetCircleNotesInterface extends WidgetTextboxInterface {}\n\nexport class WidgetCircleNotesClass implements WidgetCircleNotesInterface {\n    fill: string= '#eeeeee';\n    updatedBy: string = \"\";\n    updatedByName: string = \"\";\n    createdByName: string=\"\";\n    fontFamily: string = 'Inter';\n    fontSize: number = 12;\n    fontWeight: string = '400';\n    lineHeight: number = 1.2;\n    text: string = '';\n    textAlign: string = 'center';\n    editable: boolean = true;\n    maxHeight: number = 138;\n    fixedScaleChange: boolean = false;\n    connectors: Connector[] = [];\n    id: string = '';\n    boardId: string = '';\n    backgroundColor: string = 'rgba(252,236,138,1)';\n    width: number = 138;\n    height: number = 138;\n    left: number = 0;\n    locked: boolean = false;\n    objType: WidgetType = 'XCircleNotes';\n    originX: TOriginX = 'center';\n    originY: TOriginY = 'center';\n    scaleX: number = 1;\n    scaleY: number = 1;\n    selectable: boolean = true;\n    top: number = 0;\n    zIndex: number = Date.now()*100;\n    version: string = '1.0';\n    updatedAt: number = Date.now();\n    createdAt: number = Date.now();\n    createdBy: string = '';\n    visible: boolean = true;\n}\n\n\nexport const EntityKeys = Object.keys(new WidgetCircleNotesClass()) as (keyof WidgetCircleNotesInterface)[];","import { TClassProperties } from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { XTextbase } from './XTextbase';\nimport { createRectNotesDefaultControls } from '../../controls/X_commonControls';\n\nimport { EntityKeys, WidgetCircleNotesInterface } from './type/widget.entity.circlenote';\nimport { WidgetType } from './type/widget.type';\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 circleNotesDefaultValues: Partial<TClassProperties<XCircleNotes>> =\n{\n  minWidth: 20,\n  dynamicMinWidth: 2,\n  verticalAlign: 'middle',\n  lockScalingFlip: true,\n  noScaleCache: false,\n  _wordJoiners: /[ \\t\\r]/,\n  splitByGrapheme: true,\n  objType: 'XCircleNotes',\n  height: 138,\n  maxHeight: 138,\n  width: 138,\n  noteType: 'circle',\n  radius: 138,\n  cornerStrokeColor: 'gray',\n  cornerStyle: 'circle',\n  cornerColor: 'white',\n  transparentCorners: false,\n};\n\nexport interface CircleNotesProps {\n  id: string;\n  originX: string;\n  originY: string;\n  top: number;\n  left: number;\n  textAlign: string;\n  width: number;\n  height: number;\n  backgroundColor: string;\n}\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 XCircleNotes extends XTextbase implements WidgetCircleNotesInterface {\n  /**selectable\n   * Minimum width of textbox, in pixels.\n   * @type Number\n   * @default\n   */\n  declare minWidth: number;\n  declare maxHeight: number;\n  declare noteType: string;\n  declare radius: number;\n\n  static type: WidgetType = 'XCircleNotes';\n  static objType: WidgetType = 'XCircleNotes';\n\n  /* boardx cusotm function */\n  declare id: string;\n\n  declare locked: boolean;\n\n  declare boardId: string;\n\n  declare userId: string;\n\n  declare timestamp: Date;\n\n  declare verticalAlign: string;\n\n  declare zIndex: number;\n\n  declare lines: object[];\n\n  declare relationship: object[];\n\n  declare emoj: object[];\n\n  declare userEmoji: object[];\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  static textLayoutProperties = [...XTextbase.textLayoutProperties, 'width'];\n\n  static ownDefaults: Record<string, any> = circleNotesDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n\n      ...XCircleNotes.ownDefaults,\n    };\n  }\n\n  constructor(text: string, options: any) {\n\n    super(text, options);\n    Object.assign(this, options);\n    Object.assign(this, {\n      controls: { ...createRectNotesDefaultControls(this) },\n    });\n    this.objType = 'XCircleNotes';\n  }\n\n\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n\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('fontSize', this.fontSize - 2);\n      this._splitTextIntoLines(this.text);\n      return;\n    }\n    if (this.textAlign.indexOf('justify') !== -1) {\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    const height = this.calcTextHeight();\n    if (height > 76 && this.fontSize > 2) {\n      this.set('fontSize', this.fontSize - 2);\n      this._splitTextIntoLines(this.text);\n      return;\n    }\n\n    this.height = this.maxHeight;\n    return this.height;\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: any) {\n    let realLineCount = 0,\n      realLineCharCount = 0,\n      charCount = 0;\n    const map: any = {};\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, 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,\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  //       if (p2 >= offset && (!shouldLimit || p2 < 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  //  * @param {Number} lineIndex\n  //  * @param {Number} charIndex\n  //  * @private\n  //  */\n  // _getStyleDeclaration(lineIndex: number, charIndex: number) {\n  //   if (this._styleMap && !this.isWrapping) {\n  //     const map = this._styleMap[lineIndex];\n  //     if (!map) {\n  //       return null;\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  _setStyleDeclaration(lineIndex: number, charIndex: number, style: object) {\n    const map = this._styleMap[lineIndex];\n    lineIndex = map.line;\n    charIndex = map.offset + charIndex;\n\n    this.styles[lineIndex][charIndex] = style;\n  }\n\n  /**\n   * @param {Number} lineIndex\n   * @param {Number} charIndex\n   * @private\n   */\n  _deleteStyleDeclaration(lineIndex: number, charIndex: number) {\n    const map = this._styleMap[lineIndex];\n    lineIndex = map.line;\n    charIndex = map.offset + charIndex;\n    delete this.styles[lineIndex][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  _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  _setLineStyle(lineIndex: number) {\n    const map = this._styleMap[lineIndex];\n    this.styles[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: Array<any>, desiredWidth: number): Array<any> {\n  //   const wrapped = [];\n  //   this.isWrapping = true;\n  //   for (let i = 0; i < lines.length; i++) {\n  //     wrapped.push(...this._wrapLine(lines[i], i, desiredWidth));\n  //   }\n  //   this.isWrapping = false;\n  //   return wrapped;\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: any, 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 and a context.\n   * @param {Array} line The grapheme array that represent the line\n   * @param {Number} lineIndex\n   * @param {Number} desiredWidth width you want to wrap the line to\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  graphemeSplitForRectNotes(textstring: string): string[] {\n    const graphemes = [];\n    const words = textstring.split(/\\b/);\n    for (let i = 0; i < words.length; i++) {\n      // 检查单词是否全为拉丁字母，长度不大于13，且没有四个或更多的连续相同的字母\n      if (\n        /^[a-zA-Z]+$/.test(words[i]) &&\n        words[i].length <= 13 &&\n        !/(\\w)\\1{3,}/.test(words[i])\n      ) {\n        graphemes.push(words[i]);\n      } else {\n        for (let j = 0; j < words[i].length; j++) {\n          graphemes.push(words[i][j]);\n        }\n      }\n    }\n    return graphemes;\n  }\n\n  // _wrapLine(\n  //   _line: any,\n  //   lineIndex: number,\n  //   desiredWidth: number,\n  //   reservedSpace = 0\n  // ): Array<any> {\n  //   const additionalSpace = this._getWidthOfCharSpacing(),\n  //     splitByGrapheme = this.splitByGrapheme,\n  //     graphemeLines = [],\n  //     words = splitByGrapheme\n  //       ? this.graphemeSplitForRectNotes(_line)\n  //       : this.wordSplit(_line),\n  //     infix = splitByGrapheme ? '' : ' ';\n\n  //   let lineWidth = 0,\n  //     line = [],\n  //     // spaces in different languages?\n  //     offset = 0,\n  //     infixWidth = 0,\n  //     largestWordWidth = 0,\n  //     lineJustStarted = true;\n  //   // fix a difference between split and graphemeSplit\n  //   if (words.length === 0) {\n  //     words.push([]);\n  //   }\n  //   desiredWidth -= reservedSpace;\n  //   // measure words\n  //   const data = words.map((word) => {\n  //     // if using splitByGrapheme words are already in graphemes.\n  //     word = splitByGrapheme ? word : this.graphemeSplitForRectNotes(word);\n  //     const width = this._measureWord(word, lineIndex, offset);\n  //     largestWordWidth = Math.max(width, largestWordWidth);\n  //     offset += word.length + 1;\n  //     return { word: word, width: width };\n  //   });\n  //   const maxWidth = Math.max(\n  //     desiredWidth,\n  //     largestWordWidth,\n  //     this.dynamicMinWidth\n  //   );\n  //   // layout words\n  //   offset = 0;\n  //   let i;\n  //   for (i = 0; i < words.length; i++) {\n  //     const word = data[i].word;\n  //     const wordWidth = data[i].width;\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  //     if (word.length > 1) {\n  //       line = line.concat(word.split(''));\n  //     } else {\n  //       line = line.concat(word);\n  //     }\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  //   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  //  * @return Number\n  //  */\n  // missingNewlineOffset(lineIndex) {\n  //   if (this.splitByGrapheme) {\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\n\n  /* caculate cusor positon in the middle of the textbox */\n  getCenteredTop(rectHeight: any) {\n    const textHeight = this.height;\n    return (rectHeight - textHeight) / 2;\n  }\n\n  _getTopOffset() {\n    switch (this.verticalAlign) {\n      case 'middle':\n        return -this._getTotalLineHeights() / 2;\n      case 'bottom':\n        return this.height / 2 - this._getTotalLineHeights();\n      default:\n        return -this.height / 2;\n    }\n  }\n\n  _getTotalLineHeight() {\n    return this._textLines.reduce(\n      (total, _line, index) => total + this.getHeightOfLine(index),\n      0\n    );\n  }\n\n  _getTotalLineHeights() {\n    return this._textLines.reduce(\n      (total, line, index) => total + this.getHeightOfLine(index),\n      0\n    );\n  }\n\n  _render(ctx: any) {\n    const path: any = this.path;\n\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    // const isEmojiExist = !(\n    //   this.emoji === undefined || this.emoji.join() === '0,0,0,0,0'\n    // );\n    // if (isEmojiExist) {\n    //   this.renderEmoji(ctx);\n    // }\n  }\n\n  // renderEmoji(ctx) {\n  //   if (this.emoji === undefined) {\n  //     return;\n  //   }\n\n  //   let width = 0;\n  //   const imageList = [\n  //     this.canvas.emoji_thumb,\n  //     this.canvas.emoji_love,\n  //     this.canvas.emoji_smile,\n  //     this.canvas.emoji_shock,\n  //     this.canvas.emoji_question,\n  //   ];\n  //   const imageListArray = [];\n  //   const emojiList = [];\n  //   for (let i = 0; i < 5; i++) {\n  //     if (this.emoji[i] !== 0) {\n  //       imageListArray.push(imageList[i]);\n  //       emojiList.push(this.emoji[i]);\n  //       width += 26.6;\n  //     }\n  //   }\n\n  //   if (emojiList.length === 0) return;\n\n  //   const x = this.width / 2 - width + this.padding / 2;\n  //   const y = this.height / 2 - 18 + this.padding / 2;\n  //   ctx.font = '10px Inter ';\n  //   ctx.lineJoin = 'round';\n  //   ctx.save();\n  //   ctx.translate(x - 10, y);\n  //   this.drawRoundRectPath(ctx, width, 15, 2);\n  //   ctx.fillStyle = 'rgba(255, 255, 255, 1)';\n  //   ctx.fill();\n  //   ctx.restore();\n\n  //   //ctx.strokeRect(x - 10, y, width, 16);\n  //   //ctx.fillRect(x - 10 + 10 / 2, y + 10 / 2, width - 10, 16 - 10);\n  //   ctx.fillStyle = '#000';\n  //   const isEmojiThumbExist = !(this.canvas.emoji_thumb === undefined);\n  //   if (isEmojiThumbExist) {\n  //     let modifier = 0;\n  //     for (let i = 0; i < imageListArray.length; i++) {\n  //       const imageX = this.width / 2 - 33.6 + modifier + 2 + this.padding / 2;\n  //       const imageY = this.height / 2 - 15 + this.padding / 2;\n  //       const imageW = 10;\n  //       const imageH = 10;\n  //       ctx.drawImage(imageListArray[i], imageX, imageY, imageW, imageH);\n  //       ctx.fillText(\n  //         emojiList[i].toString(),\n  //         this.width / 2 - 20.6 + modifier + 1 + this.padding / 2,\n  //         y + 12\n  //       );\n  //       modifier -= 23.6;\n  //     }\n  //   }\n  // }\n  _renderBackground(ctx: any) {\n    if (!this.backgroundColor) {\n      return;\n    }\n    const dim = this._getNonTransformedDimensions();\n    ctx.fillStyle = this.backgroundColor;\n    ctx.beginPath(); // start new path\n    const radius =\n      dim.x / 2 + this.padding / this.scaleX / (this.canvas?.getZoom() ?? 1);\n    ctx.arc(0, 0, radius, 0, 2 * Math.PI); // draw circle path\n    ctx.closePath(); // close path\n    ctx.strokeStyle = this.backgroundColor;\n    ctx.fillStyle = this.backgroundColor;\n    ctx.stroke();\n    ctx.fill();\n  }\n  _renderText(ctx: any) {\n    ctx.shadowOffsetX = ctx.shadowOffsetY = ctx.shadowBlur = 0;\n    ctx.shadowColor = '';\n\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  _renderTextCommon(ctx: any, method: any) {\n    ctx.save();\n    let lineHeights = 0;\n    const left = this._getLeftOffset();\n    const top = this._getTopOffset();\n\n    const offsets = this._applyPatternGradientTransform(\n      ctx,\n      //@ts-ignore\n      method === 'fillText' ? this.fill : this.stroke\n    );\n\n    for (let i = 0, len = this._textLines.length; i < len; i++) {\n      const heightOfLine = this.getHeightOfLine(i);\n      const maxHeight = heightOfLine / this.lineHeight;\n      const leftOffset = this._getLineLeftOffset(i);\n      this._renderTextLine(\n        method,\n        ctx,\n        this._textLines[i],\n        left + leftOffset - offsets.offsetX,\n        top + lineHeights + maxHeight - offsets.offsetY,\n        i\n      );\n      lineHeights += heightOfLine;\n    }\n    ctx.restore();\n  }\n\n  _getSVGLeftTopOffsets() {\n    return {\n      textLeft: -this.width / 2,\n      textTop: this._getTopOffset(),\n      lineTop: this.getHeightOfLine(0),\n    };\n  }\n\n  drawRoundRectPath(cxt: any, width: any, height: any, radius: any) {\n    cxt.beginPath(0);\n    //从右下角顺时针绘制，弧度从0到1/2PI\n    cxt.arc(width - radius, height - radius, radius, 0, Math.PI / 2);\n\n    //矩形下边线\n    cxt.lineTo(radius, height);\n\n    //左下角圆弧，弧度从1/2PI到PI\n    cxt.arc(radius, height - radius, radius, Math.PI / 2, Math.PI);\n\n    //矩形左边线\n    cxt.lineTo(0, radius);\n\n    //左上角圆弧，弧度从PI到3/2PI\n    cxt.arc(radius, radius, radius, Math.PI, (Math.PI * 3) / 2);\n\n    //上边线\n    cxt.lineTo(width - radius, 0);\n\n    //右上角圆弧\n    cxt.arc(width - radius, radius, radius, (Math.PI * 3) / 2, Math.PI * 2);\n\n    //右边线\n    cxt.lineTo(width, height - radius);\n    cxt.closePath();\n  }\n}\n\nclassRegistry.setClass(XCircleNotes);\nclassRegistry.setSVGClass(XCircleNotes, 'XCircleNotes');\n","import { TOriginX, TOriginY } from './widget.entity.base';\nimport   {WidgetTextboxInterface, Connector } from './widget.entity.textbox';\nimport { WidgetType } from './widget.type';\n\nexport   interface WidgetRectNotesInterface extends WidgetTextboxInterface {}\n\nexport class WidgetRectNotesClass implements WidgetRectNotesInterface {\n    updatedBy: string = \"\";\n    updatedByName: string = \"\";\n    createdByName: string=\"\";\n    fontFamily: string = 'Inter';\n    fontSize: number = 16;\n    fontWeight: string = '400';\n    lineHeight: number = 1.2;\n    text: string = '';\n    textAlign: string = 'center';\n    editable: boolean = true;\n    fixedScaleChange: boolean = false;\n    connectors: Connector[] = [];\n    id: string = '';\n    boardId: string = '';\n    backgroundColor: string = 'rgba(252,236,138,1)';\n    width: number = 230;\n    height: number = 138;\n    left: number = 0;\n    locked: boolean = false;\n    objType: WidgetType = \"XRectNotes\";\n    originX: TOriginX = 'center';\n    originY: TOriginY = 'center';\n    scaleX: number = 1;\n    scaleY: number = 1;\n    selectable: boolean = true;\n    top: number = 0;\n    zIndex: number = Date.now()*100;\n    version: string = '1.0';\n    updatedAt: number = Date.now();\n    fill: string = 'rgba(33,33,33,1)';\n    createdAt: number = Date.now();\n    createdBy: string = '';\n    visible: boolean = true;\n}\n\nexport const EntityKeys = Object.keys(new WidgetRectNotesClass()) as (keyof WidgetRectNotesInterface)[];","import { classRegistry } from '../../ClassRegistry';\nimport { XTextbase } from './XTextbase';\nimport type { TClassProperties, TOriginX, TOriginY } from '../../typedefs';\nimport { createRectNotesDefaultControls } from '../../controls/X_commonControls';\n\n\nimport { WidgetRectNotesInterface, EntityKeys } from './type/widget.entity.rectnote';\n// this will be a separated effort\nexport const rectNotesDefaultValues: Partial<TClassProperties<XRectNotes>> = {\n  minWidth: 20,\n  dynamicMinWidth: 2,\n  splitByGrapheme: true,\n  height: 138,\n  maxHeight: 138,\n  width: 230,\n  cornerStrokeColor: 'gray',\n  cornerStyle: 'circle',\n  cornerColor: 'white',\n  transparentCorners: false,\n};\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 */\n///@ts-ignore\nexport class XRectNotes extends XTextbase implements WidgetRectNotesInterface {\n  /**selectable\n   * Minimum width of textbox, in pixels.\n   * @type Number\n   * @default\n   */\n  declare minWidth: number;\n  static type = 'XRectNotes';\n  static objType = 'XRectNotes';\n  declare locked: boolean;\n  declare cornerStyle: any;\n  declare verticalAlign: string;\n  declare originX: TOriginX;\n  declare originY: TOriginY;\n  declare width: number;\n  declare cornerStrokeColor: string;\n\n  declare cornerColor: string;\n  declare transparentCorners: boolean;\n  declare zIndex: number;\n  declare height: number;\n  declare maxHeight: number;\n\n  declare id: string;\n  declare boardId: string;\n\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  static textLayoutProperties = [...XTextbase.textLayoutProperties, 'width'];\n\n  static ownDefaults: Record<string, any> = rectNotesDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n\n      ...XRectNotes.ownDefaults,\n    };\n  }\n  constructor(\n    text: string,\n    options: Partial<TClassProperties<XRectNotes>> = {}\n  ) {\n\n    options.createdByName = options.createdByName ?? '';\n    options.fontFamily = options.fontFamily ?? 'Inter';\n    options.fontSize = options.fontSize ?? 12;\n    options.fontWeight = options.fontWeight ?? \"400\";\n    options.lineHeight = 1.2;\n    options.text = options.text ?? '';\n    options.textAlign = options.textAlign ?? 'center';\n    options.editable = options.editable ?? true;\n    options.fixedScaleChange = options.fixedScaleChange ?? false;\n    options.connectors = options.connectors ?? [];\n    options.id = options.id ?? '';\n    options.boardId = options.boardId ?? '';\n    options.backgroundColor = options.backgroundColor ?? '#FCEC8A';\n    options.left = options.left ?? 0;\n    options.locked = options.locked ?? false;\n    options.objType = options.objType ?? 'XRectNotes';\n    options.originX = options.originX ?? 'center';\n    options.originY = options.originY ?? 'center';\n    options.scaleX = options.scaleX ?? 1;\n    options.scaleY = options.scaleY ?? 1;\n    options.selectable = options.selectable ?? true;\n    options.top = options.top ?? 0;\n    options.userId = options.userId ?? '';\n    options.zIndex = options.zIndex ?? Date.now() * 100;\n    options.version = options.version ?? '1.0';\n    options.updatedAt = options.updatedAt ?? Date.now();\n    options.updatedBy = options.updatedBy ?? '';\n    options.updatedByName = options.updatedByName ?? '';\n    options.createdAt = options.createdAt ?? Date.now();\n    options.createdBy = options.createdBy ?? '';\n    options.visible = options.visible ?? true;\n    options.splitByGrapheme = true;\n\n    //fixed default value\n    options.perPixelTargetFind = false;\n    options.height = 138;\n    options.oneLine = false;\n\n    super(text, options);\n    this.maxHeight = 138;\n    Object.assign(this, {\n      controls: {\n        ...createRectNotesDefaultControls(this),\n        // mr: { /* add your desired value here */ },\n      },\n    });\n    // Object.assign(this, options);\n\n    this.splitByGrapheme = true;\n    this.dirty = true;\n    this.objType = 'XRectNotes';\n    // this.initializeEvent();\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('fontSize', this.fontSize - 2);\n      this._splitTextIntoLines(this.text);\n      return;\n    }\n    if (this.textAlign.indexOf('justify') !== -1) {\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    const height = this.calcTextHeight();\n    if (height > this.maxHeight && this.fontSize > 6) {\n      this.set('fontSize', this.fontSize - 2);\n      this._splitTextIntoLines(this.text);\n      return;\n    }\n    if (height > 130 && this.fontSize === 6) {\n      const prenum = 125 / height;\n      const newText = this.text.substring(0, this.text.length * prenum - 5);\n      this.set('text', newText + '...');\n    }\n    this.height = this.maxHeight;\n    return this.height;\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: any) {\n  //   let realLineCount = 0;\n  //   let realLineCharCount = 0;\n  //   let charCount = 0;\n  //   const map: any = {};\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] = {\n  //       line: realLineCount,\n  //       offset: realLineCharCount,\n  //     };\n\n  //     charCount += textInfo.graphemeLines[i].length;\n  //     realLineCharCount += textInfo.graphemeLines[i].length;\n  //   }\n\n  //   return map;\n  // }\n\n\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n\n\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: any, 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   * 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  _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  _setLineStyle(lineIndex: number) {\n    const map = this._styleMap[lineIndex];\n    this.styles[map.line] = {};\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 and a context.\n  //  * @param {Array} line The grapheme array that represent the line\n  //  * @param {Number} lineIndex\n  //  * @param {Number} desiredWidth width you want to wrap the line to\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\n  // graphemeSplitForRectNotes(textstring: string): string[] {\n  //   const graphemes = [];\n  //   const words = textstring.split(/\\b/);\n  //   for (let i = 0; i < words.length; i++) {\n  //     // 检查单词是否全为拉丁字母，长度不大于16\n  //     if (/^[a-zA-Z]{1,16}$/.test(words[i])) {\n  //       graphemes.push(words[i]);\n  //     } else {\n  //       for (let j = 0; j < words[i].length; j++) {\n  //         graphemes.push(words[i][j]);\n  //       }\n  //     }\n  //   }\n  //   return graphemes;\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   * @return Number\n   */\n  missingNewlineOffset(lineIndex: number) {\n    if (this.splitByGrapheme) {\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  /* caculate cusor positon in the middle of the textbox */\n  getCenteredTop(rectHeight: number) {\n    const textHeight = this.height;\n    return (rectHeight - textHeight) / 2;\n  }\n\n  _render(ctx: CanvasRenderingContext2D) {\n    const path: any = this.path;\n\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  _renderBackground(ctx: CanvasRenderingContext2D) {\n    if (!this.backgroundColor) {\n      return;\n    }\n    const dim = this._getNonTransformedDimensions();\n    ctx.fillStyle = this.backgroundColor;\n\n    // ctx.shadowBlur = 20;\n    // ctx.shadowOffsetX = 2 * this.scaleX * canvas.getZoom();\n    // ctx.shadowOffsetY = 6 * this.scaleY * canvas.getZoom();\n    // ctx.shadowColor = 'rgba(0,0,0,0.1)';\n    // ctx.shadowColor = 'rgba(0,0,0,1)';\n\n    ctx.fillRect(-dim.x / 2, -dim.y / 2, dim.x, dim.y);\n\n    // if there is background color no other shadows\n    // should be casted\n    // this._removeShadow(ctx);\n  }\n  _getTopOffset() {\n    return -this._getTotalLineHeights() / 2;\n  }\n  _getTotalLineHeights() {\n    return this._textLines.reduce(\n      (total, line, index) => total + this.getHeightOfLine(index),\n      0\n    );\n  }\n\n  _getTotalLineHeight() {\n    return this._textLines.reduce(\n      (total, _line, index) => total + this.getHeightOfLine(index),\n      0\n    );\n  }\n\n  _renderText(ctx: CanvasRenderingContext2D) {\n    ctx.shadowOffsetX = ctx.shadowOffsetY = ctx.shadowBlur = 0;\n    ctx.shadowColor = '';\n\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  drawRoundRectPath(\n    cxt: CanvasRenderingContext2D,\n    width: number,\n    height: number,\n    radius: number\n  ) {\n    cxt.beginPath();\n    //从右下角顺时针绘制，弧度从0到1/2PI\n    cxt.arc(width - radius, height - radius, radius, 0, Math.PI / 2);\n\n    //矩形下边线\n    cxt.lineTo(radius, height);\n\n    //左下角圆弧，弧度从1/2PI到PI\n    cxt.arc(radius, height - radius, radius, Math.PI / 2, Math.PI);\n\n    //矩形左边线\n    cxt.lineTo(0, radius);\n\n    //左上角圆弧，弧度从PI到3/2PI\n    cxt.arc(radius, radius, radius, Math.PI, (Math.PI * 3) / 2);\n\n    //上边线\n    cxt.lineTo(width - radius, 0);\n\n    //右上角圆弧\n    cxt.arc(width - radius, radius, radius, (Math.PI * 3) / 2, Math.PI * 2);\n\n    //右边线\n    cxt.lineTo(width, height - radius);\n    cxt.closePath();\n  }\n}\n\nclassRegistry.setClass(XRectNotes);\nclassRegistry.setSVGClass(XRectNotes, 'XRectNotes');\n","export const shapeList = [\n  {\n    name: 'rect',\n    path: 'M-50,-50L50,-50 50,50 -50,50z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n    textMaxHeight: 50,\n  },\n  {\n    name: 'diamond',\n    path: 'm-50,0 l50,-50 50,50 -50,50 -50,-50z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'roundedRect',\n    path: 'M-50,-35 Q-50,-50 -35,-50 L35,-50 Q50,-50 50,-35 L50,35 Q50,50 35,50 L-35,50 Q-50,50 -50,35 Z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'circle',\n    path: 'M-50,0a50,50 0 1,0 100,0a50,50 0 1,0 -100,0',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'hexagon',\n    path: 'm-43.476 -25.4636 l 43.476 -24.5364 l 43.7551 25.2641 l 0 50.5157 l -43.7551 24.2202 l -43.7551 -25.2654 l 0 -50.5157 z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'triangle',\n    path: 'm-50,50l50,-100l50,100l-100,0z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'bottom',\n    textAlign: 'center',\n  },\n  {\n    name: 'parallelogramIcon',\n    path: 'm-50,50l20,-100l80,0l-20,100l-80,0z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'star',\n    path: 'm-50,-10l38,0l12,-38l12,38l38,0l-30,23l12,38l-30,-24l-30,24l12,-38l-30,-23z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'cross',\n    path: 'm-50,-15l33,0l0,-33l34,0l0,33l33,0l0,34l-33,0l0,33l-34,0l0,-33l-33,0l0,-34z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'leftsideRightTriangle',\n    path: 'm50,50l-100,0l0,-100l100,100z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'bottom',\n    textAlign: 'left',\n    textMaxHeight: 50,\n  },\n  {\n    name: 'rightsideRightTriangle',\n    path: 'm-50,50l100,0l0,-100l-100,100z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'bottom',\n    textAlign: 'right',\n    textMaxHeight: 50,\n  },\n  {\n    name: 'topsideSemicircleCircle',\n    path: 'm50,25l-100,-0.00205c3.5,-27.5 25,-48 50,-48c25,0 46.5,20.5 50,48z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'topLeftQuarterCircle',\n    path: 'm-50,50c7,-55 47,-96 97,-97l0,65l0,32l-97,-0.00392z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'constellationRect',\n    path: 'm20,0l25,23l0,24l-100,0l0,-100l100,0l0,23l-25,24l-0.15,0.14l0.15,0.14l-0.00001,0z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n  {\n    name: 'constellationRound',\n    path: 'm20,1c0.002,0.002 0.004,0.004 0.01,0.001c0.007,0.01 0.015,0.02 0.02,0.03l0,0l0.001,0.0004l0.005,0.003l0.04,0.03l0.3,0.2l2.5,2l20,15c-7,15 -23,26 -42,26c-25,0 -45,-20 -45,-45c0,-25 20,-45 45,-45c19,0 35,10 42,25c-11,9 -17,14 -20,16c-1.5,1 -2,1.5 -2.5,2c-0.2,0.15 -0.3,0.2 -0.35,0.3c-0.02,0.02 -0.04,0.04 -0.05,0.06c-0.006,0.01 -0.02,0.03 -0.03,0.06c-0.005,0.015 -0.02,0.04 -0.03,0.07c-0.005,0.015 -0.01,0.04 -0.007,0.07c0.002,0.02 0.007,0.04 0.015,0.06c0.003,0.006 0.006,0.012 0.009,0.018c0.003,0.004 0.006,0.009 0.009,0.014c0.003,0.005 0.009,0.01 0.01,0.015c0.004,0.005 0.01,0.015 0.012,0.017z',\n    offsetX: 0,\n    offsetY: 0,\n    verticalAlign: 'middle',\n    textAlign: 'center',\n  },\n];\nexport type shapeType =\n  | 'rect'\n  | 'diamond'\n  | 'roundedRect'\n  | 'circle'\n  | 'hexagon'\n  | 'triangle'\n  | 'parallelogramIcon'\n  | 'star'\n  | 'cross'\n  | 'leftsideRightTriangle'\n  | 'rightsideRightTriangle'\n  | 'topsideSemicircleCircle'\n  | 'topLeftQuarterCircle'\n  | 'constellationRect'\n  | 'constellationRound';\n","import { TOriginX, TOriginY } from './widget.entity.base';\nimport   { WidgetTextboxInterface,Connector } from './widget.entity.textbox';\nimport { WidgetType } from './widget.type';\n\nexport   interface WidgetShapeNotesInterface extends WidgetTextboxInterface {\n  shapeName: shapeType;\n}\n\nexport type shapeType =\n  | 'rect'\n  | 'diamond'\n  | 'roundedRect'\n  | 'circle'\n  | 'hexagon'\n  | 'triangle'\n  | 'parallelogramIcon'\n  | 'star'\n  | 'cross'\n  | 'leftsideRightTriangle'\n  | 'rightsideRightTriangle'\n  | 'topsideSemicircleCircle'\n  | 'topLeftQuarterCircle'\n  | 'constellationRect'\n  | 'constellationRound';\n\nexport class WidgetShapeNotesClass implements WidgetShapeNotesInterface {\n  fill: string=\"#eeeeee\";\n  updatedBy: string = \"\";\n  updatedByName: string = \"\";\n  createdByName: string=\"\";\n  shapeName: shapeType = 'rect';\n  fontFamily: string = 'Inter';\n  fontSize: number = 16;\n  fontWeight: string = '400';\n  lineHeight: number = 1.2;\n  text: string = '';\n  textAlign: string = 'center';\n  editable: boolean = true;\n  maxHeight: number = 100;\n  fixedScaleChange: boolean = false;\n  connectors: Connector[] = [];\n  id: string = '';\n  boardId: string = '';\n  backgroundColor: string = '#eeeeee';\n  width: number = 200;\n  height: number = 200;\n  left: number = 0;\n  locked: boolean = false;\n  objType: WidgetType = 'XShapeNotes';\n  originX: TOriginX = 'center';\n  originY: TOriginY = 'center';\n  scaleX: number = 1;\n  scaleY: number = 1;\n  selectable: boolean = true;\n  top: number = 0;\n  zIndex: number = Date.now() * 100;\n  version: string = '1.0';\n  updatedAt: number = Date.now();\n  createdAt: number = Date.now();\n  createdBy: string = '';\n  visible: boolean = true;\n}\n\nexport const EntityKeys = Object.keys(new WidgetShapeNotesClass()) as (keyof WidgetShapeNotesInterface)[];\n","import { classRegistry } from '../../../ClassRegistry';\nimport { getFabricDocument } from '../../../env';\nimport { TClassProperties, TFiller } from '../../../typedefs';\nimport { XTextbase } from '../XTextbase';\n\nimport { shapeList } from './types';\nimport { shapeType } from './types';\n\nimport { WidgetShapeNotesInterface, EntityKeys } from '../type/widget.entity.shapenote';\nimport { createShapeNotesDefaultControls } from '../../../controls/X_commonControls';\nimport { WidgetType } from '../type/widget.type';\n\n\n\nexport type shapeInfo = {\n  name: shapeType;\n  path: string;\n  offsetX: number;\n  offsetY: number;\n  verticalAlign: 'middle' | 'top' | 'bottom';\n  textAlign: 'center' | 'left' | 'right';\n  textMaxHeight?: number;\n  textMaxWidth?: number;\n};\n\nfunction getShapeInfo(shape: string): shapeInfo | null {\n  const shapeObj = shapeList.find((item) => item.name === shape);\n\n  if (!shapeObj) {\n    return shapeList[0] as shapeInfo;\n  } else {\n    return shapeObj as shapeInfo; // Update the type of shapeObj to shapeInfo\n  }\n}\n\nexport const XShapeNotesDefaultValues: Partial<TClassProperties<XShapeNotes>> =\n{\n\n};\n\n\nexport class XShapeNotes extends XTextbase implements WidgetShapeNotesInterface {\n  static type: WidgetType = 'XShapeNotes';\n  static objType: WidgetType = 'XShapeNotes';\n\n  bgShape: shapeInfo | null;\n  verticalAlign: string;\n\n  minHeight: number;\n  shapeName: shapeType;\n\n\n  constructor(text: string, options: Partial<WidgetShapeNotesInterface> & { type: string }) {\n\n\n    super(text, options);\n    this.bgShape = options.shapeName ? getShapeInfo(options.shapeName) : null;\n    // this.width = (options.width || 200) * (options.scaleX || 1);\n    // this.height = (options.height || 200) * (options.scaleY || 1);\n    this.scaleX = 1;\n    this.scaleY = 1;\n    this.id = options.id || '';\n    this.verticalAlign = this.bgShape?.verticalAlign || 'middle';\n    this.textAlign = this.bgShape?.textAlign || 'center';\n    this.shapeName = options.shapeName || 'rect';\n    this.fontSize = options.fontSize || 14;\n    this.fontFamily = options.fontFamily || 'Inter';\n    this.fontWeight = options.fontWeight || 'normal';\n    this.lineHeight = 1.2;\n    this.text = text;\n    this.minWidth = 20;\n    this.minHeight = 20;\n    this.dynamicMinWidth = 2;\n    this.lockScalingFlip = true;\n    this.noScaleCache = false;\n    this._wordJoiners = /[ \\t\\r]/;\n    this.splitByGrapheme = true;\n    this.objType = 'XShapeNotes';\n    this.textAlign = 'center';\n    this.centeredScaling = false;\n    this.cornerColor = 'white';\n    this.cornerStrokeColor = 'gray';\n    this.cornerSize = 10;\n    this.cornerStyle = 'circle';\n    this.transparentCorners = false;\n    this.verticalAlign = 'middle';\n\n\n\n    this.resetSplitByGrapheme();\n    Object.assign(this, {\n      controls: { ...createShapeNotesDefaultControls(this) },\n    });\n\n    this.on('scaling', this.handleScaling);\n    this.on('modified', this.handleModified);\n    this.on('changed', this.handleModified);\n  }\n\n\n\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n\n\n  handleModified() {\n    this.canvas!.uniformScaling = false;\n    this.resetSplitByGrapheme();\n    this.canvas!.renderAll();\n  }\n\n  resetSplitByGrapheme() {\n    const chineseRegex = /[\\u4e00-\\u9fa5]/; // Regex to match Chinese characters\n    const text = this.text;\n    const includesChinese = chineseRegex.test(text);\n    this.splitByGrapheme = includesChinese;\n  }\n\n  static ownDefaults: Record<string, any> = XShapeNotesDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      ...XShapeNotes.ownDefaults,\n    };\n  }\n\n  handleScaling(event: any) {\n    this.canvas!.uniformScaling = false;\n\n    const newScaleX = this.get('scaleX');\n    const newScaleY = this.get('scaleY');\n\n    this.width *= newScaleX;\n    this.height *= newScaleY;\n\n    if (this.width < this.minWidth) {\n      this.width = this.minWidth;\n    }\n    if (this.height < this.minHeight) {\n      this.height = this.minHeight;\n    }\n\n    this.set({\n      scaleX: 1,\n      scaleY: 1,\n    });\n\n    this.initDimensions();\n    this.setCoords();\n    this.dirty = true;\n    this.canvas?.renderAll();\n  }\n\n  _renderBackground(ctx: any) {\n    if (!this.backgroundColor) {\n      return;\n    }\n    const dim = this._getNonTransformedDimensions();\n    ctx.fillStyle = this.backgroundColor;\n\n    ctx.save();\n\n    const svgPath = new Path2D(this.bgShape?.path || '');\n    const m = getFabricDocument()\n      .createElementNS('http://www.w3.org/2000/svg', 'svg')\n      .createSVGMatrix();\n    m.a = this.width / 100;\n    m.b = 0;\n    m.c = 0;\n    m.d = this.height / 100;\n    m.e = 0;\n    m.f = 0;\n    const path = new Path2D();\n    path.addPath(svgPath, m);\n    ctx.strokeStyle = this.stroke;\n    ctx.stroke(path);\n    ctx.fillStyle = this.backgroundColor;\n    ctx.fill(path);\n    ctx.restore();\n  }\n\n  _getTopOffset() {\n    switch (this.verticalAlign) {\n      case 'middle':\n        return -this._getTotalLineHeight() / 2;\n      case 'bottom':\n        return this.height / 2 - this._getTotalLineHeight();\n      default:\n        return -this.height / 2;\n    }\n  }\n\n  _getTotalLineHeight() {\n    return this._textLines.reduce(\n      (total, _line, index) => total + this.getHeightOfLine(index),\n      0\n    );\n  }\n\n  _renderTextCommon(ctx: any, method: any) {\n    ctx.save();\n    let lineHeights = 0;\n    const left = this._getLeftOffset() + this.bgShape?.offsetX!;\n    const top = this._getTopOffset() + this.bgShape?.offsetY!;\n    const offsets = this._applyPatternGradientTransform(\n      ctx,\n      ((method === 'fillText' ? this.fill : this.stroke) as TFiller) ||\n      this.fill!\n    );\n\n    for (let i = 0, len = this._textLines.length; i < len; i++) {\n      const heightOfLine = this.getHeightOfLine(i);\n      const maxHeight = heightOfLine / this.lineHeight;\n      const leftOffset = this._getLineLeftOffset(i);\n      this._renderTextLine(\n        method,\n        ctx,\n        this._textLines[i],\n        left + leftOffset - offsets.offsetX,\n        top + lineHeights + maxHeight - offsets.offsetY,\n        i\n      );\n      lineHeights += heightOfLine;\n    }\n    ctx.restore();\n  }\n\n  initDimensions() {\n    if (!this.initialized) {\n      return;\n    }\n    this.isEditing && this.initDelayedCursor();\n    this._clearCache();\n    this.dynamicMinWidth = 0;\n    this._styleMap = this._generateStyleMap(this._splitText());\n    if (this.dynamicMinWidth > this.width) {\n      this.set('fontSize', this.fontSize - 2);\n      this._splitTextIntoLines(this.text);\n      return;\n    }\n    if (this.textAlign.indexOf('justify') !== -1) {\n      this.enlargeSpaces();\n    }\n    const height = this.calcTextHeight();\n    if (height > this.height && this.fontSize > 6) {\n      this.set('fontSize', this.fontSize - 2);\n      this._splitTextIntoLines(this.text);\n      return;\n    }\n\n    return this.height;\n  }\n\n  _getTotalLineHeights() {\n    return this._textLines.reduce(\n      (total, _line, index) => total + this.getHeightOfLine(index),\n      0\n    );\n  }\n\n  graphemeSplitForRectNotes(textstring: string): string[] {\n    const graphemes = [];\n    const words = textstring.split(/\\b/);\n    for (let i = 0; i < words.length; i++) {\n      if (/^[a-zA-Z]{1,16}$/.test(words[i])) {\n        graphemes.push(words[i]);\n      } else {\n        for (let j = 0; j < words[i].length; j++) {\n          graphemes.push(words[i][j]);\n        }\n      }\n    }\n    return graphemes;\n  }\n}\n\nclassRegistry.setClass(XShapeNotes);\n","import { TClassProperties, TOriginX, TOriginY } from '../../typedefs';\nimport { IText } from '../IText/IText';\nimport { classRegistry } from '../../ClassRegistry';\nimport { createTextboxDefaultControls } from '../../controls/X_commonControls';\nimport { XTextbase } from './XTextbase';\nimport { isTransformCentered, getLocalPoint } from '../../controls/util';\nimport { EntityKeys } from './type/widget.entity.textbox';\nimport { WidgetType } from './type/widget.type';\nimport { Point } from '../../Point';\nimport { WidgetTextInterface } from './type/widget.entity.text';\n\n// Default values for the textbox\nexport const textboxDefaultValues: Partial<TClassProperties<XTextbase>> = {\n    minWidth: 20,\n    dynamicMinWidth: 2,\n    splitByGrapheme: false,\n    cornerColor: 'white',\n    cornerSize: 10,\n    cornerStyle: 'circle',\n    transparentCorners: false,\n    cornerStrokeColor: 'gray',\n    connectors: [],\n};\n\n// Connector class definition\nclass Connector {\n    connectorId: string;\n    connectorType: string;\n    point: Point;\n}\n\nexport const XTextboxProps: Partial<TClassProperties<XTextbase>> = {};\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 XTextbox extends XTextbase implements WidgetTextInterface {\n    // Property declarations\n    declare minWidth: number;\n    declare tempTop: number;\n    declare hasNoText: boolean;\n    static objType: WidgetType = 'XTextbox';\n    static type: WidgetType = 'XTextbox';\n\n    declare dynamicMinWidth: number;\n    declare oneLine: boolean;\n    declare fromCopy: boolean;\n    declare originX: TOriginX;\n    declare originY: TOriginY;\n    declare connectors: Connector[];\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    static textLayoutProperties = [...IText.textLayoutProperties, 'width'];\n\n    static ownDefaults: Record<string, any> = textboxDefaultValues;\n\n    /**\n     * Override the getDefaults method to set default origin to center\n     */\n    static getDefaults() {\n        return {\n            ...super.getDefaults(),\n            controls: createTextboxDefaultControls(),\n            originX: 'center', // Default originX\n            originY: 'center', // Default originY\n            ...XTextbox.ownDefaults,\n        };\n    }\n\n\n    /**\n     * Constructor to initialize the textbox with default origin\n     * @param text - The initial text content\n     * @param options - Configuration options\n     */\n    constructor(text: string, options: any) {\n        super(text, options);\n\n        // Initialize dimensions\n        this.initDimensions();\n\n        // Remove height from options to manage it dynamically\n        delete options.height;\n        Object.assign(this, options);\n        this.objType = 'XTextbox';\n\n        this.dirty = true;\n\n        // Lock scaling flip and rotation to maintain aspect\n        this.lockScalingFlip = true;\n        this.lockRotation = true;\n        // Setup custom resize controls\n        this.setupCustomResizeControls();\n        // Bind event listeners for editing\n        this.on('editing:entered', this.onEditingEntered.bind(this));\n        this.on('editing:exited', this.onEditingExited.bind(this));\n    }\n    /**\n     * Set up custom resize controls that use our implementation\n     */\n    setupCustomResizeControls() {\n        // Override the action handler for 'mr' (middle right) control\n        if (this.controls && this.controls.mr) {\n            this.controls.mr.actionHandler = this.handleWidthChange.bind(this);\n        }\n\n        // Override the action handler for 'ml' (middle left) control\n        if (this.controls && this.controls.ml) {\n            this.controls.ml.actionHandler = this.handleWidthChange.bind(this);\n        }\n\n\n    }\n\n    // reserve for external interface\n    handleWidthChange2(eventData: any, transform: any, x: number, y: number) {\n\n    }\n    /**\n     * Event handler for entering edit mode\n     */\n    private onEditingEntered() {\n        const canvas = this.canvas;\n        if (!canvas) return;\n\n        // Calculate the current top-left corner in canvas coordinates\n        const topLeft = this.getBoundingRect();\n\n        // Store the current center position\n        const center = this.getCenterPoint();\n\n        // Change origin to 'left' and 'top'\n        this.originX = 'left';\n        this.originY = 'top';\n\n        // Update the position to keep the top-left corner fixed\n        this.set({\n            left: topLeft.left,\n            top: topLeft.top,\n        });\n\n        this.setCoords();\n    }\n\n    /**\n     * Event handler for exiting edit mode\n     */\n    private onEditingExited() {\n        const canvas = this.canvas;\n        if (!canvas) return;\n\n        // Calculate the current top-left corner in canvas coordinates\n        const topLeft = this.getBoundingRect();\n\n        // Change origin back to 'center'\n        this.originX = 'center';\n        this.originY = 'center';\n\n        // Calculate the new center based on top-left to keep position fixed\n        this.set({\n            left: topLeft.left + this.width / 2,\n            top: topLeft.top + this.height / 2,\n        });\n\n        this.setCoords();\n    }\n\n    /**\n     * Retrieves the object's properties\n     * @returns A record of the object's properties\n     */\n    getObject() {\n        const entityKeys: string[] = EntityKeys;\n        const result: Record<string, any> = {};\n\n        entityKeys.forEach((key) => {\n            if (key in this) {\n                result[key] = (this as any)[key];\n            }\n        });\n\n        return result;\n    }\n\n    /**\n     * Override the initDimensions method to ensure height increases downward\n     */\n    initDimensions() {\n        if (!this.initialized) {\n            return;\n        }\n        if (this.isEditing) {\n            this.initDelayedCursor();\n        }\n        this._clearCache();\n        // Clear dynamicMinWidth as it will be different after we re-wrap line\n        this.dynamicMinWidth = 0;\n\n        // Check if text contains Chinese characters\n        if (/[\\u3400-\\u9FBF]/.test(this.text)) {\n            this.splitByGrapheme = true;\n        }\n\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.indexOf('justify') !== -1) {\n            // Once text is measured we need to make space fatter to make justified text.\n            this.enlargeSpaces();\n        }\n        // Calculate height based on wrapped text\n        const newHeight = this.calcTextHeight();\n        if (newHeight !== this.height) {\n            this.set('height', newHeight);\n            this.setCoords(); // Update coordinates after height change\n        }\n    }\n\n\n    /**\n     * Handler for width changes that maintains top-left position\n     */\n    handleWidthChange(eventData: any, transform: any, x: number, y: number) {\n        // Store original top-left position\n        const oldBoundingRect = this.getBoundingRect();\n\n        // Calculate new width based on mouse position\n        const localPoint = getLocalPoint(\n            transform,\n            transform.originX,\n            transform.originY,\n            x,\n            y\n        );\n\n        const strokePadding =\n            this.strokeWidth / (this.strokeUniform ? this.scaleX : 1);\n        const multiplier = isTransformCentered(transform) ? 2 : 1;\n        const oldWidth = this.width;\n\n        // Calculate and set new width\n        const newWidth =\n            Math.abs((localPoint.x * multiplier) / this.scaleX) - strokePadding;\n\n        // Record original left/top before width change\n        const originalLeft = this.left;\n        const originalTop = this.top;\n\n        // Set new width and update dimensions\n        this.set('width', Math.max(newWidth, this.getMinWidth()));\n\n        // Recalculate text dimensions and height\n        this.initDimensions();\n        this.set('dirty', true);\n\n        // After dimensions update, get new bounding rectangle\n        const newBoundingRect = this.getBoundingRect();\n\n        // Calculate position adjustment to keep top-left fixed\n        const dx = newBoundingRect.left - oldBoundingRect.left;\n        const dy = newBoundingRect.top - oldBoundingRect.top;\n\n        // Apply position adjustment\n        this.set({\n            left: originalLeft - dx,\n            top: originalTop - dy\n        });\n\n        // Update coordinates\n        this.setCoords();\n        this.handleWidthChange2(eventData, transform, x, y);\n\n        return oldWidth !== this.width;\n    }\n}\n\n// Register the XTextbox class with the class registry\nclassRegistry.setClass(XTextbox);\n// classRegistry.getSVGClass(Textbox); // Uncomment if SVG class registration is needed\n","import { FileObject } from './file';\nimport   {WidgetBaseInterface, TOriginX, TOriginY } from './widget.entity.base';\nimport { WidgetType } from './widget.type';\n\nexport   interface WidgetImageInterface extends WidgetBaseInterface {\n  cropX: number;\n  cropY: number;\n  cropWidth: number;\n  cropHeight: number;\n  previewImage: FileObject|null;\n  imageSrc: FileObject|null;\n}\n\nexport class WidgetImageClass implements WidgetImageInterface {\n  updatedBy: string = \"\";\n  updatedByName: string = \"\";\n   createdByName: string=\"\";\n  markdownText: string = '';\n  cropX: number = 0;\n  cropY: number = 0;\n  cropWidth: number = 0;\n  cropHeight: number = 0;\n  previewImage: FileObject |null =null;\n  imageSrc: FileObject  |null =null;\n  id: string = '';\n  boardId: string = '';\n  backgroundColor: string = 'transparent';\n  width: number = 0;\n  height: number = 0;\n  left: number = 0;\n  locked: boolean = false;\n  objType: WidgetType = \"XImage\"; // Assuming WidgetType.Default is a valid enum value\n  originX: TOriginX = 'center'; // Assuming 'left' is a valid TOriginX value\n  originY: TOriginY = 'center'; // Assuming 'top' is a valid TOriginY value\n  scaleX: number = 1;\n  scaleY: number = 1;\n  selectable: boolean = true;\n  top: number = 0;\n  userId: string = '';\n  zIndex: number = Date.now() *100;\n  version: string = '';\n  updatedAt: number = Date.now();\n   createdAt: number = Date.now();\n  createdBy: string = '';\n  visible: boolean = true;\n}\n\nexport const EntityKeys = Object.keys(new WidgetImageClass()) as (keyof WidgetImageInterface)[];","import type { BaseFilter } from '../../filters/BaseFilter';\nimport { SHARED_ATTRIBUTES } from '../../parser/attributes';\nimport { TSize } from '../../typedefs';\nimport { findScaleToCover, findScaleToFit } from '../../util/misc/findScaleTo';\nimport { parsePreserveAspectRatioAttribute } from '../../util/misc/svgParsing';\nimport { classRegistry } from '../../ClassRegistry';\nimport { TOptions } from '../../typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from '../Object/types';\nimport type { ObjectEvents } from '../../EventTypeDefs';\n// @todo Would be nice to have filtering code not imported directly.\n\nimport { WidgetImageInterface, EntityKeys } from './type/widget.entity.image';\nimport { FabricImage } from '../Image';\nimport { WidgetType } from './type/widget.type';\nimport { FileObject } from './type/file';\n\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  crossOrigin: string | null;\n  filters: BaseFilter[];\n  resizeFilter?: BaseFilter;\n}\n\nexport const imageDefaultValues: Partial<UniqueImageProps> &\n  Partial<FabricObjectProps> = {\n  strokeWidth: 0,\n  srcFromAttribute: false,\n  minimumScaleTrigger: 0.5,\n  cropX: 0,\n  cropY: 0,\n  imageSmoothing: true,\n  crossOrigin: 'anonymous',\n  originX: 'center',\n  originY: 'center',\n};\n\nexport interface SerializedImageProps extends SerializedObjectProps {\n  src: string;\n  crossOrigin: string | null;\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 XImage<\n  Props extends TOptions<ImageProps> = Partial<ImageProps>,\n  SProps extends SerializedImageProps = SerializedImageProps,\n  EventSpec extends ObjectEvents = ObjectEvents\n> extends FabricImage implements WidgetImageInterface {\n\n  cropWidth: number;\n  cropHeight: number;\n  previewImage: FileObject;\n  imageSrc: FileObject;\n  version: string;\n  updatedAt: number;\n\n  createdAt: number;\n  createdBy: string;\n  boardId: string;\n  objType: WidgetType;\n  userId: string;\n  zIndex: number;\n  /* boardx cusotm function */\n\n  static type: WidgetType = 'XImage';\n  static objType: WidgetType = 'XImage';\n\n  constructor(image: any, options: any) {\n\n    options.objType = 'XImage';\n    options.cornerColor = 'white';\n    options.cornerSize = 10;\n    options.cornerStyle = 'circle';\n    options.transparentCorners = false;\n    options.cornerStrokeColor = 'gray';\n    super(image, options);\n    Object.assign(this, options);\n\n  }\n  updatedBy: string;\n  updatedByName: string;\n  markdownText: string;\n\n  createdByName: string;\n\n\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n\n\n  /**\n   * Renders the image on the canvas context, correctly handling scaling and cropping.\n   * @private\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   */\n  _renderFill(ctx: CanvasRenderingContext2D) {\n    const elementToDraw = this._element;\n    if (!elementToDraw) {\n      return;\n    }\n\n    // Get the object's dimensions\n    const w = this.width,\n      h = this.height,\n      // Crop values cannot be less than 0\n      cropX = Math.max(this.cropX, 0),\n      cropY = Math.max(this.cropY, 0),\n      // Get the natural dimensions of the image element\n      elWidth =\n        (elementToDraw as HTMLImageElement).naturalWidth || elementToDraw.width,\n      elHeight =\n        (elementToDraw as HTMLImageElement).naturalHeight || elementToDraw.height,\n      // Calculate source width and height, ensuring we don't exceed image bounds\n      sX = cropX,\n      sY = cropY,\n      sW = Math.min(w, elWidth - cropX),\n      sH = Math.min(h, elHeight - cropY),\n      // Destination coordinates (centered)\n      x = -w / 2,\n      y = -h / 2,\n      destW = w,\n      destH = h;\n\n    // Draw the image onto the canvas context\n    ctx.drawImage(\n      elementToDraw,\n      sX,\n      sY,\n      sW,\n      sH,\n      x,\n      y,\n      destW,\n      destH\n    );\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 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  /**\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<TSize> = {}) {\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 Image.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  _stopEvent(e: any) {\n    if (e.preventDefault) e.preventDefault();\n    if (e.stopPropagation) e.stopPropagation();\n  }\n\n  cloneWidget() {\n    return this.toObject();\n  }\n}\n\nclassRegistry.setClass(XImage);\nclassRegistry.setSVGClass(XImage);\n","//@ts-nocheck\nimport { 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\nexport const 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\nexport const 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\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 */\nexport function 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<PathPointControl>) {\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<PathControlPointControl>) {\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<Control> & {\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<PathControlPointControl>);\n\nexport function createPathControls(\n  path: Path,\n  options: Partial<Control> & {\n    controlPointStyle?: PathPointControlStyle;\n    pointStyle?: PathPointControlStyle;\n  } = {}\n): Record<string, Control> {\n  const controls = {} as Record<string, Control>;\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 { WidgetBaseInterface, TOriginX, TOriginY } from './widget.entity.base';\nimport { WidgetType } from './widget.type';\n\nexport type pathType = 'curvePath' | 'straightPath';\nexport type pathArrowTip = 'none' | 'start' | 'end' | 'both';\nexport type xy = { x: number; y: number };\n\nexport interface WidgetConnectorInterface extends WidgetBaseInterface {\n  path: any[];\n  fromObjectId: string;\n  toObjectId: string;\n  pathType: pathType;\n  pathArrowTip: pathArrowTip;\n  fromPoint: xy;\n  toPoint: xy;\n  control1: xy;\n  control2: xy;\n  style: any;\n\n  fill: string | null | any;\n  stroke: string | null | any;\n  strokeWidth: number;\n  strokeLineCap: string;\n  strokeDashOffset: number;\n  strokeLineJoin: string;\n  strokeUniform: boolean;\n  strokeMiterLimit: number;\n  fillRule: string;\n}\n\nexport class WidgetConnectorClass implements WidgetConnectorInterface {\n  updatedBy: string = \"\";\n  updatedByName: string = \"\";\n  path: any[] = [''];\n  fill: any = 'transparent';\n  stroke: any = '#000000';\n  strokeWidth: number = 1;\n  strokeLineCap: string = 'butt';\n  strokeDashOffset: number = 0;\n  strokeLineJoin: string = 'miter';\n  strokeUniform: boolean = false;\n  strokeMiterLimit: number = 10;\n  fillRule: string = 'nonzero';\n   createdByName: string = \"\";\n  fromObjectId: string = '';\n  toObjectId: string = '';\n  pathType: pathType = \"curvePath\";\n  pathArrowTip: pathArrowTip = 'none';\n  fromPoint: xy = { x: 0, y: 0 };\n  toPoint: xy = { x: 0, y: 0 };\n  control1: xy = { x: 0, y: 0 };\n  control2: xy = { x: 0, y: 0 };\n  style: any = {};\n  id: string = '';\n  boardId: string = '';\n  backgroundColor: string = 'transparent';\n  width: number = 0;\n  height: number = 0;\n  left: number = 0;\n  locked: boolean = false;\n  objType: WidgetType = \"XConnector\"; // Replace with an actual default value\n  originX: TOriginX = 'center'; // Replace with an actual default value\n  originY: TOriginY = 'center'; // Replace with an actual default value\n  scaleX: number = 1;\n  scaleY: number = 1;\n  selectable: boolean = true;\n  top: number = 0;\n  zIndex: number = Date.now() * 100;\n  version: string = '';\n  updatedAt: number = Date.now();\n   createdAt: number = Date.now();\n  createdBy: string = '';\n  visible: boolean = true;\n}\n\nexport const EntityKeys = Object.keys(new WidgetConnectorClass()) as (keyof WidgetConnectorInterface)[];\n","import { Path } from '../Path';\nimport { sendPointToPlane, TSimpleParsedCommand } from '../../util';\nimport { Point, XY } from '../../Point';\nimport { classRegistry } from '../../ClassRegistry';\nimport { iMatrix } from '../../constants';\nimport { createPathControls } from '../../controls/pathControl';\nimport { XCanvas } from '../../canvas/canvasx/bx-canvas';\nimport { Transform } from '../../EventTypeDefs';\n\nimport { EntityKeys, WidgetConnectorInterface } from './type/widget.entity.connector';\nimport { WidgetType } from './type/widget.type';\n\nconst getPath = (\n  fromPoint: XY,\n  toPoint: XY,\n  control1: XY,\n  control2: XY,\n  pathType: 'curvePath' | 'straightPath' = 'curvePath'\n) => {\n  if (pathType === 'curvePath') {\n    return `M ${fromPoint.x} ${fromPoint.y} C ${control1.x}, ${control1.y}, ${control2.x} ${control2.y}, ${toPoint.x} ${toPoint.y}`;\n  } else {\n    return `M ${fromPoint.x} ${fromPoint.y} L ${toPoint.x} ${toPoint.y}`;\n  }\n};\n\nclass XConnector extends Path implements WidgetConnectorInterface {\n  static type: WidgetType = 'XConnector';\n  static objType: WidgetType = 'XConnector';\n  style: any;\n  declare fromObjectId: string;\n  declare toObjectId: string;\n  declare pathType: 'curvePath' | 'straightPath';\n  declare pathArrowTip: 'none' | 'start' | 'end' | 'both';\n  declare fromPoint: XY;\n  declare toPoint: XY;\n  declare control1: XY;\n  declare control2: XY;\n\n  /**\n   * Contains the path to draw the arrow tip start\n   */\n  declare pathStart: TSimpleParsedCommand[];\n\n  /**\n   * Contains the path to draw the arrow tip end\n   */\n  declare pathEnd: TSimpleParsedCommand[];\n\n\n  constructor(\n    fromPoint: XY,\n    toPoint: XY,\n    control1: XY,\n    control2: XY,\n    options: any = {}\n  ) {\n    const path = getPath(fromPoint, toPoint, control1, control2, options.pathType);\n\n\n\n\n    super(path, options);\n    // Object.assign(this, options);\n\n    //default values\n    this.perPixelTargetFind = true;\n    this.cornerColor = 'white';\n    this.cornerStyle = 'circle';\n    this.type = 'XConnector';\n    this.objType = 'XConnector';\n    this.transparentCorners = false;\n    this.cornerStrokeColor = 'gray';\n    this.hasBorders = false;\n    this.objectCaching = false;\n\n\n    this.pathType = options.pathType || 'curvePath';\n    this.pathArrowTip = options.pathArrowTip || 'both';\n    this.fromObjectId = options.fromObjectId;\n    this.toObjectId = options.toObjectId;\n    this.fromPoint = fromPoint;\n    this.toPoint = toPoint;\n    this.control1 = control1;\n    this.control2 = control2;\n    this.createdByName = options.createdByName;\n    this.createdBy = options.createdBy;\n    this.createdAt = options.createdAt;\n    this.boardId = options.boardId;\n    this.style = options.style;\n    this.fill = options.fill || 'transparent';\n    this.stroke = options.stroke || '#000000';\n    this.createdAt = options.createdAt;\n    this.updatedBy = options.updatedBy;\n    this.updatedByName = options.updatedByName;\n    this.version = options.version;\n    this.zIndex = options.zIndex;\n\n    // Object.assign(this, options);\n    this._setMovementLock();\n    this.calcStartEndPath();\n    this.controls = {\n      ...createPathControls(this, {\n        mouseDownHandler: this._mouseDownControl.bind(this),\n        mouseUpHandler: this._mouseUpControl.bind(this),\n        cursorStyle: 'crosshair',\n        pointStyle: {\n          controlFill: 'white',\n          controlStroke: 'gray',\n        },\n        controlPointStyle: {\n          controlFill: 'white',\n          connectionDashArray: [5, 5],\n          controlStroke: 'gray',\n        },\n      }),\n    };\n    this.on('modifyPath', function (this: XConnector, evtOpt) {\n      this.calcStartEndPath();\n      const { commandIndex, pointIndex } = evtOpt;\n      // commandIndex === 0 is always start,\n      // all the commandIndex === 1 are control points apart the 5\n      if (commandIndex === 1 && pointIndex !== 5) {\n        return;\n      }\n      this.dragActionEventHandler(evtOpt.commandIndex, evtOpt.pointIndex);\n    });\n  }\n  updatedBy: string;\n  updatedByName: string;\n\n  createdByName: string;\n  boardId: string;\n  objType: WidgetType;\n  userId: string;\n  zIndex: number;\n  version: string;\n  updatedAt: number;\n\n  createdAt: number;\n  createdBy: string;\n\n  getFromPoint() {\n    const command = this.path[0];\n    return new Point(command[1]!, command[2]!);\n  }\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n\n\n  getToPoint() {\n    const lastCommand = this.path[this.path.length - 1];\n    return lastCommand[0] === 'L'\n      ? new Point(lastCommand[1]!, lastCommand[2]!)\n      : new Point(lastCommand[5]!, lastCommand[6]!);\n  }\n\n  /**\n   * calculate the drawing commands for the connector tips\n   */\n  calcStartEndPath() {\n    this.pathStart = [];\n    this.pathEnd = [];\n\n    const { pathType, pathArrowTip } = this;\n    const firstCommand = this.path[0];\n    const lastCommand = this.path[this.path.length - 1];\n\n    const fromPoint = new Point(firstCommand[1]!, firstCommand[2]!);\n    const toPoint =\n      lastCommand[0] === 'L'\n        ? new Point(lastCommand[1]!, lastCommand[2]!)\n        : new Point(lastCommand[5]!, lastCommand[6]!);\n\n    /* Calculate Path START */\n    if (pathArrowTip === 'start' || pathArrowTip === 'both') {\n      const startArrowSize = 20 + this.strokeWidth; // Adjust the size of the start arrow tip\n\n      const startAngle =\n        pathType === 'straightPath'\n          ? Math.atan2(fromPoint.y - toPoint.y, fromPoint.x - toPoint.x) +\n          Math.PI\n          : Math.atan2(\n            lastCommand[2]! - fromPoint.y,\n            lastCommand[1]! - fromPoint.x\n          );\n\n      const startArrow1X =\n        fromPoint.x + startArrowSize * Math.cos(startAngle + Math.PI / 6);\n      const startArrow1Y =\n        fromPoint.y + startArrowSize * Math.sin(startAngle + Math.PI / 6);\n      const startArrow2X =\n        fromPoint.x + startArrowSize * Math.cos(startAngle - Math.PI / 6);\n      const startArrow2Y =\n        fromPoint.y + startArrowSize * Math.sin(startAngle - Math.PI / 6);\n\n      this.pathStart = [\n        ['M', startArrow1X, startArrow1Y],\n        ['L', fromPoint.x, fromPoint.y],\n        ['L', startArrow2X, startArrow2Y],\n      ];\n    }\n    /* Calculate Path End */\n    if (pathArrowTip === 'end' || pathArrowTip === 'both') {\n      const endArrowSize = 20 + this.strokeWidth; // Adjust the size of the end arrow tip\n      const endAngle =\n        pathType === 'straightPath'\n          ? Math.atan2(toPoint.y - fromPoint.y, toPoint.x - fromPoint.x)\n          : Math.atan2(\n            toPoint.y - lastCommand[4]!,\n            toPoint.x - lastCommand[3]!\n          );\n\n      const endArrow1X =\n        toPoint.x - endArrowSize * Math.cos(endAngle - Math.PI / 6);\n      const endArrow1Y =\n        toPoint.y - endArrowSize * Math.sin(endAngle - Math.PI / 6);\n      const endArrow2X =\n        toPoint.x - endArrowSize * Math.cos(endAngle + Math.PI / 6);\n      const endArrow2Y =\n        toPoint.y - endArrowSize * Math.sin(endAngle + Math.PI / 6);\n\n      this.pathEnd = [\n        ['M', endArrow1X, endArrow1Y],\n        ['L', toPoint.x, toPoint.y],\n        ['L', endArrow2X, endArrow2Y],\n      ];\n    }\n  }\n\n  calculateControlPoint(controlPointType: 'from' | 'to', point: any) {\n    let controlPoint;\n    if (controlPointType === 'from') {\n      //@ts-ignore\n      const fromObject = this.canvas?.findById(this.fromObjectId);\n      if (fromObject && fromObject.calculateControlPoint) {\n        controlPoint = fromObject.calculateControlPoint(point);\n      }\n    }\n\n    if (controlPointType === 'to') {\n      //@ts-ignore\n      const toObject = this.canvas?.findById(this.toObjectId);\n      if (toObject && toObject.calculateControlPoint) {\n        controlPoint = toObject.calculateControlPoint(point);\n      }\n    }\n\n    if (controlPoint) {\n      return controlPoint;\n    } else {\n      return point;\n    }\n  }\n\n  /**\n   * Given the points in scene coordinates, updates the path\n   * This function is called by other objects that are moving or changing properties\n   */\n  update({ fromPoint, toPoint, control1, control2, style }: any = {}) {\n    const finalCommand = this.path[this.path.length - 1];\n\n    if (!fromPoint) {\n      fromPoint = TransformPointFromPathToCanvas(\n        this,\n        new Point(this.path[0][1]!, this.path[0][2]!)\n      );\n      this.fromPoint = fromPoint;\n    }\n\n    if (!toPoint) {\n      toPoint = TransformPointFromPathToCanvas(\n        this,\n        finalCommand[0] === 'L'\n          ? new Point(finalCommand[1]!, finalCommand[2]!)\n          : new Point(finalCommand[5]!, finalCommand[6]!)\n      );\n      finalCommand[0] === 'L' ? 1 : 5;\n      this.toPoint = toPoint;\n    }\n    let controlPoint1: Point, controlPoint2: Point;\n    if (finalCommand[0] === 'L') {\n      controlPoint1 = this.calculateControlPoint('from', fromPoint);\n      controlPoint2 = this.calculateControlPoint('to', toPoint);\n    }\n    if (!control1) {\n      control1 = TransformPointFromPathToCanvas(\n        this,\n        finalCommand[0] === 'L'\n          ? controlPoint1!\n          : new Point(finalCommand[1]!, finalCommand[2]!)\n      );\n      this.control1 = control1;\n    }\n\n    if (!control2) {\n      control2 = TransformPointFromPathToCanvas(\n        this,\n        finalCommand[0] === 'L'\n          ? controlPoint2!\n          : new Point(finalCommand[3]!, finalCommand[4]!)\n      );\n      this.control2 = control2;\n    }\n\n    if (style) {\n      this.style = style;\n    }\n\n    const path = getPath(fromPoint, toPoint, control1, control2, this.pathType);\n\n    const { path: newPath } = new Path(path);\n    this.path = newPath;\n    this.setBoundingBox(true);\n\n    this.calcStartEndPath();\n    this.dirty = true;\n  }\n\n  _mouseDownControl(\n    eventData: any,\n    transform: Transform,\n    x: number,\n    y: number\n  ) {\n    const target = transform.target;\n    target.objectCaching = false;\n\n    this.mouseDownHandler(eventData, transform, x, y);\n  }\n\n  mouseDownHandler(eventData: any, transform: Transform, x: number, y: number) {\n    //reserve for subclass\n  }\n\n  mouseUpHandler(eventData: any, transform: Transform, x: number, y: number) {\n    //reserve for subclass\n  }\n  /**\n   * Compared to Path, it will render the official Path + the arrow tips.\n   * @param ctx\n   */\n  _renderPathCommands(ctx: CanvasRenderingContext2D) {\n    const path = this.path;\n    this.path = [...this.pathStart, ...this.path, ...this.pathEnd];\n    super._renderPathCommands(ctx);\n    this.path = path;\n  }\n\n  _mouseUpControl(eventData: any, transform: Transform, x: number, y: number) {\n    const { target } = transform;\n    if (!target.canvas) {\n      return;\n    }\n    (target.canvas as XCanvas).dockingWidget = null;\n    target.dirty = true;\n    target.setCoords();\n    transform.target.canvas?.requestRenderAll();\n    this.mouseUpHandler(eventData, transform, x, y);\n    this._setMovementLock();\n  }\n\n  _setMovementLock() {\n    if (this.fromObjectId || this.toObjectId) {\n      this.lockMovementX = true;\n      this.lockMovementY = true;\n    } else {\n      this.lockMovementX = false;\n      this.lockMovementY = false;\n    }\n  }\n\n  getControlPointOnCanvas(obj: any, controlName: string) {\n    const controlInfo = obj.controls[controlName];\n    const x = controlInfo.x * obj.width;\n    const y = controlInfo.y * obj.height;\n    const point = new Point(x, y);\n\n    const transformedPoint = obj.transformPointToCanvas(point);\n\n    return transformedPoint;\n  }\n\n  /**\n   * Responds to the path points being moved calculating the docking.\n   * @param commandIndex The command index in the path we are dragging\n   * @param pointIndex  the index of the X coordinate of the point we are moving in .path[commandIndex]\n   * @returns\n   */\n  dragActionEventHandler(commandIndex: number, pointIndex: number) {\n    const target = this;\n    // const relevantPoint = getLocalPoint(transform, 'center', 'top', x, y);\n    //@ts-ignore\n    const currentDockingObject = target.canvas?.dockingWidget;\n\n    const property = commandIndex === 0 ? 'fromObjectId' : 'toObjectId';\n    const existingConnectionId = target[property];\n    let connectedObject: any = null;\n    if (existingConnectionId) {\n      connectedObject = (target.canvas as XCanvas).findById(\n        existingConnectionId\n      ) as any;\n    }\n\n    // Andrea, followup: currentDockingObject.hoveringControl relies on a mousemove event that gets added\n    // and removed when we start the connector drag.\n    // this logic should be resolved inside the connector.\n    const connectorType = commandIndex === 0 ? 'from' : 'to';\n    if (\n      currentDockingObject &&\n      currentDockingObject.controls[\n      currentDockingObject.canvas.hoveringControl\n      ] &&\n      currentDockingObject.calculateControlPoint\n    ) {\n      const hoverPoint = this.getControlPointOnCanvas(\n        currentDockingObject,\n        currentDockingObject.canvas.hoveringControl\n      );\n\n      const targetX = hoverPoint.x;\n      const targetY = hoverPoint.y;\n\n      if (existingConnectionId) {\n        if (connectedObject) {\n          connectedObject.connectors = connectedObject.connectors?.filter(\n            (connector: any) =>\n              !(\n                connector.connectorId === target.id &&\n                connector.connectorType === connectorType\n              )\n          );\n          if (connectedObject.calculateControlPoint) {\n            const controlPoint =\n              connectedObject.calculateControlPoint(hoverPoint);\n            if (commandIndex === 0) {\n              this.update({\n                fromPoint: { x: targetX, y: targetY },\n                control1: controlPoint,\n              });\n            } else {\n              this.update({\n                toPoint: { x: targetX, y: targetY },\n                control2: controlPoint,\n              });\n            }\n          }\n        }\n      }\n\n      target[commandIndex === 0 ? 'fromObjectId' : 'toObjectId'] =\n        currentDockingObject.id;\n\n      if (!currentDockingObject.connectors) {\n        currentDockingObject.connectors = [];\n      }\n\n      currentDockingObject.connectors.push({\n        connectorId: target.id,\n        connectorType: connectorType,\n        point: currentDockingObject.transformPointFromCanvas({\n          x: targetX,\n          y: targetY,\n        }),\n      });\n    }\n\n    if (!currentDockingObject && connectedObject) {\n      //if it is not attached to object, remove the connector from the existing connected object and clear the from/to object id\n      target[property] = '';\n      connectedObject.connectors = connectedObject.connectors?.filter(\n        (connector: any) =>\n          !(\n            connector.connectorId === target.id &&\n            connector.connectorType === connectorType\n          )\n      );\n    }\n  }\n}\n\nexport { XConnector };\n\nexport const TransformPointFromPathToCanvas = (\n  object: XConnector,\n  point: Point\n) =>\n  sendPointToPlane(\n    point.subtract(object.pathOffset),\n    object.calcOwnMatrix(),\n    iMatrix\n  );\n\nclassRegistry.setClass(XConnector);\n","import { WidgetBaseInterface, TOriginX, TOriginY } from './widget.entity.base';\nimport { WidgetType } from './widget.type';\nimport { FileObject } from './file';\n\nexport enum FileDocument {\n  DOC = 'Word Document',\n  DOCX = 'Word Document',\n  XLS = 'Excel Document',\n  XLSX = 'Excel Document',\n  PPT = 'PPT Document',\n  PPTX = 'PPT Document',\n  PDF = 'PDF Document',\n  ZIP = 'ZIP File',\n  MP4 = 'Video Document',\n  WEBM = 'Video Document',\n  MP3 = 'Audio Document',\n  M4A = 'Audio Document',\n  WAV = 'Audio Document',\n  AAC = 'Audio Document',\n  FLAC = 'Audio Document',\n  OGG = 'Audio Document',\n  AIFF = 'Audio Document',\n  WMA = 'Audio Document',\n  APE = 'Audio Document',\n}\n\nexport type FileObjectType = keyof typeof FileEnum;\n\nexport enum FileEnum {\n  DOC = 'doc',\n  DOCX = 'docx',\n  XLS = 'xls',\n  XLSX = 'xlsx',\n  PPT = 'ppt',\n  PPTX = 'pptx',\n  PDF = 'pdf',\n  ZIP = 'zip',\n  MP4 = 'mp4',\n  WEBM = 'webm',\n\n  MP3 = 'mp3',\n  M4A = 'm4a',\n  WAV = 'wav',\n  AAC = 'aac',\n  FLAC = 'flac',\n  OGG = 'ogg',\n  AIFF = 'aiff',\n  WMA = 'wma',\n  APE = 'ape',\n  UNKNOWN = 'unknown',\n}\n\n\nexport interface WidgetFileInterface extends WidgetBaseInterface {\n  fileName: string;\n  fileSrc: FileObject | null;\n  vectorSrc: FileObject | null;\n  transcription: string;\n  fileObjectType: FileObjectType;\n  previewImage: FileObject | null;\n}\n\n\nexport class WidgetFileClass implements WidgetFileInterface {\n  updatedBy: string = \"\";\n  updatedByName: string = \"\";\n  createdByName: string = \"\";\n  fileName: string = '';\n  fileSrc: FileObject | null = null;\n  vectorSrc: FileObject | null = null;\n  transcription: string = '';\n  fileObjectType: FileObjectType = 'UNKNOWN';\n  previewImage: FileObject | null = null;\n  id: string = '';\n  boardId: string = '';\n  backgroundColor: string = 'transparent';\n  width: number = 300;\n  height: number = 400;\n  left: number = 0;\n  locked: boolean = false;\n  objType: WidgetType = \"XFile\";\n  originX: TOriginX = 'center';\n  originY: TOriginY = 'center';\n  scaleX: number = 1;\n  scaleY: number = 1;\n  selectable: boolean = true;\n  top: number = 0;\n   zIndex: number = Date.now() * 100;\n  version: string = '';\n  updatedAt: number = Date.now();\n  createdAt: number = Date.now();\n  createdBy: string = '';\n  visible: boolean = true;\n}\n\nexport const EntityKeys = Object.keys(new WidgetFileClass()) as (keyof WidgetFileInterface)[];","import { TOriginX, TOriginY } from 'fabric';\nimport { classRegistry } from '../../../ClassRegistry';\nimport { Shadow } from '../../../Shadow';\nimport { getFabricWindow } from '../../../env';\nimport { loadImage } from '../../../util/misc/objectEnlive';\n\nimport { ImageProps } from '../../Image';\nimport { FabricObject } from '../../Object/FabricObject';\nimport { Rect } from '../../Rect';\n\nimport {\n  WidgetFileInterface,\n  WidgetFileClass,\n  FileObjectType,\n  FileEnum\n} from '../type/widget.entity.file';\nimport { WidgetType, WidgetFileType } from '../type/widget.type';\nimport { EntityKeys, } from \"../type/widget.entity.file\";\nimport { FileObject } from \"../type/file\";\n\n\n\nexport type XFileProps = ImageProps & WidgetFileClass;\nconst FILE_ICON_PATHS: Record<WidgetFileType, string> = {\n  XFileWord: '/boardxstatic/fileIcons/word.png',\n  XFileExcel: '/boardxstatic/fileIcons/excel.png',\n  XFilePPT: '/boardxstatic/fileIcons/ppt.png',\n  XFilePDF: '/boardxstatic/fileIcons/pdf.svg',\n  XFileZip: '/boardxstatic/fileIcons/zip.png',\n  XFileVideo: '/boardxstatic/fileIcons/mp4.png',\n  XFileAudio: '/boardxstatic/fileIcons/audio.png',\n  XFile: '/boardxstatic/fileIcons/file.png',\n};\n\nexport const FILE_TYPE_NAMES: Record<FileObjectType, string> = {\n  DOC: 'Word Document',\n  DOCX: 'Word Document',\n  XLS: 'Excel Document',\n  XLSX: 'Excel Document',\n  PPT: 'PPT Document',\n  PPTX: 'PPT Document',\n  PDF: 'PDF Document',\n  ZIP: 'ZIP File',\n  MP4: 'Video Document',\n  WEBM: 'Video Document',\n  MP3: 'Audio Document',\n  M4A: 'Audio Document',\n  WAV: 'Audio Document',\n  AAC: 'Audio Document',\n  FLAC: 'Audio Document',\n  OGG: 'Audio Document',\n  AIFF: 'Audio Document',\n  WMA: 'Audio Document',\n  APE: 'Audio Document',\n  UNKNOWN: 'Other Document',\n};\n\nexport function getWidgetFileType(fileName: string): WidgetFileType {\n  const extension = fileName.split('.').pop()?.toUpperCase() as FileObjectType;\n  switch (extension) {\n    case 'DOC':\n    case 'DOCX':\n      return 'XFileWord';\n    case 'XLS':\n    case 'XLSX':\n      return 'XFileExcel';\n    case 'PPT':\n    case 'PPTX':\n      return 'XFilePPT';\n    case 'PDF':\n      return 'XFilePDF';\n    case 'ZIP':\n      return 'XFileZip';\n    case 'MP4':\n    case 'WEBM':\n      return 'XFileVideo';\n    case 'MP3':\n    case 'M4A':\n    case 'WAV':\n    case 'AAC':\n    case 'FLAC':\n    case 'OGG':\n    case 'AIFF':\n    case 'WMA':\n    case 'APE':\n      return 'XFileAudio';\n    default:\n      return 'XFile';\n  }\n}\n\nconst VIDEO_FILE_EXTENSIONS = new Set([FileEnum.MP4, FileEnum.WEBM]);\n\nexport class XFile extends FabricObject implements WidgetFileInterface {\n  static objType: WidgetFileType = 'XFile';\n  static type: WidgetFileType = 'XFile';\n\n  // WidgetFile properties\n  id: string = '';\n  boardId: string = '';\n  backgroundColor: string = 'rgba(0,0,0,0)';\n  fill: string = 'rgba(0,0,0,0)';\n  width: number = 230;\n  height: number = 248;\n  left: number = 0;\n  locked: boolean = false;\n  objType: WidgetType = 'XFile';\n  originX: TOriginX = 'center';\n  originY: TOriginY = 'center';\n  scaleX: number = 1;\n  scaleY: number = 1;\n  selectable: boolean = true;\n  top: number = 0;\n  userId: string = '';\n  zIndex: number = 0;\n  version: string = '';\n  updatedAt: number = Date.now();\n  lastEditedBy: string = '';\n  createdAt: number = Date.now();\n  createdBy: string = '';\n  visible: boolean = true;\n\n  // WidgetFile specific properties\n  fileName: string = '';\n  fileSrc: FileObject = { tmpPath: '', id: '', path: '' };\n  vectorSrc: FileObject = { tmpPath: '', id: '', path: '' };\n  transcription: string = '';\n\n  previewImage: FileObject = { tmpPath: '', id: '', path: '' };\n\n  private _previewImage: HTMLImageElement | null = null;\n\n\n\n  constructor(options: Partial<XFileProps & { type: string }> = {}) {\n    super(options);\n    this.objType = 'XFile';\n    this.initializeVisuals();\n    Object.assign(this, options);\n    this.fileObjectType = XFile.getFileType(options.fileName || '');\n    this.fill = options.backgroundColor || this.backgroundColor;\n    this.loadPreviewImage(\n      this.getFileIconURL(options.objType as WidgetFileType),\n      options.fileName!\n    );\n    this.on(\"mousedblclick\", this.onDoubleClick.bind(this)); // Attach event listener\n  }\n\n  updatedBy: string;\n  updatedByName: string;\n\n  createdByName: string;\n  fileObjectType: FileObjectType;\n\n\n\n  private initializeVisuals() {\n    this.cornerColor = 'white';\n    this.cornerStrokeColor = 'gray';\n    this.cornerSize = 10;\n    this.cornerStyle = 'circle';\n    this.transparentCorners = false;\n    this.shadow = new Shadow({\n      color: 'rgba(217, 161, 177, 0.54)',\n      offsetX: 1,\n      offsetY: 2,\n      blur: 4,\n      id: 310,\n    });\n\n    this.clipPath = new Rect({\n      left: 0,\n      top: 0,\n      rx: 8,\n      ry: 8,\n      width: this.width,\n      height: this.height,\n      fill: '#000000',\n    });\n  }\n\n  toObject(propertiesToInclude: string[] = []): any {\n    return super.toObject([...EntityKeys, ...propertiesToInclude]);\n  }\n\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n\n  onDoubleClick(): void {\n    getFabricWindow().open(this.fileSrc?.tmpPath, '_blank');\n  }\n\n  drawObject(ctx: CanvasRenderingContext2D): void {\n    this.drawBorder(ctx);\n    this.drawPreviewImage(ctx);\n    this.renderTitle(ctx, this.fileName);\n    this._renderStroke(ctx);\n  }\n\n  private drawBorder(ctx: CanvasRenderingContext2D): void {\n    ctx.beginPath();\n    ctx.fillStyle = 'rgba(255,255,255,0)';\n    ctx.fillRect(-this.width / 2, -this.height / 2, this.width, this.height);\n    ctx.lineWidth = 0;\n    ctx.strokeStyle = '#ffffff';\n    ctx.moveTo(-this.width / 2, -this.height / 2);\n    ctx.stroke();\n  }\n\n\n  private drawPreviewImage(ctx: CanvasRenderingContext2D): void {\n    if (this._previewImage) {\n      // Calculate the available height for the image to avoid overlapping the title\n      const titleHeight = 90; // Total height reserved for the title and background\n      const availableHeight = this.height - titleHeight;\n\n      // Calculate image dimensions while maintaining aspect ratio\n      const imageAspectRatio = this._previewImage.width / this._previewImage.height;\n      const drawWidth = this.width;\n      const drawHeight = drawWidth / imageAspectRatio;\n\n      // Adjust if the calculated height exceeds the available height\n      const finalDrawHeight = Math.min(drawHeight, availableHeight);\n\n      ctx.drawImage(\n        this._previewImage,\n        -this.width / 2,\n        -this.height / 2,\n        drawWidth,\n        finalDrawHeight\n      );\n    }\n  }\n\n  static getFileTypeName(fileName: string = ''): string {\n    const extension = fileName\n      .split('.')\n      .pop()\n      ?.toUpperCase() as FileObjectType;\n    return FILE_TYPE_NAMES[extension] || 'Other Document';\n  }\n\n  static getFileType(fileName: string = ''): FileObjectType {\n    const extension: FileObjectType = fileName\n      .split('.')\n      .pop()\n      ?.toUpperCase() as FileObjectType;\n\n    return extension;\n  }\n\n  isFileVideo(fileName: string): boolean {\n    const extension = fileName.split('.').pop()?.toUpperCase();\n    return VIDEO_FILE_EXTENSIONS.has(extension as FileEnum);\n  }\n\n  renderTitle(ctx: CanvasRenderingContext2D, title: string): void {\n    const maxWidth = this.width;\n    const x = -this.width / 2;\n    const y = this.height / 2 - 60;\n\n    ctx.font = '16px Inter';\n    ctx.fillStyle = 'rgba(255, 255, 255, 1)';\n    ctx.fillRect(x, y - 29, maxWidth, 90);\n    ctx.fillStyle = '#190FA1';\n\n    const sanitizedTitle = this.sanitizeTitle(title);\n    this.wrapText(ctx, sanitizedTitle, x + 15, y - 5, maxWidth - 20, 23);\n\n    // const newUrl = this.getShortenedUrl();\n    // ctx.font = '12px Inter';\n    // ctx.fillStyle = 'rgba(35, 41, 48, 0.65)';\n    // this.wrapText(ctx, newUrl, x + 15, y + 45, maxWidth - 20, 25);\n  }\n\n  private sanitizeTitle(title: string): string {\n    const unicodeTitle = this.toUnicode(title);\n    if (!title || unicodeTitle.includes('\\\\ufffd')) {\n      const parts = this.fileSrc.tmpPath.split('.');\n      return parts.length > 2 ? parts[1] : 'Untitled';\n    }\n    return title;\n  }\n\n  private toUnicode(str: string): string {\n    return escape(str).toLowerCase().replace(/%u/gi, '\\\\u');\n  }\n\n  private getShortenedUrl(): string {\n    if (!this.fileSrc.tmpPath) return '';\n    const parts = this.fileSrc.tmpPath.split('/');\n    return parts.length >= 3\n      ? `${parts[0]}/${parts[1]}/${parts[2]}`\n      : this.fileSrc.tmpPath;\n  }\n\n  private wrapText(\n    ctx: CanvasRenderingContext2D,\n    text: string,\n    x: number,\n    y: number,\n    maxWidth: number,\n    lineHeight: number\n  ): void {\n    const words = text.includes(' ') ? text.split(' ') : text.split('');\n    let line = '';\n    let lineCount = 1;\n    let tempLine = '';\n    let currentY = y;\n\n    for (let n = 0; n < words.length; n++) {\n      if (lineCount === 3) return;\n\n      const testLine = line + (words[n] + (words.length > 1 ? ' ' : ''));\n      const metrics = ctx.measureText(testLine);\n      const testWidth = metrics.width;\n\n      if (testWidth > maxWidth && n > 0) {\n        if (lineCount === 2) {\n          line = `${line.slice(0, -3)}...`;\n        }\n        ctx.fillText(line, x, currentY);\n        line = words[n] + ' ';\n        currentY += lineHeight;\n        lineCount++;\n      } else {\n        line = testLine;\n      }\n    }\n\n    if (lineCount < 3) {\n      ctx.fillText(line, x, currentY);\n    }\n  }\n\n  getFileIconURL(objType: WidgetFileType): string {\n    return FILE_ICON_PATHS[objType] || FILE_ICON_PATHS['XFile'];\n  }\n\n  async loadPreviewImage(\n    previewImage: string,\n    fileName: string\n  ): Promise<void> {\n    const url = previewImage || this.getFileIconURL(XFile.objType);\n    try {\n      this._previewImage = await loadImage(url, { crossOrigin: 'anonymous' });\n      this.dirty = true;\n      this.canvas?.requestRenderAll();\n    } catch (error) {\n      console.error('Failed to load preview image:', error);\n    }\n  }\n}\n\nclassRegistry.setClass(XFile);\n","import { XFile } from './XFile';\nimport { XFileProps } from './XFile';\nimport { classRegistry } from '../../../ClassRegistry';\n\nexport class XFileAudio extends XFile {\n  constructor(options: Partial<XFileProps>) {\n    super(options);\n    this.type = 'XFileAudio';\n    this.objType = 'XFileAudio';\n  }\n}\nclassRegistry.setClass(XFileAudio);\n","import { XFile } from './XFile';\nimport { XFileProps } from './XFile';\nimport { classRegistry } from '../../../ClassRegistry';\n\nexport class XFileVideo extends XFile {\n  constructor(options: Partial<XFileProps>) {\n    super(options);\n    this.type = 'XFileVideo';\n    this.objType = 'XFileVideo';\n  }\n}\n\nclassRegistry.setClass(XFileVideo);\n","import { XFile } from './XFile';\nimport { XFileProps } from './XFile';\nimport { classRegistry } from '../../../ClassRegistry';\n\nexport class XFileExcel extends XFile {\n  constructor(options: Partial<XFileProps>) {\n    super(options);\n    this.type = 'XFileExcel';\n    this.objType = 'XFileExcel';\n  }\n}\nclassRegistry.setClass(XFileExcel);\n","import { XFile } from './XFile';\nimport { XFileProps } from './XFile';\nimport { classRegistry } from '../../../ClassRegistry';\n\nexport class XFileWord extends XFile {\n  constructor(options: Partial<XFileProps>) {\n    super(options);\n    this.type = 'XFileWord';\n    this.objType = 'XFileWord';\n  }\n}\n\nclassRegistry.setClass(XFileWord);\n","import { XFile } from './XFile';\nimport { XFileProps } from './XFile';\nimport { classRegistry } from '../../../ClassRegistry';\n\nexport class XFileZip extends XFile {\n  constructor(options: Partial<XFileProps>) {\n    super(options);\n    this.type = 'XFileZip';\n    this.objType = 'XFileZip';\n  }\n}\n\nclassRegistry.setClass(XFileZip);\n","import { XFile } from './XFile';\nimport { XFileProps } from './XFile';\nimport { classRegistry } from '../../../ClassRegistry';\n\nexport class XFilePDF extends XFile {\n  constructor(options: Partial<XFileProps>) {\n    super(options);\n    this.type = 'XFilePDF';\n    this.objType = 'XFilePDF';\n  }\n}\nclassRegistry.setClass(XFilePDF);\n","import { XFile } from './XFile';\nimport { XFileProps } from './XFile';\nimport { classRegistry } from '../../../ClassRegistry';\n\nexport class XFilePPT extends XFile {\n  constructor(options: Partial<XFileProps>) {\n    super(options);\n    this.type = 'XFilePPT';\n    this.objType = 'XFilePPT';\n  }\n}\n\nclassRegistry.setClass(XFilePPT);\n","import  {WidgetBaseInterface, TOriginX, TOriginY } from './widget.entity.base';\nimport { WidgetType } from './widget.type';\n\nexport   interface WidgetGroupInterface extends WidgetBaseInterface {\n  objectArr: any[];\n}\n\nexport class WidgetGroupClass implements WidgetGroupInterface {\n  updatedBy: string = \"\";\n  updatedByName: string = \"\";\n   createdByName: string=\"\";\n  objectArr: any[] = [];\n  id: string = '';\n  boardId: string = '';\n  backgroundColor: string = 'transparent';\n  width: number = 0;\n  height: number = 0;\n  left: number = 0;\n  locked: boolean = false;\n  objType: WidgetType = \"XGroup\"; // Assuming WidgetType.Default is a valid enum value\n  originX: TOriginX = 'center'; // Assuming 'left' is a valid TOriginX value\n  originY: TOriginY = 'center'; // Assuming 'top' is a valid TOriginY value\n  scaleX: number = 1;\n  scaleY: number = 1;\n  selectable: boolean = true;\n  top: number = 0;\n  zIndex: number = Date.now() *100;\n  version: string = '1.0';\n  updatedAt: number = Date.now();\n   createdAt: number = Date.now();\n  createdBy: string = '';\n  visible: boolean = true;\n}\n\nexport const EntityKeys = Object.keys(new WidgetGroupClass()) as (keyof WidgetGroupInterface)[];\n","import { classRegistry } from '../../ClassRegistry';\nimport { Group } from '../Group';\n\nimport { WidgetType } from './type/widget.type';\nimport { EntityKeys } from './type/widget.entity.group';\nimport { WidgetGroupInterface } from './type/widget.entity.group';\n\n\nexport class XGroup extends Group implements WidgetGroupInterface {\n  static type: WidgetType = 'XGroup';\n  static objType: WidgetType = 'XGroup';\n\n\n  constructor(objects: any, options: any) {\n\n\n    super(objects, options);\n    Object.assign(this, options);\n    this.objType = 'XGroup';\n    this.cornerColor = 'white';\n    this.cornerSize = 10;\n    this.cornerStyle = 'circle';\n    this.transparentCorners = false;\n    this.cornerStrokeColor = 'gray';\n  }\n  updatedBy: string;\n  updatedByName: string;\n\n  createdByName: string;\n  objectArr: any[];\n  boardId: string;\n  objType: WidgetType;\n  userId: string;\n  zIndex: number;\n  version: string;\n  updatedAt: number;\n\n  createdAt: number;\n  createdBy: string;\n\n\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n\n  //  override the default behavior of `getText` to return a concatenated string of all text objects\\\n  // canvasX custoom method\n  getText(): any {\n    if (this.getObjects().length > 1) {\n      const textsArray = this.getObjects().map((item) => item.getText());\n      return textsArray.join('/n').trim();\n    } else {\n      return '';\n    }\n  }\n}\nclassRegistry.setClass(XGroup);\n","import { WidgetBaseInterface, TOriginX, TOriginY } from './widget.entity.base';\nimport { FileObject } from './file';\nimport { WidgetType } from './widget.type';\nexport interface WidgetURLInterface extends WidgetBaseInterface {\n  transcription: string;\n  vectorSrc: FileObject | null;\n  url: string;\n  fileName: string;\n  previewImage: FileObject | null;\n}\n\n\nexport class WidgetURLClass implements WidgetURLInterface {\n  updatedBy: string = \"\";\n  updatedByName: string = \"\";\n  createdByName: string = \"\";\n  transcription: string = '';\n  vectorSrc: FileObject | null = null;\n  url: string  = \"https://www.boardx.us\";\n  fileName: string = '';\n  previewImage: FileObject | null = null;\n  id: string = '';\n  boardId: string = '';\n  backgroundColor: string = '#FFFFFF';\n  width: number = 0;\n  height: number = 0;\n  left: number = 0;\n  locked: boolean = false;\n  objType: WidgetType = \"XURL\";\n  originX: TOriginX = 'center';\n  originY: TOriginY = 'center';\n  scaleX: number = 1;\n  scaleY: number = 1;\n  selectable: boolean = true;\n  top: number = 0;\n  zIndex: number = Date.now() * 100;\n  version: string = '1.0';\n  updatedAt: number = Date.now();\n  createdAt: number = Date.now();\n  createdBy: string = '';\n  visible: boolean = true;\n}\n\n\nexport const EntityKeys = Object.keys(new WidgetURLClass()) as string[];","import { classRegistry } from '../../../ClassRegistry';\nimport { Shadow } from '../../../Shadow';\nimport { getFabricWindow } from '../../../env';\nimport { loadImage } from '../../../util/misc/objectEnlive';\n\nimport { ImageProps } from '../../Image';\nimport { FabricObject } from '../../Object/FabricObject';\nimport { Rect } from '../../Rect';\nimport { FileObject } from '../type/file';\n\nimport { WidgetURLInterface, EntityKeys } from '../type/widget.entity.url';\nimport { WidgetType } from '../type/widget.type';\n\nexport type XURLProps = ImageProps & WidgetURLInterface;\n\nexport const XURLDefaultValues: Partial<XURLProps> = {\n  originX: 'center',\n  originY: 'center',\n  cornerColor: 'white',\n  cornerStrokeColor: 'gray',\n  cornerSize: 10,\n  cornerStyle: 'circle',\n  transparentCorners: false,\n};\n\nexport class XURL extends FabricObject implements WidgetURLInterface {\n  static objType = 'XURL';\n  static type = 'XURL';\n  transcription: string;\n\n  _previewImage: HTMLImageElement | null = null;\n\n  public extendedProperties = [\n    'id',\n    'objType',\n    'fileName',\n    'transcription',\n    'vectorSrc',\n    'fileSrc',\n    'previewImage',\n    'description',\n    'userId',\n    'clientId',\n    'zIndex',\n    'locked',\n    'boardId',\n  ];\n  constructor(url: any, options: Partial<XURLProps>) {\n    super(options);\n\n    const previewImageURL = options.previewImage?.tmpPath\n      ? options.previewImage?.tmpPath\n      : '/boardxstatic/fileIcons/weblink.png';\n\n    Object.assign(this, options);\n\n    this.on('mousedblclick', this.onDoubleClick.bind(this));\n    this.objType = 'XURL';\n\n    (this.cornerColor = 'white'),\n      (this.cornerStrokeColor = 'gray'),\n      (this.cornerSize = 15),\n      (this.cornerStyle = 'circle'),\n      (this.transparentCorners = false),\n      (this.shadow = new Shadow({\n        color: 'rgba(217, 161, 177, 0.54)',\n        offsetX: 1,\n        offsetY: 2,\n        blur: 4,\n        id: 310,\n      }));\n    this.clipPath = new Rect({\n      left: 0,\n      top: 0,\n      rx: 8,\n      ry: 8,\n      width: 230,\n      height: 248,\n      fill: '#000000',\n    });\n    this.width = 230;\n    this.height = 248;\n    this.loadPreviewImage(previewImageURL!);\n  }\n  url: string;\n  updatedBy: string;\n  updatedByName: string;\n\n  createdByName: string;\n  vectorSrc: FileObject;\n  fileSrc: FileObject;\n  fileName: string;\n  previewImage: FileObject;\n  boardId: string;\n  objType: WidgetType;\n  userId: string;\n  zIndex: number;\n  version: string;\n  updatedAt: number;\n\n  createdAt: number;\n  createdBy: string;\n\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n\n  toObject(propertiesToInclude: Array<any>): any {\n    return super.toObject([...this.extendedProperties, ...propertiesToInclude]);\n  }\n  onDoubleClick() {\n    getFabricWindow().open(this.url, '_blank');\n  }\n\n  drawObject(ctx: CanvasRenderingContext2D) {\n    // Draw solid background to eliminate transparency\n    ctx.beginPath();\n    ctx.fillStyle = '#FFFFFF'; // Set to white or any preferred color\n    ctx.fillRect(-this.width / 2, -this.height / 2, this.width, this.height);\n    ctx.lineWidth = 0;\n    ctx.strokeStyle = '#ffffff';\n    ctx.moveTo(-this.width / 2, -this.height / 2);\n    ctx.stroke();\n\n    const imgWidth = 230;\n    const imgHeight = 160;\n\n    if (this._previewImage) {\n      this.drawPreviewImage(ctx, imgWidth, imgHeight);\n    }\n\n    this.renderTitle(ctx, this.fileName);\n    this._renderStroke(ctx);\n  }\n\n  private drawPreviewImage(\n    ctx: CanvasRenderingContext2D,\n    imgWidth: number,\n    imgHeight: number\n  ) {\n    const previewImage = this._previewImage!;\n    const imageWidth = previewImage.width;\n    const imageHeight = previewImage.height;\n\n    // Calculate aspect ratios\n    const imageAspect = imageWidth / imageHeight;\n    const canvasAspect = imgWidth / imgHeight;\n\n    let drawWidth, drawHeight, offsetX, offsetY;\n\n    if (imageAspect > canvasAspect) {\n      // Image is wider than canvas aspect ratio\n      drawHeight = imgHeight;\n      drawWidth = imageAspect * imgHeight;\n      offsetX = (imgWidth - drawWidth) / 2;\n      offsetY = 0;\n    } else {\n      // Image is taller than canvas aspect ratio\n      drawWidth = imgWidth;\n      drawHeight = imgWidth / imageAspect;\n      offsetX = 0;\n      offsetY = (imgHeight - drawHeight) / 2;\n    }\n\n    ctx.save();\n\n    // Set clipping region to the image area\n    ctx.beginPath();\n    ctx.rect(-this.width / 2, -this.height / 2, imgWidth, imgHeight);\n    ctx.clip();\n\n    // Draw the image within the clipping region\n    ctx.drawImage(\n      previewImage,\n      -this.width / 2 + offsetX,\n      -this.height / 2 + offsetY,\n      drawWidth,\n      drawHeight\n    );\n\n    ctx.restore();\n  }\n\n  renderTitle(ctx: any, title: string) {\n    const maxWidth = this.width;\n    const x = -this.width / 2;\n    const y = this.height / 2 - 60;\n\n    // Set font styles\n    ctx.font = '16px Arial';\n    ctx.fillStyle = 'rgba(255, 255, 255, 1)';\n\n    // White background behind the title\n    ctx.fillRect(x, y - 29, maxWidth, 90);\n    ctx.fillStyle = '#190FA1';\n\n    // Handle null or empty title\n    if (!title && this.fileSrc?.tmpPath) {\n      const firstChar = this.fileSrc?.tmpPath.indexOf('.');\n      const lastChar = this.fileSrc?.tmpPath.indexOf('.', firstChar + 1);\n      title = this.fileSrc?.tmpPath.substring(firstChar + 1, lastChar);\n    }\n\n    // Title rendering\n    this.wrapText(ctx, title, x + 15, y - 5, maxWidth - 20, 23);\n\n    // URL rendering\n    const newurl = this.fileSrc && this.fileSrc?.tmpPath\n      ? `${this.fileSrc?.tmpPath.split('/')[0]}/${this.fileSrc.tmpPath.split('/')[1]\n      }/${this.fileSrc?.tmpPath.split('/')[2]}`\n      : '';\n    ctx.font = '12px Inter';\n    ctx.fillStyle = 'rgba(35, 41, 48, 0.65)';\n    this.wrapText(ctx, newurl, x + 15, y + 45, maxWidth - 20, 25);\n  }\n\n  wrapText(\n    context: any,\n    text: string,\n    x: number,\n    y: number,\n    maxWidth: number,\n    lineHeight: number\n  ) {\n    let line = '';\n    let lineCount = 0;\n    const chars = text.split('');\n    for (let n = 0; n < chars.length; n++) {\n      const testLine = line + chars[n];\n      const metrics = context.measureText(testLine);\n      const testWidth = metrics.width;\n\n      if (testWidth > maxWidth && n > 0) {\n        if (lineCount === 2) {\n          line = line.substring(0, line.length - 3) + '...';\n          context.fillText(line, x, y);\n          return;\n        }\n        context.fillText(line, x, y);\n        line = chars[n];\n        y += lineHeight;\n        lineCount++;\n      } else {\n        line = testLine;\n      }\n    }\n    context.fillText(line, x, y);\n  }\n\n  async loadPreviewImage(previewImage: string) {\n    const url = previewImage;\n\n    const loadedImg = await loadImage(url, {\n      crossOrigin: 'anonymous',\n    });\n    this._previewImage = loadedImg;\n    this.dirty = true;\n    this.canvas?.requestRenderAll();\n  }\n}\n\nclassRegistry.setClass(XURL);\n","import   { WidgetBaseInterface, TOriginX, TOriginY } from './widget.entity.base';\nimport { WidgetType } from './widget.type';\n\nexport   interface WidgetMarkdownInterface extends WidgetBaseInterface {\n  markdownText: string;\n}\n\nexport class WidgetMarkdownClass implements WidgetBaseInterface {\n  updatedBy: string = \"\";\n  updatedByName: string = \"\";\n   createdByName: string=\"\";\n  id: string = '';\n  boardId: string = '';\n  backgroundColor: string = '#FFFFFF';\n  width: number = 100;\n  height: number = 100;\n  left: number = 0;\n  locked: boolean = false;\n  objType: WidgetType = \"XMarkdown\";\n  originX: TOriginX = 'center';\n  originY: TOriginY = 'center';\n  scaleX: number = 1;\n  scaleY: number = 1;\n  selectable: boolean = true;\n  top: number = 0;\n  zIndex: number = Date.now() *100;\n  version: string = '1.0';\n  updatedAt: number = Date.now();\n   createdAt: number = Date.now();\n  createdBy: string = '';\n  visible: boolean = true;\n}\n\n\nexport const EntityKeys = Object.keys(new WidgetMarkdownClass()) as (keyof WidgetMarkdownInterface)[];","import { classRegistry } from '../../ClassRegistry';\nimport { XTextbase } from '../canvasx/XTextbase';\nimport html2canvas from 'html2canvas';\nimport { FabricImage } from '../../shapes/Image';\nimport hljs from 'highlight.js'; // https://highlightjs.org\n\n//@ts-ignore\nimport markdownit from 'markdown-it';\n//@ts-ignore\nimport javascript from 'highlight.js/lib/languages/javascript';\nimport { WidgetMarkdownInterface, EntityKeys } from './type/widget.entity.markdown';\nimport { WidgetType } from './type/widget.type';\n\nhljs.registerLanguage('javascript', javascript);\n\n\n\nclass XMarkdown extends XTextbase implements WidgetMarkdownInterface {\n  public markdownText: string;\n  isEditing: boolean = false;\n  private renderedImage: FabricImage | null = null;\n  private md: any;\n\n  static type: WidgetType = 'XMarkdown';\n  static objType: WidgetType = 'XMarkdown';\n  constructor(text: string, options: WidgetMarkdownInterface) {\n\n    super(text, options);\n    this.markdownText = options?.markdownText || text;\n    this.objType = 'XMarkdown';\n    // full options list (defaults)\n    this.md = markdownit({\n      // Enable HTML tags in source\n      html: true,\n\n      // Use '/' to close single tags (<br />).\n      // This is only for full CommonMark compatibility.\n      xhtmlOut: false,\n\n      // Convert '\\n' in paragraphs into <br>\n      breaks: false,\n\n      // CSS language prefix for fenced blocks. Can be\n      // useful for external highlighters.\n      langPrefix: 'language-',\n\n      // Autoconvert URL-like text to links\n      linkify: false,\n\n      // Enable some language-neutral replacement + quotes beautification\n      // For the full list of replacements, see https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.mjs\n      typographer: true,\n\n      // Double + single quotes replacement pairs, when typographer enabled,\n      // and smartquotes on. Could be either a String or an Array.\n      //\n      // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n      // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n      quotes: '“”‘’',\n\n      // Highlighter function. Should return escaped HTML,\n      // or '' if the source string is not changed and should be escaped externally.\n      // If result starts with <pre... internal wrapper is skipped.\n      highlight: function (str: string, lang: string) {\n        if (lang && hljs.getLanguage(lang)) {\n          try {\n            return hljs.highlight(str, { language: lang }).value;\n          } catch (__) { }\n        }\n\n        return ''; // use external default escaping\n      },\n    });\n    Object.assign(this, options);\n\n    this.on('editing:entered', this.onEditingEntered.bind(this));\n    this.on('editing:exited', this.onEditingExited.bind(this));\n    this.on('scaling', this.onScaling.bind(this));\n    this.on('resizing', this.onScaled.bind(this));\n    this.renderMarkdown();\n  }\n\n\n\n  private onEditingEntered() {\n    this.isEditing = true;\n    this.text = this.markdownText;\n    this.dirty = true;\n    this.canvas?.renderAll();\n  }\n\n  private onEditingExited() {\n    this.isEditing = false;\n    this.markdownText = this.text;\n    this.renderMarkdown();\n  }\n\n  private onScaling() {\n    this.renderMarkdown();\n    // Optional: You can add any logic needed during scaling\n  }\n\n  private onScaled() {\n    this.renderMarkdown();\n  }\n\n  async renderMarkdown() {\n    if (this.isEditing) return;\n\n    const html = this.md.render(this.markdownText);\n    this.parseHtmlToImage(html).then((img) => {\n      this.renderedImage = img;\n      this.dirty = true;\n      this.canvas?.renderAll();\n    });\n  }\n\n\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n\n  private parseHtmlToImage(html: string): Promise<FabricImage> {\n    return new Promise((resolve) => {\n      const blob = new Blob([html], { type: 'text/html' });\n      const url = URL.createObjectURL(blob);\n\n      const iframe = document.createElement('iframe');\n      iframe.style.width = `${this.width}px`;\n      iframe.style.height = `${this.height}px`;\n      iframe.style.visibility = 'hidden';\n      iframe.style.position = 'absolute';\n      iframe.style.left = '-9999px';\n      document.body.appendChild(iframe);\n\n      iframe.onload = async () => {\n        if (iframe.contentDocument) {\n          const style = iframe.contentDocument.createElement('style');\n          style.textContent = `\n            body { \n              font-family: Arial, sans-serif; \n              font-size: 14px; \n              line-height: 1.6; \n              color: #333; \n              padding: 20px; \n              margin: 0;\n              width: ${this.width}px;\n              height: ${this.height}px;\n            }\n            h1, h2, h3, h4, h5, h6 { margin-top: 0; }\n            ul, ol { padding-left: 20px; }\n          /* Code block styling */\ncode {\n  background-color: #f5f5f5; /* Slightly lighter background for better contrast */\n  padding: 3px 5px; /* More padding for better spacing */\n  border-radius: 5px; /* Smoother border radius */\n  font-family: 'Courier New', Courier, monospace; /* Monospace font for code */\n}\n\npre {\n  background-color: #f5f5f5; /* Matching background color with inline code */\n  padding: 12px; /* Slightly more padding for comfort */\n  border-radius: 5px; /* Smoother border radius */\n  overflow-x: auto; /* Ensure horizontal scroll for long code lines */\n  font-family: 'Courier New', Courier, monospace; /* Monospace font for code */\n}\n\npre code {\n  display: block;\n}\n\n/* Table styling */\ntable {\n  border-collapse: collapse;\n \n  margin-bottom: 1em; /* Add some margin below tables */\n  font-family: Arial, sans-serif; /* Better font for readability */\n}\n\ntable, th, td {\n  border: 1px solid #ddd; /* Lighter border color for a cleaner look */\n}\n\nth, td {\n  padding: 10px; /* More padding for better spacing */\n  text-align: left;\n}\n\nth {\n  background-color: #f2f2f2; /* Slight background color for headers */\n  font-weight: bold; /* Bold headers */\n}\n\ntd {\n  background-color: #fff; /* Ensure a white background for table cells */\n}\n\n/* Additional table row hover effect */\ntr:hover {\n  background-color: #f1f1f1; /* Highlight row on hover */\n}\n          `;\n          iframe.contentDocument.head.appendChild(style);\n        }\n\n        iframe.contentDocument!.body.innerHTML = html;\n\n        await new Promise((resolve) => setTimeout(resolve, 100)); // Small delay to ensure styles are applied\n\n        const canvas = await html2canvas(\n          iframe.contentDocument?.body as HTMLElement\n        );\n        const img = await FabricImage.fromURL(canvas.toDataURL());\n        img.set({\n          left: this.left,\n          top: this.top,\n          width: this.width,\n          height: this.height,\n          scaleX: 1,\n          scaleY: 1,\n        });\n        resolve(img);\n\n        document.body.removeChild(iframe);\n        URL.revokeObjectURL(url);\n      };\n\n      iframe.src = url;\n    });\n  }\n\n  setMarkdown(newMarkdownText: string) {\n    this.markdownText = newMarkdownText;\n    if (this.isEditing) {\n      this.text = this.markdownText;\n      this.dirty = true;\n    } else {\n      this.renderMarkdown();\n    }\n    this.canvas?.renderAll();\n  }\n\n  _render(ctx: CanvasRenderingContext2D) {\n    if (this.isEditing) {\n      super._render(ctx);\n    } else if (this.renderedImage) {\n      this.renderedImage._render(ctx);\n    }\n  }\n}\n\nexport { XMarkdown };\n\nclassRegistry.setClass(XMarkdown);\n","import { WidgetBaseInterface, TOriginX, TOriginY } from './widget.entity.base';\nimport { WidgetType } from './widget.type';\n\nexport interface WidgetChartInterface extends WidgetBaseInterface {\n  chartOptions: any;\n\n}\n\nclass WidgetChartClass implements WidgetChartInterface {\n  updatedBy: string = \"\";\n  updatedByName: string = \"\";\n  createdByName: string = \"\";\n  id: string = '';\n  boardId: string = '';\n  backgroundColor: string = '';\n  width: number = 400;\n  height: number =500;\n  left: number = 0;\n  locked: boolean = false;\n  objType: WidgetType = \"XChart\"; // Replace with an appropriate default value\n  originX: TOriginX = 'center'; // Replace with an appropriate default value\n  originY: TOriginY = 'center'; // Replace with an appropriate default value\n  scaleX: number = 1;\n  scaleY: number = 1;\n  selectable: boolean = true;\n  top: number = 0;\n  zIndex: number = Date.now() *100;\n  version: string = '';\n  updatedAt: number = Date.now();\n  createdAt: number = Date.now();\n  createdBy: string = '';\n  visible: boolean = true;\n  chartOptions: any = {};\n}\n\nexport const EntityKeys = Object.keys(new WidgetChartClass()) as (keyof WidgetChartInterface)[];","import { ObjectProps } from '../Object/types/ObjectProps';\nimport { FabricObject } from '../Object/FabricObject';\nimport { Chart, ChartConfiguration, registerables } from 'chart.js';\nimport { classRegistry } from '../../ClassRegistry';\nimport { createCanvasElement } from '../../util/misc/dom';\nimport { WidgetChartInterface, EntityKeys } from './type/widget.entity.chart';\nimport { WidgetType } from './type/widget.type';\n\nChart.register(...registerables);\n\ninterface ChartObjectOptions extends ObjectProps {\n  chartConfig: ChartConfiguration;\n  width: number;\n  height: number;\n}\n\nclass XChart extends FabricObject implements WidgetChartInterface {\n  private chartConfig: ChartConfiguration;\n  private chartInstance: Chart | null = null;\n  private canvasElement: HTMLCanvasElement | null = null;\n  private needsUpdate: boolean = true; // Flag to track if update is needed\n\n  static type: WidgetType = 'XChart';\n  static objType: WidgetType = 'XChart';\n\n  constructor(options: any) {\n\n    super(options);\n    this.chartConfig = options.chartConfig!;\n    this.width = options.width!;\n    this.height = options.height!;\n    this.createCanvasElement();\n    this.addDoubleClickEventListener();\n    Object.assign(this, options);\n    this.objType = 'XChart';\n  }\n  updatedBy: string;\n  updatedByName: string;\n\n  createdByName: string;\n  chartOptions: any;\n  boardId: string;\n  objType: WidgetType;\n  userId: string;\n  zIndex: number;\n  version: string;\n  updatedAt: number;\n\n  createdAt: number;\n  createdBy: string;\n\n  private createCanvasElement() {\n    if (!this.canvasElement) {\n      this.canvasElement = createCanvasElement();\n      this.canvasElement.width = this.width!;\n      this.canvasElement.height = this.height!;\n      this.canvasElement.style.width = `${this.width}px`;\n      this.canvasElement.style.height = `${this.height}px`;\n      this.canvasElement.style.position = 'absolute';\n      this.canvasElement.style.top = `${-1000000}px`;\n      this.canvasElement.style.left = `${-1000000}px`;\n\n      document.body.appendChild(this.canvasElement); // Ensure canvas is in the DOM\n    }\n  }\n\n  private async createOrUpdateChart() {\n    if (!this.canvasElement) {\n      this.createCanvasElement();\n    }\n\n    // Ensure the canvas element is part of the DOM\n    if (!document.body.contains(this.canvasElement!)) {\n      document.body.appendChild(this.canvasElement!);\n    }\n\n    if (this.chartInstance) {\n      this.chartInstance.destroy();\n    }\n\n    return new Promise<void>((resolve) => {\n      this.canvasElement!.width = this.width!;\n      this.canvasElement!.height = this.height!;\n      this.canvasElement!.style.width = `${this.width}px`;\n      this.canvasElement!.style.height = `${this.height}px`;\n\n      this.chartInstance = new Chart(\n        this.canvasElement!.getContext('2d')!,\n        this.chartConfig\n      );\n\n      // Wait for the next animation frame to ensure the chart has rendered\n      requestAnimationFrame(() => {\n        this.chartInstance!.resize(); // Force a resize to ensure proper rendering\n        resolve();\n      });\n    });\n  }\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n\n\n  async _render(ctx: CanvasRenderingContext2D) {\n    if (this.needsUpdate) {\n      await this.createOrUpdateChart();\n      this.needsUpdate = false; // Reset the flag after updating\n    }\n\n    if (\n      this.canvasElement &&\n      this.canvasElement.width > 0 &&\n      this.canvasElement.height > 0\n    ) {\n      ctx.drawImage(\n        this.canvasElement,\n        -this.width! / 2,\n        -this.height! / 2,\n        this.width!,\n        this.height!\n      );\n    }\n  }\n\n  updateChart(newConfig: ChartConfiguration) {\n    this.chartConfig = newConfig;\n    this.needsUpdate = true; // Set the flag to indicate an update is needed\n    this.dirty = true;\n    this.canvas?.requestRenderAll();\n  }\n\n  private addDoubleClickEventListener() {\n    this.on('mousedblclick', () => {\n      this.openEditModal();\n    });\n  }\n\n  private openEditModal() {\n    // Implement modal opening logic here\n    const modal = document.createElement('div');\n    modal.style.position = 'fixed';\n    modal.style.top = '50%';\n    modal.style.left = '50%';\n    modal.style.width = '400px';\n    modal.style.transform = 'translate(-50%, -50%)';\n    modal.style.padding = '20px';\n    modal.style.backgroundColor = 'white';\n    modal.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.5)';\n    modal.innerHTML = `\n      <h2>Edit Chart Data</h2>\n      <textarea id=\"chartDataInput\" rows=\"10\" cols=\"40\">${JSON.stringify(\n      this.chartConfig.data,\n      null,\n      2\n    )}</textarea>\n      <br />\n      <button id=\"saveChartData\">Save</button>\n      <button id=\"cancelEdit\">Cancel</button>\n    `;\n    document.body.appendChild(modal);\n\n    const saveButton = modal.querySelector('#saveChartData')!;\n    const cancelButton = modal.querySelector('#cancelEdit')!;\n    const chartDataInput = modal.querySelector(\n      '#chartDataInput'\n    ) as HTMLTextAreaElement;\n\n    saveButton.addEventListener('click', () => {\n      const newChartData = JSON.parse(chartDataInput.value);\n      this.chartConfig.data = newChartData;\n      this.updateChart(this.chartConfig);\n      document.body.removeChild(modal);\n    });\n\n    cancelButton.addEventListener('click', () => {\n      document.body.removeChild(modal);\n    });\n  }\n}\n\nexport { XChart };\n\nclassRegistry.setClass(XChart);\n","import   {WidgetBaseInterface, TOriginX, TOriginY } from './widget.entity.base';\nimport { WidgetType } from './widget.type';\n\nexport   interface WidgetFrameInterface extends WidgetBaseInterface {\n  titleText: string;\n}\n\nexport class WidgetFrameClass implements WidgetFrameInterface {\n  updatedBy: string = \"\";\n  updatedByName: string = \"\";\n   createdByName: string=\"\";\n  titleText: string = '';\n  id: string = '';\n  boardId: string = '';\n  backgroundColor: string = 'white';\n  width: number = 500;\n  height: number = 500;\n  left: number = 0;\n  locked: boolean = false;\n  objType: WidgetType = \"XFrame\"; // Assuming WidgetType.Default is a valid enum value\n  originX: TOriginX = 'center'; // Assuming 'left' is a valid TOriginX value\n  originY: TOriginY = 'center'; // Assuming 'top' is a valid TOriginY value\n  scaleX: number = 1;\n  scaleY: number = 1;\n  selectable: boolean = true;\n  top: number = 0;\n  zIndex: number = Date.now() *100;\n  version: string = '1.0';\n  updatedAt: number = Date.now();\n   createdAt: number = Date.now();\n  createdBy: string = '';\n  visible: boolean = true;\n}\n\nexport const EntityKeys = Object.keys(new WidgetFrameClass()) as (keyof WidgetFrameInterface)[];\n","import { FabricObject } from '../Object/FabricObject';\nimport { Textbox } from '../Textbox';\nimport { Rect } from '../Rect';\nimport { Group } from '../Group';\nimport { LayoutManager } from '../../LayoutManager';\nimport { FitContentLayout } from '../../LayoutManager/LayoutStrategies/FitContentLayout';\nimport { classRegistry } from '../../ClassRegistry';\nimport { EntityKeys, WidgetFrameInterface } from './type/widget.entity.frame';\nimport { WidgetType } from './type/widget.type';\n\nclass XFrame extends FabricObject implements WidgetFrameInterface {\n  title: Textbox;\n  titleText: string;\n  body: Rect;\n  objects: Group;\n  layoutManager: LayoutManager;\n  static type: WidgetType = 'XFrame';\n  static objType: WidgetType = 'XFrame';\n\n  constructor(options: Partial<WidgetFrameInterface> = {}) {\n\n    super(options);\n    Object.assign(this, options);\n    this.titleText = 'Frame Title',\n      this.left = 100,\n      this.top = 100,\n      this.width = 400,\n      this.height = 300\n    this.title = new Textbox(this.titleText, {\n      left: this.left,\n      top: this.top,\n      fontSize: 18,\n      fontWeight: 'bold',\n      selectable: true,\n      editable: true,\n    });\n    this.titleText = this.titleText;\n    this.objType = 'XFrame';\n    this.body = new Rect({\n      left: this.left,\n      top: this.top + 30,\n      width: this.width,\n      height: this.height,\n      fill: 'rgba(0,0,0,0.1)',\n      selectable: false,\n      evented: false,\n    });\n\n    this.objects = new Group([this.body, this.title], {\n      left: this.left,\n      top: this.top,\n      selectable: true,\n    });\n\n    // Create a layout manager for the frame\n    this.layoutManager = new LayoutManager(new FitContentLayout());\n\n    this.canvas!.add(this.objects);\n\n    this.title.on('mousedblclick', () => {\n      this.title.enterEditing();\n    });\n\n    this.objects.on('scaling', (event) => {\n      const scaleX = this.objects.scaleX;\n      const scaleY = this.objects.scaleY;\n\n      this.objects.getObjects().forEach((obj) => {\n        if (obj !== this.title) {\n          obj.scaleX = scaleX;\n          obj.scaleY = scaleY;\n          obj.setCoords();\n        }\n      });\n\n      this.objects.scaleX = 1;\n      this.objects.scaleY = 1;\n      this.objects.setCoords();\n\n      this.canvas!.renderAll();\n    });\n\n    this.objects.on('mousedown', (event) => {\n      if (event.target === this.title) {\n        this.objects.set('selectable', true);\n        this.canvas!.setActiveObject(this.objects);\n      }\n    });\n\n    this.objects.on('moving', (event) => {\n      //@ts-ignore\n      const deltaX = event.movementX;\n      //@ts-ignore\n      const deltaY = event.movementY;\n\n      this.objects.getObjects().forEach((obj) => {\n        if (obj !== this.body && obj !== this.title) {\n          obj.set('left', obj.left + deltaX);\n          obj.set('top', obj.top + deltaY);\n        }\n      });\n\n      this.canvas!.renderAll();\n    });\n\n    this.canvas!.on('object:moving', (e) => {\n      if (e.target !== this.objects && !this.objects.contains(e.target)) {\n        this.checkObjectInFrame(e.target);\n      }\n    });\n\n    this.canvas!.on('mouse:up', (e) => {\n      if (e.target && this.objects.contains(e.target)) {\n        this.addObject(e.target);\n      } else if (e.target && !this.objects.contains(e.target)) {\n        this.removeObject(e.target);\n      }\n    });\n\n    this.canvas!.renderAll();\n  }\n  updatedBy: string;\n  updatedByName: string;\n\n  createdByName: string;\n  boardId: string;\n  objType: WidgetType;\n  userId: string;\n  zIndex: number;\n  version: string;\n  updatedAt: number;\n\n  createdAt: number;\n  createdBy: string;\n\n  checkObjectInFrame(obj: any) {\n    const objBound = obj.getBoundingRect();\n    const frameBound = this.body.getBoundingRect();\n\n    if (\n      objBound.left >= frameBound.left &&\n      objBound.top >= frameBound.top &&\n      objBound.left + objBound.width <= frameBound.left + frameBound.width &&\n      objBound.top + objBound.height <= frameBound.top + frameBound.height\n    ) {\n      this.addObject(obj);\n    } else {\n      this.removeObject(obj);\n    }\n  }\n\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n  addObject(obj: any) {\n    if (!this.objects.contains(obj)) {\n      this.objects.add(obj);\n      obj.set({\n        left: obj.left - this.objects.left,\n        top: obj.top - this.objects.top,\n        selectable: true,\n      });\n      this.canvas!.remove(obj);\n      this.canvas!.renderAll();\n    }\n  }\n\n  removeObject(obj: any) {\n    if (this.objects.contains(obj)) {\n      this.objects.remove(obj);\n      obj.set({\n        left: obj.left + this.objects.left,\n        top: obj.top + this.objects.top,\n        selectable: true,\n      });\n      this.canvas!.add(obj);\n      this.canvas!.renderAll();\n    }\n  }\n}\n\nclassRegistry.setClass(XFrame);\n\nexport { XFrame };\n","import { WidgetBaseInterface, TOriginX, TOriginY } from './widget.entity.base';\nimport { WidgetType } from './widget.type';\n\nexport interface WidgetPathInterface extends WidgetBaseInterface {\n  path: any[];\n  fill: string | null | any;\n  stroke: string | null | any;\n  strokeWidth: number;\n  strokeLineCap: string;\n  strokeDashOffset: number;\n  strokeLineJoin: string;\n  strokeUniform: boolean;\n  strokeMiterLimit: number;\n  fillRule: string;\n}\n\nexport class WidgetPathClass implements WidgetPathInterface {\n  updatedBy: string = \"\";\n  updatedByName: string = \"\";\n  fill: string = 'transparent';\n \n  createdByName: string = \"\";\n  path: any[] = [''];\n  stroke: string = '#000000';\n  strokeWidth: number = 1;\n  strokeLineCap: string = 'butt';\n  strokeDashOffset: number = 0;\n  strokeLineJoin: string = 'miter';\n  strokeUniform: boolean = false;\n  strokeMiterLimit: number = 10;\n  fillRule: string = 'nonzero';\n  id: string = '';\n  boardId: string = '';\n  backgroundColor: string = 'transparent';\n  width: number = 0;\n  height: number = 0;\n  left: number = 0;\n  locked: boolean = false;\n  objType: WidgetType = \"XPath\";\n  originX: TOriginX = 'center';\n  originY: TOriginY = 'center';\n  scaleX: number = 1;\n  scaleY: number = 1;\n  selectable: boolean = true;\n  top: number = 0;\n  zIndex: number = Date.now() * 100;\n  version: string = '1.0';\n  updatedAt: number = Date.now();\n  createdAt: number = Date.now();\n  createdBy: string = '';\n  visible: boolean = true;\n}\n\nexport const EntityKeys = Object.keys(new WidgetPathClass()) as string[];","import { config } from '../../config';\nimport { SHARED_ATTRIBUTES } from '../../parser/attributes';\nimport { Point, XY } 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 {\n  TComplexPathData,\n  TPathSegmentInfo,\n  TSimplePathData,\n} from '../../util/path/typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from '../Object/types';\nimport type { TOptions } from '../../typedefs';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport { TBBox, TClassProperties, TSVGReviver } from '../../typedefs';\nimport { cloneDeep } from '../../util/internals/cloneDeep';\nimport { createPathDefaultControls } from '../../controls/commonControls';\nimport { WidgetPathInterface, EntityKeys } from './type/widget.entity.path';\nimport { WidgetType } from './type/widget.type';\n\ninterface UniquePathProps {\n  sourcePath?: string;\n  path?: TSimplePathData;\n  objType: 'XPath';\n}\n\nexport interface SerializedPathProps\n  extends SerializedObjectProps,\n  UniquePathProps { }\n\nexport interface PathProps extends FabricObjectProps {\n  objType: 'XPath';\n}\n\nexport interface IPathBBox extends TBBox {\n  left: number;\n  top: number;\n  pathOffset: Point;\n}\n\nexport class XPath<\n  Props extends TOptions<PathProps> = Partial<PathProps>,\n  SProps extends SerializedPathProps = SerializedPathProps,\n  EventSpec extends ObjectEvents = ObjectEvents\n> extends FabricObject<Props, SProps, EventSpec> implements WidgetPathInterface {\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 cacheProperties = [...cacheProperties, 'path', 'fillRule'];\n\n  declare locked: boolean;\n\n  declare boardId: string;\n\n  declare userId: string;\n\n  declare timestamp: Date;\n\n  declare zIndex: number;\n\n  declare lines: object[];\n\n  declare relationship: object[];\n\n  declare id: string;\n\n  declare userNo: string;\n\n  declare version: string;\n\n  declare lineWidth: any;\n\n  declare radius: any;\n\n  static objType: WidgetType = 'XPath';\n  static type: WidgetType = 'XPath';\n\n\n  /**\n   * Constructor\n   * @param {TComplexPathData} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n   * @param {Partial<PathProps>} [options] Options object\n   * @return {Path} thisArg\n   */\n  constructor(\n    path: TComplexPathData | string,\n    { path: _, left, top, ...options }: Partial<any> = {}\n  ) {\n\n    //fixed default value\n    options.perPixelTargetFind = true;\n\n    super(options as Props);\n    this._setPath(path || [], true);\n    typeof left === 'number' && this.set('left', left);\n    typeof top === 'number' && this.set('top', top);\n\n\n    Object.assign(this, options);\n    this.objType = 'XPath';\n  }\n  updatedBy: string;\n  updatedByName: string;\n\n  createdByName: string;\n  objType: WidgetType;\n  updatedAt: number;\n\n  createdAt: number;\n  createdBy: string;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      controls: createPathDefaultControls(),\n    };\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    let subpathStartX = 0,\n      subpathStartY = 0,\n      x = 0, // current x\n      y = 0, // current y\n      controlX = 0, // current control point x\n      controlY = 0; // current control point y\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          x = command[1];\n          y = command[2];\n          ctx.lineTo(x + l, y + t);\n          break;\n\n        case 'M': // moveTo, absolute\n          x = command[1];\n          y = command[2];\n          subpathStartX = x;\n          subpathStartY = y;\n          ctx.moveTo(x + l, y + t);\n          break;\n\n        case 'C': // bezierCurveTo, absolute\n          x = command[5];\n          y = command[6];\n          controlX = command[3];\n          controlY = command[4];\n          ctx.bezierCurveTo(\n            command[1] + l,\n            command[2] + t,\n            controlX + l,\n            controlY + t,\n            x + l,\n            y + 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          x = command[3];\n          y = command[4];\n          controlX = command[1];\n          controlY = command[2];\n          break;\n\n        case 'Z':\n          x = subpathStartX;\n          y = subpathStartY;\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 `#<Path (${this.complexity()}): { \"top\": ${this.top}, \"left\": ${this.left\n      } }>`;\n  }\n\n\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\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<Props & TClassProperties<this>, keyof SProps>,\n    K extends keyof T = never\n  >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n    return {\n      ...super.toObject([...propertiesToInclude]),\n      path: cloneDeep(this.path),\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<Props & TClassProperties<this>, keyof SProps>,\n    K extends keyof T = never\n  >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n    const o = this.toObject<T, K>(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      '<path ',\n      'COMMON_PARTS',\n      `d=\"${path}\" stroke-linecap=\"round\" />\\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): any {\n    const additionalTransform = this._getOffsetTransform();\n    return (\n      '\\t' +\n      this._createBaseClipPathSVGMarkup(this._toSVG(), {\n        reviver: 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): any {\n    const additionalTransform = this._getOffsetTransform();\n    return this._createBaseSVGMarkup(this._toSVG(), {\n      reviver: 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(new Point(subpathStartX, subpathStartY), new Point(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<Path>}\n   */\n  static fromObject<T extends TOptions<SerializedPathProps>>(object: T) {\n    return this._fromObject<XPath>(object, {\n      extraParam: 'path',\n    });\n  }\n}\n\nclassRegistry.setClass(XPath);\nclassRegistry.setSVGClass(XPath);\n\n/* _FROM_SVG_START_ */\n","import { FabricObject } from '../../shapes/Object/FabricObject';\nimport { FabricObjectProps } from '../../shapes/Object/types';\nimport { ObjectEvents } from '../../EventTypeDefs';\nimport { SerializedObjectProps } from '../../shapes/Object/types';\n\nimport { Canvas } from '../Canvas';\nimport { Point } from '../../Point';\n\ninterface ConnectorControlPoints {\n  mtaStart: Point | null;\n  mbaStart: Point | null;\n  mlaStart: Point | null;\n  mraStart: Point | null;\n}\n\nconst DEFAULT_SELECTION_COLOR = 'rgba(179, 205, 253, 0.5)';\nconst DEFAULT_SELECTION_BORDER_COLOR = '#31A4F5';\nconst DEFAULT_MOVE_CURSOR = 'default';\nconst TARGET_FIND_TOLERANCE = 8;\n\nexport class XCanvas extends Canvas {\n  uniformScaling = true;\n  interactionMode = 'mouse';\n  isEnablePanMoving = false;\n  selectionFullyContained = false;\n  skipOffscreen = true;\n  preserveObjectStacking = true;\n  targetFindTolerance = TARGET_FIND_TOLERANCE;\n  stopAnimateToRectStatus = false;\n  stopAnimateObjectToPositionStatus = false;\n  moveCursor = DEFAULT_MOVE_CURSOR;\n  selectionColor = DEFAULT_SELECTION_COLOR;\n  selectionBorderColor = DEFAULT_SELECTION_BORDER_COLOR;\n  selectionLineWidth = 1;\n  fireMiddleClick = true;\n  showBackgroundDots = true;\n  whiteboardWidth = 1920 * 5;\n  whiteboardHeight = 1080 * 6;\n  isEnableTouchMoving = false;\n  conextMenuObject: Record<string, any> = {};\n  notesDrawCanvas: HTMLCanvasElement | null = null;\n  widgetPadding = 5;\n  connectorStart: Point | null = null;\n  connectorArrow: any = null;\n  vAlignLineTimer: NodeJS.Timeout | null = null;\n  hAlignLineTimer: NodeJS.Timeout | null = null;\n  isDrawingMode = false;\n  isErasingMode = false;\n  group_zIndex: number | null = null;\n  defaultNote: Record<string, any> = {};\n  boundHandlerMouseMove: ((e: any) => void) | null = null;\n  dockingWidget: FabricObject | null = null;\n  instanceOfConnector: any = null;\n  startPointOfConnector: Point | null = null;\n  endPointOfConnector: Point | null = null;\n  inConnectingMode = false;\n  toUpdateNewObjectRemote: any[] = [];\n  toUpdateRemovedObjectRemote: any[] = [];\n  anyChanges = false;\n  thumbnail = '';\n  toUpdateObjectRemote: any[] = [];\n  lastMouseData: any;\n  _numOfColumns = 0;\n  hoveringControl = '';\n\n  findById(\n    id: string\n  ): FabricObject<\n    Partial<FabricObjectProps>,\n    SerializedObjectProps,\n    ObjectEvents\n  > | null {\n    return (\n      this.getObjects().find((widget: FabricObject) => widget.id === id) || null\n    );\n  }\n\n  getAbsoluteCoords(object: any): { left: number; top: number } {\n    return {\n      left: object.left + this._offset.left,\n      top: object.top + this._offset.top,\n    };\n  }\n\n  clearData(): void {\n    while (this._objects.length > 0) {\n      this.remove(this._objects.pop()!);\n    }\n  }\n\n  translateWidget(language: string): Promise<void> {\n    throw new Error('Method not implemented.');\n  }\n  zoomToViewAllObjects(): number {\n    return 1;\n  }\n}\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","JSON","SVG","ClassRegistry","Map","getClass","classType","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","findIndexRight","array","predicate","getRandomInt","min","random","ifNaN","valueIfNaN","isNaN","removeFromArray","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","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","source","pattern","pick","pickBy","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","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","fromHex","isShortNotation","expandedValue","split","hex","hexCouple","parseInt","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","docElement","documentElement","body","scrollLeft","scrollTop","parentNode","host","nodeType","style","position","el","ownerDocument","getWindowFromElement","_el$ownerDocument","defaultView","setStyle","styles","elementStyle","cssText","setProperty","setCanvasDimensions","ctx","retinaScaling","setAttribute","scale","allowTouchScrolling","allow","touchAction","setCSSDimensions","getElementOffset","_getWindowFromElement","box","offset","offsetAttributes","borderLeftWidth","borderTopWidth","paddingLeft","paddingTop","elemStyle","getComputedStyle","attr","docElem","getBoundingClientRect","scrollLeftTop","clientLeft","clientTop","makeElementUnselectable","onselectstart","userSelect","StaticCanvasDOMManager","createLowerCanvas","lower","getElementById","hasAttribute","_originalCanvasStyle","classList","cleanupDOM","removeAttribute","setDimensions","calcOffset","staticCanvasDefaults","backgroundVpt","backgroundColor","overlayVpt","overlayColor","includeDefaultValues","svgViewportTransformation","renderOnAddRemove","skipOffscreen","enableRetinaScaling","imageSmoothingEnabled","controlsAboveOverlay","viewportTransform","StaticCanvas","lowerCanvasEl","_this$elements$lower","elements","contextContainer","_this$elements$lower2","getDefaults","ownDefaults","initElements","_setDimensionsImpl","calcViewportBoundaries","requestRenderAll","setCoords","getRetinaScaling","_offset","getWidth","getHeight","setWidth","setHeight","dimensions","cssOnly","backstoreOnly","hasLostContext","getZoom","setViewportTransform","vpt","backgroundObject","backgroundImage","overlayObject","overlayImage","len","group","zoomToPoint","point","before","newPoint","after","setZoom","absolutePan","relativePan","getElement","clearContext","clearRect","clear","renderAll","cancelRequestedRender","destroyed","renderCanvas","renderAndReset","nextRenderHandle","disposed","iVpt","vptCoords","tr","bl","drawControls","v","path","clipPath","patternQuality","_renderBackground","save","_renderObjects","restore","shouldCache","_transformDone","renderCache","forClipping","drawClipPathOnCanvas","_renderOverlay","__cleanupTask","globalCompositeOperation","zoomX","zoomY","_cacheCanvas","cacheTranslationX","cacheTranslationY","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","styleRow","fontListMarkup","_setSVGObject","bgOrOverlay","repeat","finalWidth","finalHeight","shouldInvert","loadFromJSON","json","serialized","parse","enlivedMap","properties","cloneWithoutData","multiplier","finalMultiplier","toCanvasElement","scaledWidth","scaledHeight","zoom","originalWidth","originalHeight","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","_createBaseSVGMarkup","_createBaseClipPathSVGMarkup","objectMarkup","commonPieces","noStyle","withShadow","styleInfo","shadowInfo","vectorEffect","strokeUniform","absoluteClipPath","absolutePositioned","clipPathMarkup","addPaintOrder","paintFirst","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","capValue","defaultColorEasing","wrapColorCallback","rgba","ColorAnimation","startColor","endColor","isArrayAnimation","animate","animateColor","unitVectorX","zero","rotateVector","vector","createVector","magnitude","calcAngleBetweenVectors","crossProduct","dotProduct","calcVectorRotation","getUnitVector","getOrthonormalVector","counterClockwise","isBetweenVectors","AxB","AxT","BxT","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","ObjectOrigin","_getTransformedDimensions","dimOptions","preScalingStrokeValue","postScalingStrokeValue","noSkew","finalDimensions","fromOriginX","fromOriginY","toOriginX","toOriginY","dim","translateToCenterPoint","translateToOriginPoint","relCenter","getPointByOrigin","pos","_getLeftTopCoords","ObjectGeometry","getX","getXY","getY","getRelativeX","setRelativeX","getRelativeY","setRelativeY","relativePosition","getRelativeXY","setRelativeXY","isStrokeAccountedForInDimensions","getCoords","aCoords","calcACoords","coords","intersection","intersectsWithObject","isContainedWithinObject","getBoundingRect","isOnScreen","isPartiallyOnScreen","allPointsAreOutside","getScaledWidth","getScaledHeight","scaleToWidth","boundingRectFactor","scaleToHeight","getCanvasRetinaScaling","_this$canvas","getViewportTransform","_this$canvas2","rotateMatrix","tMatrix","finalMatrix","transformMatrixKey","skipGroup","prefix","matrixCache","ownMatrixCache","_getNonTransformedDimensions","_calculateCurrentDimensions","StackedObject","isDescendantOf","parent","getAncestors","strict","ancestors","_parent$parent","findCommonAncestors","fork","otherFork","common","otherAncestors","ancestor","j","hasCommonAncestors","commonAncestors","isInFrontOf","ancestorData","firstCommonAncestor","headOfFork","pop","headOfOtherFork","thisIndex","otherIndex","AnimatableObject","animatable","_animate","propIsColor","colorProperties","animationOptions","getSvgRegex","arr","RegExp","reNum","String","raw","_templateObject","_taggedTemplateLiteral","svgNS","_templateObject2","reFontDeclaration","svgValidTagNames","svgViewBoxElements","svgInvalidAncestors","svgValidParents","attributesMap","cx","cy","display","fSize","cPath","svgValidTagNamesRegEx","svgViewBoxElementsRegEx","svgValidParentsRegEx","reViewBoxAttrValue","shadowOffsetRegex","reOffsetsAndBlur","shadowDefaultValues","blur","affectStroke","nonScaling","Shadow","parseShadow","shadowStr","regex","replace","BLUR_BOX","fBoxX","fBoxY","cloneDeep","stringify","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","FabricObject","name","setOptions","_createCacheCanvas","_cacheContext","_updateCacheCanvas","_limitCacheSize","dims","maxCacheSideLimit","minCacheSideLimit","limX","limY","capped","_getCacheCanvasDimensions","objectScale","getTotalObjectScaling","neededX","neededY","minCacheSize","dimensionsChanged","cacheWidth","cacheHeight","zoomChanged","drawingWidth","drawingHeight","shouldRedraw","additionalWidth","additionalHeight","shouldResizeCanvas","canvasWidth","canvasHeight","sizeGrowing","sizeShrinking","getHeightOfLine","ceil","setTransform","translate","needFullTransform","contextTop","_removeDefaultValues","hasStaticDefaultValues","baseValues","getPrototypeOf","baseValue","getObjectScaling","retina","getObjectOpacity","_constrainScale","isChanged","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","_fromObject","extraParam","_excluded2","allOptions","rest","_toPropertyKey","getText","_this$text","text","saveData","fields","transformPointToCanvas","self","toTransformPoint","transformedPoint","transformPointFromCanvas","transformPointToViewport","_self$canvas","mCanvas","mObject","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","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","ex","ey","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","createObjectDefaultNoRotateControls","createObjectImageControls","createObjectFileControls","createObjectArrowControls","createObjectConnectorControls","renderCustomControl","styleOverride1","mtaStart","transformData","mbaStart","mlaStart","mraStart","createResizeControls","mr","ml","mb","mt","createResizeControlsForText","createTextboxDefaultControls","createRectNotesDefaultControls","createShapeNotesDefaultControls","createPathDefaultControls","createImageDefaultControls","createFileDefaultControls","InteractiveFabricObject","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","withConnection","setControlVisible","setControlsVisibility","clearContextTop","restoreManually","onDeselect","onSelect","shouldStartDragging","onDragStart","canDrop","renderDragSourceEffect","renderDropTargetEffect","applyMixins","derivedCtor","constructors","baseCtor","getOwnPropertyNames","prototype","defineProperty","getOwnPropertyDescriptor","create","isTransparent","tolerance","getImageData","alphaChannel","rotatePoint","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","capitalize","string","firstLetterOnly","charAt","escapeXml","graphemeSplit","textstring","graphemes","chr","getWholeChar","str","code","charCodeAt","next","prev","hasStyleChanged","prevStyle","thisStyle","forTextSpans","textBackgroundColor","deltaY","overline","underline","linethrough","stylesToArray","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","_attributesMap","cleanupSvgAttribute","attributeValue","_templateObject3","_templateObject4","_templateObject5","_templateObject6","transforms","transformList","_templateObject7","reTransformList","reTransform","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","delete","unsubscribeTargets","targets","subscribeTargets","tricklingContext","layoutManager","prevCenter","nextCenter","correction","layoutObjects","_context$x","_context$y","layoutObject","_","bubblingContext","NoopLayoutManager","groupDefaultValues","subTargetCheck","interactive","Group","__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","reMoveToCommand","reLineCommand","reHorizontalLineCommand","reVerticalLineCommand","reClosePathCommand","reCubicCurveCommand","reCubicCurveShortcutCommand","reQuadraticCurveCommand","reQuadraticCurveShortcutCommand","reArcCommand","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","theta","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","parsePath","pathString","res","matchStr","chain","paramArr","filteredGroups","shift","numParse","reverse","transformed","getSmoothPathFromPoints","p1","multSignX","multSignY","manyPoints","midPoint","transformPath","pathOffset","pathSegment","newSegment","getRegularPolygonPath","numVertexes","radius","interiorAngle","rotationAdjustment","rad","joinPath","pathData","mergeClipPaths","_b$group","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","out","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","isAS","prevActiveObjects","multiSelectAdd","klass","newActiveSelection","point1","point2","collectedObjects","linearDefaultCoords","radialDefaultCoords","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","preTransform","colorStop","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","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","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","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","ClipPathLayout","_target$group","clipPathCenter","FixedLayout","ActiveSelectionLayoutManager","parents","Set","selectedObjects","activeSelectionDefaultValues","multiSelectionStacking","ActiveSelection","_options$layoutManage","findIndex","groups","childrenOverride","textsArray","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","setFilterBackend","backend","imageDefaultValues","srcFromAttribute","minimumScaleTrigger","imageSmoothing","IMAGE_PROPS","FabricImage","setElement","_element","removeTexture","_originalElement","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","xlinkAttribute","xlink","el2Orig","el2","cloneNode","currentTrans","oldLength","namespace","el3","attrs","setAttributeNS","nodeValue","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","lastIndex","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","rotationStyleHandler","rotateObjectWithSnapping","pivotPoint","lastAngle","curAngle","snapAngle","snapThreshold","rightAngleLocked","leftAngleLocked","hasRotated","rotationWithSnapping","isWebGLPipelineState","isPutImageFaster","sourceCanvas","ArrayBuffer","testContext","testPipelineState","performance","now","drawImageTime","putImageDataTime","highPsourceCode","identityFragmentShader","vertexSource","BaseFilter","getFragmentSource","createProgram","vertexShader","VERTEX_SHADER","program","getShaderInfoLog","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","uniformLocations","getUniformLocations","uStepW","getUniformLocation","uStepH","attributeLocations","getAttributeLocations","getAttribLocation","sendAttributeData","aPositionData","attributeLocation","buffer","createBuffer","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bufferData","STATIC_DRAW","_setupFrameBuffer","framebufferTexture2D","COLOR_ATTACHMENT0","finish","_swapTextures","temp","main","mainParameter","defaultValue","thisValue","applyToWebGL","applyTo2d","getCacheKey","retrieveShader","shader","useProgram","uniform1f","sendUniformData","viewport","drawArrays","TRIANGLE_STRIP","bindAdditionalTexture","textureUnit","activeTexture","TEXTURE0","unbindAdditionalTexture","getMainParameter","setMainParameter","createHelpLayer","helpLayer","mainP","filterOptions","blendColorFragmentSource","screen","difference","lighten","darken","exclusion","tint","blendColorDefaultValues","mode","BlendColor","tg","alpha1","uColor","uniform4fv","mask","blendImageDefaultValues","BlendImage","image","TEXTURE1","calculateMatrix","blendImage","canvas1","blendData","uTransformMatrix","uImage","uniform1i","uniformMatrix3fv","enlivedImage","blurDefaultValues","Blur","aspectRatio","horizontal","simpleBlur","blurLayer1","blurLayer2","canvas2","ctx1","ctx2","nSamples","percent","newImageData","delta","chooseRightDelta","uniform2fv","blurScale","brightnessDefaultValues","brightness","Brightness","uBrightness","colorMatrixDefaultValues","colorsOnly","ColorMatrix","uColorMatrix","uConstants","constants","uniformMatrix4fv","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","uMatrix","uOpaque","uHalfSize","uSize","uniform1fv","gammaDefaultValues","gamma","Gamma","rInv","gInv","bInv","rgbValues","rgb","uGamma","uniform3fv","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","getFragmentShader","lowC","highC","uLow","uHigh","resizeDefaultValues","resizeType","lanczosLobes","fragmentSourceTOP","Resize","uDelta","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","targetObject","EventName","Origin","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","has","WidgetTextboxClass","EntityKeys","connectors","XTextbase","oneLine","fixedScaleChange","boardId","userId","zIndex","updatedAt","lastEditedByName","createdByName","objType","initializeEvent","updateConnector","connector","controlPoint","calculateControlPoint","update","fromPoint","control1","toPoint","control2","moveOrScaleHandler","_this$connectors","_this$connectors2","pointConnector","connectorObj","findById","connectorId","fromObjectId","connectorType","toObjectId","connectingPoint","boundingBox","connectingX","connectingY","distances","nearestBorder","fromCopy","controlMousedownProcess","getObject","entityKeys","checkTextboxChange","EDITINGENTERED","tempTop","EDITINGEXITED","Center","MODIFIED","CHANGED","dockingWidget","renderDockingControls","hoveringControl","_renderControl","resetResizeControls","WidgetCircleNotesClass","circleNotesDefaultValues","verticalAlign","noteType","XCircleNotes","graphemeSplitForRectNotes","words","getCenteredTop","rectHeight","_getTotalLineHeights","_getTotalLineHeight","total","_line","_this$canvas$getZoom","drawRoundRectPath","cxt","WidgetRectNotesClass","rectNotesDefaultValues","XRectNotes","_options$createdByNam","_options$fontFamily","_options$fontSize","_options$fontWeight","_options$text","_options$textAlign","_options$editable","_options$fixedScaleCh","_options$connectors","_options$id","_options$boardId","_options$backgroundCo","_options$left","_options$locked","_options$objType","_options$originX","_options$originY","_options$scaleX","_options$scaleY","_options$selectable","_options$top","_options$userId","_options$zIndex","_options$version","_options$updatedAt","_options$updatedBy","_options$updatedByNam","_options$createdAt","_options$createdBy","_options$visible","locked","updatedBy","updatedByName","createdAt","createdBy","prenum","substring","shapeList","textMaxHeight","WidgetShapeNotesClass","getShapeInfo","shape","shapeObj","XShapeNotesDefaultValues","XShapeNotes","_this$bgShape","_this$bgShape2","bgShape","shapeName","minHeight","resetSplitByGrapheme","handleScaling","handleModified","chineseRegex","includesChinese","newScaleX","newScaleY","_this$bgShape3","svgPath","Path2D","createSVGMatrix","addPath","_this$bgShape4","_this$bgShape5","XTextbox","setupCustomResizeControls","onEditingEntered","onEditingExited","handleWidthChange","handleWidthChange2","newHeight","oldBoundingRect","originalLeft","originalTop","newBoundingRect","WidgetImageClass","XImage","destW","destH","_stopEvent","cloneWidget","calcPathPointPosition","pathObject","commandIndex","movePathPoint","anchorCommand","pathPositionHandler","pathActionHandler","indexFromPrevCommand","previousCommandType","PathPointControl","controlFill","controlStroke","PathControlPointControl","connectToCommandIndex","connectToPointIndex","connectionDashArray","commandType","createControl","commandIndexPos","pointIndexPos","isControlPoint","controlPointStyle","pointStyle","createPathControls","WidgetConnectorClass","getPath","pathType","XConnector","pathArrowTip","_setMovementLock","calcStartEndPath","_mouseDownControl","_mouseUpControl","evtOpt","dragActionEventHandler","getFromPoint","getToPoint","lastCommand","pathStart","pathEnd","firstCommand","startArrowSize","startArrow1X","startArrow1Y","startArrow2X","startArrow2Y","endArrowSize","endArrow1X","endArrow1Y","endArrow2X","endArrow2Y","controlPointType","finalCommand","TransformPointFromPathToCanvas","controlPoint1","controlPoint2","newPath","_transform$target$can","getControlPointOnCanvas","controlInfo","currentDockingObject","existingConnectionId","connectedObject","hoverPoint","targetX","targetY","_connectedObject$conn","_connectedObject$conn2","FileEnum","WidgetFileClass","FILE_ICON_PATHS","XFileWord","XFileExcel","XFilePPT","XFilePDF","XFileZip","XFileVideo","XFileAudio","XFile","FILE_TYPE_NAMES","DOC","DOCX","XLS","XLSX","PPT","PPTX","PDF","ZIP","MP4","WEBM","MP3","M4A","WAV","AAC","FLAC","OGG","AIFF","WMA","APE","UNKNOWN","VIDEO_FILE_EXTENSIONS","tmpPath","initializeVisuals","fileObjectType","getFileType","fileName","loadPreviewImage","getFileIconURL","onDoubleClick","_this$fileSrc","fileSrc","drawBorder","drawPreviewImage","renderTitle","_previewImage","titleHeight","availableHeight","imageAspectRatio","finalDrawHeight","getFileTypeName","_fileName$split$pop2","extension","_fileName$split$pop3","isFileVideo","_fileName$split$pop4","title","sanitizedTitle","sanitizeTitle","wrapText","unicodeTitle","toUnicode","parts","escape","getShortenedUrl","lineCount","currentY","testLine","metrics","testWidth","previewImage","WidgetGroupClass","XGroup","WidgetURLClass","XURL","_options$previewImage","_options$previewImage2","previewImageURL","extendedProperties","imgWidth","imgHeight","imageWidth","imageHeight","imageAspect","canvasAspect","clip","_this$fileSrc5","_this$fileSrc6","_this$fileSrc7","_this$fileSrc2","_this$fileSrc3","_this$fileSrc4","firstChar","lastChar","newurl","loadedImg","WidgetMarkdownClass","hljs","registerLanguage","javascript","XMarkdown","markdownText","md","markdownit","html","xhtmlOut","breaks","langPrefix","linkify","typographer","quotes","highlight","lang","getLanguage","language","__","onScaling","onScaled","renderMarkdown","parseHtmlToImage","renderedImage","blob","Blob","URL","createObjectURL","iframe","_iframe$contentDocume","contentDocument","head","innerHTML","html2canvas","revokeObjectURL","setMarkdown","newMarkdownText","_this$canvas3","WidgetChartClass","Chart","registerables","XChart","chartConfig","addDoubleClickEventListener","createOrUpdateChart","chartInstance","resize","needsUpdate","updateChart","newConfig","openEditModal","modal","boxShadow","saveButton","querySelector","cancelButton","chartDataInput","newChartData","WidgetFrameClass","XFrame","titleText","movementX","movementY","checkObjectInFrame","addObject","removeObject","objBound","frameBound","WidgetPathClass","XPath","DEFAULT_SELECTION_COLOR","DEFAULT_SELECTION_BORDER_COLOR","DEFAULT_MOVE_CURSOR","TARGET_FIND_TOLERANCE","XCanvas","widget","getAbsoluteCoords","clearData","translateWidget","zoomToViewAllObjects","StaticCanvasBase","createPNGStream","opts","createJPEGStream","CanvasBase"],"mappings":"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SAAS;AACpBC,EAAAA,WAAW,EAAE,SAAS;AACtBC,EAAAA,MAAM,EAAE,SAAS;AACjBC,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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9BC,EAAAA,gBAAgB,EAAE,aAAa;AAE/Bj1B,EAAAA,kBAAkB,EAAE,KAAK;AACzBk1B,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;AAElC3N,EAAAA,sBAAsB,EAAE,KAAA;AAC1B,CAAC;;ACjQD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,MAAMuP,gBAAgB,SACnB96C,cAAY,CAEtB;EAAAvvB,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAAO,SAAA,CAAA,CAAA;AAGE;AAQA;AAUA;AASA;AAKA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AAKE;AAKA;AACF;AACA;AACA;AAHEN,IAAAA,eAAA,kBAI0B,EAAE,CAAA,CAAA;AAS5B;AACF;AACA;AACA;AACA;AAJEA,IAAAA,eAAA,0BAKkC,EAAE,CAAA,CAAA;AAEpC;AACF;AACA;AACA;AACA;IAJEA,eAAA,CAAA,IAAA,EAAA,kBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAOA;AACF;AACA;AACA;AACA;AACA;AALEA,IAAAA,eAAA,4BAMs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"}