{"version":3,"file":"Collection.mjs","sources":["../../src/Collection.ts"],"sourcesContent":["import type { Constructor, TBBox } from './typedefs';\nimport { removeFromArray } from './util/internals';\nimport { Point } from './Point';\nimport type { ActiveSelection } from './shapes/ActiveSelection';\nimport type { Group } from './shapes/Group';\nimport type { InteractiveFabricObject } from './shapes/Object/InteractiveObject';\nimport type { FabricObject } from './shapes/Object/FabricObject';\n\nexport const isCollection = (\n  fabricObject?: FabricObject\n): fabricObject is Group | ActiveSelection => {\n  return !!fabricObject && Array.isArray((fabricObject as Group)._objects);\n};\n\nexport function createCollectionMixin<TBase extends Constructor>(Base: TBase) {\n  class Collection extends Base {\n    /**\n     * @type {FabricObject[]}\n     * @TODO needs to end up in the constructor too\n     */\n    _objects: FabricObject[] = [];\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _onObjectAdded(object: FabricObject) {\n      // subclasses should override this method\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _onObjectRemoved(object: FabricObject) {\n      // subclasses should override this method\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _onStackOrderChanged(object: FabricObject) {\n      // subclasses should override this method\n    }\n\n    /**\n     * Adds objects to collection\n     * Objects should be instances of (or inherit from) FabricObject\n     * @param {...FabricObject[]} objects to add\n     * @returns {number} new array length\n     */\n    add(...objects: FabricObject[]): number {\n      const size = this._objects.push(...objects);\n      objects.forEach((object) => this._onObjectAdded(object));\n      return size;\n    }\n\n    /**\n     * Inserts an object into collection at specified index\n     * @param {number} index Index to insert object at\n     * @param {...FabricObject[]} objects Object(s) to insert\n     * @returns {number} new array length\n     */\n    insertAt(index: number, ...objects: FabricObject[]) {\n      this._objects.splice(index, 0, ...objects);\n      objects.forEach((object) => this._onObjectAdded(object));\n      return this._objects.length;\n    }\n\n    /**\n     * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n     * @private\n     * @param {...FabricObject[]} objects objects to remove\n     * @returns {FabricObject[]} removed objects\n     */\n    remove(...objects: FabricObject[]) {\n      const array = this._objects,\n        removed: FabricObject[] = [];\n      objects.forEach((object) => {\n        const index = array.indexOf(object);\n        // only call onObjectRemoved if an object was actually removed\n        if (index !== -1) {\n          array.splice(index, 1);\n          removed.push(object);\n          this._onObjectRemoved(object);\n        }\n      });\n      return removed;\n    }\n\n    /**\n     * Executes given function for each object in this group\n     * A simple shortcut for getObjects().forEach, before es6 was more complicated,\n     * now is just a shortcut.\n     * @param {Function} callback\n     *                   Callback invoked with current object as first argument,\n     *                   index - as second and an array of all objects - as third.\n     */\n    forEachObject(\n      callback: (\n        object: FabricObject,\n        index: number,\n        array: FabricObject[]\n      ) => any\n    ) {\n      this.getObjects().forEach((object, index, objects) =>\n        callback(object, index, objects)\n      );\n    }\n\n    /**\n     * Returns an array of children objects of this instance\n     * @param {...String} [types] When specified, only objects of these types are returned\n     * @return {Array}\n     */\n    getObjects(...types: string[]) {\n      if (types.length === 0) {\n        return [...this._objects];\n      }\n      return this._objects.filter((o) => o.isType(...types));\n    }\n\n    /**\n     * Returns object at specified index\n     * @param {Number} index\n     * @return {Object} object at index\n     */\n    item(index: number) {\n      return this._objects[index];\n    }\n\n    /**\n     * Returns true if collection contains no objects\n     * @return {Boolean} true if collection is empty\n     */\n    isEmpty() {\n      return this._objects.length === 0;\n    }\n\n    /**\n     * Returns a size of a collection (i.e: length of an array containing its objects)\n     * @return {Number} Collection size\n     */\n    size() {\n      return this._objects.length;\n    }\n\n    /**\n     * Returns true if collection contains an object.\\\n     * **Prefer using {@link FabricObject#isDescendantOf} for performance reasons**\n     * instead of `a.contains(b)` use `b.isDescendantOf(a)`\n     * @param {Object} object Object to check against\n     * @param {Boolean} [deep=false] `true` to check all descendants, `false` to check only `_objects`\n     * @return {Boolean} `true` if collection contains an object\n     */\n    contains(object: FabricObject, deep?: boolean): boolean {\n      if (this._objects.includes(object)) {\n        return true;\n      } else if (deep) {\n        return this._objects.some(\n          (obj) =>\n            obj instanceof Collection &&\n            (obj as unknown as Collection).contains(object, true)\n        );\n      }\n      return false;\n    }\n\n    /**\n     * Returns number representation of a collection complexity\n     * @return {Number} complexity\n     */\n    complexity() {\n      return this._objects.reduce((memo, current) => {\n        memo += current.complexity ? current.complexity() : 0;\n        return memo;\n      }, 0);\n    }\n\n    /**\n     * Moves an object or the objects of a multiple selection\n     * to the bottom of the stack of drawn objects\n     * @param {fabric.Object} object Object to send to back\n     * @returns {boolean} true if change occurred\n     */\n    sendObjectToBack(object: FabricObject) {\n      if (!object || object === this._objects[0]) {\n        return false;\n      }\n      removeFromArray(this._objects, object);\n      this._objects.unshift(object);\n      this._onStackOrderChanged(object);\n      return true;\n    }\n\n    /**\n     * Moves an object or the objects of a multiple selection\n     * to the top of the stack of drawn objects\n     * @param {fabric.Object} object Object to send\n     * @returns {boolean} true if change occurred\n     */\n    bringObjectToFront(object: FabricObject) {\n      if (!object || object === this._objects[this._objects.length - 1]) {\n        return false;\n      }\n      removeFromArray(this._objects, object);\n      this._objects.push(object);\n      this._onStackOrderChanged(object);\n      return true;\n    }\n\n    /**\n     * Moves an object or a selection down in stack of drawn objects\n     * An optional parameter, `intersecting` allows to move the object in behind\n     * the first intersecting object. Where intersection is calculated with\n     * bounding box. If no intersection is found, there will not be change in the\n     * stack.\n     * @param {fabric.Object} object Object to send\n     * @param {boolean} [intersecting] If `true`, send object behind next lower intersecting object\n     * @returns {boolean} true if change occurred\n     */\n    sendObjectBackwards(object: FabricObject, intersecting?: boolean) {\n      if (!object) {\n        return false;\n      }\n      const idx = this._objects.indexOf(object);\n      if (idx !== 0) {\n        // if object is not on the bottom of stack\n        const newIdx = this.findNewLowerIndex(object, idx, intersecting);\n        removeFromArray(this._objects, object);\n        this._objects.splice(newIdx, 0, object);\n        this._onStackOrderChanged(object);\n        return true;\n      }\n      return false;\n    }\n\n    /**\n     * Moves an object or a selection up in stack of drawn objects\n     * An optional parameter, intersecting allows to move the object in front\n     * of the first intersecting object. Where intersection is calculated with\n     * bounding box. If no intersection is found, there will not be change in the\n     * stack.\n     * @param {fabric.Object} object Object to send\n     * @param {boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n     * @returns {boolean} true if change occurred\n     */\n    bringObjectForward(object: FabricObject, intersecting?: boolean) {\n      if (!object) {\n        return false;\n      }\n      const idx = this._objects.indexOf(object);\n      if (idx !== this._objects.length - 1) {\n        // if object is not on top of stack (last item in an array)\n        const newIdx = this.findNewUpperIndex(object, idx, intersecting);\n        removeFromArray(this._objects, object);\n        this._objects.splice(newIdx, 0, object);\n        this._onStackOrderChanged(object);\n        return true;\n      }\n      return false;\n    }\n\n    /**\n     * Moves an object to specified level in stack of drawn objects\n     * @param {fabric.Object} object Object to send\n     * @param {number} index Position to move to\n     * @returns {boolean} true if change occurred\n     */\n    moveObjectTo(object: FabricObject, index: number) {\n      if (object === this._objects[index]) {\n        return false;\n      }\n      removeFromArray(this._objects, object);\n      this._objects.splice(index, 0, object);\n      this._onStackOrderChanged(object);\n      return true;\n    }\n\n    findNewLowerIndex(\n      object: FabricObject,\n      idx: number,\n      intersecting?: boolean\n    ) {\n      let newIdx;\n\n      if (intersecting) {\n        newIdx = idx;\n        // traverse down the stack looking for the nearest intersecting object\n        for (let i = idx - 1; i >= 0; --i) {\n          if (object.isOverlapping(this._objects[i])) {\n            newIdx = i;\n            break;\n          }\n        }\n      } else {\n        newIdx = idx - 1;\n      }\n\n      return newIdx;\n    }\n\n    findNewUpperIndex(\n      object: FabricObject,\n      idx: number,\n      intersecting?: boolean\n    ) {\n      let newIdx;\n\n      if (intersecting) {\n        newIdx = idx;\n        // traverse up the stack looking for the nearest intersecting object\n        for (let i = idx + 1; i < this._objects.length; ++i) {\n          if (object.isOverlapping(this._objects[i])) {\n            newIdx = i;\n            break;\n          }\n        }\n      } else {\n        newIdx = idx + 1;\n      }\n\n      return newIdx;\n    }\n\n    /**\n     * Given a bounding box, return all the objects of the collection that are contained in the bounding box.\n     * If `includeIntersecting` is true, return also the objects that intersect the bounding box as well.\n     * This is meant to work with selection. Is not a generic method.\n     * @param {TBBox} bbox a bounding box in scene coordinates\n     * @param {{ includeIntersecting?: boolean }} options an object with includeIntersecting\n     * @returns array of objects contained in the bounding box, ordered from top to bottom stacking wise\n     */\n    collectObjects(\n      { left, top, width, height }: TBBox,\n      { includeIntersecting = true }: { includeIntersecting?: boolean } = {}\n    ) {\n      const objects: InteractiveFabricObject[] = [],\n        tl = new Point(left, top),\n        br = tl.add(new Point(width, height));\n\n      // we iterate reverse order to collect top first in case of click.\n      for (let i = this._objects.length - 1; i >= 0; i--) {\n        const object = this._objects[i] as unknown as InteractiveFabricObject;\n        if (\n          object.selectable &&\n          object.visible &&\n          ((includeIntersecting && object.intersectsWithRect(tl, br)) ||\n            object.isContainedWithinRect(tl, br) ||\n            (includeIntersecting && object.containsPoint(tl)) ||\n            (includeIntersecting && object.containsPoint(br)))\n        ) {\n          objects.push(object);\n        }\n      }\n\n      return objects;\n    }\n  }\n\n  // https://github.com/microsoft/TypeScript/issues/32080\n  return Collection as typeof Collection & TBase;\n}\n"],"names":["isCollection","fabricObject","Array","isArray","_objects","createCollectionMixin","Base","Collection","constructor","arguments","_defineProperty","_onObjectAdded","object","_onObjectRemoved","_onStackOrderChanged","add","_len","length","objects","_key","size","push","forEach","insertAt","index","_len2","_key2","splice","remove","array","removed","_len3","_key3","indexOf","forEachObject","callback","getObjects","_len4","types","_key4","filter","o","isType","item","isEmpty","contains","deep","includes","some","obj","complexity","reduce","memo","current","sendObjectToBack","removeFromArray","unshift","bringObjectToFront","sendObjectBackwards","intersecting","idx","newIdx","findNewLowerIndex","bringObjectForward","findNewUpperIndex","moveObjectTo","i","isOverlapping","collectObjects","_ref","left","top","width","height","includeIntersecting","undefined","tl","Point","br","selectable","visible","intersectsWithRect","isContainedWithinRect","containsPoint"],"mappings":"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"}