{"version":3,"file":"XFile.mjs","sources":["../../../../../src/shapes/canvasx/XFile/XFile.ts"],"sourcesContent":["import { TOriginX, TOriginY } from 'fabric';\nimport { classRegistry } from '../../../ClassRegistry';\nimport { Shadow } from '../../../Shadow';\nimport { getFabricWindow } from '../../../env';\nimport { loadImage } from '../../../util/misc/objectEnlive';\n\nimport { ImageProps } from '../../Image';\nimport { FabricObject } from '../../Object/FabricObject';\nimport { Rect } from '../../Rect';\n\nimport {\n  WidgetFileInterface,\n  WidgetFileClass,\n  FileObjectType,\n  FileEnum\n} from '../type/widget.entity.file';\nimport { WidgetType, WidgetFileType } from '../type/widget.type';\nimport { EntityKeys, } from \"../type/widget.entity.file\";\nimport { FileObject } from \"../type/file\";\n\n\n\nexport type XFileProps = ImageProps & WidgetFileClass;\nconst FILE_ICON_PATHS: Record<WidgetFileType, string> = {\n  XFileWord: '/boardxstatic/fileIcons/word.png',\n  XFileExcel: '/boardxstatic/fileIcons/excel.png',\n  XFilePPT: '/boardxstatic/fileIcons/ppt.png',\n  XFilePDF: '/boardxstatic/fileIcons/pdf.svg',\n  XFileZip: '/boardxstatic/fileIcons/zip.png',\n  XFileVideo: '/boardxstatic/fileIcons/mp4.png',\n  XFileAudio: '/boardxstatic/fileIcons/audio.png',\n  XFile: '/boardxstatic/fileIcons/file.png',\n};\n\nexport const FILE_TYPE_NAMES: Record<FileObjectType, string> = {\n  DOC: 'Word Document',\n  DOCX: 'Word Document',\n  XLS: 'Excel Document',\n  XLSX: 'Excel Document',\n  PPT: 'PPT Document',\n  PPTX: 'PPT Document',\n  PDF: 'PDF Document',\n  ZIP: 'ZIP File',\n  MP4: 'Video Document',\n  WEBM: 'Video Document',\n  MP3: 'Audio Document',\n  M4A: 'Audio Document',\n  WAV: 'Audio Document',\n  AAC: 'Audio Document',\n  FLAC: 'Audio Document',\n  OGG: 'Audio Document',\n  AIFF: 'Audio Document',\n  WMA: 'Audio Document',\n  APE: 'Audio Document',\n  UNKNOWN: 'Other Document',\n};\n\nexport function getWidgetFileType(fileName: string): WidgetFileType {\n  const extension = fileName.split('.').pop()?.toUpperCase() as FileObjectType;\n  switch (extension) {\n    case 'DOC':\n    case 'DOCX':\n      return 'XFileWord';\n    case 'XLS':\n    case 'XLSX':\n      return 'XFileExcel';\n    case 'PPT':\n    case 'PPTX':\n      return 'XFilePPT';\n    case 'PDF':\n      return 'XFilePDF';\n    case 'ZIP':\n      return 'XFileZip';\n    case 'MP4':\n    case 'WEBM':\n      return 'XFileVideo';\n    case 'MP3':\n    case 'M4A':\n    case 'WAV':\n    case 'AAC':\n    case 'FLAC':\n    case 'OGG':\n    case 'AIFF':\n    case 'WMA':\n    case 'APE':\n      return 'XFileAudio';\n    default:\n      return 'XFile';\n  }\n}\n\nconst VIDEO_FILE_EXTENSIONS = new Set([FileEnum.MP4, FileEnum.WEBM]);\n\nexport class XFile extends FabricObject implements WidgetFileInterface {\n  static objType: WidgetFileType = 'XFile';\n  static type: WidgetFileType = 'XFile';\n\n  // WidgetFile properties\n  id: string = '';\n  boardId: string = '';\n  backgroundColor: string = 'rgba(0,0,0,0)';\n  fill: string = 'rgba(0,0,0,0)';\n  width: number = 230;\n  height: number = 248;\n  left: number = 0;\n  locked: boolean = false;\n  objType: WidgetType = 'XFile';\n  originX: TOriginX = 'center';\n  originY: TOriginY = 'center';\n  scaleX: number = 1;\n  scaleY: number = 1;\n  selectable: boolean = true;\n  top: number = 0;\n  userId: string = '';\n  zIndex: number = 0;\n  version: string = '';\n  updatedAt: number = Date.now();\n  lastEditedBy: string = '';\n  createdAt: number = Date.now();\n  createdBy: string = '';\n  visible: boolean = true;\n\n  // WidgetFile specific properties\n  fileName: string = '';\n  fileSrc: FileObject = { tmpPath: '', id: '', path: '' };\n  vectorSrc: FileObject = { tmpPath: '', id: '', path: '' };\n  transcription: string = '';\n\n  previewImage: FileObject = { tmpPath: '', id: '', path: '' };\n\n  private _previewImage: HTMLImageElement | null = null;\n\n\n\n  constructor(options: Partial<XFileProps & { type: string }> = {}) {\n    super(options);\n    this.objType = 'XFile';\n    this.initializeVisuals();\n    Object.assign(this, options);\n    this.fileObjectType = XFile.getFileType(options.fileName || '');\n    this.fill = options.backgroundColor || this.backgroundColor;\n    this.loadPreviewImage(\n      this.getFileIconURL(options.objType as WidgetFileType),\n      options.fileName!\n    );\n    this.on(\"mousedblclick\", this.onDoubleClick.bind(this)); // Attach event listener\n  }\n\n  updatedBy: string;\n  updatedByName: string;\n\n  createdByName: string;\n  fileObjectType: FileObjectType;\n\n\n\n  private initializeVisuals() {\n    this.cornerColor = 'white';\n    this.cornerStrokeColor = 'gray';\n    this.cornerSize = 10;\n    this.cornerStyle = 'circle';\n    this.transparentCorners = false;\n    this.shadow = new Shadow({\n      color: 'rgba(217, 161, 177, 0.54)',\n      offsetX: 1,\n      offsetY: 2,\n      blur: 4,\n      id: 310,\n    });\n\n    this.clipPath = new Rect({\n      left: 0,\n      top: 0,\n      rx: 8,\n      ry: 8,\n      width: this.width,\n      height: this.height,\n      fill: '#000000',\n    });\n  }\n\n  toObject(propertiesToInclude: string[] = []): any {\n    return super.toObject([...EntityKeys, ...propertiesToInclude]);\n  }\n\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n\n  onDoubleClick(): void {\n    getFabricWindow().open(this.fileSrc?.tmpPath, '_blank');\n  }\n\n  drawObject(ctx: CanvasRenderingContext2D): void {\n    this.drawBorder(ctx);\n    this.drawPreviewImage(ctx);\n    this.renderTitle(ctx, this.fileName);\n    this._renderStroke(ctx);\n  }\n\n  private drawBorder(ctx: CanvasRenderingContext2D): void {\n    ctx.beginPath();\n    ctx.fillStyle = 'rgba(255,255,255,0)';\n    ctx.fillRect(-this.width / 2, -this.height / 2, this.width, this.height);\n    ctx.lineWidth = 0;\n    ctx.strokeStyle = '#ffffff';\n    ctx.moveTo(-this.width / 2, -this.height / 2);\n    ctx.stroke();\n  }\n\n\n  private drawPreviewImage(ctx: CanvasRenderingContext2D): void {\n    if (this._previewImage) {\n      // Calculate the available height for the image to avoid overlapping the title\n      const titleHeight = 90; // Total height reserved for the title and background\n      const availableHeight = this.height - titleHeight;\n\n      // Calculate image dimensions while maintaining aspect ratio\n      const imageAspectRatio = this._previewImage.width / this._previewImage.height;\n      const drawWidth = this.width;\n      const drawHeight = drawWidth / imageAspectRatio;\n\n      // Adjust if the calculated height exceeds the available height\n      const finalDrawHeight = Math.min(drawHeight, availableHeight);\n\n      ctx.drawImage(\n        this._previewImage,\n        -this.width / 2,\n        -this.height / 2,\n        drawWidth,\n        finalDrawHeight\n      );\n    }\n  }\n\n  static getFileTypeName(fileName: string = ''): string {\n    const extension = fileName\n      .split('.')\n      .pop()\n      ?.toUpperCase() as FileObjectType;\n    return FILE_TYPE_NAMES[extension] || 'Other Document';\n  }\n\n  static getFileType(fileName: string = ''): FileObjectType {\n    const extension: FileObjectType = fileName\n      .split('.')\n      .pop()\n      ?.toUpperCase() as FileObjectType;\n\n    return extension;\n  }\n\n  isFileVideo(fileName: string): boolean {\n    const extension = fileName.split('.').pop()?.toUpperCase();\n    return VIDEO_FILE_EXTENSIONS.has(extension as FileEnum);\n  }\n\n  renderTitle(ctx: CanvasRenderingContext2D, title: string): void {\n    const maxWidth = this.width;\n    const x = -this.width / 2;\n    const y = this.height / 2 - 60;\n\n    ctx.font = '16px Inter';\n    ctx.fillStyle = 'rgba(255, 255, 255, 1)';\n    ctx.fillRect(x, y - 29, maxWidth, 90);\n    ctx.fillStyle = '#190FA1';\n\n    const sanitizedTitle = this.sanitizeTitle(title);\n    this.wrapText(ctx, sanitizedTitle, x + 15, y - 5, maxWidth - 20, 23);\n\n    // const newUrl = this.getShortenedUrl();\n    // ctx.font = '12px Inter';\n    // ctx.fillStyle = 'rgba(35, 41, 48, 0.65)';\n    // this.wrapText(ctx, newUrl, x + 15, y + 45, maxWidth - 20, 25);\n  }\n\n  private sanitizeTitle(title: string): string {\n    const unicodeTitle = this.toUnicode(title);\n    if (!title || unicodeTitle.includes('\\\\ufffd')) {\n      const parts = this.fileSrc.tmpPath.split('.');\n      return parts.length > 2 ? parts[1] : 'Untitled';\n    }\n    return title;\n  }\n\n  private toUnicode(str: string): string {\n    return escape(str).toLowerCase().replace(/%u/gi, '\\\\u');\n  }\n\n  private getShortenedUrl(): string {\n    if (!this.fileSrc.tmpPath) return '';\n    const parts = this.fileSrc.tmpPath.split('/');\n    return parts.length >= 3\n      ? `${parts[0]}/${parts[1]}/${parts[2]}`\n      : this.fileSrc.tmpPath;\n  }\n\n  private wrapText(\n    ctx: CanvasRenderingContext2D,\n    text: string,\n    x: number,\n    y: number,\n    maxWidth: number,\n    lineHeight: number\n  ): void {\n    const words = text.includes(' ') ? text.split(' ') : text.split('');\n    let line = '';\n    let lineCount = 1;\n    let tempLine = '';\n    let currentY = y;\n\n    for (let n = 0; n < words.length; n++) {\n      if (lineCount === 3) return;\n\n      const testLine = line + (words[n] + (words.length > 1 ? ' ' : ''));\n      const metrics = ctx.measureText(testLine);\n      const testWidth = metrics.width;\n\n      if (testWidth > maxWidth && n > 0) {\n        if (lineCount === 2) {\n          line = `${line.slice(0, -3)}...`;\n        }\n        ctx.fillText(line, x, currentY);\n        line = words[n] + ' ';\n        currentY += lineHeight;\n        lineCount++;\n      } else {\n        line = testLine;\n      }\n    }\n\n    if (lineCount < 3) {\n      ctx.fillText(line, x, currentY);\n    }\n  }\n\n  getFileIconURL(objType: WidgetFileType): string {\n    return FILE_ICON_PATHS[objType] || FILE_ICON_PATHS['XFile'];\n  }\n\n  async loadPreviewImage(\n    previewImage: string,\n    fileName: string\n  ): Promise<void> {\n    const url = previewImage || this.getFileIconURL(XFile.objType);\n    try {\n      this._previewImage = await loadImage(url, { crossOrigin: 'anonymous' });\n      this.dirty = true;\n      this.canvas?.requestRenderAll();\n    } catch (error) {\n      console.error('Failed to load preview image:', error);\n    }\n  }\n}\n\nclassRegistry.setClass(XFile);\n"],"names":["FILE_ICON_PATHS","XFileWord","XFileExcel","XFilePPT","XFilePDF","XFileZip","XFileVideo","XFileAudio","XFile","FILE_TYPE_NAMES","DOC","DOCX","XLS","XLSX","PPT","PPTX","PDF","ZIP","MP4","WEBM","MP3","M4A","WAV","AAC","FLAC","OGG","AIFF","WMA","APE","UNKNOWN","VIDEO_FILE_EXTENSIONS","Set","FileEnum","FabricObject","constructor","options","arguments","length","undefined","_defineProperty","Date","now","tmpPath","id","path","objType","initializeVisuals","Object","assign","fileObjectType","getFileType","fileName","fill","backgroundColor","loadPreviewImage","getFileIconURL","on","onDoubleClick","bind","cornerColor","cornerStrokeColor","cornerSize","cornerStyle","transparentCorners","shadow","Shadow","color","offsetX","offsetY","blur","clipPath","Rect","left","top","rx","ry","width","height","toObject","propertiesToInclude","EntityKeys","getObject","entityKeys","result","forEach","key","_this$fileSrc","getFabricWindow","open","fileSrc","drawObject","ctx","drawBorder","drawPreviewImage","renderTitle","_renderStroke","beginPath","fillStyle","fillRect","lineWidth","strokeStyle","moveTo","stroke","_previewImage","titleHeight","availableHeight","imageAspectRatio","drawWidth","drawHeight","finalDrawHeight","Math","min","drawImage","getFileTypeName","_fileName$split$pop2","extension","split","pop","toUpperCase","_fileName$split$pop3","isFileVideo","_fileName$split$pop4","has","title","maxWidth","x","y","font","sanitizedTitle","sanitizeTitle","wrapText","unicodeTitle","toUnicode","includes","parts","str","escape","toLowerCase","replace","getShortenedUrl","concat","text","lineHeight","words","line","lineCount","currentY","n","testLine","metrics","measureText","testWidth","slice","fillText","previewImage","url","_this$canvas","loadImage","crossOrigin","dirty","canvas","requestRenderAll","error","console","classRegistry","setClass"],"mappings":"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"}