{"version":3,"file":"Ellipse.mjs","sources":["../../../src/shapes/Ellipse.ts"],"sourcesContent":["import { SCALE_X, SCALE_Y, twoMathPi } from '../constants';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const ellipseDefaultValues: Partial<TClassProperties<Ellipse>> = {\n  rx: 0,\n  ry: 0,\n};\n\ninterface UniqueEllipseProps {\n  rx: number;\n  ry: number;\n}\n\nexport interface SerializedEllipseProps\n  extends SerializedObjectProps,\n    UniqueEllipseProps {}\n\nexport interface EllipseProps extends FabricObjectProps, UniqueEllipseProps {}\n\nconst ELLIPSE_PROPS = ['rx', 'ry'] as const;\n\nexport class Ellipse<\n    Props extends TOptions<EllipseProps> = Partial<EllipseProps>,\n    SProps extends SerializedEllipseProps = SerializedEllipseProps,\n    EventSpec extends ObjectEvents = ObjectEvents,\n  >\n  extends FabricObject<Props, SProps, EventSpec>\n  implements EllipseProps\n{\n  /**\n   * Horizontal radius\n   * @type Number\n   * @default\n   */\n  declare rx: number;\n\n  /**\n   * Vertical radius\n   * @type Number\n   * @default\n   */\n  declare ry: number;\n\n  static type = 'Ellipse';\n\n  static cacheProperties = [...cacheProperties, ...ELLIPSE_PROPS];\n\n  static ownDefaults = ellipseDefaultValues;\n\n  static getDefaults(): Record<string, any> {\n    return {\n      ...super.getDefaults(),\n      ...Ellipse.ownDefaults,\n    };\n  }\n\n  /**\n   * Constructor\n   * @param {Object} [options] Options object\n   */\n  constructor(options?: Props) {\n    super();\n    Object.assign(this, Ellipse.ownDefaults);\n    this.setOptions(options);\n  }\n\n  /**\n   * @private\n   * @param {String} key\n   * @param {*} value\n   * @return {Ellipse} thisArg\n   */\n  _set(key: string, value: any) {\n    super._set(key, value);\n    switch (key) {\n      case 'rx':\n        this.rx = value;\n        this.set('width', value * 2);\n        break;\n\n      case 'ry':\n        this.ry = value;\n        this.set('height', value * 2);\n        break;\n    }\n    return this;\n  }\n\n  /**\n   * Returns horizontal radius of an object (according to how an object is scaled)\n   * @return {Number}\n   */\n  getRx() {\n    return this.get('rx') * this.get(SCALE_X);\n  }\n\n  /**\n   * Returns Vertical radius of an object (according to how an object is scaled)\n   * @return {Number}\n   */\n  getRy() {\n    return this.get('ry') * this.get(SCALE_Y);\n  }\n\n  /**\n   * Returns object representation of an instance\n   * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n   * @return {Object} object representation of an instance\n   */\n  toObject<\n    T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n    K extends keyof T = never,\n  >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n    return super.toObject([...ELLIPSE_PROPS, ...propertiesToInclude]);\n  }\n\n  /**\n   * Returns svg representation of an instance\n   * @return {Array} an array of strings with the specific svg representation\n   * of the instance\n   */\n  _toSVG(): string[] {\n    return [\n      '<ellipse ',\n      'COMMON_PARTS',\n      `cx=\"0\" cy=\"0\" rx=\"${this.rx}\" ry=\"${this.ry}\" />\\n`,\n    ];\n  }\n\n  /**\n   * @private\n   * @param {CanvasRenderingContext2D} ctx context to render on\n   */\n  _render(ctx: CanvasRenderingContext2D) {\n    ctx.beginPath();\n    ctx.save();\n    ctx.transform(1, 0, 0, this.ry / this.rx, 0, 0);\n    ctx.arc(0, 0, this.rx, 0, twoMathPi, false);\n    ctx.restore();\n    this._renderPaintInOrder(ctx);\n  }\n\n  /* _FROM_SVG_START_ */\n\n  /**\n   * List of attribute names to account for when parsing SVG element (used by {@link Ellipse.fromElement})\n   * @static\n   * @memberOf Ellipse\n   * @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement\n   */\n  static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'cx', 'cy', 'rx', 'ry'];\n\n  /**\n   * Returns {@link Ellipse} instance from an SVG element\n   * @static\n   * @memberOf Ellipse\n   * @param {HTMLElement} element Element to parse\n   * @return {Ellipse}\n   */\n  static async fromElement(\n    element: HTMLElement,\n    options: Abortable,\n    cssRules?: CSSRules,\n  ) {\n    const parsedAttributes = parseAttributes(\n      element,\n      this.ATTRIBUTE_NAMES,\n      cssRules,\n    );\n\n    parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx;\n    parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry;\n    return new this(parsedAttributes);\n  }\n\n  /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Ellipse);\nclassRegistry.setSVGClass(Ellipse);\n"],"names":["ellipseDefaultValues","rx","ry","ELLIPSE_PROPS","Ellipse","FabricObject","getDefaults","_objectSpread","ownDefaults","constructor","options","Object","assign","setOptions","_set","key","value","set","getRx","get","SCALE_X","getRy","SCALE_Y","toObject","propertiesToInclude","arguments","length","undefined","_toSVG","concat","_render","ctx","beginPath","save","transform","arc","twoMathPi","restore","_renderPaintInOrder","fromElement","element","cssRules","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","left","top","_defineProperty","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}