{"version":3,"file":"XFrame.min.mjs","sources":["../../../../src/shapes/canvasx/XFrame.ts"],"sourcesContent":["import { FabricObject } from '../Object/FabricObject';\nimport { Textbox } from '../Textbox';\nimport { Rect } from '../Rect';\nimport { Group } from '../Group';\nimport { LayoutManager } from '../../LayoutManager';\nimport { FitContentLayout } from '../../LayoutManager/LayoutStrategies/FitContentLayout';\nimport { classRegistry } from '../../ClassRegistry';\nimport { EntityKeys, WidgetFrameInterface } from './type/widget.entity.frame';\nimport { WidgetType } from './type/widget.type';\n\nclass XFrame extends FabricObject implements WidgetFrameInterface {\n  title: Textbox;\n  titleText: string;\n  body: Rect;\n  objects: Group;\n  layoutManager: LayoutManager;\n  static type: WidgetType = 'XFrame';\n  static objType: WidgetType = 'XFrame';\n\n  constructor(options: Partial<WidgetFrameInterface> = {}) {\n\n    super(options);\n    Object.assign(this, options);\n    this.titleText = 'Frame Title',\n      this.left = 100,\n      this.top = 100,\n      this.width = 400,\n      this.height = 300\n    this.title = new Textbox(this.titleText, {\n      left: this.left,\n      top: this.top,\n      fontSize: 18,\n      fontWeight: 'bold',\n      selectable: true,\n      editable: true,\n    });\n    this.titleText = this.titleText;\n    this.objType = 'XFrame';\n    this.body = new Rect({\n      left: this.left,\n      top: this.top + 30,\n      width: this.width,\n      height: this.height,\n      fill: 'rgba(0,0,0,0.1)',\n      selectable: false,\n      evented: false,\n    });\n\n    this.objects = new Group([this.body, this.title], {\n      left: this.left,\n      top: this.top,\n      selectable: true,\n    });\n\n    // Create a layout manager for the frame\n    this.layoutManager = new LayoutManager(new FitContentLayout());\n\n    this.canvas!.add(this.objects);\n\n    this.title.on('mousedblclick', () => {\n      this.title.enterEditing();\n    });\n\n    this.objects.on('scaling', (event) => {\n      const scaleX = this.objects.scaleX;\n      const scaleY = this.objects.scaleY;\n\n      this.objects.getObjects().forEach((obj) => {\n        if (obj !== this.title) {\n          obj.scaleX = scaleX;\n          obj.scaleY = scaleY;\n          obj.setCoords();\n        }\n      });\n\n      this.objects.scaleX = 1;\n      this.objects.scaleY = 1;\n      this.objects.setCoords();\n\n      this.canvas!.renderAll();\n    });\n\n    this.objects.on('mousedown', (event) => {\n      if (event.target === this.title) {\n        this.objects.set('selectable', true);\n        this.canvas!.setActiveObject(this.objects);\n      }\n    });\n\n    this.objects.on('moving', (event) => {\n      //@ts-ignore\n      const deltaX = event.movementX;\n      //@ts-ignore\n      const deltaY = event.movementY;\n\n      this.objects.getObjects().forEach((obj) => {\n        if (obj !== this.body && obj !== this.title) {\n          obj.set('left', obj.left + deltaX);\n          obj.set('top', obj.top + deltaY);\n        }\n      });\n\n      this.canvas!.renderAll();\n    });\n\n    this.canvas!.on('object:moving', (e) => {\n      if (e.target !== this.objects && !this.objects.contains(e.target)) {\n        this.checkObjectInFrame(e.target);\n      }\n    });\n\n    this.canvas!.on('mouse:up', (e) => {\n      if (e.target && this.objects.contains(e.target)) {\n        this.addObject(e.target);\n      } else if (e.target && !this.objects.contains(e.target)) {\n        this.removeObject(e.target);\n      }\n    });\n\n    this.canvas!.renderAll();\n  }\n  updatedBy: string;\n  updatedByName: string;\n\n  createdByName: string;\n  boardId: string;\n  objType: WidgetType;\n  userId: string;\n  zIndex: number;\n  version: string;\n  updatedAt: number;\n\n  createdAt: number;\n  createdBy: string;\n\n  checkObjectInFrame(obj: any) {\n    const objBound = obj.getBoundingRect();\n    const frameBound = this.body.getBoundingRect();\n\n    if (\n      objBound.left >= frameBound.left &&\n      objBound.top >= frameBound.top &&\n      objBound.left + objBound.width <= frameBound.left + frameBound.width &&\n      objBound.top + objBound.height <= frameBound.top + frameBound.height\n    ) {\n      this.addObject(obj);\n    } else {\n      this.removeObject(obj);\n    }\n  }\n\n  getObject() {\n    const entityKeys: string[] = EntityKeys;\n    const result: Record<string, any> = {};\n\n    entityKeys.forEach((key) => {\n      if (key in this) {\n        result[key] = (this as any)[key];\n      }\n    });\n\n    return result;\n  }\n  addObject(obj: any) {\n    if (!this.objects.contains(obj)) {\n      this.objects.add(obj);\n      obj.set({\n        left: obj.left - this.objects.left,\n        top: obj.top - this.objects.top,\n        selectable: true,\n      });\n      this.canvas!.remove(obj);\n      this.canvas!.renderAll();\n    }\n  }\n\n  removeObject(obj: any) {\n    if (this.objects.contains(obj)) {\n      this.objects.remove(obj);\n      obj.set({\n        left: obj.left + this.objects.left,\n        top: obj.top + this.objects.top,\n        selectable: true,\n      });\n      this.canvas!.add(obj);\n      this.canvas!.renderAll();\n    }\n  }\n}\n\nclassRegistry.setClass(XFrame);\n\nexport { XFrame };\n"],"names":["XFrame","FabricObject","constructor","options","arguments","length","undefined","super","_defineProperty","this","Object","assign","titleText","left","top","width","height","title","Textbox","fontSize","fontWeight","selectable","editable","objType","body","Rect","fill","evented","objects","Group","layoutManager","LayoutManager","FitContentLayout","canvas","add","on","enterEditing","event","scaleX","scaleY","getObjects","forEach","obj","setCoords","renderAll","target","set","setActiveObject","deltaX","movementX","deltaY","movementY","e","contains","checkObjectInFrame","addObject","removeObject","objBound","getBoundingRect","frameBound","getObject","result","EntityKeys","key","remove","classRegistry","setClass"],"mappings":"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"}