{"version":3,"file":"MaxObjectLayout.mjs","sources":["../../../../src/LayoutManager/LayoutStrategies/MaxObjectLayout.ts"],"sourcesContent":["import { Point } from '../../Point';\nimport type { FabricObject } from '../../shapes/Object/FabricObject';\nimport type {\n  LayoutStrategyResult,\n  StrictLayoutContext,\n} from '../types';\nimport { LayoutStrategy } from './LayoutStrategy';\nimport { classRegistry } from '../../ClassRegistry';\nimport {\n  LAYOUT_TYPE_INITIALIZATION,\n  LAYOUT_TYPE_IMPERATIVE,\n} from '../constants';\nimport { getObjectBounds } from './utils';\nimport { makeBoundingBoxFromPoints } from '../../util/misc/boundingBoxFromPoints';\n\n\n/**\n * Layout will keep target's initial size.\n */\nexport class MaxObjectLayout extends LayoutStrategy {\n  static readonly type = 'max-object';\n\n  /**\n   * @override layout on all triggers\n   * Override at will\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  shouldPerformLayout(context: StrictLayoutContext) {\n    return true;\n  }\n\n  /**\n   * Override this method to customize layout.\n   */\n  calcBoundingBox(\n    objects: FabricObject[],\n    context: StrictLayoutContext,\n  ): LayoutStrategyResult | undefined {\n    const { type, target } = context;\n    if (type === LAYOUT_TYPE_IMPERATIVE && context.overrides) {\n      return context.overrides;\n    }\n    if (objects.length === 0) {\n      return;\n    }\n\n    let maxHeightObject = objects[0];\n    for (const object of objects){\n      if(object.height > maxHeightObject.height){\n        maxHeightObject = object;\n      }\n    }\n\n    const { left, top, width, height } = makeBoundingBoxFromPoints(\n      [maxHeightObject]\n        .map((object) => getObjectBounds(target, object))\n        .reduce<Point[]>((coords, curr) => coords.concat(curr), []),\n    );\n    const bboxSize = new Point(width, height);\n    const bboxLeftTop = new Point(left, top);\n    const bboxCenter = bboxLeftTop.add(bboxSize.scalarDivide(2));\n\n    if (type === LAYOUT_TYPE_INITIALIZATION) {\n      const actualSize = this.getInitialSize(context, {\n        size: bboxSize,\n        center: bboxCenter,\n      });\n      return {\n        // in `initialization` we do not account for target's transformation matrix\n        center: bboxCenter,\n        // TODO: investigate if this is still necessary\n        relativeCorrection: new Point(0, 0),\n        size: actualSize,\n      };\n    } else {\n      //  we send `relativeCenter` up to group's containing plane\n      const center = bboxCenter.transform(target.calcOwnMatrix());\n      return {\n        center,\n        size: bboxSize,\n      };\n    }\n  }\n}\n\nclassRegistry.setClass(MaxObjectLayout);\n"],"names":["MaxObjectLayout","LayoutStrategy","shouldPerformLayout","context","calcBoundingBox","objects","type","target","LAYOUT_TYPE_IMPERATIVE","overrides","length","maxHeightObject","object","height","left","top","width","makeBoundingBoxFromPoints","map","getObjectBounds","reduce","coords","curr","concat","bboxSize","Point","bboxLeftTop","bboxCenter","add","scalarDivide","LAYOUT_TYPE_INITIALIZATION","actualSize","getInitialSize","size","center","relativeCorrection","transform","calcOwnMatrix","_defineProperty","classRegistry","setClass"],"mappings":";;;;;;;;AAgBA;AACA;AACA;AACO,MAAMA,eAAe,SAASC,cAAc,CAAC;AAGlD;AACF;AACA;AACA;AACE;EACAC,mBAAmBA,CAACC,OAA4B,EAAE;AAChD,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;;AAEA;AACF;AACA;AACEC,EAAAA,eAAeA,CACbC,OAAuB,EACvBF,OAA4B,EACM;IAClC,MAAM;MAAEG,IAAI;AAAEC,MAAAA,MAAAA;AAAO,KAAC,GAAGJ,OAAO,CAAA;AAChC,IAAA,IAAIG,IAAI,KAAKE,sBAAsB,IAAIL,OAAO,CAACM,SAAS,EAAE;MACxD,OAAON,OAAO,CAACM,SAAS,CAAA;AAC1B,KAAA;AACA,IAAA,IAAIJ,OAAO,CAACK,MAAM,KAAK,CAAC,EAAE;AACxB,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAIC,eAAe,GAAGN,OAAO,CAAC,CAAC,CAAC,CAAA;AAChC,IAAA,KAAK,MAAMO,MAAM,IAAIP,OAAO,EAAC;AAC3B,MAAA,IAAGO,MAAM,CAACC,MAAM,GAAGF,eAAe,CAACE,MAAM,EAAC;AACxCF,QAAAA,eAAe,GAAGC,MAAM,CAAA;AAC1B,OAAA;AACF,KAAA;IAEA,MAAM;MAAEE,IAAI;MAAEC,GAAG;MAAEC,KAAK;AAAEH,MAAAA,MAAAA;AAAO,KAAC,GAAGI,yBAAyB,CAC5D,CAACN,eAAe,CAAC,CACdO,GAAG,CAAEN,MAAM,IAAKO,eAAe,CAACZ,MAAM,EAAEK,MAAM,CAAC,CAAC,CAChDQ,MAAM,CAAU,CAACC,MAAM,EAAEC,IAAI,KAAKD,MAAM,CAACE,MAAM,CAACD,IAAI,CAAC,EAAE,EAAE,CAC9D,CAAC,CAAA;IACD,MAAME,QAAQ,GAAG,IAAIC,KAAK,CAACT,KAAK,EAAEH,MAAM,CAAC,CAAA;IACzC,MAAMa,WAAW,GAAG,IAAID,KAAK,CAACX,IAAI,EAAEC,GAAG,CAAC,CAAA;AACxC,IAAA,MAAMY,UAAU,GAAGD,WAAW,CAACE,GAAG,CAACJ,QAAQ,CAACK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAE5D,IAAIvB,IAAI,KAAKwB,0BAA0B,EAAE;AACvC,MAAA,MAAMC,UAAU,GAAG,IAAI,CAACC,cAAc,CAAC7B,OAAO,EAAE;AAC9C8B,QAAAA,IAAI,EAAET,QAAQ;AACdU,QAAAA,MAAM,EAAEP,UAAAA;AACV,OAAC,CAAC,CAAA;MACF,OAAO;AACL;AACAO,QAAAA,MAAM,EAAEP,UAAU;AAClB;AACAQ,QAAAA,kBAAkB,EAAE,IAAIV,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACnCQ,QAAAA,IAAI,EAAEF,UAAAA;OACP,CAAA;AACH,KAAC,MAAM;AACL;MACA,MAAMG,MAAM,GAAGP,UAAU,CAACS,SAAS,CAAC7B,MAAM,CAAC8B,aAAa,EAAE,CAAC,CAAA;MAC3D,OAAO;QACLH,MAAM;AACND,QAAAA,IAAI,EAAET,QAAAA;OACP,CAAA;AACH,KAAA;AACF,GAAA;AACF,CAAA;AAACc,eAAA,CAhEYtC,eAAe,EAAA,MAAA,EACH,YAAY,CAAA,CAAA;AAiErCuC,aAAa,CAACC,QAAQ,CAACxC,eAAe,CAAC;;;;"}