{"version":3,"file":"Group.mjs","sources":["../../../src/shapes/Group.ts"],"sourcesContent":["import type { CollectionEvents, ObjectEvents } from '../EventTypeDefs';\nimport { createCollectionMixin } from '../Collection';\nimport type {\n  TClassProperties,\n  TSVGReviver,\n  TOptions,\n  Abortable,\n} from '../typedefs';\nimport {\n  invertTransform,\n  multiplyTransformMatrices,\n} from '../util/misc/matrix';\nimport {\n  enlivenObjectEnlivables,\n  enlivenObjects,\n} from '../util/misc/objectEnlive';\nimport { applyTransformToObject } from '../util/misc/objectTransforms';\nimport { FabricObject } from './Object/FabricObject';\nimport { Rect } from './Rect';\nimport { classRegistry } from '../ClassRegistry';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport { log } from '../util/internals/console';\nimport type {\n  ImperativeLayoutOptions,\n  LayoutBeforeEvent,\n  LayoutAfterEvent,\n} from '../LayoutManager/types';\nimport { LayoutManager } from '../LayoutManager/LayoutManager';\nimport {\n  LAYOUT_TYPE_ADDED,\n  LAYOUT_TYPE_IMPERATIVE,\n  LAYOUT_TYPE_INITIALIZATION,\n  LAYOUT_TYPE_REMOVED,\n} from '../LayoutManager/constants';\nimport type { SerializedLayoutManager } from '../LayoutManager/LayoutManager';\nimport type { FitContentLayout } from '../LayoutManager';\n\n/**\n * This class handles the specific case of creating a group using {@link Group#fromObject} and is not meant to be used in any other case.\n * We could have used a boolean in the constructor, as we did previously, but we think the boolean\n * would stay in the group's constructor interface and create confusion, therefore it was removed.\n * This layout manager doesn't do anything and therefore keeps the exact layout the group had when {@link Group#toObject} was called.\n */\nclass NoopLayoutManager extends LayoutManager {\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  performLayout() {}\n}\n\nexport interface GroupEvents extends ObjectEvents, CollectionEvents {\n  'layout:before': LayoutBeforeEvent;\n  'layout:after': LayoutAfterEvent;\n}\n\nexport interface GroupOwnProps {\n  subTargetCheck: boolean;\n  interactive: boolean;\n}\n\nexport interface SerializedGroupProps\n  extends SerializedObjectProps,\n    GroupOwnProps {\n  objects: SerializedObjectProps[];\n  layoutManager: SerializedLayoutManager;\n}\n\nexport interface GroupProps extends FabricObjectProps, GroupOwnProps {\n  layoutManager: LayoutManager;\n}\n\nexport const groupDefaultValues: Partial<TClassProperties<Group>> = {\n  strokeWidth: 0,\n  subTargetCheck: false,\n  interactive: false,\n};\n\n/**\n * @fires object:added\n * @fires object:removed\n * @fires layout:before\n * @fires layout:after\n */\nexport class Group\n  extends createCollectionMixin(\n    FabricObject<GroupProps, SerializedGroupProps, GroupEvents>\n  )\n  implements GroupProps\n{\n  /**\n   * Used to optimize performance\n   * set to `false` if you don't need contained objects to be targets of events\n   * @default\n   * @type boolean\n   */\n  declare subTargetCheck: boolean;\n\n  /**\n   * Used to allow targeting of object inside groups.\n   * set to true if you want to select an object inside a group.\\\n   * **REQUIRES** `subTargetCheck` set to true\n   * This will be not removed but slowly replaced with a method setInteractive\n   * that will take care of enabling subTargetCheck and necessary object events.\n   * There is too much attached to group interactivity to just be evaluated by a\n   * boolean in the code\n   * @default\n   * @deprecated\n   * @type boolean\n   */\n  declare interactive: boolean;\n\n  declare layoutManager: LayoutManager;\n\n  /**\n   * Used internally to optimize performance\n   * Once an object is selected, instance is rendered without the selected object.\n   * This way instance is cached only once for the entire interaction with the selected object.\n   * @private\n   */\n  protected _activeObjects: FabricObject[] = [];\n\n  static type = 'Group';\n\n  static ownDefaults: Record<string, any> = groupDefaultValues;\n  private __objectSelectionTracker: (ev: ObjectEvents['selected']) => void;\n  private __objectSelectionDisposer: (ev: ObjectEvents['deselected']) => void;\n\n  static getDefaults(): Record<string, any> {\n    return {\n      ...super.getDefaults(),\n      ...Group.ownDefaults,\n    };\n  }\n\n  /**\n   * Constructor\n   *\n   * @param {FabricObject[]} [objects] instance objects\n   * @param {Object} [options] Options object\n   */\n  constructor(objects: FabricObject[] = [], options: Partial<GroupProps> = {}) {\n    super();\n    Object.assign(this, Group.ownDefaults);\n    this.setOptions(options);\n    this.groupInit(objects, options);\n  }\n\n  /**\n   * Shared code between group and active selection\n   * Meant to be used by the constructor.\n   */\n  protected groupInit(\n    objects: FabricObject[],\n    options: {\n      layoutManager?: LayoutManager;\n      top?: number;\n      left?: number;\n    }\n  ) {\n    this._objects = [...objects]; // Avoid unwanted mutations of Collection to affect the caller\n\n    this.__objectSelectionTracker = this.__objectSelectionMonitor.bind(\n      this,\n      true\n    );\n    this.__objectSelectionDisposer = this.__objectSelectionMonitor.bind(\n      this,\n      false\n    );\n\n    this.forEachObject((object) => {\n      this.enterGroup(object, false);\n    });\n\n    // perform initial layout\n    this.layoutManager = options.layoutManager ?? new LayoutManager();\n    this.layoutManager.performLayout({\n      type: LAYOUT_TYPE_INITIALIZATION,\n      target: this,\n      targets: [...objects],\n      // @TODO remove this concept from the layout manager.\n      // Layout manager will calculate the correct position,\n      // group options can override it later.\n      x: options.left,\n      y: options.top,\n    });\n  }\n\n  /**\n   * Checks if object can enter group and logs relevant warnings\n   * @private\n   * @param {FabricObject} object\n   * @returns\n   */\n  canEnterGroup(object: FabricObject) {\n    if (object === this || this.isDescendantOf(object)) {\n      //  prevent circular object tree\n      log(\n        'error',\n        'Group: circular object trees are not supported, this call has no effect'\n      );\n      return false;\n    } else if (this._objects.indexOf(object) !== -1) {\n      // is already in the objects array\n      log(\n        'error',\n        'Group: duplicate objects are not supported inside group, this call has no effect'\n      );\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Override this method to enhance performance (for groups with a lot of objects).\n   * If Overriding, be sure not pass illegal objects to group - it will break your app.\n   * @private\n   */\n  protected _filterObjectsBeforeEnteringGroup(objects: FabricObject[]) {\n    return objects.filter((object, index, array) => {\n      // can enter AND is the first occurrence of the object in the passed args (to prevent adding duplicates)\n      return this.canEnterGroup(object) && array.indexOf(object) === index;\n    });\n  }\n\n  /**\n   * Add objects\n   * @param {...FabricObject[]} objects\n   */\n  add(...objects: FabricObject[]) {\n    const allowedObjects = this._filterObjectsBeforeEnteringGroup(objects);\n    const size = super.add(...allowedObjects);\n    this._onAfterObjectsChange(LAYOUT_TYPE_ADDED, allowedObjects);\n    return size;\n  }\n\n  /**\n   * Inserts an object into collection at specified index\n   * @param {FabricObject[]} objects Object to insert\n   * @param {Number} index Index to insert object at\n   */\n  insertAt(index: number, ...objects: FabricObject[]) {\n    const allowedObjects = this._filterObjectsBeforeEnteringGroup(objects);\n    const size = super.insertAt(index, ...allowedObjects);\n    this._onAfterObjectsChange(LAYOUT_TYPE_ADDED, allowedObjects);\n    return size;\n  }\n\n  /**\n   * Remove objects\n   * @param {...FabricObject[]} objects\n   * @returns {FabricObject[]} removed objects\n   */\n  remove(...objects: FabricObject[]) {\n    const removed = super.remove(...objects);\n    this._onAfterObjectsChange(LAYOUT_TYPE_REMOVED, removed);\n    return removed;\n  }\n\n  _onObjectAdded(object: FabricObject) {\n    this.enterGroup(object, true);\n    this.fire('object:added', { target: object });\n    object.fire('added', { target: this });\n  }\n\n  /**\n   * @private\n   * @param {FabricObject} object\n   * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n   */\n  _onObjectRemoved(object: FabricObject, removeParentTransform?: boolean) {\n    this.exitGroup(object, removeParentTransform);\n    this.fire('object:removed', { target: object });\n    object.fire('removed', { target: this });\n  }\n\n  /**\n   * @private\n   * @param {'added'|'removed'} type\n   * @param {FabricObject[]} targets\n   */\n  _onAfterObjectsChange(type: 'added' | 'removed', targets: FabricObject[]) {\n    this.layoutManager.performLayout({\n      type,\n      targets,\n      target: this,\n    });\n  }\n\n  _onStackOrderChanged() {\n    this._set('dirty', true);\n  }\n\n  /**\n   * @private\n   * @param {string} key\n   * @param {*} value\n   */\n  _set(key: string, value: any) {\n    const prev = this[key as keyof this];\n    super._set(key, value);\n    if (key === 'canvas' && prev !== value) {\n      (this._objects || []).forEach((object) => {\n        object._set(key, value);\n      });\n    }\n    return this;\n  }\n\n  /**\n   * @private\n   */\n  _shouldSetNestedCoords() {\n    return this.subTargetCheck;\n  }\n\n  /**\n   * Remove all objects\n   * @returns {FabricObject[]} removed objects\n   */\n  removeAll() {\n    this._activeObjects = [];\n    return this.remove(...this._objects);\n  }\n\n  /**\n   * keeps track of the selected objects\n   * @private\n   */\n  __objectSelectionMonitor<T extends boolean>(\n    selected: T,\n    { target: object }: ObjectEvents[T extends true ? 'selected' : 'deselected']\n  ) {\n    const activeObjects = this._activeObjects;\n    if (selected) {\n      activeObjects.push(object);\n      this._set('dirty', true);\n    } else if (activeObjects.length > 0) {\n      const index = activeObjects.indexOf(object);\n      if (index > -1) {\n        activeObjects.splice(index, 1);\n        this._set('dirty', true);\n      }\n    }\n  }\n\n  /**\n   * @private\n   * @param {boolean} watch\n   * @param {FabricObject} object\n   */\n  _watchObject(watch: boolean, object: FabricObject) {\n    //  make sure we listen only once\n    watch && this._watchObject(false, object);\n    if (watch) {\n      object.on('selected', this.__objectSelectionTracker);\n      object.on('deselected', this.__objectSelectionDisposer);\n    } else {\n      object.off('selected', this.__objectSelectionTracker);\n      object.off('deselected', this.__objectSelectionDisposer);\n    }\n  }\n\n  /**\n   * @private\n   * @param {FabricObject} object\n   * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n   */\n  enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n    object.group && object.group.remove(object);\n    object._set('parent', this);\n    this._enterGroup(object, removeParentTransform);\n  }\n\n  /**\n   * @private\n   * @param {FabricObject} object\n   * @param {boolean} [removeParentTransform] true if object is in canvas coordinate plane\n   */\n  _enterGroup(object: FabricObject, removeParentTransform?: boolean) {\n    if (removeParentTransform) {\n      // can this be converted to utils (sendObjectToPlane)?\n      applyTransformToObject(\n        object,\n        multiplyTransformMatrices(\n          invertTransform(this.calcTransformMatrix()),\n          object.calcTransformMatrix()\n        )\n      );\n    }\n    this._shouldSetNestedCoords() && object.setCoords();\n    object._set('group', this);\n    object._set('canvas', this.canvas);\n    this._watchObject(true, object);\n    const activeObject =\n      this.canvas &&\n      this.canvas.getActiveObject &&\n      this.canvas.getActiveObject();\n    // if we are adding the activeObject in a group\n    if (\n      activeObject &&\n      (activeObject === object || object.isDescendantOf(activeObject))\n    ) {\n      this._activeObjects.push(object);\n    }\n  }\n\n  /**\n   * @private\n   * @param {FabricObject} object\n   * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n   */\n  exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n    this._exitGroup(object, removeParentTransform);\n    object._set('parent', undefined);\n    object._set('canvas', undefined);\n  }\n\n  /**\n   * Executes the inner fabric logic of exiting a group.\n   * - Stop watching the object\n   * - Remove the object from the optimization map this._activeObjects\n   * - unset the group property of the object\n   * @protected\n   * @param {FabricObject} object\n   * @param {boolean} [removeParentTransform] true if object should exit group without applying group's transform to it\n   */\n  _exitGroup(object: FabricObject, removeParentTransform?: boolean) {\n    object._set('group', undefined);\n    if (!removeParentTransform) {\n      applyTransformToObject(\n        object,\n        multiplyTransformMatrices(\n          this.calcTransformMatrix(),\n          object.calcTransformMatrix()\n        )\n      );\n      object.setCoords();\n    }\n    this._watchObject(false, object);\n    const index =\n      this._activeObjects.length > 0 ? this._activeObjects.indexOf(object) : -1;\n    if (index > -1) {\n      this._activeObjects.splice(index, 1);\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 is already cached.\n   * @return {Boolean}\n   */\n  shouldCache() {\n    const ownCache = FabricObject.prototype.shouldCache.call(this);\n    if (ownCache) {\n      for (let i = 0; i < this._objects.length; i++) {\n        if (this._objects[i].willDrawShadow()) {\n          this.ownCaching = false;\n          return false;\n        }\n      }\n    }\n    return ownCache;\n  }\n\n  /**\n   * Check if this object or a child object will cast a shadow\n   * @return {Boolean}\n   */\n  willDrawShadow() {\n    if (super.willDrawShadow()) {\n      return true;\n    }\n    for (let i = 0; i < this._objects.length; i++) {\n      if (this._objects[i].willDrawShadow()) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Check if instance or its group are caching, recursively up\n   * @return {Boolean}\n   */\n  isOnACache(): boolean {\n    return this.ownCaching || (!!this.parent && this.parent.isOnACache());\n  }\n\n  /**\n   * Execute the drawing operation for an object on a specified context\n   * @param {CanvasRenderingContext2D} ctx Context to render on\n   */\n  drawObject(ctx: CanvasRenderingContext2D) {\n    this._renderBackground(ctx);\n    for (let i = 0; i < this._objects.length; i++) {\n      // TODO: handle rendering edge case somehow\n      if (\n        this.canvas?.preserveObjectStacking &&\n        this._objects[i].group !== this\n      ) {\n        ctx.save();\n        ctx.transform(...invertTransform(this.calcTransformMatrix()));\n        this._objects[i].render(ctx);\n        ctx.restore();\n      } else if (this._objects[i].group === this) {\n        this._objects[i].render(ctx);\n      }\n    }\n    this._drawClipPath(ctx, this.clipPath);\n  }\n\n  /**\n   * @override\n   * @return {Boolean}\n   */\n  setCoords() {\n    super.setCoords();\n    this._shouldSetNestedCoords() &&\n      this.forEachObject((object) => object.setCoords());\n  }\n\n  triggerLayout(options: ImperativeLayoutOptions = {}) {\n    this.layoutManager.performLayout({\n      target: this,\n      type: LAYOUT_TYPE_IMPERATIVE,\n      ...options,\n    });\n  }\n\n  /**\n   * Renders instance on a given context\n   * @param {CanvasRenderingContext2D} ctx context to render instance on\n   */\n  render(ctx: CanvasRenderingContext2D) {\n    this._transformDone = true;\n    super.render(ctx);\n    this._transformDone = false;\n  }\n\n  /**\n   *\n   * @private\n   * @param {'toObject'|'toDatalessObject'} [method]\n   * @param {string[]} [propertiesToInclude] Any properties that you might want to additionally include in the output\n   * @returns {FabricObject[]} serialized objects\n   */\n  __serializeObjects(\n    method: 'toObject' | 'toDatalessObject',\n    propertiesToInclude?: string[]\n  ) {\n    const _includeDefaultValues = this.includeDefaultValues;\n    return this._objects\n      .filter(function (obj) {\n        return !obj.excludeFromExport;\n      })\n      .map(function (obj) {\n        const originalDefaults = obj.includeDefaultValues;\n        obj.includeDefaultValues = _includeDefaultValues;\n        const data = obj[method || 'toObject'](propertiesToInclude);\n        obj.includeDefaultValues = originalDefaults;\n        // delete data.version;\n        return data;\n      });\n  }\n\n  /**\n   * Returns object representation of an instance\n   * @param {string[]} [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<\n      GroupProps & TClassProperties<this>,\n      keyof SerializedGroupProps\n    >,\n    K extends keyof T = never\n  >(propertiesToInclude: K[] = []): Pick<T, K> & SerializedGroupProps {\n    const layoutManager = this.layoutManager.toObject();\n\n    return {\n      ...super.toObject([\n        'subTargetCheck',\n        'interactive',\n        ...propertiesToInclude,\n      ]),\n      ...(layoutManager.strategy !== 'fit-content' || this.includeDefaultValues\n        ? { layoutManager }\n        : {}),\n      objects: this.__serializeObjects(\n        'toObject',\n        propertiesToInclude as string[]\n      ),\n    };\n  }\n\n  toString() {\n    return `#<Group: (${this.complexity()})>`;\n  }\n\n  dispose() {\n    this.layoutManager.unsubscribeTargets({\n      targets: this.getObjects(),\n      target: this,\n    });\n    this._activeObjects = [];\n    this.forEachObject((object) => {\n      this._watchObject(false, object);\n      object.dispose();\n    });\n    super.dispose();\n  }\n\n  /**\n   * @private\n   */\n  _createSVGBgRect(reviver?: TSVGReviver) {\n    if (!this.backgroundColor) {\n      return '';\n    }\n    const fillStroke = Rect.prototype._toSVG.call(this);\n    const commons = fillStroke.indexOf('COMMON_PARTS');\n    fillStroke[commons] = 'for=\"group\" ';\n    const markup = fillStroke.join('');\n    return reviver ? reviver(markup) : markup;\n  }\n\n  /**\n   * Returns svg representation of an instance\n   * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n   * @return {String} svg representation of an instance\n   */\n  _toSVG(reviver?: TSVGReviver) {\n    const svgString = ['<g ', 'COMMON_PARTS', ' >\\n'];\n    const bg = this._createSVGBgRect(reviver);\n    bg && svgString.push('\\t\\t', bg);\n    for (let i = 0; i < this._objects.length; i++) {\n      svgString.push('\\t\\t', this._objects[i].toSVG(reviver));\n    }\n    svgString.push('</g>\\n');\n    return svgString;\n  }\n\n  /**\n   * Returns styles-string for svg-export, specific version for group\n   * @return {String}\n   */\n  getSvgStyles(): string {\n    const opacity =\n        typeof this.opacity !== 'undefined' && this.opacity !== 1\n          ? `opacity: ${this.opacity};`\n          : '',\n      visibility = this.visible ? '' : ' visibility: hidden;';\n    return [opacity, this.getSvgFilter(), visibility].join('');\n  }\n\n  /**\n   * Returns svg clipPath representation of an instance\n   * @param {Function} [reviver] Method for further parsing of svg representation.\n   * @return {String} svg representation of an instance\n   */\n  toClipPathSVG(reviver?: TSVGReviver): string {\n    const svgString = [];\n    const bg = this._createSVGBgRect(reviver);\n    bg && svgString.push('\\t', bg);\n    for (let i = 0; i < this._objects.length; i++) {\n      svgString.push('\\t', this._objects[i].toClipPathSVG(reviver));\n    }\n    return this._createBaseClipPathSVGMarkup(svgString, {\n      reviver,\n    });\n  }\n\n  /**\n   * @todo support loading from svg\n   * @private\n   * @static\n   * @memberOf Group\n   * @param {Object} object Object to create a group from\n   * @returns {Promise<Group>}\n   */\n  static fromObject<T extends TOptions<SerializedGroupProps>>(\n    { type, objects = [], layoutManager, ...options }: T,\n    abortable?: Abortable\n  ) {\n    return Promise.all([\n      enlivenObjects<FabricObject>(objects, abortable),\n      enlivenObjectEnlivables(options, abortable),\n    ]).then(([objects, hydratedOptions]) => {\n      const group = new this(objects, {\n        ...options,\n        ...hydratedOptions,\n        layoutManager: new NoopLayoutManager(),\n      });\n      if (layoutManager) {\n        const layoutClass = classRegistry.getClass<typeof LayoutManager>(\n          layoutManager.type\n        );\n        const strategyClass = classRegistry.getClass<typeof FitContentLayout>(\n          layoutManager.strategy\n        );\n        group.layoutManager = new layoutClass(new strategyClass());\n      } else {\n        group.layoutManager = new LayoutManager();\n      }\n      group.layoutManager.subscribeTargets({\n        type: LAYOUT_TYPE_INITIALIZATION,\n        target: group,\n        targets: group.getObjects(),\n      });\n      group.setCoords();\n      return group;\n    });\n  }\n}\n\nclassRegistry.setClass(Group);\n"],"names":["NoopLayoutManager","LayoutManager","performLayout","groupDefaultValues","strokeWidth","subTargetCheck","interactive","Group","createCollectionMixin","FabricObject","getDefaults","_objectSpread","ownDefaults","constructor","objects","arguments","length","undefined","options","_defineProperty","Object","assign","setOptions","groupInit","_options$layoutManage","_objects","__objectSelectionTracker","__objectSelectionMonitor","bind","__objectSelectionDisposer","forEachObject","object","enterGroup","layoutManager","type","LAYOUT_TYPE_INITIALIZATION","target","targets","x","left","y","top","canEnterGroup","isDescendantOf","log","indexOf","_filterObjectsBeforeEnteringGroup","filter","index","array","add","_len","Array","_key","allowedObjects","size","_onAfterObjectsChange","LAYOUT_TYPE_ADDED","insertAt","_len2","_key2","remove","removed","LAYOUT_TYPE_REMOVED","_onObjectAdded","fire","_onObjectRemoved","removeParentTransform","exitGroup","_onStackOrderChanged","_set","key","value","prev","forEach","_shouldSetNestedCoords","removeAll","_activeObjects","selected","_ref","activeObjects","push","splice","_watchObject","watch","on","off","group","_enterGroup","applyTransformToObject","multiplyTransformMatrices","invertTransform","calcTransformMatrix","setCoords","canvas","activeObject","getActiveObject","_exitGroup","shouldCache","ownCache","prototype","call","i","willDrawShadow","ownCaching","isOnACache","parent","drawObject","ctx","_renderBackground","_this$canvas","preserveObjectStacking","save","transform","render","restore","_drawClipPath","clipPath","triggerLayout","LAYOUT_TYPE_IMPERATIVE","_transformDone","__serializeObjects","method","propertiesToInclude","_includeDefaultValues","includeDefaultValues","obj","excludeFromExport","map","originalDefaults","data","toObject","strategy","toString","concat","complexity","dispose","unsubscribeTargets","getObjects","_createSVGBgRect","reviver","backgroundColor","fillStroke","Rect","_toSVG","commons","markup","join","svgString","bg","toSVG","getSvgStyles","opacity","visibility","visible","getSvgFilter","toClipPathSVG","_createBaseClipPathSVGMarkup","fromObject","_ref2","abortable","_objectWithoutProperties","_excluded","Promise","all","enlivenObjects","enlivenObjectEnlivables","then","_ref3","hydratedOptions","layoutClass","classRegistry","getClass","strategyClass","subscribeTargets","setClass"],"mappings":"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"}