@postermywall/fabricjs-2 6.0.0-rc2.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/dist/index.js +229 -491
  3. package/dist/index.js.map +1 -1
  4. package/dist/index.min.js +1 -1
  5. package/dist/index.min.js.map +1 -1
  6. package/dist/index.min.mjs +1 -1
  7. package/dist/index.min.mjs.map +1 -1
  8. package/dist/index.mjs +229 -491
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/index.node.cjs +229 -491
  11. package/dist/index.node.cjs.map +1 -1
  12. package/dist/index.node.mjs +229 -491
  13. package/dist/index.node.mjs.map +1 -1
  14. package/dist/package.json.min.mjs +1 -1
  15. package/dist/package.json.mjs +1 -1
  16. package/dist/src/canvas/Canvas.d.ts.map +1 -1
  17. package/dist/src/canvas/Canvas.min.mjs +1 -1
  18. package/dist/src/canvas/Canvas.min.mjs.map +1 -1
  19. package/dist/src/canvas/Canvas.mjs +8 -9
  20. package/dist/src/canvas/Canvas.mjs.map +1 -1
  21. package/dist/src/canvas/SelectableCanvas.d.ts +1 -1
  22. package/dist/src/canvas/SelectableCanvas.d.ts.map +1 -1
  23. package/dist/src/canvas/SelectableCanvas.min.mjs +1 -1
  24. package/dist/src/canvas/SelectableCanvas.min.mjs.map +1 -1
  25. package/dist/src/canvas/SelectableCanvas.mjs +1 -1
  26. package/dist/src/canvas/SelectableCanvas.mjs.map +1 -1
  27. package/dist/src/canvas/StaticCanvas.d.ts +4 -4
  28. package/dist/src/canvas/StaticCanvas.d.ts.map +1 -1
  29. package/dist/src/canvas/StaticCanvas.min.mjs +1 -1
  30. package/dist/src/canvas/StaticCanvas.min.mjs.map +1 -1
  31. package/dist/src/canvas/StaticCanvas.mjs +0 -13
  32. package/dist/src/canvas/StaticCanvas.mjs.map +1 -1
  33. package/dist/src/color/Color.d.ts +1 -0
  34. package/dist/src/color/Color.d.ts.map +1 -1
  35. package/dist/src/color/Color.min.mjs +1 -1
  36. package/dist/src/color/Color.min.mjs.map +1 -1
  37. package/dist/src/color/Color.mjs +3 -1
  38. package/dist/src/color/Color.mjs.map +1 -1
  39. package/dist/src/filters/BaseFilter.d.ts +16 -23
  40. package/dist/src/filters/BaseFilter.d.ts.map +1 -1
  41. package/dist/src/filters/BaseFilter.min.mjs +1 -1
  42. package/dist/src/filters/BaseFilter.min.mjs.map +1 -1
  43. package/dist/src/filters/BaseFilter.mjs +24 -41
  44. package/dist/src/filters/BaseFilter.mjs.map +1 -1
  45. package/dist/src/filters/BlendColor.d.ts +13 -24
  46. package/dist/src/filters/BlendColor.d.ts.map +1 -1
  47. package/dist/src/filters/BlendColor.min.mjs +1 -1
  48. package/dist/src/filters/BlendColor.min.mjs.map +1 -1
  49. package/dist/src/filters/BlendColor.mjs +1 -25
  50. package/dist/src/filters/BlendColor.mjs.map +1 -1
  51. package/dist/src/filters/BlendImage.d.ts +18 -19
  52. package/dist/src/filters/BlendImage.d.ts.map +1 -1
  53. package/dist/src/filters/BlendImage.min.mjs +1 -1
  54. package/dist/src/filters/BlendImage.min.mjs.map +1 -1
  55. package/dist/src/filters/BlendImage.mjs +13 -24
  56. package/dist/src/filters/BlendImage.mjs.map +1 -1
  57. package/dist/src/filters/Blur.d.ts +10 -12
  58. package/dist/src/filters/Blur.d.ts.map +1 -1
  59. package/dist/src/filters/Blur.min.mjs +1 -1
  60. package/dist/src/filters/Blur.min.mjs.map +1 -1
  61. package/dist/src/filters/Blur.mjs +5 -14
  62. package/dist/src/filters/Blur.mjs.map +1 -1
  63. package/dist/src/filters/Boilerplate.d.ts +11 -13
  64. package/dist/src/filters/Boilerplate.d.ts.map +1 -1
  65. package/dist/src/filters/Brightness.d.ts +10 -12
  66. package/dist/src/filters/Brightness.d.ts.map +1 -1
  67. package/dist/src/filters/Brightness.min.mjs +1 -1
  68. package/dist/src/filters/Brightness.min.mjs.map +1 -1
  69. package/dist/src/filters/Brightness.mjs +4 -16
  70. package/dist/src/filters/Brightness.mjs.map +1 -1
  71. package/dist/src/filters/Canvas2dFilterBackend.d.ts +1 -1
  72. package/dist/src/filters/Canvas2dFilterBackend.d.ts.map +1 -1
  73. package/dist/src/filters/Canvas2dFilterBackend.min.mjs.map +1 -1
  74. package/dist/src/filters/Canvas2dFilterBackend.mjs.map +1 -1
  75. package/dist/src/filters/ColorMatrix.d.ts +17 -15
  76. package/dist/src/filters/ColorMatrix.d.ts.map +1 -1
  77. package/dist/src/filters/ColorMatrix.min.mjs +1 -1
  78. package/dist/src/filters/ColorMatrix.min.mjs.map +1 -1
  79. package/dist/src/filters/ColorMatrix.mjs +7 -27
  80. package/dist/src/filters/ColorMatrix.mjs.map +1 -1
  81. package/dist/src/filters/ColorMatrixFilters.d.ts +63 -497
  82. package/dist/src/filters/ColorMatrixFilters.d.ts.map +1 -1
  83. package/dist/src/filters/ColorMatrixFilters.min.mjs +1 -1
  84. package/dist/src/filters/ColorMatrixFilters.min.mjs.map +1 -1
  85. package/dist/src/filters/ColorMatrixFilters.mjs +13 -8
  86. package/dist/src/filters/ColorMatrixFilters.mjs.map +1 -1
  87. package/dist/src/filters/Composed.d.ts +11 -10
  88. package/dist/src/filters/Composed.d.ts.map +1 -1
  89. package/dist/src/filters/Composed.min.mjs +1 -1
  90. package/dist/src/filters/Composed.min.mjs.map +1 -1
  91. package/dist/src/filters/Composed.mjs +7 -12
  92. package/dist/src/filters/Composed.mjs.map +1 -1
  93. package/dist/src/filters/Contrast.d.ts +10 -12
  94. package/dist/src/filters/Contrast.d.ts.map +1 -1
  95. package/dist/src/filters/Contrast.min.mjs +1 -1
  96. package/dist/src/filters/Contrast.min.mjs.map +1 -1
  97. package/dist/src/filters/Contrast.mjs +6 -17
  98. package/dist/src/filters/Contrast.mjs.map +1 -1
  99. package/dist/src/filters/Convolute.d.ts +11 -14
  100. package/dist/src/filters/Convolute.d.ts.map +1 -1
  101. package/dist/src/filters/Convolute.min.mjs +1 -1
  102. package/dist/src/filters/Convolute.min.mjs.map +1 -1
  103. package/dist/src/filters/Convolute.mjs +1 -15
  104. package/dist/src/filters/Convolute.mjs.map +1 -1
  105. package/dist/src/filters/Gamma.d.ts +17 -14
  106. package/dist/src/filters/Gamma.d.ts.map +1 -1
  107. package/dist/src/filters/Gamma.min.mjs +1 -1
  108. package/dist/src/filters/Gamma.min.mjs.map +1 -1
  109. package/dist/src/filters/Gamma.mjs +20 -24
  110. package/dist/src/filters/Gamma.mjs.map +1 -1
  111. package/dist/src/filters/Grayscale.d.ts +8 -11
  112. package/dist/src/filters/Grayscale.d.ts.map +1 -1
  113. package/dist/src/filters/Grayscale.min.mjs +1 -1
  114. package/dist/src/filters/Grayscale.min.mjs.map +1 -1
  115. package/dist/src/filters/Grayscale.mjs +2 -14
  116. package/dist/src/filters/Grayscale.mjs.map +1 -1
  117. package/dist/src/filters/HueRotation.d.ts +11 -5
  118. package/dist/src/filters/HueRotation.d.ts.map +1 -1
  119. package/dist/src/filters/HueRotation.min.mjs +1 -1
  120. package/dist/src/filters/HueRotation.min.mjs.map +1 -1
  121. package/dist/src/filters/HueRotation.mjs +10 -5
  122. package/dist/src/filters/HueRotation.mjs.map +1 -1
  123. package/dist/src/filters/Invert.d.ts +10 -13
  124. package/dist/src/filters/Invert.d.ts.map +1 -1
  125. package/dist/src/filters/Invert.min.mjs +1 -1
  126. package/dist/src/filters/Invert.min.mjs.map +1 -1
  127. package/dist/src/filters/Invert.mjs +2 -15
  128. package/dist/src/filters/Invert.mjs.map +1 -1
  129. package/dist/src/filters/Noise.d.ts +9 -20
  130. package/dist/src/filters/Noise.d.ts.map +1 -1
  131. package/dist/src/filters/Noise.min.mjs +1 -1
  132. package/dist/src/filters/Noise.min.mjs.map +1 -1
  133. package/dist/src/filters/Noise.mjs +4 -27
  134. package/dist/src/filters/Noise.mjs.map +1 -1
  135. package/dist/src/filters/Pixelate.d.ts +8 -12
  136. package/dist/src/filters/Pixelate.d.ts.map +1 -1
  137. package/dist/src/filters/Pixelate.min.mjs +1 -1
  138. package/dist/src/filters/Pixelate.min.mjs.map +1 -1
  139. package/dist/src/filters/Pixelate.mjs +2 -16
  140. package/dist/src/filters/Pixelate.mjs.map +1 -1
  141. package/dist/src/filters/RemoveColor.d.ts +12 -23
  142. package/dist/src/filters/RemoveColor.d.ts.map +1 -1
  143. package/dist/src/filters/RemoveColor.min.mjs +1 -1
  144. package/dist/src/filters/RemoveColor.min.mjs.map +1 -1
  145. package/dist/src/filters/RemoveColor.mjs +2 -25
  146. package/dist/src/filters/RemoveColor.mjs.map +1 -1
  147. package/dist/src/filters/Resize.d.ts +14 -30
  148. package/dist/src/filters/Resize.d.ts.map +1 -1
  149. package/dist/src/filters/Resize.min.mjs +1 -1
  150. package/dist/src/filters/Resize.min.mjs.map +1 -1
  151. package/dist/src/filters/Resize.mjs +3 -30
  152. package/dist/src/filters/Resize.mjs.map +1 -1
  153. package/dist/src/filters/Saturation.d.ts +9 -12
  154. package/dist/src/filters/Saturation.d.ts.map +1 -1
  155. package/dist/src/filters/Saturation.min.mjs +1 -1
  156. package/dist/src/filters/Saturation.min.mjs.map +1 -1
  157. package/dist/src/filters/Saturation.mjs +8 -20
  158. package/dist/src/filters/Saturation.mjs.map +1 -1
  159. package/dist/src/filters/Vibrance.d.ts +10 -13
  160. package/dist/src/filters/Vibrance.d.ts.map +1 -1
  161. package/dist/src/filters/Vibrance.min.mjs +1 -1
  162. package/dist/src/filters/Vibrance.min.mjs.map +1 -1
  163. package/dist/src/filters/Vibrance.mjs +6 -18
  164. package/dist/src/filters/Vibrance.mjs.map +1 -1
  165. package/dist/src/filters/WebGLFilterBackend.d.ts +1 -1
  166. package/dist/src/filters/WebGLFilterBackend.d.ts.map +1 -1
  167. package/dist/src/filters/WebGLFilterBackend.min.mjs.map +1 -1
  168. package/dist/src/filters/WebGLFilterBackend.mjs.map +1 -1
  169. package/dist/src/filters/shaders/blendImage.d.ts +1 -0
  170. package/dist/src/filters/shaders/blendImage.d.ts.map +1 -1
  171. package/dist/src/filters/shaders/blendImage.min.mjs +1 -1
  172. package/dist/src/filters/shaders/blendImage.min.mjs.map +1 -1
  173. package/dist/src/filters/shaders/blendImage.mjs +2 -1
  174. package/dist/src/filters/shaders/blendImage.mjs.map +1 -1
  175. package/dist/src/filters/typedefs.d.ts +22 -0
  176. package/dist/src/filters/typedefs.d.ts.map +1 -1
  177. package/dist/src/parser/elements_parser.d.ts +1 -1
  178. package/dist/src/parser/elements_parser.d.ts.map +1 -1
  179. package/dist/src/parser/elements_parser.min.mjs.map +1 -1
  180. package/dist/src/parser/elements_parser.mjs.map +1 -1
  181. package/dist/src/shapes/ActiveSelection.d.ts +1 -1
  182. package/dist/src/shapes/ActiveSelection.d.ts.map +1 -1
  183. package/dist/src/shapes/ActiveSelection.min.mjs +1 -1
  184. package/dist/src/shapes/ActiveSelection.min.mjs.map +1 -1
  185. package/dist/src/shapes/ActiveSelection.mjs +13 -10
  186. package/dist/src/shapes/ActiveSelection.mjs.map +1 -1
  187. package/dist/src/shapes/Group.d.ts +9 -0
  188. package/dist/src/shapes/Group.d.ts.map +1 -1
  189. package/dist/src/shapes/Group.min.mjs +1 -1
  190. package/dist/src/shapes/Group.min.mjs.map +1 -1
  191. package/dist/src/shapes/Group.mjs +10 -1
  192. package/dist/src/shapes/Group.mjs.map +1 -1
  193. package/dist/src/shapes/Image.d.ts +4 -4
  194. package/dist/src/shapes/Image.d.ts.map +1 -1
  195. package/dist/src/shapes/Image.min.mjs.map +1 -1
  196. package/dist/src/shapes/Image.mjs.map +1 -1
  197. package/dist/src/shapes/Object/InteractiveObject.d.ts +3 -0
  198. package/dist/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
  199. package/dist/src/shapes/Object/InteractiveObject.min.mjs +1 -1
  200. package/dist/src/shapes/Object/InteractiveObject.min.mjs.map +1 -1
  201. package/dist/src/shapes/Object/InteractiveObject.mjs +3 -1
  202. package/dist/src/shapes/Object/InteractiveObject.mjs.map +1 -1
  203. package/dist/src/shapes/Object/Object.d.ts +1 -16
  204. package/dist/src/shapes/Object/Object.d.ts.map +1 -1
  205. package/dist/src/shapes/Object/Object.min.mjs +1 -1
  206. package/dist/src/shapes/Object/Object.min.mjs.map +1 -1
  207. package/dist/src/shapes/Object/Object.mjs +9 -10
  208. package/dist/src/shapes/Object/Object.mjs.map +1 -1
  209. package/dist/src/shapes/Object/StackedObject.d.ts +8 -15
  210. package/dist/src/shapes/Object/StackedObject.d.ts.map +1 -1
  211. package/dist/src/shapes/Object/StackedObject.min.mjs +1 -1
  212. package/dist/src/shapes/Object/StackedObject.min.mjs.map +1 -1
  213. package/dist/src/shapes/Object/StackedObject.mjs +11 -21
  214. package/dist/src/shapes/Object/StackedObject.mjs.map +1 -1
  215. package/dist/src/shapes/Path.d.ts +2 -2
  216. package/dist/src/shapes/Path.d.ts.map +1 -1
  217. package/dist/src/shapes/Path.min.mjs.map +1 -1
  218. package/dist/src/shapes/Path.mjs +2 -2
  219. package/dist/src/shapes/Path.mjs.map +1 -1
  220. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +1 -1
  221. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts.map +1 -1
  222. package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs.map +1 -1
  223. package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +1 -1
  224. package/dist/src/util/misc/objectEnlive.d.ts +2 -2
  225. package/dist/src/util/misc/objectEnlive.d.ts.map +1 -1
  226. package/dist/src/util/misc/objectEnlive.min.mjs.map +1 -1
  227. package/dist/src/util/misc/objectEnlive.mjs.map +1 -1
  228. package/package.json +2 -2
  229. package/src/canvas/Canvas.ts +6 -9
  230. package/src/canvas/SelectableCanvas.ts +2 -2
  231. package/src/canvas/StaticCanvas.ts +4 -18
  232. package/src/color/Color.ts +2 -1
  233. package/src/color/color.test.ts +6 -0
  234. package/src/filters/BaseFilter.ts +45 -51
  235. package/src/filters/BlendColor.ts +13 -35
  236. package/src/filters/BlendImage.ts +26 -40
  237. package/src/filters/Blur.ts +13 -20
  238. package/src/filters/Boilerplate.ts +13 -22
  239. package/src/filters/Brightness.ts +12 -21
  240. package/src/filters/Canvas2dFilterBackend.ts +1 -1
  241. package/src/filters/ColorMatrix.ts +29 -34
  242. package/src/filters/ColorMatrixFilters.ts +15 -9
  243. package/src/filters/Composed.ts +26 -16
  244. package/src/filters/Contrast.ts +15 -23
  245. package/src/filters/Convolute.ts +11 -23
  246. package/src/filters/Gamma.ts +32 -24
  247. package/src/filters/Grayscale.ts +8 -19
  248. package/src/filters/HueRotation.ts +21 -11
  249. package/src/filters/Invert.ts +11 -22
  250. package/src/filters/Noise.ts +11 -30
  251. package/src/filters/Pixelate.ts +9 -22
  252. package/src/filters/RemoveColor.ts +21 -35
  253. package/src/filters/Resize.ts +20 -44
  254. package/src/filters/Saturation.ts +16 -27
  255. package/src/filters/Vibrance.ts +14 -24
  256. package/src/filters/WebGLFilterBackend.ts +1 -1
  257. package/src/filters/shaders/blendImage.ts +12 -0
  258. package/src/filters/typedefs.ts +23 -0
  259. package/src/parser/elements_parser.ts +1 -1
  260. package/src/shapes/ActiveSelection.ts +8 -4
  261. package/src/shapes/Group.ts +16 -1
  262. package/src/shapes/Image.ts +8 -6
  263. package/src/shapes/Object/InteractiveObject.ts +3 -1
  264. package/src/shapes/Object/Object.ts +10 -35
  265. package/src/shapes/Object/StackedObject.ts +28 -44
  266. package/src/shapes/Path.ts +4 -4
  267. package/src/shapes/Text/TextSVGExportMixin.ts +1 -1
  268. package/src/util/misc/objectEnlive.ts +12 -2
