{"version":3,"file":"XImage.mjs","sources":["../../../../src/shapes/canvasx/XImage.ts"],"sourcesContent":["import type { BaseFilter } from '../../filters/BaseFilter';\nimport { SHARED_ATTRIBUTES } from '../../parser/attributes';\nimport { TSize } from '../../typedefs';\nimport { findScaleToCover, findScaleToFit } from '../../util/misc/findScaleTo';\nimport { parsePreserveAspectRatioAttribute } from '../../util/misc/svgParsing';\nimport { classRegistry } from '../../ClassRegistry';\nimport { TOptions } from '../../typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from '../Object/types';\nimport type { ObjectEvents } from '../../EventTypeDefs';\n// @todo Would be nice to have filtering code not imported directly.\n\nimport { WidgetImageInterface, EntityKeys } from './type/widget.entity.image';\nimport { FabricImage } from '../Image';\nimport { WidgetType } from './type/widget.type';\nimport { FileObject } from './type/file';\n\n\nexport type ImageSource =\n  | HTMLImageElement\n  | HTMLVideoElement\n  | HTMLCanvasElement;\n\ninterface UniqueImageProps {\n  srcFromAttribute: boolean;\n  minimumScaleTrigger: number;\n  cropX: number;\n  cropY: number;\n  imageSmoothing: boolean;\n  crossOrigin: string | null;\n  filters: BaseFilter[];\n  resizeFilter?: BaseFilter;\n}\n\nexport const imageDefaultValues: Partial<UniqueImageProps> &\n  Partial<FabricObjectProps> = {\n  strokeWidth: 0,\n  srcFromAttribute: false,\n  minimumScaleTrigger: 0.5,\n  cropX: 0,\n  cropY: 0,\n  imageSmoothing: true,\n  crossOrigin: 'anonymous',\n  originX: 'center',\n  originY: 'center',\n};\n\nexport interface SerializedImageProps extends SerializedObjectProps {\n  src: string;\n  crossOrigin: string | null;\n  filters: any[];\n  resizeFilter?: any;\n  cropX: number;\n  cropY: number;\n}\n\nexport interface ImageProps extends FabricObjectProps, UniqueImageProps { }\n\nconst IMAGE_PROPS = ['cropX', 'cropY'] as const;\n\n/**\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#images}\n */\nexport class XImage<\n  Props extends TOptions<ImageProps> = Partial<ImageProps>,\n  SProps extends SerializedImageProps = SerializedImageProps,\n  EventSpec extends ObjectEvents = ObjectEvents\n> extends FabricImage implements WidgetImageInterface {\n\n  cropWidth: number;\n  cropHeight: number;\n  previewImage: FileObject;\n  imageSrc: FileObject;\n  version: string;\n  updatedAt: number;\n\n  createdAt: number;\n  createdBy: string;\n  boardId: string;\n  objType: WidgetType;\n  userId: string;\n  zIndex: number;\n  /* boardx cusotm function */\n\n  static type: WidgetType = 'XImage';\n  static objType: WidgetType = 'XImage';\n\n  constructor(image: any, options: any) {\n\n    options.objType = 'XImage';\n    options.cornerColor = 'white';\n    options.cornerSize = 10;\n    options.cornerStyle = 'circle';\n    options.transparentCorners = false;\n    options.cornerStrokeColor = 'gray';\n    super(image, options);\n    Object.assign(this, options);\n\n  }\n  updatedBy: string;\n  updatedByName: string;\n  markdownText: string;\n\n  createdByName: string;\n\n\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n\n\n  /**\n   * Renders the image on the canvas context, correctly handling scaling and cropping.\n   * @private\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   */\n  _renderFill(ctx: CanvasRenderingContext2D) {\n    const elementToDraw = this._element;\n    if (!elementToDraw) {\n      return;\n    }\n\n    // Get the object's dimensions\n    const w = this.width,\n      h = this.height,\n      // Crop values cannot be less than 0\n      cropX = Math.max(this.cropX, 0),\n      cropY = Math.max(this.cropY, 0),\n      // Get the natural dimensions of the image element\n      elWidth =\n        (elementToDraw as HTMLImageElement).naturalWidth || elementToDraw.width,\n      elHeight =\n        (elementToDraw as HTMLImageElement).naturalHeight || elementToDraw.height,\n      // Calculate source width and height, ensuring we don't exceed image bounds\n      sX = cropX,\n      sY = cropY,\n      sW = Math.min(w, elWidth - cropX),\n      sH = Math.min(h, elHeight - cropY),\n      // Destination coordinates (centered)\n      x = -w / 2,\n      y = -h / 2,\n      destW = w,\n      destH = h;\n\n    // Draw the image onto the canvas context\n    ctx.drawImage(\n      elementToDraw,\n      sX,\n      sY,\n      sW,\n      sH,\n      x,\n      y,\n      destW,\n      destH\n    );\n  }\n\n\n  /**\n   * Decide if the object should cache or not. Create its own cache level\n   * needsItsOwnCache should be used when the object drawing method requires\n   * a cache step. None of the fabric classes requires it.\n   * Generally you do not cache objects in groups because the group outside is cached.\n   * This is the special image version where we would like to avoid caching where possible.\n   * Essentially images do not benefit from caching. They may require caching, and in that\n   * case we do it. Also caching an image usually ends in a loss of details.\n   * A full performance audit should be done.\n   * @return {Boolean}\n   */\n  shouldCache() {\n    return this.needsItsOwnCache();\n  }\n\n  /**\n   * needed to check if image needs resize\n   * @private\n   */\n  _needsResize() {\n    const scale = this.getTotalObjectScaling();\n    return scale.x !== this._lastScaleX || scale.y !== this._lastScaleY;\n  }\n\n  /**\n   * @private\n   * @deprecated unused\n   */\n  _resetWidthHeight() {\n    this.set(this.getOriginalSize());\n  }\n\n  /**\n   * @private\n   * Set the width and the height of the image object, using the element or the\n   * options.\n   */\n  _setWidthHeight({ width, height }: Partial<TSize> = {}) {\n    const size = this.getOriginalSize();\n    this.width = width || size.width;\n    this.height = height || size.height;\n  }\n\n  /**\n   * Calculate offset for center and scale factor for the image in order to respect\n   * the preserveAspectRatio attribute\n   * @private\n   */\n  parsePreserveAspectRatioAttribute() {\n    const pAR = parsePreserveAspectRatioAttribute(\n      this.preserveAspectRatio || ''\n    ),\n      pWidth = this.width,\n      pHeight = this.height,\n      parsedAttributes = { width: pWidth, height: pHeight };\n    let rWidth = this._element.width,\n      rHeight = this._element.height,\n      scaleX = 1,\n      scaleY = 1,\n      offsetLeft = 0,\n      offsetTop = 0,\n      cropX = 0,\n      cropY = 0,\n      offset;\n\n    if (pAR && (pAR.alignX !== 'none' || pAR.alignY !== 'none')) {\n      if (pAR.meetOrSlice === 'meet') {\n        scaleX = scaleY = findScaleToFit(this._element, parsedAttributes);\n        offset = (pWidth - rWidth * scaleX) / 2;\n        if (pAR.alignX === 'Min') {\n          offsetLeft = -offset;\n        }\n        if (pAR.alignX === 'Max') {\n          offsetLeft = offset;\n        }\n        offset = (pHeight - rHeight * scaleY) / 2;\n        if (pAR.alignY === 'Min') {\n          offsetTop = -offset;\n        }\n        if (pAR.alignY === 'Max') {\n          offsetTop = offset;\n        }\n      }\n      if (pAR.meetOrSlice === 'slice') {\n        scaleX = scaleY = findScaleToCover(this._element, parsedAttributes);\n        offset = rWidth - pWidth / scaleX;\n        if (pAR.alignX === 'Mid') {\n          cropX = offset / 2;\n        }\n        if (pAR.alignX === 'Max') {\n          cropX = offset;\n        }\n        offset = rHeight - pHeight / scaleY;\n        if (pAR.alignY === 'Mid') {\n          cropY = offset / 2;\n        }\n        if (pAR.alignY === 'Max') {\n          cropY = offset;\n        }\n        rWidth = pWidth / scaleX;\n        rHeight = pHeight / scaleY;\n      }\n    } else {\n      scaleX = pWidth / rWidth;\n      scaleY = pHeight / rHeight;\n    }\n    return {\n      width: rWidth,\n      height: rHeight,\n      scaleX,\n      scaleY,\n      offsetLeft,\n      offsetTop,\n      cropX,\n      cropY,\n    };\n  }\n\n  /**\n   * Default CSS class name for canvas\n   * @static\n   * @type String\n   * @default\n   */\n  static CSS_CANVAS = 'canvas-img';\n\n  /**\n   * List of attribute names to account for when parsing SVG element (used by {@link Image.fromElement})\n   * @static\n   * @see {@link http://www.w3.org/TR/SVG/struct.html#ImageElement}\n   */\n  static ATTRIBUTE_NAMES = [\n    ...SHARED_ATTRIBUTES,\n    'x',\n    'y',\n    'width',\n    'height',\n    'preserveAspectRatio',\n    'xlink:href',\n    'crossOrigin',\n    'image-rendering',\n  ];\n\n  _stopEvent(e: any) {\n    if (e.preventDefault) e.preventDefault();\n    if (e.stopPropagation) e.stopPropagation();\n  }\n\n  cloneWidget() {\n    return this.toObject();\n  }\n}\n\nclassRegistry.setClass(XImage);\nclassRegistry.setSVGClass(XImage);\n"],"names":["XImage","FabricImage","constructor","image","options","objType","cornerColor","cornerSize","cornerStyle","transparentCorners","cornerStrokeColor","_defineProperty","Object","assign","getObject","entityKeys","EntityKeys","result","forEach","key","_renderFill","ctx","elementToDraw","_element","w","width","h","height","cropX","Math","max","cropY","elWidth","naturalWidth","elHeight","naturalHeight","sX","sY","sW","min","sH","x","y","destW","destH","drawImage","shouldCache","needsItsOwnCache","_needsResize","scale","getTotalObjectScaling","_lastScaleX","_lastScaleY","_resetWidthHeight","set","getOriginalSize","_setWidthHeight","arguments","length","undefined","size","parsePreserveAspectRatioAttribute","pAR","preserveAspectRatio","pWidth","pHeight","parsedAttributes","rWidth","rHeight","scaleX","scaleY","offsetLeft","offsetTop","offset","alignX","alignY","meetOrSlice","findScaleToFit","findScaleToCover","_stopEvent","e","preventDefault","stopPropagation","cloneWidget","toObject","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}