{"version":3,"file":"index.node.mjs","sources":["../src/config.ts","../src/filters/GLProbes/GLProbe.ts","../src/filters/GLProbes/NodeGLProbe.ts","../src/filters/GLProbes/WebGLProbe.ts","../src/env/browser.ts","../src/env/index.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/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/typedefs.ts","../src/util/animation/AnimationFrameProvider.ts","../src/util/dom_misc.ts","../src/util/internals/uid.ts","../src/util/misc/dom.ts","../src/parser/scaleMatrix.ts","../src/util/misc/radiansDegreesConversion.ts","../src/parser/skewMatrix.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/types.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/util/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/parser/translateMatrix.ts","../src/shapes/Object/ObjectGeometry.ts","../src/shapes/Object/StackedObject.ts","../src/shapes/Object/AnimatableObject.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/dom_style.ts","../src/parser/attributes.ts","../src/parser/getSvgRegex.ts","../src/parser/constants.ts","../src/parser/selectorMatches.ts","../src/parser/doesSomeParentMatch.ts","../src/parser/elementMatchesRule.ts","../src/parser/getGlobalStylesForElement.ts","../src/parser/normalizeAttr.ts","../src/parser/rotateMatrix.ts","../src/util/internals/cleanupSvAttribute.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/shapes/Group.ts","../src/shapes/ActiveSelection.ts","../src/canvas/SelectableCanvas.ts","../src/canvas/TextEditingManager.ts","../src/canvas/Canvas.ts","../src/gradient/constants.ts","../src/gradient/parser/misc.ts","../src/parser/percent.ts","../src/gradient/parser/parseColorStops.ts","../src/gradient/parser/parseCoords.ts","../src/gradient/Gradient.ts","../src/Pattern.ts","../src/brushes/BaseBrush.ts","../src/util/path/regex.ts","../src/util/path/index.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/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/misc/textStyles.ts","../src/util/misc/groupSVGElements.ts","../src/util/misc/findScaleTo.ts","../src/util/lang_string.ts","../src/util/misc/mergeClipPaths.ts","../src/util/dom_request.ts","../src/util/transform_matrix_removal.ts","../src/shapes/Line.ts","../src/shapes/Arrow.ts","../src/shapes/IText/DraggableTextDelegate.ts","../src/shapes/Text/constants.ts","../src/shapes/Text/StyledText.ts","../src/shapes/Text/TextSVGExportMixin.ts","../src/shapes/Text/Text.ts","../src/shapes/IText/ITextBehavior.ts","../src/shapes/IText/ITextKeyBehavior.ts","../src/shapes/IText/ITextClickBehavior.ts","../src/shapes/IText/constants.ts","../src/shapes/IText/IText.ts","../src/shapes/Textbox.ts","../src/shapes/CircleNotes.ts","../src/shapes/Ellipse.ts","../src/filters/Canvas2dFilterBackend.ts","../src/filters/WebGLFilterBackend.ts","../src/filters/FilterBackend.ts","../src/shapes/Image.ts","../src/shapes/File.ts","../src/parser/parsePointsAttribute.ts","../src/shapes/Polyline.ts","../src/shapes/Polygon.ts","../src/shapes/RectNotes.ts","../src/shapes/ShapeNotes.ts","../src/shapes/Triangle.ts","../src/shapes/Urlimage.ts","../src/parser/applyViewboxTransform.ts","../src/parser/getCSSRules.ts","../src/parser/getMultipleNodes.ts","../src/parser/elementById.ts","../src/parser/recursivelyParseGradientsXlink.ts","../src/parser/getGradientDefs.ts","../src/parser/hasAncestorWithNodeName.ts","../src/parser/elements_parser.ts","../src/parser/parseElements.ts","../src/parser/parseUseDirectives.ts","../src/parser/parseSVGDocument.ts","../src/parser/loadSVGFromURL.ts","../src/parser/loadSVGFromString.ts","../src/controls/polyControl.ts","../src/controls/rotate.ts","../src/filters/typedefs.ts","../src/filters/shaders/baseFilter.ts","../src/filters/BaseFilter.ts","../src/filters/shaders/blendColor.ts","../src/filters/BlendColor.ts","../src/filters/shaders/blendImage.ts","../src/filters/BlendImage.ts","../src/filters/shaders/blur.ts","../src/filters/Blur.ts","../src/filters/shaders/brightness.ts","../src/filters/Brightness.ts","../src/filters/shaders/colorMatrix.ts","../src/filters/ColorMatrix.ts","../src/filters/ColorMatrixFilters.ts","../src/filters/Composed.ts","../src/filters/shaders/constrast.ts","../src/filters/Contrast.ts","../src/filters/shaders/convolute.ts","../src/filters/Convolute.ts","../src/filters/shaders/gamma.ts","../src/filters/Gamma.ts","../src/filters/shaders/grayscale.ts","../src/filters/Grayscale.ts","../src/filters/HueRotation.ts","../src/filters/shaders/invert.ts","../src/filters/Invert.ts","../src/filters/shaders/noise.ts","../src/filters/Noise.ts","../src/filters/shaders/pixelate.ts","../src/filters/Pixelate.ts","../src/filters/shaders/removeColor.ts","../src/filters/RemoveColor.ts","../src/filters/Resize.ts","../src/filters/shaders/saturation.ts","../src/filters/Saturation.ts","../src/filters/shaders/vibrance.ts","../src/filters/Vibrance.ts","../index.node.ts"],"sourcesContent":["export type TConfiguration = Partial<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 = 1;\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 enum GLPrecision {\n  low = 'lowp',\n  medium = 'mediump',\n  high = 'highp',\n}\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 { 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","import { GLPrecision, GLProbe } 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 = Object.values(GLPrecision).find((precision) =>\n        this.testPrecision(gl, precision)\n      );\n      console.log(`fabric: 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 { config } from '../config';\nimport { WebGLProbe } from '../filters/GLProbes/WebGLProbe';\nimport { TCopyPasteData, TFabricEnv } from './types';\n\nconst copyPasteData: TCopyPasteData = {};\n\nlet initialized = false;\nlet isTouchSupported: boolean;\n\nexport const getEnv = (): TFabricEnv => {\n  if (!initialized) {\n    config.configure({\n      devicePixelRatio: window.devicePixelRatio || 1,\n    });\n    isTouchSupported =\n      'ontouchstart' in window ||\n      'ontouchstart' in document ||\n      (window && window.navigator && window.navigator.maxTouchPoints > 0);\n    initialized = true;\n  }\n  return {\n    document,\n    window,\n    isTouchSupported,\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 `./node` module sets the env at import time.\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 { TFabricEnv } from './types';\nimport { getEnv as getBrowserEnv } from './browser';\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 Testing with jest\n * // jest is commonjs (https://jestjs.io/docs/ecmascript-modules), so by default it imports the node entry point.\n * import { getEnv, setEnv } from 'fabric';\n * // we want fabric to use the `window` and `document` objects exposed by jest.\n * setEnv({ ...getEnv(), window, document });\n * // done with setup, now run tests\n */\nexport const setEnv = (value: TFabricEnv) => {\n  env = value;\n};\n\nexport const getEnv = () => env || getBrowserEnv();\n\nexport const getDocument = (): Document => getEnv().document;\n\nexport const getWindow = (): (Window & typeof globalThis) | DOMWindow =>\n  getEnv().window;\n","/* eslint-disable no-restricted-globals */\nimport type { Canvas as NodeCanvas } from 'canvas';\nimport { JSDOM } from 'jsdom';\n// @ts-ignore\nimport utils from 'jsdom/lib/jsdom/living/generated/utils.js';\nimport { config } from '../config';\nimport { NodeGLProbe } from '../filters/GLProbes/NodeGLProbe';\nimport { setEnv } from './index';\nimport { 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\nconfig.configure({\n  devicePixelRatio: JSDOMWindow.devicePixelRatio || 1,\n});\n\nexport const getNodeCanvas = (canvasEl: HTMLCanvasElement) => {\n  const impl = jsdomImplForWrapper(canvasEl);\n  return (impl._canvas || impl._image) as NodeCanvas;\n};\n\nexport const getEnv = (): TFabricEnv => {\n  return {\n    document: JSDOMWindow.document,\n    window: JSDOMWindow,\n    isTouchSupported: false,\n    WebGLProbe: new NodeGLProbe(),\n    dispose(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    copyPasteData,\n  };\n};\n\nsetEnv(getEnv());\n","import { config } from './config';\nimport { 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 { 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() {}\nexport const halfPI = Math.PI / 2;\nexport const twoMathPi = Math.PI * 2;\nexport const PiBy180 = Math.PI / 180;\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 LEFT_CLICK = 1;\nexport const MIDDLE_CLICK = 2;\nexport const RIGHT_CLICK = 3;\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(classType: string): any {\n    const constructor = this[JSON].get(classType);\n    if (!constructor) {\n      throw new Error(`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.name, classConstructor);\n      // legacy\n      // @TODO: needs to be removed in fabric 7 or 8\n      this[JSON].set(classConstructor.name.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.name.toLowerCase(),\n      classConstructor\n    );\n  }\n}\n\nexport const classRegistry = new ClassRegistry();\n","import type { Canvas } from '../../canvas/Canvas';\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 {Canvas} canvas\n   */\n  cancelByCanvas(canvas: Canvas) {\n    if (!canvas) {\n      return [];\n    }\n    const animations = this.filter(\n      (animation) =>\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<\n  K extends string | number | symbol = string,\n  E = any\n> = Record<K, TEventCallback<E>>;\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<K extends string, E>(\n    eventName: K,\n    handler: TEventCallback<E>\n  ): VoidFunction;\n  on<K extends keyof EventSpec, E extends EventSpec[K]>(\n    handlers: EventRegistryObject<K, E>\n  ): VoidFunction;\n  on<K extends keyof EventSpec, E extends EventSpec[K]>(\n    arg0: K | EventRegistryObject<K, E>,\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      for (const eventName in arg0) {\n        this.on(eventName as K, arg0[eventName]);\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<K extends string, E>(\n    eventName: K,\n    handler: TEventCallback<E>\n  ): VoidFunction;\n  once<K extends keyof EventSpec, E extends EventSpec[K]>(\n    handlers: EventRegistryObject<K, E>\n  ): VoidFunction;\n  once<K extends keyof EventSpec, E extends EventSpec[K]>(\n    arg0: K | EventRegistryObject<K, E>,\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      for (const eventName in arg0) {\n        disposers.push(this.once(eventName as K, arg0[eventName]));\n      }\n      return () => disposers.forEach((d) => d());\n    } else if (handler) {\n      const disposer = this.on<K, E>(arg0, (...args) => {\n        handler(...args);\n        disposer();\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): void;\n  /**\n   * unsubscribe all event listeners\n   */\n  off(): void;\n  off<K extends keyof EventSpec>(\n    arg0?: K | EventRegistryObject,\n    handler?: TEventCallback\n  ) {\n    if (!this.__eventListeners) {\n      return;\n    }\n\n    // remove all key/value pairs (event name -> event handler)\n    if (typeof arg0 === 'undefined') {\n      for (const eventName in this.__eventListeners) {\n        this._removeEventListener(eventName);\n      }\n    }\n    // one object with key/value pairs was passed\n    else if (typeof arg0 === 'object') {\n      for (const eventName in arg0) {\n        this._removeEventListener(eventName as K, arg0[eventName]);\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","/**\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 { 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 = originZero): 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\nconst originZero = new Point(0, 0);\n","import type { Constructor, TBBox } from './typedefs';\nimport type { BaseFabricObject } from './EventTypeDefs';\nimport { removeFromArray } from './util/internals';\nimport { Point } from './Point';\nimport { InteractiveFabricObject } from './shapes/Object/InteractiveObject';\n\nexport function createCollectionMixin<TBase extends Constructor>(Base: TBase) {\n  class Collection extends Base {\n    /**\n     * @type {BaseFabricObject[]}\n     * @TODO needs to end up in the constructor too\n     */\n    _objects: BaseFabricObject[] = [];\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _onObjectAdded(object: BaseFabricObject) {\n      // subclasses should override this method\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _onObjectRemoved(object: BaseFabricObject) {\n      // subclasses should override this method\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _onStackOrderChanged(object: BaseFabricObject) {\n      // subclasses should override this method\n    }\n\n    /**\n     * Adds objects to collection\n     * Objects should be instances of (or inherit from) BaseFabricObject\n     * @param {...BaseFabricObject[]} objects to add\n     * @returns {number} new array length\n     */\n    add(...objects: BaseFabricObject[]): 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 {...BaseFabricObject[]} objects Object(s) to insert\n     * @returns {number} new array length\n     */\n    insertAt(index: number, ...objects: BaseFabricObject[]) {\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 {...BaseFabricObject[]} objects objects to remove\n     * @returns {BaseFabricObject[]} removed objects\n     */\n    remove(...objects: BaseFabricObject[]) {\n      const array = this._objects,\n        removed: BaseFabricObject[] = [];\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: BaseFabricObject,\n        index: number,\n        array: BaseFabricObject[]\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 `BaseFabricObject#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: BaseFabricObject, 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: BaseFabricObject) {\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: BaseFabricObject) {\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: BaseFabricObject, 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: BaseFabricObject, 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: BaseFabricObject, 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: BaseFabricObject,\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: BaseFabricObject,\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     * @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, true)) ||\n            object.isContainedWithinRect(tl, br, true) ||\n            (includeIntersecting &&\n              object.containsPoint(tl, undefined, true)) ||\n            (includeIntersecting && object.containsPoint(br, undefined, true)))\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","//@ts-nocheck\nimport { 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] = 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) {\n    return this[property];\n  }\n}\n","// https://www.typescriptlang.org/docs/handbook/utility-types.html\nimport { BaseFabricObject } from './EventTypeDefs';\nimport type { Gradient } from './gradient/Gradient';\nimport type { Pattern } from './Pattern';\nimport type { XY, Point } from './Point';\n\ninterface NominalTag<T> {\n  nominalTag?: T;\n}\n\ntype Nominal<Type, Tag> = NominalTag<Tag> & Type;\n\ntype TNonFunctionPropertyNames<T> = {\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  [K in keyof T]: T[K] extends Function ? never : K;\n}[keyof T];\nexport type TClassProperties<T> = Pick<T, TNonFunctionPropertyNames<T>>;\n\n// https://github.com/microsoft/TypeScript/issues/32080\nexport type Constructor<T = object> = new (...args: any[]) => T;\n\nconst enum Degree {}\nconst enum Radian {}\n\nexport type TDegree = Nominal<number, Degree>;\nexport type TRadian = Nominal<number, Radian>;\n\nexport type TAxis = 'x' | 'y';\n\nexport type TAxisKey<T extends string> = `${T}${Capitalize<TAxis>}`;\n\nexport type TFiller = Gradient<'linear'> | Gradient<'radial'> | Pattern;\n\nexport type TSize = {\n  width: number;\n  height: number;\n};\n\nexport type TBBox = {\n  left: number;\n  top: number;\n} & TSize;\n\nexport type Percent = `${number}%`;\n\nexport const enum ImageFormat {\n  jpeg = 'jpeg',\n  jpg = 'jpeg',\n  png = 'png',\n}\n\nexport const enum SVGElementName {\n  linearGradient = 'linearGradient',\n  radialGradient = 'radialGradient',\n  stop = 'stop',\n}\n\nexport const enum SupportedSVGUnit {\n  mm = 'mm',\n  cm = 'cm',\n  in = 'in',\n  pt = 'pt',\n  pc = 'pc',\n  em = 'em',\n}\n\n/**\n * A transform matrix.\n * Basically a matrix in the form\n * [ a c e ]\n * [ b d f ]\n * [ 0 0 1 ]\n * For more details, see @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#matrix\n */\nexport type TMat2D = [\n  a: number,\n  b: number,\n  c: number,\n  d: number,\n  e: number,\n  f: number\n];\n\n/**\n * An invalid keyword and an empty string will be handled as the `anonymous` keyword.\n * @see https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes\n */\nexport type TCrossOrigin = '' | 'anonymous' | 'use-credentials' | null;\n\nexport type TOriginX = 'center' | 'left' | 'right' | number;\nexport type TOriginY = 'center' | 'top' | 'bottom' | number;\n\nexport type TCornerPoint = {\n  tl: Point;\n  tr: Point;\n  bl: Point;\n  br: Point;\n};\n\nexport type TSVGReviver = (markup: string) => string;\n\nexport type TValidToObjectMethod = 'toDatalessObject' | 'toObject';\n\nexport type TCacheCanvasDimensions = {\n  width: number;\n  height: number;\n  zoomX: number;\n  zoomY: number;\n  x: number;\n  y: number;\n};\n\nexport type TRectBounds = [min: XY, max: XY];\n\nexport type TToCanvasElementOptions = {\n  left?: number;\n  top?: number;\n  width?: number;\n  height?: number;\n  filter?: (object: BaseFabricObject) => boolean;\n};\n\nexport type TDataUrlOptions = TToCanvasElementOptions & {\n  multiplier: number;\n  format?: ImageFormat;\n  quality?: number;\n  enableRetinaScaling?: boolean;\n};\n\nexport type AssertKeys<T, K extends keyof T> = T & Record<K, NonNullable<T[K]>>;\n","import { getWindow } from '../../env';\n\nexport function requestAnimFrame(callback: FrameRequestCallback): number {\n  return getWindow().requestAnimationFrame(callback);\n}\n\nexport function cancelAnimFrame(handle: number): void {\n  return getWindow().cancelAnimationFrame(handle);\n}\n","import { getDocument } from '../env';\n\n/**\n * Wraps element with another element\n * @param {HTMLElement} element Element to wrap\n * @param {HTMLElement|String} wrapper Element to wrap with\n * @param {Object} [attributes] Attributes to set on a wrapper\n * @return {HTMLElement} wrapper\n */\nexport function wrapElement(element: HTMLElement, wrapper: HTMLDivElement) {\n  if (element.parentNode) {\n    element.parentNode.replaceChild(wrapper, element);\n  }\n  wrapper.appendChild(element);\n  return wrapper;\n}\n\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) {\n  let left = 0,\n    top = 0;\n\n  const docElement = getDocument().documentElement,\n    body = getDocument().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-ignore\n  while (element && (element.parentNode || element.host)) {\n    // Set element to element parent, or 'host' in case of ShadowDOM\n    // @ts-ignore\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 === getDocument()) {\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\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 && element.ownerDocument,\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 = getDocument().defaultView!.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\n/**\n * Makes element selectable\n * @param {HTMLElement} element Element to make selectable\n * @return {HTMLElement} Element that was passed in\n */\nexport function makeElementSelectable(element: HTMLElement) {\n  if (typeof element.onselectstart !== 'undefined') {\n    element.onselectstart = null;\n  }\n  element.style.userSelect = '';\n  return element;\n}\n","let id = 0;\n\nexport const uid = () => id++;\n","import { getDocument } from '../../env';\nimport { ImageFormat } from '../../typedefs';\n/**\n * Creates canvas element\n * @return {CanvasElement} initialized canvas element\n */\nexport const createCanvasElement = (): HTMLCanvasElement =>\n  getDocument().createElement('canvas');\n\n/**\n * Creates image element (works on client and node)\n * @return {HTMLImageElement} HTML image element\n */\nexport const createImage = (): HTMLImageElement =>\n  getDocument().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 { TMat2D } from '../typedefs';\n\n/**\n * A scale matrix\n * Takes form\n * [x 0 0]\n * [0 y 0]\n * [0 0 1]\n * For more info, see\n * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#scale\n */\n\n/**\n * Generate a scale matrix around the point 0,0\n * @param {number} x scale on X axis\n * @param {number} [y] scale on Y axis\n * @returns {TMat2D} matrix\n */\nexport const scaleMatrix = (x: number, y: number = x): TMat2D => [\n  x,\n  0,\n  0,\n  y,\n  0,\n  0,\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 { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { TDegree, TMat2D } from '../typedefs';\n\n/**\n * A matrix in the form\n * [1 x 0]\n * [0 1 0]\n * [0 0 1]\n *\n * or\n *\n * [1 0 0]\n * [y 1 0]\n * [0 0 1]\n *\n * For more info, see\n * @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#skewx\n */\nconst fromAngleToSkew = (angle: TDegree) => Math.tan(degreesToRadians(angle));\n\n/**\n * Generate a skew matrix for the X axis\n * @param {TDegree} skewValue translation on X axis\n * @returns {TMat2D} matrix\n */\nexport const skewXMatrix = (skewValue: TDegree): TMat2D => [\n  1,\n  0,\n  fromAngleToSkew(skewValue),\n  1,\n  0,\n  0,\n];\n\n/**\n * Generate a skew matrix for the Y axis\n * @param {TDegree} skewValue translation on Y axis\n * @returns {TMat2D} matrix\n */\nexport const skewYMatrix = (skewValue: TDegree): TMat2D => [\n  1,\n  fromAngleToSkew(skewValue),\n  0,\n  1,\n  0,\n  0,\n];\n","import { iMatrix } from '../../constants';\nimport { scaleMatrix } from '../../parser/scaleMatrix';\nimport { skewXMatrix, skewYMatrix } from '../../parser/skewMatrix';\nimport { XY, Point } from '../../Point';\nimport { TDegree, TMat2D } from '../../typedefs';\nimport { cos } from './cos';\nimport { degreesToRadians, radiansToDegrees } from './radiansDegreesConversion';\nimport { sin } from './sin';\n\ntype TRotateMatrixArgs = {\n  angle?: TDegree;\n};\n\ntype 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 * @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 } = transformPoint(new Point(t[4], t[5]), 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 * 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 = Math.atan2(a[1], a[0]),\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 * 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 * @param  {Object} options\n * @param  {Number} [options.angle] angle in degrees\n * @return {TMat2D} transform matrix\n */\nexport const calcRotateMatrix = ({ angle }: TRotateMatrixArgs): TMat2D => {\n  if (!angle) {\n    return iMatrix;\n  }\n  const theta = degreesToRadians(angle),\n    cosin = cos(theta),\n    sinus = sin(theta);\n  return [cosin, sinus, -sinus, cosin, 0, 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 scaleMat = scaleMatrix(\n    flipX ? -scaleX : scaleX,\n    flipY ? -scaleY : scaleY\n  );\n  if (skewX) {\n    scaleMat = multiplyTransformMatrices(scaleMat, skewXMatrix(skewX), true);\n  }\n  if (skewY) {\n    scaleMat = multiplyTransformMatrices(scaleMat, skewYMatrix(skewY), true);\n  }\n  return scaleMat;\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 * @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 = ({\n  translateX = 0,\n  translateY = 0,\n  angle = 0 as TDegree,\n  ...otherOptions\n}: TComposeMatrixArgs): TMat2D => {\n  let matrix = [1, 0, 0, 1, translateX, translateY] as TMat2D;\n  if (angle) {\n    matrix = multiplyTransformMatrices(matrix, calcRotateMatrix({ angle }));\n  }\n  const scaleMatrix = calcDimensionsMatrix(otherOptions);\n  if (scaleMatrix !== iMatrix) {\n    matrix = multiplyTransformMatrices(matrix, scaleMatrix);\n  }\n  return matrix;\n};\n","import { noop } from '../../constants';\nimport type { Gradient } from '../../gradient/Gradient';\nimport type { Pattern } from '../../Pattern';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport type { TCrossOrigin, TFiller } from '../../typedefs';\nimport { createImage } from './dom';\nimport { classRegistry } from '../../ClassRegistry';\n\nexport type LoadImageOptions = {\n  /**\n   * see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n   */\n  signal?: AbortSignal;\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 Error('`options.signal` is in `aborted` state'));\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 Error('Error loading ' + img.src));\n    };\n    crossOrigin && (img.crossOrigin = crossOrigin);\n    img.src = url;\n  });\n\nexport type EnlivenObjectOptions = {\n  /**\n   * handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n   */\n  signal?: AbortSignal;\n  /**\n   * Method for further parsing of object elements,\n   * called after each fabric object created.\n   */\n  reviver?: (\n    serializedObj: Record<string, any>,\n    instance: FabricObject\n  ) => void;\n  /**\n   * Namespace to get klass \"Class\" object from\n   */\n  namespace?: any;\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 {object} [options.namespace] Namespace to get klass \"Class\" object from\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  objects: any[],\n  { signal, reviver = noop }: EnlivenObjectOptions = {}\n) =>\n  new Promise<FabricObject[]>((resolve, reject) => {\n    const instances: FabricObject[] = [];\n    signal && signal.addEventListener('abort', reject, { once: true });\n    Promise.all(\n      objects.map((obj) =>\n        classRegistry\n          .getClass(obj.type)\n          // @ts-ignore\n          .fromObject(obj, {\n            signal,\n            reviver,\n          })\n          .then((fabricInstance: FabricObject) => {\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(function (instance) {\n          instance.dispose && instance.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 }: { signal?: AbortSignal } = {}\n) =>\n  new Promise<R>((resolve, reject) => {\n    const instances: (FabricObject | TFiller)[] = [];\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      // gradient\n      if (value.colorStops) {\n        return new (classRegistry.getClass('gradient'))(value);\n      }\n      // clipPath\n      if (value.type) {\n        return enlivenObjects([value], { signal }).then(([enlived]) => {\n          instances.push(enlived);\n          return enlived;\n        });\n      }\n      // pattern\n      if (value.source) {\n        return classRegistry\n          .getClass('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: '#00FFFF',\n  aquamarine: '#7FFFD4',\n  azure: '#F0FFFF',\n  beige: '#F5F5DC',\n  bisque: '#FFE4C4',\n  black: '#000000',\n  blanchedalmond: '#FFEBCD',\n  blue: '#0000FF',\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: '#00FFFF',\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: '#FF00FF',\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: '#778899',\n  lightslategrey: '#778899',\n  lightsteelblue: '#B0C4DE',\n  lightyellow: '#FFFFE0',\n  lime: '#00FF00',\n  limegreen: '#32CD32',\n  linen: '#FAF0E6',\n  magenta: '#FF00FF',\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: '#663399',\n  red: '#FF0000',\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: '#FFFFFF',\n  whitesmoke: '#F5F5F5',\n  yellow: '#FFFF00',\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 * @static\n * @field\n * @memberOf Color\n */\n// eslint-disable-next-line max-len\nexport const reRGBa =\n  /^rgba?\\(\\s*(\\d{1,3}(?:\\.\\d+)?%?)\\s*,\\s*(\\d{1,3}(?:\\.\\d+)?%?)\\s*,\\s*(\\d{1,3}(?:\\.\\d+)?%?)\\s*(?:\\s*,\\s*((?:\\d*\\.?\\d+)?)\\s*)?\\)$/i;\n\n/**\n * Regex matching color in HSL or HSLA formats (ex: hsl(200, 80%, 10%), hsla(300, 50%, 80%, 0.5), hsla( 300 , 50% , 80% , 0.5 ))\n * @static\n * @field\n * @memberOf Color\n */\nexport const reHSLa =\n  /^hsla?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3}%)\\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 * @static\n * @field\n * @memberOf Color\n */\nexport const reHex = /^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i;\n","/**\n * @param {Number} p\n * @param {Number} q\n * @param {Number} t\n * @return {Number}\n */\nexport function 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 * Convert a value ∈ [0, 255] to hex\n */\nexport function hexify(value: number) {\n  const hexValue = value.toString(16).toUpperCase();\n  return hexValue.length === 1 ? `0${hexValue}` : hexValue;\n}\n","import { ColorNameMap } from './color_map';\nimport { reHSLa, reHex, reRGBa } from './constants';\nimport { hue2rgb, hexify } from './util';\n\n/**\n * RGB format\n */\nexport type TRGBColorSource = [red: number, green: number, blue: number];\n\n/**\n * RGBA format\n */\nexport type TRGBAColorSource = [\n  red: number,\n  green: number,\n  blue: number,\n  alpha: number\n];\n\nexport type TColorArg = string | TRGBColorSource | TRGBAColorSource | Color;\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   * Adapted from {@link https://gist.github.com/mjackson/5311256 https://gist.github.com/mjackson}\n   * @private\n   * @param {Number} r Red color value\n   * @param {Number} g Green color value\n   * @param {Number} b Blue color value\n   * @return {TRGBColorSource} Hsl color\n   */\n  _rgbToHsl(r: number, g: number, b: number): TRGBColorSource {\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)];\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 source = this.getSource();\n    return `rgb(${source[0]},${source[1]},${source[2]})`;\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    const source = this.getSource();\n    return `rgba(${source[0]},${source[1]},${source[2]},${source[3]})`;\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 source = this.getSource(),\n      hsl = this._rgbToHsl(source[0], source[1], source[2]);\n\n    return `hsl(${hsl[0]},${hsl[1]}%,${hsl[2]}%)`;\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 source = this.getSource(),\n      hsl = this._rgbToHsl(source[0], source[1], source[2]);\n\n    return `hsla(${hsl[0]},${hsl[1]}%,${hsl[2]}%,${source[3]})`;\n  }\n\n  /**\n   * Returns color representation in HEX format\n   * @return {String} ex: FF5555\n   */\n  toHex() {\n    const [r, g, b] = this.getSource();\n    return `${hexify(r)}${hexify(g)}${hexify(b)}`;\n  }\n\n  /**\n   * Returns color representation in HEXA format\n   * @return {String} ex: FF5555CC\n   */\n  toHexa() {\n    const source = this.getSource();\n    return `${this.toHex()}${hexify(Math.round(source[3] * 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    const source = this.getSource();\n    source[3] = alpha;\n    this.setSource(source);\n    return this;\n  }\n\n  /**\n   * Transforms color to its grayscale representation\n   * @return {Color} thisArg\n   */\n  toGrayscale() {\n    const source = this.getSource(),\n      average = parseInt(\n        (source[0] * 0.3 + source[1] * 0.59 + source[2] * 0.11).toFixed(0),\n        10\n      ),\n      currentAlpha = source[3];\n    this.setSource([average, average, average, currentAlpha]);\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 source = this.getSource(),\n      currentAlpha = source[3];\n    let average = Math.round(\n      source[0] * 0.3 + source[1] * 0.59 + source[2] * 0.11\n    );\n\n    average = average < (threshold || 127) ? 0 : 255;\n    this.setSource([average, average, average, currentAlpha]);\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 [r, g, b, alpha] = this.getSource(),\n      otherAlpha = 0.5,\n      otherSource = otherColor.getSource(),\n      [R, G, B] = [r, g, b].map((value, index) =>\n        Math.round(value * (1 - otherAlpha) + otherSource[index] * otherAlpha)\n      );\n\n    this.setSource([R, G, B, alpha]);\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 =\n          (parseInt(match[1], 10) / (/%$/.test(match[1]) ? 100 : 1)) *\n          (/%$/.test(match[1]) ? 255 : 1),\n        g =\n          (parseInt(match[2], 10) / (/%$/.test(match[2]) ? 100 : 1)) *\n          (/%$/.test(match[2]) ? 255 : 1),\n        b =\n          (parseInt(match[3], 10) / (/%$/.test(match[3]) ? 100 : 1)) *\n          (/%$/.test(match[3]) ? 255 : 1);\n\n      return [r, g, b, match[4] ? parseFloat(match[4]) : 1];\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]) / (/%$/.test(match[2]) ? 100 : 1),\n      l = parseFloat(match[3]) / (/%$/.test(match[3]) ? 100 : 1);\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      match[4] ? parseFloat(match[4]) : 1,\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 === 3 || value.length === 4,\n        isRGBa = value.length === 8 || value.length === 4,\n        r = isShortNotation\n          ? value.charAt(0) + value.charAt(0)\n          : value.substring(0, 2),\n        g = isShortNotation\n          ? value.charAt(1) + value.charAt(1)\n          : value.substring(2, 4),\n        b = isShortNotation\n          ? value.charAt(2) + value.charAt(2)\n          : value.substring(4, 6),\n        a = isRGBa\n          ? isShortNotation\n            ? value.charAt(3) + value.charAt(3)\n            : value.substring(6, 8)\n          : 'FF';\n\n      return [\n        parseInt(r, 16),\n        parseInt(g, 16),\n        parseInt(b, 16),\n        parseFloat((parseInt(a, 16) / 255).toFixed(2)),\n      ];\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 } from '../../constants';\nimport {\n  SupportedSVGUnit,\n  SVGElementName,\n  TBBox,\n  TMat2D,\n} from '../../typedefs';\nimport { toFixed } from './toFixed';\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 SVGElementName.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: number) => {\n  const unit = /\\D{0,2}$/.exec(value),\n    number = parseFloat(value);\n  if (!fontSize) {\n    fontSize = DEFAULT_SVG_FONT_SIZE;\n  }\n  const dpi = config.DPI;\n  switch (unit?.[0]) {\n    case SupportedSVGUnit.mm:\n      return (number * dpi) / 25.4;\n\n    case SupportedSVGUnit.cm:\n      return (number * dpi) / 2.54;\n\n    case SupportedSVGUnit.in:\n      return number * dpi;\n\n    case SupportedSVGUnit.pt:\n      return (number * dpi) / 72; // or * 4 / 3\n\n    case SupportedSVGUnit.pc:\n      return ((number * dpi) / 72) * 12; // or * 16\n\n    case SupportedSVGUnit.em:\n      return number * fontSize;\n\n    default:\n      return number;\n  }\n};\n\nexport const enum MeetOrSlice {\n  meet = 'meet',\n  slice = 'slice',\n}\n\nexport const enum MinMidMax {\n  min = 'Min',\n  mid = 'Mid',\n  max = 'Max',\n  none = 'none',\n}\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 !== MinMidMax.none) {\n    return [align.slice(1, 4) as MinMidMax, align.slice(5, 8) as MinMidMax];\n  } else if (align === MinMidMax.none) {\n    return [align, align];\n  }\n  return [MinMidMax.mid, MinMidMax.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 || MeetOrSlice.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 * @returns\n */\nexport const colorPropToSVG = (prop: string, value?: any) => {\n  if (!value) {\n    return `${prop}: none; `;\n  } else if (value.toLive) {\n    return `${prop}: url(#SVGID_${value.id}); `;\n  } else {\n    const color = new Color(value),\n      opacity = color.getAlpha();\n\n    let str = `${prop}: ${color.toRgb()}; `;\n\n    if (opacity !== 1) {\n      //change the color in rgb + opacity\n      str += `${prop}-opacity: ${opacity.toString()}; `;\n    }\n    return str;\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);\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 { ActiveSelection } from '../shapes/ActiveSelection';\nimport type { Group } from '../shapes/Group';\nimport type {\n  FabricObject,\n  TCachedFabricObject,\n} from '../shapes/Object/Object';\nimport type { FabricObjectWithDragSupport } from '../shapes/Object/InteractiveObject';\nimport type { TFiller } from '../typedefs';\nimport type { Text } from '../shapes/Text/Text';\nimport type { Pattern } from '../Pattern';\nimport type { IText } from '../shapes/IText/IText';\nimport type { Textbox } from '../shapes/Textbox';\nimport { RectNotes } from '../shapes/RectNotes';\nimport { CircleNotes } from '../shapes/CircleNotes';\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 &&\n    (filler as Pattern).offsetX !== undefined &&\n    (filler as Pattern).source !== undefined\n  );\n};\n\nexport const isCollection = (\n  fabricObject?: FabricObject\n): fabricObject is Group | ActiveSelection => {\n  return !!fabricObject && Array.isArray((fabricObject as Group)._objects);\n};\n\nexport const isActiveSelection = (\n  fabricObject?: FabricObject\n): fabricObject is ActiveSelection => {\n  return !!fabricObject && fabricObject.isType('ActiveSelection');\n};\n\nexport const isTextObject = (\n  fabricObject?: FabricObject\n): fabricObject is Text => {\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 !!fabricObject && fabricObject.isType('Text', 'IText', 'Textbox', 'RectNotes', 'CircleNotes');\n};\n\nexport const isInteractiveTextObject = (\n  fabricObject?: FabricObject\n): fabricObject is IText | Textbox | RectNotes | CircleNotes => {\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 !!fabricObject && fabricObject.isType('IText', 'Textbox', 'RectNotes', 'CircleNotes');\n};\n\nexport const isFabricObjectCached = (\n  fabricObject: FabricObject\n): fabricObject is TCachedFabricObject => {\n  return fabricObject.shouldCache() && !!fabricObject._cacheCanvas;\n};\n\nexport const isFabricObjectWithDragSupport = (\n  fabricObject?: FabricObject\n): fabricObject is FabricObjectWithDragSupport => {\n  return (\n    !!fabricObject &&\n    typeof (fabricObject as FabricObjectWithDragSupport).onDragStart ===\n    'function' &&\n    typeof (fabricObject as FabricObjectWithDragSupport).shouldStartDragging ===\n    'function'\n  );\n};\n","import { getDocument, getEnv } from '../env';\nimport { config } from '../config';\nimport { iMatrix, VERSION } from '../constants';\nimport type { CanvasEvents, StaticCanvasEvents } from '../EventTypeDefs';\nimport type { Gradient } from '../gradient/Gradient';\nimport { createCollectionMixin } from '../Collection';\nimport { CommonMethods } from '../CommonMethods';\nimport type { Pattern } from '../Pattern';\nimport { Point } from '../Point';\nimport type { BaseFabricObject as FabricObject } from '../EventTypeDefs';\nimport type { TCachedFabricObject } from '../shapes/Object/Object';\nimport type { Rect } from '../shapes/Rect';\nimport {\n  Constructor,\n  ImageFormat,\n  TCornerPoint,\n  TDataUrlOptions,\n  TFiller,\n  TMat2D,\n  TSize,\n  TSVGReviver,\n  TToCanvasElementOptions,\n  TValidToObjectMethod,\n} from '../typedefs';\nimport {\n  cancelAnimFrame,\n  requestAnimFrame,\n} from '../util/animation/AnimationFrameProvider';\nimport { getElementOffset } from '../util/dom_misc';\nimport { uid } from '../util/internals/uid';\nimport { createCanvasElement, isHTMLCanvas, toDataURL } from '../util/misc/dom';\nimport { invertTransform, transformPoint } from '../util/misc/matrix';\nimport {\n  enlivenObjectEnlivables,\n  EnlivenObjectOptions,\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 { isCollection, isFiller, isPattern, isTextObject } from '../util/types';\n\ntype TDestroyed<T, K extends keyof any> = {\n  // @ts-expect-error TS doesn't recognize protected/private fields using the `keyof` directive so we use `keyof any`\n  [R in K | keyof T]: R extends K ? T[R] | undefined | null : T[R];\n};\n\nexport type TDestroyedCanvas<T extends StaticCanvas> = TDestroyed<\n  T,\n  | 'contextTop'\n  | 'pixelFindContext'\n  | 'lowerCanvasEl'\n  | 'upperCanvasEl'\n  | 'pixelFindCanvasEl'\n  | 'wrapperEl'\n  | '_activeSelection'\n>;\n\nconst CANVAS_INIT_ERROR = 'Could not initialize `canvas` element';\n\nexport type TCanvasSizeOptions = {\n  backstoreOnly?: boolean;\n  cssOnly?: boolean;\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\ntype TCanvasHydrationOption = {\n  signal?: AbortSignal;\n};\n\nexport const StaticCanvasDefaults = {\n  //backgroundColor: '#ffffff',\n  backgroundImage: null,\n  overlayColor: '',\n  overlayImage: null,\n  includeDefaultValues: true,\n  renderOnAddRemove: true,\n  controlsAboveOverlay: false,\n  allowTouchScrolling: false,\n  imageSmoothingEnabled: true,\n  viewportTransform: iMatrix.concat(),\n  backgroundVpt: true,\n  overlayVpt: true,\n  enableRetinaScaling: true,\n  svgViewportTransformation: true,\n  skipOffscreen: true,\n  clipPath: undefined,\n  showBackgroundDots: true,\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> extends createCollectionMixin(CommonMethods<CanvasEvents>) {\n  /**\n   * Background color of canvas instance.\n   * @type {(String|TFiller)}\n   * @default\n   */\n  declare backgroundColor: TFiller | string;\n\n  declare showBackgroundDots: boolean;\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  declare backgroundImage: FabricObject | null;\n\n  /**\n   * Overlay color of canvas instance.\n   * @since 1.3.9\n   * @type {(String|TFiller)}\n   * @default\n   */\n  declare 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  declare overlayImage: FabricObject | null;\n\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  declare includeDefaultValues: boolean;\n\n  /**\n   * Indicates whether {@link add}, {@link insertAt} and {@link remove},\n   * {@link moveTo}, {@link 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  declare renderOnAddRemove: boolean;\n\n  /**\n   * Indicates whether object controls (borders/controls) are rendered above overlay image\n   * @type Boolean\n   * @default\n   */\n  declare 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  declare allowTouchScrolling: 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  declare imageSmoothingEnabled: 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  declare viewportTransform: TMat2D;\n\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  declare backgroundVpt: boolean;\n\n  /**\n   * if set to false overlya 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  declare overlayVpt: boolean;\n\n  /**\n   * When true, canvas is scaled by devicePixelRatio for better rendering on retina screens\n   * @type Boolean\n   * @default\n   */\n  declare enableRetinaScaling: boolean;\n\n  /**\n   * Describe canvas element extension over design\n   * properties are tl,tr,bl,br.\n   * if canvas is not zoomed/panned those points are the four corner of canvas\n   * if canvas is viewportTransformed you those points indicate the extension\n   * of canvas element in plain untrasformed coordinates\n   * The coordinates get updated with @method calcViewportBoundaries.\n   */\n  declare vptCoords: TCornerPoint;\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\n   */\n  declare skipOffscreen: 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  declare clipPath: FabricObject;\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  declare lowerCanvasEl: HTMLCanvasElement;\n\n  declare contextContainer: CanvasRenderingContext2D;\n\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  declare 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  declare height: number;\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  /**\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  declare _originalCanvasStyle?: string;\n\n  declare _offset: { left: number; top: number };\n  protected declare hasLostContext: boolean;\n  protected declare nextRenderHandle: number;\n\n  static ownDefaults: Record<string, any> = 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(el: string | HTMLCanvasElement, options = {}) {\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.lowerCanvasEl.width || 0,\n      height: this.height || this.lowerCanvasEl.height || 0,\n    });\n    this.viewportTransform = [...this.viewportTransform];\n    this.calcViewportBoundaries();\n  }\n\n  protected initElements(el: string | HTMLCanvasElement) {\n    this._createLowerCanvas(el);\n    this._originalCanvasStyle = this.lowerCanvasEl.style.cssText;\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 !== this) {\n      /* _DEV_MODE_START_ */\n      console.warn(\n        'fabric.Canvas: 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      /* _DEV_MODE_END_ */\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   */\n  _isRetinaScaling() {\n    return config.devicePixelRatio > 1 && this.enableRetinaScaling;\n  }\n\n  /**\n   * @private\n   * @return {Number} retinaScaling if applied, otherwise 1;\n   */\n  getRetinaScaling() {\n    return this._isRetinaScaling() ? Math.max(1, config.devicePixelRatio) : 1;\n  }\n\n  protected _initRetinaScaling() {\n    this.__initRetinaScaling(this.lowerCanvasEl, this.contextContainer);\n  }\n\n  protected __initRetinaScaling(\n    canvas: HTMLCanvasElement,\n    context: CanvasRenderingContext2D\n  ) {\n    const scaleRatio = config.devicePixelRatio;\n    canvas.setAttribute('width', (this.width * scaleRatio).toString());\n    canvas.setAttribute('height', (this.height * scaleRatio).toString());\n    context.scale(scaleRatio, scaleRatio);\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 = getElementOffset(this.lowerCanvasEl));\n  }\n\n  /**\n   * @private\n   */\n  protected _createCanvasElement() {\n    const element = createCanvasElement();\n    if (!element) {\n      throw new Error(CANVAS_INIT_ERROR);\n    }\n    if (typeof element.getContext === 'undefined') {\n      throw new Error(CANVAS_INIT_ERROR);\n    }\n    return element;\n  }\n\n  /**\n   * Creates a bottom canvas\n   * @private\n   * @param {HTMLElement} [canvasEl]\n   */\n  protected _createLowerCanvas(canvasEl: HTMLCanvasElement | string) {\n    // canvasEl === 'HTMLCanvasElement' does not work on jsdom/node\n    if (isHTMLCanvas(canvasEl)) {\n      this.lowerCanvasEl = canvasEl;\n    } else {\n      this.lowerCanvasEl =\n        (getDocument().getElementById(canvasEl) as HTMLCanvasElement) ||\n        this._createCanvasElement();\n    }\n    if (this.lowerCanvasEl.hasAttribute('data-fabric')) {\n      /* _DEV_MODE_START_ */\n      throw new Error(\n        'fabric.js: trying to initialize a canvas that has already been initialized'\n      );\n      /* _DEV_MODE_END_ */\n    }\n    this.lowerCanvasEl.classList.add('lower-canvas');\n    this.lowerCanvasEl.setAttribute('data-fabric', 'main');\n    this.contextContainer = this.lowerCanvasEl.getContext('2d')!;\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(value: number, options: TCanvasSizeOptions) {\n    return this.setDimensions({ width: value }, options);\n  }\n\n  /**\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(value: number, options: TCanvasSizeOptions) {\n    return this.setDimensions({ height: value }, options);\n  }\n\n  /**\n   * Internal use only\n   * @protected\n   */\n  protected _setDimensionsImpl(\n    dimensions: Partial<TSize>,\n    { cssOnly = false, backstoreOnly = false }: TCanvasSizeOptions = {}\n  ) {\n    Object.entries(dimensions).forEach(([prop, value]) => {\n      let cssValue = `${value}`;\n\n      if (!cssOnly) {\n        this._setBackstoreDimension(prop as keyof TSize, value);\n        cssValue += 'px';\n        // this.hasLostContext = true;\n      }\n\n      if (!backstoreOnly) {\n        this._setCssDimension(prop as keyof TSize, cssValue);\n      }\n    });\n\n    this._isRetinaScaling() && this._initRetinaScaling();\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<TSize>,\n    { cssOnly = false, backstoreOnly = false }: TCanvasSizeOptions = {}\n  ) {\n    this._setDimensionsImpl(dimensions, {\n      cssOnly,\n      backstoreOnly,\n    });\n    if (!cssOnly) {\n      this.requestRenderAll();\n    }\n  }\n\n  /**\n   * Helper for setting width/height\n   * @private\n   * @param {String} prop property (width|height)\n   * @param {Number} value value to set property to\n   * @todo subclass in canvas and handle upperCanvasEl there.\n   */\n  _setBackstoreDimension(prop: keyof TSize, value: number) {\n    this.lowerCanvasEl[prop] = value;\n    this[prop] = value;\n  }\n\n  /**\n   * Helper for setting css width/height\n   * @private\n   * @param {String} prop property (width|height)\n   * @param {String} value value to set property to\n   * @todo subclass in canvas and handle upperCanvasEl there.\n   */\n  _setCssDimension(prop: keyof TSize, value: string) {\n    this.lowerCanvasEl.style[prop] = value;\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.lowerCanvasEl;\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.contextContainer;\n  }\n\n  /**\n   * Clears all contexts (background, main, top) of an instance\n   */\n  clear() {\n    this.remove(...this.getObjects());\n    this.backgroundImage = null;\n    this.overlayImage = null;\n    //this.backgroundColor = '#ffffff';\n    this.showBackgroundDots = true;\n    this.overlayColor = '';\n    this.clearContext(this.contextContainer);\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.contextContainer, 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 using\n   * object absolute coordinates ( aCoords )\n   * @return {Object} points.tl\n   * @chainable\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    console.log('renderCanvas');\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-ignore 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      if (needsVpt) {\n        ctx.transform(...v);\n      }\n      object.render(ctx);\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  findById(id: string) {\n    const obj = this.getObjects().filter((_obj) => _obj._id === id);\n\n    return obj[0];\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  _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   * 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  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 (\n        '<clipPath id=\"' +\n        clipPath.clipPathId +\n        '\" >\\n' +\n        this.clipPath.toClipPathSVG(options.reviver) +\n        '</clipPath>\\n'\n      );\n    }\n    return '';\n  }\n\n  /**\n   * Creates markup containing SVG referenced elements like patterns, gradients etc.\n   * @return {String}\n   */\n  createSVGRefElementsMarkup(): string {\n    return (['background', 'overlay'] as const)\n      .map((prop) => {\n        const fill = this[`${prop}Color`];\n        if (isFiller(fill)) {\n          const shouldTransform = this[`${prop}Vpt`],\n            vpt = this.viewportTransform,\n            object = {\n              width: this.width / (shouldTransform ? vpt[0] : 1),\n              height: this.height / (shouldTransform ? vpt[3] : 1),\n            };\n          return fill.toSVG(object as Rect, {\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      let fontFamily = obj.fontFamily;\n      if (fontList[fontFamily] || !fontPaths[fontFamily]) {\n        return;\n      }\n      fontList[fontFamily] = true;\n      if (!obj.styles) {\n        return;\n      }\n      Object.values(obj.styles).forEach((styleRow) => {\n        Object.values(styleRow).forEach((textCharStyle) => {\n          fontFamily = textCharStyle.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},${finalHeight / 2\n        })\" x=\"${filler.offsetX - finalWidth / 2}\" y=\"${filler.offsetY - finalHeight / 2\n        }\" width=\"${(repeat === 'repeat-y' || repeat === 'no-repeat') && isPattern(filler)\n          ? filler.source.width\n          : finalWidth\n        }\" height=\"${(repeat === 'repeat-x' || repeat === 'no-repeat') && isPattern(filler)\n          ? filler.source.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 }: TCanvasHydrationOption = {}\n  ): Promise<this> {\n    if (!json) {\n      return Promise.reject(new Error('fabric.js: `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      showBackgroundDots,\n    } = serialized;\n    const renderOnAddRemove = this.renderOnAddRemove;\n    this.renderOnAddRemove = false;\n\n    return Promise.all([\n      enlivenObjects(objects, {\n        reviver,\n        signal,\n      }),\n      enlivenObjectEnlivables(\n        {\n          backgroundImage,\n          backgroundColor: background,\n          overlayImage,\n          overlayColor: overlay,\n          clipPath,\n        },\n        { signal }\n      ),\n    ]).then(([enlived, enlivedMap]) => {\n      this.clear();\n      this.add(...enlived);\n      this.set(serialized);\n      this.set(enlivedMap);\n      this.renderOnAddRemove = renderOnAddRemove;\n      return this;\n    });\n  }\n\n  /**\n   * Clones canvas instance\n   * @param {string[]} [properties] Array of properties to include in the cloned canvas and children\n   */\n  clone(properties: string[]) {\n    const data = this.toObject(properties);\n    const canvas = this.cloneWithoutData();\n    return canvas.loadFromJSON(data);\n  }\n\n  /**\n   * Clones canvas instance without cloning existing data.\n   * This essentially copies canvas dimensions since loadFromJSON does not affect canvas size.\n   */\n  cloneWithoutData() {\n    const el = createCanvasElement();\n    el.width = this.width;\n    el.height = this.height;\n    return new (this.constructor as Constructor<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 = ImageFormat.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 = 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   * **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 = null;\n    if (this.overlayImage) {\n      this.overlayImage.dispose();\n    }\n    this.overlayImage = null;\n    // @ts-expect-error disposing\n    this.contextContainer = null;\n    const canvasElement = this.lowerCanvasEl!;\n    (this as TDestroyedCanvas<StaticCanvas>).lowerCanvasEl = undefined;\n    // restore canvas style and attributes\n    canvasElement.classList.remove('lower-canvas');\n    canvasElement.removeAttribute('data-fabric');\n    // restore canvas size to original size in case retina scaling was applied\n    canvasElement.setAttribute('width', `${this.width}`);\n    canvasElement.setAttribute('height', `${this.height}`);\n    canvasElement.style.cssText = this._originalCanvasStyle || '';\n    this._originalCanvasStyle = undefined;\n    getEnv().dispose(canvasElement);\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: ${this._objects.length\n      } }>`;\n  }\n}\n","//@ts-nocheck\nimport { Point } from '../Point';\nimport { getScrollLeftTop } from './dom_misc';\n\nconst touchEvents = ['touchstart', 'touchmove', 'touchend'];\n\nfunction getTouchInfo(event) {\n  const touchProp = event.changedTouches;\n  if (touchProp && touchProp[0]) {\n    return touchProp[0];\n  }\n  return event;\n}\n\nexport const getPointer = (event) => {\n  const element = event.target,\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) =>\n  touchEvents.indexOf(event.type) > -1 || event.pointerType === 'touch';\n\nexport const stopEvent = (e: Event) => {\n  e.preventDefault();\n  e.stopPropagation();\n};\n","import { XY, Point } from '../../Point';\nimport { 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 type { FabricObject } from '../../shapes/Object/Object';\nimport { TMat2D } from '../../typedefs';\nimport { makeBoundingBoxFromPoints } from './boundingBoxFromPoints';\nimport type { TScaleMatrixArgs } from './matrix';\nimport {\n  calcDimensionsMatrix,\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 * described in options.\n * Use to calculate the boxes around objects for controls.\n * @param {Number} width\n * @param {Number} height\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 * @returns {Point} size\n */\nexport const sizeAfterTransform = (\n  width: number,\n  height: number,\n  options: TScaleMatrixArgs\n) => {\n  const dimX = width / 2,\n    dimY = height / 2,\n    transformMatrix = calcDimensionsMatrix(options),\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(transformMatrix)),\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 type { StaticCanvas } from '../../canvas/StaticCanvas';\nimport { invertTransform, multiplyTransformMatrices } from './matrix';\nimport { applyTransformToObject } from './objectTransforms';\n\nexport const enum ObjectRelation {\n  sibling = 'sibling',\n  child = 'child',\n}\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 * @see {transformPointRelativeToCanvas} for transforming relative to canvas\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 =>\n  //  we are actually looking for the transformation from the destination plane to the source plane (which is a linear mapping)\n  //  the object will exist on the destination plane and we want it to seem unchanged by it so we reverse the destination matrix (to) and then apply the source matrix (from)\n  point.transform(calcPlaneChangeMatrix(from, to));\n\n/**\n * Transform point relative to canvas.\n * From the viewport/viewer's perspective the point remains unchanged.\n *\n * `child` relation means `point` exists in the coordinate plane created by `canvas`.\n * In other words point is measured according to canvas' top left corner\n * meaning that if `point` is equal to (0,0) it is positioned at canvas' top left corner.\n *\n * `sibling` relation means `point` exists in the same coordinate plane as canvas.\n * In other words they both relate to the same (0,0) and agree on every point, which is how an event relates to canvas.\n *\n * @param {Point} point\n * @param {StaticCanvas} canvas\n * @param {'sibling'|'child'} relationBefore current relation of point to canvas\n * @param {'sibling'|'child'} relationAfter desired relation of point to canvas\n * @returns {Point} transformed point\n */\nexport const transformPointRelativeToCanvas = (\n  point: Point,\n  canvas: StaticCanvas,\n  relationBefore: ObjectRelation,\n  relationAfter: ObjectRelation\n): Point => {\n  // is this still needed with TS?\n  if (\n    relationBefore !== ObjectRelation.child &&\n    relationBefore !== ObjectRelation.sibling\n  ) {\n    throw new Error(`fabric.js: received bad argument ${relationBefore}`);\n  }\n  if (\n    relationAfter !== ObjectRelation.child &&\n    relationAfter !== ObjectRelation.sibling\n  ) {\n    throw new Error(`fabric.js: received bad argument ${relationAfter}`);\n  }\n  if (relationBefore === relationAfter) {\n    return point;\n  }\n  const t = canvas.viewportTransform;\n  return point.transform(relationAfter === 'child' ? invertTransform(t) : t);\n};\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 { BasicTransformEvent, TModificationEvents } 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 { 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 {\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 { TOriginX, TOriginY } from '../typedefs';\nimport {\n  degreesToRadians,\n  radiansToDegrees,\n} from '../util/misc/radiansDegreesConversion';\nimport type { Control } from './Control';\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,\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) {\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 { TransformActionHandler } from '../EventTypeDefs';\nimport { fireEvent } from '../util/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","// @ts-nocheck\nimport { TSVGReviver } from '../../typedefs';\nimport { uid } from '../../util/internals/uid';\nimport { colorPropToSVG, matrixToSVG } from '../../util/misc/svgParsing';\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(skipShadow?: boolean) {\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 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(style, useWhiteSpace?: boolean) {\n    const term = '; ',\n      fontFamily = style.fontFamily\n        ? `font-family: ${\n            style.fontFamily.indexOf(\"'\") === -1 &&\n            style.fontFamily.indexOf('\"') === -1\n              ? `'${style.fontFamily}'`\n              : style.fontFamily\n          }${term}`\n        : '',\n      strokeWidth = style.strokeWidth\n        ? `stroke-width: ${style.strokeWidth}${term}`\n        : '',\n      fontSize = style.fontSize ? `font-size: ${style.fontSize}px${term}` : '',\n      fontStyle = style.fontStyle\n        ? `font-style: ${style.fontStyle}${term}`\n        : '',\n      fontWeight = style.fontWeight\n        ? `font-weight: ${style.fontWeight}${term}`\n        : '',\n      fill = style.fill ? colorPropToSVG('fill', style.fill) : '',\n      stroke = style.stroke ? colorPropToSVG('stroke', style.stroke) : '',\n      textDecoration = this.getSvgTextDecoration(style),\n      deltaY = style.deltaY ? `baseline-shift: ${-style.deltaY}; ` : '';\n\n    return [\n      stroke,\n      strokeWidth,\n      fontFamily,\n      fontSize,\n      fontStyle,\n      fontWeight,\n      textDecoration\n        ? `text-decoration: ${textDecoration}${term}`\n        : textDecoration,\n      fill,\n      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(style) {\n    return ['overline', 'underline', 'line-through']\n      .filter((decoration) => style[decoration.replace('-', '')])\n      .join(' ');\n  }\n\n  /**\n   * Returns filter for svg shadow\n   * @return {String}\n   */\n  getSvgFilter() {\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    return [\n      this.id ? `id=\"${this.id}\" ` : '',\n      this.clipPath ? `clip-path=\"url(#${this.clipPath.clipPathId})\" ` : '',\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(full?: boolean, additionalTransform = '') {\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   * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n   * @return {String} svg representation of an instance\n   */\n  toSVG(reviver?: TSVGReviver) {\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(reviver?: TSVGReviver) {\n    return (\n      '\\t' +\n      this._createBaseClipPathSVGMarkup(this._toSVG(reviver), {\n        reviver,\n      })\n    );\n  }\n\n  /**\n   * @private\n   */\n  _createBaseClipPathSVGMarkup(\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    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  ) {\n    const styleInfo = noStyle ? '' : `style=\"${this.getSvgStyles()}\" `,\n      shadowInfo = withShadow ? `style=\"${this.getSvgFilter()}\" ` : '',\n      clipPath = this.clipPath,\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 (fill && fill.toLive) {\n      markup.push(fill.toSVG(this));\n    }\n    if (stroke && stroke.toLive) {\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() {\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 { 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 {\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 { 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 { 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 { TRGBAColorSource } from '../../color/Color';\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 {\n  ValueAnimationOptions,\n  ArrayAnimationOptions,\n  ColorAnimationOptions,\n} from './types';\nimport { TColorArg } from '../../color/Color';\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 { XY, Point } from '../../Point';\nimport { TRadian } from '../../typedefs';\n\nconst unitVectorX = new Point(1, 0);\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(new Point());\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  const dot = a.x * b.x + a.y * b.y,\n    det = a.x * b.y - a.y * b.x;\n  return Math.atan2(det, dot) as TRadian;\n};\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 => v.scalarDivide(magnitude(v));\n\n/**\n * @param {Point} A\n * @param {Point} B\n * @param {Point} C\n * @returns {{ vector: Point, angle: TRadian}} vector representing the bisector of A and A's angle\n */\nexport const getBisector = (A: Point, B: Point, C: Point) => {\n  const AB = createVector(A, B),\n    AC = createVector(A, C),\n    alpha = calcAngleBetweenVectors(AB, AC);\n  return {\n    vector: getUnitVector(rotateVector(AB, alpha / 2)),\n    angle: alpha,\n  };\n};\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","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   * 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 { TDegree, TOriginX, TOriginY } from '../../typedefs';\nimport { 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 { BaseProps } from './types/BaseProps';\nimport { FillStrokeProps } from './types/FillStrokeProps';\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  declare zIndex: number;\n\n  /**\n   * Object containing this object.\n   * can influence its size and position\n   */\n  declare group?: Group;\n\n  declare _originalOriginX?: TOriginX;\n\n  declare _originalOriginY?: TOriginY;\n\n  /**\n   * Calculate object bounding box dimensions from its properties scale, skew.\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      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(dimX, dimY, dimOptions);\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   * Sets the origin/position of the object to it's center point\n   * @private\n   * @return {void}\n   */\n  _setOriginToCenter() {\n    this._originalOriginX = this.originX;\n    this._originalOriginY = this.originY;\n\n    const center = this.getRelativeCenterPoint();\n\n    this.originX = 'center';\n    this.originY = 'center';\n\n    this.left = center.x;\n    this.top = center.y;\n  }\n\n  /**\n   * Resets the origin/position of the object to it's original origin\n   * @private\n   * @return {void}\n   */\n  _resetOrigin() {\n    if (\n      this._originalOriginX !== undefined &&\n      this._originalOriginY !== undefined\n    ) {\n      const originPoint = this.translateToOriginPoint(\n        this.getRelativeCenterPoint(),\n        this._originalOriginX,\n        this._originalOriginY\n      );\n\n      this.left = originPoint.x;\n      this.top = originPoint.y;\n\n      this.originX = this._originalOriginX;\n      this.originY = this._originalOriginY;\n      this._originalOriginX = undefined;\n      this._originalOriginY = undefined;\n    }\n  }\n\n  /**\n   * @private\n   */\n  _getLeftTopCoords() {\n    return this.translateToOriginPoint(\n      this.getRelativeCenterPoint(),\n      'left',\n      'top'\n    );\n  }\n}\n","import { TMat2D } from '../typedefs';\n\n/**\n * A translation matrix in the form of\n * [ 1 0 x ]\n * [ 0 1 y ]\n * [ 0 0 1 ]\n * See @link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/transform#translate for more details\n */\n\n/**\n * Generate a translation matrix\n * @param {number} x translation on X axis\n * @param {number} [y] translation on Y axis\n * @returns {TMat2D} matrix\n */\nexport const translateMatrix = (x: number, y = 0): TMat2D => [1, 0, 0, 1, x, y];\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 { cos } from '../../util/misc/cos';\nimport {\n  calcRotateMatrix,\n  composeMatrix,\n  invertTransform,\n  multiplyTransformMatrices,\n  qrDecompose,\n  transformPoint,\n} from '../../util/misc/matrix';\nimport { degreesToRadians } from '../../util/misc/radiansDegreesConversion';\nimport { sin } from '../../util/misc/sin';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { StaticCanvas } from '../../canvas/StaticCanvas';\nimport { ObjectOrigin } from './ObjectOrigin';\nimport { ObjectEvents } from '../../EventTypeDefs';\nimport { ControlProps } from './types/ControlProps';\nimport { translateMatrix } from '../../parser/translateMatrix';\n\ntype TLineDescriptor = {\n  o: Point;\n  d: Point;\n};\n\ntype TBBoxLines = {\n  topline: TLineDescriptor;\n  leftline: TLineDescriptor;\n  bottomline: TLineDescriptor;\n  rightline: TLineDescriptor;\n};\n\ntype TMatrixCache = {\n  key: string;\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 canvas object absolute coordinates\n   * properties are tl,tr,bl,br and describe the four main corner.\n   * each property is an object with x, y, instance of Fabric.Point.\n   * The coordinates depends from this properties: width, height, scaleX, scaleY\n   * skewX, skewY, angle, strokeWidth, top, left.\n   * Those coordinates are useful to understand where an object is. They get updated\n   * with lineCoords or oCoords in interactive cases but they do not need to be updated when zoom or panning change.\n   * The coordinates get updated with @method setCoords.\n   * You can calculate them without updating with @method calcACoords();\n   */\n  declare aCoords: TACoords;\n\n  /**\n   * Describe object's corner position in canvas element coordinates.\n   * includes padding. Used of object detection.\n   * set and refreshed with setCoords.\n   * Those could go away\n   * @todo investigate how to get rid of those\n   */\n  declare lineCoords: TCornerPoint;\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(point: Point, originX?: TOriginX, originY?: TOriginY) {\n    this.setPositionByOrigin(\n      point,\n      originX || this.originX,\n      originY || this.originY\n    );\n  }\n\n  /**\n   * return correct set of coordinates for intersection\n   * this will return either aCoords or lineCoords.\n   * @param {boolean} absolute will return aCoords if true or lineCoords\n   * @param {boolean} calculate will calculate the coords or use the one\n   * that are attached to the object instance\n   * @return {Object} {tl, tr, br, bl} points\n   */\n  _getCoords(absolute = false, calculate = false): TCornerPoint {\n    if (calculate) {\n      return absolute ? this.calcACoords() : this.calcLineCoords();\n    }\n    // swapped this double if in place of setCoords();\n    if (!this.aCoords) {\n      this.aCoords = this.calcACoords();\n    }\n    if (!this.lineCoords) {\n      this.lineCoords = this.calcLineCoords();\n    }\n    return absolute ? this.aCoords : this.lineCoords;\n  }\n\n  /**\n   * return correct set of coordinates for intersection\n   * this will return either aCoords or lineCoords.\n   * The coords are returned in an array.\n   * @param {boolean} absolute will return aCoords if true or lineCoords\n   * @param {boolean} calculate will return aCoords if true or lineCoords\n   * @return {Array} [tl, tr, br, bl] of points\n   */\n  getCoords(absolute = false, calculate = false): Point[] {\n    const { tl, tr, br, bl } = this._getCoords(absolute, calculate);\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 an area formed by 2 points\n   * @param {Object} pointTL top-left point of area\n   * @param {Object} pointBR bottom-right point of area\n   * @param {Boolean} [absolute] use coordinates without viewportTransform\n   * @param {Boolean} [calculate] use coordinates of current position instead of stored one\n   * @return {Boolean} true if object intersects with an area formed by 2 points\n   */\n  intersectsWithRect(\n    pointTL: Point,\n    pointBR: Point,\n    absolute?: boolean,\n    calculate?: boolean\n  ): boolean {\n    const coords = this.getCoords(absolute, calculate),\n      intersection = Intersection.intersectPolygonRectangle(\n        coords,\n        pointTL,\n        pointBR\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   * @param {Boolean} [absolute] use coordinates without viewportTransform\n   * @param {Boolean} [calculate] use coordinates of current position instead of calculating them\n   * @return {Boolean} true if object intersects with another object\n   */\n  intersectsWithObject(\n    other: ObjectGeometry,\n    absolute = false,\n    calculate = false\n  ): boolean {\n    const intersection = Intersection.intersectPolygonPolygon(\n      this.getCoords(absolute, calculate),\n      other.getCoords(absolute, calculate)\n    );\n\n    return (\n      intersection.status === 'Intersection' ||\n      intersection.status === 'Coincident' ||\n      other.isContainedWithinObject(this, absolute, calculate) ||\n      this.isContainedWithinObject(other, absolute, calculate)\n    );\n  }\n\n  /**\n   * Checks if object is fully contained within area of another object\n   * @param {Object} other Object to test\n   * @param {Boolean} [absolute] use coordinates without viewportTransform\n   * @param {Boolean} [calculate] use coordinates of current position instead of store ones\n   * @return {Boolean} true if object is fully contained within area of another object\n   */\n  isContainedWithinObject(\n    other: ObjectGeometry,\n    absolute = false,\n    calculate = false\n  ): boolean {\n    const points = this.getCoords(absolute, calculate),\n      otherCoords = absolute ? other.aCoords : other.lineCoords,\n      lines = other._getImageLines(otherCoords);\n    for (let i = 0; i < 4; i++) {\n      if (!other.containsPoint(points[i], lines)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * Checks if object is fully contained within area formed by 2 points\n   * @param {Object} pointTL top-left point of area\n   * @param {Object} pointBR bottom-right point of area\n   * @param {Boolean} [absolute] use coordinates without viewportTransform\n   * @param {Boolean} [calculate] use coordinates of current position instead of stored one\n   * @return {Boolean} true if object is fully contained within area formed by 2 points\n   */\n  isContainedWithinRect(\n    pointTL: Point,\n    pointBR: Point,\n    absolute?: boolean,\n    calculate?: boolean\n  ): boolean {\n    const boundingRect = this.getBoundingRect(absolute, calculate);\n    return (\n      boundingRect.left >= pointTL.x &&\n      boundingRect.left + boundingRect.width <= pointBR.x &&\n      boundingRect.top >= pointTL.y &&\n      boundingRect.top + boundingRect.height <= pointBR.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   * @param {Object} [lines] object returned from @method _getImageLines\n   * @param {Boolean} [absolute] use coordinates without viewportTransform\n   * @param {Boolean} [calculate] use coordinates of current position instead of stored ones\n   * @return {Boolean} true if point is inside the object\n   */\n  containsPoint(\n    point: Point,\n    lines?: TBBoxLines,\n    absolute = false,\n    calculate = false\n  ): boolean {\n    const coords = this._getCoords(absolute, calculate),\n      imageLines = lines || this._getImageLines(coords),\n      xPoints = this._findCrossPoints(point, imageLines);\n    // if xPoints is odd then point is inside the object\n    return xPoints !== 0 && xPoints % 2 === 1;\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   * @param {Boolean} [calculate] use coordinates of current position instead of .aCoords\n   * @return {Boolean} true if object is fully or partially contained within canvas\n   */\n  isOnScreen(calculate = false): boolean {\n    if (!this.canvas) {\n      return false;\n    }\n    const { tl, br } = this.canvas.vptCoords;\n    const points = this.getCoords(true, calculate);\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, true, calculate)) {\n      return true;\n    }\n    return this._containsCenterOfCanvas(tl, br, calculate);\n  }\n\n  /**\n   * Checks if the object contains the midpoint between canvas extremities\n   * Does not make sense outside the context of isOnScreen and isPartiallyOnScreen\n   * @private\n   * @param {Point} pointTL Top Left point\n   * @param {Point} pointBR Top Right point\n   * @param {Boolean} calculate use coordinates of current position instead of stored ones\n   * @return {Boolean} true if the object contains the point\n   */\n  private _containsCenterOfCanvas(\n    pointTL: Point,\n    pointBR: Point,\n    calculate?: boolean\n  ): boolean {\n    // worst case scenario the object is so big that contains the screen\n    const centerPoint = pointTL.midPointFrom(pointBR);\n    return this.containsPoint(centerPoint, undefined, true, calculate);\n  }\n\n  /**\n   * Checks if object is partially contained within the canvas with current viewportTransform\n   * @param {Boolean} [calculate] use coordinates of current position instead of stored ones\n   * @return {Boolean} true if object is partially contained within canvas\n   */\n  isPartiallyOnScreen(calculate?: boolean): boolean {\n    if (!this.canvas) {\n      return false;\n    }\n    const { tl, br } = this.canvas.vptCoords;\n    if (this.intersectsWithRect(tl, br, true, calculate)) {\n      return true;\n    }\n    const allPointsAreOutside = this.getCoords(true, calculate).every(\n      (point) =>\n        (point.x >= br.x || point.x <= tl.x) &&\n        (point.y >= br.y || point.y <= tl.y)\n    );\n    return (\n      allPointsAreOutside && this._containsCenterOfCanvas(tl, br, calculate)\n    );\n  }\n\n  /**\n   * Method that returns an object with the object edges in it, given the coordinates of the corners\n   * @private\n   * @param {Object} lineCoords or aCoords Coordinates of the object corners\n   */\n  _getImageLines({ tl, tr, bl, br }: TCornerPoint): TBBoxLines {\n    const lines = {\n      topline: {\n        o: tl,\n        d: tr,\n      },\n      rightline: {\n        o: tr,\n        d: br,\n      },\n      bottomline: {\n        o: br,\n        d: bl,\n      },\n      leftline: {\n        o: bl,\n        d: tl,\n      },\n    };\n\n    // // debugging\n    // if (this.canvas.contextTop) {\n    //   this.canvas.contextTop.fillRect(lines.bottomline.d.x, lines.bottomline.d.y, 2, 2);\n    //   this.canvas.contextTop.fillRect(lines.bottomline.o.x, lines.bottomline.o.y, 2, 2);\n    //\n    //   this.canvas.contextTop.fillRect(lines.leftline.d.x, lines.leftline.d.y, 2, 2);\n    //   this.canvas.contextTop.fillRect(lines.leftline.o.x, lines.leftline.o.y, 2, 2);\n    //\n    //   this.canvas.contextTop.fillRect(lines.topline.d.x, lines.topline.d.y, 2, 2);\n    //   this.canvas.contextTop.fillRect(lines.topline.o.x, lines.topline.o.y, 2, 2);\n    //\n    //   this.canvas.contextTop.fillRect(lines.rightline.d.x, lines.rightline.d.y, 2, 2);\n    //   this.canvas.contextTop.fillRect(lines.rightline.o.x, lines.rightline.o.y, 2, 2);\n    // }\n\n    return lines;\n  }\n\n  /**\n   * Helper method to determine how many cross points are between the 4 object edges\n   * and the horizontal line determined by a point on canvas\n   * @private\n   * @param {Point} point Point to check\n   * @param {Object} lines Coordinates of the object being evaluated\n   * @return {number} number of crossPoint\n   */\n  _findCrossPoints(point: Point, lines: TBBoxLines): number {\n    let xcount = 0;\n\n    for (const lineKey in lines) {\n      let xi;\n      const iLine = lines[lineKey as keyof TBBoxLines];\n      // optimization 1: line below point. no cross\n      if (iLine.o.y < point.y && iLine.d.y < point.y) {\n        continue;\n      }\n      // optimization 2: line above point. no cross\n      if (iLine.o.y >= point.y && iLine.d.y >= point.y) {\n        continue;\n      }\n      // optimization 3: vertical line case\n      if (iLine.o.x === iLine.d.x && iLine.o.x >= point.x) {\n        xi = iLine.o.x;\n      }\n      // calculate the intersection point\n      else {\n        const b1 = 0;\n        const b2 = (iLine.d.y - iLine.o.y) / (iLine.d.x - iLine.o.x);\n        const a1 = point.y - b1 * point.x;\n        const a2 = iLine.o.y - b2 * iLine.o.x;\n\n        xi = -(a1 - a2) / (b1 - b2);\n      }\n      // don't count xi < point.x cases\n      if (xi >= point.x) {\n        xcount += 1;\n      }\n      // optimization 4: specific for square images\n      if (xcount === 2) {\n        break;\n      }\n    }\n    return xcount;\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   * @param {Boolean} [absolute] use coordinates without viewportTransform\n   * @param {Boolean} [calculate] use coordinates of current position instead of .lineCoords / .aCoords\n   * @return {Object} Object with left, top, width, height properties\n   */\n  getBoundingRect(absolute?: boolean, calculate?: boolean): TBBox {\n    return makeBoundingBoxFromPoints(this.getCoords(absolute, calculate));\n  }\n\n  /**\n   * Returns width of an object's bounding box counting transformations\n   * @todo shouldn't this account for group transform and return the actual size in canvas coordinate plane?\n   * @return {Number} width value\n   */\n  getScaledWidth(): number {\n    return this._getTransformedDimensions().x;\n  }\n\n  /**\n   * Returns height of an object bounding box counting transformations\n   * @todo shouldn't this account for group transform and return the actual size in canvas coordinate plane?\n   * @return {Number} height value\n   */\n  getScaledHeight(): number {\n    return this._getTransformedDimensions().y;\n  }\n\n  /**\n   * Scales an object (equally by x and y)\n   * @param {Number} value Scale factor\n   * @return {void}\n   */\n  scale(value: number): void {\n    this._set('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   * @param {Boolean} absolute ignore viewport\n   * @return {void}\n   */\n  scaleToWidth(value: number, absolute?: boolean) {\n    // adjust to bounding rect factor so that rotated shapes would fit as well\n    const boundingRectFactor =\n      this.getBoundingRect(absolute).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   * @param {Boolean} absolute ignore viewport\n   * @return {void}\n   */\n  scaleToHeight(value: number, absolute = false) {\n    // adjust to bounding rect factor so that rotated shapes would fit as well\n    const boundingRectFactor =\n      this.getBoundingRect(absolute).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      ? qrDecompose(this.calcTransformMatrix()).angle\n      : this.angle;\n  }\n\n  /**\n   * return the coordinate of the 4 corners of the bounding box in HTMLCanvasElement coordinates\n   * used for bounding box interactivity with the mouse\n   * @returns {TCornerPoint}\n   */\n  calcLineCoords(): TCornerPoint {\n    const vpt = this.getViewportTransform(),\n      padding = this.padding,\n      angle = degreesToRadians(this.getTotalAngle()),\n      cosP = cos(angle) * padding,\n      sinP = sin(angle) * padding,\n      cosPSinP = cosP + sinP,\n      cosPMinusSinP = cosP - sinP,\n      { tl, tr, bl, br } = this.calcACoords();\n\n    const lineCoords: TCornerPoint = {\n      tl: transformPoint(tl, vpt),\n      tr: transformPoint(tr, vpt),\n      bl: transformPoint(bl, vpt),\n      br: transformPoint(br, vpt),\n    };\n\n    if (padding) {\n      lineCoords.tl.x -= cosPMinusSinP;\n      lineCoords.tl.y -= cosPSinP;\n      lineCoords.tr.x += cosPSinP;\n      lineCoords.tr.y -= cosPMinusSinP;\n      lineCoords.bl.x -= cosPSinP;\n      lineCoords.bl.y += cosPMinusSinP;\n      lineCoords.br.x += cosPMinusSinP;\n      lineCoords.br.y += cosPSinP;\n    }\n\n    return lineCoords;\n  }\n\n  /**\n   * Retrieves viewportTransform from Object's canvas if possible\n   * @method getViewportTransform\n   * @memberOf FabricObject.prototype\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 = calcRotateMatrix({ angle: this.angle }),\n      { x, y } = this.getRelativeCenterPoint(),\n      tMatrix = translateMatrix(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   * lineCoords are used to quickly find object during pointer events.\n   * See {@link https://github.com/fabricjs/fabric.js/wiki/When-to-call-setCoords} and {@link http://fabricjs.com/fabric-gotchas}\n   * @param {Boolean} [skipCorners] skip calculation of aCoord, lineCoords.\n   * @return {void}\n   */\n  setCoords(): void {\n    this.aCoords = this.calcACoords();\n    // in case we are in a group, for how the inner group target check works,\n    // lineCoords are exactly aCoords. Since the vpt gets absorbed by the normalized pointer.\n    this.lineCoords = this.group ? this.aCoords : this.calcLineCoords();\n  }\n\n  transformMatrixKey(skipGroup = false): string {\n    const sep = '_';\n    let prefix = '';\n    if (!skipGroup && this.group) {\n      prefix = this.group.transformMatrixKey(skipGroup) + sep;\n    }\n    return (\n      prefix +\n      this.top +\n      sep +\n      this.left +\n      sep +\n      this.scaleX +\n      sep +\n      this.scaleY +\n      sep +\n      this.skewX +\n      sep +\n      this.skewY +\n      sep +\n      this.angle +\n      sep +\n      this.originX +\n      sep +\n      this.originY +\n      sep +\n      this.width +\n      sep +\n      this.height +\n      sep +\n      this.strokeWidth +\n      this.flipX +\n      this.flipY\n    );\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 === key) {\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 { ObjectEvents } from '../../EventTypeDefs';\nimport type { Group } from '../Group';\nimport type { Canvas } from '../../canvas/Canvas';\nimport { StaticCanvas } from '../../canvas/StaticCanvas';\nimport { ObjectGeometry } from './ObjectGeometry';\nimport { isActiveSelection } from '../../util/types';\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 __owningGroup?: Group;\n\n  /**\n   * Returns instance's parent **EXCLUDING** `ActiveSelection`\n   * @param {boolean} [strict] exclude canvas as well\n   */\n  getParent<T extends boolean>(strict?: T): TAncestor | undefined {\n    return (\n      (isActiveSelection(this.group) ? this.__owningGroup : this.group) ||\n      (strict ? undefined : this.canvas)\n    );\n  }\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    return (\n      this.__owningGroup === target ||\n      this.group === target ||\n      this.canvas === target ||\n      // walk up\n      (!!this.__owningGroup && this.__owningGroup.isDescendantOf(target)) ||\n      (!!this.group && this.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 ? parent.getParent(strict) : 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 { TColorArg } from '../../color/Color';\nimport { ObjectEvents } from '../../EventTypeDefs';\nimport {\n  animate,\n  animateColor,\n  TAnimation,\n} 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  declare colorProperties: string[];\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 = this.colorProperties.includes(path[path.length - 1]);\n    const { easing, duration, abort, startValue, onChange, onComplete } =\n      options;\n    const animationOptions = {\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      easing,\n      duration,\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","import { Color } from './color/Color';\nimport { config } from './config';\nimport { Point } from './Point';\nimport type { FabricObject } from './shapes/Object/FabricObject';\nimport { 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\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\ntype TShadowSerializedProps = {\n  color: string;\n  blur: number;\n  offsetX: number;\n  offsetY: number;\n  affectStroke: boolean;\n  nonScaling: boolean;\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   * @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      [__, offsetX = 0, offsetY = 0, blur = 0] = (\n        Shadow.reOffsetsAndBlur.exec(shadowStr) || []\n      ).map((value) => parseFloat(value) || 0),\n      color = (\n        shadowStr.replace(Shadow.reOffsetsAndBlur, '') || 'rgb(0,0,0)'\n      ).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: TShadowSerializedProps = {\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    };\n    const defaults = Shadow.ownDefaults;\n    return !this.includeDefaultValues\n      ? pickBy(data, (value, key) => value !== defaults[key])\n      : data;\n  }\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   */\n  // eslint-disable-next-line max-len\n  static reOffsetsAndBlur =\n    /(?:\\s|^)(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?(\\d+(?:\\.\\d*)?(?:px)?)?(?:\\s?|$)(?:$|\\s)/;\n}\n","export const cloneDeep = <T extends object>(object: T): T =>\n  JSON.parse(JSON.stringify(object));\n","export 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 = {\n  originX: 'center',\n  originY: 'center',\n  top: 0,\n  left: 0,\n  width: 0,\n  height: 0,\n  scaleX: 1,\n  scaleY: 1,\n  flipX: false,\n  flipY: false,\n  opacity: 1,\n  angle: 0,\n  skewX: 0,\n  skewY: 0,\n  cornerSize: 12,\n  touchCornerSize: 24,\n  transparentCorners: false,\n  hoverCursor: null,\n  moveCursor: null,\n  padding: 0,\n  borderColor: '#27A2F8',\n  borderDashArray: null,\n  cornerColor: 'rgb(255,255,255)',\n  cornerBackgroundColor: 'rgb(255,255,255)',\n  cornerStrokeColor: '#A9a9a9',\n  cornerStyle: 'circle',\n  cornerDashArray: null,\n  centeredScaling: false,\n  centeredRotation: true,\n  fill: 'rgb(0,0,0)',\n  fillRule: 'nonzero',\n  globalCompositeOperation: 'source-over',\n  backgroundColor: '',\n  selectionBackgroundColor: '',\n  selectionLineWidth: 2,\n  stroke: null,\n  strokeWidth: 2,\n  strokeDashArray: null,\n  strokeDashOffset: 0,\n  strokeLineCap: 'butt',\n  strokeLineJoin: 'miter',\n  strokeMiterLimit: 4,\n  shadow: null,\n  borderOpacityWhenMoving: 0.4,\n  borderScaleFactor: 1.5,\n  minScaleLimit: 0,\n  selectable: true,\n  evented: true,\n  visible: true,\n  hasControls: true,\n  hasBorders: true,\n  perPixelTargetFind: false,\n  includeDefaultValues: 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  excludeFromExport: false,\n  objectCaching: false,\n  noScaleCache: true,\n  strokeUniform: false,\n  dirty: true,\n  paintFirst: 'fill',\n  activeOn: 'down',\n  colorProperties: ['fill', 'stroke', 'backgroundColor'],\n  clipPath: undefined,\n  absolutePositioned: false,\n  FX_DURATION: 500,\n  inverted: false,\n  obj_type: '',\n  zIndex: 0,\n  statefullCache: false,\n  isRemoteEditing: false,\n  RemoteUserWhoEditing: '',\n  NUM_FRACTION_DIGITS: 2,\n  hasRotatingPoint: false,\n  locked: false,\n  isLoading: false,\n  url: '',\n  oneLine: false,\n} as const;\n","import { cache } from '../../cache';\nimport { config } from '../../config';\nimport { ALIASING_LIMIT, iMatrix } from '../../constants';\nimport { ObjectEvents } from '../../EventTypeDefs';\nimport { AnimatableObject } from './AnimatableObject';\nimport { Point } from '../../Point';\nimport { Shadow } from '../../Shadow';\nimport type {\n  TDegree,\n  TFiller,\n  TSize,\n  TCacheCanvasDimensions,\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 { invertTransform, qrDecompose } from '../../util/misc/matrix';\nimport { enlivenObjectEnlivables } from '../../util/misc/objectEnlive';\nimport {\n  resetObjectTransform,\n  saveObjectTransform,\n} from '../../util/misc/objectTransforms';\nimport { sendObjectToPlane } from '../../util/misc/planeChange';\nimport { pick, pickBy } from '../../util/misc/pick';\nimport { toFixed } from '../../util/misc/toFixed';\nimport type { Group } from '../Group';\nimport { StaticCanvas } from '../../canvas/StaticCanvas';\nimport { isFiller, isSerializableFiller, isTextObject } from '../../util/types';\nimport type { Image } 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 { SerializedObjectProps } from './types/SerializedObjectProps';\nimport { ObjectProps } from './types/ObjectProps';\nimport { TProps } from './types';\n\nexport type TCachedFabricObject = FabricObject &\n  Required<\n    Pick<\n      FabricObject,\n      | 'zoomX'\n      | 'zoomY'\n      | '_cacheCanvas'\n      | '_cacheContext'\n      | 'cacheTranslationX'\n      | 'cacheTranslationY'\n    >\n  > & {\n    _cacheContext: CanvasRenderingContext2D;\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 TProps<ObjectProps> = Partial<ObjectProps>,\n  SProps extends SerializedObjectProps = SerializedObjectProps,\n  EventSpec extends ObjectEvents = ObjectEvents\n>\n  extends AnimatableObject<EventSpec>\n  implements ObjectProps {\n  declare minScaleLimit: number;\n  declare _id: string;\n  declare opacity: number;\n  declare obj_type: string;\n  declare lastEditedBy: string;\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\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  //extend object properties\n  declare statefullCache: boolean;\n\n  declare isRemoteEditing: boolean;\n\n  declare RemoteUserWhoEditing: string;\n\n  declare NUM_FRACTION_DIGITS: number;\n\n  declare hasRotatingPoint: boolean;\n\n  declare locked: boolean;\n\n  declare isLoading: boolean;\n\n  static ownDefaults: Record<string, any> = fabricObjectDefaultValues;\n\n  static getDefaults(): Record<string, any> {\n    return { ...FabricObject.ownDefaults };\n  }\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.name;\n    if (name === 'FabricObject') {\n      return 'object';\n    }\n    return name.toLowerCase();\n  }\n\n  set type(value) {\n    console.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  protected 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.name,\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.name}>`;\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    const isChanged = this[key as keyof this] !== value;\n\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    } else if (key === 'dirty' && this.group) {\n      this.group.set('dirty', value);\n    }\n\n    this[key as keyof this] = value;\n\n    if (isChanged) {\n      const groupNeedsUpdate = this.group && this.group.isOnACache();\n      if (\n        (this.constructor as typeof FabricObject).cacheProperties.includes(key)\n      ) {\n        this.dirty = true;\n        groupNeedsUpdate && this.group!.set('dirty', true);\n      } else if (\n        groupNeedsUpdate &&\n        (this.constructor as typeof FabricObject).stateProperties.includes(key)\n      ) {\n        this.group!.set('dirty', true);\n      }\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      typeof this.shadow === 'object'\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.group || !this.group.isOnACache()));\n    return this.ownCaching;\n  }\n\n  /**\n   * Check if this object or a child object will cast a shadow\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[]) {\n    const objectForm = this.toObject(propertiesToInclude);\n    return (this.constructor as typeof FabricObject).fromObject(\n      objectForm\n    ) as unknown as 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 {Object} [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 {Image} Object cloned as image.\n   */\n  cloneAsImage(options: any): Image {\n    const canvasEl = this.toCanvasElement(options);\n    // TODO: how to import Image w/o an import cycle?\n    const ImageClass = classRegistry.getClass('image');\n    return new ImageClass(canvasEl);\n  }\n\n  /**\n   * Converts an object into a HTMLCanvas element\n   * @param {Object} 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   * @return {HTMLCanvasElement} Returns DOM element <canvas> with the FabricObject\n   */\n  toCanvasElement(options: any = {}) {\n    const origParams = saveObjectTransform(this),\n      originalGroup = this.group,\n      originalShadow = this.shadow,\n      abs = Math.abs,\n      retinaScaling = options.enableRetinaScaling\n        ? Math.max(config.devicePixelRatio, 1)\n        : 1,\n      multiplier = (options.multiplier || 1) * retinaScaling;\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    const el = createCanvasElement(),\n      // skip canvas zoom and calculate with setCoords now.\n      boundingRect = this.getBoundingRect(true, true),\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 = new StaticCanvas(el, {\n      enableRetinaScaling: false,\n      renderOnAddRemove: false,\n      skipOffscreen: false,\n    });\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-ignore 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: any = {}) {\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 types.includes(this.constructor.name) || types.includes(this.type);\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 shouldCenterOrigin =\n      (this.originX !== 'center' || this.originY !== 'center') &&\n      this.centeredRotation;\n\n    if (shouldCenterOrigin) {\n      this._setOriginToCenter();\n    }\n\n    this.set('angle', angle);\n\n    if (shouldCenterOrigin) {\n      this._resetOrigin();\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  }\n  /**extend functions */\n  containsPointNew() { }\n\n  frameExtentContainsPoint() { }\n\n  convertACoordToRCoord() { }\n\n  convertRCoordToACoord1() { }\n\n  convertRCoordToACoord() { }\n\n  convertRCoordToACoordPartialAS() { }\n\n  saveData() { }\n\n  getUndoRedoState() { }\n\n  getRemovedArrow() { }\n\n  getMovedObject() { }\n\n  getModifiedObject() { }\n\n  getFrameBind() { }\n\n  getScaledObject() { }\n\n  initialize() { }\n\n  getCloneWidget() { }\n\n  bringObjToFront() { }\n\n  sendObjToBack() { }\n\n  bringObjForward() { }\n\n  sendObjBackwards() { }\n\n  reSetControl() { }\n\n  drawBordersInGroup() { }\n\n  isActiveSelection() { }\n\n  isGroup() { }\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    object: Record<string, unknown>,\n    {\n      extraParam,\n      ...options\n    }: { extraParam?: string; signal?: AbortSignal } = {}\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, type, ...rest } = allOptions;\n          // @ts-ignore;\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 TProps<SerializedObjectProps>>(\n    object: T,\n    options?: { signal?: AbortSignal }\n  ) {\n    return this._fromObject(object, options);\n  }\n}\n\nclassRegistry.setClass(FabricObject);\nclassRegistry.setClass(FabricObject, 'object');\n","import {\n  TModificationEvents,\n  Transform,\n  TransformActionHandler,\n} from '../EventTypeDefs';\nimport { fireEvent } from '../util/fireEvent';\nimport { commonEventInfo } from './util';\n\n/**\n * Wrap an action handler with firing an event if the action is performed\n * @param {Function} actionHandler the function to wrap\n * @return {Function} a function with an action handler signature\n */\nexport const wrapWithFireEvent = <T extends Transform>(\n  eventName: TModificationEvents,\n  actionHandler: TransformActionHandler<T>\n) => {\n  return ((eventData, transform, x, y) => {\n    const actionPerformed = actionHandler(eventData, transform, x, y);\n    if (actionPerformed) {\n      fireEvent(eventName, commonEventInfo(eventData, transform, x, y));\n    }\n    return actionPerformed;\n  }) as TransformActionHandler<T>;\n};\n","import { 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    target.setPositionByOrigin(constraint, originX, originY);\n    return actionPerformed;\n  }) as TransformActionHandler<T>;\n}\n","import { TransformActionHandler } from '../EventTypeDefs';\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  ctx: CanvasRenderingContext2D,\n  left: number,\n  top: number,\n  styleOverride: ControlRenderingStyleOverride,\n  fabricObject: InteractiveFabricObject\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 { halfPI } from '../constants';\nimport {\n  ControlActionHandler,\n  TPointerEvent,\n  TransformActionHandler,\n} from '../EventTypeDefs';\nimport { Point } from '../Point';\nimport type { InteractiveFabricObject } from '../shapes/Object/InteractiveObject';\nimport { TDegree, TMat2D } from '../typedefs';\nimport { cos } from '../util/misc/cos';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { sin } from '../util/misc/sin';\nimport {\n  ControlRenderingStyleOverride,\n  renderCircleControl,\n  renderSquareControl,\n} 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: number | null = null;\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: number | null = null;\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: number | null = null;\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: number | null = null;\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  /**\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    objectAngle: TDegree,\n    objectCornerSize: number,\n    centerX: number,\n    centerY: number,\n    isTouch: boolean\n  ) {\n    let cosHalfOffset, sinHalfOffset, cosHalfOffsetComp, sinHalfOffsetComp;\n    const xSize = isTouch ? this.touchSizeX : this.sizeX,\n      ySize = isTouch ? this.touchSizeY : this.sizeY;\n    if (xSize && ySize && xSize !== ySize) {\n      // handle rectangular corners\n      const controlTriangleAngle = Math.atan2(ySize, xSize);\n      const cornerHypotenuse = Math.sqrt(xSize * xSize + ySize * ySize) / 2;\n      const newTheta = controlTriangleAngle - degreesToRadians(objectAngle);\n      const newThetaComp =\n        halfPI - controlTriangleAngle - degreesToRadians(objectAngle);\n      cosHalfOffset = cornerHypotenuse * cos(newTheta);\n      sinHalfOffset = cornerHypotenuse * sin(newTheta);\n      // use complementary angle for two corners\n      cosHalfOffsetComp = cornerHypotenuse * cos(newThetaComp);\n      sinHalfOffsetComp = cornerHypotenuse * sin(newThetaComp);\n    } else {\n      // handle square corners\n      // use default object corner size unless size is defined\n      const cornerSize = xSize && ySize ? xSize : objectCornerSize;\n      const cornerHypotenuse = cornerSize * Math.SQRT1_2;\n      // complementary angles are equal since they're both 45 degrees\n      const newTheta = degreesToRadians(45 - objectAngle);\n      cosHalfOffset = cosHalfOffsetComp = cornerHypotenuse * cos(newTheta);\n      sinHalfOffset = sinHalfOffsetComp = cornerHypotenuse * sin(newTheta);\n    }\n\n    return {\n      tl: new Point(centerX - sinHalfOffsetComp, centerY - cosHalfOffsetComp),\n      tr: new Point(centerX + cosHalfOffset, centerY - sinHalfOffset),\n      bl: new Point(centerX - cosHalfOffset, centerY + sinHalfOffset),\n      br: new Point(centerX + sinHalfOffsetComp, centerY + cosHalfOffsetComp),\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 {\n  ControlCursorCallback,\n  TPointerEvent,\n  Transform,\n  TransformActionHandler,\n} from '../EventTypeDefs';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { 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  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 are 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 {\n  ControlCursorCallback,\n  TPointerEvent,\n  Transform,\n  TransformActionHandler,\n} from '../EventTypeDefs';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { Point } from '../Point';\nimport { 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';\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 {\n  ControlCallback,\n  ControlCursorCallback,\n  TPointerEvent,\n  TransformActionHandler,\n} from '../EventTypeDefs';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { 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","import { changeWidth } from './changeWidth';\nimport { Control } from './Control';\nimport { scaleCursorStyleHandler, scalingEqually } from './scale';\nimport {\n  scaleOrSkewActionName,\n  scaleSkewCursorStyleHandler, scalingYOrSkewingX\n} from './scaleSkew';\n\n\n// use this function if you want to generate new controls for every instance\nexport const createObjectDefaultControls = () => ({\n\n  tl: new Control({\n    x: -0.5,\n    y: -0.5,\n    cursorStyleHandler: scaleCursorStyleHandler,\n    actionHandler: scalingEqually,\n  }),\n\n  tr: new Control({\n    x: 0.5,\n    y: -0.5,\n    cursorStyleHandler: scaleCursorStyleHandler,\n    actionHandler: scalingEqually,\n  }),\n\n  bl: new Control({\n    x: -0.5,\n    y: 0.5,\n    cursorStyleHandler: scaleCursorStyleHandler,\n    actionHandler: scalingEqually,\n  }),\n\n  br: new Control({\n    x: 0.5,\n    y: 0.5,\n    cursorStyleHandler: scaleCursorStyleHandler,\n    actionHandler: scalingEqually,\n  }),\n\n  // mtr: new Control({\n  //   x: 0,\n  //   y: -0.5,\n  //   actionHandler: rotationWithSnapping,\n  //   cursorStyleHandler: rotationStyleHandler,\n  //   offsetY: -40,\n  //   withConnection: true,\n  //   actionName: 'rotate',\n  // }),\n});\n\nexport const 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\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\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 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  //...createResizeControls(),\n});\nexport const createShapeNotesDefaultControls = () => ({\n  ...createObjectDefaultNoRotateControls(),\n  ...createResizeControls(),\n});\nexport const createPathDefaultControls = () => ({\n  ...createObjectDefaultNoRotateControls(),\n});\nexport const createImageDefaultControls = () => ({\n  ...createObjectImageControls(),\n});\nexport const createFileDefaultControls = () => ({\n  ...createObjectFileControls(),\n});\n","import { Point } from '../../Point';\nimport type { AssertKeys, TCornerPoint, TDegree, TMat2D } from '../../typedefs';\nimport { FabricObject } from './Object';\nimport { degreesToRadians } from '../../util/misc/radiansDegreesConversion';\nimport {\n  calcRotateMatrix,\n  multiplyTransformMatrices,\n  qrDecompose,\n  TQrDecomposeOut,\n} from '../../util/misc/matrix';\nimport type { Control } from '../../controls/Control';\nimport { sizeAfterTransform } from '../../util/misc/objectTransforms';\nimport { ObjectEvents, TPointerEvent } from '../../EventTypeDefs';\nimport type { Canvas } from '../../canvas/Canvas';\nimport type { ControlRenderingStyleOverride } from '../../controls/controlRendering';\nimport { FabricObjectProps } from './types/FabricObjectProps';\nimport { TFabricObjectProps, SerializedObjectProps } from './types';\nimport { createObjectDefaultControls } from '../../controls/commonControls';\n\ntype TOCoord = Point & {\n  corner: TCornerPoint;\n  touchCorner: TCornerPoint;\n};\n\ntype TControlSet = Record<string, Control>;\n\ntype TBorderRenderingStyleOverride = Partial<\n  Pick<InteractiveFabricObject, 'borderColor' | 'borderDashArray'>\n>;\n\ntype TStyleOverride = ControlRenderingStyleOverride &\n  TBorderRenderingStyleOverride &\n  Partial<\n    Pick<InteractiveFabricObject, 'hasBorders' | 'hasControls'> & {\n      forActiveSelection: boolean;\n    }\n  >;\n\nexport interface DragMethods {\n  shouldStartDragging(): boolean;\n  onDragStart(e: DragEvent): boolean;\n}\n\nexport type FabricObjectWithDragSupport = InteractiveFabricObject & DragMethods;\n\nconst interactiveDefaults = {};\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  declare noScaleCache: boolean;\n  declare centeredScaling: false;\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   * Describe object's corner position in canvas element coordinates.\n   * properties are depending on control keys and padding the main controls.\n   * each property is an object with x, y and corner.\n   * The `corner` property contains in a similar manner the 4 points of the\n   * interactive area of the corner.\n   * The coordinates depends from the controls positionHandler and are used\n   * 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: Record<string, any> = interactiveDefaults;\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 target = targetCanvas._currentTransform.target,\n        action = targetCanvas._currentTransform.action;\n      if (this === (target as unknown as this) && action.startsWith('scale')) {\n        return false;\n      }\n    }\n    return super._updateCacheCanvas();\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  _findTargetCorner(pointer: Point, forTouch = false): 0 | string {\n    if (\n      !this.hasControls ||\n      !this.canvas ||\n      (this.canvas._activeObject as unknown as this) !== this\n    ) {\n      return 0;\n    }\n\n    this.__corner = undefined;\n    // had to keep the reverse loop because was breaking tests\n    const cornerEntries = Object.entries(this.oCoords);\n    for (let i = cornerEntries.length - 1; i >= 0; i--) {\n      const [cornerKey, corner] = cornerEntries[i];\n      if (!this.isControlVisible(cornerKey)) {\n        continue;\n      }\n      const lines = this._getImageLines(\n        forTouch ? corner.touchCorner : corner.corner\n      );\n      const xPoints = this._findCrossPoints(pointer, lines);\n      if (xPoints !== 0 && xPoints % 2 === 1) {\n        this.__corner = cornerKey;\n        return cornerKey;\n      }\n      // // debugging\n      //\n      // this.canvas.contextTop.fillRect(lines.bottomline.d.x, lines.bottomline.d.y, 2, 2);\n      // this.canvas.contextTop.fillRect(lines.bottomline.o.x, lines.bottomline.o.y, 2, 2);\n      //\n      // this.canvas.contextTop.fillRect(lines.leftline.d.x, lines.leftline.d.y, 2, 2);\n      // this.canvas.contextTop.fillRect(lines.leftline.o.x, lines.leftline.o.y, 2, 2);\n      //\n      // this.canvas.contextTop.fillRect(lines.topline.d.x, lines.topline.d.y, 2, 2);\n      // this.canvas.contextTop.fillRect(lines.topline.o.x, lines.topline.o.y, 2, 2);\n      //\n      // this.canvas.contextTop.fillRect(lines.rightline.d.x, lines.rightline.d.y, 2, 2);\n      // this.canvas.contextTop.fillRect(lines.rightline.o.x, lines.rightline.o.y, 2, 2);\n    }\n    return 0;\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 = [1, 0, 0, 1, center.x, center.y] as TMat2D,\n      rMatrix = calcRotateMatrix({\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      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      if (position && position.x) {\n        coords[key] = Object.assign(\n          position,\n          this._calcCornerCoords(control, position)\n        );\n      }\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 corner = control.calcCornerCoords(\n      this.angle,\n      this.cornerSize,\n      position.x,\n      position.y,\n      false\n    );\n    const touchCorner = control.calcCornerCoords(\n      this.angle,\n      this.touchCornerSize,\n      position.x,\n      position.y,\n      true\n    );\n    return { corner, touchCorner };\n  }\n\n  /**\n   * Sets corner and controls position coordinates based on current angle, width and height, left and top.\n   * oCoords are used to find the corners\n   * aCoords are used to quickly find an object on the canvas\n   * lineCoords are used to quickly find object during pointer events.\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    // set coordinates of the draggable boxes in the corners used to scale/rotate the image\n    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.interactive) ||\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    if (!this.group) {\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(this.width, this.height, options),\n        stroke = (\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      size = bbox.add(stroke).scalarAdd(this.borderScaleFactor);\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   */\n  onDeselect(options?: { e?: TPointerEvent; object?: FabricObject }): 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 and drop behavior\n   * return true if the object currently dragged can be dropped on the target\n   * @public\n   * @param {DragEvent} e\n   * @returns {boolean}\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   * @returns {boolean}\n   */\n  renderDragSourceEffect(this: AssertKeys<this, 'canvas'>, 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   * @returns {boolean}\n   */\n  renderDropTargetEffect(this: AssertKeys<this, 'canvas'>, e: DragEvent) {\n    // for subclasses\n  }\n  /*BOARDX CUSTOM FUNCTIONS */\n  getWidgetMenuTouchList = () => [\n    'objectDelete',\n    'moreMenuStickyNote'\n  ]\n\n  extContainsPoint(point: { x: number; y: number }) {\n    if (this && this !== undefined && this.obj_type !== 'WBArrow') {\n      const minx = this.aCoords.tl.x;\n      const maxx = this.aCoords.br.x;\n      const miny = this.aCoords.tl.y;\n      const maxy = this.aCoords.br.y;\n\n      if (\n        point.x >= minx &&\n        point.x <= maxx &&\n        point.y >= miny &&\n        point.y <= maxy\n      ) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n\n}\n","import { 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 { ObjectEvents } from '../../EventTypeDefs';\nimport { FabricObjectSVGExportMixin } from './FabricObjectSVGExportMixin';\nimport { InteractiveFabricObject } from './InteractiveObject';\nimport { applyMixins } from '../../util/applyMixins';\nimport { FabricObjectProps } from './types/FabricObjectProps';\nimport { TFabricObjectProps, SerializedObjectProps } from './types';\nimport { classRegistry } from '../../ClassRegistry';\n\n// TODO somehow we have to make a tree-shakeable import\n\n// eslint-disable-next-line @typescript-eslint/no-empty-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}\n\napplyMixins(FabricObject, [FabricObjectSVGExportMixin]);\n\nclassRegistry.setClass(FabricObject);\nclassRegistry.setClass(FabricObject, 'object');\n\nexport { cacheProperties } from './defaultValues';\n","/**\n * Returns true if context has transparent pixel\n * at specified location (taking tolerance into account)\n * @param {CanvasRenderingContext2D} ctx context\n * @param {Number} x x coordinate in canvasElementCoordinate, not fabric space. integer\n * @param {Number} y y coordinate in canvasElementCoordinate, not fabric space. integer\n * @param {Number} tolerance Tolerance pixels around the point, not alpha tolerance, integer\n * @return {boolean} true if transparent\n */\nexport const isTransparent = (\n  ctx: CanvasRenderingContext2D,\n  x: number,\n  y: number,\n  tolerance: number\n): boolean => {\n  tolerance = Math.round(tolerance);\n  const size = tolerance * 2 + 1;\n  const { data } = ctx.getImageData(x - tolerance, y - tolerance, size, size);\n\n  // Split image data - for tolerance > 1, pixelDataSize = 4;\n  for (let i = 3; i < data.length; i += 4) {\n    const alphaChannel = data[i];\n    if (alphaChannel > 0) {\n      return false;\n    }\n  }\n  return true;\n};\n","//@ts-nocheck\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(element, styles) {\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","/**\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","//@ts-nocheck\n\nexport function getSvgRegex(arr) {\n  return new RegExp('^(' + arr.join('|') + ')\\\\b', 'i');\n}\n","//@ts-nocheck\nimport { getSvgRegex } from './getSvgRegex';\n\nexport const cssRules = {};\nexport const gradientDefs = {};\nexport const clipPaths = {};\n\nexport const storage = {\n  cssRules,\n  gradientDefs,\n  clipPaths,\n};\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  colorAttributes = {\n    stroke: 'strokeOpacity',\n    fill: 'fillOpacity',\n  },\n  fSize = 'font-size',\n  cPath = 'clip-path';\n\nexport const svgValidTagNamesRegEx = getSvgRegex(svgValidTagNames);\n\nexport const svgViewBoxElementsRegEx = getSvgRegex(svgViewBoxElements);\n\nexport const svgInvalidAncestorsRegEx = getSvgRegex(svgInvalidAncestors);\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","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  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 + '(?![a-zA-Z\\\\-]+)', '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(\n        '\\\\.' + splitClassNames[i] + '(?![a-zA-Z\\\\-]+)',\n        'i'\n      );\n      selector = selector.replace(matcher, '');\n    }\n  }\n  return selector.length === 0;\n}\n","//@ts-nocheck\nimport { selectorMatches } from './selectorMatches';\n\nexport function doesSomeParentMatch(element, selectors) {\n  let selector,\n    parentMatching = true;\n  while (\n    element.parentNode &&\n    element.parentNode.nodeType === 1 &&\n    selectors.length\n  ) {\n    if (parentMatching) {\n      selector = selectors.pop();\n    }\n    element = element.parentNode;\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","//@ts-nocheck\nimport { cssRules } from './constants';\nimport { elementMatchesRule } from './elementMatchesRule';\n\n/**\n * @private\n */\n\nexport function getGlobalStylesForElement(element, svgUid) {\n  const styles = {};\n  for (const rule in cssRules[svgUid]) {\n    if (elementMatchesRule(element, rule.split(' '))) {\n      for (const property in cssRules[svgUid][rule]) {\n        styles[property] = cssRules[svgUid][rule][property];\n      }\n    }\n  }\n  return styles;\n}\n","//@ts-nocheck\nimport { attributesMap } from './constants';\n\nexport function normalizeAttr(attr) {\n  // transform attribute names\n  if (attr in attributesMap) {\n    return attributesMap[attr];\n  }\n  return attr;\n}\n","import { cos } from '../util/misc/cos';\nimport { sin } from '../util/misc/sin';\nimport { TDegree, TMat2D } from '../typedefs';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\n\n/**\n * A rotation matrix\n * In the form of\n * [cos(a) -sin(a) -xcos(a)+ysin(a)+x]\n * [sin(a)  cos(a) -xsin(a)-ycos(a)+y]\n * [0       0      1                 ]\n */\n\n/**\n * Generate a rotation matrix around the center or around a point x,y\n * @param {TDegree} angle rotation in degrees\n * @param {number} [x] translation on X axis for the pivot point\n * @param {number} [y] translation on Y axis for the pivot point\n * @returns {TMat2D} matrix\n */\nexport function rotateMatrix(angle: TDegree, x = 0, y = 0): 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 - (cosValue * x - sinValue * y),\n    y - (sinValue * x + cosValue * y),\n  ];\n}\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 { multiplyTransformMatrices } from '../util/misc/matrix';\nimport { rotateMatrix } from './rotateMatrix';\nimport { scaleMatrix } from './scaleMatrix';\nimport { translateMatrix } from './translateMatrix';\nimport { TMat2D } from '../typedefs';\nimport { cleanupSvgAttribute } from '../util/internals/cleanupSvAttribute';\nimport { skewXMatrix, skewYMatrix } from './skewMatrix';\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 = translateMatrix(arg0, arg1);\n        break;\n      case 'rotate':\n        matrix = rotateMatrix(arg0, arg1, arg2);\n        break;\n      case 'scale':\n        matrix = scaleMatrix(arg0, arg1);\n        break;\n      case 'skewX':\n        matrix = skewXMatrix(arg0);\n        break;\n      case 'skewY':\n        matrix = skewYMatrix(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 matrices.reduce(\n    (acc, matrix) => multiplyTransformMatrices(acc, matrix),\n    iMatrix\n  );\n}\n","//@ts-nocheck\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport { parseUnit } from '../util/misc/svgParsing';\nimport { parseTransformAttribute } from './parseTransformAttribute';\n\nexport function normalizeValue(attr, value, parentAttributes, fontSize) {\n  const isArray = Array.isArray(value);\n  let parsed;\n\n  if ((attr === 'fill' || attr === 'stroke') && value === 'none') {\n    value = '';\n  } else if (attr === 'strokeUniform') {\n    return value === 'non-scaling-stroke';\n  } else if (attr === 'strokeDashArray') {\n    if (value === 'none') {\n      value = null;\n    } else {\n      value = value.replace(/,/g, ' ').split(/\\s+/).map(parseFloat);\n    }\n  } else if (attr === 'transformMatrix') {\n    if (parentAttributes && parentAttributes.transformMatrix) {\n      value = multiplyTransformMatrices(\n        parentAttributes.transformMatrix,\n        parseTransformAttribute(value)\n      );\n    } else {\n      value = parseTransformAttribute(value);\n    }\n  } else if (attr === 'visible') {\n    value = value !== 'none' && value !== 'hidden';\n    // display=none on parent element always takes precedence over child element\n    if (parentAttributes && parentAttributes.visible === false) {\n      value = false;\n    }\n  } else if (attr === 'opacity') {\n    value = parseFloat(value);\n    if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {\n      value *= parentAttributes.opacity;\n    }\n  } else if (attr === 'textAnchor' /* text-anchor */) {\n    value = 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    value = 'fill';\n    if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {\n      value = 'stroke';\n    } else if (fillIndex === -1 && strokeIndex > -1) {\n      value = '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 ? value.map(parseUnit) : parseUnit(value, fontSize);\n  }\n\n  return !isArray && isNaN(parsed) ? value : parsed;\n}\n","//@ts-nocheck\nimport { 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(value, oStyle) {\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","//@ts-nocheck\n\nexport function parseStyleObject(style, oStyle) {\n  let attr, value;\n  for (const prop in style) {\n    if (typeof style[prop] === 'undefined') {\n      continue;\n    }\n\n    attr = prop.toLowerCase();\n    value = style[prop];\n\n    oStyle[attr] = value;\n  }\n}\n","//@ts-nocheck\n\nexport function parseStyleString(style, oStyle) {\n  let attr, value;\n  style\n    .replace(/;\\s*$/, '')\n    .split(';')\n    .forEach(function (chunk) {\n      const pair = chunk.split(':');\n\n      attr = pair[0].trim().toLowerCase();\n      value = pair[1].trim();\n\n      oStyle[attr] = value;\n    });\n}\n","//@ts-nocheck\nimport { 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) {\n  const oStyle = {},\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","//@ts-nocheck\nimport { Color } from '../color/Color';\nimport { toFixed } from '../util/misc/toFixed';\nimport { colorAttributes } from './constants';\nimport { FabricObject } from '../shapes/Object/FabricObject';\n\n/**\n * @private\n * @param {Object} attributes Array of attributes to parse\n */\n\nexport function setStrokeFillOpacity(attributes) {\n  for (const attr in colorAttributes) {\n    if (\n      typeof attributes[colorAttributes[attr]] === 'undefined' ||\n      attributes[attr] === ''\n    ) {\n      continue;\n    }\n    const defaults = FabricObject.getDefaults();\n    if (typeof attributes[attr] === 'undefined') {\n      if (!defaults[attr]) {\n        continue;\n      }\n      attributes[attr] = defaults[attr];\n    }\n\n    if (attributes[attr].indexOf('url(') === 0) {\n      continue;\n    }\n\n    const color = new Color(attributes[attr]);\n    attributes[attr] = color\n      .setAlpha(\n        toFixed(color.getAlpha() * attributes[colorAttributes[attr]], 2)\n      )\n      .toRgba();\n  }\n  return attributes;\n}\n","//@ts-nocheck\nimport { 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';\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: SVGElement | HTMLElement,\n  attributes: string[],\n  svgUid?: string\n): Record<string, any> {\n  if (!element) {\n    return {};\n  }\n\n  let value,\n    parentAttributes = {},\n    fontSize,\n    parentFontSize;\n\n  if (typeof svgUid === 'undefined') {\n    svgUid = element.getAttribute('svgUid');\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(element.parentNode, attributes, svgUid);\n  }\n\n  let ownAttributes = attributes.reduce(function (memo, attr) {\n    value = element.getAttribute(attr);\n    if (value) {\n      // eslint-disable-line\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  const cssAttrs = Object.assign(\n    getGlobalStylesForElement(element, svgUid),\n    parseStyleAttribute(element)\n  );\n  ownAttributes = Object.assign(ownAttributes, cssAttrs);\n  if (cssAttrs[cPath]) {\n    element.setAttribute(cPath, cssAttrs[cPath]);\n  }\n  fontSize = parentFontSize =\n    parentAttributes.fontSize || DEFAULT_SVG_FONT_SIZE;\n  if (ownAttributes[fSize]) {\n    // looks like the minimum should be 9px when dealing with ems. this is what looks like in browsers.\n    ownAttributes[fSize] = fontSize = parseUnit(\n      ownAttributes[fSize],\n      parentFontSize\n    );\n  }\n\n  const normalizedStyle = {};\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, 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 { TClassProperties } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type {\n  FabricObjectProps,\n  SerializedObjectProps,\n  TProps,\n} from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\n\nexport const rectDefaultValues: Partial<TClassProperties<Rect>> = {\n  rx: 0,\n  ry: 0,\n  originX: 'center',\n  originY: 'center',\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 TProps<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   * 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  declare parentImage: any;\n\n  declare state: any;\n\n  declare actionType: any;\n\n  static cacheProperties = [...cacheProperties, ...RECT_PROPS];\n\n  static ownDefaults: Record<string, any> = 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=\"${-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 {SVGElement} element Element to parse\n   * @param {Function} callback callback function invoked after parsing\n   * @param {Object} [options] Options object\n   */\n  static fromElement(\n    element: SVGElement,\n    callback: (rect: Rect | null) => void,\n    options = {}\n  ) {\n    if (!element) {\n      return callback(null);\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);\n\n    const rect = new this({\n      ...options,\n      ...restOfparsedAttributes,\n      left,\n      top,\n      width,\n      height,\n      visible: Boolean(visible && width && height),\n    });\n    callback(rect);\n  }\n\n  /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Rect);\nclassRegistry.setSVGClass(Rect);\n","// @ts-nocheck\nimport type { CollectionEvents, ObjectEvents } from '../EventTypeDefs';\nimport { createCollectionMixin } from '../Collection';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { Point } from '../Point';\nimport { cos } from '../util/misc/cos';\nimport type { TClassProperties, TSVGReviver } from '../typedefs';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport {\n  invertTransform,\n  multiplyTransformMatrices,\n  transformPoint,\n} from '../util/misc/matrix';\n\nimport {\n  enlivenObjectEnlivables,\n  enlivenObjects,\n} from '../util/misc/objectEnlive';\n\nimport { applyTransformToObject } from '../util/misc/objectTransforms';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { sin } from '../util/misc/sin';\nimport { FabricObject } from './Object/FabricObject';\nimport { Rect } from './Rect';\nimport { classRegistry } from '../ClassRegistry';\nimport {\n  FabricObjectProps,\n  SerializedObjectProps,\n  TProps,\n} from './Object/types';\n\nexport type LayoutContextType =\n  | 'initialization'\n  | 'object_modified'\n  | 'added'\n  | 'removed'\n  | 'layout_change'\n  | 'imperative';\n\nexport type LayoutContext = {\n  type: LayoutContextType;\n  /**\n   * array of objects starting from the object that triggered the call to the current one\n   */\n  path?: Group[];\n  [key: string]: any;\n};\n\nexport type GroupEvents = ObjectEvents &\n  CollectionEvents & {\n    layout: {\n      context: LayoutContext;\n      result: LayoutResult;\n      diff: Point;\n    };\n  };\n\nexport type LayoutStrategy =\n  | 'fit-content'\n  | 'fit-content-lazy'\n  | 'fixed'\n  | 'clip-path';\n\n/**\n * positioning and layout data **relative** to instance's parent\n */\nexport type LayoutResult = {\n  /**\n   * new centerX as measured by the containing plane (same as `left` with `originX` set to `center`)\n   */\n  centerX: number;\n  /**\n   * new centerY as measured by the containing plane (same as `top` with `originY` set to `center`)\n   */\n  centerY: number;\n  /**\n   * correctionX to translate objects by, measured as `centerX`\n   */\n  correctionX?: number;\n  /**\n   * correctionY to translate objects by, measured as `centerY`\n   */\n  correctionY?: number;\n  width: number;\n  height: number;\n};\n\nexport interface GroupOwnProps {\n  layout: LayoutStrategy;\n  subTargetCheck: boolean;\n  interactive: boolean;\n}\n\nexport interface SerializedGroupProps\n  extends SerializedObjectProps,\n  GroupOwnProps {\n  objects: SerializedObjectProps[];\n}\n\nexport interface GroupProps extends FabricObjectProps, GroupOwnProps {\n  obj_type: string;\n  lockUniScaling: boolean;\n}\n\nexport const groupDefaultValues = {\n  layout: 'fit-content',\n  strokeWidth: 0,\n  subTargetCheck: false,\n  interactive: false,\n  obj_type: 'WBGroup',\n  lockScalingFlip: true,\n};\n\n/**\n * @fires object:added\n * @fires object:removed\n * @fires layout once layout completes\n */\nexport class Group extends createCollectionMixin(\n  FabricObject<GroupProps, SerializedGroupProps, GroupEvents>\n) {\n  /**\n   * Specifies the **layout strategy** for instance\n   * Used by `getLayoutStrategyResult` to calculate layout\n   * `fit-content`, `fit-content-lazy`, `fixed`, `clip-path` are supported out of the box\n   * @default\n   */\n  declare layout: LayoutStrategy;\n\n  /**\n   * Used to optimize performance\n   * set to `false` if you don't need contained objects to be targets of events\n   * @default\n   * @type boolean\n   */\n  declare subTargetCheck: boolean;\n\n  /**\n   * Used to allow targeting of object inside groups.\n   * set to true if you want to select an object inside a group.\\\n   * **REQUIRES** `subTargetCheck` set to true\n   * @default\n   * @type boolean\n   */\n  declare interactive: boolean;\n  /* boardx cusotm function */\n  declare subTargetCheck: boolean;\n\n  declare obj_type: string;\n\n  declare locked: boolean;\n\n  declare whiteboardId: string;\n\n  declare userId: string;\n\n  declare userNo: string;\n\n  declare timestamp: Date;\n\n  declare verticalAlign: string;\n\n  declare zIndex: number;\n\n  declare lines: object[];\n\n  declare icon: string;\n\n  declare _id: string;\n\n  declare selectable: boolean;\n\n  declare objectArr: any[];\n\n  declare subObjList: any[];\n\n  declare relationship: any[];\n\n  declare panelObj: boolean;\n\n  declare objectCaching: boolean;\n\n  declare lockUniScaling: boolean;\n\n  public extendPropeties = ['subTargetCheck', 'obj_type', 'whiteboardId', 'userId', 'timestamp', 'zIndex', 'locked', 'verticalAlign', 'lines', 'icon', '_id', 'selectable', 'objectArr', 'subObjList', 'relationship', 'userNo', 'panelObj', 'objectCaching', 'lockUniScaling'];\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 stateProperties: string[] = [\n    ...FabricObject.stateProperties,\n    'layout',\n  ];\n\n  static ownDefaults: Record<string, any> = groupDefaultValues;\n  private __objectSelectionTracker: (ev: ObjectEvents['selected']) => void;\n  private __objectSelectionDisposer: (ev: ObjectEvents['deselected']) => void;\n  private _firstLayoutDone = false;\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   * @param {boolean} [objectsRelativeToGroup] true if objects exist in group coordinate plane\n   */\n  constructor(\n    objects: FabricObject[] = [],\n    options: Partial<GroupProps> = {},\n    objectsRelativeToGroup?: boolean\n  ) {\n    super();\n    this._objects = objects;\n    this.__objectMonitor = this.__objectMonitor.bind(this);\n    this.__objectSelectionTracker = this.__objectSelectionMonitor.bind(\n      this,\n      true\n    );\n    this.__objectSelectionDisposer = this.__objectSelectionMonitor.bind(\n      this,\n      false\n    );\n    // setting angle, skewX, skewY must occur after initial layout\n    this.set({ ...options, angle: 0, skewX: 0, skewY: 0 });\n    this.forEachObject((object) => {\n      this.enterGroup(object, false);\n    });\n    this._applyLayoutStrategy({\n      type: 'initialization',\n      options,\n      objectsRelativeToGroup,\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      /* _DEV_MODE_START_ */\n      console.error(\n        'fabric.Group: circular object trees are not supported, this call has no effect'\n      );\n      /* _DEV_MODE_END_ */\n      return false;\n    } else if (this._objects.indexOf(object) !== -1) {\n      // is already in the objects array\n      /* _DEV_MODE_START_ */\n      console.error(\n        'fabric.Group: duplicate objects are not supported inside group, this call has no effect'\n      );\n      /* _DEV_MODE_END_ */\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('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('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('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  _onRelativeObjectAdded(object: FabricObject) {\n    this.enterGroup(object, false);\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._applyLayoutStrategy({\n      type: type,\n      targets: targets,\n    });\n    this._set('dirty', true);\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];\n    super._set(key, value);\n    if (key === 'canvas' && prev !== value) {\n      this.forEachObject((object) => {\n        object._set(key, value);\n      });\n    }\n    if (key === 'layout' && prev !== value) {\n      this._applyLayoutStrategy({\n        type: 'layout_change',\n        layout: value,\n        prevLayout: prev,\n      });\n    }\n    if (key === 'interactive') {\n      this.forEachObject((object) => this._watchObject(value, object));\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   * invalidates layout on object modified\n   * @private\n   */\n  __objectMonitor(ev: ObjectEvents['modified']) {\n    this._applyLayoutStrategy({ ...ev, type: 'object_modified' });\n    this._set('dirty', true);\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    if (selected) {\n      this._activeObjects.push(object);\n      this._set('dirty', true);\n    } else if (this._activeObjects.length > 0) {\n      const index = this._activeObjects.indexOf(object);\n      if (index > -1) {\n        this._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    const directive = watch ? 'on' : 'off';\n    //  make sure we listen only once\n    watch && this._watchObject(false, object);\n    object[directive]('changed', this.__objectMonitor);\n    object[directive]('modified', this.__objectMonitor);\n    object[directive]('selected', this.__objectSelectionTracker);\n    object[directive]('deselected', this.__objectSelectionDisposer);\n  }\n\n  /**\n   * @private\n   * @param {FabricObject} object\n   * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n   * @returns {boolean} true if object entered group\n   */\n  enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n    if (object.group) {\n      object.group.remove(object);\n    }\n    this._enterGroup(object, removeParentTransform);\n    return true;\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.interactive && 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('canvas', undefined);\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    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 (FabricObject.prototype.willDrawShadow.call(this)) {\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.group && this.group.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  /**\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   * @public\n   * @param {Partial<LayoutResult> & { layout?: string }} [context] pass values to use for layout calculations\n   */\n  triggerLayout<T extends this['layout']>(\n    context?: Partial<LayoutResult> & { layout?: T }\n  ) {\n    if (context && context.layout) {\n      context.prevLayout = this.layout;\n      this.layout = context.layout;\n    }\n    this._applyLayoutStrategy({ type: 'imperative', context });\n  }\n\n  /**\n   * @private\n   * @param {FabricObject} object\n   * @param {Point} diff\n   */\n  _adjustObjectPosition(object: FabricObject, diff: Point) {\n    object.set({\n      left: object.left + diff.x,\n      top: object.top + diff.y,\n    });\n  }\n\n  /**\n   * initial layout logic:\n   * calculate bbox of objects (if necessary) and translate it according to options received from the constructor (left, top, width, height)\n   * so it is placed in the center of the bbox received from the constructor\n   *\n   * @private\n   * @param {LayoutContext} context\n   */\n  _applyLayoutStrategy(context: LayoutContext) {\n    const isFirstLayout = context.type === 'initialization';\n    if (!isFirstLayout && !this._firstLayoutDone) {\n      //  reject layout requests before initialization layout\n      return;\n    }\n    const options = isFirstLayout && context.options;\n    const initialTransform = options && {\n      angle: options.angle || 0,\n      skewX: options.skewX || 0,\n      skewY: options.skewY || 0,\n    };\n    const center = this.getRelativeCenterPoint();\n    let result = this.getLayoutStrategyResult(\n      this.layout,\n      [...this._objects],\n      context\n    );\n    let diff: Point;\n    if (result) {\n      //  handle positioning\n      const newCenter = new Point(result.centerX, result.centerY);\n      const vector = center\n        .subtract(newCenter)\n        .add(new Point(result.correctionX || 0, result.correctionY || 0));\n      diff = vector.transform(invertTransform(this.calcOwnMatrix()), true);\n      //  set dimensions\n      this.set({ width: result.width, height: result.height });\n      //  adjust objects to account for new center\n      !context.objectsRelativeToGroup &&\n        this.forEachObject((object) => {\n          object.group === this && this._adjustObjectPosition(object, diff);\n        });\n      //  clip path as well\n      !isFirstLayout &&\n        this.layout !== 'clip-path' &&\n        this.clipPath &&\n        !this.clipPath.absolutePositioned &&\n        this._adjustObjectPosition(this.clipPath, diff);\n      if (!newCenter.eq(center) || initialTransform) {\n        //  set position\n        this.setPositionByOrigin(newCenter, 'center', 'center');\n        initialTransform && this.set(initialTransform);\n        this.setCoords();\n      }\n    } else if (isFirstLayout) {\n      //  fill `result` with initial values for the layout hook\n      result = {\n        centerX: center.x,\n        centerY: center.y,\n        width: this.width,\n        height: this.height,\n      };\n      initialTransform && this.set(initialTransform);\n      diff = new Point();\n    } else {\n      //  no `result` so we return\n      return;\n    }\n    //  flag for next layouts\n    this._firstLayoutDone = true;\n    //  fire layout hook and event (event will fire only for layouts after initialization layout)\n    this.onLayout(context, result);\n    this.fire('layout', {\n      context,\n      result,\n      diff,\n    });\n    //  recursive up\n    if (this.group && this.group._applyLayoutStrategy) {\n      //  append the path recursion to context\n      if (!context.path) {\n        context.path = [];\n      }\n      context.path.push(this);\n      //  all parents should invalidate their layout\n      this.group._applyLayoutStrategy(context);\n    }\n  }\n\n  /**\n   * Override this method to customize layout.\n   * If you need to run logic once layout completes use `onLayout`\n   * @public\n   * @param {string} layoutDirective\n   * @param {FabricObject[]} objects\n   * @param {LayoutContext} context\n   * @returns {LayoutResult | undefined}\n   */\n  getLayoutStrategyResult<T extends this['layout']>(\n    layoutDirective: T,\n    objects: FabricObject[],\n    context: LayoutContext\n  ) {\n    if (\n      layoutDirective === 'fit-content-lazy' &&\n      context.type === 'added' &&\n      objects.length > context.targets.length\n    ) {\n      //  calculate added objects' bbox with existing bbox\n      const addedObjects = context.targets.concat(this);\n      return this.prepareBoundingBox(layoutDirective, addedObjects, context);\n    } else if (\n      layoutDirective === 'fit-content' ||\n      layoutDirective === 'fit-content-lazy' ||\n      (layoutDirective === 'fixed' &&\n        (context.type === 'initialization' || context.type === 'imperative'))\n    ) {\n      return this.prepareBoundingBox(layoutDirective, objects, context);\n    } else if (layoutDirective === 'clip-path' && this.clipPath) {\n      const clipPath = this.clipPath;\n      const clipPathSizeAfter = clipPath._getTransformedDimensions();\n      if (\n        clipPath.absolutePositioned &&\n        (context.type === 'initialization' || context.type === 'layout_change')\n      ) {\n        //  we want the center point to exist in group's containing plane\n        let clipPathCenter = clipPath.getCenterPoint();\n        if (this.group) {\n          //  send point from canvas plane to group's containing plane\n          const inv = invertTransform(this.group.calcTransformMatrix());\n          clipPathCenter = transformPoint(clipPathCenter, inv);\n        }\n        return {\n          centerX: clipPathCenter.x,\n          centerY: clipPathCenter.y,\n          width: clipPathSizeAfter.x,\n          height: clipPathSizeAfter.y,\n        };\n      } else if (!clipPath.absolutePositioned) {\n        let center;\n        const clipPathRelativeCenter = clipPath.getRelativeCenterPoint(),\n          //  we want the center point to exist in group's containing plane, so we send it upwards\n          clipPathCenter = transformPoint(\n            clipPathRelativeCenter,\n            this.calcOwnMatrix(),\n            true\n          );\n        if (\n          context.type === 'initialization' ||\n          context.type === 'layout_change'\n        ) {\n          const bbox =\n            this.prepareBoundingBox(layoutDirective, objects, context) || {};\n          center = new Point(bbox.centerX || 0, bbox.centerY || 0);\n          return {\n            centerX: center.x + clipPathCenter.x,\n            centerY: center.y + clipPathCenter.y,\n            correctionX: bbox.correctionX - clipPathCenter.x,\n            correctionY: bbox.correctionY - clipPathCenter.y,\n            width: clipPath.width,\n            height: clipPath.height,\n          };\n        } else {\n          center = this.getRelativeCenterPoint();\n          return {\n            centerX: center.x + clipPathCenter.x,\n            centerY: center.y + clipPathCenter.y,\n            width: clipPathSizeAfter.x,\n            height: clipPathSizeAfter.y,\n          };\n        }\n      }\n    }\n  }\n\n  /**\n   * Override this method to customize layout.\n   * A wrapper around {@link Group#getObjectsBoundingBox}\n   * @public\n   * @param {string} layoutDirective\n   * @param {FabricObject[]} objects\n   * @param {LayoutContext} context\n   * @returns {LayoutResult | undefined}\n   */\n  prepareBoundingBox<T extends this['layout']>(\n    layoutDirective: T,\n    objects: FabricObject[],\n    context: LayoutContext\n  ) {\n    if (context.type === 'initialization') {\n      return this.prepareInitialBoundingBox(layoutDirective, objects, context);\n    } else if (context.type === 'imperative' && context.context) {\n      return {\n        ...(this.getObjectsBoundingBox(objects) || {}),\n        ...context.context,\n      };\n    } else {\n      return this.getObjectsBoundingBox(objects);\n    }\n  }\n\n  /**\n   * Calculates center taking into account originX, originY while not being sure that width/height are initialized\n   * @public\n   * @param {string} layoutDirective\n   * @param {FabricObject[]} objects\n   * @param {LayoutContext} context\n   * @returns {LayoutResult | undefined}\n   */\n  prepareInitialBoundingBox<T extends this['layout']>(\n    layoutDirective: T,\n    objects: FabricObject[],\n    context: LayoutContext\n  ) {\n    const options = context.options || {},\n      hasX = typeof options.left === 'number',\n      hasY = typeof options.top === 'number',\n      hasWidth = typeof options.width === 'number',\n      hasHeight = typeof options.height === 'number';\n\n    //  performance enhancement\n    //  skip layout calculation if bbox is defined\n    if (\n      (hasX &&\n        hasY &&\n        hasWidth &&\n        hasHeight &&\n        context.objectsRelativeToGroup) ||\n      objects.length === 0\n    ) {\n      //  return nothing to skip layout\n      return;\n    }\n\n    const bbox = this.getObjectsBoundingBox(objects) || ({} as LayoutResult);\n    const { centerX = 0, centerY = 0, width: w = 0, height: h = 0 } = bbox;\n    const width = hasWidth ? this.width : w,\n      height = hasHeight ? this.height : h,\n      calculatedCenter = new Point(centerX, centerY),\n      origin = new Point(\n        resolveOrigin(this.originX),\n        resolveOrigin(this.originY)\n      ),\n      size = new Point(width, height),\n      strokeWidthVector = this._getTransformedDimensions({\n        width: 0,\n        height: 0,\n      }),\n      sizeAfter = this._getTransformedDimensions({\n        width: width,\n        height: height,\n        strokeWidth: 0,\n      }),\n      bboxSizeAfter = this._getTransformedDimensions({\n        width: bbox.width,\n        height: bbox.height,\n        strokeWidth: 0,\n      }),\n      rotationCorrection = new Point(0, 0);\n\n    //  calculate center and correction\n    const originT = origin.scalarAdd(0.5);\n    const originCorrection = sizeAfter.multiply(originT);\n    const centerCorrection = new Point(\n      hasWidth ? bboxSizeAfter.x / 2 : originCorrection.x,\n      hasHeight ? bboxSizeAfter.y / 2 : originCorrection.y\n    );\n    const center = new Point(\n      hasX\n        ? this.left - (sizeAfter.x + strokeWidthVector.x) * origin.x\n        : calculatedCenter.x - centerCorrection.x,\n      hasY\n        ? this.top - (sizeAfter.y + strokeWidthVector.y) * origin.y\n        : calculatedCenter.y - centerCorrection.y\n    );\n    const offsetCorrection = new Point(\n      hasX\n        ? center.x - calculatedCenter.x + bboxSizeAfter.x * (hasWidth ? 0.5 : 0)\n        : -(hasWidth\n          ? (sizeAfter.x - strokeWidthVector.x) * 0.5\n          : sizeAfter.x * originT.x),\n      hasY\n        ? center.y -\n        calculatedCenter.y +\n        bboxSizeAfter.y * (hasHeight ? 0.5 : 0)\n        : -(hasHeight\n          ? (sizeAfter.y - strokeWidthVector.y) * 0.5\n          : sizeAfter.y * originT.y)\n    ).add(rotationCorrection);\n    const correction = new Point(\n      hasWidth ? -sizeAfter.x / 2 : 0,\n      hasHeight ? -sizeAfter.y / 2 : 0\n    ).add(offsetCorrection);\n\n    return {\n      centerX: center.x,\n      centerY: center.y,\n      correctionX: correction.x,\n      correctionY: correction.y,\n      width: size.x,\n      height: size.y,\n    };\n  }\n\n  /**\n   * Calculate the bbox of objects relative to instance's containing plane\n   * @public\n   * @param {FabricObject[]} objects\n   * @returns {LayoutResult | null} bounding box\n   */\n  getObjectsBoundingBox(\n    objects: FabricObject[],\n    ignoreOffset?: boolean\n  ): LayoutResult | null {\n    if (objects.length === 0) {\n      return null;\n    }\n    const objectBounds: Point[] = [];\n    objects.forEach((object) => {\n      const objCenter = object.getRelativeCenterPoint();\n      let sizeVector = object._getTransformedDimensions().scalarDivide(2);\n      if (object.angle) {\n        const rad = degreesToRadians(object.angle),\n          sine = Math.abs(sin(rad)),\n          cosine = Math.abs(cos(rad)),\n          rx = sizeVector.x * cosine + sizeVector.y * sine,\n          ry = sizeVector.x * sine + sizeVector.y * cosine;\n        sizeVector = new Point(rx, ry);\n      }\n      objectBounds.push(\n        objCenter.subtract(sizeVector),\n        objCenter.add(sizeVector)\n      );\n    });\n    const { left, top, width, height } =\n      makeBoundingBoxFromPoints(objectBounds);\n\n    const size = new Point(width, height),\n      relativeCenter = (!ignoreOffset ? new Point(left, top) : new Point()).add(\n        size.scalarDivide(2)\n      ),\n      //  we send `relativeCenter` up to group's containing plane\n      center = relativeCenter.transform(this.calcOwnMatrix());\n\n    return {\n      centerX: center.x,\n      centerY: center.y,\n      width: size.x,\n      height: size.y,\n    };\n  }\n\n  /**\n   * Hook that is called once layout has completed.\n   * Provided for layout customization, override if necessary.\n   * Complements `getLayoutStrategyResult`, which is called at the beginning of layout.\n   * @public\n   * @param {LayoutContext} context layout context\n   * @param {LayoutResult} result layout result\n   */\n  // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars\n  onLayout(context: LayoutContext, result: LayoutResult) { }\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    return {\n      ...super.toObject([\n        'layout',\n        'subTargetCheck',\n        'interactive',\n        ...propertiesToInclude,\n      ]),\n      objects: this.__serializeObjects('toObject', propertiesToInclude),\n    };\n  }\n\n  toString() {\n    return `#<Group: (${this.complexity()})>`;\n  }\n\n  dispose() {\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() {\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  /**boardx cusotm function */\n  getWidgetMenuList() {\n    if (this.locked) {\n      return ['objectLock'];\n    }\n    return ['objectLock', 'delete', 'aiassist'];\n  }\n\n  getWidgetMenuLength() {\n    return 60;\n  }\n\n  getCloneWidget() {\n    const widget = _.clone(this.getObject());\n    delete widget._id;\n    delete widget.emoji;\n    widget.isPanel = null;\n    if (this.getObject().lines) {\n      widget.lines = this.getObject().lines;\n    } else {\n      widget.lines = null;\n    }\n\n    widget.panelObj = null;\n    widget.relationship = null;\n    widget.selectable = true;\n    widget.userEmoji = null;\n    widget.zIndex = Date.now() * 100;\n    return widget;\n  }\n\n  getObject() {\n    const object = {};\n    const keys = [\n      '_id',\n      'angle',\n      'backgroundColor',\n      'fill',\n      'fontFamily',\n      'fontSize',\n      'height',\n      'width',\n      'left',\n      'lines', // the arrows array [{…}]\n      'lockUniScaling',\n      'locked',\n      'fontWeight',\n      'lineHeight',\n      'obj_type',\n      'originX',\n      'originY',\n      'panelObj', // the parent panel string\n      'relationship', // relationship with panel for transform  [1.43, 0, 0, 1.43, 7.031931057304291, 16.531768328466796]\n      'scaleX',\n      'scaleY',\n      'selectable',\n      'text',\n      'textAlign',\n      'top',\n      'userNo',\n      'userId',\n      'whiteboardId',\n      'zIndex',\n      'version',\n      'isPanel',\n      'editable'\n    ];\n    keys.forEach(key => {\n      object[key] = this[key];\n    });\n\n    const objArr = [];\n    this.getObjects().forEach(obj => {\n      objArr.push(obj.getObject());\n    });\n    object.objectArr = objArr;\n    return object;\n  }\n\n  getContextMenuList() {\n    let menuList;\n    if (this.locked) {\n      menuList = [\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back'\n      ];\n    } else {\n      menuList = [\n        'Ungroup',\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Duplicate',\n        'Copy',\n        'Paste',\n        'Cut',\n        'Delete',\n      ];\n    }\n    if (this.locked) {\n      menuList.push('Unlock');\n    } else {\n      menuList.push('Lock');\n    }\n\n    return menuList;\n  }\n\n  /**boardx cusotm function */\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) {\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 TProps<SerializedGroupProps>>({\n    objects = [],\n    ...options\n  }: T) {\n    return Promise.all([\n      enlivenObjects(objects),\n      enlivenObjectEnlivables(options),\n    ]).then(\n      ([objects, hydratedOptions]) =>\n        new this(objects, { ...options, ...hydratedOptions }, true)\n    );\n  }\n}\n\nclassRegistry.setClass(Group);\n","import type { ControlRenderingStyleOverride } from '../controls/controlRendering';\nimport { classRegistry } from '../ClassRegistry';\nimport { Group } from './Group';\nimport type { FabricObject } from './Object/FabricObject';\n\nexport class ActiveSelection extends Group {\n  declare _objects: FabricObject[];\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  // TODO FIX THIS WITH THE DEFAULTS LOGIC\n  multiSelectionStacking: 'canvas-stacking' | 'selection-order' =\n    'canvas-stacking';\n\n  static type = 'ActiveSelection';\n\n  constructor(\n    objects?: FabricObject[],\n    options?: any,\n    objectsRelativeToGroup?: boolean\n  ) {\n    super(objects, options, objectsRelativeToGroup);\n    this.setCoords();\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   * @private\n   * @param {FabricObject} object\n   * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n   * @returns {boolean} true if object entered group\n   */\n  enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n    if (object.group) {\n      //  save ref to group for later in order to return to it\n      const parent = object.group;\n      parent._exitGroup(object);\n      object.__owningGroup = parent;\n    }\n    this._enterGroup(object, removeParentTransform);\n    return true;\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    const parent = object.__owningGroup;\n    if (parent) {\n      //  return to owning group\n      parent._enterGroup(object, true);\n      delete object.__owningGroup;\n    }\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: Group[] = [];\n    targets.forEach((object) => {\n      object.group &&\n        !groups.includes(object.group) &&\n        groups.push(object.group);\n    });\n    if (type === 'removed') {\n      //  invalidate groups' layout and mark as dirty\n      groups.forEach((group) => {\n        group._onAfterObjectsChange('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   * If returns true, deselection is cancelled.\n   * @since 2.0.0\n   * @return {Boolean} [cancel]\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\nclassRegistry.setClass(ActiveSelection);\nclassRegistry.setClass(ActiveSelection, 'activeSelection');\n","import { getDocument, getEnv } from '../env';\nimport { dragHandler } from '../controls/drag';\nimport { getActionFromCorner } from '../controls/util';\nimport { Point } from '../Point';\nimport { FabricObject } from '../shapes/Object/FabricObject';\nimport {\n  CanvasEvents,\n  ModifierKey,\n  TOptionalModifierKey,\n  TPointerEvent,\n  Transform,\n} from '../EventTypeDefs';\nimport {\n  addTransformToObject,\n  resetObjectTransform,\n  saveObjectTransform,\n} from '../util/misc/objectTransforms';\nimport { StaticCanvas, TCanvasSizeOptions } from './StaticCanvas';\nimport { isCollection } from '../util/types';\nimport { invertTransform, transformPoint } from '../util/misc/matrix';\nimport { isTransparent } from '../util/misc/isTransparent';\nimport { AssertKeys, TMat2D, TOriginX, TOriginY, TSize } from '../typedefs';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { getPointer, isTouchEvent } from '../util/dom_event';\nimport type { IText } from '../shapes/IText/IText';\nimport { makeElementUnselectable, wrapElement } from '../util/dom_misc';\nimport { setStyle } from '../util/dom_style';\nimport type { BaseBrush } from '../brushes/BaseBrush';\nimport { pick } from '../util/misc/pick';\nimport { TSVGReviver } from '../typedefs';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { ActiveSelection } from '../shapes/ActiveSelection';\nimport type { TDestroyedCanvas } from './StaticCanvas';\n\nexport const DefaultCanvasProperties = {\n  uniformScaling: true,\n  uniScaleKey: 'shiftKey',\n  centeredScaling: false,\n  centeredRotation: false,\n  centeredKey: 'altKey',\n  altActionKey: 'shiftKey',\n  selection: true,\n  selectionKey: 'shiftKey',\n  selectionColor: 'rgba(179, 205, 253, 0.5)', // blue\n  selectionDashArray: [],\n  selectionBorderColor: '#31A4F5',\n  selectionLineWidth: 1.5,\n  selectionFullyContained: false,\n  hoverCursor: 'move',\n  moveCursor: 'move',\n  defaultCursor: 'default',\n  freeDrawingCursor: 'crosshair',\n  notAllowedCursor: 'not-allowed',\n  containerClass: 'canvas-container',\n  perPixelTargetFind: false,\n  targetFindTolerance: 0,\n  skipTargetFind: false,\n  preserveObjectStacking: false,\n  stopContextMenu: false,\n  fireRightClick: false,\n  fireMiddleClick: false,\n  enablePointerEvents: false,\n  showBackgroundDots: true,\n};\n\n/**\n * Canvas class\n * @class Canvas\n * @extends StaticCanvas\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#canvas}\n *\n * @fires object:modified at the end of a transform\n * @fires object:rotating while an object is being rotated from the control\n * @fires object:scaling while an object is being scaled by controls\n * @fires object:moving while an object is being dragged\n * @fires object:skewing while an object is being skewed from the controls\n *\n * @fires before:transform before a transform is is started\n * @fires before:selection:cleared\n * @fires selection:cleared\n * @fires selection:updated\n * @fires selection:created\n *\n * @fires path:created after a drawing operation ends and the path is added\n * @fires mouse:down\n * @fires mouse:move\n * @fires mouse:up\n * @fires mouse:down:before  on mouse down, before the inner fabric logic runs\n * @fires mouse:move:before on mouse move, before the inner fabric logic runs\n * @fires mouse:up:before on mouse up, before the inner fabric logic runs\n * @fires mouse:over\n * @fires mouse:out\n * @fires mouse:dblclick whenever a native dbl click event fires on the canvas.\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drag:enter object drag enter\n * @fires drag:leave object drag leave\n * @fires drop:before before drop event. Prepare for the drop event (same native event).\n * @fires drop\n * @fires drop:after after drop event. Run logic on canvas after event has been accepted/declined (same native event).\n * @example\n * let a: fabric.Object, b: fabric.Object;\n * let flag = false;\n * canvas.add(a, b);\n * a.on('drop:before', opt => {\n *  //  we want a to accept the drop even though it's below b in the stack\n *  flag = this.canDrop(opt.e);\n * });\n * b.canDrop = function(e) {\n *  !flag && this.draggableTextDelegate.canDrop(e);\n * }\n * b.on('dragover', opt => b.set('fill', opt.dropTarget === b ? 'pink' : 'black'));\n * a.on('drop', opt => {\n *  opt.e.defaultPrevented  //  drop occurred\n *  opt.didDrop             //  drop occurred on canvas\n *  opt.target              //  drop target\n *  opt.target !== a && a.set('text', 'I lost');\n * });\n * canvas.on('drop:after', opt => {\n *  //  inform user who won\n *  if(!opt.e.defaultPrevented) {\n *    // no winners\n *  }\n *  else if(!opt.didDrop) {\n *    //  my objects didn't win, some other lucky object\n *  }\n *  else {\n *    //  we have a winner it's opt.target!!\n *  }\n * })\n *\n * @fires after:render at the end of the render process, receives the context in the callback\n * @fires before:render at start the render process, receives the context in the callback\n *\n * @fires contextmenu:before\n * @fires contextmenu\n * @example\n * let handler;\n * targets.forEach(target => {\n *   target.on('contextmenu:before', opt => {\n *     //  decide which target should handle the event before canvas hijacks it\n *     if (someCaseHappens && opt.targets.includes(target)) {\n *       handler = target;\n *     }\n *   });\n *   target.on('contextmenu', opt => {\n *     //  do something fantastic\n *   });\n * });\n * canvas.on('contextmenu', opt => {\n *   if (!handler) {\n *     //  no one takes responsibility, it's always left to me\n *     //  let's show them how it's done!\n *   }\n * });\n *\n */\nexport class SelectableCanvas<\n  EventSpec extends CanvasEvents = CanvasEvents\n> extends StaticCanvas<EventSpec> {\n  declare _objects: FabricObject[];\n  /**\n   * When true, objects can be transformed by one side (unproportionally)\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  declare 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  declare 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  declare 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  declare 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  declare 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  declare altActionKey: TOptionalModifierKey;\n\n  /**\n   * Indicates that canvas is interactive. This property should not be changed.\n   * @type Boolean\n   * @default\n   */\n  interactive = true;\n\n  /**\n   * Indicates whether group selection should be enabled\n   * @type Boolean\n   * @default\n   */\n  declare 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  declare 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  declare altSelectionKey: TOptionalModifierKey;\n\n  /**\n   * Color of selection\n   * @type String\n   * @default\n   */\n  declare selectionColor: string;\n\n  /**\n   * Default dash array pattern\n   * If not empty the selection border is dashed\n   * @type Array\n   */\n  declare 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  declare selectionBorderColor: string;\n\n  /**\n   * Width of a line used in object/group selection\n   * @type Number\n   * @default\n   */\n  declare selectionLineWidth: number;\n\n  /**\n   * Select only shapes that are fully contained in the dragged selection rectangle.\n   * @type Boolean\n   * @default\n   */\n  declare selectionFullyContained: boolean;\n\n  /**\n   * Default cursor value used when hovering over an object on canvas\n   * @type CSSStyleDeclaration['cursor']\n   * @default move\n   */\n  declare 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  declare moveCursor: CSSStyleDeclaration['cursor'];\n\n  /**\n   * Default cursor value used for the entire canvas\n   * @type String\n   * @default default\n   */\n  declare defaultCursor: CSSStyleDeclaration['cursor'];\n\n  /**\n   * Cursor value used during free drawing\n   * @type String\n   * @default crosshair\n   */\n  declare 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  declare notAllowedCursor: CSSStyleDeclaration['cursor'];\n\n  /**\n   * Default element class that's given to wrapper (div) element of canvas\n   * @type String\n   * @default\n   */\n  declare containerClass: string;\n\n  /**\n   * When true, object detection happens on per-pixel basis rather than on per-bounding-box\n   * @type Boolean\n   * @default\n   */\n  declare 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  declare 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  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  /**\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  declare preserveObjectStacking: boolean;\n\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  declare 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  declare 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  declare fireMiddleClick: boolean;\n\n  /**\n   * Keep track of the subTargets for Mouse Events\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 referenfce 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   * @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: Record<string, any> = DefaultCanvasProperties;\n\n  static getDefaults(): Record<string, any> {\n    return { ...super.getDefaults(), ...SelectableCanvas.ownDefaults };\n  }\n\n  declare upperCanvasEl: HTMLCanvasElement;\n  declare contextTop: CanvasRenderingContext2D;\n  declare wrapperEl: HTMLDivElement;\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  protected readonly _activeSelection: ActiveSelection;\n\n  constructor(el: string | HTMLCanvasElement, options = {}) {\n    super(el, options);\n    this._activeSelection = new ActiveSelection([], { canvas: this });\n  }\n\n  protected initElements(el: string | HTMLCanvasElement) {\n    super.initElements(el);\n    this._applyCanvasStyle(this.lowerCanvasEl);\n    this._initWrapperElement();\n    this._createUpperCanvas();\n    this._createCacheCanvas();\n  }\n\n  protected _initRetinaScaling() {\n    super._initRetinaScaling();\n    this.__initRetinaScaling(this.upperCanvasEl, this.contextTop);\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  /**\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\n    !this._objectsToRender &&\n      (this._objectsToRender = this._chooseObjectsToRender());\n    this.renderCanvas(this.contextContainer, this._objectsToRender);\n    if (this.hasLostContext) {\n      this.renderTopLayer(this.contextTop);\n      this.hasLostContext = false;\n    }\n  }\n\n  /**\n   * text selection is rendered by the active text instance during the rendering cycle\n   */\n  renderTopLayer(ctx: CanvasRenderingContext2D): void {\n    console.log('renderTopLayer')\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    console.log('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   * Given a pointer on the canvas with a viewport applied,\n   * find out the pointer in object coordinates\n   * @private\n   */\n  _normalizePointer(object: FabricObject, pointer: Point): Point {\n    return transformPoint(\n      this.restorePointerVpt(pointer),\n      invertTransform(object.calcTransformMatrix())\n    );\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\n   * @param {Number} y Top coordinate\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    // 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 {FaricObject} target\n   */\n  _setupCurrentTransform(\n    e: TPointerEvent,\n    target: FabricObject,\n    alreadySelected: boolean\n  ): void {\n    if (!target) {\n      return;\n    }\n    const pointer = target.group\n      ? // transform pointer to target's containing coordinate plane\n      sendPointToPlane(\n        this.getPointer(e),\n        undefined,\n        target.group.calcTransformMatrix()\n      )\n      : this.getPointer(e);\n    const corner = target.__corner || '',\n      control = !!corner && target.controls[corner],\n      actionHandler =\n        alreadySelected && control\n          ? control.getActionHandler(e, target, control)\n          : dragHandler,\n      action = getActionFromCorner(alreadySelected, corner, e, target),\n      origin = this._getOriginFromCorner(target, corner),\n      altKey = e[this.centeredKey as ModifierKey],\n      /**\n       * relative to target's containing coordinate plane\n       * both agree on every point\n       **/\n      transform: Transform = {\n        target: target,\n        action: 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: altKey,\n        original: {\n          ...saveObjectTransform(target),\n          originX: origin.x,\n          originY: origin.y,\n        },\n      };\n\n    if (this._shouldCenterTransform(target, action, altKey)) {\n      transform.originX = 'center';\n      transform.originY = 'center';\n    }\n    this._currentTransform = transform;\n    // @ts-ignore\n    this._beforeTransform(e);\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    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.getPointer(e, true),\n      activeObject = this._activeObject,\n      aObjects = this.getActiveObjects();\n\n    this.targets = [];\n\n    if (activeObject && aObjects.length >= 1) {\n      if (activeObject._findTargetCorner(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    return this.searchPossibleTargets(this._objects, pointer);\n  }\n\n  /**\n   * Checks point is inside the object.\n   * @param {Object} [pointer] x,y object of point coordinates we want to check.\n   * @param {FabricObject} obj Object to test against\n   * @param {Object} [globalPointer] x,y object of point coordinates relative to canvas used to search per pixel target.\n   * @return {Boolean} true if point is contained within an area of given object\n   * @private\n   */\n  _checkTarget(\n    pointer: Point,\n    obj: FabricObject,\n    globalPointer: Point\n  ): boolean {\n    if (\n      obj &&\n      obj.visible &&\n      obj.evented &&\n      // http://www.geog.ubc.ca/courses/klink/gis.notes/ncgia/u32.html\n      // http://idav.ucdavis.edu/~okreylos/TAship/Spring2000/PointInPolygon.html\n      obj.containsPoint(pointer)\n    ) {\n      if (\n        (this.perPixelTargetFind || obj.perPixelTargetFind) &&\n        !(obj as unknown as IText).isEditing\n      ) {\n        if (!this.isTargetTransparent(obj, globalPointer.x, globalPointer.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 target,\n      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 objToCheck = objects[i];\n      const pointerToUse = objToCheck.group\n        ? this._normalizePointer(objToCheck.group, pointer)\n        : pointer;\n      if (this._checkTarget(pointerToUse, objToCheck, pointer)) {\n        target = objects[i];\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        break;\n      }\n    }\n    return target;\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 fabric.Canvas#_searchPossibleTargets}\n   * @param {FabricObject[]} [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 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    // if we found something in this.targets, and the group is interactive, return that subTarget\n    // TODO: reverify why interactive. the target should be returned always, but selected only\n    // if interactive.\n    return target &&\n      isCollection(target) &&\n      target.interactive &&\n      this.targets[0]\n      ? this.targets[0]\n      : target;\n  }\n\n  /**\n   * Returns pointer coordinates without the effect of the viewport\n   * @param {Object} pointer with \"x\" and \"y\" number values in canvas HTML coordinates\n   * @return {Object} object with \"x\" and \"y\" number values in fabricCanvas coordinates\n   */\n  restorePointerVpt(pointer: Point): Point {\n    return pointer.transform(invertTransform(this.viewportTransform));\n  }\n\n  /**\n   * Returns pointer coordinates relative to canvas.\n   * Can return coordinates with or without viewportTransform.\n   * ignoreVpt false gives back coordinates that represent\n   * the point clicked on canvas element.\n   * ignoreVpt true gives back coordinates after being processed\n   * by the viewportTransform ( sort of coordinates of what is displayed\n   * on the canvas where you are clicking.\n   * ignoreVpt true = HTMLElement coordinates relative to top,left\n   * ignoreVpt false, default = fabric space coordinates, the same used for shape position\n   * To interact with your shapes top and left you want to use ignoreVpt true\n   * most of the time, while ignoreVpt false will give you coordinates\n   * compatible with the object.oCoords system.\n   * of the time.\n   * @param {Event} e\n   * @param {Boolean} ignoreVpt\n   * @return {Point}\n   */\n  getPointer(e: TPointerEvent, ignoreVpt = false): Point {\n    // return cached values if we are in the event processing chain\n    if (this._absolutePointer && !ignoreVpt) {\n      return this._absolutePointer;\n    }\n    if (this._pointer && ignoreVpt) {\n      return this._pointer;\n    }\n\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 (!ignoreVpt) {\n      pointer = this.restorePointerVpt(pointer);\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-ignore\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  /**\n   * Helper for setting width/height\n   * @private\n   * @param {String} prop property (width|height)\n   * @param {Number} value value to set property to\n   */\n  _setBackstoreDimension(prop: keyof TSize, value: number) {\n    super._setBackstoreDimension(prop, value);\n    this.upperCanvasEl[prop] = value;\n  }\n\n  /**\n   * Helper for setting css width/height\n   * @private\n   * @param {String} prop property (width|height)\n   * @param {String} value value to set property to\n   */\n  _setCssDimension(prop: keyof TSize, value: string) {\n    super._setCssDimension(prop, value);\n    this.upperCanvasEl.style[prop] = value;\n    this.wrapperEl.style[prop] = value;\n  }\n\n  /**\n   * @private\n   * @throws {CANVAS_INIT_ERROR} If canvas can not be initialized\n   */\n  protected _createUpperCanvas() {\n    const lowerCanvasEl = this.lowerCanvasEl;\n\n    // if there is no upperCanvas (most common case) we create one.\n    if (!this.upperCanvasEl) {\n      this.upperCanvasEl = this._createCanvasElement();\n    }\n    const upperCanvasEl = this.upperCanvasEl;\n    // we assign the same classname of the lowerCanvas\n    upperCanvasEl.className = lowerCanvasEl.className;\n    // but then we remove the lower-canvas specific className\n    upperCanvasEl.classList.remove('lower-canvas');\n    // we add the specific upper-canvas class\n    upperCanvasEl.classList.add('upper-canvas');\n    upperCanvasEl.setAttribute('data-fabric', 'top');\n    this.wrapperEl.appendChild(upperCanvasEl);\n    upperCanvasEl.style.cssText = lowerCanvasEl.style.cssText;\n    this._applyCanvasStyle(upperCanvasEl);\n    upperCanvasEl.setAttribute('draggable', 'true');\n    this.contextTop = upperCanvasEl.getContext('2d')!;\n  }\n\n  protected _createCacheCanvas() {\n    this.pixelFindCanvasEl = this._createCanvasElement();\n    this.pixelFindContext = this.pixelFindCanvasEl.getContext('2d', {\n      willReadFrequently: true,\n    })!;\n    this.setTargetFindTolerance(this.targetFindTolerance);\n  }\n\n  protected _initWrapperElement() {\n    const container = getDocument().createElement('div');\n    container.classList.add(this.containerClass);\n    this.wrapperEl = wrapElement(this.lowerCanvasEl, container);\n    this.wrapperEl.setAttribute('data-fabric', 'wrapper');\n    setStyle(this.wrapperEl, {\n      width: `${this.width}px`,\n      height: `${this.height}px`,\n      position: 'relative',\n    });\n    makeElementUnselectable(this.wrapperEl);\n  }\n\n  /**\n   * @private\n   * @param {HTMLCanvasElement} element canvas element to apply styles on\n   */\n  protected _applyCanvasStyle(element: HTMLCanvasElement) {\n    const width = this.width || element.width,\n      height = this.height || element.height;\n\n    setStyle(element, {\n      position: 'absolute',\n      width: width + 'px',\n      height: height + 'px',\n      left: 0,\n      top: 0,\n      'touch-action': this.allowTouchScrolling ? 'manipulation' : 'none',\n      '-ms-touch-action': this.allowTouchScrolling ? 'manipulation' : 'none',\n    });\n    element.width = width;\n    element.height = height;\n    makeElementUnselectable(element);\n  }\n\n  /**\n   * Returns context of top canvas where interactions are drawn\n   * @returns {CanvasRenderingContext2D}\n   */\n  getTopContext(): CanvasRenderingContext2D {\n    return this.contextTop;\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.contextTop;\n  }\n\n  /**\n   * Returns &lt;canvas> element on which object selection is drawn\n   * @return {HTMLCanvasElement}\n   */\n  getSelectionElement(): HTMLCanvasElement {\n    return this.upperCanvasEl;\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 instance's active selection\n   */\n  getActiveSelection() {\n    return this._activeSelection;\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    if (active) {\n      if (active === this._activeSelection) {\n        return [...(active as ActiveSelection)._objects];\n      } else {\n        return [active];\n      }\n    }\n    return [];\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(\n    object: FabricObject,\n    e?: TPointerEvent\n  ): this is AssertKeys<this, '_activeObject'> {\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(\n    object: FabricObject,\n    e?: TPointerEvent\n  ): this is AssertKeys<this, '_activeObject'> {\n    if (this._activeObject === object) {\n      return false;\n    }\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    this._activeObject = object;\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      // clear active selection\n      if (obj === this._activeSelection) {\n        this._activeSelection.removeAll();\n        resetObjectTransform(this._activeSelection);\n      }\n      if (this._currentTransform && this._currentTransform.target === obj) {\n        // @ts-ignore\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   * 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   * Clears the canvas element, disposes objects, removes all event listeners and frees resources\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    const wrapperEl = this.wrapperEl as HTMLDivElement,\n      lowerCanvasEl = this.lowerCanvasEl!,\n      upperCanvasEl = this.upperCanvasEl!,\n      activeSelection = this._activeSelection!;\n    // dispose of active selection\n    activeSelection.removeAll();\n    (this as TDestroyedCanvas<this>)._activeSelection = undefined;\n    activeSelection.dispose();\n    super.destroy();\n    wrapperEl.removeChild(upperCanvasEl);\n    wrapperEl.removeChild(lowerCanvasEl);\n    (this as TDestroyedCanvas<this>).pixelFindContext = null;\n    (this as TDestroyedCanvas<this>).contextTop = null;\n    // TODO: interactive canvas should NOT be used in node, therefore there is no reason to cleanup node canvas\n    getEnv().dispose(upperCanvasEl);\n    (this as TDestroyedCanvas<this>).upperCanvasEl = undefined;\n    getEnv().dispose(this.pixelFindCanvasEl!);\n    (this as TDestroyedCanvas<this>).pixelFindCanvasEl = undefined;\n    if (wrapperEl.parentNode) {\n      wrapperEl.parentNode.replaceChild(lowerCanvasEl, wrapperEl);\n    }\n    (this as TDestroyedCanvas<this>).wrapperEl = undefined;\n  }\n\n  /**\n   * Clears all contexts (background, main, top) of an instance\n   */\n  clear() {\n    console.log('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  _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  _realizeGroupTransformOnObject(\n    instance: FabricObject\n  ): Partial<typeof instance> {\n    if (\n      instance.group &&\n      instance.group === this._activeSelection &&\n      this._activeObject === instance.group\n    ) {\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, this._activeObject.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 { TPointerEvent } from '../EventTypeDefs';\nimport type { ITextBehavior } from '../shapes/IText/ITextBehavior';\nimport { removeFromArray } from '../util/internals';\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\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  dispose() {\n    this.targets = [];\n    this.target = undefined;\n  }\n}\n","import { LEFT_CLICK, MIDDLE_CLICK, RIGHT_CLICK } from '../constants';\nimport { getDocument, getWindow } from '../env';\nimport {\n  CanvasEvents,\n  DragEventData,\n  ObjectEvents,\n  TPointerEvent,\n  TPointerEventInfo,\n  TPointerEventNames,\n  Transform,\n} from '../EventTypeDefs';\nimport { Point } from '../Point';\nimport { Group } from '../shapes/Group';\nimport type { IText } from '../shapes/IText/IText';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { AssertKeys, TMat2D } from '../typedefs';\nimport { isTouchEvent, stopEvent } from '../util/dom_event';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport {\n  isFabricObjectWithDragSupport,\n  isInteractiveTextObject,\n} from '../util/types';\nimport { SelectableCanvas } from './SelectableCanvas';\nimport { TextEditingManager } from './TextEditingManager';\n\nconst addEventOptions = { passive: false } as EventListenerOptions;\n\nfunction checkClick(e: TPointerEvent, value: number) {\n  return !!(e as MouseEvent).button && (e as MouseEvent).button === value - 1;\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 {\n  /**\n   * Contains the id of the touch event that owns the fabric transform\n   * @type Number\n   * @private\n   */\n  declare mainTouchId: null | number;\n\n  /**\n   * When the option is enabled, PointerEvent is used instead of TPointerEvent.\n   * @type Boolean\n   * @default\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  declare currentTarget?: FabricObject;\n\n  declare isActiveSelectionAction: boolean;\n\n  declare currentSubTargets?: FabricObject[];\n\n  private _isClick: boolean;\n\n  textEditingManager = new TextEditingManager();\n\n  constructor(el: string | HTMLCanvasElement, options = {}) {\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(getWindow(), '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    removeListener(\n      getDocument(),\n      `${eventTypePrefix}up`,\n      this._onMouseUp as EventListener\n    );\n    removeListener(\n      getDocument(),\n      'touchend',\n      this._onTouchEnd as EventListener,\n      addEventOptions\n    );\n    removeListener(\n      getDocument(),\n      `${eventTypePrefix}move`,\n      this._onMouseMove as EventListener,\n      addEventOptions\n    );\n    removeListener(\n      getDocument(),\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      isClick: false,\n      pointer: this.getPointer(e),\n      absolutePointer: this.getPointer(e, true),\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        isClick: false,\n        pointer: this.getPointer(e),\n        absolutePointer: this.getPointer(e, true),\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 (\n      isFabricObjectWithDragSupport(activeObject) &&\n      activeObject.onDragStart(e)\n    ) {\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 as AssertKeys<FabricObject, 'canvas'>).renderDragSourceEffect(e);\n      ctx.restore();\n      dirty = true;\n    }\n    if (target) {\n      ctx.save();\n      target.transform(ctx);\n      (target as AssertKeys<FabricObject, 'canvas'>).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.getPointer(e, true)\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      pointer: this.getPointer(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 === null) {\n      this.mainTouchId = this.getPointerId(e);\n    }\n    this.__onMouseDown(e);\n    this._resetTransformEventData();\n    const canvasElement = this.upperCanvasEl,\n      eventTypePrefix = this._getEventPrefix();\n    addListener(\n      getDocument(),\n      'touchend',\n      this._onTouchEnd as EventListener,\n      addEventOptions\n    );\n    addListener(\n      getDocument(),\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    addListener(\n      getDocument(),\n      `${eventTypePrefix}up`,\n      this._onMouseUp as EventListener\n    );\n    addListener(\n      getDocument(),\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    this.mainTouchId = null;\n    const eventTypePrefix = this._getEventPrefix();\n    removeListener(\n      getDocument(),\n      'touchend',\n      this._onTouchEnd as EventListener,\n      addEventOptions\n    );\n    removeListener(\n      getDocument(),\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      removeListener(\n        getDocument(),\n        `${eventTypePrefix}up`,\n        this._onMouseUp as EventListener\n      );\n      removeListener(\n        getDocument(),\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        (isFabricObjectWithDragSupport(activeObject) &&\n          !activeObject.shouldStartDragging())) &&\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\n    // if just one of them is available or if they are both but are different objects\n    if (\n      !!activeObject !== !!target ||\n      (activeObject && target && activeObject !== target)\n    ) {\n      // this covers: switch of target, from target to no target, selection of target\n      // multiSelection with key and mouse\n      return true;\n    } else if (isInteractiveTextObject(activeObject)) {\n      // if we mouse up/down over a editing textbox a cursor change,\n      // there is no need to re render\n      return false;\n    }\n    return false;\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    const transform = this._currentTransform;\n    this._cacheTransformEventData(e);\n    const target = this._target;\n    const isClick = this._isClick;\n    this._handleEvent(e, 'up:before');\n    // if right/middle click just fire events and return\n    // target undefined will make the _handleEvent search the target\n    if (checkClick(e, RIGHT_CLICK)) {\n      if (this.fireRightClick) {\n        this._handleEvent(e, 'up', RIGHT_CLICK, isClick);\n      }\n      return;\n    }\n\n    if (checkClick(e, MIDDLE_CLICK)) {\n      if (this.fireMiddleClick) {\n        this._handleEvent(e, 'up', MIDDLE_CLICK, isClick);\n      }\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      corner = target._findTargetCorner(\n        this.getPointer(e, true),\n        isTouchEvent(e)\n      );\n      if (\n        target.selectable &&\n        target !== this._activeObject &&\n        target.activeOn === 'up'\n      ) {\n        this.setActiveObject(target, e);\n        shouldRender = true;\n      } else {\n        const control = target.controls[corner as string];\n        const mouseUpHandler =\n          control && control.getMouseUpHandler(e, target, control);\n        if (mouseUpHandler) {\n          pointer = this.getPointer(e);\n          mouseUpHandler(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.getPointer(e);\n      originalMouseUpHandler &&\n        originalMouseUpHandler(e, transform, pointer.x, pointer.y);\n    }\n    this._setCursorFromEvent(e, target);\n    this._handleEvent(e, 'up', LEFT_CLICK, isClick);\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 (\n      !isClick &&\n      !(\n        isInteractiveTextObject(this._activeObject) &&\n        this._activeObject.isEditing\n      )\n    ) {\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].fire(eventType, options);\n    }\n    return options;\n  }\n\n  /**\n   * @private\n   * Handle event firing for target and subtargets\n   * @param {Event} e event from mouse\n   * @param {String} eventType event to fire (up, down or move)\n   * @param {fabric.Object} targetObj receiving event\n   * @param {Number} [button] button used in the event 1 = left, 2 = middle, 3 = right\n   * @param {Boolean} isClick for left button only, indicates that the mouse up happened without move.\n   */\n  _handleEvent(\n    e: TPointerEvent,\n    eventType: TPointerEventNames,\n    button = LEFT_CLICK,\n    isClick = false\n  ) {\n    const target = this._target,\n      targets = this.targets || [],\n      options: TPointerEventInfo = {\n        e: e,\n        target: target,\n        subTargets: targets,\n        button,\n        isClick,\n        pointer: this.getPointer(e),\n        absolutePointer: this.getPointer(e, true),\n        transform: this._currentTransform,\n      };\n    if (eventType === 'up') {\n      options.currentTarget = this.findTarget(e);\n      options.currentSubTargets = this.targets;\n    }\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].fire(`mouse${eventType}`, options);\n    }\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   * @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    const pointer = this.getPointer(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.getPointer(e);\n      this.freeDrawingBrush &&\n        this.freeDrawingBrush.onMouseMove(pointer, {\n          e,\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.getPointer(e);\n    if (this.freeDrawingBrush) {\n      this._isCurrentlyDrawing = !!this.freeDrawingBrush.onMouseUp({\n        e: e,\n        pointer: 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    let target: FabricObject | undefined = this._target;\n    // if right click just fire events\n    if (checkClick(e, RIGHT_CLICK)) {\n      if (this.fireRightClick) {\n        this._handleEvent(e, 'down', RIGHT_CLICK);\n      }\n      return;\n    }\n\n    if (checkClick(e, MIDDLE_CLICK)) {\n      if (this.fireMiddleClick) {\n        this._handleEvent(e, 'down', MIDDLE_CLICK);\n      }\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.getPointer(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 corner = target._findTargetCorner(\n        this.getPointer(e, true),\n        isTouchEvent(e)\n      );\n      if (target === this._activeObject && (corner || !grouped)) {\n        this._setupCurrentTransform(e, target, alreadySelected);\n        const control = target.controls[corner],\n          pointer = this.getPointer(e),\n          mouseDownHandler =\n            control && control.getMouseDownHandler(e, target, control);\n        if (mouseDownHandler) {\n          mouseDownHandler(e, this._currentTransform!, pointer.x, 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.getPointer(e, true);\n    this._absolutePointer = this.restorePointerVpt(this._pointer);\n    this._target = this._currentTransform\n      ? this._currentTransform.target\n      : this.findTarget(e);\n  }\n\n  /**\n   * @private\n   */\n  _beforeTransform(e: TPointerEvent) {\n    const t = this._currentTransform!;\n    this.fire('before:transform', {\n      e,\n      transform: t,\n    });\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._handleEvent(e, 'move:before');\n    this._cacheTransformEventData(e);\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.getPointer(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 = {\n        ...data,\n        e,\n        target: oldTarget,\n        nextTarget: target,\n        isClick: false,\n        pointer: this.getPointer(e),\n        absolutePointer: this.getPointer(e, true),\n      };\n      fireCanvas && this.fire(canvasIn, outOpt);\n      oldTarget.fire(targetOut, outOpt);\n    }\n    if (target && targetChanged) {\n      const inOpt: TPointerEventInfo = {\n        ...data,\n        e,\n        target,\n        previousTarget: oldTarget,\n        isClick: false,\n        pointer: this.getPointer(e),\n        absolutePointer: this.getPointer(e, true),\n      };\n      fireCanvas && this.fire(canvasOut, 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 pointer = this.getPointer(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            pointer,\n            undefined,\n            target.group.calcTransformMatrix()\n          )\n        : pointer;\n    // seems used only here.\n    // @TODO: investigate;\n    transform.reset = false;\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 =\n        this._activeObject === this._activeSelection\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._findTargetCorner(this.getPointer(e, true));\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 = target.controls[corner];\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(\n    e: TPointerEvent,\n    target?: FabricObject\n  ): this is AssertKeys<this, '_activeObject'> {\n    this.isActiveSelectionAction = true;\n    const activeObject = this._activeObject;\n    const activeSelection = this._activeSelection;\n    const isAS = activeObject === activeSelection;\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.__corner\n    ) {\n      if (isAS) {\n        const prevActiveObjects =\n          activeSelection.getObjects() as FabricObject[];\n        if (target === activeSelection) {\n          // find target from active objects to remove or from under active selection to add\n          target = this.searchPossibleTargets(\n            [\n              ...this._objects.filter(\n                (object) => !prevActiveObjects.includes(object)\n              ),\n              ...prevActiveObjects,\n            ],\n            this.getPointer(e, true)\n          );\n          // if nothing is found bail out\n          if (!target || !target.selectable) {\n            return false;\n          }\n        }\n        if (target.group === activeSelection) {\n          // `target` is part of active selection => remove it\n          activeSelection.remove(target);\n          this._hoveredTarget = target;\n          this._hoveredTargets = [...this.targets];\n          if (activeSelection.size() === 1) {\n            // activate last remaining object\n            this._setActiveObject(activeSelection.item(0) as FabricObject, e);\n          }\n        } else {\n          //  `target` isn't part of active selection => add it\n          activeSelection.multiSelectAdd(target);\n          this._hoveredTarget = activeSelection;\n          this._hoveredTargets = [...this.targets];\n        }\n        this._fireSelectionEvents(prevActiveObjects, e);\n      } else {\n        isInteractiveTextObject(activeObject) && activeObject.exitEditing();\n        // add the active object and the target to the active selection and set it as the active object\n        activeSelection.multiSelectAdd(activeObject, target);\n        this._hoveredTarget = activeSelection;\n        // ISSUE 4115: should we consider subTargets here?\n        // this._hoveredTargets = [];\n        // this._hoveredTargets = this.targets.concat();\n        this._setActiveObject(activeSelection, 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\n   */\n  protected handleSelection(\n    e: TPointerEvent\n  ): this is AssertKeys<this, '_activeObject'> {\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      isClick = point1.eq(point2);\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 = isClick\n      ? collectedObjects[0]\n        ? [collectedObjects[0]]\n        : []\n      : collectedObjects.length > 1\n      ? collectedObjects.filter((object) => !object.onSelect({ e })).reverse()\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      this._activeSelection.add(...objects);\n      this.setActiveObject(this._activeSelection, e);\n    }\n\n    // cleanup\n    this._groupSelector = null;\n    return true;\n  }\n\n  exitTextEditing() {\n    this.textEditingManager.exitTextEditing();\n  }\n\n  /**\n   * @override clear {@link textEditingManager}\n   */\n  clear() {\n    this.textEditingManager.dispose();\n    super.clear();\n  }\n\n  /**\n   * @override clear {@link textEditingManager}\n   */\n  destroy() {\n    this.removeListeners();\n    super.destroy();\n    this.textEditingManager.dispose();\n  }\n  findById(id: string) {\n    const obj = this.getObjects().filter((_obj) => _obj._id === id);\n\n    return obj[0];\n  }\n  _updateGroup() {\n    return;\n  }\n  bindGroup() {\n    return;\n  }\n  _createGroup() {\n    return;\n  }\n  ungroup() {\n    return;\n  }\n  group() {\n    return;\n  }\n  resetBackgoundImage() {\n    return;\n  }\n  checkIfResetBackground() {\n    return;\n  }\n  _initStatic() {\n    return;\n  }\n\n  /**\n   * @custom\n   */\n  zoomToCenterPoint(vpCenter: { x: number; y: number }, zoom: number) {\n    const vpt: TMat2D = [\n      zoom,\n      0,\n      0,\n      zoom,\n      -(vpCenter.x * zoom - this.width / 2),\n      -(vpCenter.y * zoom - this.height / 2),\n    ];\n    this.setViewportTransform(vpt);\n  }\n\n  zoomToViewAllObjects() {\n    let topLeftX = 0;\n    let topLeftY = 0;\n    let bottomRightX = 0;\n    let bottomRightY = 0;\n\n    //calculate the top left and bottom right points for all the objects on canvas\n    this.getObjects().forEach((obj) => {\n      if (topLeftX == null) {\n        topLeftX = obj.left;\n        topLeftY = obj.top;\n      }\n\n      if (obj.left < topLeftX) topLeftX = obj.left;\n\n      if (obj.top < topLeftY) topLeftY = obj.top;\n\n      if (bottomRightX == null) {\n        bottomRightX = obj.left + obj.width;\n\n        bottomRightY = obj.top + obj.height;\n      }\n\n      if (obj.left + obj.width > bottomRightX)\n        bottomRightX = obj.left + obj.width;\n\n      if (obj.top + obj.height > bottomRightY)\n        bottomRightY = obj.top + obj.height;\n    });\n\n    //calculate the center of the canvas\n    const centerX = (topLeftX + bottomRightX) / 2;\n\n    const centerY = (topLeftY + bottomRightY) / 2;\n\n    //calculate the scale factor\n\n    const scaleX = this.width / (bottomRightX - topLeftX);\n\n    const scaleY = this.height / (bottomRightY - topLeftY);\n\n    let scale = Math.round(Math.min(scaleX, scaleY) * 0.8 * 100);\n\n    if (scale > 100) scale = 100;\n    if (scale < 3) scale = 3;\n\n    //zoom to cover all the objects on canvas\n\n    this.zoomToCenterPoint({ x: centerX, y: centerY }, scale / 100);\n\n    return scale;\n  }\n\n  zoomToViewObjects(objs: any[]) {\n    let topLeftX = 0;\n    let topLeftY = 0;\n    let bottomRightX = 0;\n    let bottomRightY = 0;\n\n    //calculate the top left and bottom right points for all the objects on canvas\n    objs.forEach(\n      (obj: { left: number; top: number; width: any; height: any }) => {\n        if (topLeftX == null) {\n          topLeftX = obj.left;\n\n          topLeftY = obj.top;\n        }\n\n        if (obj.left < topLeftX) topLeftX = obj.left;\n\n        if (obj.top < topLeftY) topLeftY = obj.top;\n\n        if (bottomRightX == null) {\n          bottomRightX = obj.left + obj.width;\n\n          bottomRightY = obj.top + obj.height;\n        }\n\n        if (obj.left + obj.width > bottomRightX)\n          bottomRightX = obj.left + obj.width;\n\n        if (obj.top + obj.height > bottomRightY)\n          bottomRightY = obj.top + obj.height;\n      }\n    );\n\n    //calculate the center of the canvas\n    const centerX = (topLeftX + bottomRightX) / 2;\n\n    const centerY = (topLeftY + bottomRightY) / 2;\n\n    //calculate the scale factor\n    const scaleX = this.width / (bottomRightX - topLeftX);\n\n    const scaleY = this.height / (bottomRightY - topLeftY);\n\n    let scale = Math.round(Math.min(scaleX, scaleY) * 0.8 * 100);\n\n    if (scale > 100) scale = 100;\n\n    if (scale < 3) scale = 3;\n\n    //zoom to cover all the objects on canvas\n    this.zoomToCenterPoint({ x: centerX, y: centerY }, scale / 100);\n\n    return scale;\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 { 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 { 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 { 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 { isPercent } from '../../parser/percent';\nimport { TSize } from '../../typedefs';\nimport { 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","//@ts-nocheck\nimport { Color } from '../color/Color';\nimport { iMatrix } from '../constants';\nimport { parseTransformAttribute } from '../parser/parseTransformAttribute';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { FabricObject as BaseFabricObject } from '../shapes/Object/Object';\nimport { 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 {\n  parseColorStops,\n  parseCoords,\n  parseGradientUnits,\n  parseType,\n} from './parser';\nimport {\n  ColorStop,\n  GradientCoords,\n  GradientOptions,\n  GradientType,\n  GradientUnits,\n  SVGOptions,\n} from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\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 | null;\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  constructor({\n    type = 'linear' as T,\n    gradientUnits = 'pixels',\n    coords,\n    colorStops = [],\n    offsetX = 0,\n    offsetY = 0,\n    gradientTransform = null,\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),\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.concat()\n        : this.gradientTransform,\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    if (\n      object instanceof BaseFabricObject &&\n      object.isType('Path') &&\n      this.gradientUnits !== 'percentage'\n    ) {\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  /* _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');\n","import { config } from './config';\nimport { 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';\n\nexport type TPatternRepeat = 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat';\n\ntype TExportedKeys =\n  | 'crossOrigin'\n  | 'offsetX'\n  | 'offsetY'\n  | 'patternTransform'\n  | 'repeat'\n  | 'source';\n\nexport type TPatternOptions = Partial<Pick<Pattern, TExportedKeys>>;\n\nexport type TPatternSerialized = TPatternOptions & {\n  source: string;\n};\n\nexport type TPatternHydrationOptions = {\n  /**\n   * handle aborting\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal\n   */\n  signal?: AbortSignal;\n};\n\ntype TImageSource = { source: HTMLImageElement };\ntype TCanvasSource = { source: HTMLCanvasElement };\n\n/**\n * @see {@link http://fabricjs.com/patterns demo}\n * @see {@link http://fabricjs.com/dynamic-patterns demo}\n */\nexport class Pattern {\n  /**\n   * Legacy identifier of the class. Prefer using this.constructor.name 'Pattern'\n   * or utils like isPattern\n   * Will be removed in fabric 7 or 8.\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    console.warn('Setting type has no effect', value);\n  }\n\n  /**\n   * @type TPatternRepeat\n   * @defaults\n   */\n  repeat: TPatternRepeat = '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: TPatternOptions = {}) {\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 TImageSource {\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 TCanvasSource {\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((patternSource.width as number) / width, 0),\n      patternHeight =\n        repeat === 'repeat-x' || repeat === 'no-repeat'\n          ? 1 + Math.abs(patternOffsetY || 0)\n          : ifNaN((patternSource.height as number) / height, 0);\n\n    return [\n      `<pattern id=\"SVGID_${id}\" x=\"${patternOffsetX}\" y=\"${patternOffsetY}\" width=\"${patternWidth}\" height=\"${patternHeight}\">`,\n      `<image x=\"0\" y=\"0\" width=\"${patternSource.width}\" height=\"${\n        patternSource.height\n      }\" xlink:href=\"${this.sourceToString()}\"></image>`,\n      `</pattern>`,\n      '',\n    ].join('\\n');\n  }\n  /* _TO_SVG_END_ */\n\n  static async fromObject(\n    { source, ...serialized }: TPatternSerialized,\n    options: TPatternHydrationOptions\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 { TEvent } from '../EventTypeDefs';\nimport type { Shadow } from '../Shadow';\nimport type { Canvas } from '../canvas/Canvas';\n\ntype TBrushEventData = TEvent & { pointer: Point };\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 { 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 {\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 { XY, Point } from '../../Point';\nimport { rePathCommand } from './regex';\nimport { cleanupSvgAttribute } from '../internals/cleanupSvAttribute';\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        x2 = x1 = current[1];\n        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 { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\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 {\n  FabricObjectProps,\n  SerializedObjectProps,\n  TProps,\n} from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { TBBox, TClassProperties, TSVGReviver } from '../typedefs';\nimport { cloneDeep } from '../util/internals/cloneDeep';\nimport { createPathDefaultControls } from '../controls/commonControls';\n\ninterface UniquePathProps {\n  sourcePath?: string;\n  path?: TSimplePathData;\n  obj_type: 'WBPath',\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 TProps<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 cacheProperties = [...cacheProperties, 'path', 'fillRule'];\n\n  /*boardx custom declare*/\n  declare obj_type: string;\n\n  declare locked: boolean;\n\n  declare whiteboardId: 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 isPanel: boolean;\n\n  declare panelObj: any;\n\n  declare subObjList: any;\n\n  declare lineWidth: any;\n\n  declare radius: any;\n\n  public extendPropeties = ['obj_type', 'whiteboardId', 'userId', 'timestamp', 'zIndex', 'locked', 'lines', 'relationship', '_id', 'userNo', 'version', 'isPanel', 'panelObj', 'subObjList', 'lineWidth', 'radius'];\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  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   * 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, ...this.extendPropeties]),\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) {\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) {\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 TProps<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 {SVGElement} element to parse\n   * @param {(path: Path) => void} callback Callback to invoke after the element has been parsed\n   * @param {Partial<PathProps>} [options] Options object\n   */\n  static fromElement(\n    element: SVGElement,\n    callback: (path: Path) => void,\n    options: Partial<PathProps>\n  ) {\n    const parsedAttributes = parseAttributes(element, this.ATTRIBUTE_NAMES);\n    callback(\n      new this(parsedAttributes.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  /**boardx custom function */\n  getWidgetMenuList() {\n    if (this.locked) return ['objectLock'];\n    return [\n      'strokeColor',\n      'lineWidth',\n      'borderLineIcon',\n      'objectLock',\n      'delete',\n      'aiassist',\n    ]; // 'fillColor',  'backgroundColor','more',\n  }\n  getWidgetMenuLength() {\n    if (this.locked) return 50;\n    return 125;\n  }\n  getContextMenuList() {\n    let menuList;\n    if (this.locked) {\n      menuList = [\n        'Export board',\n        'Exporting selected area',\n        'Create Share Back',\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Copy as image',\n      ];\n    } else {\n      menuList = [\n        'Export board',\n        'Exporting selected area',\n        'Create Share Back',\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Duplicate',\n        'Copy',\n        'Copy as image',\n        'Paste',\n        'Cut',\n        'Delete',\n      ];\n    }\n    menuList.push('Select All');\n    if (this.locked) {\n      menuList.push('Unlock');\n    } else {\n      menuList.push('Lock');\n    }\n\n    // if (this.isPanel && !this.locked) {\n    //   menuList.push('Switch to non-panel');\n    // } else {\n    //   menuList.push('Switch to panel');\n    // }\n\n    return menuList;\n  }\n\n  getObject(): Object {\n    const object = {\n      _id: this._id,\n      angle: this.angle,\n      backgroundColor: this.backgroundColor,\n      fill: this.fill,\n      width: this.width,\n      height: this.height,\n      left: this.left,\n      locked: this.locked,\n      lockMovementX: this.lockMovementX,\n      lockMovementY: this.lockMovementY,\n      lockScalingFlip: this.lockScalingFlip,\n      obj_type: this.obj_type,\n      originX: this.originX,\n      originY: this.originY,\n      scaleX: this.scaleX,\n      scaleY: this.scaleY,\n      selectable: this.selectable,\n      top: this.top,\n      userNo: this.userNo,\n      userId: this.userId,\n      whiteboardId: this.whiteboardId,\n      zIndex: this.zIndex,\n      version: this.version,\n      isPanel: this.isPanel,\n      panelObj: this.panelObj,\n      relationship: this.relationship,\n      subObjList: this.subObjList,\n      lineWidth: this.lineWidth,\n      lines: this.lines,\n      stroke: this.stroke,\n      strokeWidth: this.strokeWidth,\n      radius: this.radius,\n      path: this.path,\n      pathOffset: this.pathOffset,\n      shadow: this.shadow,\n      cornerStyle: this.cornerStyle,\n      perPixelTargetFind: this.perPixelTargetFind\n    };\n    return object;\n  }\n}\n\nclassRegistry.setClass(Path);\nclassRegistry.setSVGClass(Path);\n\n/* _FROM_SVG_START_ */\n","import { ModifierKey, TEvent } from '../EventTypeDefs';\nimport { 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 { 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    const points: Point[] = [];\n    this._points.map(o => {\n      if (!isNaN(o.x)) points.push(o);\n    });\n\n    this._points = points;\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 { TClassProperties } from '../typedefs';\nimport {\n  FabricObjectProps,\n  SerializedObjectProps,\n  TProps,\n} from './Object/types';\n\ninterface UniqueCircleProps {\n  /**\n   * Radius of this circle\n   * @type Number\n   * @default 0\n   */\n  radius: number;\n\n  /**\n   * degrees of start of the circle.\n   * probably will change to degrees in next major version\n   * @type Number 0 - 359\n   * @default 0\n   */\n  startAngle: number;\n\n  /**\n   * End angle of the circle\n   * probably will change to degrees in next major version\n   * @type Number 1 - 360\n   * @default 360\n   */\n  endAngle: number;\n}\n\nexport interface SerializedCircleProps\n  extends SerializedObjectProps,\n    UniqueCircleProps {}\n\nexport interface CircleProps extends FabricObjectProps, UniqueCircleProps {}\n\nconst CIRCLE_PROPS = ['radius', 'startAngle', 'endAngle'] as const;\n\nexport const circleDefaultValues: UniqueCircleProps = {\n  radius: 0,\n  startAngle: 0,\n  endAngle: 360,\n};\n\nexport class Circle<\n    Props extends TProps<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\n  static cacheProperties = [...cacheProperties, ...CIRCLE_PROPS];\n\n  static ownDefaults: Record<string, any> = 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      false\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 | number)[] {\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      return [\n        `<path d=\"M ${startX} ${startY}`,\n        ` A ${radius} ${radius}`,\n        ' 0 ',\n        `${largeFlag} 1`,\n        ` ${endX} ${endY}`,\n        '\" ',\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 {SVGElement} element Element to parse\n   * @param {Function} [callback] Options callback invoked after parsing is finished\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 fromElement(element: SVGElement, callback: (circle: Circle) => any) {\n    const {\n      left = 0,\n      top = 0,\n      radius,\n      ...otherParsedAttributes\n    } = parseAttributes(element, this.ATTRIBUTE_NAMES) as Partial<CircleProps>;\n\n    if (!radius || radius < 0) {\n      throw new Error(\n        'value of `r` attribute is required and can not be negative'\n      );\n    }\n\n    // this probably requires to be fixed for default origins not being top/left.\n    callback(\n      new this({\n        ...otherParsedAttributes,\n        radius,\n        left: left - radius,\n        top: top - radius,\n      })\n    );\n  }\n\n  /* _FROM_SVG_END_ */\n\n  /**\n   * @todo how do we declare this??\n   */\n  static fromObject<T extends TProps<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 { 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';\n\nexport type CircleBrushPoint = {\n  x: number;\n  y: number;\n  radius: number;\n  fill: string;\n};\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 { 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';\n\nexport type SprayBrushPoint = {\n  x: number;\n  y: number;\n  width: number;\n  opacity: number;\n};\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        layout: 'fixed',\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 { 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 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 { halfPI } from '../../../constants';\nimport { XY, Point } from '../../../Point';\nimport { degreesToRadians } from '../radiansDegreesConversion';\nimport {\n  calcAngleBetweenVectors,\n  calcVectorRotation,\n  createVector,\n} from '../vectors';\nimport { TProjectStrokeOnPointsOptions, TProjection } from './types';\n\n/**\n * @see https://github.com/fabricjs/fabric.js/pull/8344\n */\nexport abstract class StrokeProjectionsBase {\n  declare options: TProjectStrokeOnPointsOptions;\n  declare scale: Point;\n  declare strokeUniformScalar: Point;\n  declare strokeProjectionMagnitude: number;\n\n  static getAcuteAngleFactor(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(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 { XY, Point } from '../../../Point';\nimport { degreesToRadians } from '../radiansDegreesConversion';\nimport { getBisector, getOrthonormalVector, magnitude } from '../vectors';\nimport { StrokeProjectionsBase } from './StrokeProjectionsBase';\nimport { TProjection, TProjectStrokeOnPointsOptions } from './types';\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 bisector of A (∠BAC)\n   */\n  declare bisector: ReturnType<typeof getBisector>;\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    // First we calculate the bisector between the points. Used in `round` and `miter` cases\n    // When the stroke is uniform, scaling changes the arrangement of the points, so we have to take it into account\n    this.bisector = this.options.strokeUniform\n      ? getBisector(\n          this.A.multiply(this.scale),\n          this.B.multiply(this.scale),\n          this.C.multiply(this.scale)\n        )\n      : getBisector(this.A, this.B, this.C);\n  }\n\n  get bisectorVector() {\n    return this.bisector.vector;\n  }\n\n  get bisectorAngle() {\n    return this.bisector.angle;\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 = StrokeProjectionsBase.getAcuteAngleFactor(\n      orthogonalProjection,\n      this.bisectorVector\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    return [this.B, this.C].map((to) => this.projectOrthogonally(this.A, to));\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 alpha = Math.abs(this.bisectorAngle),\n      hypotUnitScalar = 1 / Math.sin(alpha / 2),\n      miterVector = this.scaleUnitVector(\n        this.bisectorVector,\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      ? hypotUnitScalar\n      : this.options.strokeMiterLimit;\n\n    if (\n      magnitude(miterVector) / this.strokeProjectionMagnitude <=\n      strokeMiterLimit\n    ) {\n      return [this.applySkew(this.A.add(miterVector))];\n    } else {\n      // when the miter-limit is reached, the stroke line join becomes of type bevel\n      return this.projectBevel();\n    }\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() {\n    // correctSide is used to only consider projecting for the outer side\n    const correctSide = new Point(\n        StrokeProjectionsBase.getAcuteAngleFactor(this.bisectorVector),\n        StrokeProjectionsBase.getAcuteAngleFactor(\n          new Point(this.bisectorVector.y, this.bisectorVector.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    return [this.A.add(radiusOnAxisX), this.A.add(radiusOnAxisY)];\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   * @todo TODO:\n   *  - Consider only projections that are inside the beginning and end of the circle segment\n   *\n   * @see https://github.com/fabricjs/fabric.js/pull/8344#2-3-2-round-skew\n   */\n  private projectRoundWithSkew() {\n    const projections: Point[] = [];\n\n    // The start and end points of the circle segment\n    [this.B, this.C].forEach((to) =>\n      projections.push(this.projectOrthogonally(this.A, to))\n    );\n\n    const { skewX, skewY } = this.options;\n    // The points furthest from the vertex in the direction of the X and Y axes after distortion\n    const circleRadius = new Point()\n        .scalarAdd(this.strokeProjectionMagnitude)\n        .multiply(this.strokeUniformScalar),\n      newY =\n        circleRadius.y / Math.sqrt(1 + Math.tan(degreesToRadians(skewY)) ** 2),\n      furthestY = new Point(\n        Math.sqrt(\n          circleRadius.x ** 2 - ((newY * circleRadius.x) / circleRadius.y) ** 2\n        ),\n        newY\n      ),\n      newX =\n        circleRadius.x / Math.sqrt(1 + Math.tan(degreesToRadians(skewX)) ** 2),\n      furthestX = new Point(\n        newX,\n        Math.sqrt(newY ** 2 - ((newX * newY) / circleRadius.x) ** 2)\n      );\n\n    [furthestX, furthestY].forEach((vector) => {\n      projections.push(\n        this.applySkew(this.A.add(vector)),\n        this.applySkew(this.A.subtract(vector))\n      );\n    });\n\n    return projections;\n  }\n\n  projectRound() {\n    if (!this.isSkewed()) {\n      return this.projectRoundNoSkew();\n    } else {\n      return this.projectRoundWithSkew();\n    }\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      bisector: this.bisector,\n    }));\n  }\n}\n","import { XY, Point } from '../../../Point';\nimport { createVector, getOrthonormalVector, getUnitVector } from '../vectors';\nimport { StrokeLineJoinProjections } from './StrokeLineJoinProjections';\nimport { StrokeProjectionsBase } from './StrokeProjectionsBase';\nimport { 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    return new StrokeLineJoinProjections(\n      this.A,\n      this.T,\n      this.T,\n      this.options\n    ).projectRound();\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 orthogonalProjection = this.calcOrthogonalProjection(\n      this.A,\n      this.T,\n      this.strokeProjectionMagnitude\n    );\n    const strokePointingOut = this.scaleUnitVector(\n      getUnitVector(createVector(this.A, this.T)),\n      -this.strokeProjectionMagnitude\n    );\n    const projectedA = this.A.add(strokePointingOut);\n    return [\n      projectedA.add(orthogonalProjection),\n      projectedA.subtract(orthogonalProjection),\n    ].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 { XY } from '../../../Point';\nimport { StrokeLineCapProjections } from './StrokeLineCapProjections';\nimport { StrokeLineJoinProjections } from './StrokeLineJoinProjections';\nimport { TProjection, TProjectStrokeOnPointsOptions } 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 <= 1) {\n    return projections;\n  }\n\n  points.forEach((A, index) => {\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 && (index === 0 || index === points.length - 1)) {\n      projections.push(\n        ...new StrokeLineCapProjections(\n          A,\n          index === 0 ? C : B,\n          options\n        ).project()\n      );\n    } else {\n      projections.push(\n        ...new StrokeLineJoinProjections(A, B, C, options).project()\n      );\n    }\n  });\n\n  return projections;\n};\n","import type {\n  TextStyle,\n  TextStyleDeclaration,\n} from '../../shapes/Text/StyledText';\nimport { cloneDeep } from '../internals/cloneDeep';\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    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 += textLines[i].length;\n      prevStyle = {};\n      continue;\n    }\n    //loop through each character of the current line\n    for (let c = 0; c < textLines[i].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('\\n'),\n    stylesObject = {} as Record<\n      string | number,\n      Record<string | number, Record<string, string>>\n    >;\n  let charIndex = -1,\n    styleIndex = 0;\n  //loop through each textLine\n  for (let i = 0; i < textLines.length; i++) {\n    //loop through each character of the current line\n    for (let c = 0; c < textLines[i].length; c++) {\n      charIndex++;\n      //check if there's a style collection that includes the current character\n      if (\n        styles[styleIndex] &&\n        styles[styleIndex].start <= charIndex &&\n        charIndex < styles[styleIndex].end\n      ) {\n        //create object for line index if it doesn't exist\n        stylesObject[i] = stylesObject[i] || {};\n        //assign a style at this character's index\n        stylesObject[i][c] = { ...styles[styleIndex].style };\n        //if character is at the end of the current style collection, move to the next\n        if (charIndex === styles[styleIndex].end - 1) {\n          styleIndex++;\n        }\n      }\n    }\n  }\n  return stylesObject;\n};\n","import type { FabricObject } from '../../shapes/Object/FabricObject';\nimport { Group } from '../../shapes/Group';\n\n/**\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 = (elements: FabricObject[]) => {\n  if (elements && elements.length === 1) {\n    return elements[0];\n  }\n  return new Group(elements);\n};\n","export interface IWithDimensions {\n  /**\n   * natural unscaled width of the object\n   */\n  width: number;\n  /**\n   * natural unscaled height of the object\n   */\n  height: number;\n}\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 {IWithDimensions} source\n * @param {IWithDimensions} destination\n * @return {Number} scale factor to apply to source to fit into destination\n */\nexport const findScaleToFit = (\n  source: IWithDimensions,\n  destination: IWithDimensions\n) =>\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 {IWithDimensions} source\n * @param {IWithDimensions} destination\n * @return {Number} scale factor to apply to source to cover destination\n */\nexport const findScaleToCover = (\n  source: IWithDimensions,\n  destination: IWithDimensions\n) =>\n  Math.max(\n    destination.width / source.width,\n    destination.height / source.height\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()}${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 */\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// 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 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","// @ts-nocheck\nimport { getWindow } from '../env';\nimport { noop } from '../constants';\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 {String} [options.method=\"GET\"]\n * @param {Record<string, string>} [options.parameters] parameters to append to url in GET or in body\n * @param {String} [options.body] body to send with POST or PUT request\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 */\nexport function request(url, options = {}) {\n  const method = options.method ? options.method.toUpperCase() : 'GET',\n    onComplete = options.onComplete || noop,\n    xhr = new (getWindow().XMLHttpRequest)(),\n    body = options.body || options.parameters,\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 Error('`options.signal` is in `aborted` state');\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  if (method === 'GET' && options.parameters) {\n    const { origin, pathname, searchParams } = new URL(url);\n    url = `${origin}${pathname}?${new URLSearchParams([\n      ...Array.from(searchParams.entries()),\n      ...Object.entries(options.parameters),\n    ])}`;\n  }\n\n  xhr.open(method, url, true);\n\n  if (method === 'POST' || method === 'PUT') {\n    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n  }\n\n  xhr.send(method === 'GET' ? null : body);\n  return xhr;\n}\n","import { Image } from '../shapes/Image';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { 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 Image).cropX = preserveAspectRatioOptions.cropX;\n    (object as Image).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 { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { TClassProperties } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport { Point } from '../Point';\nimport { isFiller } from '../util/types';\nimport type {\n  FabricObjectProps,\n  SerializedObjectProps,\n  TProps,\n} from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { makeBoundingBoxFromPoints } from '../util';\nimport { createPathDefaultControls } from '../controls/commonControls';\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}\n\nexport interface SerializedLineProps\n  extends SerializedObjectProps,\n  UniqueLineProps {\n}\n\nexport class Line<\n  Props extends TProps<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   * 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  /*boardx custom declare*/\n  declare obj_type: string;\n\n  declare locked: boolean;\n\n  declare whiteboardId: string;\n\n  declare userId: string;\n\n  declare timestamp: Date;\n\n  declare zIndex: number;\n\n  declare _id: string;\n\n  public extendPropeties = ['obj_type', 'whiteboardId', 'userId', 'timestamp', 'zIndex', 'locked', '_id'];\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  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      controls: createPathDefaultControls(),\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, ...this.extendPropeties]),\n      ...this.calcLinePoints(),\n\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 {SVGElement} element Element to parse\n   * @param {Object} [options] Options object\n   * @param {Function} [callback] callback function invoked after parsing\n   */\n  static fromElement(element: SVGElement, callback: (line: Line) => any) {\n    const {\n      x1 = 0,\n      y1 = 0,\n      x2 = 0,\n      y2 = 0,\n      ...parsedAttributes\n    } = parseAttributes(element, this.ATTRIBUTE_NAMES),\n      points: [number, number, number, number] = [x1, y1, x2, y2];\n    callback(new this(points, parsedAttributes));\n  }\n\n  /* _FROM_SVG_END_ */\n  /** boardx custom function */\n  getWidgetMenuList() {\n    if (this.locked) {\n      return ['objectLock'];\n    }\n    return [\n      'strokeColor',\n      'lineWidth',\n      'connectorShape',\n      'connectorTip',\n      'objectLock',\n      'borderLineIcon',\n      'delete'\n    ];\n  }\n  getWidgetMenuLength() {\n    if (this.locked) return 50;\n    return 165;\n  }\n  getContextMenuList() {\n    let menuList;\n    if (this.locked) {\n      menuList = [\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back'\n      ];\n    } else {\n      menuList = [\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Duplicate',\n        'Copy',\n        'Paste',\n        'Cut',\n        'Delete',\n        'aiassist'\n      ];\n    }\n\n    if (this.locked) {\n      menuList.push('Unlock');\n    } else {\n      menuList.push('Lock');\n    }\n\n    return menuList;\n  }\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 TProps<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","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable no-undef */\n//@ts-nocheck\nimport { TClassProperties } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { Line } from './Line';\nimport { Control } from '../controls/Control';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport { cacheProperties } from './Object/FabricObject';\nimport { transformPoint } from '../util/misc/matrix';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\n\nconst coordProps = ['x1', 'x2', 'y1', 'y2'] as const;\n\ninterface UniqueArrowProps {\n  x1: number;\n  x2: number;\n  y1: number;\n  y2: number;\n}\nexport interface SerializedLineProps\n  extends SerializedObjectProps,\n    UniqueArrowProps {}\nexport const ArrowDefaultValues: Partial<TClassProperties<Arrow>> = {\n  minWidth: 20,\n  dynamicMinWidth: 2,\n  lockScalingFlip: true,\n  noScaleCache: false,\n  _wordJoiners: /[ \\t\\r]/,\n  splitByGrapheme: true,\n  obj_type: 'WBArrow',\n  height: 200,\n  maxHeight: 200,\n  subType: 'arrow',\n  hasBorders: false,\n  perPixelTargetFind: true,\n};\n\nexport interface ArrowProps extends FabricObjectProps, UniqueArrowProps {}\n\nexport class Arrow extends Line {\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  /*boardx custom declare*/\n  declare _id: string;\n\n  declare obj_type: string;\n\n  declare locked: boolean;\n\n  declare whiteboardId: string;\n\n  declare userId: string;\n\n  declare userNo: string;\n\n  declare timestamp: Date;\n\n  declare zIndex: number;\n\n  declare connectorShape: string;\n\n  declare subType: string;\n\n  declare perPixelTargetFind: boolean;\n\n  declare connectorEnd: object;\n\n  declare connectorStart: object;\n\n  declare connectorType: string;\n\n  declare tips: string;\n\n  declare connectorStyle: string;\n\n  declare timestamp: number;\n\n  declare moving: boolean;\n\n  public extendPropeties = [\n    'obj_type',\n    'whiteboardId',\n    'userId',\n    'timestamp',\n    'zIndex',\n    'locked',\n    'connectorShape',\n    '_id',\n    'subType',\n    'perPixelTargetFind',\n    'userNo',\n    'connectorEnd',\n    'connectorStart',\n    'connectorType',\n    'tips',\n    'connectorStyle',\n    'timestamp',\n    'moving',\n  ];\n\n  static cacheProperties = [...cacheProperties, ...coordProps];\n\n  static ownDefaults: Record<string, any> = ArrowDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      ...Arrow.ownDefaults,\n    };\n  }\n\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) {\n    super([x1, y1, x2, y2], options);\n    this._setWidthHeight();\n\n    const { left, top } = options;\n    typeof left === 'number' && this.set('left', left);\n    typeof top === 'number' && this.set('top', top);\n    if (\n      options.strokeWidth !== 2 &&\n      options.strokeWidth !== 4 &&\n      options.strokeWidth !== 8\n    ) {\n      options.strokeWidth = 4;\n    }\n    this.controls = {\n      start: new Control({\n        cursorStyle: 'crosshair',\n        //@ts-ignore\n        mouseDownHandler: (eventData, transformData) => {\n          //console.log('mouseDownHandler')\n          this.mousedownProcess(transformData, eventData, true);\n        },\n        positionHandler: (dim, finalMatrix, fabricObject) => {\n          //console.log('positionProcess')\n          return this.positionProcess(fabricObject, true);\n        },\n        actionHandler: (eventData, transform, x, y) => {\n          //console.log('actionHandler')\n          const target: any = transform.target;\n          if (target.locked) {\n            return;\n          }\n\n          const hoverTarget = this.canvas.findTarget(eventData);\n          if (hoverTarget && hoverTarget.obj_type === 'WBArrow') {\n            return;\n          }\n\n          if (hoverTarget) {\n            let minPoint;\n            //如果箭头在当前object内部，不用计算直接返回\n            if (\n              x > this.left &&\n              x < this.left + this.width &&\n              y > this.top &&\n              y < this.top + this.height\n            ) {\n              minPoint = { x, y, dot: 0 };\n            } else {\n              minPoint = this.calcDistanceToTarget({ x, y }, hoverTarget);\n            }\n            hoverTarget.__corner = minPoint.dot;\n\n            target.setConnectorObj(hoverTarget, minPoint, false, true);\n          } else {\n            const oldConnObj =\n              target.connectorStart && target.connectorStart._id\n                ? this.canvas.findById(target.connectorStart._id)\n                : null;\n\n            if (oldConnObj && oldConnObj.lines)\n              oldConnObj.lines = oldConnObj.lines.filter(\n                (item) => item._id !== target._id\n              );\n            this.canvas.setActiveObject(target);\n            target.set('x1', x).set('y1', y);\n            target.connectorStart = null;\n          }\n          if (target) {\n            target.setCoords();\n          }\n\n          this.canvas.requestRenderAll();\n          return true;\n        },\n      }),\n\n      end: new Control({\n        cursorStyle: 'crosshair',\n        //@ts-ignore\n        mouseDownHandler: (eventData, transformData) => {\n          //console.log('mouseDownHandler  --end')\n          this.mousedownProcess(transformData, eventData, false);\n        },\n        positionHandler: (dim, finalMatrix, fabricObject) => {\n          //console.log('positionHandler  --end')\n          return this.positionProcess(fabricObject, false);\n        },\n        actionHandler: (eventData, transform, x, y) => {\n          //console.log('actionHandler  --end')\n          const target: any = transform.target;\n          if (target.locked) return;\n\n          const hoverTarget = this.canvas.findTarget(eventData);\n\n          if (hoverTarget && hoverTarget.obj_type === 'WBArrow') return;\n\n          if (hoverTarget) {\n            //console.log('this hovertarget----------end');\n            let minPoint;\n            //如果箭头在当前object内部，不用计算直接返回\n            if (\n              x > hoverTarget.left &&\n              x < hoverTarget.left + hoverTarget.width &&\n              y > hoverTarget.top &&\n              y < hoverTarget.top + hoverTarget.height\n            ) {\n              minPoint = { x, y, dot: 0 };\n            } else {\n              minPoint = this.calcDistanceToTarget({ x, y }, hoverTarget);\n            }\n\n            hoverTarget.__corner = minPoint.dot;\n            // this.set({\n            //   x2: x,\n            //   y2: y,\n            //   connectorEnd: { _id: hoverTarget._id, rx: x, ry: y }\n            // });\n            target.setConnectorObj(hoverTarget, minPoint, false, false);\n          } else {\n            const oldConnObj =\n              target.connectorEnd && target.connectorEnd._id\n                ? this.canvas.findById(target.connectorEnd._id)\n                : null;\n\n            if (oldConnObj && oldConnObj.lines)\n              oldConnObj.lines = oldConnObj.lines.filter(\n                (item) => item._id !== target._id\n              );\n            target.set('x2', x).set('y2', y);\n            target.connectorEnd = null;\n          }\n          if (target) {\n            target.setCoords();\n          }\n          this.canvas.requestRenderAll();\n\n          return true;\n        },\n      }),\n    };\n    // const acc = [];\n    // for (let i = 0; i <= 4; i += 2) {\n    //   acc[i] = new Control({\n    //     cursorStyle: 'pointer',\n    //     pointIndex: i,\n    //     actionName: 'modifyCurve',\n\n    //     //@ts-ignore\n    //     mouseDownHandler: (eventData, transformData) => {\n    //       //console.log('actionHandler  --cmmen')\n    //       this.mousedownProcess(transformData, eventData, false);\n    //     },\n    //     positionHandler: (dim, finalMatrix, fabricObject) => {\n    //       //console.log('positionHandler  --cmmen')\n    //       return this.positionProcess(fabricObject, false);\n    //     },\n    //     actionHandler: (eventData, transform, x, y) => {\n    //       //console.log('actionHandler  --cmmen')\n    //       const target: any = transform.target;\n    //       if (target.locked) return;\n\n    //       const hoverTarget = this.canvas.findTarget(eventData);\n\n    //       if (hoverTarget && hoverTarget.obj_type === 'WBArrow') return;\n\n    //       if (hoverTarget) {\n    //         //console.log('this hovertarget----------start11')\n    //         const minPoint = this.calcDistanceToTarget({ x, y }, hoverTarget);\n    //         hoverTarget.__corner = minPoint.dot;\n\n    //         target.setConnectorObj(hoverTarget, minPoint, false, false);\n    //         // target.set('x2', minPoint.x).set('y2', minPoint.y);\n    //       } else {\n    //         const oldConnObj =\n    //           target.connectorEnd && target.connectorEnd._id\n    //             ? this.canvas.findById(target.connectorEnd._id)\n    //             : null;\n\n    //         if (oldConnObj && oldConnObj.lines)\n    //           oldConnObj.lines = oldConnObj.lines.filter(\n    //             (item) => item._id !== target._id\n    //           );\n\n    //         target.set('(x2+x1)/2', x).set('(y1+y2)/2', y);\n    //         //target.connectorEnd = null;\n    //       }\n    //       if (target) {\n    //         target.setCoords();\n    //       }\n    //       this.canvas.requestRenderAll();\n\n    //       return true;\n    //     },\n    //   });\n    // }\n\n    this.setControlsVisibility({\n      mra: false,\n      mla: false,\n      mta: false,\n      mba: false,\n      tr: false,\n      br: false,\n      bl: false,\n      mt: false,\n      mb: false,\n      tl: false,\n      mtr: false,\n      mtr2: false,\n      mbaStart: false,\n      mlaStart: false,\n      mraStart: false,\n      mtaStart: false,\n      start: true,\n      end: true,\n    });\n    this.lockScalingX = true;\n    this.lockScalingY = true;\n    this.lockScalingFlip = true;\n    if (\n      options.strokeWidth !== 2 &&\n      options.strokeWidth !== 4 &&\n      options.strokeWidth !== 8\n    ) {\n      options.strokeWidth = 4;\n    }\n    this.initEvents(options);\n  }\n\n  initEvents(options) {\n    // console.log('initEvents');\n    return;\n  }\n\n  getObject() {\n    const object = {};\n    const keys = [\n      '_id', // string, the id of the object\n      'angle', //  integer, angle for recording rotating\n      'backgroundColor', // string,  background color, works when the image is transparent\n      'fill', // the font color\n      'width', // integer, width of the object\n      'height', // integer, height of the object\n      'left', // integer left for position\n      'locked', // boolean, lock status for the widget， this is connected to lock\n      'lockScalingX',\n      'lockScalingY',\n      'lockMovementX', // boolean, lock the verticle movement\n      'lockMovementY', // boolean, lock the horizontal movement\n      'lockScalingFlip', // boolean,  make it can not be inverted by pulling the width to the negative side\n      'obj_type', // object type\n      'originX', // string, Horizontal origin of transformation of an object (one of \"left\", \"right\", \"center\") See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n      'originY', // string, Vertical origin of transformation of an object (one of \"top\", \"bottom\", \"center\") See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n      'scaleX', // nunber, Object scale factor (horizontal)\n      'scaleY', // number, Object scale factor (vertical)\n      'selectable', // boolean, When set to `false`, an object can not be selected for modification (using either point-click-based or group-based selection). But events still fire on it.\n      'top', // integer, Top position of an object. Note that by default it's relative to object top. You can change this by setting originY={top/center/bottom}\n      'userNo', // string, the unique id for the user, one user id could open mutiple browser, each browser has unique user no\n      'userId', // string, user identity\n      'whiteboardId', // whiteboard id, string\n      'zIndex', // the index for the object on whiteboard, integer\n      'version', // version of the app, string\n      'type', // widget type, string\n      'panelObj', // if this is a panel, the id of the panel, string\n      'relationship', // array, viewporttransform\n      'stroke', // line color\n      'strokeWidth', // line width\n      'strokeUniform', // set up to true then strokewidth doesn't change when scaling\n      'connectorEnd', // connectorEnd: {_id: \"F8B6zJQv8LFQyP8ux\", relativeX: 0.5, relativeY: 0.5}\n      'connectorStart', // connectorStart: {_id: \"aAodW5XBxPwPZqDNc\", relativeX: 0.0, relativeY: -0.5}\n      'x1', // : 534.2749784296807\n      'x2', // : 418.5215421268829\n      'y1', // : 352.6321915444349\n      'y2', // : 311.233166726342\n      'connectorShape', // straight, angled, curved\n      'connectorStyle', // solid, dashed, dotted\n      'tips', // string, both, start, end, none\n    ];\n    keys.forEach((key) => {\n      object[key] = this[key];\n    });\n    return object;\n  }\n\n  toObject(propertiesToInclude: Array<any>): object {\n    return super.toObject(\n      [...this.extendPropeties, 'minWidth', 'splitByGrapheme'].concat(\n        propertiesToInclude\n      )\n    );\n  }\n\n  getCloneLineWidget() {\n    const widget = this.toObject();\n    const rwidget = widget;\n    const lObjwidth = (widget.x1 - widget.x2) * widget.scaleX;\n    const lObjheight = (widget.y1 - widget.y2) * widget.scaleY;\n    rwidget.x1 = widget.left + 0.5 * lObjwidth;\n    rwidget.y1 = widget.top + 0.5 * lObjheight;\n    rwidget.x2 = widget.left - 0.5 * lObjwidth;\n    rwidget.y2 = widget.top - 0.5 * lObjheight;\n    rwidget.scaleX = 1;\n    rwidget.scaleY = 1;\n    rwidget.width = lObjwidth;\n    rwidget.height = lObjheight;\n    rwidget.left = widget.left;\n    rwidget.top = widget.top;\n    rwidget.zIndex = Date.now() * 100;\n    return rwidget;\n  }\n\n  getWidgetMenuList() {\n    if (this.locked) {\n      return ['objectLock'];\n    }\n    return [\n      'strokeColor',\n      'lineWidth',\n      'connectorShape',\n      'connectorTip',\n      'objectLock',\n      'borderLineIcon',\n      'delete',\n      'aiassist',\n    ];\n  }\n\n  getWidgetMenuLength() {\n    if (this.locked) return 50;\n    return 165;\n  }\n\n  getContextMenuList() {\n    let menuList;\n    if (this.locked) {\n      menuList = [\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n      ];\n    } else {\n      menuList = [\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Duplicate',\n        'Copy',\n        'Paste',\n        'Cut',\n        'Delete',\n      ];\n    }\n\n    if (this.locked) {\n      menuList.push('Unlock');\n    } else {\n      menuList.push('Lock');\n    }\n\n    return menuList;\n  }\n  recalcLinePoints(line) {\n    const points = line.calcLinePoints();\n    const matrix = line.calcTransformMatrix();\n    // recalculate the line's start and end point coordinate by transform matrix\n    const point1 = transformPoint(\n      //@ts-ignore\n      { x: points.x1, y: points.y1 },\n      matrix\n    );\n    const point2 = transformPoint(\n      //@ts-ignore\n      { x: points.x2, y: points.y2 },\n      matrix\n    );\n    line.set('x1', point1.x).set('y1', point1.y);\n    line.set('x2', point2.x).set('y2', point2.y);\n  }\n  calculateEnds(lineObj, arrow) {\n    const position = {\n      x1: lineObj.left,\n      y1: lineObj.top,\n      x2: lineObj.left + (arrow.x2 - arrow.x1),\n      y2: lineObj.top + (arrow.y2 - arrow.y1),\n    };\n    return position;\n  }\n  getArrowAngle() {\n    const x = this.x2 - this.x1;\n    const y = this.y2 - this.y1;\n    let angle = 0;\n    if (x === 0) {\n      if (y === 0) {\n        angle = 0;\n      } else if (y > 0) {\n        angle = Math.PI / 2;\n      } else {\n        angle = (Math.PI * 3) / 2;\n      }\n    } else if (y === 0) {\n      if (x > 0) {\n        angle = 0;\n      } else {\n        angle = Math.PI;\n      }\n    } else if (x < 0) {\n      angle = Math.atan(y / x) + Math.PI;\n    } else if (y < 0) {\n      angle = Math.atan(y / x) + 2 * Math.PI;\n    } else {\n      angle = Math.atan(y / x);\n    }\n    angle = (angle * 180) / Math.PI + 90;\n    return angle;\n  }\n  getresetArrowaftermoving() {\n    const lineObj = this.canvas.findById(this._id).getCloneLineWidget();\n    const scalex = lineObj.scaleX;\n    const scaley = lineObj.scaleY;\n    const position = {\n      x1: lineObj.left,\n      y1: lineObj.top,\n      x2: lineObj.left + (lineObj.x2 - lineObj.x1),\n      y2: lineObj.top + (lineObj.y2 - lineObj.y1),\n    };\n\n    const lObjwidth = (lineObj.x1 - lineObj.x2) * scalex;\n    const lObjheight = (lineObj.y1 - lineObj.y2) * scaley;\n    this.x1 = position.x1 + 0.5 * lObjwidth;\n    this.y1 = position.y1 + 0.5 * lObjheight;\n    this.x2 = position.x1 - 0.5 * lObjwidth;\n    this.y2 = position.y1 - 0.5 * lObjheight;\n    this.scaleX = 1;\n    this.scaleY = 1;\n    this.height = Math.abs(lineObj.height);\n    this.width = Math.abs(lineObj.width);\n    this.setCoords();\n    this.canvas.requestRenderAll();\n  }\n  removeArrowfromConnectObj(oldConnObj) {\n    oldConnObj.lines = oldConnObj.lines.filter((item) => item._id !== this._id);\n  }\n  resetStrokeAfterScaling() {\n    /* have to discard any active first */\n    this.canvas.discardActiveObject();\n    this.canvas.setActiveObject(this);\n    this.canvas.discardActiveObject();\n  }\n\n  spmyconvert(xs) {\n    const l = [];\n    for (let i = 0; i < xs.length; i++) {\n      l.push(xs[i].x);\n      l.push(xs[i].y);\n    }\n    return l;\n  }\n  spdrawCurve(ctx, ptsa, tension, isClosed, numOfSegments) {\n    ctx.beginPath();\n    this.spdrawLines(\n      ctx,\n      this.spgetCurvePoints(ptsa, tension, isClosed, numOfSegments)\n    );\n\n    ctx.stroke();\n  }\n  spgetCurvePoints(pts, tension, isClosed, numOfSegments) {\n    // use input value if provided, or use a default value\n    tension = typeof tension != 'undefined' ? tension : 0.5;\n    isClosed = isClosed ? isClosed : false;\n    numOfSegments = numOfSegments ? numOfSegments : 16;\n\n    const _pts = [];\n    const res = []; // clone array\n    let x;\n    let y; // our x,y coords\n    let t1x;\n    let t2x;\n    let t1y;\n    let t2y; // tension vectors\n    let c1;\n    let c2;\n    let c3;\n    let c4; // cardinal points\n    let st;\n    let t;\n    let i; // steps based on num. of segments\n\n    // clone array so we don't change the original\n    //\n    _pts = pts.slice(0);\n\n    // The algorithm require a previous and next point to the actual point array.\n    // Check if we will draw closed or open curve.\n    // If closed, copy end points to beginning and first points to end\n    // If open, duplicate first points to befinning, end points to end\n    if (isClosed) {\n      _pts.unshift(pts[pts.length - 1]);\n      _pts.unshift(pts[pts.length - 2]);\n      _pts.unshift(pts[pts.length - 1]);\n      _pts.unshift(pts[pts.length - 2]);\n      _pts.push(pts[0]);\n      _pts.push(pts[1]);\n    } else {\n      _pts.unshift(pts[1]); //copy 1. point and insert at beginning\n      _pts.unshift(pts[0]);\n      _pts.push(pts[pts.length - 2]); //copy last point and append\n      _pts.push(pts[pts.length - 1]);\n    }\n\n    // ok, lets start..\n\n    // 1. loop goes through point array\n    // 2. loop goes through each segment between the 2 pts + 1e point before and after\n    for (i = 2; i < _pts.length - 4; i += 2) {\n      for (t = 0; t <= numOfSegments; t++) {\n        // calc tension vectors\n        t1x = (_pts[i + 2] - _pts[i - 2]) * tension;\n        t2x = (_pts[i + 4] - _pts[i]) * tension;\n\n        t1y = (_pts[i + 3] - _pts[i - 1]) * tension;\n        t2y = (_pts[i + 5] - _pts[i + 1]) * tension;\n\n        // calc step\n        st = t / numOfSegments;\n\n        // calc cardinals\n        c1 = 2 * Math.pow(st, 3) - 3 * Math.pow(st, 2) + 1;\n        c2 = -(2 * Math.pow(st, 3)) + 3 * Math.pow(st, 2);\n        c3 = Math.pow(st, 3) - 2 * Math.pow(st, 2) + st;\n        c4 = Math.pow(st, 3) - Math.pow(st, 2);\n        const left = 0; //_pts[0]; this.left\n        const top = 0; //_pts[ 1]; this.top\n\n        // calc x and y cords with common control vectors\n        x = c1 * _pts[i] + c2 * _pts[i + 2] + c3 * t1x + c4 * t2x + left;\n        y = c1 * _pts[i + 1] + c2 * _pts[i + 3] + c3 * t1y + c4 * t2y + top;\n\n        //console.log(this.left, this.top);\n        //store points in array\n        res.push(x);\n        res.push(y);\n      }\n    }\n    return res;\n  }\n  spdrawLines(ctx, pts) {\n    ctx.moveTo(pts[0], pts[1]);\n    let i;\n    for (i = 2; i < pts.length - 1; i += 2) {\n      ctx.strokeStyle = this.stroke; //'red';\n\n      ctx.lineTo(pts[i], pts[i + 1]);\n      ctx.stroke();\n    }\n  }\n  _render(ctx) {\n    const pointsOfLine = this.calcLinePoints();\n    if (!this.ctx) this.ctx = ctx;\n    ctx.lineWidth = (this.strokeWidth * 1) / Math.max(this.canvas.getZoom(), 1);\n    ctx.strokeStyle = this.stroke;\n    ctx.fillStyle = this.stroke;\n    ctx.lineJoin = 'round';\n    ctx.lineCap = 'round';\n\n    const connStartObj = this.canvas.findById(this.connectorStart?._id);\n    const connEndObj = this.canvas.findById(this.connectorEnd?._id);\n\n    if (this.connectorShape === 'straight') {\n      console.log(\n        '$$$straight',\n        pointsOfLine.x1,\n        pointsOfLine.y1,\n        pointsOfLine.x2,\n        pointsOfLine.y2\n      );\n      ctx.beginPath();\n      ctx.moveTo(pointsOfLine.x1, pointsOfLine.y1);\n      ctx.lineTo(pointsOfLine.x2, pointsOfLine.y2);\n      ctx.stroke();\n      if (this.subType === 'arrow') {\n        this.drawArrowTips(ctx, pointsOfLine);\n      }\n    }\n\n    if (this.connectorShape === 'curved') {\n      console.log(\n        '$$$$curved',\n        pointsOfLine.x1,\n        pointsOfLine.y1,\n        pointsOfLine.x2,\n        pointsOfLine.y2\n      );\n      let endAngle = 90;\n      let startAngle = 270;\n      let offset = 0;\n      let etype = 'f';\n      let stype = 'f';\n\n      if (pointsOfLine.x1 < pointsOfLine.x2) {\n        startAngle = 90;\n        endAngle = 270;\n      } else {\n        startAngle = 270; //270;\n        endAngle = 90; //90;\n      }\n      let startPoint = { x: pointsOfLine.x1, y: pointsOfLine.y1 },\n        endPoint = { x: pointsOfLine.x2, y: pointsOfLine.y2 };\n\n      if (connEndObj || connStartObj) {\n        offset = 30;\n\n        const threshold = 0.05;\n        if (this.connectorStart) {\n          if (Math.abs(this.connectorStart.ry - 0.5) <= threshold) {\n            startPoint = { x: pointsOfLine.x1, y: pointsOfLine.y1 };\n            startAngle = 180;\n            stype = 'b';\n          } else if (Math.abs(this.connectorStart.ry + 0.5) <= threshold) {\n            startPoint = { x: pointsOfLine.x1, y: pointsOfLine.y1 };\n            startAngle = 0;\n            stype = 'u';\n          } else if (Math.abs(this.connectorStart.rx - 0.5) <= threshold) {\n            startPoint = { x: pointsOfLine.x1, y: pointsOfLine.y1 };\n            startAngle = 90;\n            stype = 'r';\n          } else if (Math.abs(this.connectorStart.rx + 0.5) <= threshold) {\n            startPoint = { x: pointsOfLine.x1, y: pointsOfLine.y1 };\n            startAngle = 270;\n            stype = 'l';\n          }\n        }\n\n        if (this.connectorEnd) {\n          if (Math.abs(this.connectorEnd.ry - 0.5) <= threshold) {\n            endPoint = { x: pointsOfLine.x2, y: pointsOfLine.y2 };\n            endAngle = 180;\n            etype = 'b';\n          } else if (Math.abs(this.connectorEnd.ry + 0.5) <= threshold) {\n            endPoint = { x: pointsOfLine.x2, y: pointsOfLine.y2 };\n            endAngle = 0;\n            etype = 'u';\n          } else if (Math.abs(this.connectorEnd.rx - 0.5) <= threshold) {\n            endPoint = { x: pointsOfLine.x2, y: pointsOfLine.y2 };\n            endAngle = 90;\n            etype = 'r';\n          } else if (Math.abs(this.connectorEnd.rx + 0.5) <= threshold) {\n            endPoint = { x: pointsOfLine.x2, y: pointsOfLine.y2 };\n            endAngle = 270;\n            etype = 'l';\n          }\n        }\n      }\n      this.drawBeizerBody(\n        ctx,\n        pointsOfLine,\n        offset,\n        stype,\n        etype,\n        connStartObj,\n        connEndObj,\n        startAngle,\n        endAngle\n      );\n    } else if (this.connectorShape === 'straight5') {\n      console.log(\n        '$$$$straight5',\n        pointsOfLine.x1,\n        pointsOfLine.y1,\n        pointsOfLine.x2,\n        pointsOfLine.y2\n      );\n      let endAngle = 90;\n      let startAngle = 270;\n      let sx1a = 0;\n      let sy1a = offset;\n      let sx2a = 0;\n      let sy2a = offset;\n\n      // console.log('in curved ', p.x1, p.y1, p.x2, p.y2);\n\n      let sp = { x: pointsOfLine.x1, y: pointsOfLine.y1 },\n        ep = { x: pointsOfLine.x2, y: pointsOfLine.y2 };\n\n      if (connEndObj || connStartObj) {\n        offset = 20;\n\n        const threshold = 0.05;\n        if (this.connectorStart) {\n          if (Math.abs(this.connectorStart.ry - 0.5) <= threshold) {\n            sp = { x: pointsOfLine.x1, y: pointsOfLine.y1 };\n            startAngle = 180;\n            sx1a = 0;\n            sy1a = offset;\n            stype = 'b';\n          } else if (Math.abs(this.connectorStart.ry + 0.5) <= threshold) {\n            sp = { x: pointsOfLine.x1, y: pointsOfLine.y1 };\n            startAngle = 0;\n            sx1a = 0;\n            sy1a = -offset;\n            stype = 'u';\n          } else if (Math.abs(this.connectorStart.rx - 0.5) <= threshold) {\n            sp = { x: pointsOfLine.x1, y: pointsOfLine.y1 };\n            startAngle = 90;\n            sx1a = offset;\n            sy1a = 0;\n            stype = 'r';\n          } else if (Math.abs(this.connectorStart.rx + 0.5) <= threshold) {\n            sp = { x: pointsOfLine.x1, y: pointsOfLine.y1 };\n            startAngle = 270;\n            sx1a = -offset;\n            sy1a = 0;\n            stype = 'l';\n          }\n        }\n\n        if (this.connectorEnd) {\n          if (Math.abs(this.connectorEnd.ry - 0.5) <= threshold) {\n            ep = { x: pointsOfLine.x2, y: pointsOfLine.y2 };\n            endAngle = 180;\n            sx2a = 0;\n            sy2a = offset;\n            etype = 'b';\n          } else if (Math.abs(this.connectorEnd.ry + 0.5) <= threshold) {\n            ep = { x: pointsOfLine.x2, y: pointsOfLine.y2 };\n            endAngle = 0;\n            sx2a = 0;\n            sy2a = -offset;\n            etype = 'u';\n          } else if (Math.abs(this.connectorEnd.rx - 0.5) <= threshold) {\n            ep = { x: pointsOfLine.x2, y: pointsOfLine.y2 };\n            endAngle = 90;\n            sx2a = offset;\n            sy2a = 0;\n            etype = 'r';\n          } else if (Math.abs(this.connectorEnd.rx + 0.5) <= threshold) {\n            ep = { x: pointsOfLine.x2, y: pointsOfLine.y2 };\n            endAngle = 270;\n            sx2a = -offset;\n            sy2a = 0;\n            etype = 'l';\n          }\n        }\n      }\n      const sx1 = pointsOfLine.x1 + sx1a;\n      const sy1 = pointsOfLine.y1 + sy1a;\n      const sx2 = pointsOfLine.x2 + sx2a;\n      const sy2 = pointsOfLine.y2 + sy2a;\n\n      {\n        ctx.moveTo(pointsOfLine.x1, pointsOfLine.y1);\n        ctx.lineTo(sx1, sy1);\n        ctx.stroke();\n        ctx.moveTo(sx1, sy1);\n        const py21 = (sy2 - sy1) / 3;\n        ctx.bezierCurveTo(sx1, sy1 + py21, sx2, sy2 - py21, sx2, sy2);\n        ctx.stroke();\n        ctx.moveTo(pointsOfLine.x2, pointsOfLine.y2);\n        ctx.lineTo(sx2, sy2);\n        ctx.stroke();\n      }\n      if (this.tips === 'start' || this.tips === 'both')\n        this.drawArrowTip(ctx, sp, startAngle);\n      if (this.tips === 'end' || this.tips === 'both')\n        this.drawArrowTip(ctx, ep, endAngle);\n    } else if (this.connectorShape == 'straight6') {\n      const pts = [\n        {\n          x: pointsOfLine.x1,\n          y: pointsOfLine.y1,\n        },\n        {\n          x: pointsOfLine.x1 + (pointsOfLine.x2 - pointsOfLine.x1) / 6,\n          y: pointsOfLine.y1 + (2 * (pointsOfLine.y2 - pointsOfLine.y1)) / 6,\n        },\n        {\n          x: pointsOfLine.x1 + (3 * (pointsOfLine.x2 - pointsOfLine.x1)) / 6,\n          y: pointsOfLine.y1 + (3 * (pointsOfLine.y2 - pointsOfLine.y1)) / 6,\n        },\n        {\n          x: pointsOfLine.x1 + (4 * (pointsOfLine.x2 - pointsOfLine.x1)) / 6,\n          y: pointsOfLine.y1 + (5 * (pointsOfLine.y2 - pointsOfLine.y1)) / 6,\n        },\n        {\n          x: pointsOfLine.x1 + (5 * (pointsOfLine.x2 - pointsOfLine.x1)) / 6,\n          y: pointsOfLine.y1 + (5 * (pointsOfLine.y2 - pointsOfLine.y1)) / 6,\n        },\n        {\n          x: pointsOfLine.x2,\n          y: pointsOfLine.y2,\n        },\n      ];\n\n      this.spdrawCurve(ctx, this.spmyconvert(pts), 0.5); //default tension=0.5\n    } else if (this.connectorShape === 'curvedold') {\n      //curved\n      const angle = this.getArrowAngle();\n      offset = 40;\n      if (\n        Math.round(angle / 90) * 90 === 180 ||\n        (Math.round(angle / 90) * 90) % 360 === 0\n      ) {\n        ctx.moveTo(pointsOfLine.x1, pointsOfLine.y1);\n        const py21 = (pointsOfLine.y2 - pointsOfLine.y1) / 3;\n        ctx.bezierCurveTo(\n          pointsOfLine.x1,\n          pointsOfLine.y1 + py21,\n          pointsOfLine.x2,\n          pointsOfLine.y2 - py21,\n          pointsOfLine.x2,\n          pointsOfLine.y2\n        );\n        ctx.stroke();\n      } else {\n        ctx.moveTo(pointsOfLine.x1, pointsOfLine.y1);\n        const px21 = (pointsOfLine.x2 - pointsOfLine.x1) / 3;\n        ctx.bezierCurveTo(\n          pointsOfLine.x1 + px21,\n          pointsOfLine.y1,\n          pointsOfLine.x2 - px21,\n          pointsOfLine.y2,\n          pointsOfLine.x2,\n          pointsOfLine.y2\n        );\n        ctx.stroke();\n      }\n      if (this.subType === 'arrow') {\n        this.drawArrowTips(ctx, pointsOfLine);\n      }\n    }\n    if (this.connectorShape === 'angled') {\n      //console.log('connStartObj', connStartObj, 'connEndObj', connEndObj);\n      //console.log('line', this.x1, this.y1, this.x2, this.y2);\n      let endAngle = 90;\n      let startAngle = 270;\n      let offset = 0;\n      let etype = 'f';\n      let stype = 'f';\n\n      if (pointsOfLine.x1 < pointsOfLine.x2) {\n        startAngle = 90;\n        endAngle = 270;\n      } else {\n        startAngle = 270;\n        endAngle = 90;\n      }\n      let sp = { x: pointsOfLine.x1, y: pointsOfLine.y1 },\n        ep = { x: pointsOfLine.x2, y: pointsOfLine.y2 };\n\n      if (connEndObj || connStartObj) {\n        offset = 30;\n\n        const threshold = 0.05;\n        if (this.connectorStart) {\n          if (Math.abs(this.connectorStart.ry - 0.5) <= threshold) {\n            sp = { x: pointsOfLine.x1, y: pointsOfLine.y1 };\n            startAngle = 180;\n            stype = 'b';\n          } else if (Math.abs(this.connectorStart.ry + 0.5) <= threshold) {\n            sp = { x: pointsOfLine.x1, y: pointsOfLine.y1 };\n            startAngle = 0;\n            stype = 'u';\n          } else if (Math.abs(this.connectorStart.rx - 0.5) <= threshold) {\n            sp = { x: pointsOfLine.x1, y: pointsOfLine.y1 };\n            startAngle = 90;\n            stype = 'r';\n          } else if (Math.abs(this.connectorStart.rx + 0.5) <= threshold) {\n            sp = { x: pointsOfLine.x1, y: pointsOfLine.y1 };\n            startAngle = 270;\n            stype = 'l';\n          }\n        }\n\n        if (this.connectorEnd) {\n          if (Math.abs(this.connectorEnd.ry - 0.5) <= threshold) {\n            ep = { x: pointsOfLine.x2, y: pointsOfLine.y2 };\n            endAngle = 180;\n            etype = 'b';\n          } else if (Math.abs(this.connectorEnd.ry + 0.5) <= threshold) {\n            ep = { x: pointsOfLine.x2, y: pointsOfLine.y2 };\n            endAngle = 0;\n            etype = 'u';\n          } else if (Math.abs(this.connectorEnd.rx - 0.5) <= threshold) {\n            ep = { x: pointsOfLine.x2, y: pointsOfLine.y2 };\n            endAngle = 90;\n            etype = 'r';\n          } else if (Math.abs(this.connectorEnd.rx + 0.5) <= threshold) {\n            ep = { x: pointsOfLine.x2, y: pointsOfLine.y2 };\n            endAngle = 270;\n            etype = 'l';\n          }\n        }\n      }\n\n      if (this.tips === 'start' || this.tips === 'both')\n        this.drawArrowTip(ctx, sp, startAngle);\n      if (this.tips === 'end' || this.tips === 'both')\n        this.drawArrowTip(ctx, ep, endAngle);\n\n      this.drawBody(\n        ctx,\n        pointsOfLine,\n        offset,\n        stype,\n        etype,\n        connStartObj,\n        connEndObj\n      );\n    }\n  }\n\n  drawBeizerBody(\n    ctx,\n    p,\n    offset,\n    stype,\n    etype,\n    connStartObj,\n    connEndObj,\n    startAngle,\n    endAngle\n  ) {\n    offset = 20;\n    let start;\n    let cp1;\n    let cp2;\n    let end;\n    let newstart;\n    let newend;\n    let fPoints;\n\n    start = { x: p.x1, y: p.y1 };\n    end = { x: p.x2, y: p.y2 };\n    newstart = { x: start.x + offset, y: start.y };\n    newend = { x: end.x - offset, y: end.y };\n    cp2 = { x: p.x1, y: p.y2 };\n    cp1 = { x: p.x2, y: p.y1 };\n\n    if (stype === 'f' && etype === 'f') {\n      if (p.x1 < p.x2) {\n        newstart = { x: start.x + offset, y: start.y };\n        newend = { x: end.x - offset, y: end.y };\n      } else {\n        newstart = { x: start.x - offset, y: start.y };\n        newend = { x: end.x + offset, y: end.y };\n      }\n      cp2 = { x: newstart.x, y: newend.y };\n      cp1 = { x: newend.x, y: newstart.y };\n    }\n\n    if (stype === 'f' && etype !== 'f') {\n      if (etype === 'r') {\n        newend = { x: end.x + offset, y: end.y };\n        if (p.x1 < p.x2) {\n          newstart = { x: start.x + offset, y: start.y };\n          cp1 = { x: newend.x, y: newstart.y };\n          cp2 = cp1;\n        } else {\n          newstart = { x: start.x - offset, y: start.y };\n          cp2 = { x: newstart.x, y: newend.y };\n          cp1 = { x: newend.x, y: newstart.y };\n        }\n      }\n      if (etype === 'l') {\n        if (p.x1 < p.x2) {\n          newstart = { x: start.x + offset, y: start.y };\n          newend = { x: end.x - offset, y: end.y };\n          cp2 = { x: newstart.x, y: newend.y };\n          cp1 = { x: newend.x, y: newstart.y };\n        } else {\n          newstart = { x: start.x - offset, y: start.y };\n          newend = { x: end.x - offset, y: end.y };\n          cp2 = { x: newstart.x, y: newend.y };\n          cp1 = { x: newend.x, y: newstart.y };\n          cp2 = cp1;\n        }\n      }\n      if (etype === 'u') {\n        newend = { x: end.x, y: end.y - offset };\n        if (start.y < end.y) {\n          newstart = { x: start.x, y: start.y + offset };\n          cp1 = { x: newstart.x, y: newend.y };\n          cp2 = { x: newend.x, y: newstart.y };\n          startAngle = 180;\n        } else {\n          newstart = { x: start.x, y: start.y - offset };\n\n          cp2 = { x: newstart.x, y: newend.y };\n          cp1 = { x: newend.x, y: newstart.y };\n          cp1 = cp2;\n\n          startAngle = 0;\n        }\n      }\n\n      if (etype === 'b') {\n        newend = { x: end.x, y: end.y + offset };\n        if (p.y1 < p.y2) {\n          newstart = { x: start.x, y: start.y + offset };\n          cp2 = { x: newstart.x, y: newend.y };\n          cp1 = cp2;\n          startAngle = 180;\n        } else {\n          newstart = { x: start.x, y: start.y - offset };\n          cp1 = { x: newstart.x, y: newend.y };\n          cp2 = { x: newend.x, y: newstart.y };\n          startAngle = 0;\n        }\n      }\n    } else if (stype !== 'f' && etype === 'f') {\n      if (stype === 'r') {\n        newstart = { x: start.x + offset, y: start.y };\n        if (start.x < end.x) {\n          newend = { x: end.x - offset, y: end.y };\n          cp1 = { x: newend.x, y: newstart.y };\n          cp2 = { x: newstart.x, y: newend.y };\n        } else {\n          newend = { x: end.x + offset, y: end.y };\n          cp1 = { x: newend.x, y: newstart.y };\n          cp2 = { x: newstart.x, y: newend.y };\n          cp1 = cp2;\n        }\n      } else if (stype === 'l') {\n        newstart = { x: start.x - offset, y: start.y };\n        if (start.x < end.x) {\n          newend = { x: end.x - offset, y: end.y };\n          cp1 = { x: newend.x, y: newstart.y };\n          cp2 = { x: newstart.x, y: newend.y };\n          cp1 = cp2;\n        } else {\n          newend = { x: end.x + offset, y: end.y };\n          cp1 = { x: newend.x, y: newstart.y };\n          cp2 = { x: newstart.x, y: newend.y };\n        }\n      } else if (stype === 'u') {\n        newstart = { x: start.x, y: start.y - offset };\n        if (start.y < end.y) {\n          newend = { x: end.x, y: end.y - offset };\n          cp2 = { x: newend.x, y: newstart.y };\n          cp1 = cp2;\n          endAngle = 0;\n        } else {\n          newend = { x: end.x, y: end.y + offset };\n          cp1 = { x: newstart.x, y: newend.y };\n          cp2 = { x: newend.x, y: newstart.y };\n          endAngle = 180;\n        }\n      } else if (stype === 'b') {\n        newstart = { x: start.x, y: start.y + offset };\n\n        if (start.y < end.y) {\n          newend = { x: end.x, y: end.y - offset };\n          cp1 = { x: newstart.x, y: newend.y };\n          cp2 = { x: newend.x, y: newstart.y };\n          endAngle = 0;\n        } else {\n          newend = { x: end.x, y: end.y + offset };\n          cp1 = { x: newend.x, y: newstart.y };\n          cp2 = cp1;\n          endAngle = 180;\n        }\n      }\n    } else if (stype !== 'f' && etype !== 'f') {\n      if (stype == 'r' && etype === 'l') {\n        if (start.x < end.x) {\n          cp2 = { x: newstart.x, y: newend.y };\n          cp1 = { x: newend.x, y: newstart.y };\n        } else {\n          cp1 = { x: newstart.x, y: newend.y };\n          cp2 = { x: newend.x, y: newstart.y };\n        }\n      }\n      if (stype == 'r' && etype === 'r') {\n        newend = { x: end.x + offset, y: end.y };\n\n        if (start.x < end.x) {\n          cp1 = { x: newend.x, y: newstart.y };\n          cp2 = cp1;\n        } else {\n          cp1 = { x: newstart.x, y: newend.y };\n          cp2 = cp1;\n        }\n      }\n      if (stype == 'r' && etype === 'u') {\n        newstart = { x: start.x + offset, y: start.y };\n        newend = { x: end.x, y: end.y - offset };\n        if (start.y < end.y) {\n          if (start.x > end.x) {\n            cp2 = { x: newstart.x, y: newend.y };\n            cp1 = cp2;\n          } else {\n            cp1 = { x: newend.x, y: newstart.y };\n            cp2 = cp1;\n          }\n        } else {\n          cp1 = { x: newstart.x, y: newend.y };\n          cp2 = cp1;\n        }\n      }\n      if (stype == 'r' && etype === 'b') {\n        newend = { x: end.x, y: end.y + offset };\n        if (start.y < end.y) {\n          cp2 = { x: newstart.x, y: newend.y };\n          cp1 = cp2;\n        } else {\n          if (start.x > end.x) {\n            cp1 = { x: newstart.x, y: newend.y };\n            cp2 = cp1;\n          } else {\n            cp2 = { x: newend.x, y: newstart.y };\n            cp1 = cp2;\n          }\n        }\n      }\n      if (stype == 'l') {\n        newstart = { x: start.x - offset, y: start.y };\n        if (etype === 'r') {\n          newend = { x: end.x + offset, y: end.y };\n          if (start.x < end.x) {\n            cp2 = { x: newend.x, y: newstart.y };\n            cp1 = { x: newstart.x, y: newend.y };\n          } else {\n            cp2 = { x: newstart.x, y: newend.y };\n            cp1 = { x: newend.x, y: newstart.y };\n          }\n        }\n        if (etype === 'l') {\n          if (start.x < end.x) {\n            cp1 = { x: newstart.x, y: newend.y };\n            cp2 = cp1;\n          } else {\n            cp2 = { x: newend.x, y: newstart.y };\n            cp1 = cp2;\n          }\n        }\n        if (etype === 'u') {\n          newend = { x: end.x, y: end.y - offset };\n          if (start.y < end.y) {\n            if (start.x < end.x) {\n              cp2 = { x: newstart.x, y: newend.y };\n              cp1 = cp2;\n            } else {\n              cp1 = { x: newend.x, y: newstart.y };\n              cp2 = cp1;\n            }\n          } else {\n            if (start.x < end.x) {\n              cp1 = { x: newstart.x, y: newend.y };\n              cp2 = cp1;\n            } else {\n              cp2 = { x: newstart.x, y: newend.y };\n              cp1 = { x: newend.x, y: newstart.y };\n            }\n          }\n        }\n        if (etype === 'b') {\n          newend = { x: end.x, y: end.y + offset };\n          if (start.y < end.y) {\n            cp2 = { x: newstart.x, y: newend.y };\n            cp1 = cp2;\n          } else {\n            if (start.x < end.x) {\n              cp1 = { x: newstart.x, y: newend.y };\n              cp2 = cp1;\n            } else {\n              cp2 = { x: newend.x, y: newstart.y };\n              cp1 = cp2;\n            }\n          }\n        }\n      }\n      if (stype == 'u') {\n        newstart = { x: start.x, y: start.y - offset };\n        if (etype === 'r') {\n          newend = { x: end.x + offset, y: end.y };\n          if (start.x < end.x) {\n            if (start.y < end.y) {\n              cp2 = { x: newend.x, y: newstart.y };\n              cp1 = cp2;\n            } else {\n              cp2 = { x: newend.x, y: newstart.y };\n              cp1 = { x: newstart.x, y: newend.y };\n            }\n          } else {\n            if (start.y < end.y) {\n              cp2 = { x: newstart.x, y: newend.y };\n              cp1 = { x: newend.x, y: newstart.y };\n            } else {\n              cp1 = { x: newstart.x, y: newend.y };\n              cp2 = cp1;\n            }\n          }\n        }\n        if (etype === 'l') {\n          newend = { x: end.x - offset, y: end.y };\n          endAngle = 90;\n\n          if (start.x < end.x) {\n            if (start.y < end.y) {\n              //cp1={x:newstart.x, y:newend.y};\n              cp2 = { x: newend.x, y: newstart.y };\n              cp1 = cp2;\n            } else {\n              cp2 = { x: newend.x, y: newstart.y };\n              cp1 = { x: newstart.x, y: newend.y };\n            }\n          } else {\n            //cp1={x:newstart.x, y:newend.y};\n            cp2 = { x: newend.x, y: newstart.y };\n            cp1 = cp2;\n          }\n        }\n        if (etype === 'u') {\n          newend = { x: end.x, y: end.y - offset };\n          if (start.y < end.y) {\n            if (start.x < end.x) {\n              //cp2={x:newstart.x, y:newend.y};\n              cp1 = { x: newend.x, y: newstart.y };\n              cp2 = cp1;\n            } else {\n              //cp2 = { x: newstart.x, y: newend.y };\n              cp1 = { x: newend.x, y: newstart.y };\n              cp2 = cp1;\n            }\n          } else {\n            cp1 = { x: newstart.x, y: newend.y };\n            //cp2={x:newend.x, y:newstart.y};\n            cp2 = cp1;\n          }\n        }\n        if (etype === 'b') {\n          newend = { x: end.x, y: end.y + offset };\n          if (start.y < end.y) {\n            //newstart={x:start.x+offset, y:start.y};\n            cp2 = { x: newstart.x, y: newend.y };\n            cp1 = { x: newend.x, y: newstart.y };\n            //cp2=cp1;\n          } else {\n            if (start.x < end.x) {\n              cp1 = { x: newstart.x, y: newend.y };\n              //cp2={x:newend.x, y:newstart.y};\n              cp2 = cp1;\n            } else {\n              cp2 = { x: newend.x, y: newstart.y };\n              cp1 = cp2;\n            }\n          }\n        }\n      }\n      if (stype == 'b') {\n        newstart = { x: start.x, y: start.y + offset };\n        if (etype === 'r') {\n          newend = { x: end.x + offset, y: end.y };\n          if (start.x < end.x) {\n            if (start.y < end.y) {\n              cp1 = { x: newstart.x, y: newend.y };\n              //cp2={x:newend.x, y:newstart.y};\n              cp2 = cp1;\n            } else {\n              //cp1={x:newstart.x, y:newend.y};\n              cp2 = { x: newend.x, y: newstart.y };\n              cp1 = cp2;\n            }\n          } else {\n            if (start.y < end.y) {\n              //cp1={x:newstart.x, y:newend.y};\n              cp2 = { x: newend.x, y: newstart.y };\n              cp1 = cp2;\n            } else {\n              //newstart={x:start.x+offset, y:start.y};\n              cp1 = { x: newstart.x, y: newend.y };\n              cp2 = { x: newend.x, y: newstart.y };\n              cp1 = cp2;\n            }\n          }\n        }\n        if (etype === 'l') {\n          //newend={x:end.x-offset, y:end.y};\n          if (start.x < end.x) {\n            if (start.y < end.y) {\n              cp1 = { x: newstart.x, y: newend.y };\n              //cp2={x:newend.x, y:newstart.y};\n              cp2 = cp1;\n            } else {\n              cp2 = { x: newend.x, y: newstart.y };\n              cp1 = cp2;\n            }\n          } else {\n            if (start.y < end.y) {\n              cp1 = { x: newstart.x, y: newend.y };\n              cp2 = { x: newend.x, y: newstart.y };\n            } else {\n              //cp1={x:newstart.x, y:newend.y};\n              cp2 = { x: newend.x, y: newstart.y };\n              cp1 = cp2;\n            }\n          }\n        }\n        if (etype === 'u') {\n          newend = { x: end.x, y: end.y - offset };\n          if (start.y < end.y) {\n            if (start.x < end.x) {\n              cp1 = { x: newstart.x, y: newend.y };\n              cp2 = { x: newend.x, y: newstart.y };\n            } else {\n              cp1 = { x: newstart.x, y: newend.y };\n              cp2 = { x: newend.x, y: newstart.y };\n            }\n          } else {\n            cp2 = { x: newstart.x, y: newend.y };\n            cp1 = { x: newend.x, y: newstart.y };\n          }\n        }\n        if (etype === 'b') {\n          newend = { x: end.x, y: end.y + offset };\n          if (start.y < end.y) {\n            //newstart={x:start.x+offset, y:start.y};\n            cp2 = { x: newstart.x, y: newend.y };\n            //cp1={x:newend.x, y:newstart.y};\n            cp1 = cp2;\n          } else {\n            if (start.x < end.x) {\n              //cp1 = { x: newstart.x, y: newend.y };\n              cp2 = { x: newend.x, y: newstart.y };\n              cp1 = cp2;\n            } else {\n              cp2 = { x: newend.x, y: newstart.y };\n              cp1 = cp2;\n            }\n          }\n        }\n      }\n    }\n    fPoints = {\n      pre: start,\n      start: newstart,\n      cp1: cp1,\n      cp2: cp2,\n      end: newend,\n      post: end,\n    };\n\n    this.drawBZSegments(ctx, fPoints);\n\n    //subtype?\n    if (this.tips === 'start' || this.tips === 'both')\n      this.drawArrowTip(ctx, start, startAngle);\n    if (this.tips === 'end' || this.tips === 'both')\n      this.drawArrowTip(ctx, end, endAngle);\n  }\n\n  drawBZSegments(ctx, fPoints) {\n    ctx.beginPath();\n    ctx.moveTo(fPoints.pre.x, fPoints.pre.y);\n    ctx.lineTo(fPoints.start.x, fPoints.start.y);\n\n    ctx.moveTo(fPoints.start.x, fPoints.start.y);\n    ctx.bezierCurveTo(\n      fPoints.cp1.x,\n      fPoints.cp1.y,\n      fPoints.cp2.x,\n      fPoints.cp2.y,\n      fPoints.end.x,\n      fPoints.end.y\n    );\n\n    ctx.moveTo(fPoints.post.x, fPoints.post.y);\n    ctx.lineTo(fPoints.end.x, fPoints.end.y);\n    ctx.strokeStyle = this.stroke;\n\n    ctx.stroke();\n  }\n  drawBody(ctx, p, offset, stype, etype, connStartObj, connEndObj) {\n    const { x1, x2, y1, y2 } = p;\n    let { x11, x22, y11, y22 } = p;\n    const zoom = this.canvas.getZoom();\n\n    switch (stype) {\n      case 'b':\n        x11 = x1;\n        y11 = y1 + offset;\n        break;\n      case 'u':\n        x11 = x1;\n        y11 = y1 - offset;\n        break;\n      case 'r':\n        x11 = x1 + offset;\n        y11 = y1;\n        break;\n      case 'l':\n        x11 = x1 - offset;\n        y11 = y1;\n        break;\n      default:\n        x11 = x1;\n        y11 = y1;\n    }\n    switch (etype) {\n      case 'b':\n        x22 = x2;\n        y22 = y2 + offset;\n        break;\n      case 'u':\n        x22 = x2;\n        y22 = y2 - offset;\n        break;\n      case 'r':\n        x22 = x2 + offset;\n        y22 = y2;\n        break;\n      case 'l':\n        x22 = x2 - offset;\n        y22 = y2;\n        break;\n      default:\n        x22 = x2;\n        y22 = y2;\n    }\n\n    let m1, m2;\n    let ms = { x: x11, y: y11 };\n    const me = { x: x22, y: y22 };\n    let keyPoints = [];\n    const margin = 4;\n    let yAdjustment;\n    m1 = { x: (x11 + x22) / 2, y: y11 };\n    m2 = { x: (x11 + x22) / 2, y: y22 };\n    keyPoints = [ms, m1, m2, me];\n    if (stype === 'f' && etype !== 'f') {\n      yAdjustment = connEndObj.height * connEndObj.scaleY;\n      let met;\n      if (etype === 'r') {\n        met = { x: me.x - offset, y: me.y };\n        if (x1 < x2) {\n          const msa = { x: ms.x + offset, y: ms.y };\n          const midy =\n            y1 < y2\n              ? -yAdjustment - margin * zoom\n              : yAdjustment + margin * zoom;\n          m1 = { x: msa.x, y: y22 + midy };\n          m2 = { x: x22, y: m1.y };\n          keyPoints = [ms, msa, m1, m2, me];\n        } //otherwise, default behavior\n        keyPoints.push(met);\n      } else if (etype === 'l') {\n        met = { x: me.x + offset, y: me.y };\n        if (x1 > x2) {\n          ms = { x: x11, y: y11 };\n          const msa = { x: ms.x - offset, y: ms.y };\n          const midy =\n            y1 < y2\n              ? -yAdjustment - margin * zoom\n              : yAdjustment + margin * zoom;\n          m1 = { x: msa.x, y: y22 + midy };\n          m2 = { x: x22, y: m1.y };\n          keyPoints = [ms, msa, m1, m2, me];\n        }\n        keyPoints.push(met);\n      } else if (etype === 'u') {\n        met = { x: me.x, y: me.y + offset };\n        keyPoints.push(met);\n      } else if (etype === 'b') {\n        met = { x: me.x, y: me.y - offset };\n        keyPoints.push(met);\n      }\n    } else if (stype !== 'f' && etype === 'f') {\n      if (!connStartObj) {\n        yAdjustment = 10;\n      } else {\n        yAdjustment = connStartObj.height * connStartObj.scaleY;\n      }\n      const midy =\n        y1 < y2 ? -yAdjustment - margin * zoom : yAdjustment + margin * zoom;\n      let mst;\n      if (stype === 'l') {\n        mst = { x: ms.x + offset, y: ms.y };\n        if (x1 < x2) {\n          const msa = { x: me.x - offset, y: me.y };\n          m1 = { x: ms.x, y: ms.y + midy };\n          m2 = { x: msa.x, y: m1.y };\n          keyPoints = [ms, m1, m2, msa, me];\n        }\n        keyPoints.unshift(mst);\n      } else if (stype === 'r') {\n        mst = { x: ms.x - offset, y: ms.y };\n        if (x1 > x2) {\n          const msa = { x: me.x + offset, y: me.y };\n          m1 = { x: ms.x, y: ms.y + midy };\n          m2 = { x: msa.x, y: m1.y };\n          keyPoints = [ms, m1, m2, msa, me];\n        }\n        keyPoints.unshift(mst);\n      } else if (stype === 'u') {\n        mst = { x: ms.x, y: ms.y + offset };\n        keyPoints.unshift(mst);\n      } else if (stype === 'b') {\n        mst = { x: ms.x, y: ms.y - offset };\n        keyPoints.unshift(mst);\n      }\n    } else if (stype !== 'f' && etype !== 'f') {\n      yAdjustment = connEndObj.height * connEndObj.scaleY;\n      const midy =\n        y1 < y2 ? -yAdjustment - margin * zoom : yAdjustment + margin * zoom;\n      if (stype == 'r' && etype === 'l') {\n        const mst = { x: ms.x - offset, y: ms.y };\n        const met = { x: me.x + offset, y: me.y };\n        if (x1 > x2) {\n          m1 = { x: ms.x, y: me.y + midy };\n          m2 = { x: me.x, y: m1.y };\n          keyPoints = [mst, ms, m1, m2, me, met];\n        } else keyPoints = [mst, ms, m1, m2, me, met];\n      } else if (stype === 'l' && etype === 'r') {\n        const mst = { x: ms.x + offset, y: ms.y };\n        const met = { x: me.x - offset, y: me.y };\n        if (x1 < x2) {\n          m1 = { x: ms.x, y: me.y + midy };\n          m2 = { x: me.x, y: m1.y };\n          keyPoints = [mst, ms, m1, m2, me, met];\n        } else keyPoints = [mst, ms, m1, m2, me, met];\n      } else if (stype === 'r' && etype === 'r') {\n        const mst = { x: ms.x - offset, y: ms.y };\n        const met = { x: me.x - offset, y: me.y };\n        if (x1 < x2) {\n          m1 = { x: ms.x, y: me.y + midy };\n          m2 = { x: me.x, y: m1.y };\n          keyPoints = [mst, ms, m1, m2, me, met];\n        } else {\n          m1 = { x: ms.x, y: me.y };\n          keyPoints = [mst, ms, m1, me, met];\n        }\n      } else if (stype === 'l' && etype === 'l') {\n        const mst = { x: ms.x + offset, y: ms.y };\n        const met = { x: me.x + offset, y: me.y };\n        if (x1 < x2) {\n          m1 = { x: ms.x, y: me.y };\n          keyPoints = [mst, ms, m1, me, met];\n        } else {\n          m1 = { x: ms.x, y: me.y + midy };\n          m2 = { x: me.x, y: m1.y };\n          keyPoints = [mst, ms, m1, m2, me, met];\n        }\n      } else if (stype === 'u' && etype === 'l') {\n        const mst = { x: ms.x, y: ms.y + offset };\n        const met = { x: me.x + offset, y: me.y };\n        if (x1 > x2) {\n          if (y1 > y2) {\n            m1 = { x: ms.x, y: me.y - midy };\n            m2 = { x: me.x, y: m1.y };\n            keyPoints = [mst, ms, m1, m2, me, met];\n          } else {\n            m1 = { x: me.x, y: ms.y };\n            keyPoints = [mst, ms, m1, me, met];\n          }\n        } else keyPoints = [mst, ms, m1, m2, me, met];\n      } else if (stype === 'u' && etype === 'r') {\n        const mst = { x: ms.x, y: ms.y + offset };\n        const met = { x: me.x - offset, y: me.y };\n        if (x1 < x2) {\n          if (y1 > y2) {\n            m1 = { x: ms.x, y: me.y - yAdjustment };\n            m2 = { x: me.x, y: m1.y };\n            keyPoints = [mst, ms, m1, m2, me, met];\n          } else {\n            m1 = { x: me.x, y: ms.y };\n            keyPoints = [mst, ms, m1, me, met];\n          }\n        } else keyPoints = [mst, ms, m1, m2, me, met];\n      } else if (stype === 'b' && etype === 'l') {\n        const mst = { x: ms.x, y: ms.y - offset };\n        const met = { x: me.x + offset, y: me.y };\n        if (x1 > x2) {\n          m1 = { x: me.x, y: ms.y };\n          keyPoints = [mst, ms, m1, me, met];\n        } else keyPoints = [mst, ms, m1, m2, me, met];\n      } else if (stype === 'b' && etype === 'r') {\n        const mst = { x: ms.x, y: ms.y - offset };\n        const met = { x: me.x - offset, y: me.y };\n        if (x1 < x2) {\n          m1 = { x: me.x, y: ms.y };\n          keyPoints = [mst, ms, m1, me, met];\n        } else keyPoints = [mst, ms, m1, m2, me, met];\n      } else if (stype === 'r' && etype === 'u') {\n        const mst = { x: ms.x - offset, y: ms.y };\n        const met = { x: me.x, y: me.y + offset };\n        if (x1 > x2) {\n          if (y1 > y2) m1 = { x: ms.x, y: me.y - midy };\n          else m1 = { x: ms.x, y: me.y + midy };\n          m2 = { x: me.x, y: m1.y };\n          keyPoints = [mst, ms, m1, m2, me, met];\n        } else {\n          if (y1 > y2) keyPoints = [mst, ms, m1, m2, me, met];\n          else {\n            m1 = { x: me.x, y: ms.y };\n            keyPoints = [mst, ms, m1, me, met];\n          }\n        }\n      } else if (stype === 'l' && etype === 'u') {\n        const mst = { x: ms.x + offset, y: ms.y };\n        const met = { x: me.x, y: me.y + offset };\n        if (x1 < x2) {\n          m1 = { x: ms.x, y: me.y - yAdjustment };\n          m2 = { x: me.x, y: m1.y };\n          keyPoints = [mst, ms, m1, m2, me, met];\n        } else {\n          if (y1 < y2) {\n            m1 = { x: me.x, y: ms.y };\n            keyPoints = [mst, ms, m1, me, met];\n          } else keyPoints = [mst, ms, m1, m2, me, met];\n        }\n      } else if (stype === 'l' && etype === 'b') {\n        const mst = { x: ms.x + offset, y: ms.y };\n        const met = { x: me.x, y: me.y - offset };\n        if (x1 < x2) {\n          if (y1 < y2) m1 = { x: ms.x, y: me.y - midy };\n          else m1 = { x: ms.x, y: me.y + midy };\n          m2 = { x: me.x, y: m1.y };\n          keyPoints = [mst, ms, m1, m2, me, met];\n        } else keyPoints = [mst, ms, m1, m2, me, met];\n      } else if (stype === 'r' && etype === 'b') {\n        const mst = { x: ms.x - offset, y: ms.y };\n        const met = { x: me.x, y: me.y - offset };\n        if (x1 > x2) {\n          if (y1 < y2) m1 = { x: ms.x, y: me.y - midy };\n          else m1 = { x: ms.x, y: me.y + midy };\n          m2 = { x: me.x, y: m1.y };\n          keyPoints = [mst, ms, m1, m2, me, met];\n        } else keyPoints = [mst, ms, m1, m2, me, met];\n      } else {\n        let mst, met;\n        if (stype === 'u') mst = { x: ms.x, y: ms.y + offset };\n        else mst = { x: ms.x, y: ms.y - offset };\n\n        if (etype === 'u') met = { x: me.x, y: me.y + offset };\n        else met = { x: me.x, y: me.y - offset };\n        keyPoints = [mst, ms, m1, m2, me, met];\n      }\n    }\n    this.drawSegments(ctx, keyPoints);\n  }\n\n  drawSegments(ctx, keyPoints) {\n    for (let i = 0; i < keyPoints.length - 1; i++) {\n      ctx.beginPath();\n      ctx.moveTo(keyPoints[i].x, keyPoints[i].y);\n      ctx.lineTo(keyPoints[i + 1].x, keyPoints[i + 1].y);\n      ctx.strokeStyle = this.stroke;\n      ctx.stroke();\n    }\n  }\n  drawArrowTip(ctx, p, fixAngle = -1) {\n    const radians = Math.PI / 180;\n    const angle = fixAngle;\n    const tipAngle = 22.5;\n    const currZoom = this.canvas.getZoom();\n    const len =\n      currZoom > 1.0\n        ? (12 + this.strokeWidth * 2) / currZoom\n        : 12 + this.strokeWidth * 2;\n    ctx.beginPath();\n    ctx.setLineDash([]);\n    ctx.strokeStyle = this.stroke;\n    ctx.fillStyle = this.stroke;\n    {\n      ctx.moveTo(p.x, p.y);\n      ctx.lineTo(\n        p.x + len * Math.sin((180 - angle - tipAngle) * radians),\n        p.y + len * Math.cos((180 - angle - tipAngle) * radians)\n      );\n      ctx.moveTo(p.x, p.y);\n      ctx.lineTo(\n        p.x + len * Math.sin((180 - angle + tipAngle) * radians),\n        p.y + len * Math.cos((180 - angle + tipAngle) * radians)\n      );\n    }\n    ctx.stroke();\n  }\n  drawArrowTips(ctx, p, fixAngle) {\n    const radians = Math.PI / 180;\n    const angle = fixAngle || this.getArrowAngle();\n    const tipAngle = 22.5;\n    const currZoom = this.canvas.getZoom();\n    const len =\n      currZoom > 1.0\n        ? (12 + this.strokeWidth * 2) / currZoom\n        : 12 + this.strokeWidth * 2;\n    ctx.beginPath();\n    ctx.setLineDash([]);\n    ctx.strokeStyle = this.stroke;\n    ctx.fillStyle = this.stroke;\n    if (this.tips === 'end' || this.tips === 'both') {\n      ctx.moveTo(p.x2, p.y2);\n      ctx.lineTo(\n        p.x2 - len * Math.sin((180 - angle - tipAngle) * radians),\n        p.y2 - len * Math.cos((180 - angle - tipAngle) * radians)\n      );\n      ctx.moveTo(p.x2, p.y2);\n      ctx.lineTo(\n        p.x2 - len * Math.sin((180 - angle + tipAngle) * radians),\n        p.y2 - len * Math.cos((180 - angle + tipAngle) * radians)\n      );\n    }\n    if (this.tips === 'start' || this.tips === 'both') {\n      ctx.moveTo(p.x1, p.y1);\n      ctx.lineTo(\n        p.x1 + len * Math.sin((180 - angle - tipAngle) * radians),\n        p.y1 + len * Math.cos((180 - angle - tipAngle) * radians)\n      );\n      ctx.moveTo(p.x1, p.y1);\n      ctx.lineTo(\n        p.x1 + len * Math.sin((180 - angle + tipAngle) * radians),\n        p.y1 + len * Math.cos((180 - angle + tipAngle) * radians)\n      );\n    }\n    ctx.stroke();\n  }\n  setConnectorObj(targetObject, pointer, isInOneObj, isStart) {\n    return;\n  }\n\n  positionProcess(fabricObject, isStart) {\n    const offsetX = (fabricObject.x1 + fabricObject.x2) / 2;\n    const offsetY = (fabricObject.y1 + fabricObject.y2) / 2;\n    let x, y;\n    if (isStart) {\n      x = fabricObject.x1 - offsetX;\n      y = fabricObject.y1 - offsetY;\n    }\n    if (!isStart) {\n      x = fabricObject.x2 - offsetX;\n      y = fabricObject.y2 - offsetY;\n    }\n    // recalculate control's coordinate by viewportTransform and line's transform matrix\n    if (\n      this.canvas &&\n      this.canvas.viewportTransform &&\n      fabricObject.calcTransformMatrix\n    ) {\n      const matrix = multiplyTransformMatrices(\n        this.canvas.viewportTransform,\n        fabricObject.calcTransformMatrix()\n      );\n      //@ts-ignore\n      return transformPoint({ x, y }, matrix);\n    }\n  }\n  mousedownProcess(transformData, eventData, isStart) {\n    console.log('mousedownProcess');\n    return;\n  }\n  mouseupProcess(transformData, eventData, isStart) {\n    const { target } = transformData;\n    if (target.locked) return;\n\n    this.canvas.arrowMxy = null;\n\n    let oldConnStartObj;\n    let oldConnEndObj;\n    let connStartId;\n    let connEndId;\n    const pointer = this.canvas.getPointer(eventData);\n    const targetObject = this.canvas.getTopObjectByPointer(pointer, true, true);\n    if (target.connectorStart) {\n      oldConnStartObj = this.canvas.findById(target.connectorStart._id);\n      connStartId = target.connectorStart._id;\n    }\n    if (target.connectorEnd) {\n      oldConnEndObj = this.canvas.findById(target.connectorEnd._id);\n      connEndId = target.connectorEnd._id;\n    }\n\n    if (targetObject) {\n      if (\n        oldConnStartObj &&\n        oldConnEndObj &&\n        oldConnStartObj._id === oldConnEndObj._id\n      ) {\n        /* arrow inside one widget */\n        target.setConnectorObj(targetObject, pointer, true, true);\n      } else if (isStart) {\n        if (!connStartId) {\n          /* arrow start obj is empty, change the start connect to targetObject */\n          target.setConnectorObj(targetObject, pointer, false, true);\n        } else if (connStartId !== targetObject._id) {\n          /* arrow start obj is not empty, modify the start connect to targetObject */\n          target.setConnectorObj(targetObject, pointer, false, true);\n        } else {\n          /* arrow start obj is targetObject but position of start point changed */\n          target.setConnectorObj(targetObject, pointer, false, true);\n        }\n        fromnull = false;\n      } else {\n        if (!connEndId) {\n          /* arrow start obj is empty, change the start connect to targetObject */\n          target.setConnectorObj(targetObject, pointer, false, false);\n        } else if (connEndId !== targetObject._id) {\n          /* arrow start obj is not empty, modify the start connect to targetObject */\n          target.setConnectorObj(targetObject, pointer, false, false);\n        } else {\n          /* arrow start obj is targetObject but position of start point changed */\n          target.setConnectorObj(targetObject, pointer, false, false);\n        }\n        tonull = false;\n      }\n    } else {\n      /* move the arrow start circle to empty place */\n      this.canvas.setActiveObject(target);\n      if (\n        oldConnStartObj &&\n        oldConnEndObj &&\n        oldConnStartObj._id === oldConnEndObj._id\n      ) {\n        target.removeArrowfromConnectObj(oldConnStartObj);\n        target.connectorStart = null;\n        target.connectorEnd = null;\n        tonull = true;\n        fromnull = true;\n      } else if (oldConnStartObj && isStart) {\n        target.removeArrowfromConnectObj(oldConnStartObj);\n        target.connectorStart = null;\n        fromnull = true;\n      } else if (oldConnEndObj && !isStart) {\n        target.removeArrowfromConnectObj(oldConnEndObj);\n        target.connectorEnd = null;\n        tonull = true;\n      }\n      if (isStart)\n        target.set({\n          x1: pointer.x,\n          y1: pointer.y,\n        });\n      if (!isStart)\n        target.set({\n          x2: pointer.x,\n          y2: pointer.y,\n        });\n    }\n    oldConnStartObj = null;\n    oldConnEndObj = null;\n    target.setCoords();\n    this.canvas.requestRenderAll();\n    target.zIndex = Date.now() * 100;\n    target.saveData('MODIFIED', [\n      'left',\n      'top',\n      'x1',\n      'y1',\n      'x2',\n      'y2',\n      'connectorStart',\n      'connectorEnd',\n      'scaleX',\n      'scaleY',\n      'zIndex',\n    ]);\n  }\n\n  calcDistanceToTarget(current, target) {\n    const { left, top, width, height, scaleX, scaleY } = target;\n    const range = 30;\n\n    const ml = { x: left - (width * scaleX) / 2, y: top };\n    const mr = { x: left + (width * scaleX) / 2, y: top };\n    const mt = { x: left, y: top - (height * scaleY) / 2 };\n    const mb = { x: left, y: top + (height * scaleY) / 2 };\n\n    if (current.y > mt.y && current.y < mb.y) {\n      if (current.x > ml.x && current.x < ml.x + range) {\n        return {\n          x: ml.x,\n          y: ml.y,\n          dot: 'mla',\n        };\n      }\n\n      if (current.x > mr.x - range && current.x < mr.x) {\n        return {\n          x: mr.x,\n          y: mr.y,\n          dot: 'mra',\n        };\n      }\n    }\n\n    if (current.x > ml.x && current.x < mr.x) {\n      if (current.y > mt.y && current.y < mt.y + range) {\n        return {\n          x: mt.x,\n          y: mt.y,\n          dot: 'mta',\n        };\n      }\n\n      if (current.y > mb.y - range && current.y < mb.y) {\n        return {\n          x: mb.x,\n          y: mb.y,\n          dot: 'mba',\n        };\n      }\n    }\n\n    return {\n      x: current.x - 5,\n      y: current.y - 5,\n      dot: 0,\n    };\n  }\n  calcDistanceToControlPoint(current, target) {\n    const { left, top, width, height, scaleX, scaleY } = target;\n    if (\n      this.canvas.getActiveObject() &&\n      (this.canvas.getActiveObject()?.obj_type === 'WBTextbox' ||\n        this.canvas.getActiveObject()?.obj_type === 'WBRectNotes' ||\n        this.canvas.getActiveObject()?.obj_type === 'WBCircleNotes' ||\n        this.canvas.getActiveObject()?.obj_type === 'WBShapeNotes')\n    ) {\n      if (this.canvas.getActiveObject().isEditing) {\n        this.canvas.getActiveObject().exitEditing();\n      }\n    }\n\n    const range = 30; // 计算范围时包括画布缩放\n\n    const ml = { x: left - (width * scaleX) / 2, y: top };\n    const mr = { x: left + (width * scaleX) / 2, y: top };\n    const mt = { x: left, y: top - (height * scaleY) / 2 };\n    const mb = { x: left, y: top + (height * scaleY) / 2 };\n\n    if (current.y > mt.y && current.y < mb.y) {\n      if (current.x > ml.x && current.x < ml.x + range) {\n        return {\n          x: ml.x,\n          y: ml.y,\n          dot: 'mla',\n        };\n      }\n\n      if (current.x > mr.x - range && current.x < mr.x) {\n        return {\n          x: mr.x,\n          y: mr.y,\n          dot: 'mra',\n        };\n      }\n    }\n\n    if (current.x > ml.x && current.x < mr.x) {\n      if (current.y > mt.y && current.y < mt.y + range) {\n        return {\n          x: mt.x,\n          y: mt.y,\n          dot: 'mta',\n        };\n      }\n\n      if (current.y > mb.y - range && current.y < mb.y) {\n        return {\n          x: mb.x,\n          y: mb.y,\n          dot: 'mba',\n        };\n      }\n    }\n\n    return {\n      x: current.x - 5,\n      y: current.y - 5,\n      dot: 0,\n    };\n  }\n}\n\nclassRegistry.setClass(Arrow);\n","import type { Canvas } from '../../canvas/Canvas';\nimport { getDocument } from '../../env';\nimport {\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 { TextStyleDeclaration } from '../Text/StyledText';\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.getPointer(e);\n    const diff = pointer.subtract(pos);\n    const enableRetinaScaling = canvas._isRetinaScaling();\n    const retinaScaling = target.getCanvasRetinaScaling();\n    const bbox = target.getBoundingRect(true);\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,\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    getDocument().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 (this.target.editable && !this.target.__corner && !e.defaultPrevented) {\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 { TClassProperties } from '../../typedefs';\nimport type { Text } from './Text';\n\nconst fontProperties = [\n  'fontSize',\n  'fontWeight',\n  'fontFamily',\n  'fontStyle',\n] as const;\n\nconst 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  '_id',\n  'editable',\n  'fixedScaleChange',\n  'fromCopy',\n  'isPanel',\n  'lines',\n  'locked',\n  'lockScalingFlip',\n  'maxHeight',\n  'obj_type',\n  'panelObj',\n  'preTop',\n  'relationship',\n  'shapeScaleX',\n  'shapeScaleY',\n  'subObjList',\n  'tempTop',\n  'userId',\n  'whiteboardId',\n  'zIndex',\n  'verticalAlign'\n] as const;\n\nexport const styleProperties = [\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<Text>> = {\n  _reNewline: /\\r?\\n/,\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: null,\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  /*boardx extend values*/\n  _id: '',\n  editable: true,\n  fixedScaleChange: true,\n  fromCopy: false,\n  isPanel: false,\n  lines: [],\n  locked: false,\n  lockScalingFlip: false,\n  maxHeight: 138,\n  obj_type: 'WBText',\n  panelObj: false,\n  preTop: 0,\n  relationship: [],\n  shapeScaleX: 0,\n  shapeScaleY: 0,\n  subObjList: '',\n  tempTop: 0,\n  userId: '',\n  whiteboardId: '',\n  zIndex: 0\n};\n","import type { ObjectEvents } from '../../EventTypeDefs';\nimport type {\n  FabricObjectProps,\n  SerializedObjectProps,\n  TProps,\n} from '../Object/types';\nimport { FabricObject } from '../Object/FabricObject';\nimport { styleProperties } from './constants';\n\n// @TODO properly type this\nexport type TextStyleDeclaration = Record<string, any>;\n\nexport type TextStyle = {\n  [line: number | string]: { [char: number | string]: TextStyleDeclaration };\n};\n\nexport abstract class StyledText<\n  Props extends TProps<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 = 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: string, lineIndex?: number): boolean {\n    if (!this.styles || !property || property === '') {\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: string) {\n    if (!this.styles || !property || property === '') {\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          // TODO: this shouldn't be necessary anymore with modern browsers\n          stylePropertyHasBeenSet = Object.prototype.hasOwnProperty.call(\n            styleObject,\n            property\n          );\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      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: string) {\n    if (!this.styles || !property || property === '') {\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, styles: TextStyleDeclaration) {\n    const { lineIndex, charIndex } = this.get2DCursorLocation(index);\n\n    if (!this._getLineStyle(lineIndex)) {\n      this._setLineStyle(lineIndex);\n    }\n\n    if (!this._getStyleDeclaration(lineIndex, charIndex)) {\n      this._setStyleDeclaration(lineIndex, charIndex, {});\n    }\n\n    return Object.assign(\n      this._getStyleDeclaration(lineIndex, charIndex) || {},\n      styles\n    );\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  ) {\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 (\n      (complete\n        ? this.getCompleteStyleDeclaration(lineIndex, charIndex)\n        : this._getStyleDeclaration(lineIndex, charIndex)) || {}\n    );\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 the reference, not a clone, of the style object for a given character\n   * @param {Number} lineIndex\n   * @param {Number} charIndex\n   * @return {Object} style object\n   */\n  _getStyleDeclaration(lineIndex: number, charIndex: number) {\n    const lineStyle = this.styles && this.styles[lineIndex];\n    if (!lineStyle) {\n      return null;\n    }\n    return 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(lineIndex: number, charIndex: number) {\n    const style = this._getStyleDeclaration(lineIndex, charIndex) || {},\n      styleObject: TextStyleDeclaration = {},\n      styleProps = (this.constructor as typeof StyledText)._styleProperties;\n    for (let i = 0; i < styleProps.length; i++) {\n      const prop = styleProps[i];\n      styleObject[prop] =\n        typeof style[prop] === 'undefined'\n          ? this[prop as keyof this]\n          : style[prop];\n    }\n    return styleObject;\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","// @ts-nocheck\nimport { config } from '../../config';\nimport { TSVGReviver } from '../../typedefs';\nimport { escapeXml } from '../../util/lang_string';\nimport { 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';\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() {\n    const offsets = this._getSVGLeftTopOffsets(),\n      textAndBg = this._getSVGTextAndBg(offsets.textTop, offsets.textLeft);\n    return this._wrapSVGTextAndBg(textAndBg);\n  }\n\n  toSVG(reviver: TSVGReviver) {\n    return this._createBaseSVGMarkup(this._toSVG(), {\n      reviver,\n      noStyle: true,\n      withShadow: true,\n    });\n  }\n\n  private _getSVGLeftTopOffsets() {\n    return {\n      textLeft: -this.width / 2,\n      textTop: -this.height / 2,\n      lineTop: this.getHeightOfLine(0),\n    };\n  }\n\n  private _wrapSVGTextAndBg({\n    textBgRects,\n    textSpans,\n  }: {\n    textSpans: string[];\n    textBgRects: string[];\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(textTopOffset: number, textLeftOffset: number) {\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    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    textSpans: string[],\n    lineIndex: number,\n    textLeftOffset: number,\n    textTopOffset: number\n  ) {\n    const lineHeight = this.getHeightOfLine(lineIndex),\n      isJustify = this.textAlign.indexOf('justify') !== -1,\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    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      charBox,\n      currentColor,\n      lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n    for (let j = 0; j < line.length; j++) {\n      charBox = 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 = charBox.left;\n        boxWidth = charBox.width;\n        lastColor = currentColor;\n      } else {\n        boxWidth += charBox.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(lineIndex: number) {\n    let lineTopOffset = 0,\n      lastHeight = 0;\n    for (let j = 0; j < lineIndex; j++) {\n      lineTopOffset += this.getHeightOfLine(j);\n    }\n    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(skipShadow?: boolean) {\n    return `${super.getSvgStyles(skipShadow)} white-space: pre;`;\n  }\n}\n","// @ts-nocheck\nimport { cache } from '../../cache';\nimport { DEFAULT_SVG_FONT_SIZE } from '../../constants';\nimport { ObjectEvents } from '../../EventTypeDefs';\nimport { TextStyle, TextStyleDeclaration, StyledText } from './StyledText';\nimport { SHARED_ATTRIBUTES } from '../../parser/attributes';\nimport { parseAttributes } from '../../parser/parseAttributes';\nimport type { Point } from '../../Point';\nimport type {\n  TCacheCanvasDimensions,\n  TClassProperties,\n  TFiller,\n} from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { graphemeSplit } from '../../util/lang_string';\nimport { createCanvasElement } from '../../util/misc/dom';\nimport {\n  hasStyleChanged,\n  stylesFromArray,\n  stylesToArray,\n} from '../../util/misc/textStyles';\nimport { getPathSegmentsInfo, getPointOnPath } from '../../util/path';\nimport { cacheProperties } from '../Object/FabricObject';\nimport { Path } from '../Path';\nimport { TextSVGExportMixin } from './TextSVGExportMixin';\nimport { applyMixins } from '../../util/applyMixins';\nimport type {\n  FabricObjectProps,\n  SerializedObjectProps,\n  TProps,\n} from '../Object/types';\nimport {\n  additionalProps,\n  textDefaultValues,\n  textLayoutProperties,\n} from './constants';\nimport { createTextboxDefaultControls } from '../../controls/commonControls';\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    measuringContext = createCanvasElement().getContext('2d');\n  }\n  return measuringContext;\n}\n\ntype TPathSide = 'left' | 'right';\n\ntype TPathAlign = 'baseline' | 'center' | 'ascender' | 'descender';\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<onPath = false> = {\n  width: number;\n  height: number;\n  kernedWidth: number;\n  left: number;\n  deltaY: number;\n} & (onPath extends true\n  ? {\n    // on path\n    renderLeft: number;\n    renderTop: number;\n    angle: number;\n  }\n  : Record<string, never>);\n\n// @TODO this is not complete\ninterface UniqueTextProps {\n  charSpacing: number;\n  direction: CanvasDirection;\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  oneLine: boolean;\n  path?: Path;\n}\n\nexport interface SerializedTextProps\n  extends SerializedObjectProps,\n  UniqueTextProps { }\n\nexport interface TextProps extends FabricObjectProps, UniqueTextProps { }\n\n/**\n * Text class\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#text}\n */\nexport class Text<\n  Props extends TProps<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   * 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  /*boardx custom function start*/\n\n  declare _id: string;\n\n  declare editable: boolean;\n\n  declare fixedScaleChange: boolean;\n\n  declare fromCopy: boolean;\n\n  declare isPanel: boolean;\n\n  declare lines: object[];\n\n  declare locked: boolean;\n\n  declare lockScalingFlip: boolean;\n\n  declare maxHeight: number;\n\n  declare obj_type: string;\n\n  declare panelObj: boolean;\n\n  declare preTop: number;\n\n  declare relationship: object[];\n\n  declare shapeScaleX: number;\n\n  declare shapeScaleY: number;\n\n  declare subObjList: string;\n\n  declare tempTop: number;\n\n  declare userId: string;\n\n  declare whiteboardId: string;\n\n  declare zIndex: number;\n\n  declare oneLine: boolean;\n\n  declare verticalAlign: string;\n  /*boardx custom function end*/\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 | null;\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   */\n  protected __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  declare keys: [\n    '_id', // string, the id of the object\n    'angle', //  integer, angle for recording rotating\n    'backgroundColor', // string,  background color, works when the image is transparent\n    'fill', // the font color\n    'width', // integer, width of the object\n    'height', // integer, height of the object\n    'left', // integer left for position\n    'lines', // array, the arrows array [{…}]\n    'locked', // boolean, lock status for the widget， this is connected to lock\n    'lockMovementX', // boolean, lock the verticle movement\n    'lockMovementY', // boolean, lock the horizontal movement\n    'lockScalingFlip', // boolean,  make it can not be inverted by pulling the width to the negative side\n    'obj_type', // object type\n    'originX', // string, Horizontal origin of transformation of an object (one of \"left\", \"right\", \"center\") See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n    'originY', // string, Vertical origin of transformation of an object (one of \"top\", \"bottom\", \"center\") See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n    'scaleX', // nunber, Object scale factor (horizontal)\n    'scaleY', // number, Object scale factor (vertical)\n    'selectable', // boolean, When set to `false`, an object can not be selected for modification (using either point-click-based or group-based selection). But events still fire on it.\n    'top', // integer, Top position of an object. Note that by default it's relative to object top. You can change this by setting originY={top/center/bottom}\n    'userNo', // string, the unique id for the user, one user id could open mutiple browser, each browser has unique user no\n    'userId', // string, user identity\n    'whiteboardId', // whiteboard id, string\n    'zIndex', // the index for the object on whiteboard, integer\n    'version', // version of the app, string\n    'type', // widget type, string\n    'isPanel', // is this a panel, boolean\n    'panelObj', // if this is a panel, the id of the panel, string\n    'relationship', // array, viewporttransform\n    'subObjList', // [\"5H9qYfNGt4vizhcuS\"] array list _id for sub objects\n    'fontFamily', // string, font family\n    'fontSize', // integer, font size\n    'fontWeight', // integer, font weight\n    'lineHeight', // integer, font height\n    'text', // string, text\n    'textAlign', // string, alignment\n    'editable',\n    'shapeScaleX',\n    'shapeScaleY',\n    'maxHeight',\n    'tempTop',\n    'fixedScaleChange',\n    'preTop',\n    'fromCopy',\n  ];\n\n  static cacheProperties = [...cacheProperties, ...additionalProps];\n\n  static ownDefaults: Record<string, any> = textDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      controls: createTextboxDefaultControls(),\n      ...Text.ownDefaults\n    };\n  }\n\n  constructor(text: string, options: any) {\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() {\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.indexOf('justify') !== -1) {\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 for text and Itext.\n   * @return Number\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  missingNewlineOffset(lineIndex: number) {\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 -= lines[i].length + this.missingNewlineOffset(i);\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\": \"${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        const charBox = this.__charBounds[i][j];\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: TextStyleDeclaration,\n    previousChar: string | undefined,\n    prevCharStyle: any\n  ) {\n    const fontCache = cache.getFontCache(charStyle),\n      fontDeclaration = this._getFontDeclaration(charStyle),\n      previousFontDeclaration = this._getFontDeclaration(prevCharStyle),\n      couple = previousChar + _char,\n      stylesAreEqual = fontDeclaration === previousFontDeclaration,\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        kernedWidth = coupleWidth - previousWidth;\n      }\n    }\n    return {\n      width: width * fontMultiplier,\n      kernedWidth: kernedWidth * fontMultiplier,\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    };\n    if (path && path.segmentsInfo) {\n      let positionInPath = 0;\n      const totalPathLength =\n        path.segmentsInfo[path.segmentsInfo.length - 1].length;\n      const startingPoint = getPointOnPath(path.path, 0, path.segmentsInfo);\n      startingPoint.x += path.pathOffset.x;\n      startingPoint.y += path.pathOffset.y;\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, startingPoint);\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(\n    positionInPath: number,\n    graphemeInfo: GraphemeBBox<true>,\n    startingPoint: Point\n  ) {\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 - startingPoint.x;\n    graphemeInfo.renderTop = info.y - startingPoint.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.indexOf('justify') !== -1,\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];\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  ) {\n    let offsetX, offsetY;\n    if (filler.toLive) {\n      if (\n        filler.gradientUnits === 'percentage' ||\n        filler.gradientTransform ||\n        filler.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: offsetX, offsetY: offsetY };\n      } else {\n        // is a simple gradient or pattern\n        ctx[property] = filler.toLive(ctx, this)!;\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  _setStrokeStyles(\n    ctx: CanvasRenderingContext2D,\n    { stroke, strokeWidth }: Pick<this, '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  _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    let fillOffsets, strokeOffsets;\n\n    if (!shouldStroke && !shouldFill) {\n      return;\n    }\n    ctx.save();\n\n    shouldFill && (fillOffsets = this._setFillStyles(ctx, fullDecl));\n    shouldStroke && (strokeOffsets = this._setStrokeStyles(ctx, fullDecl));\n\n    ctx.font = this._getFontDeclaration(fullDecl);\n\n    if (decl && decl.textBackgroundColor) {\n      this._removeShadow(ctx);\n    }\n    if (decl && decl.deltaY) {\n      top += decl.deltaY;\n    }\n    shouldFill &&\n      ctx.fillText(\n        _char,\n        left - fillOffsets.offsetX,\n        top - fillOffsets.offsetY\n      );\n    shouldStroke &&\n      ctx.strokeText(\n        _char,\n        left - strokeOffsets.offsetX,\n        top - strokeOffsets.offsetY\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(lineIndex: number, charIndex: number, property: string) {\n    const charStyle = this._getStyleDeclaration(lineIndex, charIndex);\n    if (charStyle && typeof charStyle[property] !== 'undefined') {\n      return charStyle[property];\n    }\n    return this[property];\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];\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          ctx.fillStyle = lastFill;\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            ctx.fillStyle = lastFill;\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;\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    styleObject?: TextStyleDeclaration,\n    forMeasuring?: boolean\n  ): string {\n    const style = styleObject || this,\n      family = this.fontFamily,\n      fontIsGeneric = Text.genericFonts.indexOf(family.toLowerCase()) > -1;\n    const fontFamily =\n      family === undefined ||\n        family.indexOf(\"'\") > -1 ||\n        family.indexOf(',') > -1 ||\n        family.indexOf('\"') > -1 ||\n        fontIsGeneric\n        ? style.fontFamily\n        : `\"${style.fontFamily}\"`;\n    return [\n      style.fontStyle,\n      style.fontWeight,\n      forMeasuring ? this.CACHE_FONT_SIZE + 'px' : style.fontSize + 'px',\n      fontFamily,\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) {\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  _getTotalLineHeights() {\n    return this._textLines.reduce(\n      (total, _line, index) => total + this.getHeightOfLine(index),\n      0,\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\n  getObject() {\n    const object = {};\n    this.keys.forEach((key) => {\n      object[key] = this[key];\n    });\n    return object;\n  }\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]),\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 Text;\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 Text.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 Text instance from an SVG element (<b>not yet implemented</b>)\n   * @static\n   * @memberOf Text\n   * @param {SVGElement} element Element to parse\n   * @param {Function} callback callback function invoked after parsing\n   * @param {Object} [options] Options object\n   */\n  static fromElement(\n    element: SVGElement,\n    callback: (text: Text | null) => any,\n    options: object\n  ) {\n    if (!element) {\n      return callback(null);\n    }\n\n    const parsedAttributes = parseAttributes(element, Text.ATTRIBUTE_NAMES),\n      parsedAnchor = parsedAttributes.textAnchor || 'left';\n    options = Object.assign({}, options, parsedAttributes);\n\n    options.top = options.top || 0;\n    options.left = options.left || 0;\n    if (parsedAttributes.textDecoration) {\n      const textDecoration = parsedAttributes.textDecoration;\n      if (textDecoration.indexOf('underline') !== -1) {\n        options.underline = true;\n      }\n      if (textDecoration.indexOf('overline') !== -1) {\n        options.overline = true;\n      }\n      if (textDecoration.indexOf('line-through') !== -1) {\n        options.linethrough = true;\n      }\n      delete options.textDecoration;\n    }\n    if ('dx' in parsedAttributes) {\n      options.left += parsedAttributes.dx;\n    }\n    if ('dy' in parsedAttributes) {\n      options.top += parsedAttributes.dy;\n    }\n    if (!('fontSize' in options)) {\n      options.fontSize = DEFAULT_SVG_FONT_SIZE;\n    }\n\n    let textContent = '';\n\n    // The XML is not properly parsed in IE9 so a workaround to get\n    // textContent is through firstChild.data. Another workaround would be\n    // to convert XML loaded from a file to be converted using DOMParser (same way loadSVGFromString() does)\n    if (!('textContent' in element)) {\n      if ('firstChild' in element && element.firstChild !== null) {\n        if ('data' in element.firstChild && element.firstChild.data !== null) {\n          textContent = element.firstChild.data;\n        }\n      }\n    } else {\n      textContent = element.textContent;\n    }\n\n    textContent = textContent\n      .replace(/^\\s+|\\s+$|\\n+/g, '')\n      .replace(/\\s+/g, ' ');\n    const originalStrokeWidth = options.strokeWidth;\n    options.strokeWidth = 0;\n\n    const text = new this(textContent, options),\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 (parsedAnchor === 'center') {\n      offX = text.getScaledWidth() / 2;\n    }\n    if (parsedAnchor === '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        typeof originalStrokeWidth !== 'undefined' ? originalStrokeWidth : 1,\n    });\n    callback(text);\n  }\n\n  /* _FROM_SVG_END_ */\n\n  /**\n   * Returns Text instance from an object representation\n   * @param {Object} object plain js Object to create an instance from\n   * @returns {Promise<Text>}\n   */\n  static fromObject<T extends TProps<SerializedTextProps>>(object: T) {\n    return this._fromObject<Text>(\n      {\n        ...object,\n        styles: stylesFromArray(object.styles || {}, object.text),\n      },\n      {\n        extraParam: 'text',\n      }\n    );\n  }\n}\n\napplyMixins(Text, [TextSVGExportMixin]);\nclassRegistry.setClass(Text);\nclassRegistry.setSVGClass(Text);\n","import { getDocument } from '../../env';\nimport {\n  ObjectEvents,\n  TPointerEvent,\n  TPointerEventInfo,\n} from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport type { FabricObject } from '../Object/Object';\nimport { Text } from '../Text/Text';\nimport { animate } from '../../util/animation/animate';\nimport { 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 { TProps } from '../Object/types';\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 TProps<TextProps> = Partial<TextProps>,\n  SProps extends SerializedTextProps = SerializedTextProps,\n  EventSpec extends ITextEvents = ITextEvents\n> extends Text<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  declare oneLine: boolean;\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\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        return (\n          !this.canvas ||\n          // we do not want to animate a selection, only cursor\n          this.selectionStart !== this.selectionEnd\n        );\n      },\n      onChange: (value) => {\n        this._currentCursorOpacity = value;\n        this.renderCursorOrSelection();\n      },\n    });\n  }\n\n  private _tick(delay?: number) {\n    this._currentTickState = this._animateCursor({\n      toValue: 1,\n      duration: this.cursorDuration,\n      delay,\n      onComplete: this._onTickComplete,\n    });\n  }\n\n  private _onTickComplete() {\n    this._currentTickCompleteState?.abort();\n    this._currentTickCompleteState = this._animateCursor({\n      toValue: 0,\n      duration: this.cursorDuration / 2,\n      delay: 950,\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  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\n    this.selectionStart = 0;\n    this.selectionEnd = this._text.length;\n    this._fireSelectionChanged();\n    this._updateTextarea();\n    return this;\n  }\n\n  selectAllText() {\n\n    this.selectionStart = 0;\n    this.selectionEnd = this._text.length;\n    this._fireSelectionChanged();\n    this._updateTextarea();\n    this.renderCursorOrSelection();\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: number): number {\n    const text = this._text;\n    let index = this._reSpace.test(text[selectionStart])\n      ? selectionStart - 1\n      : selectionStart,\n      _char = text[index];\n    while (!reNonWord.test(_char) && index > 0 && index < text.length) {\n      index += direction;\n      _char = text[index];\n    }\n    if (reNonWord.test(_char)) {\n      index += direction === 1 ? 0 : 1;\n    }\n    return index;\n  }\n\n  /**\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    //如果光标之前的字符是一个中文字符\n    let lastWord = this._text[selectionStart - 1];\n    let newSelectionStart: number = 0;\n    let newSelectionEnd: number = 0;\n    const regex = /^[\\u4e00-\\u9fa5]+$/;\n    if (regex.test(lastWord)) {\n      newSelectionStart = selectionStart - 1;\n      newSelectionEnd = selectionStart;\n    } else {\n      newSelectionStart = this.searchWordBoundary(\n        selectionStart,\n        -1\n      );\n      newSelectionEnd = this.searchWordBoundary(\n        selectionStart,\n        1\n      ); /* search forward */\n    }\n\n    this.selectionStart = newSelectionStart;\n    this.selectionEnd = newSelectionEnd;\n    this._fireSelectionChanged();\n    this._updateTextarea();\n    this.renderCursorOrSelection();\n  }\n\n  /**\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 });\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    // regain focus\n    getDocument().activeElement !== this.hiddenTextarea && this.hiddenTextarea?.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 = 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  }\n\n  /**\n   * Exits from editing state and fires relevant events\n   */\n  exitEditing() {\n    const isTextChanged = this._textBeforeEdit !== this.text;\n    this.selectionEnd = this.selectionStart;\n    this._exitEditing();\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      // @ts-expect-error in reality it is an IText instance\n      this.canvas.fire('text:editing:exited', { target: this });\n      isTextChanged && this.canvas.fire('object:modified', { target: this });\n    }\n    if (this.oneLine) {\n      this.oneLine = false;\n    }\n    this.initDimensions();\n    this.dirty = true;\n    this.canvas?.requestRenderAll();\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 isEndOfLine =\n      this._unwrappedTextLines[lineIndex].length === charIndex;\n    let somethingAdded = 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        somethingAdded = 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 (somethingAdded && !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) {\n      // skip the last line of since we already prepared it.\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","//@ts-nocheck\n\nimport { config } from '../../config';\nimport { getDocument, getEnv } from '../../env';\nimport { TPointerEvent } from '../../EventTypeDefs';\nimport { capValue } from '../../util/misc/capValue';\nimport { ITextBehavior, ITextEvents } from './ITextBehavior';\nimport type { TKeyMapIText } from './constants';\nimport { TProps } from '../Object/types';\nimport { TextProps, SerializedTextProps } from '../Text/Text';\n\nexport abstract class ITextKeyBehavior<\n  Props extends TProps<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    this.hiddenTextarea = getDocument().createElement('textarea');\n    this.hiddenTextarea.setAttribute('autocapitalize', 'off');\n    this.hiddenTextarea.setAttribute('autocorrect', 'off');\n    this.hiddenTextarea.setAttribute('autocomplete', 'off');\n    this.hiddenTextarea.setAttribute('spellcheck', 'false');\n    this.hiddenTextarea.setAttribute('data-fabric', 'textarea');\n    this.hiddenTextarea.setAttribute('wrap', 'off');\n    const style = 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    this.hiddenTextarea.style.cssText = `position: absolute; top: ${style.top}; left: ${style.left}; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: ${style.fontSize};`;\n\n    if (this.hiddenTextareaContainer) {\n      this.hiddenTextareaContainer.appendChild(this.hiddenTextarea);\n    } else {\n      getDocument().body.appendChild(this.hiddenTextarea);\n    }\n\n    this.hiddenTextarea.addEventListener('blur', this.blur.bind(this));\n    this.hiddenTextarea.addEventListener('keydown', this.onKeyDown.bind(this));\n    this.hiddenTextarea.addEventListener('keyup', this.onKeyUp.bind(this));\n    this.hiddenTextarea.addEventListener('input', this.onInput.bind(this));\n    this.hiddenTextarea.addEventListener('copy', this.copy.bind(this));\n    this.hiddenTextarea.addEventListener('cut', this.copy.bind(this));\n    this.hiddenTextarea.addEventListener('paste', this.paste.bind(this));\n    this.hiddenTextarea.addEventListener(\n      'compositionstart',\n      this.onCompositionStart.bind(this)\n    );\n    this.hiddenTextarea.addEventListener(\n      'compositionupdate',\n      this.onCompositionUpdate.bind(this)\n    );\n    this.hiddenTextarea.addEventListener(\n      'compositionend',\n      this.onCompositionEnd.bind(this)\n    );\n\n    if (!this._clickHandlerInitialized && this.canvas) {\n      this.canvas.upperCanvasEl.addEventListener(\n        'click',\n        this.onClick.bind(this)\n      );\n      this._clickHandlerInitialized = true;\n    }\n  }\n\n  onClick() {\n    this.hiddenTextarea && this.hiddenTextarea.focus();\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      this[keyMap[e.keyCode]](e);\n    } else if (e.keyCode in this.ctrlKeysMapDown && (e.ctrlKey || e.metaKey)) {\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      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(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 });\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,\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  //  */\n  onCompositionUpdate(e) {\n    this.compositionStart = e.target.selectionStart;\n    this.compositionEnd = e.target.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 = null;\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 {TPointerEvent} 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 {TPointerEvent} e Event object\n   */\n  moveCursorDown(e: TPointerEvent) {\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 {TPointerEvent} e Event object\n   */\n  moveCursorUp(e: TPointerEvent) {\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 {TPointerEvent} e Event object\n   */\n  _moveCursorUpOrDown(direction: 'Up' | 'Down', e: TPointerEvent) {\n    const action = `get${direction}CursorOffset`,\n      offset = this[action](e, this._selectionDirection === 'right');\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      this.abortCursorAnimation();\n      this._currentCursorOpacity = 1;\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 {TPointerEvent} e Event object\n   */\n  moveCursorLeft(e: TPointerEvent) {\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  _move(e, prop, direction): boolean {\n    let newValue;\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  }\n\n  /**\n   * @private\n   */\n  _moveLeft(e, prop) {\n    return this._move(e, prop, 'Left');\n  }\n\n  /**\n   * @private\n   */\n  _moveRight(e, prop) {\n    return this._move(e, prop, 'Right');\n  }\n\n  /**\n   * Moves cursor left without keeping selection\n   * @param {TPointerEvent} e\n   */\n  moveCursorLeftWithoutShift(e: TPointerEvent) {\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 {TPointerEvent} e\n   */\n  moveCursorLeftWithShift(e: TPointerEvent) {\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 {TPointerEvent} e Event object\n   */\n  moveCursorRight(e: TPointerEvent) {\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 {TPointerEvent} e Event object\n   */\n  _moveCursorLeftOrRight(direction: string, e: TPointerEvent) {\n    let actionName = 'moveCursor' + direction + 'With';\n    this._currentCursorOpacity = 1;\n\n    if (e.shiftKey) {\n      actionName += 'Shift';\n    } else {\n      actionName += 'outShift';\n    }\n    if (this[actionName](e)) {\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 {TPointerEvent} e\n   */\n  moveCursorRightWithShift(e: TPointerEvent) {\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 {TPointerEvent} e Event object\n   */\n  moveCursorRightWithoutShift(e: TPointerEvent) {\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 { XY, Point } from '../../Point';\nimport type { DragMethods } from '../Object/InteractiveObject';\nimport { stopEvent } from '../../util/dom_event';\nimport { invertTransform } from '../../util/misc/matrix';\nimport { DraggableTextDelegate } from './DraggableTextDelegate';\nimport { ITextEvents } from './ITextBehavior';\nimport { ITextKeyBehavior } from './ITextKeyBehavior';\nimport { TProps } from '../Object/types';\nimport { TextProps, SerializedTextProps } from '../Text/Text';\n\n// TODO: this code seems wrong.\n// e.button for a left click is `0` and so different than `1` is more\n// not a right click. PR 3888 introduced this code and was about left clicks.\nfunction notALeftClick(e: MouseEvent) {\n  return e.button && e.button !== 1;\n}\n\nexport abstract class ITextClickBehavior<\n  Props extends TProps<TextProps> = Partial<TextProps>,\n  SProps extends SerializedTextProps = SerializedTextProps,\n  EventSpec extends ITextEvents = ITextEvents\n>\n  extends ITextKeyBehavior<Props, SProps, EventSpec>\n  implements DragMethods {\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  isTpClick: boolean;\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  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, @see also {@link DraggableTextDelegate#isActive}\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;\n  }\n\n  isTripleClick(newPointer: XY) {\n    return (\n      this.__newClickTime - this.__lastClickTime < 600 &&\n      this.__lastClickTime - this.__lastLastClickTime < 600 &&\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.isTpClick = true;\n    //this.selectLine(this.getSelectionStartFromPointer(options.e));\n    // this.selectAllText();\n\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 (!this.canvas || !this.editable || notALeftClick(e as MouseEvent)) {\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 as MouseEvent)) {\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, button }: 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 as MouseEvent) ||\n      didDrag\n    ) {\n      return;\n    }\n\n    if (this.__lastSelected && !this.__corner) {\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 coordinates of a pointer relative to object's top left corner in object's plane\n   * @param {Point} [pointer] Pointer to operate upon\n   * @return {Point} Coordinates of a pointer (x, y)\n   */\n  // getLocalPointer(pointer: Point): Point {\n  //   return transformPoint(\n  //     pointer,\n  //     invertTransform(this.calcTransformMatrix())\n  //   ).add(new Point(this.width / 2, this.height / 2));\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!.getPointer(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    for (let i = 0, len = this._textLines.length; i < len; 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 jlen = this._textLines[lineIndex].length;\n    // handling of RTL: in order to get things work correctly,\n    // we assume RTL writing is mirrored compared to LTR writing.\n    // so in position detection we mirror the X offset, and when is time\n    // of rendering it, we mirror it again.\n    // if (this.direction === 'rtl') {\n    //   mouseOffset.x = this.width - mouseOffset.x;\n    // }\n    let prevWidth = 0;\n    for (let j = 0; j < jlen; j++) {\n      prevWidth = width;\n      // i removed something about flipX here, check.\n      width += this.__charBounds[lineIndex][j].kernedWidth;\n      if (width <= mouseOffset.x) {\n        charIndex++;\n      } else {\n        break;\n      }\n    }\n    return this._getNewSelectionStartFromOffset(\n      mouseOffset,\n      prevWidth,\n      width,\n      charIndex,\n      jlen\n    );\n  }\n\n  /**\n   * @private\n   */\n  _getNewSelectionStartFromOffset(\n    mouseOffset: XY,\n    prevWidth: number,\n    width: number,\n    index: number,\n    jlen: number\n  ) {\n    const distanceBtwLastCharAndCursor = mouseOffset.x - prevWidth,\n      distanceBtwNextCharAndCursor = width - mouseOffset.x,\n      offset =\n        distanceBtwNextCharAndCursor > distanceBtwLastCharAndCursor ||\n          distanceBtwNextCharAndCursor < 0\n          ? 0\n          : 1;\n    let newSelectionStart = index + offset;\n    // if object is horizontally flipped, mirror cursor location from the end\n    if (this.flipX) {\n      newSelectionStart = jlen - newSelectionStart;\n    }\n\n    if (newSelectionStart > this._text.length) {\n      newSelectionStart = this._text.length;\n    }\n\n    return newSelectionStart;\n  }\n}\n","import type { IText } from './IText';\nexport type TKeyMapIText = Record<KeyboardEvent['keyCode'], keyof IText>;\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: 'exitEditing',\n  27: 'exitEditing',\n  33: 'moveCursorUp',\n  34: 'moveCursorDown',\n  35: 'moveCursorRight',\n  36: 'moveCursorLeft',\n  37: 'moveCursorLeft',\n  38: 'moveCursorUp',\n  39: 'moveCursorRight',\n  40: 'moveCursorDown',\n};\n\nexport const keysMapRtl: TKeyMapIText = {\n  9: 'exitEditing',\n  27: 'exitEditing',\n  33: 'moveCursorUp',\n  34: 'moveCursorDown',\n  35: 'moveCursorLeft',\n  36: 'moveCursorRight',\n  37: 'moveCursorRight',\n  38: 'moveCursorUp',\n  39: 'moveCursorLeft',\n  40: 'moveCursorDown',\n};\n\n/**\n * For functionalities on keyUp + ctrl || cmd\n */\nexport const ctrlKeysMapUp: TKeyMapIText = {\n  67: 'copy',\n  // @ts-ignore 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 { ITextEvents } from './ITextBehavior';\nimport { ITextClickBehavior } from './ITextClickBehavior';\nimport {\n  ctrlKeysMapDown,\n  ctrlKeysMapUp,\n  keysMap,\n  keysMapRtl,\n} from './constants';\nimport { AssertKeys, TFiller } from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport type { SerializedTextProps, TextProps } from '../Text/Text';\n\ntype CursorBoundaries = {\n  left: number;\n  top: number;\n  leftOffset: number;\n  topOffset: number;\n};\n\nexport const iTextDefaultValues = {\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  _selectionDirection: null,\n  _reSpace: /\\s|\\n/,\n  inCompositionMode: false,\n  keysMap,\n  keysMapRtl,\n  ctrlKeysMapDown,\n  ctrlKeysMapUp,\n  obj_type: ''\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 ITextProps = ITextProps,\n  SProps extends SerializedITextProps = SerializedITextProps,\n  EventSpec extends ITextEvents = ITextEvents\n>\n  extends ITextClickBehavior<Props, SProps, EventSpec>\n  implements UniqueITextProps {\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  declare oneLine: boolean;\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: Record<string, any> = iTextDefaultValues;\n\n  static getDefaults() {\n    return { ...super.getDefaults(), ...IText.ownDefaults };\n  }\n\n  get type() {\n    return 'i-text';\n  }\n\n  /**\n\n   * Constructor\n   * @param {String} text Text string\n   * @param {Object} [options] Options object\n   */\n  constructor(text: string, options: object) {\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?: any): 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 (\n        this.textAlign === 'left' ||\n        this.textAlign === 'justify-left'\n      ) {\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.scaleX * 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');\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(this: AssertKeys<this, 'canvas'>) {\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.indexOf('justify') !== -1,\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 (\n          this.textAlign === 'left' ||\n          this.textAlign === 'justify-left'\n        ) {\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\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 {\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  /* boardx extend function */\n  getWidgetMenuList() {\n    if (this.locked) {\n      return ['objectLock'];\n    }\n    return [\n      'drawNote',\n      'more',\n      'textToMultipleStickyNotes',\n      'switchNoteType',\n      'fontSize',\n      'changeFont',\n      'fontWeight',\n      'textBullet',\n      'borderLineIcon',\n      'textAlign',\n      'backgroundColor',\n      'fontColor',\n      'applyFormat',\n      'objectLock',\n      'delete',\n      'aiassist',\n    ];\n  }\n  getWidgetMenuLength() {\n    if (this.locked) return 50;\n    return 520;\n  }\n  getContextMenuList() {\n    let menuList;\n    if (this.locked) {\n      menuList = [\n        'Export board',\n        'Exporting selected area',\n        'Create Share Back',\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Copy as image',\n        'Copy As Text'\n      ];\n    } else {\n      menuList = [\n        'Export board',\n        'Exporting selected area',\n        'Create Share Back',\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Duplicate',\n        'Copy',\n        'Copy as image',\n        'Copy As Text',\n        'Paste',\n        'Cut',\n        'Edit',\n        'Delete',\n      ];\n    }\n    menuList.push('Select All');\n    if (this.locked) {\n      menuList.push('Unlock');\n    } else {\n      menuList.push('Lock');\n    }\n    return menuList;\n  }\n\n  onChangedListener() {\n    this.initDimensions();\n    this.dirty = true;\n    this.top = this.tempTop;\n  }\n\n}\n\nclassRegistry.setClass(IText);\n// legacy\nclassRegistry.setClass(IText, 'i-text');\n","// @ts-nocheck\nimport { TClassProperties } from '../typedefs';\nimport { IText } from './IText/IText';\nimport { classRegistry } from '../ClassRegistry';\nimport { renderCircleControl } from '../controls/controlRendering';\nimport { Control } from '../controls/Control';\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: true,\n  obj_type: 'WBTextbox',\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 Textbox extends IText {\n  /**\n   * Minimum width of textbox, in pixels.\n   * @type Number\n   * @default\n   */\n  declare minWidth: number;\n\n  /* boardx cusotm function */\n  declare obj_type: string;\n\n  declare hasNoText: boolean;\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  /**\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  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      ...Textbox.ownDefaults,\n    };\n  }\n  constructor(text: string, options: any) {\n    super(text, options);\n    if (this.obj_type !== 'WBText' && this.obj_type !== 'WBTextbox') {\n      this.addControls();\n    }\n    this.InitializeEvent();\n  }\n\n  InitializeEvent() {\n    return true;\n  }\n  changeWidth(eventData, transform, x, yr) {\n    return true;\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.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    this.height = this.calcTextHeight();\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) {\n    let realLineCount = 0,\n      realLineCharCount = 0,\n      charCount = 0;\n    const map = {};\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, 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      // 检查单词是否全为拉丁字母，长度不大于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  _wrapLine(\n    _line,\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\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    if (!this.fromCopy) {\n      if ((this.obj_type === 'WBText' || this.obj_type === 'WBTextbox') && this.textLines && this.textLines.length > 1 && this.isEditing) {\n        this.oneLine = false;\n      }\n      else {\n        this.oneLine = true;\n      }\n    } else {\n      this.oneLine = false;\n    }\n    if ((this.obj_type === 'WBText' || this.obj_type === 'WBTextbox') && newText && newText.lines && this.oneLine && this.isEditing) {\n      if (newText.lines[0].length > 1) {\n        this.width = this._measureWord(newText.lines[0], 0, 0) > this.width ? this._measureWord(newText.lines[0], 0, 0) + 10 : 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  _removeExtraneousStyles() {\n    const linesToKeep = {};\n    for (const prop in this._styleMap) {\n      if (this._textLines[prop]) {\n        linesToKeep[this._styleMap[prop].line] = 1;\n      }\n    }\n    for (const prop in this.styles) {\n      if (!linesToKeep[prop]) {\n        delete this.styles[prop];\n      }\n    }\n  }\n  addControls() {\n    function renderCustomControl(ctx, left, top, fabricObject) {\n      const styleOverride1 = {\n        cornerSize: 10,\n        cornerStrokeColor: this.isHovering ? '#31A4F5' : '#b3cdfd',\n        cornerColor: this.isHovering ? '#31A4F5' : '#b3cdfd',\n        lineWidth: 2\n      };\n      renderCircleControl.call(\n        fabricObject,\n        ctx,\n        left,\n        top,\n        styleOverride1,\n        fabricObject\n      );\n    }\n\n    this.controls.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\n    this.controls.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\n    this.controls.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\n    this.controls.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  controlMousedownProcess(transformData, rx, ry) {\n    return;\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\n  getObject() {\n    const object = {};\n\n    const keys = [\n      '_id', // string, the id of the object\n      'angle', //  integer, angle for recording rotating\n      'backgroundColor', // string,  background color, works when the image is transparent\n      'fill', // the font color\n      'width', // integer, width of the object\n      'height', // integer, height of the object\n      'left', // integer left for position\n      'lines', // array, the arrows array [{…}]\n      'locked', // boolean, lock status for the widget， this is connected to lock\n      'lockMovementX', // boolean, lock the verticle movement\n      'lockMovementY', // boolean, lock the horizontal movement\n      'lockScalingFlip', // boolean,  make it can not be inverted by pulling the width to the negative side\n      'obj_type', // object type\n      'originX', // string, Horizontal origin of transformation of an object (one of \"left\", \"right\", \"center\") See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n      'originY', // string, Vertical origin of transformation of an object (one of \"top\", \"bottom\", \"center\") See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n      'scaleX', // nunber, Object scale factor (horizontal)\n      'scaleY', // number, Object scale factor (vertical)\n      'selectable', // boolean, When set to `false`, an object can not be selected for modification (using either point-click-based or group-based selection). But events still fire on it.\n      'top', // integer, Top position of an object. Note that by default it's relative to object top. You can change this by setting originY={top/center/bottom}\n      'userNo', // string, the unique id for the user, one user id could open mutiple browser, each browser has unique user no\n      'userId', // string, user identity\n      'whiteboardId', // whiteboard id, string\n      'zIndex', // the index for the object on whiteboard, integer\n      'version', // version of the app, string\n      'isPanel', // is this a panel, boolean\n      'panelObj', // if this is a panel, the id of the panel, string\n      'relationship', // array, viewporttransform\n      'subObjList', // [\"5H9qYfNGt4vizhcuS\"] array list _id for sub objects\n      'fontFamily', // string, font family\n      'fontSize', // integer, font size\n      'fontWeight', // integer, font weight\n      'lineHeight', // integer, font height\n      'text', // string, text\n      'textAlign', // string, alignment\n      'editable',\n      'shapeScaleX',\n      'shapeScaleY',\n      'maxHeight',\n      'tempTop',\n      'fixedScaleChange',\n      'preTop'\n    ];\n    keys.forEach((key) => {\n      object[key] = this[key];\n    });\n    return object;\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\n}\n\nclassRegistry.setClass(Textbox);\n","// @ts-nocheck\nimport { TClassProperties } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { Textbox } from './Textbox';\nimport { createRectNotesDefaultControls } from '../controls/commonControls';\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<CircleNotes>> = {\n  minWidth: 20,\n  dynamicMinWidth: 2,\n  verticalAlign: 'middle',\n  lockScalingFlip: true,\n  noScaleCache: false,\n  _wordJoiners: /[ \\t\\r]/,\n  splitByGrapheme: true,\n  obj_type: 'WBCircleNotes',\n  height: 138,\n  maxHeight: 138,\n  width: 138,\n  noteType: 'circle',\n  radius: 138,\n  breakWords: true,\n  emoj: [0, 0, 0, 0, 0],\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 CircleNotes extends Textbox {\n  /**selectable\n   * Minimum width of textbox, in pixels.\n   * @type Number\n   * @default\n   */\n  declare minWidth: number;\n\n  /* boardx cusotm function */\n  declare _id: string;\n\n  declare obj_type: string;\n\n  declare locked: boolean;\n\n  declare whiteboardId: 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  public extendPropeties = ['obj_type', 'whiteboardId', 'userId',\n    'timestamp', 'zIndex', 'locked', 'verticalAlign', 'lines', '_id',\n    'zIndex', 'relationship', 'emoj', 'userEmoji'];\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 = [...Textbox.textLayoutProperties, 'width'];\n\n  static ownDefaults: Record<string, any> = circleNotesDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      controls: createRectNotesDefaultControls(),\n      ...CircleNotes.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('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) {\n    let realLineCount = 0,\n      realLineCharCount = 0,\n      charCount = 0;\n    const map = {};\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, 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 (/^[a-zA-Z]+$/.test(words[i]) && words[i].length <= 13 && !(/(\\w)\\1{3,}/.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  _wrapLine(\n    _line,\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\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  _removeExtraneousStyles() {\n    const linesToKeep = {};\n    for (const prop in this._styleMap) {\n      if (this._textLines[prop]) {\n        linesToKeep[this._styleMap[prop].line] = 1;\n      }\n    }\n    for (const prop in this.styles) {\n      if (!linesToKeep[prop]) {\n        delete this.styles[prop];\n      }\n    }\n  }\n\n  getObject() {\n    const object = {};\n    const keys = [\n      '_id', // string, the id of the object\n      'angle', //  integer, angle for recording rotating\n      'backgroundColor', // string,  background color, works when the image is transparent\n      'fill', // the font color\n      'width', // integer, width of the object\n      'height', // integer, height of the object\n      'left', // integer left for position\n      'lines', // array, the arrows array [{…}]\n      'locked', // boolean, lock status for the widget， this is connected to lock\n      'lockMovementX', // boolean, lock the verticle movement\n      'lockMovementY', // boolean, lock the horizontal movement\n      'lockScalingFlip', // boolean,  make it can not be inverted by pulling the width to the negative side\n      'obj_type', // object type\n      'originX', // string, Horizontal origin of transformation of an object (one of \"left\", \"right\", \"center\") See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n      'originY', // string, Vertical origin of transformation of an object (one of \"top\", \"bottom\", \"center\") See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n      'scaleX', // nunber, Object scale factor (horizontal)\n      'scaleY', // number, Object scale factor (vertical)\n      'selectable', // boolean, When set to `false`, an object can not be selected for modification (using either point-click-based or group-based selection). But events still fire on it.\n      'top', // integer, Top position of an object. Note that by default it's relative to object top. You can change this by setting originY={top/center/bottom}\n      'userNo', // string, the unique id for the user, one user id could open mutiple browser, each browser has unique user no\n      'userId', // string, user identity\n      'whiteboardId', // whiteboard id, string\n      'zIndex', // the index for the object on whiteboard, integer\n      'version', // version of the app, string\n      'isPanel', // is this a panel, boolean\n      'panelObj', // if this is a panel, the id of the panel, string\n      'relationship', // array, viewporttransform\n      'subObjList', // [\"5H9qYfNGt4vizhcuS\"] array list _id for sub objects\n      'fontFamily', // string, font family\n      'fontSize', // integer, font size\n      'fontWeight', // integer, font weight\n      'lineHeight', // integer, font height\n      'strokeWidth', //\n      'text', // string, text\n      'textAlign', // string, alignment\n      'imageSrc', // src for the note draw\n      'isDraw', // is this a draw note\n      'emoji', // [0,0,0,0,0], record the emoji\n      'userEmoji', // [{userid,[0,0,0,0,1]},{userid,[0,0,0,0,1]}], record who vote the emoji\n      'editable', // text editable,\n      'lastEditedBy' // last edited by\n    ];\n    keys.forEach((key) => {\n      object[key] = this[key];\n    });\n    return object;\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(propertiesToInclude: Array<any>): object {\n    return super.toObject(\n      [...this.extendPropeties, 'minWidth', 'splitByGrapheme'].concat(propertiesToInclude)\n    );\n\n  }\n  /**boardx custom function */\n\n  getWidgetMenuList() {\n    if (this.isDraw) {\n      return [\n        'textNote',\n        'borderLineIcon',\n        'backgroundColor',\n        'resetDraw',\n        'switchNoteType',\n        'drawOption',\n        'lineWidth',\n        'noteDrawColor', // strokeColor\n        'emojiMenu',\n        'more',\n        'objectLock',\n        'aiassist'\n      ];\n    }\n    if (this.locked) {\n      return ['objectLock'];\n    }\n    return [\n      'drawNote',\n      'more',\n      'borderLineIcon',\n      'switchNoteType',\n      'fontSize',\n      'textAlign',\n      'backgroundColor',\n      'emojiMenu',\n      'fontWeight',\n      'textBullet',\n      'objectLock',\n      'delete',\n      'aiassist'\n    ];\n  }\n  getWidgetMenuTouchList() {\n    if (this.isDraw) {\n      return ['emojiMenu', 'objectLock'];\n    }\n    if (this.locked) {\n      return ['objectLock'];\n    }\n    return [\n      'objectDelete',\n      'moreMenuStickyNote',\n      'backgroundColor',\n      'fontColor',\n      'emojiMenu',\n      'objectLock',\n      'aiassist'\n    ];\n  }\n  getWidgetMenuLength() {\n    if (this.locked) return 50;\n    if (this.isDraw) {\n      return 308;\n    }\n    return 420;\n  }\n  /* caculate cusor positon in the middle of the textbox */\n  getCenteredTop(rectHeight) {\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) {\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) {\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 = dim.x / 2 + this.padding / this.scaleX / this.canvas?.getZoom();\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) {\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, method) {\n    ctx.save();\n    let lineHeights = 0;\n    const left = this._getLeftOffset();\n    const top = this._getTopOffset();\n    const offsets = this._applyPatternGradientTransform(\n      ctx,\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, width, height, radius) {\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(CircleNotes);\n","import { twoMathPi } from '../constants';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { TClassProperties } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type {\n  FabricObjectProps,\n  SerializedObjectProps,\n  TProps,\n} from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\n\nexport const ellipseDefaultValues: UniqueEllipseProps = {\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 TProps<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 cacheProperties = [...cacheProperties, ...ELLIPSE_PROPS];\n\n  static ownDefaults: Record<string, any> = ellipseDefaultValues;\n\n  static getDefaults() {\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() {\n    return [\n      '<ellipse ',\n      'COMMON_PARTS',\n      'cx=\"0\" cy=\"0\" ',\n      'rx=\"',\n      this.rx,\n      '\" ry=\"',\n      this.ry,\n      '\" />\\n',\n    ];\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D} ctx context to render on\n   */\n  _render(ctx: CanvasRenderingContext2D) {\n    ctx.beginPath();\n    ctx.save();\n    ctx.transform(1, 0, 0, this.ry / this.rx, 0, 0);\n    ctx.arc(0, 0, this.rx, 0, twoMathPi, false);\n    ctx.restore();\n    this._renderPaintInOrder(ctx);\n  }\n\n  /* _FROM_SVG_START_ */\n\n  /**\n   * List of attribute names to account for when parsing SVG element (used by {@link Ellipse.fromElement})\n   * @static\n   * @memberOf Ellipse\n   * @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement\n   */\n  static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'cx', 'cy', 'rx', 'ry'];\n\n  /**\n   * Returns {@link Ellipse} instance from an SVG element\n   * @static\n   * @memberOf Ellipse\n   * @param {SVGElement} element Element to parse\n   * @param {Function} [callback] Options callback invoked after parsing is finished\n   * @return {Ellipse}\n   */\n  static fromElement(\n    element: SVGElement,\n    callback: (ellipse: Ellipse) => void\n  ) {\n    const parsedAttributes = parseAttributes(element, this.ATTRIBUTE_NAMES);\n\n    parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx;\n    parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry;\n    callback(new this(parsedAttributes));\n  }\n\n  /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Ellipse);\nclassRegistry.setSVGClass(Ellipse);\n","/**\n * Canvas 2D filter backend.\n */\nimport type { BaseFilter } from './BaseFilter';\nimport { 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 { getWindow } from '../env';\nimport { config } from '../config';\nimport { createCanvasElement } from '../util/misc/dom';\nimport {\n  TWebGLPipelineState,\n  TProgramCache,\n  TTextureCache,\n  TPipelineResources,\n} from './typedefs';\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    // eslint-disable-next-line\n    this.chooseFastestCopyGLTo2DMethod(width, height);\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   */\n  chooseFastestCopyGLTo2DMethod(width: number, height: number): void {\n    const targetCanvas = createCanvasElement();\n    // eslint-disable-next-line no-undef\n    const imageBuffer = new ArrayBuffer(width * height * 4);\n    if (config.forceGLPutImageData) {\n      this.imageBuffer = imageBuffer;\n      this.copyGLTo2D = copyGLTo2DPutImageData;\n      return;\n    }\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 = getWindow().performance.now();\n    this.copyGLTo2D.call(testContext, this.gl, testPipelineState);\n    const drawImageTime = getWindow().performance.now() - startTime;\n\n    startTime = getWindow().performance.now();\n    copyGLTo2DPutImageData.call(testContext, this.gl, testPipelineState);\n    const putImageDataTime = getWindow().performance.now() - startTime;\n\n    if (drawImageTime > putImageDataTime) {\n      this.imageBuffer = imageBuffer;\n      this.copyGLTo2D = copyGLTo2DPutImageData;\n    }\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: any[],\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      // @ts-ignore\n      originalWidth: source.width || source.originalWidth || 0,\n      // @ts-ignore\n      originalHeight: source.height || source.originalHeight || 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-ignore\n      this.canvas = null;\n      // @ts-ignore\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 {HTMLImageElement|HTMLCanvasElement} textureImageSource A source for the texture data.\n   * @returns {WebGLTexture}\n   */\n  createTexture(\n    gl: WebGLRenderingContext,\n    width: number,\n    height: number,\n    textureImageSource?: TexImageSource\n  ) {\n    const texture = gl.createTexture();\n    gl.bindTexture(gl.TEXTURE_2D, texture);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n    if (textureImageSource) {\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        0,\n        gl.RGBA,\n        gl.RGBA,\n        gl.UNSIGNED_BYTE,\n        textureImageSource\n      );\n    } else {\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        0,\n        gl.RGBA,\n        width,\n        height,\n        0,\n        gl.RGBA,\n        gl.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(uniqueId: string, textureImageSource: TexImageSource) {\n    if (this.textureCache[uniqueId]) {\n      return this.textureCache[uniqueId];\n    } else {\n      const texture = this.createTexture(\n        this.gl,\n        textureImageSource.width,\n        textureImageSource.height,\n        textureImageSource\n      );\n      this.textureCache[uniqueId] = texture;\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   * 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\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 */\nfunction 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","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","// @ts-nocheck\nimport { getDocument, 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 { TClassProperties, TSize } from '../typedefs';\nimport { uid } from '../util/internals/uid';\nimport { createCanvasElement } from '../util/misc/dom';\nimport { findScaleToCover, findScaleToFit } from '../util/misc/findScaleTo';\nimport {\n  enlivenObjectEnlivables,\n  enlivenObjects,\n  loadImage,\n  LoadImageOptions,\n} from '../util/misc/objectEnlive';\nimport { parsePreserveAspectRatioAttribute } from '../util/misc/svgParsing';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type {\n  FabricObjectProps,\n  SerializedObjectProps,\n  TProps,\n} from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { WebGLFilterBackend } from '../filters/WebGLFilterBackend';\nimport { createFileDefaultControls } from '../controls/commonControls';\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  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 Image<\n  Props extends TProps<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   * When calling {@link Image.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\n  declare resizeFilter: BaseFilter;\n\n  /* boardx cusotm function */\n  declare obj_type: string;\n\n  declare locked: boolean;\n\n  declare whiteboardId: 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 _id: string;\n\n  declare oWidth: number;\n\n  declare oHeight: number;\n\n  declare strokeWidth: number;\n\n  public extendPropeties = ['obj_type', 'whiteboardId', 'userId', 'timestamp', 'zIndex', 'locked', 'verticalAlign', 'line', 'relationship', '_id', 'oWidth', 'oHeight', 'strokeWidth'];\n\n  protected declare _element: ImageSource;\n  protected declare _originalElement: ImageSource;\n  protected declare _filteredEl: ImageSource;\n\n  static cacheProperties = [...cacheProperties, ...IMAGE_PROPS];\n\n  static ownDefaults: Record<string, any> = imageDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      controls: createFileDefaultControls(),\n      ...Image.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        ? (getDocument().getElementById(arg0) as ImageSource)\n        : arg0,\n      options\n    );\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(Image.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    ['_originalElement', '_element', '_filteredEl', '_cacheCanvas'].forEach(\n      (elementKey) => {\n        getEnv().dispose(this[elementKey as keyof this] as Element);\n        // @ts-expect-error disposing\n        this[elementKey] = undefined;\n      }\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, ...this.extendPropeties, ...propertiesToInclude]),\n      src: this.getSrc(),\n      crossOrigin: this.getCrossOrigin(),\n      filters,\n      ...(this.resizeFilter\n        ? { resizeFilter: this.resizeFilter.toObject() }\n        : {}),\n    };\n  }\n\n  getObject() {\n    const object = {};\n    const keys = [\n      '_id',\n      'angle',\n      'backgroundColor',\n      'fill',\n      'width',\n      'height',\n      'left',\n      'locked',\n      'lockScalingX',\n      'lockScalingY',\n      'lockMovementX',\n      'lockMovementY',\n      'lockScalingFlip',\n      'obj_type',\n      'originX',\n      'originY',\n      'scaleX',\n      'scaleY',\n      'selectable',\n      'top',\n      'userNo',\n      'userId',\n      'whiteboardId',\n      'zIndex',\n      'version',\n      'isPanel',\n      'panelObj',\n      'relationship',\n      'flipX',\n      'flipY',\n      'stroke',\n      'strokeWidth',\n      'lines',\n      'src',\n      'name',\n      'progressBar',\n      'isUploading',\n      'initedProgressBar',\n      'hoverCursor',\n      'lockUniScaling',\n      'cornerStyle',\n      'lightbox',\n      'cropSelectionRect',\n      'url',\n    ];\n    keys.forEach((key) => {\n      object[key] = this[key];\n    });\n    return object;\n  }\n\n  /*boardx custom function */\n  getWidgetMenuList() {\n    if (this.locked) {\n      return ['objectLock'];\n    }\n    return ['more', 'objectLock', 'crop', 'delete', 'aiassist'];\n  }\n  getWidgetMenuLength() {\n    if (this.locked) {\n      return 30;\n    }\n    return 80;\n  }\n  getContextMenuList() {\n    let menuList;\n    if (this.locked) {\n      menuList = [\n        'Open image',\n        'Export board',\n        'Exporting selected area',\n        'Create Share Back',\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Copy as image'\n      ];\n    } else {\n      menuList = [\n        'Open image',\n        'Export board',\n        'Exporting selected area',\n        'Create Share Back',\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Duplicate',\n        'Copy',\n        'Copy as image',\n        'Paste',\n        'Cut',\n        'Delete'\n      ];\n    }\n    menuList.push('Select All');\n    if (this.locked) {\n      menuList.push('Unlock');\n    } else {\n      menuList.push('Lock');\n    }\n\n    // if (this.isPanel && !this.locked) {\n    //   menuList.push('Switch to non-panel');\n    // } else {\n    //   menuList.push('Switch to panel');\n    // }\n\n    return menuList;\n  }\n  setLockedShadow(locked) {\n    if (locked) {\n      this.shadow = new fabric.Shadow({\n        blur: 2,\n        offsetX: 0,\n        offsetY: 0,\n        color: 'rgba(0, 0, 0, 0.5)'\n      });\n    } else {\n      this.shadow = new fabric.Shadow({\n        blur: 8,\n        offsetX: 0,\n        offsetY: 4,\n        color: 'rgba(0,0,0,0.04)'\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 = [],\n      element = this._element,\n      x = -this.width / 2,\n      y = -this.height / 2;\n    let svgString = [],\n      strokeSvg,\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=\"',\n      this.getSvgSrc(true),\n      '\" x=\"',\n      x - this.cropX,\n      '\" 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.naturalWidth,\n      '\" height=\"',\n      element.height || element.naturalHeight,\n      imageRendering,\n      '\"',\n      clipPath,\n      '></image>\\n'\n    );\n\n    if (this.stroke || this.strokeDashArray) {\n      const origFill = this.fill;\n      this.fill = null;\n      strokeSvg = [\n        '\\t<rect ',\n        'x=\"',\n        x,\n        '\" y=\"',\n        y,\n        '\" width=\"',\n        this.width,\n        '\" height=\"',\n        this.height,\n        '\" style=\"',\n        this.getSvgStyles(),\n        '\"/>\\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.toDataURL) {\n        return element.toDataURL();\n      }\n\n      if (this.srcFromAttribute) {\n        return element.getAttribute('src');\n      } else {\n        return element.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: 'annonymous', signal }).then((img) => {\n      typeof crossOrigin !== 'undefined' && this.set({ crossOrigin: 'annonymous' });\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],\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._filteredEl = null;\n      this._filterScalingX = 1;\n      this._filterScalingY = 1;\n      return;\n    }\n\n    const imgElement = this._originalElement,\n      sourceWidth = imgElement.naturalWidth || imgElement.width,\n      sourceHeight = imgElement.naturalHeight || imgElement.height;\n\n    if (this._element === this._originalElement) {\n      // if the element is the same we need to create a new element\n      const canvasEl = createCanvasElement();\n      canvasEl.width = sourceWidth;\n      canvasEl.height = sourceHeight;\n      this._element = canvasEl;\n      this._filteredEl = canvasEl;\n    } else {\n      // clear the existing element to get new filter data\n      // also dereference the eventual resized _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\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    //this.resizeImageAccordingToZoomAndOnScreen();\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(ctx: CanvasRenderingContext2D) {\n    ctx.imageSmoothingEnabled = this.imageSmoothing;\n    super.drawCacheOnCanvas(ctx);\n  }\n\n  /**\n   * Decide if the object should cache or not. Create its own cache level\n   * needsItsOwnCache should be used when the object drawing method requires\n   * a cache step. None of the fabric classes requires it.\n   * Generally you do not cache objects in groups because the group outside is cached.\n   * This is the special image version where we would like to avoid caching where possible.\n   * Essentially images do not benefit from caching. They may require caching, and in that\n   * case we do it. Also caching an image usually ends in a loss of details.\n   * A full performance audit should be done.\n   * @return {Boolean}\n   */\n  shouldCache() {\n    return this.needsItsOwnCache();\n  }\n\n  _renderFill(ctx: CanvasRenderingContext2D) {\n    const elementToDraw = this._element;\n    if (!elementToDraw) {\n      return;\n    }\n    const scaleX = this._filterScalingX,\n      scaleY = this._filterScalingY,\n      w = this.width,\n      h = this.height,\n      // crop values cannot be lesser than 0.\n      cropX = Math.max(this.cropX, 0),\n      cropY = Math.max(this.cropY, 0),\n      elWidth = elementToDraw.naturalWidth || elementToDraw.width,\n      elHeight = elementToDraw.naturalHeight || 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 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  /**\n   * Creates an instance of Image 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<Image>}\n   */\n  static fromObject<T extends TProps<SerializedImageProps>>(\n    { filters: f, resizeFilter: rf, src, crossOrigin, ...object }: T,\n    options: { signal: AbortSignal }\n  ) {\n    return Promise.all([\n      loadImage(src, { ...options, crossOrigin: 'annonymous' }),\n      f && enlivenObjects(f, options),\n      // TODO: redundant - handled by enlivenObjectEnlivables\n      rf && enlivenObjects([rf], options),\n      enlivenObjectEnlivables(object, options),\n    ]).then(([el, filters = [], [resizeFilter] = [], hydratedProps = {}]) => {\n      return new this(el, {\n        ...object,\n        src,\n        crossOrigin,\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<Image>}\n   */\n  static fromURL<T extends TProps<SerializedImageProps>>(fileOptions: T & LoadImageOptions = {}\n  ): Promise<Image> {\n    return new Promise(async (resolve, reject) => {\n      const url = fileOptions.previewImage ? fileOptions.previewImage : this.getFileIconURL(fileOptions.name);\n      try {\n        const loadedImg = await loadImage(url, fileOptions && fileOptions.crossOrigin);\n        resolve(new Image(loadedImg, fileOptions));\n      } catch (error) {\n        reject(error);\n      }\n    });\n  }\n\n  /**\n   * Returns {@link Image} instance from an SVG element\n   * @static\n   * @param {SVGElement} 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 fromElement(\n    element: SVGElement,\n    callback: (image: Image) => any,\n    options: { signal?: AbortSignal } = {}\n  ) {\n    const parsedAttributes = parseAttributes(element, this.ATTRIBUTE_NAMES);\n    this.fromURL(parsedAttributes['xlink:href'], {\n      ...options,\n      ...parsedAttributes,\n    }).then(callback);\n  }\n\n  initDoubleClickSimulation() {\n    this.__lastClickTime = +new Date();\n    this.on('mousedown', this.onMouseDown.bind(this));\n  }\n\n  onMouseDown(options) {\n    this.__newClickTime = +new Date();\n    if (this.__newClickTime - this.__lastClickTime < 500) {\n      this.fire('dblclick', options);\n      this._stopEvent(options.e);\n    }\n\n    this.__lastClickTime = this.__newClickTime;\n  }\n\n  _stopEvent(e) {\n    if (e.preventDefault) e.preventDefault();\n    if (e.stopPropagation) e.stopPropagation();\n  }\n\n  resizeImageAccordingToZoomAndOnScreen() {\n    const zoom = this.canvas.getZoom();\n    const realWidth = this.scaleX * this.width;\n\n    const originalWidth = this.oWidth;\n    const originalHeight = this.oHeight;\n    let originalSrc = \"\";\n    if (!this.src || this.src.indexOf('base64') !== -1) return;\n    if (\n      zoom >= 0.4 ||\n      realWidth > getWindow().innerWidth * 0.4\n    ) {\n      if (this.src.includes('oss-')) {\n        originalSrc =\n          this.src.indexOf('?') === -1 ? this.src : this.src.split('?')[0];\n\n      } else {\n        originalSrc = this.src.replace('smallPic/', 'bigPic/');\n      }\n    }\n    else {\n      originalSrc = this.src.replace('bigPic/', 'smallPic/');\n    }\n    this.compressSize = 1000;\n    const targetSrc = originalSrc;\n    this.setSrc(\n      targetSrc,\n      () => {\n        this.src = targetSrc;\n        this.dirty = true;\n        if (this.canvas) {\n          this.canvas.renderAll();\n        }\n\n      },\n      { crossOrigin: 'anonymous', ...this.toObject() }\n    );\n\n  }\n\n  cloneWidget() {\n    return this.getObject();\n  }\n  startCrop() {\n    if (this.cropSelectionRect) {\n      this.cancelCrop();\n    }\n    this.addSelectionRect();\n  }\n  cancelCrop() {\n    return;\n  }\n  addSelectionRect() {\n    return;\n  }\n  crop() { }\n  cropObjectMovingHandler() { }\n  cropObjectScalingHandler() { }\n}\n\nclassRegistry.setClass(Image);\nclassRegistry.setSVGClass(Image);\n","// @ts-nocheck\nimport { TClassProperties, TSize } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { createFileDefaultControls } from '../controls/commonControls';\nimport { Shadow } from '../Shadow';\nimport { Rect } from '../shapes/Rect';\nimport { getWindow } from '../env';\nimport { Image as FbricImage } from './Image';\nimport {\n  loadImage,\n  LoadImageOptions,\n} from '../util/misc/objectEnlive';\n\nimport type {\n  FabricObjectProps,\n  SerializedObjectProps,\n  TProps,\n} from './Object/types';\n\nexport type WBFileSource =\n  | string\n  | HTMLImageElement\n  | HTMLVideoElement\n  | HTMLCanvasElement;\n\ninterface UniqueWBFileProps {\n  srcFromAttribute: boolean;\n  minimumScaleTrigger: number;\n  cropX: number;\n  cropY: number;\n  imageSmoothing: boolean;\n  crossOrigin: string | null;\n}\n\nexport const WBFileDefaultValues: Partial<TClassProperties<WBFile>> = {\n  minWidth: 20,\n  dynamicMinWidth: 2,\n  lockScalingFlip: true,\n  noScaleCache: false,\n  _wordJoiners: /[ \\t\\r]/,\n  splitByGrapheme: true,\n  obj_type: 'WBFile',\n  height: 200,\n  maxHeight: 200,\n};\n\nexport interface SerializedWBFileProps extends SerializedObjectProps {\n  src: string;\n  crossOrigin: string | null;\n  filters: any[];\n  resizeFilter?: any;\n  cropX: number;\n  cropY: number;\n}\nexport interface WBFileProps extends FabricObjectProps, UniqueWBFileProps { }\n\nexport class WBFile<\n  Props extends TProps<WBFileProps> = Partial<WBFileProps>,\n> extends FbricImage {\n\n  declare minWidth: number;\n\n  /* boardx cusotm function */\n  declare _id: string;\n\n  declare obj_type: string;\n\n  declare locked: boolean;\n\n  declare whiteboardId: 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 url: string;\n\n  declare relationship: object[];\n\n  public extendPropeties = ['obj_type', 'whiteboardId', 'userId', 'timestamp', 'zIndex', 'locked', 'verticalAlign', 'lines', '_id', 'zIndex', 'relationship', 'url'];\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 ownDefaults: Record<string, any> = WBFileDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      controls: createFileDefaultControls(),\n      ...WBFile.ownDefaults,\n    };\n  }\n\n\n  //@ts-ignore\n  constructor(element: WBFileSource, options: Props) {\n    super(element, options);\n    this.filters = [];\n    this.resizeFilters = [];\n    this.name = options.name;\n    this.isUploading = options.isUploading;\n\n    this.shadow = new Shadow({\n      color: 'rgba(217, 161, 177, 0.54)',\n      offsetX: 1,\n      offsetY: 2,\n      blur: 4,\n      //@ts-ignore\n      spread: -5,\n      id: 310,\n    });\n    const fileSuffixName = options.name.substring(options.name.lastIndexOf('.') + 1);\n    this.clipPath = new Rect({\n      left: 0,\n      top: 0,\n      rx: 8,\n      ry: 8,\n      width: fileSuffixName === 'pdf' ? 320 : 230,\n      height: fileSuffixName === 'pdf' ? 453 : 248,\n      fill: '#000000',\n    }),\n\n      // double click\n      this.on('mousedblclick', () => {\n        if (this.src || !this.isUploading) {\n          //@ts-ignore\n          if (Boardx.Util.isMobile()) {\n            getWindow().parent.location.href = this.fileSrc ? this.fileSrc : this.src;\n          } else if (this.isFileVideo(this.name)) {\n            store.dispatch(handleSetVideoUrl(this.src));\n          } else {\n            getWindow().open(this.fileSrc ? this.fileSrc : this.src, '_blank').focus();\n          }\n        }\n      });\n    this.initDoubleClickSimulation();\n    this.width = fileSuffixName === 'pdf' ? 320 : 230;\n    this.height = fileSuffixName === 'pdf' ? 453 : 248;\n  }\n  setElement(element: WBFileSource, 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(WBFile.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  toObject(propertiesToInclude: Array<any>): object {\n    return super.toObject(\n      [...this.extendPropeties, 'minWidth', 'splitByGrapheme'].concat(propertiesToInclude)\n    );\n\n  }\n  getWidgetMenuList() {\n    const menuList = [];\n    if (this.locked) {\n      menuList.push('objectLock');\n    }\n    else {\n      menuList.push('more');\n      menuList.push('objectLock');\n      menuList.push('delete');\n      menuList.push('fileName');\n      menuList.push('borderLineIcon');\n      menuList.push('fileDownload');\n      const fileType = this.name.split('.').pop();\n      if (\n        fileType.toLocaleLowerCase() == 'mp3' ||\n        fileType.toLocaleLowerCase() === 'm4a' ||\n        fileType.toLocaleLowerCase() === 'wav' ||\n        fileType.toLocaleLowerCase() === 'aac' ||\n        fileType.toLocaleLowerCase() === 'flac' ||\n        fileType.toLocaleLowerCase() === 'ogg' ||\n        fileType.toLocaleLowerCase() === 'aiff' ||\n        fileType.toLocaleLowerCase() === 'wma' ||\n        fileType.toLocaleLowerCase() === 'ape'\n      ) {\n        menuList.push('audioToText');\n      }\n    }\n    return menuList;\n  }\n  getWidgetMenuLength() {\n    if (this.locked) return 50;\n    return 60;\n  }\n  getContextMenuList() {\n    let menuList;\n    if (this.locked) {\n      menuList = [\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n      ];\n    } else {\n      menuList = [\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Duplicate',\n        'Copy',\n        'Paste',\n        'Cut',\n        'Delete',\n      ];\n    }\n    if (this.locked) {\n      menuList.push('Unlock');\n    } else {\n      menuList.push('Lock');\n    }\n\n    return menuList;\n  }\n\n  InitializeEvent = () => {\n    const zoom = this.canvas?.getZoom() || 1;\n    this.on('mousedblclick', (memo) => {\n      const offsetX = memo.e.offsetX - (this.left - this.width / 2);\n      const offsetY = memo.e.offsetY - (this.top - this.height / 2);\n\n      if (\n        offsetX < 20 ||\n        offsetX > 480 ||\n        offsetY < 20 ||\n        offsetY > 480 ||\n        (offsetY > 64 && offsetY < 446)\n      ) {\n        getWindow().open(this.url, '_blank').focus();\n      } else {\n        let text = this.title;\n        const textarea = $('#urlTextarea');\n        const cvsPosition = $('#canvasContainer').offset();\n        let fontSize =\n          20 * this.scaleX * zoom;\n        const left = `${cvsPosition.left +\n          (this.left - (this.width / 2 - 22) * this.scaleX) *\n          zoom\n          }px`;\n        let top = `${cvsPosition.top +\n          (this.top - (this.height / 2 - 22) * this.scaleY) *\n          zoom\n          }px`;\n        const newWidth =\n          (this.width - 44) *\n          this.scaleX *\n          zoom;\n        const width = `${newWidth}px`;\n        let height = `${40 * this.scaleY * zoom\n          }px`;\n        const paddingLeft = `${10 * this.scaleY * zoom\n          }px`;\n        let lineHeight = '40px';\n        textarea.data('type', 'title');\n        if (offsetY >= 446) {\n          text = this.description;\n          fontSize =\n            15 * this.scaleX * zoom;\n          top = `${cvsPosition.top +\n            (this.top + (this.height / 2 - 52) * this.scaleY) *\n            zoom\n            }px`;\n          height = `${30 * this.scaleY * zoom\n            }px`;\n          lineHeight = '30px';\n          textarea.data('type', 'description');\n        }\n        textarea\n          .data('widget', this)\n          .css('left', left)\n          .css('top', top)\n          .css('padding-left', paddingLeft)\n          .css('width', width)\n          .css('height', height)\n          .css('background-color', 'white')\n          .css('font-size', `${fontSize}px`)\n          .css('font-family', 'Arial')\n          .css('line-height', lineHeight)\n          .val(text)\n          .show()\n          .focus();\n      }\n    });\n    this.on('removed', this.removedListener);\n  };\n  removedListener() {\n    if (this.loading) {\n      this.loading.remove();\n      this.loading = null;\n    }\n  }\n  initDoubleClickSimulation() {\n    this.__lastClickTime = +new Date();\n    this.on('touchstart', this.onMouseDown.bind(this));\n    this.on('mousedown', this.onMouseDown.bind(this));\n  }\n\n  onMouseUp(options) {\n    this.__newClickTime = +new Date();\n    if (this.__newClickTime - this.__lastClickTime < 500) {\n      this.fire('dblclick', options);\n      this._stopEvent(options.e);\n    }\n    this.__lastClickTime = this.__newClickTime;\n  }\n\n  _stopEvent(e) {\n    e.preventDefault();\n    e.stopPropagation();\n  }\n  //@ts-ignore\n  drawObject(ctx: CanvasRenderingContext2D) {\n    let elementToDraw = null;\n    // draw border\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    if (\n      this.isMoving === false &&\n      this.resizeFilters.length &&\n      this._needsResize()\n    ) {\n      this._lastScaleX = this.scaleX;\n      this._lastScaleY = this.scaleY;\n      elementToDraw = this.applyFilters(\n        null,\n        this.resizeFilters,\n        this._filteredEl || this._originalElement,\n        true,\n      );\n    } else {\n      elementToDraw = this._element;\n    }\n\n    const imgWidth = this.name.substring(this.name.lastIndexOf('.') + 1) === 'pdf' ? 320 : 230;\n    const imgHeight = this.name.substring(this.name.lastIndexOf('.') + 1) === 'pdf' ? 453 : 160;\n\n    if (elementToDraw) {\n      ctx.drawImage(elementToDraw, -this.width / 2, -this.height / 2, imgWidth, imgHeight);\n    }\n\n    if (this.name.substring(this.name.lastIndexOf('.') + 1) !== 'pdf') {\n      this.renderTitle(ctx, this.name, this.getFileType(this.name));\n    }\n    this._renderStroke(ctx);\n  }\n\n  getFileType(name = '') {\n    let fileType = '';\n    switch (name.substring(name.lastIndexOf('.') + 1)) {\n      case 'doc':\n      case 'docx':\n        fileType = 'Word Document';\n        break;\n      case 'xls':\n      case 'xlsx':\n        fileType = 'Excel Document';\n        break;\n      case 'ppt':\n      case 'pptx':\n        fileType = 'PPT Document';\n        break;\n      case 'pdf':\n        fileType = 'PDF Document';\n        break;\n      case 'zip':\n        fileType = 'ZIP File';\n        break;\n      case 'mp4':\n        fileType = 'Video Document';\n        break;\n      case 'webm':\n        fileType = 'Video Document';\n        break;\n      default:\n        fileType = 'Other Document';\n        break;\n    }\n    return fileType;\n  }\n\n  isFileVideo(name: string) {\n    if (!name) return false;\n    const FileType = this.name.split('.').pop();\n    switch (name.substr(name.lastIndexOf('.') + 1)) {\n      case FileType.MP4:\n        return true;\n      case FileType.WEBM:\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  renderTitle(ctx, title) {\n    const maxWidth = this.width;\n    const x = -this.width / 2;\n    const y = this.height / 2 - 60;\n\n    ctx.font = '16px Arial';\n    ctx.fillStyle = 'rgba(255, 255, 255, 1)';\n\n    // white board behind the title\n    ctx.fillRect(x, y - 29, maxWidth, 90);\n    ctx.fillStyle = '#190FA1';\n\n    // helper function to convert string\n    const GB2312UnicodeConverter = {\n      ToUnicode(str) {\n        return escape(str).toLocaleLowerCase().replace(/%u/gi, '\\\\u');\n      },\n      ToGB2312(str) {\n        return unescape(str.replace(/\\\\u/gi, '%u'));\n      },\n    };\n    // Handle non-unicode or non-utf8 coding string\n    const unicodeTitle = GB2312UnicodeConverter.ToUnicode(title);\n\n    // handle the situation that the website's title is null\n    if (title === null || unicodeTitle.indexOf('\\\\ufffd') !== -1 || !title) {\n      const firstChar = this.url.indexOf('.');\n      const lastChar = this.url.indexOf('.', firstChar + 1);\n      this.title = this.url.substring(firstChar + 1, lastChar);\n    }\n\n    // title setting\n    this.wrapText(ctx, title, x + 15, y - 5, maxWidth - 20, 23);\n\n    // url setting\n    const newurl = this.url ? `${this.url.split('/')[0]}/${this.url.split('/')[1]}/${this.url.split('/')[2]}` : '';\n    ctx.font = '12px Arial';\n    ctx.fillStyle = 'rgba(35, 41, 48, 0.65)';\n    // gray square in front of website\n    this.wrapText(ctx, newurl, x + 15, y + 45, maxWidth - 20, 25);\n  }\n\n  changeFileImgUrl(targetSrc) {\n    this.setSrc(\n      targetSrc,\n      () => {\n        this.width = 320;\n        this.height = 453;\n        this.dirty = true;\n        if (canvas) {\n          canvas.requestRenderAll();\n        }\n      },\n      { crossOrigin: 'annonymous', ...this.toObject() }\n    );\n  }\n\n\n  wrapText(context, text, x, y, maxWidth, lineHeight) {\n    let words = '';\n    if (text) words = text.split(' ');\n\n    let line = '';\n    let lineCount = 1;\n    let tempLine = '';\n    let _y = y;\n\n    // handle non-English char\n    if (escape(text).indexOf('%u') < 0) {\n      // only the English char\n      for (let n = 0; n < words.length; n++) {\n        if (lineCount === 3) return;\n        if (n !== 0) tempLine = `${line.slice(0, -3)}...`;\n        const testLine = `${line + words[n]} `;\n        const metrics = context.measureText(testLine);\n        const testWidth = metrics.width;\n        if (testWidth > maxWidth && n > 0) {\n          if (lineCount === 2) {\n            line = tempLine;\n          }\n          context.fillText(line, x, _y);\n          line = `${words[n]} `;\n          _y += lineHeight;\n          lineCount++;\n        } else {\n          line = testLine;\n        }\n      }\n    } else {\n      for (let n = 0; n < text.length; n++) {\n        if (lineCount === 3) return;\n        if (n !== 0) tempLine = `${line.slice(0, -2)}...`;\n        const testLine = `${line + text[n]}`;\n        const metrics = context.measureText(testLine);\n        const testWidth = metrics.width;\n        if (testWidth > maxWidth && n > 0) {\n          if (lineCount === 2) {\n            line = tempLine;\n          }\n          context.fillText(line, x, _y);\n          line = `${text[n]}`;\n          _y += lineHeight;\n          lineCount++;\n        } else {\n          line = testLine;\n        }\n      }\n    }\n    if (lineCount < 3) context.fillText(line, x, _y);\n  }\n  getFileIconURL(name) {\n    let fileIconURL = '';\n    switch (name.substring(name.lastIndexOf('.') + 1)) {\n      case 'doc':\n      case 'docx':\n        fileIconURL = '/fileIcons/word.png';\n        break;\n      case 'xls':\n      case 'xlsx':\n        fileIconURL = '/fileIcons/excel.png';\n        break;\n      case 'ppt':\n      case 'pptx':\n        fileIconURL = '/fileIcons/ppt.png';\n        break;\n      case 'pdf':\n        fileIconURL = '/fileIcons/pdf.svg';\n        break;\n      case 'zip':\n        fileIconURL = '/fileIcons/zip.png';\n        break;\n      case 'mp4':\n        fileIconURL = '/fileIcons/mp4.png';\n        break;\n\n      case 'webm':\n        fileIconURL = '/fileIcons/mp4.png';\n        break;\n      default:\n        fileIconURL = '/fileIcons/file.png';\n        break;\n    }\n    return fileIconURL;\n  }\n  fromURL<T extends TProps<SerializedWBFileProps>>(fileOptions: T & LoadImageOptions = {}\n  ): Promise<WBFile> {\n    return new Promise(async (resolve, reject) => {\n      const url = fileOptions.previewImage ? fileOptions.previewImage : this.getFileIconURL(fileOptions.name);\n      try {\n        const loadedImg = await loadImage(url, { ...fileOptions, crossOrigin: 'anonymous' });\n        resolve(new WBFile(loadedImg, fileOptions));\n      } catch (error) {\n        reject(error);\n      }\n    });\n  }\n}\nclassRegistry.setClass(WBFile);\n","//@ts-nocheck\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) {\n  // points attribute is required and must not be empty\n  if (!points) {\n    return null;\n  }\n\n  // replace commas with whitespace and remove bookending whitespace\n  points = points.replace(/,/g, ' ').trim();\n\n  points = points.split(/\\s+/);\n  const parsedPoints = [];\n\n  for (let i = 0; i < points.length; i += 2) {\n    parsedPoints.push({\n      x: parseFloat(points[i]),\n      y: parseFloat(points[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 { XY, Point } from '../Point';\nimport { TClassProperties } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { projectStrokeOnPoints } from '../util/misc/projectStroke';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type {\n  FabricObjectProps,\n  SerializedObjectProps,\n  TProps,\n} from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport { cloneDeep } from '../util/internals/cloneDeep';\n\nexport const polylineDefaultValues: Partial<TClassProperties<Polyline>> = {\n  exactBoundingBox: false,\n};\n\nexport interface SerializedPolylineProps extends SerializedObjectProps {\n  points: XY[];\n}\n\nexport class Polyline<\n  Props extends TProps<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\n   * @type Boolean\n   * @default false\n   */\n  declare exactBoundingBox: boolean;\n\n  private declare initialized: true | undefined;\n\n  static ownDefaults: Record<string, any> = polylineDefaultValues;\n\n  static getDefaults() {\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  /**\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({ points, ...options });\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() {\n    return projectStrokeOnPoints(this.points, this, this.isOpen());\n  }\n\n  /**\n   * Calculate the polygon bounding box\n   * @private\n   */\n  _calcDimensions() {\n    const points = this.exactBoundingBox\n      ? this._projectStrokeOnPoints().map(\n          (projection) => projection.projectedPoint\n        )\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      };\n    }\n    const bbox = makeBoundingBoxFromPoints(points);\n    const bboxNoStroke = makeBoundingBoxFromPoints(this.points);\n    const offsetX = bbox.left + bbox.width / 2,\n      offsetY = bbox.top + bbox.height / 2;\n    const pathOffsetX =\n      offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));\n    const pathOffsetY =\n      offsetY - pathOffsetX * Math.tan(degreesToRadians(this.skewY));\n    return {\n      ...bbox,\n      pathOffset: new Point(pathOffsetX, pathOffsetY),\n      strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top).subtract(\n        new Point(bbox.left, bbox.top)\n      ),\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 } =\n      this._calcDimensions();\n    this.set({ width, height, pathOffset, strokeOffset });\n    adjustPosition &&\n      this.setPositionByOrigin(\n        new Point(left + width / 2, top + height / 2),\n        'center',\n        'center'\n      );\n  }\n\n  /**\n   * @override stroke is taken in account in size\n   */\n  _getNonTransformedDimensions() {\n    return this.exactBoundingBox\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   *\n   * @private\n   */\n  _getTransformedDimensions(options?: any) {\n    return this.exactBoundingBox\n      ? super._getTransformedDimensions({\n          ...(options || {}),\n          // disable stroke bbox calculations\n          strokeWidth: 0,\n          // disable skewing bbox calculations\n          skewX: 0,\n          skewY: 0,\n        })\n      : super._getTransformedDimensions(options);\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      changed &&\n      (((key === 'scaleX' || key === 'scaleY') &&\n        this.strokeUniform &&\n        (this.constructor as typeof Polyline).layoutProperties.includes(\n          'strokeUniform'\n        ) &&\n        this.strokeLineJoin !== 'round') ||\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      `<${this.constructor.name.toLowerCase() as 'polyline' | 'polygon'} `,\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 {SVGElement} element Element to parser\n   * @param {Function} callback callback function invoked after parsing\n   * @param {Object} [options] Options object\n   */\n  static fromElement(\n    element: SVGElement,\n    callback: (poly: Polyline | null) => any,\n    options?: any\n  ) {\n    if (!element) {\n      return callback(null);\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      );\n    callback(\n      new this(points || [], {\n        ...parsedAttributes,\n        ...options,\n      })\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 TProps<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: Record<string, any> = polylineDefaultValues;\n\n  static getDefaults() {\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","// @ts-nocheck\nimport { TClassProperties } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { Textbox } from './Textbox';\nimport { createRectNotesDefaultControls } from '../controls/commonControls';\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 rectNotesDefaultValues: Partial<TClassProperties<RectNotes>> = {\n  minWidth: 20,\n  dynamicMinWidth: 2,\n  lockScalingFlip: true,\n  noScaleCache: false,\n  _wordJoiners: /[ \\t\\r]/,\n  splitByGrapheme: true,\n  obj_type: 'WBRectNotes',\n  height: 138,\n  maxHeight: 138,\n  emoj: [0, 0, 0, 0, 0],\n  originX: 'center',\n  originY: 'center',\n  width: 230\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 RectNotes extends Textbox {\n  /**selectable\n   * Minimum width of textbox, in pixels.\n   * @type Number\n   * @default\n   */\n  declare minWidth: number;\n\n  /* boardx cusotm function */\n  declare _id: string;\n\n  declare obj_type: string;\n\n  declare locked: boolean;\n\n  declare whiteboardId: 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  public extendPropeties = ['obj_type', 'whiteboardId', 'userId', 'timestamp', 'zIndex', 'locked', 'verticalAlign', 'lines', '_id', 'zIndex', 'relationship', 'emoj', 'userEmoji'];\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 = [...Textbox.textLayoutProperties, 'width'];\n\n  static ownDefaults: Record<string, any> = rectNotesDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      controls: createRectNotesDefaultControls(),\n      ...RectNotes.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('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.toFixed(2);\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) {\n    let realLineCount = 0,\n      realLineCharCount = 0,\n      charCount = 0;\n    const map = {};\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, 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\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  _wrapLine(\n    _line,\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\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  _removeExtraneousStyles() {\n    const linesToKeep = {};\n    for (const prop in this._styleMap) {\n      if (this._textLines[prop]) {\n        linesToKeep[this._styleMap[prop].line] = 1;\n      }\n    }\n    for (const prop in this.styles) {\n      if (!linesToKeep[prop]) {\n        delete this.styles[prop];\n      }\n    }\n  }\n\n  getObject() {\n    const object = {};\n    const keys = [\n      '_id', // string, the id of the object\n      'angle', //  integer, angle for recording rotating\n      'backgroundColor', // string,  background color, works when the image is transparent\n      'fill', // the font color\n      'width', // integer, width of the object\n      'height', // integer, height of the object\n      'left', // integer left for position\n      'lines', // array, the arrows array [{…}]\n      'locked', // boolean, lock status for the widget， this is connected to lock\n      'lockMovementX', // boolean, lock the verticle movement\n      'lockMovementY', // boolean, lock the horizontal movement\n      'lockScalingFlip', // boolean,  make it can not be inverted by pulling the width to the negative side\n      'obj_type', // object type\n      'originX', // string, Horizontal origin of transformation of an object (one of \"left\", \"right\", \"center\") See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n      'originY', // string, Vertical origin of transformation of an object (one of \"top\", \"bottom\", \"center\") See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n      'scaleX', // nunber, Object scale factor (horizontal)\n      'scaleY', // number, Object scale factor (vertical)\n      'selectable', // boolean, When set to `false`, an object can not be selected for modification (using either point-click-based or group-based selection). But events still fire on it.\n      'top', // integer, Top position of an object. Note that by default it's relative to object top. You can change this by setting originY={top/center/bottom}\n      'userNo', // string, the unique id for the user, one user id could open mutiple browser, each browser has unique user no\n      'userId', // string, user identity\n      'whiteboardId', // whiteboard id, string\n      'zIndex', // the index for the object on whiteboard, integer\n      'version', // version of the app, string\n      'isPanel', // is this a panel, boolean\n      'panelObj', // if this is a panel, the id of the panel, string\n      'relationship', // array, viewporttransform\n      'subObjList', // [\"5H9qYfNGt4vizhcuS\"] array list _id for sub objects\n      'fontFamily', // string, font family\n      'fontSize', // integer, font size\n      'fontWeight', // integer, font weight\n      'lineHeight', // integer, font height\n      'strokeWidth', //\n      'text', // string, text\n      'textAlign', // string, alignment\n      'imageSrc', // src for the note draw\n      'isDraw', // is this a draw note\n      'emoji', // [0,0,0,0,0], record the emoji\n      'userEmoji', // [{userid,[0,0,0,0,1]},{userid,[0,0,0,0,1]}], record who vote the emoji\n      'editable', // text editable,\n      'lastEditedBy' // last edited by\n    ];\n    keys.forEach((key) => {\n      object[key] = this[key];\n    });\n    return object;\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(propertiesToInclude: Array<any>): object {\n    return super.toObject(\n      [...this.extendPropeties, 'minWidth', 'splitByGrapheme'].concat(propertiesToInclude)\n    );\n\n  }\n  /**boardx custom function */\n\n  getWidgetMenuList() {\n    if (this.isDraw) {\n      return [\n        'textNote',\n        'borderLineIcon',\n        'backgroundColor',\n        'resetDraw',\n        'switchNoteType',\n        'drawOption',\n        'lineWidth',\n        'noteDrawColor', // strokeColor\n        'emojiMenu',\n        'more',\n        'objectLock',\n        'aiassist'\n      ];\n    }\n    if (this.locked) {\n      return ['objectLock'];\n    }\n    return [\n      'drawNote',\n      'more',\n      'borderLineIcon',\n      'switchNoteType',\n      'fontSize',\n      'textAlign',\n      'backgroundColor',\n      'emojiMenu',\n      'fontWeight',\n      'textBullet',\n      'objectLock',\n      'delete',\n      'aiassist'\n    ];\n  }\n  getWidgetMenuTouchList() {\n    if (this.isDraw) {\n      return ['emojiMenu', 'objectLock'];\n    }\n    if (this.locked) {\n      return ['objectLock'];\n    }\n    return [\n      'objectDelete',\n      'moreMenuStickyNote',\n      'backgroundColor',\n      'fontColor',\n      'emojiMenu',\n      'objectLock',\n      'aiassist'\n    ];\n  }\n  getWidgetMenuLength() {\n    if (this.locked) return 50;\n    if (this.isDraw) {\n      return 308;\n    }\n    return 420;\n  }\n  /* caculate cusor positon in the middle of the textbox */\n  getCenteredTop(rectHeight) {\n    const textHeight = this.height;\n    return (rectHeight - textHeight) / 2;\n  }\n\n  _render(ctx) {\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  _renderBackground(ctx) {\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  _getTotalLineHeight() {\n    return this._textLines.reduce(\n      (total, _line, index) => total + this.getHeightOfLine(index),\n      0\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;\n    const y = this.height / 2 - 18;\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;\n        const imageY = this.height / 2 - 15;\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,\n          y + 12\n        );\n        modifier -= 23.6;\n      }\n    }\n  }\n  _renderText(ctx) {\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(cxt, width, height, radius) {\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(RectNotes);\n","// @ts-nocheck\nimport { getDocument } from '../env';\nimport { TClassProperties } from '../typedefs';\nimport { Textbox } from './Textbox';\nimport { classRegistry } from '../ClassRegistry';\nimport { createRectNotesDefaultControls } from '../controls/commonControls';\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 shapeNotesDefaultValues: Partial<TClassProperties<ShapeNotes>> = {\n  minWidth: 20,\n  dynamicMinWidth: 2,\n  lockScalingFlip: true,\n  noScaleCache: false,\n  _wordJoiners: /[ \\t\\r]/,\n  splitByGrapheme: true,\n  obj_type: 'WBShapeNotes',\n  height: 138,\n  maxHeight: 138,\n  textAlign: 'center',\n  uniformScaling: false,\n  centeredScaling: 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 */\nexport class ShapeNotes extends Textbox {\n  /**selectable\n   * Minimum width of textbox, in pixels.\n   * @type Number\n   * @default\n   */\n  declare minWidth: number;\n\n  /* boardx cusotm function */\n  declare _id: string;\n\n  declare obj_type: string;\n\n  declare locked: boolean;\n\n  declare whiteboardId: 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 icon: string;\n\n  public extendPropeties = [\n    'obj_type',\n    'whiteboardId',\n    'userId',\n    'timestamp',\n    'zIndex',\n    'locked',\n    'verticalAlign',\n    'lines',\n    '_id',\n    'zIndex',\n    'relationship',\n    'icon',\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 = [...Textbox.textLayoutProperties, 'width'];\n\n  static ownDefaults: Record<string, any> = shapeNotesDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      controls: createRectNotesDefaultControls(),\n      ...ShapeNotes.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.__skipDimension) {\n      return;\n    }\n\n    this.clearContextTop();\n    this._clearCache();\n\n    const newLines = this._splitText();\n\n    if (this.isEditing) {\n      this.initDelayedCursor();\n\n      const preHeight = this.height;\n      const total = this._getTotalLineHeights() + this.getTopOffset();\n      this.height = Math.max(this.maxHeight, total);\n      const yOffset = this.height - preHeight;\n      this.top += yOffset / 2;\n    } else if (this._textLines && this._textLines.length > 0) {\n      if (this.height === this.maxHeight) {\n        /**\n         * scaling\n         * total height of _textLines < maxHeight\n         */\n        let lineHeights = 0;\n        const tmp = [];\n        for (let i = 0, len = this._textLines.length; i < len; i++) {\n          const heightOfLine = this.getHeightOfLine(i);\n          lineHeights += heightOfLine;\n          if (lineHeights <= this.height - this.getTopOffset()) {\n            tmp.push(this._textLines[i]);\n          }\n        }\n        if (tmp.length > 0) {\n          const preLines = this._textLines.length;\n          this._textLines = tmp;\n          if (tmp.length !== preLines) {\n            // need add ellipsis at last line\n            const lastIndex = this._textLines.length - 1,\n              lastLine = this._textLines[lastIndex];\n            lastLine.pop();\n            lastLine.pop();\n            lastLine.pop();\n            lastLine.push('.');\n            lastLine.push('.');\n            lastLine.push('.');\n          }\n        }\n      } else if (this.height > this.maxHeight) {\n        /**\n         * height > maxHeight\n         * exit editing and _textlines total height > maxHeight\n         */\n        // console.log('### exit editing & initDimensions');\n      }\n    }\n\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(newLines);\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\n    return this.height;\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) {\n    let realLineCount = 0,\n      realLineCharCount = 0,\n      charCount = 0;\n    const map = {};\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, 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  /** This is the method of char split */\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  _wrapLine(\n    _line,\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  textSplitTextIntoLines(text: string) {\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  _splitTextIntoLines(text) {\n    const width = this.width - this.getLeftOffset();\n\n    const newText = this.textSplitTextIntoLines(text),\n      graphemeLines = this._wrapText(newText.lines, 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 = {};\n    for (const prop in this._styleMap) {\n      if (this._textLines[prop]) {\n        linesToKeep[this._styleMap[prop].line] = 1;\n      }\n    }\n    for (const prop in this.styles) {\n      if (!linesToKeep[prop]) {\n        delete this.styles[prop];\n      }\n    }\n  }\n\n  getObject() {\n    const object = {};\n    const keys = [\n      '_id',\n      'angle',\n      'backgroundColor',\n      'fill',\n      'fontFamily',\n      'fontSize',\n      'height',\n      'width',\n      'left',\n      'lines', // the arrows array [{…}]\n      'lockUniScaling',\n      'locked',\n      'lockMovementX', // boolean, lock the verticle movement\n      'lockMovementY', // boolean, lock the horizontal movement\n      'lockScalingFlip', // boolean,  make it can not be inverted by pulling the width to the negative side\n      'fontWeight',\n      'lineHeight',\n      'obj_type',\n      'originX',\n      'originY',\n      'panelObj', // the parent panel string\n      'relationship', // relationship with panel for transform  [1.43, 0, 0, 1.43, 7.031931057304291, 16.531768328466796]\n      'scaleX',\n      'scaleY',\n      'selectable',\n      'text',\n      'textAlign',\n      'top',\n      'userNo',\n      'userId',\n      'whiteboardId',\n      'zIndex',\n      'version',\n      'isPanel',\n      'editable',\n      'path',\n      'strokeWidth',\n      'strokeUniform', // set up to true then strokewidth doesn't change when scaling\n      'stroke', // border color\n      'selectable', // boolean, When set to `false`, an object can not be selected for modification (using either point-click-based or group-based selection). But events still fire on it.\n      'icon',\n      'lineWidth',\n      'fixedLineWidth',\n      'aCoords',\n      'shapeScaleX',\n      'shapeScaleY',\n      'verticalAlign',\n      'maxHeight',\n      'shadow',\n      'subObjs',\n    ];\n    keys.forEach((key) => {\n      object[key] = this[key];\n    });\n    return object;\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(propertiesToInclude: Array<any>): object {\n    return super.toObject(\n      [...this.extendPropeties, 'minWidth', 'splitByGrapheme'].concat(\n        propertiesToInclude\n      )\n    );\n  }\n  /**boardx custom function */\n  getObjectsIntersected() {\n    const objects = this.canvas._getIntersectedObjects(this);\n    objects.filter((obj) => {\n      return obj._id !== this._id && obj.obj_type !== 'WBArrow';\n    });\n    return objects;\n  }\n\n  setLockedShadow(locked) {\n    if (locked) {\n      this.shadow = new fabric.Shadow({\n        blur: 2,\n        offsetX: 0,\n        offsetY: 0,\n        color: 'rgba(0, 0, 0, 0.5)',\n      });\n    } else {\n      this.shadow = new fabric.Shadow({\n        blur: 8,\n        offsetX: 0,\n        offsetY: 4,\n        color: 'rgba(0,0,0,0.04)',\n      });\n    }\n  }\n\n  /* caculate cusor positon in the middle of the textbox */\n  getCenteredTop(rectHeight) {\n    const textHeight = this.height;\n    return (rectHeight - textHeight) / 2;\n  }\n\n  _renderBackground(ctx) {\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      0: rect\n      1: diamond\n      2: rounded rect\n      3: circle\n      4: hexagon\n      5: triangle\n      6: parallelogramIcon\n      7: star\n      8: cross\n      9: leftside right triangle\n      10: rightside right triangle\n      11: topside semicirle circle\n      12: top-left quarter circle\n      13: Constallation Rect\n      14: Constellation Round\n    */\n    const shapeArray = [\n      'M-50,-50L50,-50 50,50 -50,50z', // 0: rect\n      'm-50,0 l50,-50 50,50 -50,50 -50,-50z', // 1: diamond\n      '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', // 2: rounded rect\n      'M-50,0a50,50 0 1,0 100,0a50,50 0 1,0 -100,0', // 3: circle\n      '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', // 4: hexagon\n      'm-50,50l50,-100l50,100l-100,0z', // 5: triangle\n      'm-50,50l20,-100l80,0l-20,100l-80,0z', // 6: parallelogramIcon\n      'm-50,-10l38,0l12,-38l12,38l38,0l-30,23l12,38l-30,-24l-30,24l12,-38l-30,-23z', // 7: star\n      'm-50,-15l33,0l0,-33l34,0l0,33l33,0l0,34l-33,0l0,33l-34,0l0,-33l-33,0l0,-34z', // 8: cross\n      'm50,50l-100,0l0,-100l100,100z', // 9: leftside right triangle\n      'm-50,50l100,0l0,-100l-100,100z', // 10: rightside right triangle\n      'm50,25l-100,-0.00205c3.5,-27.5 25,-48 50,-48c25,0 46.5,20.5 50,48z', // 11: topside semicirle circle\n      'm-50,50c7,-55 47,-96 97,-97l0,65l0,32l-97,-0.00392z', // 12: top-left quarter circle\n      'm20,0l25,23l0,24l-100,0l0,-100l100,0l0,23l-25,24l-0.15,0.14l0.15,0.14l-0.00001,0z', // 13: Constallation Rect\n      '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', // 14: Constellation Round\n    ];\n\n    ctx.save();\n\n    const svgPath = new Path2D(shapeArray[this.icon]);\n    const m = getDocument()\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.lineWidth = this.lineWidth / (this.width / 138 + this.height / 138) / 2;\n    ctx.lineWidth = this.lineWidth;\n    ctx.strokeStyle = this.stroke;\n    ctx.stroke(path);\n    ctx.fillStyle = this.backgroundColor;\n    ctx.fill(path);\n    ctx.restore();\n  }\n  getTopOffset() {\n    let tOffset = 0;\n    switch (this.icon) {\n      case 0:\n      case 2:\n        tOffset = 40;\n        break;\n      case 1:\n      case 3:\n      case 5:\n        tOffset = this.height / 2;\n        break;\n      case 4:\n        tOffset = this.height / 3;\n        break;\n      default:\n    }\n    return tOffset;\n  }\n  getLeftOffset() {\n    let lOffset = 0;\n    switch (this.icon) {\n      case 0:\n      case 2:\n      case 4:\n        lOffset = 40;\n        break;\n      case 1:\n      case 3:\n      case 5:\n        lOffset = this.width / 2;\n        break;\n      default:\n    }\n    return lOffset;\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  _getTotalLineHeight() {\n    return this._textLines.reduce(\n      (total, _line, index) => total + this.getHeightOfLine(index),\n      0\n    );\n  }\n\n  _renderText(ctx) {\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  calcTextHeight() {\n    let lineHeight;\n    let 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\n    const desiredHeight = this.height * (100 / 138);\n\n    if (height > desiredHeight) {\n      this.set('fontSize', this.fontSize - 2);\n      //@ts-ignore\n      this._splitTextIntoLines(this.text);\n      height = this.maxHeight;\n      return Math.max(height, this.height);\n    }\n    if (\n      height < this.maxHeight &&\n      this.maxHeight - height > 60 &&\n      this.fontSize < 24\n    ) {\n      this.fontSize += 2;\n      //@ts-ignore\n      this._splitTextIntoLines(this.text.trim());\n\n      return Math.max(height, this.height);\n    }\n\n    this.height = this.maxHeight;\n  }\n  _renderTextCommon(ctx, method) {\n    ctx.save();\n    let lineHeights = 0;\n    const left = this._getLeftOffset();\n    const top = this._getTopOffset();\n    const offsets = this._applyPatternGradientTransform(\n      ctx,\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  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;\n    const y = this.height / 2 - 18;\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;\n        const imageY = this.height / 2 - 15;\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,\n          y + 12\n        );\n        modifier -= 23.6;\n      }\n    }\n  }\n\n  _getTotalLineHeights() {\n    return this._textLines.reduce(\n      (total, _line, index) => total + this.getHeightOfLine(index),\n      0\n    );\n  }\n\n  _getSVGLeftTopOffsets() {\n    return {\n      textLeft: -this.width / 2,\n      textTop: this._getTopOffset(),\n      lineTop: this.getHeightOfLine(0),\n    };\n  }\n  getWidgetMenuList() {\n    if (this.locked) {\n      return ['objectLock'];\n    }\n    return [\n      'more',\n      'fontSize',\n      'textAlign',\n      'changeFont',\n      'backgroundColor',\n      'fontColor',\n      'borderLineIcon',\n      'fontWeight',\n      'objectLock',\n      'shapeBorderColor',\n      'lineWidth',\n      'borderLineIcon',\n      'delete',\n      'aiassist',\n    ];\n  }\n  getWidgetMenuLength() {\n    if (this.locked) return 50;\n    return 420;\n  }\n  getContextMenuList() {\n    let menuList;\n    if (this.locked) {\n      menuList = [\n        'Export board',\n        'Exporting selected area',\n        'Create Share Back',\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Copy as image',\n        'Copy As Text',\n      ];\n    } else {\n      menuList = [\n        'Export board',\n        'Exporting selected area',\n        'Create Share Back',\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Duplicate',\n        'Copy',\n        'Copy as image',\n        'Copy As Text',\n        'Paste',\n        'Cut',\n        'Edit',\n        'Delete',\n      ];\n    }\n    menuList.push('Select All');\n    if (this.locked) {\n      menuList.push('Unlock');\n    } else {\n      menuList.push('Lock');\n    }\n    // const notLockedPanel = this.isPanel && !this.locked;\n    // if (notLockedPanel) {\n    //   menuList.push('Switch to non-panel');\n    // } else {\n    //   menuList.push('Switch to panel');\n    // }\n    return menuList;\n  }\n}\n\nclassRegistry.setClass(ShapeNotes);\n","import { classRegistry } from '../ClassRegistry';\nimport { FabricObject } from './Object/FabricObject';\nimport type {\n  FabricObjectProps,\n  SerializedObjectProps,\n  TProps,\n} from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\n\nexport const triangleDefaultValues = {\n  width: 100,\n  height: 100,\n};\n\nexport class Triangle<\n    Props extends TProps<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 ownDefaults: Record<string, any> = triangleDefaultValues;\n\n  static getDefaults() {\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","// @ts-nocheck\nimport { TClassProperties, TSize } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { Shadow } from '../Shadow';\nimport { Rect } from '../shapes/Rect';\nimport { getWindow } from '../env';\nimport { Image as FbricImage } from './Image';\nimport { getDocument } from '../env';\nimport { createFileDefaultControls } from '../controls/commonControls';\nimport type {\n    FabricObjectProps,\n    SerializedObjectProps,\n    TProps,\n} from './Object/types';\nimport {\n    loadImage,\n    LoadImageOptions,\n} from '../util/misc/objectEnlive';\n\nexport type ImageSource =\n    | string\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    url: string;\n}\n\nexport const UrlImageDefaultValues: Partial<TClassProperties<UrlImage>> = {\n    minWidth: 20,\n    dynamicMinWidth: 2,\n    lockScalingFlip: true,\n    noScaleCache: false,\n    _wordJoiners: /[ \\t\\r]/,\n    splitByGrapheme: true,\n    obj_type: 'WBUrlImage',\n    height: 200,\n    maxHeight: 200,\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    url: string;\n}\nexport interface UrlImageProps extends FabricObjectProps, UniqueImageProps { }\n\nexport class UrlImage<\n    Props extends TProps<UrlImageProps> = Partial<UrlImageProps>,\n> extends FbricImage {\n\n    declare minWidth: number;\n\n    /* boardx cusotm function */\n    declare _id: string;\n\n    declare obj_type: string;\n\n    declare locked: boolean;\n\n    declare whiteboardId: string;\n\n    declare userId: string;\n\n    declare timestamp: Date;\n\n    declare verticalAlign: string;\n\n    declare zIndex: number;\n\n    declare url: string;\n\n    declare lines: object[];\n\n    declare title: string;\n\n    declare relationship: object[];\n\n    public extendPropeties = ['obj_type', 'whiteboardId', 'userId', 'timestamp', 'zIndex', 'locked', 'verticalAlign', 'lines', '_id', 'zIndex', 'relationship', 'url', 'title'];\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 ownDefaults: Record<string, any> = UrlImageDefaultValues;\n\n    static getDefaults() {\n        return {\n            ...super.getDefaults(),\n            controls: createFileDefaultControls(),\n            ...UrlImage.ownDefaults,\n        };\n    }\n\n\n    //@ts-ignore\n    constructor(element: ImageSource, options: Props) {\n        super(element, options);\n        this.filters = [];\n        this.resizeFilters = [];\n\n        this.url = options.url;\n        this.title = options.title;\n        this.description = options.description;\n\n        this.shadow = new Shadow({\n            color: 'rgba(217, 161, 177, 0.54)',\n            offsetX: 1,\n            offsetY: 2,\n            blur: 4,\n            //@ts-ignore\n            spread: -5,\n            id: 310,\n        });\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\n            // double click\n            this.InitializeEvent();\n        this.initDoubleClickSimulation();\n        this.width = 230;\n        this.height = 248;\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(UrlImage.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    toObject(propertiesToInclude: Array<any>): object {\n        return super.toObject(\n            [...this.extendPropeties, 'minWidth', 'splitByGrapheme'].concat(propertiesToInclude)\n        );\n\n    }\n    getWidgetMenuList() {\n        if (this.locked) {\n            return ['objectLock'];\n        }\n        return ['more', 'objectLock', 'delete'];\n    }\n    getWidgetMenuLength() {\n        if (this.locked) return 50;\n        return 60;\n    }\n    getContextMenuList() {\n        let menuList;\n        if (this.locked) {\n            menuList = [\n                'Bring forward',\n                'Bring to front',\n                'Send backward',\n                'Send to back',\n            ];\n        } else {\n            menuList = [\n                'Bring forward',\n                'Bring to front',\n                'Send backward',\n                'Send to back',\n                'Duplicate',\n                'Copy',\n                'Paste',\n                'Cut',\n                'Delete',\n            ];\n        }\n\n        if (this.locked) {\n            menuList.push('Unlock');\n        } else {\n            menuList.push('Lock');\n        }\n        return menuList;\n    }\n\n    InitializeEvent = () => {\n        const zoom = this.canvas?.getZoom() || 1;\n        this.on('mousedblclick', (memo) => {\n            const offsetX = memo.e.offsetX - (this.left - this.width / 2);\n            const offsetY = memo.e.offsetY - (this.top - this.height / 2);\n\n            if (\n                offsetX < 20 ||\n                offsetX > 480 ||\n                offsetY < 20 ||\n                offsetY > 480 ||\n                (offsetY > 64 && offsetY < 446)\n            ) {\n                getWindow().open(this.url, '_blank').focus();\n            } else {\n                let text = this.title;\n                const textarea = $('#urlTextarea');\n                const cvsPosition = $('#canvasContainer').offset();\n                let fontSize =\n                    20 * this.scaleX * zoom;\n                const left = `${cvsPosition.left +\n                    (this.left - (this.width / 2 - 22) * this.scaleX) *\n                    zoom\n                    }px`;\n                let top = `${cvsPosition.top +\n                    (this.top - (this.height / 2 - 22) * this.scaleY) *\n                    zoom\n                    }px`;\n                const newWidth =\n                    (this.width - 44) *\n                    this.scaleX *\n                    zoom;\n                const width = `${newWidth}px`;\n                let height = `${40 * this.scaleY * zoom\n                    }px`;\n                const paddingLeft = `${10 * this.scaleY * zoom\n                    }px`;\n                let lineHeight = '40px';\n                textarea.data('type', 'title');\n                if (offsetY >= 446) {\n                    text = this.description;\n                    fontSize =\n                        15 * this.scaleX * zoom;\n                    top = `${cvsPosition.top +\n                        (this.top + (this.height / 2 - 52) * this.scaleY) *\n                        zoom\n                        }px`;\n                    height = `${30 * this.scaleY * zoom\n                        }px`;\n                    lineHeight = '30px';\n                    textarea.data('type', 'description');\n                }\n                textarea\n                    .data('widget', this)\n                    .css('left', left)\n                    .css('top', top)\n                    .css('padding-left', paddingLeft)\n                    .css('width', width)\n                    .css('height', height)\n                    .css('background-color', 'white')\n                    .css('font-size', `${fontSize}px`)\n                    .css('font-family', 'Arial')\n                    .css('line-height', lineHeight)\n                    .val(text)\n                    .show()\n                    .focus();\n            }\n        });\n        this.on('removed', this.removedListener);\n    };\n    removedListener() {\n        if (this.loading) {\n            this.loading.remove();\n            this.loading = null;\n        }\n    }\n    initDoubleClickSimulation() {\n        this.__lastClickTime = +new Date();\n        this.on('touchstart', this.onMouseDown.bind(this));\n        this.on('mousedown', this.onMouseDown.bind(this));\n    }\n    onMouseDown(options) {\n        this.__newClickTime = +new Date();\n        if (this.__newClickTime - this.__lastClickTime < 500) {\n            this.lockMovementX = true;\n            this.lockMovementY = true;\n            this.fire('dblclick', options);\n            this._stopEvent(options.e);\n        } else {\n            this.lockMovementX = false;\n            this.lockMovementY = false;\n        }\n\n        this.__lastClickTime = this.__newClickTime;\n    }\n    _stopEvent(e) {\n        e.preventDefault();\n        e.stopPropagation();\n    }\n    //@ts-ignore\n    drawObject(ctx: CanvasRenderingContext2D) {\n        let elementToDraw = null;\n\n        // draw border\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        if (\n            this.isMoving === false &&\n            this.resizeFilters.length &&\n            this._needsResize()\n        ) {\n            this._lastScaleX = this.scaleX;\n            this._lastScaleY = this.scaleY;\n            elementToDraw = this.applyFilters(\n                null,\n                this.resizeFilters,\n                this._filteredEl || this._originalElement,\n                true,\n            );\n        } else {\n            elementToDraw = this._element;\n        }\n\n        if (elementToDraw) {\n            ctx.drawImage(elementToDraw, -this.width / 2, -this.height / 2, 230, 160);\n        }\n\n        this.renderTitle(ctx, this.title);\n\n        this._renderStroke(ctx);\n    }\n    renderDescription(ctx) {\n        const maxWidth = this.width;\n\n        ctx.font = '10px Arial';\n        ctx.fillStyle = 'rgba(255, 255, 255, 0.5)';\n        const x = -this.width / 2;\n        const y = this.height / 2;\n\n        ctx.font = '18px Arial';\n        ctx.fillStyle = 'rgba(0, 0, 0)';\n        this.splitByGrapheme = true;\n        this.wrapText(ctx, this.description, x, y, maxWidth, 18);\n    }\n    renderTitle(ctx, title) {\n        const maxWidth = this.width;\n        const x = -this.width / 2;\n        const y = this.height / 2 - 60;\n\n        ctx.font = '16px Arial';\n        ctx.fillStyle = 'rgba(255, 255, 255, 1)';\n\n        // white board behind the title\n        ctx.fillRect(x, y - 29, maxWidth, 90);\n        ctx.fillStyle = '#190FA1';\n\n        // helper function to convert string\n        const GB2312UnicodeConverter = {\n            ToUnicode(str) {\n                return escape(str).toLocaleLowerCase().replace(/%u/gi, '\\\\u');\n            },\n            ToGB2312(str) {\n                return unescape(str.replace(/\\\\u/gi, '%u'));\n            },\n        };\n        // Handle non-unicode or non-utf8 coding string\n        const unicodeTitle = GB2312UnicodeConverter.ToUnicode(title);\n        if (!this.url && this.src) {\n            this.url = this.src;\n        }\n        // handle the situation that the website's title is null\n        if ((title === null || unicodeTitle.indexOf('\\\\ufffd') !== -1 || !title) && this.url) {\n            const firstChar = this.url.indexOf('.');\n            const lastChar = this.url.indexOf('.', firstChar + 1);\n            this.title = this.url.substring(firstChar + 1, lastChar);\n        }\n\n        // title setting\n        this.wrapText(ctx, title, x + 15, y - 5, maxWidth - 20, 23);\n\n        // url setting\n        const newurl = `${this.url.split('/')[0]}/${this.url.split('/')[1]}/${this.url.split('/')[2]\n            }`;\n        ctx.font = '12px Arial';\n        ctx.fillStyle = 'rgba(35, 41, 48, 0.65)';\n        // gray square in front of website\n        this.wrapText(ctx, newurl, x + 15, y + 45, maxWidth - 20, 25);\n    }\n    renderPublishDate(ctx) {\n        const maxWidth = this.width;\n\n        ctx.font = '10px Arial';\n        ctx.fillStyle = 'rgba(255, 255, 255, 0.5)';\n        const x = -this.width / 2 + 20;\n        const y = this.height / 2 - 10;\n        ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';\n\n        ctx.fillRect(-this.width / 2, y - 20, maxWidth, 30);\n\n        ctx.font = '18px Arial';\n        ctx.fillStyle = 'rgba(255, 255, 255, 1)';\n        this.wrapText(\n            ctx,\n            `${this.publisher}:${new Date(this.publishedDate).toDateString()}`,\n            x,\n            y,\n            maxWidth,\n            18,\n        );\n    }\n    wrapText(context, text, x, y, maxWidth, lineHeight) {\n        let words = '';\n        if (text) words = text.split(' ');\n\n        let line = '';\n        let lineCount = 1;\n        let tempLine = '';\n        let _y = y;\n\n        // handle non-English char\n        if (escape(text).indexOf('%u') < 0) {\n            // only the English char\n            for (let n = 0; n < words.length; n++) {\n                if (lineCount === 3) return;\n                if (n !== 0) tempLine = `${line.slice(0, -3)}...`;\n                const testLine = `${line + words[n]} `;\n                const metrics = context.measureText(testLine);\n                const testWidth = metrics.width;\n                if (testWidth > maxWidth && n > 0) {\n                    if (lineCount === 2) {\n                        line = tempLine;\n                    }\n                    context.fillText(line, x, _y);\n                    line = `${words[n]} `;\n                    _y += lineHeight;\n                    lineCount++;\n                } else {\n                    line = testLine;\n                }\n            }\n        } else {\n            for (let n = 0; n < text.length; n++) {\n                if (lineCount === 3) return;\n                if (n !== 0) tempLine = `${line.slice(0, -2)}...`;\n                const testLine = `${line + text[n]}`;\n                const metrics = context.measureText(testLine);\n                const testWidth = metrics.width;\n                if (testWidth > maxWidth && n > 0) {\n                    if (lineCount === 2) {\n                        line = tempLine;\n                    }\n                    context.fillText(line, x, _y);\n                    line = `${text[n]}`;\n                    _y += lineHeight;\n                    lineCount++;\n                } else {\n                    line = testLine;\n                }\n            }\n        }\n        if (lineCount < 3) context.fillText(line, x, _y);\n    }\n\n    fromURL<T extends TProps<SerializedImageProps>>(\n        url: string,\n        options: T & LoadImageOptions = {}\n    ): Promise<UrlImage> {\n        return new Promise((resolve, reject) => {\n            const img = new Image();\n            const cvs = getDocument().createElement('canvas');\n            const ctx = cvs.getContext('2d');\n            img.crossOrigin = '';\n\n            img.onload = async function () {\n                // fix size version\n                cvs.width = 230;\n                cvs.height = 160; // 230 / img.width * img.height;\n                ctx.drawImage(img, 0, 0, 230, 160);\n\n                const imgOptions = {\n                    crossOrigin: 'anonymous',\n                    ...options,\n                };\n\n                try {\n                    const loadedImg = await loadImage(cvs.toDataURL(), imgOptions);\n                    resolve(new UrlImage(loadedImg, options));\n                } catch (error) {\n                    reject(error);\n                }\n            };\n\n            img.onerror = function (error) {\n                reject(error);\n            };\n\n            img.src = url;\n        });\n    }\n\n}\n\nclassRegistry.setClass(UrlImage);\n","//@ts-nocheck\nimport { svgNS } from './constants';\nimport {\n  parsePreserveAspectRatioAttribute,\n  parseUnit,\n} from '../util/misc/svgParsing';\nimport { svgViewBoxElementsRegEx, reViewBoxAttrValue } from './constants';\n\n/**\n * Add a <g> element that envelop all child elements and makes the viewbox transformMatrix descend on all elements\n */\n\nexport function applyViewboxTransform(element) {\n  if (!svgViewBoxElementsRegEx.test(element.nodeName)) {\n    return {};\n  }\n  let viewBoxAttr = 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  let preserveAspectRatio = element.getAttribute('preserveAspectRatio') || '';\n  const missingViewBox =\n    !viewBoxAttr || !(viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue));\n  const missingDimAttr =\n    !widthAttr || !heightAttr || widthAttr === '100%' || heightAttr === '100%';\n  const toBeParsed = missingViewBox && missingDimAttr;\n  const parsedDim = {};\n  let translateMatrix = '';\n  let widthDiff = 0;\n  let heightDiff = 0;\n\n  parsedDim.width = 0;\n  parsedDim.height = 0;\n  parsedDim.toBeParsed = toBeParsed;\n\n  if (missingViewBox) {\n    if (\n      (x || y) &&\n      element.parentNode &&\n      element.parentNode.nodeName !== '#document'\n    ) {\n      translateMatrix =\n        ' translate(' + parseUnit(x) + ' ' + parseUnit(y) + ') ';\n      matrix = (element.getAttribute('transform') || '') + translateMatrix;\n      element.setAttribute('transform', matrix);\n      element.removeAttribute('x');\n      element.removeAttribute('y');\n    }\n  }\n\n  if (toBeParsed) {\n    return parsedDim;\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  minX = -parseFloat(viewBoxAttr[1]);\n  minY = -parseFloat(viewBoxAttr[2]);\n  const viewBoxWidth = parseFloat(viewBoxAttr[3]);\n  const viewBoxHeight = parseFloat(viewBoxAttr[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  preserveAspectRatio = parsePreserveAspectRatioAttribute(preserveAspectRatio);\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 = ' translate(' + parseUnit(x) + ' ' + parseUnit(y) + ') ';\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","//@ts-nocheck\n\n/**\n * Returns CSS rules for a given SVG document\n * @param {SVGDocument} doc SVG document to parse\n * @return {Object} CSS rules of this document\n */\nexport function getCSSRules(doc) {\n  const styles = doc.getElementsByTagName('style');\n  let i;\n  let len;\n  const allRules = {};\n  let rules;\n\n  // very crude parsing of style contents\n  for (i = 0, len = styles.length; i < len; i++) {\n    let styleContents = styles[i].textContent;\n\n    // remove comments\n    styleContents = styleContents.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\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    rules = styleContents.split('}');\n    // remove empty rules.\n    rules = rules.filter(function (rule) {\n      return rule.trim();\n    });\n    // at this point we have hopefully an array of rules `body { style code... `\n    // eslint-disable-next-line no-loop-func\n    rules.forEach(function (rule) {\n      const match = rule.split('{'),\n        ruleObj = {},\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(function (_rule) {\n        _rule = _rule.replace(/^svg/i, '').trim();\n        if (_rule === '') {\n          return;\n        }\n        if (allRules[_rule]) {\n          Object.assign(allRules[_rule], ruleObj);\n        } else {\n          allRules[_rule] = Object.assign({}, ruleObj);\n        }\n      });\n    });\n  }\n  return allRules;\n}\n","//@ts-nocheck\n\nexport function getMultipleNodes(doc, nodeNames) {\n  let nodeName,\n    nodeArray = [],\n    nodeList,\n    i,\n    len;\n  for (i = 0, len = nodeNames.length; i < len; i++) {\n    nodeName = nodeNames[i];\n    nodeList = doc.getElementsByTagName(nodeName);\n    nodeArray = nodeArray.concat(Array.prototype.slice.call(nodeList));\n  }\n  return nodeArray;\n}\n","/**\n * @private\n * to support IE8 missing getElementById on SVGdocument and on node xmlDOM\n */\nexport function elementById(doc: Document, id: string) {\n  let el;\n  doc.getElementById && (el = doc.getElementById(id));\n  if (el) {\n    return el;\n  }\n  let node;\n  let i;\n  let len;\n  const nodelist = doc.getElementsByTagName('*');\n  for (i = 0, len = nodelist.length; i < len; i++) {\n    node = nodelist[i];\n    if (id === node.getAttribute('id')) {\n      return node;\n    }\n  }\n}\n","//@ts-nocheck\n\nimport { elementById } from './elementById';\n\nconst 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(doc, gradient) {\n  const xLink = gradient.getAttribute(xlinkAttr).slice(1),\n    referencedGradient = elementById(doc, xLink);\n  if (referencedGradient && referencedGradient.getAttribute(xlinkAttr)) {\n    recursivelyParseGradientsXlink(doc, referencedGradient);\n  }\n  gradientsAttrs.forEach(function (attr) {\n    if (\n      referencedGradient &&\n      !gradient.hasAttribute(attr) &&\n      referencedGradient.hasAttribute(attr)\n    ) {\n      gradient.setAttribute(attr, referencedGradient.getAttribute(attr));\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  gradient.removeAttribute(xlinkAttr);\n}\n","//@ts-nocheck\n\nimport { 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(doc) {\n  const elList = getMultipleNodes(doc, tagArray);\n  let el;\n  const gradientDefs = {};\n  let j = elList.length;\n  while (j--) {\n    el = elList[j];\n    if (el.getAttribute('xlink:href')) {\n      recursivelyParseGradientsXlink(doc, el);\n    }\n    gradientDefs[el.getAttribute('id')] = el;\n  }\n  return gradientDefs;\n}\n","//@ts-nocheck\n\nexport function hasAncestorWithNodeName(element, nodeName) {\n  while (element && (element = element.parentNode)) {\n    if (\n      element.nodeName &&\n      nodeName.test(element.nodeName.replace('svg:', '')) &&\n      !element.getAttribute('instantiated_by_use')\n    ) {\n      return true;\n    }\n  }\n  return false;\n}\n","//@ts-nocheck\nimport { Gradient } from '../gradient/Gradient';\nimport { Group } from '../shapes/Group';\nimport { Image } from '../shapes/Image';\nimport { classRegistry } from '../ClassRegistry';\nimport {\n  invertTransform,\n  multiplyTransformMatrices,\n  qrDecompose,\n} from '../util/misc/matrix';\nimport { storage } from './constants';\nimport { removeTransformMatrixForSvgParsing } from '../util/transform_matrix_removal';\n\nconst ElementsParser = function (\n  elements,\n  callback,\n  options,\n  reviver,\n  parsingOptions,\n  doc\n) {\n  this.elements = elements;\n  this.callback = callback;\n  this.options = options;\n  this.reviver = reviver;\n  this.svgUid = (options && options.svgUid) || 0;\n  this.parsingOptions = parsingOptions;\n  this.regexUrl = /^url\\(['\"]?#([^'\"]+)['\"]?\\)/g;\n  this.doc = doc;\n};\n\n(function (proto) {\n  proto.parse = function () {\n    this.instances = new Array(this.elements.length);\n    this.numElements = this.elements.length;\n    this.createObjects();\n  };\n\n  proto.createObjects = function () {\n    this.elements.forEach((element, i) => {\n      element.setAttribute('svgUid', this.svgUid);\n      this.createObject(element, i);\n    });\n  };\n\n  proto.findTag = function (el) {\n    return classRegistry.getSVGClass(\n      el.tagName.toLowerCase().replace('svg:', '')\n    );\n  };\n\n  proto.createObject = function (el, index) {\n    const klass = this.findTag(el);\n    if (klass && klass.fromElement) {\n      try {\n        klass.fromElement(el, this.createCallback(index, el), this.options);\n      } catch (err) {\n        console.log(err);\n      }\n    } else {\n      this.checkIfDone();\n    }\n  };\n\n  proto.createCallback = function (index, el) {\n    return (obj) => {\n      let _options;\n      this.resolveGradient(obj, el, 'fill');\n      this.resolveGradient(obj, el, 'stroke');\n      if (obj instanceof Image && obj._originalElement) {\n        _options = obj.parsePreserveAspectRatioAttribute(el);\n      }\n      removeTransformMatrixForSvgParsing(obj, _options);\n      this.resolveClipPath(obj, el);\n      this.reviver && this.reviver(el, obj);\n      this.instances[index] = obj;\n      this.checkIfDone();\n    };\n  };\n\n  proto.extractPropertyDefinition = function (obj, property, storageType) {\n    const value = obj[property],\n      regex = this.regexUrl;\n    if (!regex.test(value)) {\n      return;\n    }\n    regex.lastIndex = 0;\n    const id = regex.exec(value)[1];\n    regex.lastIndex = 0;\n    // @todo fix this\n    return storage[storageType][this.svgUid][id];\n  };\n\n  proto.resolveGradient = function (obj, el, property) {\n    const gradientDef = this.extractPropertyDefinition(\n      obj,\n      property,\n      'gradientDefs'\n    );\n    if (gradientDef) {\n      const opacityAttr = el.getAttribute(property + '-opacity');\n      const gradient = Gradient.fromElement(gradientDef, obj, {\n        ...this.options,\n        opacity: opacityAttr,\n      });\n      obj.set(property, gradient);\n    }\n  };\n\n  proto.createClipPathCallback = function (container) {\n    return function (_newObj) {\n      removeTransformMatrixForSvgParsing(_newObj);\n      _newObj.fillRule = _newObj.clipRule;\n      container.push(_newObj);\n    };\n  };\n\n  proto.resolveClipPath = function (obj, usingElement) {\n    let clipPath = this.extractPropertyDefinition(obj, 'clipPath', 'clipPaths');\n    if (!clipPath) {\n      // if clip-path does not resolve to any element, delete the property.\n      delete obj.clipPath;\n      return;\n    }\n    const container = [];\n    const objTransformInv = invertTransform(obj.calcTransformMatrix());\n    // move the clipPath tag as sibling to the real element that is using it\n    const clipPathTag = clipPath[0].parentNode;\n    let clipPathOwner = usingElement;\n    while (\n      clipPathOwner.parentNode &&\n      clipPathOwner.getAttribute('clip-path') !== obj.clipPath\n    ) {\n      clipPathOwner = clipPathOwner.parentNode;\n    }\n    clipPathOwner.parentNode.appendChild(clipPathTag);\n    for (let i = 0; i < clipPath.length; i++) {\n      const element = clipPath[i];\n      this.findTag(element).fromElement(\n        element,\n        this.createClipPathCallback(container),\n        this.options\n      );\n    }\n    if (container.length === 1) {\n      clipPath = container[0];\n    } else {\n      clipPath = new Group(container);\n    }\n    const gTransform = multiplyTransformMatrices(\n      objTransformInv,\n      clipPath.calcTransformMatrix()\n    );\n    if (clipPath.clipPath) {\n      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      scaleX,\n      scaleY,\n      angle,\n      skewX,\n      skewY: 0,\n    });\n    clipPath.setPositionByOrigin(\n      { x: translateX, y: translateY },\n      'center',\n      'center'\n    );\n    obj.clipPath = clipPath;\n  };\n\n  proto.checkIfDone = function () {\n    if (--this.numElements === 0) {\n      this.instances = this.instances.filter(function (el) {\n        // eslint-disable-next-line no-eq-null, eqeqeq\n        return el != null;\n      });\n      this.callback(this.instances, this.elements);\n    }\n  };\n})(ElementsParser.prototype);\n\nexport { ElementsParser };\n","//@ts-nocheck\n\nimport { ElementsParser } from './elements_parser';\n\n/**\n * Transforms an array of svg elements to corresponding fabric.* instances\n * @static\n * @memberOf fabric\n * @param {Array} elements Array of elements to parse\n * @param {Function} callback Being passed an array of fabric instances (transformed from SVG elements)\n * @param {Object} [options] Options object\n * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n */\nexport function parseElements(\n  elements,\n  callback,\n  options,\n  reviver,\n  parsingOptions\n) {\n  new ElementsParser(\n    elements,\n    callback,\n    options,\n    reviver,\n    parsingOptions\n  ).parse();\n}\n","//@ts-nocheck\nimport { svgNS } from './constants';\nimport { elementById } from './elementById';\nimport { getMultipleNodes } from './getMultipleNodes';\nimport { applyViewboxTransform } from './applyViewboxTransform';\n\nexport function parseUseDirectives(doc) {\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    let el2 = elementById(doc, xlink).cloneNode(true);\n    let currentTrans =\n      (el2.getAttribute('transform') || '') +\n      ' translate(' +\n      x +\n      ', ' +\n      y +\n      ')';\n    const oldLength = nodelist.length;\n    let attr;\n    let j;\n    let attrs;\n    let len;\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 (j = 0, attrs = el2.attributes, len = attrs.length; j < len; j++) {\n        attr = attrs.item(j);\n        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 (j = 0, attrs = el.attributes, len = attrs.length; j < len; j++) {\n      attr = attrs.item(j);\n      if (\n        attr.nodeName === 'x' ||\n        attr.nodeName === 'y' ||\n        attr.nodeName === 'xlink:href' ||\n        attr.nodeName === 'href'\n      ) {\n        continue;\n      }\n\n      if (attr.nodeName === 'transform') {\n        currentTrans = attr.nodeValue + ' ' + currentTrans;\n      } else {\n        el2.setAttribute(attr.nodeName, attr.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","//@ts-nocheck\nimport { uid } from '../util/internals/uid';\nimport { applyViewboxTransform } from './applyViewboxTransform';\nimport {\n  clipPaths,\n  cssRules,\n  gradientDefs,\n  svgInvalidAncestorsRegEx,\n  svgValidTagNamesRegEx,\n} from './constants';\nimport { getCSSRules } from './getCSSRules';\nimport { getGradientDefs } from './getGradientDefs';\nimport { hasAncestorWithNodeName } from './hasAncestorWithNodeName';\nimport { parseElements } from './parseElements';\nimport { parseUseDirectives } from './parseUseDirectives';\nimport type { TSvgParsedCallback, TSvgReviverCallback } from './typedefs';\nimport type { LoadImageOptions } from '../util/misc/objectEnlive';\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 * {@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 parseSVGDocument(\n  doc: HTMLElement,\n  callback: TSvgParsedCallback,\n  reviver?: TSvgReviverCallback,\n  { crossOrigin, signal }: LoadImageOptions = {}\n) {\n  if (!doc) {\n    return;\n  }\n  if (signal && signal.aborted) {\n    throw new Error('`options.signal` is in `aborted` state');\n  }\n  parseUseDirectives(doc);\n\n  const svgUid = uid(),\n    descendants = Array.from(doc.getElementsByTagName('*')),\n    options = {\n      ...applyViewboxTransform(doc),\n      crossOrigin,\n      svgUid,\n      signal,\n    };\n\n  const elements = descendants.filter(function (el) {\n    applyViewboxTransform(el);\n    return (\n      svgValidTagNamesRegEx.test(el.nodeName.replace('svg:', '')) &&\n      !hasAncestorWithNodeName(el, svgInvalidAncestorsRegEx)\n    ); // http://www.w3.org/TR/SVG/struct.html#DefsElement\n  });\n  if (!elements || (elements && !elements.length)) {\n    callback([], {}, [], descendants);\n    return;\n  }\n  const localClipPaths = {};\n  descendants\n    .filter((el) => el.nodeName.replace('svg:', '') === 'clipPath')\n    .forEach((el) => {\n      const id = el.getAttribute('id');\n      localClipPaths[id] = Array.from(el.getElementsByTagName('*')).filter(\n        (el) => svgValidTagNamesRegEx.test(el.nodeName.replace('svg:', ''))\n      );\n    });\n  gradientDefs[svgUid] = getGradientDefs(doc);\n  cssRules[svgUid] = getCSSRules(doc);\n  clipPaths[svgUid] = localClipPaths;\n  // Precedence of rules:   style > class > attribute\n  parseElements(\n    elements,\n    (instances, elements) => {\n      if (callback) {\n        callback(instances, options, elements, descendants);\n        delete gradientDefs[svgUid];\n        delete cssRules[svgUid];\n        delete clipPaths[svgUid];\n      }\n    },\n    { ...options },\n    reviver,\n    { crossOrigin, signal }\n  );\n}\n","import { request } from '../util/dom_request';\nimport { parseSVGDocument } from './parseSVGDocument';\nimport type { TSvgParsedCallback, 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  callback: TSvgParsedCallback,\n  reviver?: TSvgReviverCallback,\n  options: LoadImageOptions = {}\n) {\n  const onComplete = (r: XMLHttpRequest) => {\n    const xml = r.responseXML;\n    if (!xml || !xml.documentElement) {\n      callback(null, {}, [], []);\n      return false;\n    }\n\n    parseSVGDocument(xml.documentElement, callback, reviver, options);\n  };\n\n  request(url.replace(/^\\n\\s*/, '').trim(), {\n    method: 'get',\n    onComplete,\n    signal: options.signal,\n  });\n}\n","import { getWindow } from '../env';\nimport { LoadImageOptions } from '../util/misc/objectEnlive';\nimport { parseSVGDocument } from './parseSVGDocument';\nimport type { TSvgParsedCallback, 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  callback: TSvgParsedCallback,\n  reviver?: TSvgReviverCallback,\n  options?: LoadImageOptions\n) {\n  const parser = new (getWindow().DOMParser)(),\n    // should we use `image/svg+xml` here?\n    doc = parser.parseFromString(string.trim(), 'text/xml');\n  parseSVGDocument(doc.documentElement, callback, reviver, options);\n}\n","import { Point } from '../Point';\nimport { Control } from './Control';\nimport { TMat2D } from '../typedefs';\nimport { iMatrix } from '../constants';\nimport type { Polyline } from '../shapes/Polyline';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport {\n  TPointerEvent,\n  Transform,\n  TransformActionHandler,\n} from '../EventTypeDefs';\nimport { getLocalPoint } from './util';\n\ntype TTransformAnchor = Transform & { pointIndex: number };\n\nconst getSize = (poly: Polyline) => {\n  return new Point(poly.width, poly.height);\n};\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nconst factoryPolyPositionHandler = (pointIndex: number) => {\n  return function (dim: Point, finalMatrix: TMat2D, polyObject: Polyline) {\n    const x = polyObject.points[pointIndex].x - polyObject.pathOffset.x,\n      y = polyObject.points[pointIndex].y - polyObject.pathOffset.y;\n    return new Point(x, y).transform(\n      multiplyTransformMatrices(\n        polyObject.canvas?.viewportTransform ?? iMatrix,\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 */\nconst polyActionHandler = (\n  eventData: TPointerEvent,\n  transform: TTransformAnchor,\n  x: number,\n  y: number\n) => {\n  const poly = transform.target as Polyline,\n    pointIndex = transform.pointIndex,\n    mouseLocalPosition = getLocalPoint(transform, 'center', 'center', x, y),\n    polygonBaseSize = getSize(poly),\n    size = poly._getTransformedDimensions(),\n    sizeFactor = polygonBaseSize.divide(size),\n    adjustFlip = new Point(poly.flipX ? -1 : 1, poly.flipY ? -1 : 1);\n\n  const finalPointPosition = mouseLocalPosition\n    .multiply(adjustFlip)\n    .multiply(sizeFactor)\n    .add(poly.pathOffset);\n\n  poly.points[pointIndex] = finalPointPosition;\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 */\nconst anchorWrapper = (\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      anchorIndex = (pointIndex > 0 ? pointIndex : poly.points.length) - 1,\n      pointInParentPlane = new Point(\n        poly.points[anchorIndex].x - poly.pathOffset.x,\n        poly.points[anchorIndex].y - poly.pathOffset.y\n      ).transform(poly.calcOwnMatrix()),\n      actionPerformed = fn(eventData, { ...transform, pointIndex }, x, y),\n      polygonBaseSize = getSize(poly),\n      adjustFlip = new Point(poly.flipX ? -1 : 1, poly.flipY ? -1 : 1);\n\n    const newPosition = new Point(\n      poly.points[anchorIndex].x,\n      poly.points[anchorIndex].y\n    )\n      .subtract(poly.pathOffset)\n      .divide(polygonBaseSize)\n      .multiply(adjustFlip);\n\n    poly.setPositionByOrigin(\n      pointInParentPlane,\n      newPosition.x + 0.5,\n      newPosition.y + 0.5\n    );\n    return actionPerformed;\n  };\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: 'modifyPoly',\n      positionHandler: factoryPolyPositionHandler(idx),\n      actionHandler: anchorWrapper(idx, polyActionHandler),\n      ...options,\n    });\n  }\n  return controls;\n}\n","import {\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 type { WebGLFilterBackend } from './WebGLFilterBackend';\nimport type { Canvas2dFilterBackend } from './Canvas2dFilterBackend';\n\nexport type TProgramCache = any;\n\nexport type TTextureCache = any;\n\nexport type TPipelineResources = {\n  blendImage?: HTMLCanvasElement;\n  blurLayer1?: HTMLCanvasElement;\n  blurLayer2?: HTMLCanvasElement;\n} & Record<string, unknown>;\n\nexport type TWebGLPipelineState = {\n  filterBackend: WebGLFilterBackend;\n  originalWidth: number;\n  originalHeight: number;\n  sourceWidth: number;\n  sourceHeight: number;\n  destinationWidth: number;\n  destinationHeight: number;\n  context: WebGLRenderingContext;\n  sourceTexture: WebGLTexture | null;\n  targetTexture: WebGLTexture | null;\n  originalTexture: WebGLTexture;\n  passes: number;\n  webgl: boolean;\n  aPosition: Float32Array;\n  programCache: TProgramCache;\n  pass: number;\n  targetCanvas: HTMLCanvasElement;\n};\n\nexport type T2DPipelineState = {\n  sourceWidth: number;\n  sourceHeight: number;\n  filterBackend: Canvas2dFilterBackend;\n  canvasEl: HTMLCanvasElement;\n  imageData: ImageData;\n  originalEl: CanvasImageSource;\n  originalImageData?: ImageData;\n  ctx: CanvasRenderingContext2D;\n  helpLayer?: HTMLCanvasElement;\n};\n\nexport type TWebGLUniformLocationMap = Record<\n  string,\n  WebGLUniformLocation | null\n>;\n\nexport type TWebGLAttributeLocationMap = Record<string, number>;\n\nexport type TWebGLProgramCacheItem = {\n  program: WebGLProgram;\n  attributeLocations: TWebGLAttributeLocationMap;\n  uniformLocations: TWebGLUniformLocationMap;\n};\n\nexport type TApplyFilterArgs = {};\n\nexport const isWebGLPipelineState = (\n  options: TWebGLPipelineState | T2DPipelineState\n): options is TWebGLPipelineState => {\n  return (options as TWebGLPipelineState).webgl !== undefined;\n};\n","import { GLPrecision } from '../GLProbes/GLProbe';\n\nexport const highPsourceCode = `precision ${GLPrecision.high} 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 './typedefs';\nimport { GLPrecision } from './GLProbes/GLProbe';\nimport {\n  highPsourceCode,\n  identityFragmentShader,\n  vertexSource,\n} from './shaders/baseFilter';\n\nexport class BaseFilter {\n  /**\n   * Filter type\n   * @param {String} type\n   * @default\n   */\n  get type(): string {\n    return this.constructor.name;\n  }\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({ ...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 { WebGLProbe } = getEnv();\n    if (WebGLProbe.GLPrecision && WebGLProbe.GLPrecision !== GLPrecision.high) {\n      fragmentSource = fragmentSource.replace(\n        new RegExp(highPsourceCode, 'g'),\n        highPsourceCode.replace(GLPrecision.high, WebGLProbe.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 Error('Vertex, fragment shader or program creation error');\n    }\n    gl.shaderSource(vertexShader, vertexSource);\n    gl.compileShader(vertexShader);\n    if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n      throw new Error(\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 Error(\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 Error(\n        // eslint-disable-next-line prefer-template\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: { signal: AbortSignal }\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 { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { blendColorFragmentSource } from './shaders/blendColor';\n\ntype 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 *  alpha: 0.5\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  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 { 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 { Image } 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 { 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 *  alpha: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\nexport class BlendImage 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   **/\n  declare image: Image;\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 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: Image) {\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 Image.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 './typedefs';\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 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 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 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    get type() {\n      return key;\n    }\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 './typedefs';\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  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.getClass(filter.type).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 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 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 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 { 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 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 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 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 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 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 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","// @ts-nocheck\nimport type { TClassProperties } from '../typedefs';\nimport { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLPipelineState } from './typedefs';\nimport { isWebGLPipelineState } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { createCanvasElement } from '../util/misc/dom';\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\ntype TResizeType = 'bilinear' | 'hermite' | 'sliceHack' | 'lanczos';\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 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, program) {\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(gl, uniformLocations) {\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() {\n    const scale = this.tempScale;\n    return Math.ceil(this.lanczosLobes / scale);\n  }\n\n  getCacheKey(): string {\n    const filterWindow = this.getFilterWindow();\n    return `${this.type}_${filterWindow}`;\n  }\n\n  getFragmentSource(): string {\n    const filterWindow = this.getFilterWindow();\n    return this.generateShader(filterWindow);\n  }\n\n  getTaps() {\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  /**\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      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      this._setupFrameBuffer(options);\n      this.applyToWebGL(options);\n      this._swapTextures(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      this._setupFrameBuffer(options);\n      this.applyToWebGL(options);\n      this._swapTextures(options);\n      options.sourceHeight = options.destinationHeight;\n    } else {\n      this.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(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;\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    }\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    options: T2DPipelineState,\n    oW: number,\n    oH: number,\n    dW: number,\n    dH: number\n  ) {\n    function process(u) {\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 = {},\n      center = {},\n      icenter = {};\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    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    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 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 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","// first we set the env variable by importing the node env file\nimport { getNodeCanvas } from './src/env/node';\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.lowerCanvasEl);\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\nexport class Canvas extends CanvasBase {\n  getNodeCanvas() {\n    return getNodeCanvas(this.lowerCanvasEl);\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","Configuration","config","configure","arguments","length","undefined","Object","assign","addFonts","paths","fontPaths","_objectSpread","removeFonts","fontFamilys","forEach","fontFamily","clearFonts","restoreDefaults","keys","defaults","reduce","acc","key","GLPrecision","GLProbe","NodeGLProbe","queryWebGL","isSupported","WebGLProbe","testPrecision","gl","precision","fragmentSource","concat","fragmentShader","createShader","FRAGMENT_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","canvas","getContext","maxTextureSize","getParameter","MAX_TEXTURE_SIZE","values","find","console","log","textureSize","copyPasteData","initialized","isTouchSupported","getEnv","devicePixelRatio","window","document","navigator","maxTouchPoints","dispose","env","setEnv","value","getBrowserEnv","getDocument","getWindow","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","Math","sqrt","floor","cache","VERSION","version","noop","halfPI","PI","twoMathPi","PiBy180","iMatrix","freeze","DEFAULT_SVG_FONT_SIZE","ALIASING_LIMIT","kRect","LEFT_CLICK","MIDDLE_CLICK","RIGHT_CLICK","JSON","SVG","ClassRegistry","Map","getClass","classType","get","Error","setClass","classConstructor","set","name","getSVGClass","SVGTagName","setSVGClass","classRegistry","AnimationRegistry","Array","remove","context","index","indexOf","splice","cancelAll","animations","animation","abort","cancelByCanvas","filter","_animation$target","target","cancelByTarget","runningAnimations","Observable","on","arg0","handler","__eventListeners","eventName","off","push","once","disposers","d","disposer","_removeEventListener","eventListener","fire","options","_this$__eventListener","listenersForEvent","i","call","getRandomInt","min","max","random","ifNaN","valueIfNaN","isNaN","removeFromArray","array","idx","cos","angle","angleSlice","abs","sin","sign","Point","y","x","add","that","addEquals","scalarAdd","scalar","scalarAddEquals","subtract","subtractEquals","scalarSubtract","scalarSubtractEquals","multiply","scalarMultiply","scalarMultiplyEquals","divide","scalarDivide","scalarDivideEquals","eq","lt","lte","gt","gte","lerp","t","distanceFrom","dx","dy","midPointFrom","toString","setXY","setX","setY","setFromPoint","swap","clone","rotate","radians","origin","originZero","sinus","cosinus","p","rotated","transform","ignoreOffset","createCollectionMixin","Base","Collection","_onObjectAdded","object","_onObjectRemoved","_onStackOrderChanged","_len","objects","_key","size","_objects","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","ImageFormat","SVGElementName","SupportedSVGUnit","requestAnimFrame","requestAnimationFrame","cancelAnimFrame","handle","cancelAnimationFrame","wrapElement","wrapper","parentNode","replaceChild","appendChild","getScrollLeftTop","docElement","documentElement","body","scrollLeft","scrollTop","host","nodeType","style","position","getElementOffset","box","doc","ownerDocument","offset","offsetAttributes","borderLeftWidth","borderTopWidth","paddingLeft","paddingTop","elemStyle","defaultView","getComputedStyle","attr","parseInt","docElem","getBoundingClientRect","scrollLeftTop","clientLeft","clientTop","makeElementUnselectable","onselectstart","userSelect","makeElementSelectable","id","uid","createCanvasElement","createElement","createImage","copyCanvasElement","_newCanvas$getContext","newCanvas","drawImage","toDataURL","format","quality","isHTMLCanvas","scaleMatrix","degreesToRadians","degrees","radiansToDegrees","fromAngleToSkew","tan","skewXMatrix","skewValue","skewYMatrix","isIdentityMatrix","mat","every","transformPoint","invertTransform","a","r","multiplyTransformMatrices","b","is2x2","qrDecompose","atan2","denom","pow","scaleX","scaleY","skewX","skewY","translateX","translateY","calcRotateMatrix","theta","cosin","calcDimensionsMatrix","_ref2","flipX","flipY","scaleMat","composeMatrix","_ref3","otherOptions","_objectWithoutProperties","_excluded","matrix","loadImage","url","signal","crossOrigin","Promise","resolve","reject","aborted","img","err","src","addEventListener","done","onload","onerror","removeEventListener","enlivenObjects","reviver","instances","all","map","type","fromObject","then","fabricInstance","catch","error","instance","finally","enlivenObjectEnlivables","serializedObject","promises","colorStops","enlived","source","pattern","pick","pickBy","predicate","ColorNameMap","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","reRGBa","reHSLa","reHex","hue2rgb","q","hexify","hexValue","toUpperCase","Color","color","setSource","_source","isArray","g","_tryParsingColor","sourceFromHex","sourceFromRgb","sourceFromHsl","_rgbToHsl","maxValue","minValue","h","s","l","round","getSource","toRgb","toRgba","toHsl","hsl","toHsla","toHex","toHexa","getAlpha","setAlpha","alpha","toGrayscale","average","toFixed","currentAlpha","toBlackWhite","threshold","overlayWith","otherColor","otherAlpha","otherSource","R","G","B","fromRgb","fromRgba","match","test","parseFloat","fromHsl","fromHsla","fromHex","slice","isShortNotation","isRGBa","charAt","substring","number","fractionDigits","Number","getSvgAttributes","commonAttributes","linearGradient","parseUnit","fontSize","unit","exec","dpi","DPI","mm","cm","in","pt","pc","em","MeetOrSlice","MinMidMax","parseAlign","align","none","mid","parsePreserveAspectRatioAttribute","attribute","firstPart","secondPart","trim","split","alignX","alignY","meetOrSlice","meet","matrixToSVG","NUM_FRACTION_DIGITS","join","colorPropToSVG","toLive","opacity","str","createSVGRect","svgColor","w","isFiller","filler","isSerializableFiller","toObject","isPattern","offsetX","isCollection","fabricObject","isActiveSelection","isTextObject","isInteractiveTextObject","isFabricObjectWithDragSupport","onDragStart","shouldStartDragging","CANVAS_INIT_ERROR","StaticCanvasDefaults","backgroundImage","overlayColor","overlayImage","includeDefaultValues","renderOnAddRemove","controlsAboveOverlay","allowTouchScrolling","imageSmoothingEnabled","viewportTransform","backgroundVpt","overlayVpt","enableRetinaScaling","svgViewportTransformation","skipOffscreen","clipPath","showBackgroundDots","StaticCanvas","getDefaults","ownDefaults","el","initElements","_setDimensionsImpl","lowerCanvasEl","calcViewportBoundaries","_createLowerCanvas","_originalCanvasStyle","cssText","requestRenderAll","warn","setCoords","_isRetinaScaling","getRetinaScaling","_initRetinaScaling","__initRetinaScaling","contextContainer","scaleRatio","setAttribute","scale","calcOffset","_offset","_createCanvasElement","getElementById","hasAttribute","classList","getWidth","getHeight","setWidth","setDimensions","setHeight","dimensions","cssOnly","backstoreOnly","entries","cssValue","_setBackstoreDimension","_setCssDimension","getZoom","setViewportTransform","vpt","backgroundObject","overlayObject","len","group","zoomToPoint","point","before","newPoint","after","setZoom","absolutePan","relativePan","getElement","clearContext","ctx","clearRect","clear","renderAll","cancelRequestedRender","destroyed","renderCanvas","renderAndReset","nextRenderHandle","disposed","iVpt","vptCoords","tr","bl","drawControls","v","path","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","findById","_obj","_id","methodName","clipPathData","excludeFromExport","_toObject","__serializeBgOverlay","originalValue","data","bgImage","bgColor","backgroundColor","background","overlay","toSVG","markup","_setSVGPreamble","_setSVGHeader","clipPathId","_setSVGBgOverlayColor","_setSVGBgOverlayImage","_setSVGObjects","suppressPreamble","encoding","optViewBox","viewBox","createSVGFontFacesMarkup","createSVGRefElementsMarkup","createSVGClipPathMarkup","toClipPathSVG","shouldTransform","additionalTransform","fontList","styles","styleRow","textCharStyle","fontListMarkup","_setSVGObject","bgOrOverlay","repeat","finalWidth","finalHeight","shouldInvert","loadFromJSON","json","serialized","parse","enlivedMap","properties","cloneWithoutData","png","multiplier","finalMultiplier","toCanvasElement","scaledWidth","scaledHeight","zoom","originalWidth","originalHeight","newZoom","vp","newVp","originalRetina","objectsToRender","task","destroy","kill","canvasElement","removeAttribute","touchEvents","getTouchInfo","event","touchProp","changedTouches","getPointer","scroll","_evt","clientX","clientY","isTouchEvent","pointerType","stopEvent","e","preventDefault","stopPropagation","makeBoundingBoxFromPoints","points","curr","removeTransformFromObject","inverted","finalTransform","calcOwnMatrix","applyTransformToObject","addTransformToObject","_qrDecompose","setPositionByOrigin","resetObjectTransform","saveObjectTransform","sizeAfterTransform","dimX","dimY","transformMatrix","bbox","ObjectRelation","calcPlaneChangeMatrix","from","to","sendPointToPlane","transformPointRelativeToCanvas","relationBefore","relationAfter","child","sibling","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","getSvgSpanStyles","useWhiteSpace","term","textDecoration","getSvgTextDecoration","deltaY","decoration","replace","shadow","getSvgCommons","getSvgTransform","full","calcTransformMatrix","svgTransform","_createBaseSVGMarkup","_toSVG","_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","rotateVector","vector","createVector","magnitude","calcAngleBetweenVectors","dot","det","calcVectorRotation","getUnitVector","getBisector","A","C","AB","AC","getOrthonormalVector","counterClockwise","Intersection","status","append","isPointContained","T","infinite","AT","intersectLineLine","a1","a2","b1","b2","aInfinite","bInfinite","a2xa1x","a2ya1y","b2xb1x","b2yb1y","a1xb1x","a1yb1y","uaT","ubT","uB","ua","ub","segmentsCoincide","intersectSegmentLine","s1","s2","l1","l2","intersectSegmentSegment","intersectLinePolygon","result","inter","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","_setOriginToCenter","_originalOriginX","_originalOriginY","_resetOrigin","originPoint","_getLeftTopCoords","translateMatrix","ObjectGeometry","getX","getXY","getY","getRelativeX","setRelativeX","getRelativeY","setRelativeY","relativePosition","getRelativeXY","setRelativeXY","_getCoords","absolute","calcACoords","calcLineCoords","aCoords","lineCoords","getCoords","coords","pointTL","pointBR","intersection","intersectsWithObject","other","isContainedWithinObject","otherCoords","lines","_getImageLines","boundingRect","getBoundingRect","imageLines","xPoints","_findCrossPoints","isOnScreen","_containsCenterOfCanvas","centerPoint","isPartiallyOnScreen","allPointsAreOutside","topline","rightline","bottomline","leftline","xcount","lineKey","xi","iLine","getScaledWidth","getScaledHeight","scaleToWidth","boundingRectFactor","scaleToHeight","getCanvasRetinaScaling","_this$canvas","getViewportTransform","cosP","sinP","cosPSinP","cosPMinusSinP","_this$canvas2","rotateMatrix","tMatrix","finalMatrix","transformMatrixKey","skipGroup","sep","prefix","matrixCache","ownMatrixCache","_getNonTransformedDimensions","_calculateCurrentDimensions","StackedObject","getParent","strict","__owningGroup","isDescendantOf","getAncestors","ancestors","parent","findCommonAncestors","fork","otherFork","common","otherAncestors","ancestor","j","hasCommonAncestors","commonAncestors","isInFrontOf","ancestorData","firstCommonAncestor","headOfFork","pop","headOfOtherFork","thisIndex","otherIndex","AnimatableObject","animatable","_animate","propIsColor","colorProperties","animationOptions","shadowDefaultValues","blur","affectStroke","nonScaling","Shadow","parseShadow","shadowStr","__","reOffsetsAndBlur","BLUR_BOX","fBoxX","fBoxY","cloneDeep","stringify","stateProperties","cacheProperties","fabricObjectDefaultValues","cornerSize","touchCornerSize","transparentCorners","hoverCursor","moveCursor","borderColor","borderDashArray","cornerColor","cornerBackgroundColor","cornerStrokeColor","cornerStyle","cornerDashArray","centeredScaling","centeredRotation","selectionBackgroundColor","selectionLineWidth","borderOpacityWhenMoving","borderScaleFactor","minScaleLimit","evented","hasControls","hasBorders","perPixelTargetFind","lockMovementX","lockMovementY","lockRotation","lockScalingX","lockScalingY","lockSkewingX","lockSkewingY","lockScalingFlip","objectCaching","noScaleCache","dirty","activeOn","FX_DURATION","obj_type","zIndex","statefullCache","isRemoteEditing","RemoteUserWhoEditing","hasRotatingPoint","locked","isLoading","oneLine","FabricObject","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","groupNeedsUpdate","isOnACache","isNotVisible","_setupCompositeOperation","drawSelectionBackground","_setOpacity","_setShadow","drawCacheOnCanvas","_removeCacheCanvas","drawObject","isCacheDirty","hasStroke","hasFill","needsItsOwnCache","ownCaching","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","retinaScaling","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","withoutTransform","withoutShadow","shadowOffset","originalCanvas","shouldCenterOrigin","setOnGroup","containsPointNew","frameExtentContainsPoint","convertACoordToRCoord","convertRCoordToACoord1","convertRCoordToACoord","convertRCoordToACoordPartialAS","saveData","getUndoRedoState","getRemovedArrow","getMovedObject","getModifiedObject","getFrameBind","getScaledObject","initialize","getCloneWidget","bringObjToFront","sendObjToBack","bringObjForward","sendObjBackwards","reSetControl","drawBordersInGroup","isGroup","_fromObject","extraParam","allOptions","rest","_toPropertyKey","wrapWithFireEvent","actionHandler","actionPerformed","wrapWithFixedAnchor","constraint","changeObjectWidth","strokePadding","oldWidth","newWidth","changeWidth","renderCircleControl","styleOverride","xSize","sizeX","ySize","sizeY","myLeft","myTop","arc","renderSquareControl","xSizeBy2","ySizeBy2","strokeRect","Control","getActionHandler","getMouseDownHandler","mouseDownHandler","getMouseUpHandler","mouseUpHandler","cursorStyleHandler","cursorStyle","actionName","getVisibility","controlKey","_fabricObject$_contro","_fabricObject$_contro2","_controlsVisibility","setVisibility","positionHandler","currentControl","calcCornerCoords","objectAngle","objectCornerSize","centerX","centerY","isTouch","cosHalfOffset","sinHalfOffset","cosHalfOffsetComp","sinHalfOffsetComp","touchSizeX","touchSizeY","controlTriangleAngle","cornerHypotenuse","newTheta","newThetaComp","SQRT1_2","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","createResizeControls","mr","ml","mb","mt","createResizeControlsForText","createTextboxDefaultControls","createRectNotesDefaultControls","createShapeNotesDefaultControls","createPathDefaultControls","createImageDefaultControls","createFileDefaultControls","interactiveDefaults","InteractiveFabricObject","targetCanvas","_currentTransform","action","startsWith","_findTargetCorner","forTouch","_activeObject","__corner","cornerEntries","oCoords","cornerKey","isControlVisible","touchCorner","calcOCoords","rMatrix","positionMatrix","startMatrix","transformOptions","forEachControl","_calcCornerCoords","fn","interactive","wh","strokeBorders","_drawBorders","drawControlsConnectingLines","_renderControls","styleOptions","shouldDrawBorders","shouldDrawControls","isMoving","drawBorders","forActiveSelection","shouldStroke","withConnection","setControlVisible","setControlsVisibility","clearContextTop","restoreManually","onDeselect","onSelect","canDrop","renderDragSourceEffect","renderDropTargetEffect","extContainsPoint","minx","maxx","miny","maxy","applyMixins","derivedCtor","constructors","baseCtor","getOwnPropertyNames","prototype","defineProperty","getOwnPropertyDescriptor","create","isTransparent","tolerance","getImageData","alphaChannel","setStyle","elementStyle","setProperty","SHARED_ATTRIBUTES","getSvgRegex","arr","RegExp","cssRules","gradientDefs","clipPaths","storage","reNum","String","raw","_templateObject","_taggedTemplateLiteral","svgNS","_templateObject2","reFontDeclaration","svgValidTagNames","svgViewBoxElements","svgInvalidAncestors","svgValidParents","attributesMap","cx","cy","display","colorAttributes","fSize","cPath","svgValidTagNamesRegEx","svgViewBoxElementsRegEx","svgInvalidAncestorsRegEx","svgValidParentsRegEx","reViewBoxAttrValue","selectorMatches","selector","nodeName","classNames","getAttribute","matcher","splitClassNames","doesSomeParentMatch","selectors","parentMatching","elementMatchesRule","firstMatching","getGlobalStylesForElement","svgUid","rule","normalizeAttr","angleRadiant","cosValue","sinValue","cleanupSvgAttribute","attributeValue","_templateObject3","_templateObject4","_templateObject5","_templateObject6","transforms","transformList","_templateObject7","reTransformList","reTransform","parseTransformAttribute","matrices","matchAll","transformMatch","matchedParams","operation","rawArgs","arg1","arg2","arg3","arg4","arg5","arg","normalizeValue","parentAttributes","parsed","fillIndex","strokeIndex","parseFontDeclaration","oStyle","lineHeight","parseStyleObject","parseStyleString","chunk","pair","parseStyleAttribute","setStrokeFillOpacity","attributes","parseAttributes","parentFontSize","ownAttributes","cssAttrs","normalizedStyle","normalizedAttr","normalizedValue","font","mergedAttrs","rectDefaultValues","rx","ry","RECT_PROPS","Rect","_initRxRy","isRounded","bezierCurveTo","fromElement","_parseAttributes","ATTRIBUTE_NAMES","restOfparsedAttributes","rect","Boolean","groupDefaultValues","layout","subTargetCheck","Group","objectsRelativeToGroup","__objectMonitor","__objectSelectionTracker","__objectSelectionMonitor","__objectSelectionDisposer","enterGroup","_applyLayoutStrategy","canEnterGroup","_filterObjectsBeforeEnteringGroup","allowedObjects","_onAfterObjectsChange","_onRelativeObjectAdded","removeParentTransform","exitGroup","targets","prev","prevLayout","_watchObject","_shouldSetNestedCoords","removeAll","_activeObjects","ev","selected","watch","directive","_enterGroup","activeObject","getActiveObject","_exitGroup","ownCache","preserveObjectStacking","triggerLayout","_adjustObjectPosition","diff","isFirstLayout","_firstLayoutDone","initialTransform","getLayoutStrategyResult","newCenter","correctionX","correctionY","onLayout","layoutDirective","addedObjects","prepareBoundingBox","clipPathSizeAfter","clipPathCenter","inv","clipPathRelativeCenter","prepareInitialBoundingBox","getObjectsBoundingBox","hasX","hasY","hasWidth","hasHeight","calculatedCenter","strokeWidthVector","sizeAfter","bboxSizeAfter","rotationCorrection","originT","originCorrection","centerCorrection","offsetCorrection","correction","objectBounds","objCenter","sizeVector","rad","sine","cosine","relativeCenter","__serializeObjects","method","_includeDefaultValues","originalDefaults","_createSVGBgRect","fillStroke","commons","svgString","bg","getWidgetMenuList","getWidgetMenuLength","widget","_","getObject","emoji","isPanel","panelObj","relationship","userEmoji","now","objArr","objectArr","getContextMenuList","menuList","hydratedOptions","ActiveSelection","multiSelectAdd","multiSelectionStacking","findIndex","groups","childrenOverride","DefaultCanvasProperties","centeredKey","selection","selectionKey","selectionColor","selectionDashArray","selectionBorderColor","selectionFullyContained","defaultCursor","freeDrawingCursor","notAllowedCursor","containerClass","targetFindTolerance","skipTargetFind","stopContextMenu","fireRightClick","fireMiddleClick","enablePointerEvents","SelectableCanvas","_activeSelection","_applyCanvasStyle","_initWrapperElement","_createUpperCanvas","upperCanvasEl","_objectsToRender","deselected","_discardActiveObject","_hoveredTarget","_hoveredTargets","_chooseObjectsToRender","contextTopDirty","_groupSelector","isDrawingMode","hasLostContext","renderTopLayer","_isCurrentlyDrawing","freeDrawingBrush","_drawSelection","renderTop","_normalizePointer","restorePointerVpt","setTargetFindTolerance","pixelFindCanvasEl","pixelFindContext","isTargetTransparent","selectionBgc","enhancedTolerance","_isSelectionKeyPressed","sKey","_shouldClearSelection","activeObjects","getActiveObjects","_shouldCenterTransform","modifierKeyPressed","centerTransform","_getOriginFromCorner","controlName","_setupCurrentTransform","altKey","lastX","lastY","shiftKey","_beforeTransform","setCursor","cursor","deltaX","extent","strokeOffset","minX","minY","maxX","maxY","findTarget","aObjects","searchPossibleTargets","subTargets","altSelectionKey","_checkTarget","globalPointer","isEditing","_searchPossibleTargets","objToCheck","pointerToUse","subTarget","ignoreVpt","_absolutePointer","_pointer","bounds","boundsWidth","boundsHeight","cssScale","_resetTransformEventData","_setBrushStyles","wrapperEl","className","willReadFrequently","container","getTopContext","getSelectionContext","getSelectionElement","getActiveSelection","active","_fireSelectionEvents","oldObjects","somethingChanged","invalidate","added","setActiveObject","currentActives","_setActiveObject","endCurrentTransform","discardActiveObject","discarded","activeSelection","removeChild","originalProperties","_realizeGroupTransformOnObject","layoutProps","originalValues","TextEditingManager","exitTextEditing","exitEditing","onMouseMove","_this$target","updateSelectionOnMouseMove","addEventOptions","passive","checkClick","button","addListener","args","removeListener","syntheticEventConfig","mouse","out","targetIn","targetOut","canvasIn","canvasOut","drag","Canvas","eventHandler","addOrRemove","_getEventPrefix","functor","eventjsFunctor","eventTypePrefix","_onResize","_onMouseDown","_onMouseMove","_onMouseOut","_onMouseEnter","_onMouseWheel","_onContextMenu","_onDoubleClick","_onDragStart","_onDragEnd","_onDragOver","_onDragEnter","_onDragLeave","_onDrop","_onTouchStart","removeListeners","_onMouseUp","_onTouchEnd","__onMouseWheel","shared","isClick","absolutePointer","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","_target","_onMouseUpInDrawingMode","shouldRender","_finalizeCurrentTransform","targetWasActive","handleSelection","originalControl","originalMouseUpHandler","_setCursorFromEvent","currentTarget","currentSubTargets","_scaling","_onMouseDownInDrawingMode","onMouseDown","_onMouseMoveInDrawingMode","onMouseUp","grouped","handleMultiSelection","groupSelector","_fireOverOutEvents","_transformObject","textEditingManager","fireSyntheticInOutEvents","oldTarget","fireCanvas","draggedoverTarget","targetChanged","outOpt","nextTarget","inOpt","previousTarget","localPointer","reset","_performTransformAction","reverse","isActiveSelectionAction","isAS","prevActiveObjects","point1","point2","collectedObjects","_updateGroup","bindGroup","_createGroup","ungroup","resetBackgoundImage","checkIfResetBackground","_initStatic","zoomToCenterPoint","vpCenter","zoomToViewAllObjects","topLeftX","topLeftY","bottomRightX","bottomRightY","zoomToViewObjects","objs","linearDefaultCoords","x1","y1","x2","y2","radialDefaultCoords","parseType","parseGradientUnits","RE_PERCENT","isPercent","parsePercent","NaN","RE_KEY_VALUE_PAIRS","RE_KEY_VALUE","parseColorStop","colorValue","keyValuePairs","parseColorStops","opacityAttr","colorStopEls","getElementsByTagName","convertPercentUnitsToValues","valuesToConvert","finalValue","propValue","getValue","parseLinearCoords","parseRadialCoords","parseCoords","Gradient","addColorStop","preTransform","colorStop","sort","BaseFabricObject","pathOffset","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","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","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","b2ac","sqrtb2ac","t1","t2","jlen","iterator","getPointOnCubicBezierIterator","fromArcToBeziers","fx","fy","rot","tx","ty","segsNorm","makePathSimpler","destinationPath","previous","controlX","controlY","parsedCommand","converted","calcLineLength","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","transformed","getSmoothPathFromPoints","p1","multSignX","multSignY","manyPoints","midPoint","transformPath","pathSegment","newSegment","getRegularPolygonPath","numVertexes","radius","interiorAngle","rotationAdjustment","joinPath","pathData","Path","_setPath","adjustPosition","setBoundingBox","_calcBoundsFromPath","_renderPathCommands","subpathStartX","subpathStartY","quadraticCurveTo","extendPropeties","sourcePath","_getOffsetTransform","digits","_calcDimensions","parsedAttributes","userNo","userId","whiteboardId","subObjList","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","end","startX","startY","endX","endY","largeFlag","otherParsedAttributes","CircleBrush","drawDot","addPoint","originalRenderOnAddRemove","circles","circle","pointerPoint","getUniqueRects","rects","uniqueRects","uniqueRectsArray","SprayBrush","sprayChunks","sprayChunk","addSprayChunk","renderChunck","chunck","optimizeOverlapping","sprayChunck","density","dotWidthVariance","dotWidth","randomOpacity","PatternBrush","getPatternSrc","dotDistance","patternCanvas","patternCtx","getPattern","topLeft","rotatePoint","StrokeProjectionsBase","getAcuteAngleFactor","vector1","vector2","strokeProjectionMagnitude","strokeUniformScalar","createSideVector","projectOrthogonally","applySkew","calcOrthogonalProjection","isSkewed","scaleUnitVector","unitVector","StrokeLineJoinProjections","bisector","bisectorVector","bisectorAngle","orthogonalProjection","correctSide","projectBevel","projectMiter","hypotUnitScalar","miterVector","projectRoundNoSkew","radiusOnAxisX","radiusOnAxisY","projectRoundWithSkew","projections","circleRadius","newY","furthestY","newX","furthestX","projectRound","projectPoints","project","projectedPoint","StrokeLineCapProjections","projectButt","projectSquare","strokePointingOut","projectedA","projectStrokeOnPoints","openPath","hasStyleChanged","prevStyle","thisStyle","forTextSpans","textBackgroundColor","overline","underline","linethrough","stylesToArray","text","textLines","stylesArray","charIndex","stylesFromArray","stylesObject","styleIndex","groupSVGElements","elements","findScaleToFit","destination","findScaleToCover","capitalize","string","firstLetterOnly","escapeXml","graphemeSplit","textstring","graphemes","chr","getWholeChar","code","charCodeAt","next","mergeClipPaths","_b$group","request","xhr","XMLHttpRequest","parameters","ontimeout","onreadystatechange","readyState","pathname","searchParams","URL","URLSearchParams","open","setRequestHeader","send","_assignTransformMatrixProps","removeTransformMatrixForSvgParsing","preserveAspectRatioOptions","cropX","cropY","offsetLeft","offsetTop","coordProps","Line","_setWidthHeight","calcLinePoints","origStrokeStyle","_this$stroke","_x1","_x2","_y1","_y2","xMult","yMult","_excluded2","ArrowDefaultValues","minWidth","dynamicMinWidth","_wordJoiners","splitByGrapheme","maxHeight","subType","Arrow","transformData","mousedownProcess","positionProcess","hoverTarget","minPoint","calcDistanceToTarget","setConnectorObj","oldConnObj","connectorStart","connectorEnd","mra","mla","mta","mba","mtr","mtr2","mbaStart","mlaStart","mraStart","mtaStart","initEvents","getCloneLineWidget","rwidget","lObjwidth","lObjheight","recalcLinePoints","line","calculateEnds","lineObj","arrow","getArrowAngle","getresetArrowaftermoving","scalex","scaley","removeArrowfromConnectObj","resetStrokeAfterScaling","spmyconvert","xs","spdrawCurve","ptsa","tension","isClosed","numOfSegments","spdrawLines","spgetCurvePoints","pts","_pts","t1x","t2x","t1y","t2y","st","_this$connectorStart","_this$connectorEnd","pointsOfLine","connStartObj","connEndObj","connectorShape","drawArrowTips","etype","stype","endPoint","startPoint","drawBeizerBody","sx1a","sy1a","sx2a","sy2a","sp","ep","sx1","sy1","sx2","sy2","py21","tips","drawArrowTip","px21","drawBody","cp1","cp2","newstart","newend","fPoints","pre","post","drawBZSegments","x11","x22","y11","y22","m1","m2","ms","me","keyPoints","margin","yAdjustment","met","msa","midy","mst","drawSegments","fixAngle","tipAngle","currZoom","targetObject","isInOneObj","isStart","mouseupProcess","arrowMxy","oldConnStartObj","oldConnEndObj","connStartId","connEndId","getTopObjectByPointer","fromnull","tonull","range","calcDistanceToControlPoint","_this$canvas$getActiv","_this$canvas$getActiv2","_this$canvas$getActiv3","_this$canvas$getActiv4","DraggableTextDelegate","dragEnterHandler","dragOverHandler","dragLeaveHandler","dragEndHandler","dropHandler","_dispose","isPointerOverSelection","newSelection","getSelectionStartFromPointer","selectionStart","selectionEnd","__mouseDownInPlace","isActive","__dragStartFired","setCursorByClick","initDelayedCursor","__isDraggingOver","getDragStartSelection","__dragStartSelection","setDragImage","_e$dataTransfer","flipFactor","boundaries","_getCursorBoundaries","selectionPosition","leftOffset","topOffset","bgc","setSelectionStyles","dragImage","border","__dragImageDisposer","_text","setData","getSelectionStyles","effectAllowed","abortCursorAnimation","editable","defaultPrevented","dragStartSelection","targetCanDrop","_e$dataTransfer2","insert","getData","trailing","selectionStartOffset","removeChars","_reNewline","trimEnd","insertChars","enterEditing","hiddenTextarea","_updateTextarea","focus","_e$dataTransfer3","fontProperties","textDecorationProperties","textLayoutProperties","additionalProps","styleProperties","textDefaultValues","_reSpacesAndTabs","_reSpaceAndTab","_reWords","textAlign","superscript","baseline","subscript","pathStartOffset","pathSide","pathAlign","_fontSizeFraction","offsets","_fontSizeMult","charSpacing","direction","CACHE_FONT_SIZE","MIN_TEXT_WIDTH","fixedScaleChange","fromCopy","preTop","shapeScaleX","shapeScaleY","tempTop","StyledText","isEmptyStyles","lineIndex","p3","styleHas","cleanStyle","stylesCount","letterCount","stylePropertyValue","allStyleObjectPropertiesMatch","graphemeCount","styleObject","stylePropertyHasBeenSet","hasOwnProperty","_textLines","removeStyle","lineNum","charNum","_extendStyles","get2DCursorLocation","_getLineStyle","_setLineStyle","_getStyleDeclaration","_setStyleDeclaration","startIndex","endIndex","getStyleAtPosition","getCompleteStyleDeclaration","_forceClearCache","lineStyle","styleProps","_styleProperties","_deleteStyleDeclaration","_deleteLineStyle","multipleSpacesRegex","dblQuoteRegex","createSVGInlineRect","TextSVGExportMixin","_getSVGLeftTopOffsets","textAndBg","_getSVGTextAndBg","textTop","textLeft","_wrapSVGTextAndBg","lineTop","textBgRects","textSpans","noShadow","textTopOffset","textLeftOffset","lineOffset","_getLineLeftOffset","_setSVGTextLineBg","_setSVGTextLineText","_createTextCharSpan","char","styleDecl","fillStyles","dySpan","isJustify","actualStyle","nextStyle","charsToRender","charBox","boxWidth","timeToRender","__charBounds","kernedWidth","heightOfLine","boxStart","currentColor","lastColor","getValueOfPropertyAt","_getSVGLineTopOffset","lineTopOffset","lastHeight","measuringContext","getMeasuringContext","Text","setPathInfo","initDimensions","segmentsInfo","_splitText","newLines","_splitTextIntoLines","graphemeLines","_unwrappedTextLines","_unwrappedLines","graphemeText","_clearCache","calcTextWidth","cursorWidth","calcTextHeight","enlargeSpaces","diffSpace","currentLineWidth","numberOfSpaces","accumulatedSpace","charBound","spaces","isEndOfWrapping","getLineWidth","missingNewlineOffset","skipWrapping","_setTextStyles","_renderTextLinesBackground","_renderTextDecoration","_renderText","_renderTextStroke","_renderTextFill","charStyle","forMeasuring","textBaseline","_getFontDeclaration","maxWidth","_renderTextLine","_renderChars","_getLeftOffset","_getTopOffset","lineLeftOffset","drawStart","renderLeft","_measureChar","_char","previousChar","prevCharStyle","fontDeclaration","previousFontDeclaration","couple","stylesAreEqual","fontMultiplier","coupleWidth","previousWidth","measureText","getHeightOfChar","measureLine","lineInfo","_measureLine","_getWidthOfCharSpacing","prevGrapheme","graphemeInfo","llength","lineBounds","grapheme","_getGraphemeBox","positionInPath","totalPathLength","startingPoint","_setGraphemeOnPath","numOfSpaces","centerPosition","skipLeft","previousBox","__lineHeights","_renderTextCommon","lineHeights","shortCut","isLtr","currentDirection","drawingLeft","_renderChar","_applyPatternGradientTransformText","handleFiller","fullDecl","shouldFill","fillOffsets","strokeOffsets","fillText","strokeText","setSuperscript","_setScript","setSubscript","schema","loc","lineDiff","__lineWidths","lastDecoration","lastFill","currentDecoration","currentFill","currentSize","currentDy","family","fontIsGeneric","genericFonts","newLine","newText","_getTotalLineHeights","total","_line","needsDims","isAddingPath","parsedAnchor","textAnchor","textContent","firstChild","originalStrokeWidth","textHeightScaleFactor","lineHeightDiff","scaledDiff","textHeight","offX","reNonWord","ITextBehavior","initBehavior","_tick","_onTickComplete","_animateCursor","toValue","_currentCursorOpacity","renderCursorOrSelection","_currentTickState","cursorDuration","_this$_currentTickCom","_currentTickCompleteState","restart","cursorDelay","shouldClear","cursorAnimation","restartCursorIfNeeded","selectAll","_fireSelectionChanged","selectAllText","getSelectedText","findWordBoundaryLeft","startFrom","_reSpace","findWordBoundaryRight","findLineBoundaryLeft","findLineBoundaryRight","searchWordBoundary","selectWord","lastWord","newSelectionStart","newSelectionEnd","regex","selectLine","initHiddenTextarea","_saveEditingProps","_setEditingProps","_textBeforeEdit","_this$hiddenTextarea","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","isEndOfLine","somethingAdded","currentCharStyle","numIndex","styleCarriedOver","insertCharStyleObject","quantity","currentLineStyles","currentLineStylesCloned","numericIndex","newStyle","insertNewStyleBlock","insertedText","cursorLoc","addedLines","linesLength","setSelectionStartEndWithShift","_selectionDirection","ITextKeyBehavior","hiddenTextareaContainer","onKeyDown","onKeyUp","onInput","copy","paste","onCompositionStart","onCompositionUpdate","onCompositionEnd","_clickHandlerInitialized","onClick","keyMap","keysMapRtl","keysMap","keyCode","ctrlKeysMapDown","ctrlKey","metaKey","stopImmediatePropagation","_copyDone","ctrlKeysMapUp","fromPaste","updateAndFire","nextText","charCount","nextCharCount","removedText","charDiff","removeFrom","removeTo","textareaSelection","backDelete","copiedText","disableStyleCopyPaste","copiedTextStyle","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","isTpClick","didDrag","mouseOffset","prevWidth","_getNewSelectionStartFromOffset","distanceBtwLastCharAndCursor","distanceBtwNextCharAndCursor","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","onChangedListener","textboxDefaultValues","Textbox","addControls","InitializeEvent","yr","_styleMap","_generateStyleMap","textInfo","realLineCount","realLineCharCount","isWrapping","nextLineIndex","nextOffset","shouldLimit","mapNextLine","_wrapText","desiredWidth","wrapped","_wrapLine","_measureWord","word","charOffset","wordSplit","graphemeSplitForRectNotes","words","reservedSpace","additionalSpace","infix","infixWidth","largestWordWidth","lineJustStarted","wordWidth","getMinWidth","linesToKeep","renderCustomControl","styleOverride1","isHovering","controlMousedownProcess","checkTextboxChange","circleNotesDefaultValues","verticalAlign","noteType","breakWords","emoj","CircleNotes","isDraw","getWidgetMenuTouchList","getCenteredTop","rectHeight","_getTotalLineHeight","isEmojiExist","renderEmoji","imageList","emoji_thumb","emoji_love","emoji_smile","emoji_shock","emoji_question","imageListArray","emojiList","drawRoundRectPath","isEmojiThumbExist","modifier","imageX","imageY","imageW","imageH","cxt","ellipseDefaultValues","ELLIPSE_PROPS","Ellipse","getRx","getRy","Canvas2dFilterBackend","applyFilters","filters","sourceElement","sourceWidth","sourceHeight","imageData","originalImageData","pipelineState","originalEl","filterBackend","applyTo","imageDataPostFilter","putImageData","WebGLFilterBackend","tileSize","Float32Array","setupGLContext","captureGPUInfo","createWebGLCanvas","chooseFastestCopyGLTo2DMethod","imageBuffer","ArrayBuffer","forceGLPutImageData","copyGLTo2D","copyGLTo2DPutImageData","testContext","testPipelineState","destinationWidth","destinationHeight","performance","drawImageTime","putImageDataTime","glOptions","premultipliedAlpha","depth","stencil","antialias","clearColor","cachedTexture","getCachedTexture","sourceTexture","createTexture","targetTexture","originalTexture","passes","webgl","aPosition","programCache","pass","tempFbo","createFramebuffer","bindFramebuffer","FRAMEBUFFER","resizeCanvasIfNeeded","bindTexture","TEXTURE_2D","deleteTexture","deleteFramebuffer","clearWebGLCaches","textureCache","textureImageSource","texture","texParameteri","TEXTURE_MAG_FILTER","NEAREST","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","RGBA","UNSIGNED_BYTE","uniqueId","evictCachesForKey","glCanvas","sourceY","gpuInfo","renderer","vendor","ext","getExtension","UNMASKED_RENDERER_WEBGL","UNMASKED_VENDOR_WEBGL","dWidth","dHeight","numBytes","u8","Uint8Array","u8Clamped","Uint8ClampedArray","readPixels","imgData","ImageData","initFilterBackend","enableGLFiltering","getFilterBackend","imageDefaultValues","srcFromAttribute","minimumScaleTrigger","imageSmoothing","IMAGE_PROPS","Image","setElement","_element","removeTexture","_originalElement","CSS_CANVAS","resizeFilter","applyResizeFilters","backend","elementKey","getCrossOrigin","getOriginalSize","_stroke","filterObj","getSrc","setLockedShadow","fabric","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","fileOptions","previewImage","getFileIconURL","loadedImg","initDoubleClickSimulation","_stopEvent","resizeImageAccordingToZoomAndOnScreen","realWidth","oWidth","oHeight","originalSrc","innerWidth","compressSize","targetSrc","cloneWidget","startCrop","cropSelectionRect","cancelCrop","addSelectionRect","crop","cropObjectMovingHandler","cropObjectScalingHandler","WBFileDefaultValues","WBFile","FbricImage","title","$","cvsPosition","description","css","val","show","removedListener","resizeFilters","isUploading","spread","fileSuffixName","lastIndexOf","Boardx","Util","isMobile","location","href","fileSrc","isFileVideo","store","dispatch","handleSetVideoUrl","fileType","toLocaleLowerCase","loading","imgWidth","imgHeight","renderTitle","getFileType","FileType","substr","MP4","WEBM","GB2312UnicodeConverter","ToUnicode","escape","ToGB2312","unescape","unicodeTitle","firstChar","lastChar","wrapText","newurl","changeFileImgUrl","lineCount","tempLine","_y","testLine","metrics","testWidth","fileIconURL","parsePointsAttribute","parsedPoints","polylineDefaultValues","exactBoundingBox","Polyline","isOpen","_projectStrokeOnPoints","projection","bboxNoStroke","pathOffsetX","pathOffsetY","output","layoutProperties","diffX","diffY","Polygon","rectNotesDefaultValues","RectNotes","prenum","shapeNotesDefaultValues","ShapeNotes","__skipDimension","preHeight","getTopOffset","yOffset","tmp","preLines","lastIndex","lastLine","textSplitTextIntoLines","getLeftOffset","getObjectsIntersected","_getIntersectedObjects","shapeArray","svgPath","Path2D","icon","createElementNS","createSVGMatrix","addPath","tOffset","lOffset","desiredHeight","triangleDefaultValues","Triangle","widthBy2","heightBy2","UrlImageDefaultValues","UrlImage","renderDescription","renderPublishDate","publisher","publishedDate","toDateString","cvs","imgOptions","applyViewboxTransform","viewBoxAttr","widthAttr","heightAttr","missingViewBox","missingDimAttr","toBeParsed","parsedDim","widthDiff","heightDiff","getCSSRules","allRules","rules","styleContents","ruleObj","declaration","propertyValuePairs","_rule","getMultipleNodes","nodeNames","nodeArray","nodeList","elementById","node","nodelist","gradientsAttrs","xlinkAttr","recursivelyParseGradientsXlink","xLink","referencedGradient","children","referenceClone","cloneNode","tagArray","getGradientDefs","elList","hasAncestorWithNodeName","ElementsParser","parsingOptions","regexUrl","proto","numElements","createObjects","createObject","findTag","tagName","klass","createCallback","checkIfDone","_options","resolveGradient","resolveClipPath","extractPropertyDefinition","storageType","gradientDef","createClipPathCallback","_newObj","clipRule","usingElement","objTransformInv","clipPathTag","clipPathOwner","gTransform","parseElements","parseUseDirectives","xlinkAttribute","xlink","el2","currentTrans","oldLength","attrs","namespace","el3","setAttributeNS","nodeValue","parseSVGDocument","descendants","localClipPaths","loadSVGFromURL","xml","responseXML","loadSVGFromString","parser","DOMParser","parseFromString","getSize","poly","factoryPolyPositionHandler","pointIndex","polyObject","_polyObject$canvas$vi","_polyObject$canvas","polyActionHandler","mouseLocalPosition","polygonBaseSize","sizeFactor","adjustFlip","finalPointPosition","anchorWrapper","anchorIndex","pointInParentPlane","newPosition","createPolyControls","rotationStyleHandler","rotateObjectWithSnapping","pivotPoint","lastAngle","curAngle","snapAngle","snapThreshold","rightAngleLocked","leftAngleLocked","hasRotated","rotationWithSnapping","isWebGLPipelineState","highPsourceCode","high","identityFragmentShader","vertexSource","BaseFilter","_extends","_objectDestructuringEmpty","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","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","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","avg","amt","uVibrance","StaticCanvasBase","createPNGStream","opts","createJPEGStream","CanvasBase"],"mappings":"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AC1BC,EAAAA,iBAAiB,EAAE,IAAI;AACvBC,EAAAA,oBAAoB,EAAE,KAAK;AAC3BC,EAAAA,mBAAmB,EAAE,KAAK;AAC1BC,EAAAA,qBAAqB,EAAE,IAAI;AAC3BC,EAAAA,iBAAiB,EAAEnmB,OAAO,CAAC5E,MAAM,EAAE;AACnCgrB,EAAAA,aAAa,EAAE,IAAI;AACnBC,EAAAA,UAAU,EAAE,IAAI;AAChBC,EAAAA,mBAAmB,EAAE,IAAI;AACzBC,EAAAA,yBAAyB,EAAE,IAAI;AAC/BC,EAAAA,aAAa,EAAE,IAAI;AACnBC,EAAAA,QAAQ,EAAEjtB,SAAS;AACnBktB,EAAAA,kBAAkB,EAAE,IAAA;AACtB,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;qBACO,MAAMC,YAAY,SAEf/e,qBAAqB,CAAC4D,aAAa,CAAe,CAAC;AAC3D;AACF;AACA;AACA;AACA;;AAIE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;;AAKE;AACF;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;;AAGE;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AAW,EAAE,QAAQ;AACrBvT,EAAAA,YAAY,EAAE,UAAU;AACxBwT,EAAAA,SAAS,EAAE,IAAI;AACfC,EAAAA,YAAY,EAAE,UAAU;AACxBC,EAAAA,cAAc,EAAE,0BAA0B;AAAE;AAC5CC,EAAAA,kBAAkB,EAAE,EAAE;AACtBC,EAAAA,oBAAoB,EAAE,SAAS;AAC/BrmB,EAAAA,kBAAkB,EAAE,GAAG;AACvBsmB,EAAAA,uBAAuB,EAAE,KAAK;AAC9BlnB,EAAAA,WAAW,EAAE,MAAM;AACnBC,EAAAA,UAAU,EAAE,MAAM;AAClBknB,EAAAA,aAAa,EAAE,SAAS;AACxBC,EAAAA,iBAAiB,EAAE,WAAW;AAC9BC,EAAAA,gBAAgB,EAAE,aAAa;AAC/BC,EAAAA,cAAc,EAAE,kBAAkB;AAClCnmB,EAAAA,kBAAkB,EAAE,KAAK;AACzBomB,EAAAA,mBAAmB,EAAE,CAAC;AACtBC,EAAAA,cAAc,EAAE,KAAK;AACrBtF,EAAAA,sBAAsB,EAAE,KAAK;AAC7BuF,EAAAA,eAAe,EAAE,KAAK;AACtBC,EAAAA,cAAc,EAAE,KAAK;AACrBC,EAAAA,eAAe,EAAE,KAAK;AACtBC,EAAAA,mBAAmB,EAAE,KAAK;AAC1B/tC,EAAAA,kBAAkB,EAAE,IAAA;AACtB,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,MA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fK,aAAa;AACb7xD,EAAAA,QAAQ,EAAE,EAAA;AACZ,CAAC,CAAA;;AAED;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,MAAM02D,KAAK,SAKRvB,kBAAkB,CACE;AAC5B;AACF;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;;AAQE;AACF;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;;AAKE;AACF;AACA;AACA;AACA;;EAKE,OAAOr9E,WAAWA,GAAG;IACnB,OAAA9sB,cAAA,CAAAA,cAAA,CAAY,EAAA,EAAA,KAAK,CAAC8sB,WAAW,EAAE,CAAA,EAAK4+E,KAAK,CAAC3+E,WAAW,CAAA,CAAA;AACvD,GAAA;EAEA,IAAIlT,IAAIA,GAAG;AACT,IAAA,OAAO,QAAQ,CAAA;AACjB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AAEE1a,EAAAA,WAAWA,CAAC+hF,IAAY,EAAEx3E,OAAe,EAAE;AACzC,IAAA,KAAK,CAACw3E,IAAI,EAAEx3E,OAAO,CAAC,CAAA;IACpB,IAAI,CAACy1F,YAAY,EAAE,CAAA;AACrB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACErtF,EAAAA,IAAIA,CAACnR,GAAW,EAAEyC,KAAU,EAAE;AAC5B,IAAA,IAAI,IAAI,CAACq7D,SAAS,IAAI,IAAI,CAAC0kC,WAAW,IAAIxiG,GAAG,IAAI,IAAI,CAACwiG,WAAW,EAAE;AACjE;AACA,MAAA,IAAI,CAACA,WAAW,C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"}