@@ -1,11 +1,10 @@
1
- import { defineProperty as _defineProperty, objectSpread2 as _objectSpread2, objectWithoutProperties as _objectWithoutProperties } from '../../_virtual/_rollupPluginBabelHelpers.mjs';
1
+ import { defineProperty as _defineProperty, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.mjs';
2
2
  import { classRegistry } from '../ClassRegistry.mjs';
3
3
  import { Group } from './Group.mjs';
4
4
  import { LAYOUT_TYPE_REMOVED, LAYOUT_TYPE_ADDED } from '../LayoutManager/constants.mjs';
5
5
  import { log } from '../util/internals/console.mjs';
6
6
  import { ActiveSelectionLayoutManager } from '../LayoutManager/ActiveSelectionLayoutManager.mjs';
7
7
 
8
- const _excluded = ["layoutManager"];
9
8
  const activeSelectionDefaultValues = {
10
9
  multiSelectionStacking: 'canvas-stacking'
11
10
  };
@@ -41,16 +40,20 @@ class ActiveSelection extends Group {
41
40
 
42
41
  constructor() {
43
42
  let objects = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
44
- let _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
45
- {
46
- layoutManager
47
- } = _ref,
48
- options = _objectWithoutProperties(_ref, _excluded);
49
- super(objects, {
50
- layoutManager: layoutManager !== null && layoutManager !== void 0 ? layoutManager : new ActiveSelectionLayoutManager()
51
- });
43
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
44
+ super();
52
45
  Object.assign(this, ActiveSelection.ownDefaults);
53
46
  this.setOptions(options);
47
+ const {
48
+ left,
49
+ top,
50
+ layoutManager
51
+ } = options;
52
+ this.groupInit(objects, {
53
+ left,
54
+ top,
55
+ layoutManager: layoutManager !== null && layoutManager !== void 0 ? layoutManager : new ActiveSelectionLayoutManager()
56
+ });
54
57
  }
55
58
 
56
59
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ActiveSelection.mjs","sources":["../../../src/shapes/ActiveSelection.ts"],"sourcesContent":["import type { ControlRenderingStyleOverride } from '../controls/controlRendering';\nimport { classRegistry } from '../ClassRegistry';\nimport type { GroupProps } from './Group';\nimport { Group } from './Group';\nimport type { FabricObject } from './Object/FabricObject';\nimport {\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n} from '../LayoutManager/constants';\nimport type { TClassProperties } from '../typedefs';\nimport { log } from '../util/internals/console';\nimport { ActiveSelectionLayoutManager } from '../LayoutManager/ActiveSelectionLayoutManager';\n\nexport type MultiSelectionStacking = 'canvas-stacking' | 'selection-order';\n\nexport interface ActiveSelectionOptions extends GroupProps {\n multiSelectionStacking: MultiSelectionStacking;\n}\n\nconst activeSelectionDefaultValues: Partial<TClassProperties<ActiveSelection>> =\n {\n multiSelectionStacking: 'canvas-stacking',\n };\n\n/**\n * Used by Canvas to manage selection.\n *\n * @example\n * class MyActiveSelection extends ActiveSelection {\n * ...\n * }\n *\n * // override the default `ActiveSelection` class\n * classRegistry.setClass(MyActiveSelection)\n */\nexport class ActiveSelection extends Group {\n static type = 'ActiveSelection';\n\n static ownDefaults: Record<string, any> = activeSelectionDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return { ...super.getDefaults(), ...ActiveSelection.ownDefaults };\n }\n\n /**\n * The ActiveSelection needs to use the ActiveSelectionLayoutManager\n * or selections on interactive groups may be broken\n */\n declare layoutManager: ActiveSelectionLayoutManager;\n\n /**\n * controls how selected objects are added during a multiselection event\n * - `canvas-stacking` adds the selected object to the active selection while respecting canvas object stacking order\n * - `selection-order` adds the selected object to the top of the stack,\n * meaning that the stack is ordered by the order in which objects were selected\n * @default `canvas-stacking`\n */\n declare multiSelectionStacking: MultiSelectionStacking;\n\n constructor(\n objects: FabricObject[] = [],\n { layoutManager, ...options }: Partial<ActiveSelectionOptions> = {}\n ) {\n super(objects, {\n layoutManager: layoutManager ?? new ActiveSelectionLayoutManager(),\n });\n Object.assign(this, ActiveSelection.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n */\n _shouldSetNestedCoords() {\n return true;\n }\n\n /**\n * @private\n * @override we don't want the selection monitor to be active\n */\n __objectSelectionMonitor() {\n // noop\n }\n\n /**\n * Adds objects with respect to {@link multiSelectionStacking}\n * @param targets object to add to selection\n */\n multiSelectAdd(...targets: FabricObject[]) {\n if (this.multiSelectionStacking === 'selection-order') {\n this.add(...targets);\n } else {\n // respect object stacking as it is on canvas\n // perf enhancement for large ActiveSelection: consider a binary search of `isInFrontOf`\n targets.forEach((target) => {\n const index = this._objects.findIndex((obj) => obj.isInFrontOf(target));\n const insertAt =\n index === -1\n ? // `target` is in front of all other objects\n this.size()\n : index;\n this.insertAt(insertAt, target);\n });\n }\n }\n\n /**\n * @override block ancestors/descendants of selected objects from being selected to prevent a circular object tree\n */\n canEnterGroup(object: FabricObject) {\n if (\n this.getObjects().some(\n (o) => o.isDescendantOf(object) || object.isDescendantOf(o)\n )\n ) {\n // prevent circular object tree\n log(\n 'error',\n 'ActiveSelection: circular object trees are not supported, this call has no effect'\n );\n return false;\n }\n\n return super.canEnterGroup(object);\n }\n\n /**\n * Change an object so that it can be part of an active selection.\n * this method is called by multiselectAdd from canvas code.\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 // This condition check that the object has currently a group, and the group\n // is also its parent, meaning that is not in an active selection, but is\n // in a normal group.\n if (object.parent && object.parent === object.group) {\n // Disconnect the object from the group functionalities, but keep the ref parent intact\n // for later re-enter\n object.parent._exitGroup(object);\n // in this case the object is probably inside an active selection.\n } else if (object.group && object.parent !== object.group) {\n // in this case group.remove will also clear the old parent reference.\n object.group.remove(object);\n }\n // enter the active selection from a render perspective\n // the object will be in the objects array of both the ActiveSelection and the Group\n // but referenced in the group's _activeObjects so that it won't be rendered twice.\n this._enterGroup(object, removeParentTransform);\n }\n\n /**\n * we want objects to retain their canvas ref when exiting instance\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 // return to parent\n object.parent && object.parent._enterGroup(object, true);\n }\n\n /**\n * @private\n * @param {'added'|'removed'} type\n * @param {FabricObject[]} targets\n */\n _onAfterObjectsChange(type: 'added' | 'removed', targets: FabricObject[]) {\n super._onAfterObjectsChange(type, targets);\n const groups = new Set<Group>();\n targets.forEach((object) => {\n const { parent } = object;\n parent && groups.add(parent);\n });\n if (type === LAYOUT_TYPE_REMOVED) {\n // invalidate groups' layout and mark as dirty\n groups.forEach((group) => {\n group._onAfterObjectsChange(LAYOUT_TYPE_ADDED, targets);\n });\n } else {\n // mark groups as dirty\n groups.forEach((group) => {\n group._set('dirty', true);\n });\n }\n }\n\n /**\n * @override remove all objects\n */\n onDeselect() {\n this.removeAll();\n return false;\n }\n\n /**\n * Returns string representation of a group\n * @return {String}\n */\n toString() {\n return `#<ActiveSelection: (${this.complexity()})>`;\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\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 outside is cached.\n * @return {Boolean}\n */\n shouldCache() {\n return false;\n }\n\n /**\n * Check if this group or its parent group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache() {\n return false;\n }\n\n /**\n * Renders controls and borders for the object\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [styleOverride] properties to override the object style\n * @param {Object} [childrenOverride] properties to override the children overrides\n */\n _renderControls(\n ctx: CanvasRenderingContext2D,\n styleOverride?: ControlRenderingStyleOverride,\n childrenOverride?: ControlRenderingStyleOverride\n ) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n const options = {\n hasControls: false,\n ...childrenOverride,\n forActiveSelection: true,\n };\n for (let i = 0; i < this._objects.length; i++) {\n this._objects[i]._renderControls(ctx, options);\n }\n super._renderControls(ctx, styleOverride);\n ctx.restore();\n }\n}\n\nclassRegistry.setClass(ActiveSelection);\nclassRegistry.setClass(ActiveSelection, 'activeSelection');\n"],"names":["activeSelectionDefaultValues","multiSelectionStacking","ActiveSelection","Group","getDefaults","_objectSpread","ownDefaults","constructor","objects","arguments","length","undefined","_ref","layoutManager","options","_objectWithoutProperties","_excluded","ActiveSelectionLayoutManager","Object","assign","setOptions","_shouldSetNestedCoords","__objectSelectionMonitor","multiSelectAdd","_len","targets","Array","_key","add","forEach","target","index","_objects","findIndex","obj","isInFrontOf","insertAt","size","canEnterGroup","object","getObjects","some","o","isDescendantOf","log","enterGroup","removeParentTransform","parent","group","_exitGroup","remove","_enterGroup","exitGroup","_onAfterObjectsChange","type","groups","Set","LAYOUT_TYPE_REMOVED","LAYOUT_TYPE_ADDED","_set","onDeselect","removeAll","toString","concat","complexity","shouldCache","isOnACache","_renderControls","ctx","styleOverride","childrenOverride","save","globalAlpha","isMoving","borderOpacityWhenMoving","hasControls","forActiveSelection","i","restore","_defineProperty","classRegistry","setClass"],"mappings":";;;;;;;;AAmBA,MAAMA,4BAAwE,GAC5E;AACEC,EAAAA,sBAAsB,EAAE,iBAAA;AAC1B,CAAC,CAAA;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,eAAe,SAASC,KAAK,CAAC;EAKzC,OAAOC,WAAWA,GAAwB;AACxC,IAAA,OAAAC,cAAA,CAAAA,cAAA,CAAA,EAAA,EAAY,KAAK,CAACD,WAAW,EAAE,CAAA,EAAKF,eAAe,CAACI,WAAW,CAAA,CAAA;AACjE,GAAA;;AAEA;AACF;AACA;AACA;;AAGE;AACF;AACA;AACA;AACA;AACA;AACA;;AAGEC,EAAAA,WAAWA,GAGT;AAAA,IAAA,IAFAC,OAAuB,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;AAAA,IAAA,IAAAG,IAAA,GAAAH,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GACqC,EAAE;AAAnE,MAAA;AAAEI,QAAAA,aAAAA;AAA2D,OAAC,GAAAD,IAAA;AAA1CE,MAAAA,OAAO,GAAAC,wBAAA,CAAAH,IAAA,EAAAI,SAAA,CAAA,CAAA;IAE3B,KAAK,CAACR,OAAO,EAAE;MACbK,aAAa,EAAEA,aAAa,KAAbA,IAAAA,IAAAA,aAAa,cAAbA,aAAa,GAAI,IAAII,4BAA4B,EAAC;AACnE,KAAC,CAAC,CAAA;IACFC,MAAM,CAACC,MAAM,CAAC,IAAI,EAAEjB,eAAe,CAACI,WAAW,CAAC,CAAA;AAChD,IAAA,IAAI,CAACc,UAAU,CAACN,OAAO,CAAC,CAAA;AAC1B,GAAA;;AAEA;AACF;AACA;AACEO,EAAAA,sBAAsBA,GAAG;AACvB,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;;AAEA;AACF;AACA;AACA;AACEC,EAAAA,wBAAwBA,GAAG;AACzB;AAAA,GAAA;;AAGF;AACF;AACA;AACA;AACEC,EAAAA,cAAcA,GAA6B;AAAA,IAAA,KAAA,IAAAC,IAAA,GAAAf,SAAA,CAAAC,MAAA,EAAzBe,OAAO,GAAAC,IAAAA,KAAA,CAAAF,IAAA,GAAAG,IAAA,GAAA,CAAA,EAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA,EAAA,EAAA;AAAPF,MAAAA,OAAO,CAAAE,IAAA,CAAAlB,GAAAA,SAAA,CAAAkB,IAAA,CAAA,CAAA;AAAA,KAAA;AACvB,IAAA,IAAI,IAAI,CAAC1B,sBAAsB,KAAK,iBAAiB,EAAE;AACrD,MAAA,IAAI,CAAC2B,GAAG,CAAC,GAAGH,OAAO,CAAC,CAAA;AACtB,KAAC,MAAM;AACL;AACA;AACAA,MAAAA,OAAO,CAACI,OAAO,CAAEC,MAAM,IAAK;AAC1B,QAAA,MAAMC,KAAK,GAAG,IAAI,CAACC,QAAQ,CAACC,SAAS,CAAEC,GAAG,IAAKA,GAAG,CAACC,WAAW,CAACL,MAAM,CAAC,CAAC,CAAA;AACvE,QAAA,MAAMM,QAAQ,GACZL,KAAK,KAAK,CAAC,CAAC;AACR;AACA,QAAA,IAAI,CAACM,IAAI,EAAE,GACXN,KAAK,CAAA;AACX,QAAA,IAAI,CAACK,QAAQ,CAACA,QAAQ,EAAEN,MAAM,CAAC,CAAA;AACjC,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;;AAEA;AACF;AACA;EACEQ,aAAaA,CAACC,MAAoB,EAAE;IAClC,IACE,IAAI,CAACC,UAAU,EAAE,CAACC,IAAI,CACnBC,CAAC,IAAKA,CAAC,CAACC,cAAc,CAACJ,MAAM,CAAC,IAAIA,MAAM,CAACI,cAAc,CAACD,CAAC,CAC5D,CAAC,EACD;AACA;AACAE,MAAAA,GAAG,CACD,OAAO,EACP,mFACF,CAAC,CAAA;AACD,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;AAEA,IAAA,OAAO,KAAK,CAACN,aAAa,CAACC,MAAM,CAAC,CAAA;AACpC,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACEM,EAAAA,UAAUA,CAACN,MAAoB,EAAEO,qBAA+B,EAAE;AAChE;AACA;AACA;IACA,IAAIP,MAAM,CAACQ,MAAM,IAAIR,MAAM,CAACQ,MAAM,KAAKR,MAAM,CAACS,KAAK,EAAE;AACnD;AACA;AACAT,MAAAA,MAAM,CAACQ,MAAM,CAACE,UAAU,CAACV,MAAM,CAAC,CAAA;AAChC;AACF,KAAC,MAAM,IAAIA,MAAM,CAACS,KAAK,IAAIT,MAAM,CAACQ,MAAM,KAAKR,MAAM,CAACS,KAAK,EAAE;AACzD;AACAT,MAAAA,MAAM,CAACS,KAAK,CAACE,MAAM,CAACX,MAAM,CAAC,CAAA;AAC7B,KAAA;AACA;AACA;AACA;AACA,IAAA,IAAI,CAACY,WAAW,CAACZ,MAAM,EAAEO,qBAAqB,CAAC,CAAA;AACjD,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEM,EAAAA,SAASA,CAACb,MAAoB,EAAEO,qBAA+B,EAAE;AAC/D,IAAA,IAAI,CAACG,UAAU,CAACV,MAAM,EAAEO,qBAAqB,CAAC,CAAA;AAC9C;AACAP,IAAAA,MAAM,CAACQ,MAAM,IAAIR,MAAM,CAACQ,MAAM,CAACI,WAAW,CAACZ,MAAM,EAAE,IAAI,CAAC,CAAA;AAC1D,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACEc,EAAAA,qBAAqBA,CAACC,IAAyB,EAAE7B,OAAuB,EAAE;AACxE,IAAA,KAAK,CAAC4B,qBAAqB,CAACC,IAAI,EAAE7B,OAAO,CAAC,CAAA;AAC1C,IAAA,MAAM8B,MAAM,GAAG,IAAIC,GAAG,EAAS,CAAA;AAC/B/B,IAAAA,OAAO,CAACI,OAAO,CAAEU,MAAM,IAAK;MAC1B,MAAM;AAAEQ,QAAAA,MAAAA;AAAO,OAAC,GAAGR,MAAM,CAAA;AACzBQ,MAAAA,MAAM,IAAIQ,MAAM,CAAC3B,GAAG,CAACmB,MAAM,CAAC,CAAA;AAC9B,KAAC,CAAC,CAAA;IACF,IAAIO,IAAI,KAAKG,mBAAmB,EAAE;AAChC;AACAF,MAAAA,MAAM,CAAC1B,OAAO,CAAEmB,KAAK,IAAK;AACxBA,QAAAA,KAAK,CAACK,qBAAqB,CAACK,iBAAiB,EAAEjC,OAAO,CAAC,CAAA;AACzD,OAAC,CAAC,CAAA;AACJ,KAAC,MAAM;AACL;AACA8B,MAAAA,MAAM,CAAC1B,OAAO,CAAEmB,KAAK,IAAK;AACxBA,QAAAA,KAAK,CAACW,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AAC3B,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACEC,EAAAA,UAAUA,GAAG;IACX,IAAI,CAACC,SAAS,EAAE,CAAA;AAChB,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;;AAEA;AACF;AACA;AACA;AACEC,EAAAA,QAAQA,GAAG;AACT,IAAA,OAAA,sBAAA,CAAAC,MAAA,CAA8B,IAAI,CAACC,UAAU,EAAE,EAAA,IAAA,CAAA,CAAA;AACjD,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,WAAWA,GAAG;AACZ,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;;AAEA;AACF;AACA;AACA;AACEC,EAAAA,UAAUA,GAAG;AACX,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEC,EAAAA,eAAeA,CACbC,GAA6B,EAC7BC,aAA6C,EAC7CC,gBAAgD,EAChD;IACAF,GAAG,CAACG,IAAI,EAAE,CAAA;IACVH,GAAG,CAACI,WAAW,GAAG,IAAI,CAACC,QAAQ,GAAG,IAAI,CAACC,uBAAuB,GAAG,CAAC,CAAA;AAClE,IAAA,MAAM5D,OAAO,GAAAT,cAAA,CAAAA,cAAA,CAAA;AACXsE,MAAAA,WAAW,EAAE,KAAA;AAAK,KAAA,EACfL,gBAAgB,CAAA,EAAA,EAAA,EAAA;AACnBM,MAAAA,kBAAkB,EAAE,IAAA;KACrB,CAAA,CAAA;AACD,IAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC7C,QAAQ,CAACtB,MAAM,EAAEmE,CAAC,EAAE,EAAE;MAC7C,IAAI,CAAC7C,QAAQ,CAAC6C,CAAC,CAAC,CAACV,eAAe,CAACC,GAAG,EAAEtD,OAAO,CAAC,CAAA;AAChD,KAAA;AACA,IAAA,KAAK,CAACqD,eAAe,CAACC,GAAG,EAAEC,aAAa,CAAC,CAAA;IACzCD,GAAG,CAACU,OAAO,EAAE,CAAA;AACf,GAAA;AACF,CAAA;AAACC,eAAA,CAvNY7E,eAAe,EAAA,MAAA,EACZ,iBAAiB,CAAA,CAAA;AAAA6E,eAAA,CADpB7E,eAAe,EAAA,aAAA,EAGgBF,4BAA4B,CAAA,CAAA;AAsNxEgF,aAAa,CAACC,QAAQ,CAAC/E,eAAe,CAAC,CAAA;AACvC8E,aAAa,CAACC,QAAQ,CAAC/E,eAAe,EAAE,iBAAiB,CAAC;;;;"}
1
+ {"version":3,"file":"ActiveSelection.mjs","sources":["../../../src/shapes/ActiveSelection.ts"],"sourcesContent":["import type { ControlRenderingStyleOverride } from '../controls/controlRendering';\nimport { classRegistry } from '../ClassRegistry';\nimport type { GroupProps } from './Group';\nimport { Group } from './Group';\nimport type { FabricObject } from './Object/FabricObject';\nimport {\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n} from '../LayoutManager/constants';\nimport type { TClassProperties } from '../typedefs';\nimport { log } from '../util/internals/console';\nimport { ActiveSelectionLayoutManager } from '../LayoutManager/ActiveSelectionLayoutManager';\n\nexport type MultiSelectionStacking = 'canvas-stacking' | 'selection-order';\n\nexport interface ActiveSelectionOptions extends GroupProps {\n multiSelectionStacking: MultiSelectionStacking;\n}\n\nconst activeSelectionDefaultValues: Partial<TClassProperties<ActiveSelection>> =\n {\n multiSelectionStacking: 'canvas-stacking',\n };\n\n/**\n * Used by Canvas to manage selection.\n *\n * @example\n * class MyActiveSelection extends ActiveSelection {\n * ...\n * }\n *\n * // override the default `ActiveSelection` class\n * classRegistry.setClass(MyActiveSelection)\n */\nexport class ActiveSelection extends Group {\n static type = 'ActiveSelection';\n\n static ownDefaults: Record<string, any> = activeSelectionDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return { ...super.getDefaults(), ...ActiveSelection.ownDefaults };\n }\n\n /**\n * The ActiveSelection needs to use the ActiveSelectionLayoutManager\n * or selections on interactive groups may be broken\n */\n declare layoutManager: ActiveSelectionLayoutManager;\n\n /**\n * controls how selected objects are added during a multiselection event\n * - `canvas-stacking` adds the selected object to the active selection while respecting canvas object stacking order\n * - `selection-order` adds the selected object to the top of the stack,\n * meaning that the stack is ordered by the order in which objects were selected\n * @default `canvas-stacking`\n */\n declare multiSelectionStacking: MultiSelectionStacking;\n\n constructor(\n objects: FabricObject[] = [],\n options: Partial<ActiveSelectionOptions> = {}\n ) {\n super();\n Object.assign(this, ActiveSelection.ownDefaults);\n this.setOptions(options);\n const { left, top, layoutManager } = options;\n this.groupInit(objects, {\n left,\n top,\n layoutManager: layoutManager ?? new ActiveSelectionLayoutManager(),\n });\n }\n\n /**\n * @private\n */\n _shouldSetNestedCoords() {\n return true;\n }\n\n /**\n * @private\n * @override we don't want the selection monitor to be active\n */\n __objectSelectionMonitor() {\n // noop\n }\n\n /**\n * Adds objects with respect to {@link multiSelectionStacking}\n * @param targets object to add to selection\n */\n multiSelectAdd(...targets: FabricObject[]) {\n if (this.multiSelectionStacking === 'selection-order') {\n this.add(...targets);\n } else {\n // respect object stacking as it is on canvas\n // perf enhancement for large ActiveSelection: consider a binary search of `isInFrontOf`\n targets.forEach((target) => {\n const index = this._objects.findIndex((obj) => obj.isInFrontOf(target));\n const insertAt =\n index === -1\n ? // `target` is in front of all other objects\n this.size()\n : index;\n this.insertAt(insertAt, target);\n });\n }\n }\n\n /**\n * @override block ancestors/descendants of selected objects from being selected to prevent a circular object tree\n */\n canEnterGroup(object: FabricObject) {\n if (\n this.getObjects().some(\n (o) => o.isDescendantOf(object) || object.isDescendantOf(o)\n )\n ) {\n // prevent circular object tree\n log(\n 'error',\n 'ActiveSelection: circular object trees are not supported, this call has no effect'\n );\n return false;\n }\n\n return super.canEnterGroup(object);\n }\n\n /**\n * Change an object so that it can be part of an active selection.\n * this method is called by multiselectAdd from canvas code.\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 // This condition check that the object has currently a group, and the group\n // is also its parent, meaning that is not in an active selection, but is\n // in a normal group.\n if (object.parent && object.parent === object.group) {\n // Disconnect the object from the group functionalities, but keep the ref parent intact\n // for later re-enter\n object.parent._exitGroup(object);\n // in this case the object is probably inside an active selection.\n } else if (object.group && object.parent !== object.group) {\n // in this case group.remove will also clear the old parent reference.\n object.group.remove(object);\n }\n // enter the active selection from a render perspective\n // the object will be in the objects array of both the ActiveSelection and the Group\n // but referenced in the group's _activeObjects so that it won't be rendered twice.\n this._enterGroup(object, removeParentTransform);\n }\n\n /**\n * we want objects to retain their canvas ref when exiting instance\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 // return to parent\n object.parent && object.parent._enterGroup(object, true);\n }\n\n /**\n * @private\n * @param {'added'|'removed'} type\n * @param {FabricObject[]} targets\n */\n _onAfterObjectsChange(type: 'added' | 'removed', targets: FabricObject[]) {\n super._onAfterObjectsChange(type, targets);\n const groups = new Set<Group>();\n targets.forEach((object) => {\n const { parent } = object;\n parent && groups.add(parent);\n });\n if (type === LAYOUT_TYPE_REMOVED) {\n // invalidate groups' layout and mark as dirty\n groups.forEach((group) => {\n group._onAfterObjectsChange(LAYOUT_TYPE_ADDED, targets);\n });\n } else {\n // mark groups as dirty\n groups.forEach((group) => {\n group._set('dirty', true);\n });\n }\n }\n\n /**\n * @override remove all objects\n */\n onDeselect() {\n this.removeAll();\n return false;\n }\n\n /**\n * Returns string representation of a group\n * @return {String}\n */\n toString() {\n return `#<ActiveSelection: (${this.complexity()})>`;\n }\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\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 outside is cached.\n * @return {Boolean}\n */\n shouldCache() {\n return false;\n }\n\n /**\n * Check if this group or its parent group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache() {\n return false;\n }\n\n /**\n * Renders controls and borders for the object\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [styleOverride] properties to override the object style\n * @param {Object} [childrenOverride] properties to override the children overrides\n */\n _renderControls(\n ctx: CanvasRenderingContext2D,\n styleOverride?: ControlRenderingStyleOverride,\n childrenOverride?: ControlRenderingStyleOverride\n ) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n const options = {\n hasControls: false,\n ...childrenOverride,\n forActiveSelection: true,\n };\n for (let i = 0; i < this._objects.length; i++) {\n this._objects[i]._renderControls(ctx, options);\n }\n super._renderControls(ctx, styleOverride);\n ctx.restore();\n }\n}\n\nclassRegistry.setClass(ActiveSelection);\nclassRegistry.setClass(ActiveSelection, 'activeSelection');\n"],"names":["activeSelectionDefaultValues","multiSelectionStacking","ActiveSelection","Group","getDefaults","_objectSpread","ownDefaults","constructor","objects","arguments","length","undefined","options","Object","assign","setOptions","left","top","layoutManager","groupInit","ActiveSelectionLayoutManager","_shouldSetNestedCoords","__objectSelectionMonitor","multiSelectAdd","_len","targets","Array","_key","add","forEach","target","index","_objects","findIndex","obj","isInFrontOf","insertAt","size","canEnterGroup","object","getObjects","some","o","isDescendantOf","log","enterGroup","removeParentTransform","parent","group","_exitGroup","remove","_enterGroup","exitGroup","_onAfterObjectsChange","type","groups","Set","LAYOUT_TYPE_REMOVED","LAYOUT_TYPE_ADDED","_set","onDeselect","removeAll","toString","concat","complexity","shouldCache","isOnACache","_renderControls","ctx","styleOverride","childrenOverride","save","globalAlpha","isMoving","borderOpacityWhenMoving","hasControls","forActiveSelection","i","restore","_defineProperty","classRegistry","setClass"],"mappings":"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"}
@@ -111,6 +111,15 @@ export declare class Group extends Group_base implements GroupProps {
111
111
  * @param {Object} [options] Options object
112
112
  */
113
113
  constructor(objects?: FabricObject[], options?: Partial<GroupProps>);
114
+ /**
115
+ * Shared code between group and active selection
116
+ * Meant to be used by the constructor.
117
+ */
118
+ protected groupInit(objects: FabricObject[], options: {
119
+ layoutManager?: LayoutManager;
120
+ top?: number;
121
+ left?: number;
122
+ }): void;
114
123
  /**
115
124
  * Checks if object can enter group and logs relevant warnings
116
125
  * @private
@@ -1 +1 @@
1
- {"version":3,"file":"Group.d.ts","sourceRoot":"","sources":["../../../src/shapes/Group.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Group.d.ts","sourceRoot":"","sources":["../../../src/shapes/Group.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as t,objectSpread2 as e,objectWithoutProperties as s}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{createCollectionMixin as r}from"../Collection.min.mjs";import{multiplyTransformMatrices as i,invertTransform as o}from"../util/misc/matrix.min.mjs";import{enlivenObjects as a,enlivenObjectEnlivables as n}from"../util/misc/objectEnlive.min.mjs";import{applyTransformToObject as c}from"../util/misc/objectTransforms.min.mjs";import{FabricObject as h}from"./Object/FabricObject.min.mjs";import{Rect as l}from"./Rect.min.mjs";import{classRegistry as u}from"../ClassRegistry.min.mjs";import{log as p}from"../util/internals/console.min.mjs";import{LayoutManager as _}from"../LayoutManager/LayoutManager.min.mjs";import{LAYOUT_TYPE_INITIALIZATION as d,LAYOUT_TYPE_ADDED as b,LAYOUT_TYPE_REMOVED as g,LAYOUT_TYPE_IMPERATIVE as j}from"../LayoutManager/constants.min.mjs";const f=["type","objects","layoutManager"];class m extends _{performLayout(){}}const O={strokeWidth:0,subTargetCheck:!1,interactive:!1};class v extends(r(h)){static getDefaults(){return e(e({},super.getDefaults()),v.ownDefaults)}constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),t(this,"_activeObjects",[]),t(this,"__objectSelectionTracker",void 0),t(this,"__objectSelectionDisposer",void 0),Object.assign(this,v.ownDefaults),this.setOptions(s),this._objects=[...e],this.__objectSelectionTracker=this.__objectSelectionMonitor.bind(this,!0),this.__objectSelectionDisposer=this.__objectSelectionMonitor.bind(this,!1),this.forEachObject((t=>{this.enterGroup(t,!1)})),this.layoutManager=s.layoutManager||new _,this.layoutManager.performLayout({type:d,target:this,targets:[...e],x:s.left,y:s.top})}canEnterGroup(t){return t===this||this.isDescendantOf(t)?(p("error","Group: circular object trees are not supported, this call has no effect"),!1):-1===this._objects.indexOf(t)||(p("error","Group: duplicate objects are not supported inside group, this call has no effect"),!1)}_filterObjectsBeforeEnteringGroup(t){return t.filter(((t,e,s)=>this.canEnterGroup(t)&&s.indexOf(t)===e))}add(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];const r=this._filterObjectsBeforeEnteringGroup(e),i=super.add(...r);return this._onAfterObjectsChange(b,r),i}insertAt(t){for(var e=arguments.length,s=new Array(e>1?e-1:0),r=1;r<e;r++)s[r-1]=arguments[r];const i=this._filterObjectsBeforeEnteringGroup(s),o=super.insertAt(t,...i);return this._onAfterObjectsChange(b,i),o}remove(){const t=super.remove(...arguments);return this._onAfterObjectsChange(g,t),t}_onObjectAdded(t){this.enterGroup(t,!0),this.fire("object:added",{target:t}),t.fire("added",{target:this})}_onObjectRemoved(t,e){this.exitGroup(t,e),this.fire("object:removed",{target:t}),t.fire("removed",{target:this})}_onAfterObjectsChange(t,e){this.layoutManager.performLayout({type:t,targets:e,target:this})}_onStackOrderChanged(){this._set("dirty",!0)}_set(t,e){const s=this[t];return super._set(t,e),"canvas"===t&&s!==e&&(this._objects||[]).forEach((s=>{s._set(t,e)})),this}_shouldSetNestedCoords(){return this.subTargetCheck}removeAll(){return this._activeObjects=[],this.remove(...this._objects)}__objectSelectionMonitor(t,e){let{target:s}=e;const r=this._activeObjects;if(t)r.push(s),this._set("dirty",!0);else if(r.length>0){const t=r.indexOf(s);t>-1&&(r.splice(t,1),this._set("dirty",!0))}}_watchObject(t,e){t&&this._watchObject(!1,e),t?(e.on("selected",this.__objectSelectionTracker),e.on("deselected",this.__objectSelectionDisposer)):(e.off("selected",this.__objectSelectionTracker),e.off("deselected",this.__objectSelectionDisposer))}enterGroup(t,e){t.group&&t.group.remove(t),t._set("parent",this),this._enterGroup(t,e)}_enterGroup(t,e){e&&c(t,i(o(this.calcTransformMatrix()),t.calcTransformMatrix())),this._shouldSetNestedCoords()&&t.setCoords(),t._set("group",this),t._set("canvas",this.canvas),this._watchObject(!0,t);const s=this.canvas&&this.canvas.getActiveObject&&this.canvas.getActiveObject();s&&(s===t||t.isDescendantOf(s))&&this._activeObjects.push(t)}exitGroup(t,e){this._exitGroup(t,e),t._set("parent",void 0),t._set("canvas",void 0)}_exitGroup(t,e){t._set("group",void 0),e||(c(t,i(this.calcTransformMatrix(),t.calcTransformMatrix())),t.setCoords()),this._watchObject(!1,t);const s=this._activeObjects.length>0?this._activeObjects.indexOf(t):-1;s>-1&&this._activeObjects.splice(s,1)}shouldCache(){const t=h.prototype.shouldCache.call(this);if(t)for(let t=0;t<this._objects.length;t++)if(this._objects[t].willDrawShadow())return this.ownCaching=!1,!1;return t}willDrawShadow(){if(super.willDrawShadow())return!0;for(let t=0;t<this._objects.length;t++)if(this._objects[t].willDrawShadow())return!0;return!1}isOnACache(){return this.ownCaching||!!this.parent&&this.parent.isOnACache()}drawObject(t){this._renderBackground(t);for(let s=0;s<this._objects.length;s++){var e;null!==(e=this.canvas)&&void 0!==e&&e.preserveObjectStacking&&this._objects[s].group!==this?(t.save(),t.transform(...o(this.calcTransformMatrix())),this._objects[s].render(t),t.restore()):this._objects[s].group===this&&this._objects[s].render(t)}this._drawClipPath(t,this.clipPath)}setCoords(){super.setCoords(),this._shouldSetNestedCoords()&&this.forEachObject((t=>t.setCoords()))}triggerLayout(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.layoutManager.performLayout(e({target:this,type:j},t))}render(t){this._transformDone=!0,super.render(t),this._transformDone=!1}__serializeObjects(t,e){const s=this.includeDefaultValues;return this._objects.filter((function(t){return!t.excludeFromExport})).map((function(r){const i=r.includeDefaultValues;r.includeDefaultValues=s;const o=r[t||"toObject"](e);return r.includeDefaultValues=i,o}))}toObject(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];const s=this.layoutManager.toObject();return e(e(e({},super.toObject(["subTargetCheck","interactive",...t])),"fit-content"!==s.strategy||this.includeDefaultValues?{layoutManager:s}:{}),{},{objects:this.__serializeObjects("toObject",t)})}toString(){return"#<Group: (".concat(this.complexity(),")>")}dispose(){this.layoutManager.unsubscribeTargets({targets:this.getObjects(),target:this}),this._activeObjects=[],this.forEachObject((t=>{this._watchObject(!1,t),t.dispose()})),super.dispose()}_createSVGBgRect(t){if(!this.backgroundColor)return"";const e=l.prototype._toSVG.call(this),s=e.indexOf("COMMON_PARTS");e[s]='for="group" ';const r=e.join("");return t?t(r):r}_toSVG(t){const e=["<g ","COMMON_PARTS"," >\n"],s=this._createSVGBgRect(t);s&&e.push("\t\t",s);for(let s=0;s<this._objects.length;s++)e.push("\t\t",this._objects[s].toSVG(t));return e.push("</g>\n"),e}getSvgStyles(){const t=void 0!==this.opacity&&1!==this.opacity?"opacity: ".concat(this.opacity,";"):"",e=this.visible?"":" visibility: hidden;";return[t,this.getSvgFilter(),e].join("")}toClipPathSVG(t){const e=[],s=this._createSVGBgRect(t);s&&e.push("\t",s);for(let s=0;s<this._objects.length;s++)e.push("\t",this._objects[s].toClipPathSVG(t));return this._createBaseClipPathSVGMarkup(e,{reviver:t})}static fromObject(t,r){let{type:i,objects:o=[],layoutManager:c}=t,h=s(t,f);return Promise.all([a(o,r),n(h,r)]).then((t=>{let[s,r]=t;const i=new this(s,e(e(e({},h),r),{},{layoutManager:new m}));if(c){const t=u.getClass(c.type),e=u.getClass(c.strategy);i.layoutManager=new t(new e)}else i.layoutManager=new _;return i.layoutManager.subscribeTargets({type:d,target:i,targets:i.getObjects()}),i.setCoords(),i}))}}t(v,"type","Group"),t(v,"ownDefaults",O),u.setClass(v);export{v as Group,O as groupDefaultValues};
1
+ import{defineProperty as t,objectSpread2 as e,objectWithoutProperties as s}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{createCollectionMixin as r}from"../Collection.min.mjs";import{multiplyTransformMatrices as i,invertTransform as o}from"../util/misc/matrix.min.mjs";import{enlivenObjects as a,enlivenObjectEnlivables as n}from"../util/misc/objectEnlive.min.mjs";import{applyTransformToObject as c}from"../util/misc/objectTransforms.min.mjs";import{FabricObject as h}from"./Object/FabricObject.min.mjs";import{Rect as l}from"./Rect.min.mjs";import{classRegistry as u}from"../ClassRegistry.min.mjs";import{log as p}from"../util/internals/console.min.mjs";import{LayoutManager as _}from"../LayoutManager/LayoutManager.min.mjs";import{LAYOUT_TYPE_INITIALIZATION as d,LAYOUT_TYPE_ADDED as g,LAYOUT_TYPE_REMOVED as b,LAYOUT_TYPE_IMPERATIVE as j}from"../LayoutManager/constants.min.mjs";const f=["type","objects","layoutManager"];class m extends _{performLayout(){}}const O={strokeWidth:0,subTargetCheck:!1,interactive:!1};class v extends(r(h)){static getDefaults(){return e(e({},super.getDefaults()),v.ownDefaults)}constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),t(this,"_activeObjects",[]),t(this,"__objectSelectionTracker",void 0),t(this,"__objectSelectionDisposer",void 0),Object.assign(this,v.ownDefaults),this.setOptions(s),this.groupInit(e,s)}groupInit(t,e){var s;this._objects=[...t],this.__objectSelectionTracker=this.__objectSelectionMonitor.bind(this,!0),this.__objectSelectionDisposer=this.__objectSelectionMonitor.bind(this,!1),this.forEachObject((t=>{this.enterGroup(t,!1)})),this.layoutManager=null!==(s=e.layoutManager)&&void 0!==s?s:new _,this.layoutManager.performLayout({type:d,target:this,targets:[...t],x:e.left,y:e.top})}canEnterGroup(t){return t===this||this.isDescendantOf(t)?(p("error","Group: circular object trees are not supported, this call has no effect"),!1):-1===this._objects.indexOf(t)||(p("error","Group: duplicate objects are not supported inside group, this call has no effect"),!1)}_filterObjectsBeforeEnteringGroup(t){return t.filter(((t,e,s)=>this.canEnterGroup(t)&&s.indexOf(t)===e))}add(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];const r=this._filterObjectsBeforeEnteringGroup(e),i=super.add(...r);return this._onAfterObjectsChange(g,r),i}insertAt(t){for(var e=arguments.length,s=new Array(e>1?e-1:0),r=1;r<e;r++)s[r-1]=arguments[r];const i=this._filterObjectsBeforeEnteringGroup(s),o=super.insertAt(t,...i);return this._onAfterObjectsChange(g,i),o}remove(){const t=super.remove(...arguments);return this._onAfterObjectsChange(b,t),t}_onObjectAdded(t){this.enterGroup(t,!0),this.fire("object:added",{target:t}),t.fire("added",{target:this})}_onObjectRemoved(t,e){this.exitGroup(t,e),this.fire("object:removed",{target:t}),t.fire("removed",{target:this})}_onAfterObjectsChange(t,e){this.layoutManager.performLayout({type:t,targets:e,target:this})}_onStackOrderChanged(){this._set("dirty",!0)}_set(t,e){const s=this[t];return super._set(t,e),"canvas"===t&&s!==e&&(this._objects||[]).forEach((s=>{s._set(t,e)})),this}_shouldSetNestedCoords(){return this.subTargetCheck}removeAll(){return this._activeObjects=[],this.remove(...this._objects)}__objectSelectionMonitor(t,e){let{target:s}=e;const r=this._activeObjects;if(t)r.push(s),this._set("dirty",!0);else if(r.length>0){const t=r.indexOf(s);t>-1&&(r.splice(t,1),this._set("dirty",!0))}}_watchObject(t,e){t&&this._watchObject(!1,e),t?(e.on("selected",this.__objectSelectionTracker),e.on("deselected",this.__objectSelectionDisposer)):(e.off("selected",this.__objectSelectionTracker),e.off("deselected",this.__objectSelectionDisposer))}enterGroup(t,e){t.group&&t.group.remove(t),t._set("parent",this),this._enterGroup(t,e)}_enterGroup(t,e){e&&c(t,i(o(this.calcTransformMatrix()),t.calcTransformMatrix())),this._shouldSetNestedCoords()&&t.setCoords(),t._set("group",this),t._set("canvas",this.canvas),this._watchObject(!0,t);const s=this.canvas&&this.canvas.getActiveObject&&this.canvas.getActiveObject();s&&(s===t||t.isDescendantOf(s))&&this._activeObjects.push(t)}exitGroup(t,e){this._exitGroup(t,e),t._set("parent",void 0),t._set("canvas",void 0)}_exitGroup(t,e){t._set("group",void 0),e||(c(t,i(this.calcTransformMatrix(),t.calcTransformMatrix())),t.setCoords()),this._watchObject(!1,t);const s=this._activeObjects.length>0?this._activeObjects.indexOf(t):-1;s>-1&&this._activeObjects.splice(s,1)}shouldCache(){const t=h.prototype.shouldCache.call(this);if(t)for(let t=0;t<this._objects.length;t++)if(this._objects[t].willDrawShadow())return this.ownCaching=!1,!1;return t}willDrawShadow(){if(super.willDrawShadow())return!0;for(let t=0;t<this._objects.length;t++)if(this._objects[t].willDrawShadow())return!0;return!1}isOnACache(){return this.ownCaching||!!this.parent&&this.parent.isOnACache()}drawObject(t){this._renderBackground(t);for(let s=0;s<this._objects.length;s++){var e;null!==(e=this.canvas)&&void 0!==e&&e.preserveObjectStacking&&this._objects[s].group!==this?(t.save(),t.transform(...o(this.calcTransformMatrix())),this._objects[s].render(t),t.restore()):this._objects[s].group===this&&this._objects[s].render(t)}this._drawClipPath(t,this.clipPath)}setCoords(){super.setCoords(),this._shouldSetNestedCoords()&&this.forEachObject((t=>t.setCoords()))}triggerLayout(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.layoutManager.performLayout(e({target:this,type:j},t))}render(t){this._transformDone=!0,super.render(t),this._transformDone=!1}__serializeObjects(t,e){const s=this.includeDefaultValues;return this._objects.filter((function(t){return!t.excludeFromExport})).map((function(r){const i=r.includeDefaultValues;r.includeDefaultValues=s;const o=r[t||"toObject"](e);return r.includeDefaultValues=i,o}))}toObject(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];const s=this.layoutManager.toObject();return e(e(e({},super.toObject(["subTargetCheck","interactive",...t])),"fit-content"!==s.strategy||this.includeDefaultValues?{layoutManager:s}:{}),{},{objects:this.__serializeObjects("toObject",t)})}toString(){return"#<Group: (".concat(this.complexity(),")>")}dispose(){this.layoutManager.unsubscribeTargets({targets:this.getObjects(),target:this}),this._activeObjects=[],this.forEachObject((t=>{this._watchObject(!1,t),t.dispose()})),super.dispose()}_createSVGBgRect(t){if(!this.backgroundColor)return"";const e=l.prototype._toSVG.call(this),s=e.indexOf("COMMON_PARTS");e[s]='for="group" ';const r=e.join("");return t?t(r):r}_toSVG(t){const e=["<g ","COMMON_PARTS"," >\n"],s=this._createSVGBgRect(t);s&&e.push("\t\t",s);for(let s=0;s<this._objects.length;s++)e.push("\t\t",this._objects[s].toSVG(t));return e.push("</g>\n"),e}getSvgStyles(){const t=void 0!==this.opacity&&1!==this.opacity?"opacity: ".concat(this.opacity,";"):"",e=this.visible?"":" visibility: hidden;";return[t,this.getSvgFilter(),e].join("")}toClipPathSVG(t){const e=[],s=this._createSVGBgRect(t);s&&e.push("\t",s);for(let s=0;s<this._objects.length;s++)e.push("\t",this._objects[s].toClipPathSVG(t));return this._createBaseClipPathSVGMarkup(e,{reviver:t})}static fromObject(t,r){let{type:i,objects:o=[],layoutManager:c}=t,h=s(t,f);return Promise.all([a(o,r),n(h,r)]).then((t=>{let[s,r]=t;const i=new this(s,e(e(e({},h),r),{},{layoutManager:new m}));if(c){const t=u.getClass(c.type),e=u.getClass(c.strategy);i.layoutManager=new t(new e)}else i.layoutManager=new _;return i.layoutManager.subscribeTargets({type:d,target:i,targets:i.getObjects()}),i.setCoords(),i}))}}t(v,"type","Group"),t(v,"ownDefaults",O),u.setClass(v);export{v as Group,O as groupDefaultValues};
2
2
  //# sourceMappingURL=Group.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Group.min.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._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","super","ownDefaults","constructor","objects","arguments","length","undefined","options","_defineProperty","this","Object","assign","setOptions","_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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"}
1
+ {"version":3,"file":"Group.min.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","super","ownDefaults","constructor","objects","arguments","length","undefined","options","_defineProperty","this","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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"}
@@ -77,6 +77,15 @@ class Group extends createCollectionMixin(FabricObject) {
77
77
  _defineProperty(this, "__objectSelectionDisposer", void 0);
78
78
  Object.assign(this, Group.ownDefaults);
79
79
  this.setOptions(options);
80
+ this.groupInit(objects, options);
81
+ }
82
+
83
+ /**
84
+ * Shared code between group and active selection
85
+ * Meant to be used by the constructor.
86
+ */
87
+ groupInit(objects, options) {
88
+ var _options$layoutManage;
80
89
  this._objects = [...objects]; // Avoid unwanted mutations of Collection to affect the caller
81
90
 
82
91
  this.__objectSelectionTracker = this.__objectSelectionMonitor.bind(this, true);
@@ -86,7 +95,7 @@ class Group extends createCollectionMixin(FabricObject) {
86
95
  });
87
96
 
88
97
  // perform initial layout
89
- this.layoutManager = options.layoutManager || new LayoutManager();
98
+ this.layoutManager = (_options$layoutManage = options.layoutManager) !== null && _options$layoutManage !== void 0 ? _options$layoutManage : new LayoutManager();
90
99
  this.layoutManager.performLayout({
91
100
  type: LAYOUT_TYPE_INITIALIZATION,
92
101
  target: this,
@@ -1 +1 @@
1
- {"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._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","_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":";;;;;;;;;;;;;AAqCA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,iBAAiB,SAASC,aAAa,CAAC;AAC5C;EACAC,aAAaA,GAAG,EAAC;AACnB,CAAA;AAuBO,MAAMC,kBAAoD,GAAG;AAClEC,EAAAA,WAAW,EAAE,CAAC;AACdC,EAAAA,cAAc,EAAE,KAAK;AACrBC,EAAAA,WAAW,EAAE,KAAA;AACf,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,KAAK,SACRC,qBAAqB,CAC3BC,YACF,CAAC,CAEH;EAuCE,OAAOC,WAAWA,GAAwB;AACxC,IAAA,OAAAC,cAAA,CAAAA,cAAA,CAAA,EAAA,EACK,KAAK,CAACD,WAAW,EAAE,CAAA,EACnBH,KAAK,CAACK,WAAW,CAAA,CAAA;AAExB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEC,EAAAA,WAAWA,GAAkE;AAAA,IAAA,IAAjEC,OAAuB,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;AAAA,IAAA,IAAEG,OAA4B,GAAAH,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;AACzE,IAAA,KAAK,EAAE,CAAA;AApDT;AACF;AACA;AACA;AACA;AACA;AAGE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKE;AACF;AACA;AACA;AACA;AACA;AALEI,IAAAA,eAAA,yBAM2C,EAAE,CAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,0BAAA,EAAA,KAAA,CAAA,CAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,2BAAA,EAAA,KAAA,CAAA,CAAA,CAAA;IAuB3CC,MAAM,CAACC,MAAM,CAAC,IAAI,EAAEd,KAAK,CAACK,WAAW,CAAC,CAAA;AACtC,IAAA,IAAI,CAACU,UAAU,CAACJ,OAAO,CAAC,CAAA;IACxB,IAAI,CAACK,QAAQ,GAAG,CAAC,GAAGT,OAAO,CAAC,CAAC;;AAE7B,IAAA,IAAI,CAACU,wBAAwB,GAAG,IAAI,CAACC,wBAAwB,CAACC,IAAI,CAChE,IAAI,EACJ,IACF,CAAC,CAAA;AACD,IAAA,IAAI,CAACC,yBAAyB,GAAG,IAAI,CAACF,wBAAwB,CAACC,IAAI,CACjE,IAAI,EACJ,KACF,CAAC,CAAA;AAED,IAAA,IAAI,CAACE,aAAa,CAAEC,MAAM,IAAK;AAC7B,MAAA,IAAI,CAACC,UAAU,CAACD,MAAM,EAAE,KAAK,CAAC,CAAA;AAChC,KAAC,CAAC,CAAA;;AAEF;IACA,IAAI,CAACE,aAAa,GAAGb,OAAO,CAACa,aAAa,IAAI,IAAI9B,aAAa,EAAE,CAAA;AACjE,IAAA,IAAI,CAAC8B,aAAa,CAAC7B,aAAa,CAAC;AAC/B8B,MAAAA,IAAI,EAAEC,0BAA0B;AAChCC,MAAAA,MAAM,EAAE,IAAI;AACZC,MAAAA,OAAO,EAAE,CAAC,GAAGrB,OAAO,CAAC;AACrB;AACA;AACA;MACAsB,CAAC,EAAElB,OAAO,CAACmB,IAAI;MACfC,CAAC,EAAEpB,OAAO,CAACqB,GAAAA;AACb,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEC,aAAaA,CAACX,MAAoB,EAAE;IAClC,IAAIA,MAAM,KAAK,IAAI,IAAI,IAAI,CAACY,cAAc,CAACZ,MAAM,CAAC,EAAE;AAClD;AACAa,MAAAA,GAAG,CACD,OAAO,EACP,yEACF,CAAC,CAAA;AACD,MAAA,OAAO,KAAK,CAAA;AACd,KAAC,MAAM,IAAI,IAAI,CAACnB,QAAQ,CAACoB,OAAO,CAACd,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AAC/C;AACAa,MAAAA,GAAG,CACD,OAAO,EACP,kFACF,CAAC,CAAA;AACD,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;AACA,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACYE,iCAAiCA,CAAC9B,OAAuB,EAAE;IACnE,OAAOA,OAAO,CAAC+B,MAAM,CAAC,CAAChB,MAAM,EAAEiB,KAAK,EAAEC,KAAK,KAAK;AAC9C;AACA,MAAA,OAAO,IAAI,CAACP,aAAa,CAACX,MAAM,CAAC,IAAIkB,KAAK,CAACJ,OAAO,CAACd,MAAM,CAAC,KAAKiB,KAAK,CAAA;AACtE,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACEE,EAAAA,GAAGA,GAA6B;AAAA,IAAA,KAAA,IAAAC,IAAA,GAAAlC,SAAA,CAAAC,MAAA,EAAzBF,OAAO,GAAAoC,IAAAA,KAAA,CAAAD,IAAA,GAAAE,IAAA,GAAA,CAAA,EAAAA,IAAA,GAAAF,IAAA,EAAAE,IAAA,EAAA,EAAA;AAAPrC,MAAAA,OAAO,CAAAqC,IAAA,CAAApC,GAAAA,SAAA,CAAAoC,IAAA,CAAA,CAAA;AAAA,KAAA;AACZ,IAAA,MAAMC,cAAc,GAAG,IAAI,CAACR,iCAAiC,CAAC9B,OAAO,CAAC,CAAA;IACtE,MAAMuC,IAAI,GAAG,KAAK,CAACL,GAAG,CAAC,GAAGI,cAAc,CAAC,CAAA;AACzC,IAAA,IAAI,CAACE,qBAAqB,CAACC,iBAAiB,EAAEH,cAAc,CAAC,CAAA;AAC7D,IAAA,OAAOC,IAAI,CAAA;AACb,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEG,QAAQA,CAACV,KAAa,EAA8B;IAAA,KAAAW,IAAAA,KAAA,GAAA1C,SAAA,CAAAC,MAAA,EAAzBF,OAAO,OAAAoC,KAAA,CAAAO,KAAA,GAAAA,CAAAA,GAAAA,KAAA,WAAAC,KAAA,GAAA,CAAA,EAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA,EAAA,EAAA;AAAP5C,MAAAA,OAAO,CAAA4C,KAAA,GAAA3C,CAAAA,CAAAA,GAAAA,SAAA,CAAA2C,KAAA,CAAA,CAAA;AAAA,KAAA;AAChC,IAAA,MAAMN,cAAc,GAAG,IAAI,CAACR,iCAAiC,CAAC9B,OAAO,CAAC,CAAA;IACtE,MAAMuC,IAAI,GAAG,KAAK,CAACG,QAAQ,CAACV,KAAK,EAAE,GAAGM,cAAc,CAAC,CAAA;AACrD,IAAA,IAAI,CAACE,qBAAqB,CAACC,iBAAiB,EAAEH,cAAc,CAAC,CAAA;AAC7D,IAAA,OAAOC,IAAI,CAAA;AACb,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACEM,EAAAA,MAAMA,GAA6B;IACjC,MAAMC,OAAO,GAAG,KAAK,CAACD,MAAM,CAAC,GAAA5C,SAAU,CAAC,CAAA;AACxC,IAAA,IAAI,CAACuC,qBAAqB,CAACO,mBAAmB,EAAED,OAAO,CAAC,CAAA;AACxD,IAAA,OAAOA,OAAO,CAAA;AAChB,GAAA;EAEAE,cAAcA,CAACjC,MAAoB,EAAE;AACnC,IAAA,IAAI,CAACC,UAAU,CAACD,MAAM,EAAE,IAAI,CAAC,CAAA;AAC7B,IAAA,IAAI,CAACkC,IAAI,CAAC,cAAc,EAAE;AAAE7B,MAAAA,MAAM,EAAEL,MAAAA;AAAO,KAAC,CAAC,CAAA;AAC7CA,IAAAA,MAAM,CAACkC,IAAI,CAAC,OAAO,EAAE;AAAE7B,MAAAA,MAAM,EAAE,IAAA;AAAK,KAAC,CAAC,CAAA;AACxC,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACE8B,EAAAA,gBAAgBA,CAACnC,MAAoB,EAAEoC,qBAA+B,EAAE;AACtE,IAAA,IAAI,CAACC,SAAS,CAACrC,MAAM,EAAEoC,qBAAqB,CAAC,CAAA;AAC7C,IAAA,IAAI,CAACF,IAAI,CAAC,gBAAgB,EAAE;AAAE7B,MAAAA,MAAM,EAAEL,MAAAA;AAAO,KAAC,CAAC,CAAA;AAC/CA,IAAAA,MAAM,CAACkC,IAAI,CAAC,SAAS,EAAE;AAAE7B,MAAAA,MAAM,EAAE,IAAA;AAAK,KAAC,CAAC,CAAA;AAC1C,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACEoB,EAAAA,qBAAqBA,CAACtB,IAAyB,EAAEG,OAAuB,EAAE;AACxE,IAAA,IAAI,CAACJ,aAAa,CAAC7B,aAAa,CAAC;MAC/B8B,IAAI;MACJG,OAAO;AACPD,MAAAA,MAAM,EAAE,IAAA;AACV,KAAC,CAAC,CAAA;AACJ,GAAA;AAEAiC,EAAAA,oBAAoBA,GAAG;AACrB,IAAA,IAAI,CAACC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AAC1B,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACEA,EAAAA,IAAIA,CAACC,GAAW,EAAEC,KAAU,EAAE;AAC5B,IAAA,MAAMC,IAAI,GAAG,IAAI,CAACF,GAAG,CAAe,CAAA;AACpC,IAAA,KAAK,CAACD,IAAI,CAACC,GAAG,EAAEC,KAAK,CAAC,CAAA;AACtB,IAAA,IAAID,GAAG,KAAK,QAAQ,IAAIE,IAAI,KAAKD,KAAK,EAAE;MACtC,CAAC,IAAI,CAAC/C,QAAQ,IAAI,EAAE,EAAEiD,OAAO,CAAE3C,MAAM,IAAK;AACxCA,QAAAA,MAAM,CAACuC,IAAI,CAACC,GAAG,EAAEC,KAAK,CAAC,CAAA;AACzB,OAAC,CAAC,CAAA;AACJ,KAAA;AACA,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;;AAEA;AACF;AACA;AACEG,EAAAA,sBAAsBA,GAAG;IACvB,OAAO,IAAI,CAACpE,cAAc,CAAA;AAC5B,GAAA;;AAEA;AACF;AACA;AACA;AACEqE,EAAAA,SAASA,GAAG;IACV,IAAI,CAACC,cAAc,GAAG,EAAE,CAAA;IACxB,OAAO,IAAI,CAAChB,MAAM,CAAC,GAAG,IAAI,CAACpC,QAAQ,CAAC,CAAA;AACtC,GAAA;;AAEA;AACF;AACA;AACA;AACEE,EAAAA,wBAAwBA,CACtBmD,QAAW,EAAAC,IAAA,EAEX;IAAA,IADA;AAAE3C,MAAAA,MAAM,EAAEL,MAAAA;AAAiE,KAAC,GAAAgD,IAAA,CAAA;AAE5E,IAAA,MAAMC,aAAa,GAAG,IAAI,CAACH,cAAc,CAAA;AACzC,IAAA,IAAIC,QAAQ,EAAE;AACZE,MAAAA,aAAa,CAACC,IAAI,CAAClD,MAAM,CAAC,CAAA;AAC1B,MAAA,IAAI,CAACuC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AAC1B,KAAC,MAAM,IAAIU,aAAa,CAAC9D,MAAM,GAAG,CAAC,EAAE;AACnC,MAAA,MAAM8B,KAAK,GAAGgC,aAAa,CAACnC,OAAO,CAACd,MAAM,CAAC,CAAA;AAC3C,MAAA,IAAIiB,KAAK,GAAG,CAAC,CAAC,EAAE;AACdgC,QAAAA,aAAa,CAACE,MAAM,CAAClC,KAAK,EAAE,CAAC,CAAC,CAAA;AAC9B,QAAA,IAAI,CAACsB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AAC1B,OAAA;AACF,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACEa,EAAAA,YAAYA,CAACC,KAAc,EAAErD,MAAoB,EAAE;AACjD;IACAqD,KAAK,IAAI,IAAI,CAACD,YAAY,CAAC,KAAK,EAAEpD,MAAM,CAAC,CAAA;AACzC,IAAA,IAAIqD,KAAK,EAAE;MACTrD,MAAM,CAACsD,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC3D,wBAAwB,CAAC,CAAA;MACpDK,MAAM,CAACsD,EAAE,CAAC,YAAY,EAAE,IAAI,CAACxD,yBAAyB,CAAC,CAAA;AACzD,KAAC,MAAM;MACLE,MAAM,CAACuD,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC5D,wBAAwB,CAAC,CAAA;MACrDK,MAAM,CAACuD,GAAG,CAAC,YAAY,EAAE,IAAI,CAACzD,yBAAyB,CAAC,CAAA;AAC1D,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACEG,EAAAA,UAAUA,CAACD,MAAoB,EAAEoC,qBAA+B,EAAE;IAChEpC,MAAM,CAACwD,KAAK,IAAIxD,MAAM,CAACwD,KAAK,CAAC1B,MAAM,CAAC9B,MAAM,CAAC,CAAA;AAC3CA,IAAAA,MAAM,CAACuC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;AAC3B,IAAA,IAAI,CAACkB,WAAW,CAACzD,MAAM,EAAEoC,qBAAqB,CAAC,CAAA;AACjD,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACEqB,EAAAA,WAAWA,CAACzD,MAAoB,EAAEoC,qBAA+B,EAAE;AACjE,IAAA,IAAIA,qBAAqB,EAAE;AACzB;MACAsB,sBAAsB,CACpB1D,MAAM,EACN2D,yBAAyB,CACvBC,eAAe,CAAC,IAAI,CAACC,mBAAmB,EAAE,CAAC,EAC3C7D,MAAM,CAAC6D,mBAAmB,EAC5B,CACF,CAAC,CAAA;AACH,KAAA;IACA,IAAI,CAACjB,sBAAsB,EAAE,IAAI5C,MAAM,CAAC8D,SAAS,EAAE,CAAA;AACnD9D,IAAAA,MAAM,CAACuC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAC1BvC,MAAM,CAACuC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAACwB,MAAM,CAAC,CAAA;AAClC,IAAA,IAAI,CAACX,YAAY,CAAC,IAAI,EAAEpD,MAAM,CAAC,CAAA;AAC/B,IAAA,MAAMgE,YAAY,GAChB,IAAI,CAACD,MAAM,IACX,IAAI,CAACA,MAAM,CAACE,eAAe,IAC3B,IAAI,CAACF,MAAM,CAACE,eAAe,EAAE,CAAA;AAC/B;AACA,IAAA,IACED,YAAY,KACXA,YAAY,KAAKhE,MAAM,IAAIA,MAAM,CAACY,cAAc,CAACoD,YAAY,CAAC,CAAC,EAChE;AACA,MAAA,IAAI,CAAClB,cAAc,CAACI,IAAI,CAAClD,MAAM,CAAC,CAAA;AAClC,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACEqC,EAAAA,SAASA,CAACrC,MAAoB,EAAEoC,qBAA+B,EAAE;AAC/D,IAAA,IAAI,CAAC8B,UAAU,CAAClE,MAAM,EAAEoC,qBAAqB,CAAC,CAAA;AAC9CpC,IAAAA,MAAM,CAACuC,IAAI,CAAC,QAAQ,EAAEnD,SAAS,CAAC,CAAA;AAChCY,IAAAA,MAAM,CAACuC,IAAI,CAAC,QAAQ,EAAEnD,SAAS,CAAC,CAAA;AAClC,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE8E,EAAAA,UAAUA,CAAClE,MAAoB,EAAEoC,qBAA+B,EAAE;AAChEpC,IAAAA,MAAM,CAACuC,IAAI,CAAC,OAAO,EAAEnD,SAAS,CAAC,CAAA;IAC/B,IAAI,CAACgD,qBAAqB,EAAE;AAC1BsB,MAAAA,sBAAsB,CACpB1D,MAAM,EACN2D,yBAAyB,CACvB,IAAI,CAACE,mBAAmB,EAAE,EAC1B7D,MAAM,CAAC6D,mBAAmB,EAC5B,CACF,CAAC,CAAA;MACD7D,MAAM,CAAC8D,SAAS,EAAE,CAAA;AACpB,KAAA;AACA,IAAA,IAAI,CAACV,YAAY,CAAC,KAAK,EAAEpD,MAAM,CAAC,CAAA;IAChC,MAAMiB,KAAK,GACT,IAAI,CAAC6B,cAAc,CAAC3D,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC2D,cAAc,CAAChC,OAAO,CAACd,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAC3E,IAAA,IAAIiB,KAAK,GAAG,CAAC,CAAC,EAAE;MACd,IAAI,CAAC6B,cAAc,CAACK,MAAM,CAAClC,KAAK,EAAE,CAAC,CAAC,CAAA;AACtC,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACEkD,EAAAA,WAAWA,GAAG;IACZ,MAAMC,QAAQ,GAAGxF,YAAY,CAACyF,SAAS,CAACF,WAAW,CAACG,IAAI,CAAC,IAAI,CAAC,CAAA;AAC9D,IAAA,IAAIF,QAAQ,EAAE;AACZ,MAAA,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC7E,QAAQ,CAACP,MAAM,EAAEoF,CAAC,EAAE,EAAE;QAC7C,IAAI,IAAI,CAAC7E,QAAQ,CAAC6E,CAAC,CAAC,CAACC,cAAc,EAAE,EAAE;UACrC,IAAI,CAACC,UAAU,GAAG,KAAK,CAAA;AACvB,UAAA,OAAO,KAAK,CAAA;AACd,SAAA;AACF,OAAA;AACF,KAAA;AACA,IAAA,OAAOL,QAAQ,CAAA;AACjB,GAAA;;AAEA;AACF;AACA;AACA;AACEI,EAAAA,cAAcA,GAAG;AACf,IAAA,IAAI,KAAK,CAACA,cAAc,EAAE,EAAE;AAC1B,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AACA,IAAA,KAAK,IAAID,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC7E,QAAQ,CAACP,MAAM,EAAEoF,CAAC,EAAE,EAAE;MAC7C,IAAI,IAAI,CAAC7E,QAAQ,CAAC6E,CAAC,CAAC,CAACC,cAAc,EAAE,EAAE;AACrC,QAAA,OAAO,IAAI,CAAA;AACb,OAAA;AACF,KAAA;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;;AAEA;AACF;AACA;AACA;AACEE,EAAAA,UAAUA,GAAY;AACpB,IAAA,OAAO,IAAI,CAACD,UAAU,IAAK,CAAC,CAAC,IAAI,CAACE,MAAM,IAAI,IAAI,CAACA,MAAM,CAACD,UAAU,EAAG,CAAA;AACvE,GAAA;;AAEA;AACF;AACA;AACA;EACEE,UAAUA,CAACC,GAA6B,EAAE;AACxC,IAAA,IAAI,CAACC,iBAAiB,CAACD,GAAG,CAAC,CAAA;AAC3B,IAAA,KAAK,IAAIN,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC7E,QAAQ,CAACP,MAAM,EAAEoF,CAAC,EAAE,EAAE;AAAA,MAAA,IAAAQ,YAAA,CAAA;AAC7C;MACA,IACE,CAAAA,YAAA,GAAI,IAAA,CAAChB,MAAM,MAAAgB,IAAAA,IAAAA,YAAA,KAAXA,KAAAA,CAAAA,IAAAA,YAAA,CAAaC,sBAAsB,IACnC,IAAI,CAACtF,QAAQ,CAAC6E,CAAC,CAAC,CAACf,KAAK,KAAK,IAAI,EAC/B;QACAqB,GAAG,CAACI,IAAI,EAAE,CAAA;AACVJ,QAAAA,GAAG,CAACK,SAAS,CAAC,GAAGtB,eAAe,CAAC,IAAI,CAACC,mBAAmB,EAAE,CAAC,CAAC,CAAA;QAC7D,IAAI,CAACnE,QAAQ,CAAC6E,CAAC,CAAC,CAACY,MAAM,CAACN,GAAG,CAAC,CAAA;QAC5BA,GAAG,CAACO,OAAO,EAAE,CAAA;AACf,OAAC,MAAM,IAAI,IAAI,CAAC1F,QAAQ,CAAC6E,CAAC,CAAC,CAACf,KAAK,KAAK,IAAI,EAAE;QAC1C,IAAI,CAAC9D,QAAQ,CAAC6E,CAAC,CAAC,CAACY,MAAM,CAACN,GAAG,CAAC,CAAA;AAC9B,OAAA;AACF,KAAA;IACA,IAAI,CAACQ,aAAa,CAACR,GAAG,EAAE,IAAI,CAACS,QAAQ,CAAC,CAAA;AACxC,GAAA;;AAEA;AACF;AACA;AACA;AACExB,EAAAA,SAASA,GAAG;IACV,KAAK,CAACA,SAAS,EAAE,CAAA;AACjB,IAAA,IAAI,CAAClB,sBAAsB,EAAE,IAC3B,IAAI,CAAC7C,aAAa,CAAEC,MAAM,IAAKA,MAAM,CAAC8D,SAAS,EAAE,CAAC,CAAA;AACtD,GAAA;AAEAyB,EAAAA,aAAaA,GAAwC;AAAA,IAAA,IAAvClG,OAAgC,GAAAH,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;AACjD,IAAA,IAAI,CAACgB,aAAa,CAAC7B,aAAa,CAAAS,cAAA,CAAA;AAC9BuB,MAAAA,MAAM,EAAE,IAAI;AACZF,MAAAA,IAAI,EAAEqF,sBAAAA;KACHnG,EAAAA,OAAO,CACX,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;EACE8F,MAAMA,CAACN,GAA6B,EAAE;IACpC,IAAI,CAACY,cAAc,GAAG,IAAI,CAAA;AAC1B,IAAA,KAAK,CAACN,MAAM,CAACN,GAAG,CAAC,CAAA;IACjB,IAAI,CAACY,cAAc,GAAG,KAAK,CAAA;AAC7B,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,kBAAkBA,CAChBC,MAAuC,EACvCC,mBAA8B,EAC9B;AACA,IAAA,MAAMC,qBAAqB,GAAG,IAAI,CAACC,oBAAoB,CAAA;IACvD,OAAO,IAAI,CAACpG,QAAQ,CACjBsB,MAAM,CAAC,UAAU+E,GAAG,EAAE;MACrB,OAAO,CAACA,GAAG,CAACC,iBAAiB,CAAA;AAC/B,KAAC,CAAC,CACDC,GAAG,CAAC,UAAUF,GAAG,EAAE;AAClB,MAAA,MAAMG,gBAAgB,GAAGH,GAAG,CAACD,oBAAoB,CAAA;MACjDC,GAAG,CAACD,oBAAoB,GAAGD,qBAAqB,CAAA;MAChD,MAAMM,IAAI,GAAGJ,GAAG,CAACJ,MAAM,IAAI,UAAU,CAAC,CAACC,mBAAmB,CAAC,CAAA;MAC3DG,GAAG,CAACD,oBAAoB,GAAGI,gBAAgB,CAAA;AAC3C;AACA,MAAA,OAAOC,IAAI,CAAA;AACb,KAAC,CAAC,CAAA;AACN,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACEC,EAAAA,QAAQA,GAM4D;AAAA,IAAA,IAAlER,mBAAwB,GAAA1G,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;IAC7B,MAAMgB,aAAa,GAAG,IAAI,CAACA,aAAa,CAACkG,QAAQ,EAAE,CAAA;AAEnD,IAAA,OAAAtH,cAAA,CAAAA,cAAA,CAAAA,cAAA,CAAA,EAAA,EACK,KAAK,CAACsH,QAAQ,CAAC,CAChB,gBAAgB,EAChB,aAAa,EACb,GAAGR,mBAAmB,CACvB,CAAC,CAAA,EACE1F,aAAa,CAACmG,QAAQ,KAAK,aAAa,IAAI,IAAI,CAACP,oBAAoB,GACrE;AAAE5F,MAAAA,aAAAA;KAAe,GACjB,EAAE,CAAA,EAAA,EAAA,EAAA;AACNjB,MAAAA,OAAO,EAAE,IAAI,CAACyG,kBAAkB,CAC9B,UAAU,EACVE,mBACF,CAAA;AAAC,KAAA,CAAA,CAAA;AAEL,GAAA;AAEAU,EAAAA,QAAQA,GAAG;AACT,IAAA,OAAA,YAAA,CAAAC,MAAA,CAAoB,IAAI,CAACC,UAAU,EAAE,EAAA,IAAA,CAAA,CAAA;AACvC,GAAA;AAEAC,EAAAA,OAAOA,GAAG;AACR,IAAA,IAAI,CAACvG,aAAa,CAACwG,kBAAkB,CAAC;AACpCpG,MAAAA,OAAO,EAAE,IAAI,CAACqG,UAAU,EAAE;AAC1BtG,MAAAA,MAAM,EAAE,IAAA;AACV,KAAC,CAAC,CAAA;IACF,IAAI,CAACyC,cAAc,GAAG,EAAE,CAAA;AACxB,IAAA,IAAI,CAAC/C,aAAa,CAAEC,MAAM,IAAK;AAC7B,MAAA,IAAI,CAACoD,YAAY,CAAC,KAAK,EAAEpD,MAAM,CAAC,CAAA;MAChCA,MAAM,CAACyG,OAAO,EAAE,CAAA;AAClB,KAAC,CAAC,CAAA;IACF,KAAK,CAACA,OAAO,EAAE,CAAA;AACjB,GAAA;;AAEA;AACF;AACA;EACEG,gBAAgBA,CAACC,OAAqB,EAAE;AACtC,IAAA,IAAI,CAAC,IAAI,CAACC,eAAe,EAAE;AACzB,MAAA,OAAO,EAAE,CAAA;AACX,KAAA;IACA,MAAMC,UAAU,GAAGC,IAAI,CAAC3C,SAAS,CAAC4C,MAAM,CAAC3C,IAAI,CAAC,IAAI,CAAC,CAAA;AACnD,IAAA,MAAM4C,OAAO,GAAGH,UAAU,CAACjG,OAAO,CAAC,cAAc,CAAC,CAAA;AAClDiG,IAAAA,UAAU,CAACG,OAAO,CAAC,GAAG,cAAc,CAAA;AACpC,IAAA,MAAMC,MAAM,GAAGJ,UAAU,CAACK,IAAI,CAAC,EAAE,CAAC,CAAA;AAClC,IAAA,OAAOP,OAAO,GAAGA,OAAO,CAACM,MAAM,CAAC,GAAGA,MAAM,CAAA;AAC3C,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEF,MAAMA,CAACJ,OAAqB,EAAE;IAC5B,MAAMQ,SAAS,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,CAAC,CAAA;AACjD,IAAA,MAAMC,EAAE,GAAG,IAAI,CAACV,gBAAgB,CAACC,OAAO,CAAC,CAAA;IACzCS,EAAE,IAAID,SAAS,CAACnE,IAAI,CAAC,MAAM,EAAEoE,EAAE,CAAC,CAAA;AAChC,IAAA,KAAK,IAAI/C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC7E,QAAQ,CAACP,MAAM,EAAEoF,CAAC,EAAE,EAAE;AAC7C8C,MAAAA,SAAS,CAACnE,IAAI,CAAC,MAAM,EAAE,IAAI,CAACxD,QAAQ,CAAC6E,CAAC,CAAC,CAACgD,KAAK,CAACV,OAAO,CAAC,CAAC,CAAA;AACzD,KAAA;AACAQ,IAAAA,SAAS,CAACnE,IAAI,CAAC,QAAQ,CAAC,CAAA;AACxB,IAAA,OAAOmE,SAAS,CAAA;AAClB,GAAA;;AAEA;AACF;AACA;AACA;AACEG,EAAAA,YAAYA,GAAW;IACrB,MAAMC,OAAO,GACT,OAAO,IAAI,CAACA,OAAO,KAAK,WAAW,IAAI,IAAI,CAACA,OAAO,KAAK,CAAC,GAAAlB,WAAAA,CAAAA,MAAA,CACzC,IAAI,CAACkB,OAAO,EAAA,GAAA,CAAA,GACxB,EAAE;AACRC,MAAAA,UAAU,GAAG,IAAI,CAACC,OAAO,GAAG,EAAE,GAAG,sBAAsB,CAAA;AACzD,IAAA,OAAO,CAACF,OAAO,EAAE,IAAI,CAACG,YAAY,EAAE,EAAEF,UAAU,CAAC,CAACN,IAAI,CAAC,EAAE,CAAC,CAAA;AAC5D,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACES,aAAaA,CAAChB,OAAqB,EAAU;IAC3C,MAAMQ,SAAS,GAAG,EAAE,CAAA;AACpB,IAAA,MAAMC,EAAE,GAAG,IAAI,CAACV,gBAAgB,CAACC,OAAO,CAAC,CAAA;IACzCS,EAAE,IAAID,SAAS,CAACnE,IAAI,CAAC,IAAI,EAAEoE,EAAE,CAAC,CAAA;AAC9B,IAAA,KAAK,IAAI/C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC7E,QAAQ,CAACP,MAAM,EAAEoF,CAAC,EAAE,EAAE;AAC7C8C,MAAAA,SAAS,CAACnE,IAAI,CAAC,IAAI,EAAE,IAAI,CAACxD,QAAQ,CAAC6E,CAAC,CAAC,CAACsD,aAAa,CAAChB,OAAO,CAAC,CAAC,CAAA;AAC/D,KAAA;AACA,IAAA,OAAO,IAAI,CAACiB,4BAA4B,CAACT,SAAS,EAAE;AAClDR,MAAAA,OAAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,EAAA,OAAOkB,UAAUA,CAAAC,KAAA,EAEfC,SAAqB,EACrB;IAAA,IAFA;QAAE9H,IAAI;AAAElB,QAAAA,OAAO,GAAG,EAAE;AAAEiB,QAAAA,aAAAA;AAA6B,OAAC,GAAA8H,KAAA;AAAZ3I,MAAAA,OAAO,GAAA6I,wBAAA,CAAAF,KAAA,EAAAG,SAAA,CAAA,CAAA;IAG/C,OAAOC,OAAO,CAACC,GAAG,CAAC,CACjBC,cAAc,CAAerJ,OAAO,EAAEgJ,SAAS,CAAC,EAChDM,uBAAuB,CAAClJ,OAAO,EAAE4I,SAAS,CAAC,CAC5C,CAAC,CAACO,IAAI,CAACC,KAAA,IAAgC;AAAA,MAAA,IAA/B,CAACxJ,OAAO,EAAEyJ,eAAe,CAAC,GAAAD,KAAA,CAAA;AACjC,MAAA,MAAMjF,KAAK,GAAG,IAAI,IAAI,CAACvE,OAAO,EAAAH,cAAA,CAAAA,cAAA,CAAAA,cAAA,CACzBO,EAAAA,EAAAA,OAAO,GACPqJ,eAAe,CAAA,EAAA,EAAA,EAAA;QAClBxI,aAAa,EAAE,IAAI/B,iBAAiB,EAAC;AAAC,OAAA,CACvC,CAAC,CAAA;AACF,MAAA,IAAI+B,aAAa,EAAE;QACjB,MAAMyI,WAAW,GAAGC,aAAa,CAACC,QAAQ,CACxC3I,aAAa,CAACC,IAChB,CAAC,CAAA;QACD,MAAM2I,aAAa,GAAGF,aAAa,CAACC,QAAQ,CAC1C3I,aAAa,CAACmG,QAChB,CAAC,CAAA;QACD7C,KAAK,CAACtD,aAAa,GAAG,IAAIyI,WAAW,CAAC,IAAIG,aAAa,EAAE,CAAC,CAAA;AAC5D,OAAC,MAAM;AACLtF,QAAAA,KAAK,CAACtD,aAAa,GAAG,IAAI9B,aAAa,EAAE,CAAA;AAC3C,OAAA;AACAoF,MAAAA,KAAK,CAACtD,aAAa,CAAC6I,gBAAgB,CAAC;AACnC5I,QAAAA,IAAI,EAAEC,0BAA0B;AAChCC,QAAAA,MAAM,EAAEmD,KAAK;AACblD,QAAAA,OAAO,EAAEkD,KAAK,CAACmD,UAAU,EAAC;AAC5B,OAAC,CAAC,CAAA;MACFnD,KAAK,CAACM,SAAS,EAAE,CAAA;AACjB,MAAA,OAAON,KAAK,CAAA;AACd,KAAC,CAAC,CAAA;AACJ,GAAA;AACF,CAAA;AAAClE,eAAA,CA1mBYZ,KAAK,EAAA,MAAA,EAsCF,OAAO,CAAA,CAAA;AAAAY,eAAA,CAtCVZ,KAAK,EAAA,aAAA,EAwC0BJ,kBAAkB,CAAA,CAAA;AAokB9DsK,aAAa,CAACI,QAAQ,CAACtK,KAAK,CAAC;;;;"}
1
+ {"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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"}