fabric 6.2.0 → 6.3.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.
- package/.prettierignore +1 -0
- package/CHANGELOG.md +12 -4
- package/README.md +1 -1
- package/dist/extensions/aligning_guidelines/constant.d.ts +3 -0
- package/dist/extensions/aligning_guidelines/constant.d.ts.map +1 -0
- package/dist/extensions/aligning_guidelines/index.d.ts +5 -0
- package/dist/extensions/aligning_guidelines/index.d.ts.map +1 -0
- package/dist/extensions/aligning_guidelines/typedefs.d.ts +33 -0
- package/dist/extensions/aligning_guidelines/typedefs.d.ts.map +1 -0
- package/dist/extensions/aligning_guidelines/util/basic.d.ts +4 -0
- package/dist/extensions/aligning_guidelines/util/basic.d.ts.map +1 -0
- package/dist/extensions/aligning_guidelines/util/collect-line.d.ts +13 -0
- package/dist/extensions/aligning_guidelines/util/collect-line.d.ts.map +1 -0
- package/dist/extensions/aligning_guidelines/util/collect-point.d.ts +20 -0
- package/dist/extensions/aligning_guidelines/util/collect-point.d.ts.map +1 -0
- package/dist/extensions/aligning_guidelines/util/draw.d.ts +6 -0
- package/dist/extensions/aligning_guidelines/util/draw.d.ts.map +1 -0
- package/dist/extensions/aligning_guidelines/util/get-objects-by-target.d.ts +3 -0
- package/dist/extensions/aligning_guidelines/util/get-objects-by-target.d.ts.map +1 -0
- package/dist/extensions/index.d.ts +2 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/index.js +140 -108
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/index.min.mjs +1 -1
- package/dist/index.min.mjs.map +1 -1
- package/dist/index.mjs +140 -108
- package/dist/index.mjs.map +1 -1
- package/dist/index.node.cjs +140 -108
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +140 -108
- package/dist/index.node.mjs.map +1 -1
- package/dist/package.json.min.mjs +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/ClassRegistry.min.mjs.map +1 -1
- package/dist/src/ClassRegistry.mjs.map +1 -1
- package/dist/src/Collection.min.mjs.map +1 -1
- package/dist/src/Collection.mjs.map +1 -1
- package/dist/src/Intersection.min.mjs.map +1 -1
- package/dist/src/Intersection.mjs.map +1 -1
- package/dist/src/LayoutManager/ActiveSelectionLayoutManager.min.mjs.map +1 -1
- package/dist/src/LayoutManager/ActiveSelectionLayoutManager.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutManager.d.ts +1 -1
- package/dist/src/LayoutManager/LayoutManager.d.ts.map +1 -1
- package/dist/src/LayoutManager/LayoutManager.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutManager.mjs +1 -1
- package/dist/src/LayoutManager/LayoutManager.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/utils.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/utils.mjs.map +1 -1
- package/dist/src/LayoutManager/types.d.ts.map +1 -1
- package/dist/src/Observable.min.mjs.map +1 -1
- package/dist/src/Observable.mjs.map +1 -1
- package/dist/src/Pattern/Pattern.d.ts +2 -2
- package/dist/src/Pattern/Pattern.d.ts.map +1 -1
- package/dist/src/Pattern/Pattern.min.mjs +1 -1
- package/dist/src/Pattern/Pattern.min.mjs.map +1 -1
- package/dist/src/Pattern/Pattern.mjs +14 -12
- package/dist/src/Pattern/Pattern.mjs.map +1 -1
- package/dist/src/Point.min.mjs.map +1 -1
- package/dist/src/Point.mjs.map +1 -1
- package/dist/src/Shadow.min.mjs.map +1 -1
- package/dist/src/Shadow.mjs.map +1 -1
- package/dist/src/brushes/CircleBrush.min.mjs.map +1 -1
- package/dist/src/brushes/CircleBrush.mjs.map +1 -1
- package/dist/src/brushes/PatternBrush.min.mjs.map +1 -1
- package/dist/src/brushes/PatternBrush.mjs.map +1 -1
- package/dist/src/brushes/PencilBrush.min.mjs.map +1 -1
- package/dist/src/brushes/PencilBrush.mjs.map +1 -1
- package/dist/src/brushes/SprayBrush.min.mjs.map +1 -1
- package/dist/src/brushes/SprayBrush.mjs.map +1 -1
- package/dist/src/canvas/Canvas.d.ts +1 -1
- package/dist/src/canvas/Canvas.d.ts.map +1 -1
- package/dist/src/canvas/Canvas.min.mjs.map +1 -1
- package/dist/src/canvas/Canvas.mjs +2 -1
- package/dist/src/canvas/Canvas.mjs.map +1 -1
- package/dist/src/canvas/DOMManagers/CanvasDOMManager.min.mjs.map +1 -1
- package/dist/src/canvas/DOMManagers/CanvasDOMManager.mjs.map +1 -1
- package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.min.mjs.map +1 -1
- package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.mjs.map +1 -1
- package/dist/src/canvas/DOMManagers/util.min.mjs.map +1 -1
- package/dist/src/canvas/DOMManagers/util.mjs.map +1 -1
- package/dist/src/canvas/SelectableCanvas.min.mjs.map +1 -1
- package/dist/src/canvas/SelectableCanvas.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvas.d.ts +1 -1
- package/dist/src/canvas/StaticCanvas.d.ts.map +1 -1
- package/dist/src/canvas/StaticCanvas.min.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvas.mjs +1 -1
- package/dist/src/canvas/StaticCanvas.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvasOptions.d.ts.map +1 -1
- package/dist/src/canvas/StaticCanvasOptions.min.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvasOptions.mjs.map +1 -1
- package/dist/src/canvas/TextEditingManager.min.mjs.map +1 -1
- package/dist/src/canvas/TextEditingManager.mjs.map +1 -1
- package/dist/src/color/Color.d.ts.map +1 -1
- package/dist/src/color/Color.min.mjs.map +1 -1
- package/dist/src/color/Color.mjs +1 -0
- package/dist/src/color/Color.mjs.map +1 -1
- package/dist/src/color/util.min.mjs.map +1 -1
- package/dist/src/color/util.mjs.map +1 -1
- package/dist/src/config.min.mjs.map +1 -1
- package/dist/src/config.mjs.map +1 -1
- package/dist/src/controls/Control.min.mjs.map +1 -1
- package/dist/src/controls/Control.mjs.map +1 -1
- package/dist/src/controls/changeWidth.min.mjs.map +1 -1
- package/dist/src/controls/changeWidth.mjs.map +1 -1
- package/dist/src/controls/controlRendering.min.mjs.map +1 -1
- package/dist/src/controls/controlRendering.mjs.map +1 -1
- package/dist/src/controls/drag.min.mjs.map +1 -1
- package/dist/src/controls/drag.mjs.map +1 -1
- package/dist/src/controls/fireEvent.min.mjs.map +1 -1
- package/dist/src/controls/fireEvent.mjs.map +1 -1
- package/dist/src/controls/pathControl.min.mjs.map +1 -1
- package/dist/src/controls/pathControl.mjs.map +1 -1
- package/dist/src/controls/polyControl.min.mjs.map +1 -1
- package/dist/src/controls/polyControl.mjs.map +1 -1
- package/dist/src/controls/rotate.min.mjs.map +1 -1
- package/dist/src/controls/rotate.mjs.map +1 -1
- package/dist/src/controls/scale.min.mjs.map +1 -1
- package/dist/src/controls/scale.mjs.map +1 -1
- package/dist/src/controls/scaleSkew.min.mjs.map +1 -1
- package/dist/src/controls/scaleSkew.mjs.map +1 -1
- package/dist/src/controls/skew.min.mjs.map +1 -1
- package/dist/src/controls/skew.mjs.map +1 -1
- package/dist/src/controls/util.min.mjs.map +1 -1
- package/dist/src/controls/util.mjs.map +1 -1
- package/dist/src/controls/wrapWithFireEvent.min.mjs.map +1 -1
- package/dist/src/controls/wrapWithFireEvent.mjs.map +1 -1
- package/dist/src/controls/wrapWithFixedAnchor.min.mjs.map +1 -1
- package/dist/src/controls/wrapWithFixedAnchor.mjs.map +1 -1
- package/dist/src/filters/BaseFilter.d.ts +5 -5
- package/dist/src/filters/BaseFilter.d.ts.map +1 -1
- package/dist/src/filters/BaseFilter.min.mjs.map +1 -1
- package/dist/src/filters/BaseFilter.mjs +5 -5
- package/dist/src/filters/BaseFilter.mjs.map +1 -1
- package/dist/src/filters/BlendColor.min.mjs.map +1 -1
- package/dist/src/filters/BlendColor.mjs.map +1 -1
- package/dist/src/filters/BlendImage.min.mjs.map +1 -1
- package/dist/src/filters/BlendImage.mjs.map +1 -1
- package/dist/src/filters/Blur.min.mjs.map +1 -1
- package/dist/src/filters/Blur.mjs.map +1 -1
- package/dist/src/filters/Brightness.min.mjs.map +1 -1
- package/dist/src/filters/Brightness.mjs.map +1 -1
- package/dist/src/filters/Canvas2dFilterBackend.min.mjs.map +1 -1
- package/dist/src/filters/Canvas2dFilterBackend.mjs.map +1 -1
- package/dist/src/filters/ColorMatrix.min.mjs.map +1 -1
- package/dist/src/filters/ColorMatrix.mjs.map +1 -1
- package/dist/src/filters/ColorMatrixFilters.min.mjs.map +1 -1
- package/dist/src/filters/ColorMatrixFilters.mjs.map +1 -1
- package/dist/src/filters/Composed.min.mjs.map +1 -1
- package/dist/src/filters/Composed.mjs.map +1 -1
- package/dist/src/filters/Contrast.min.mjs.map +1 -1
- package/dist/src/filters/Contrast.mjs.map +1 -1
- package/dist/src/filters/Convolute.min.mjs.map +1 -1
- package/dist/src/filters/Convolute.mjs.map +1 -1
- package/dist/src/filters/GLProbes/WebGLProbe.min.mjs.map +1 -1
- package/dist/src/filters/GLProbes/WebGLProbe.mjs.map +1 -1
- package/dist/src/filters/Gamma.min.mjs.map +1 -1
- package/dist/src/filters/Gamma.mjs.map +1 -1
- package/dist/src/filters/Grayscale.min.mjs.map +1 -1
- package/dist/src/filters/Grayscale.mjs.map +1 -1
- package/dist/src/filters/Invert.min.mjs.map +1 -1
- package/dist/src/filters/Invert.mjs.map +1 -1
- package/dist/src/filters/Noise.min.mjs.map +1 -1
- package/dist/src/filters/Noise.mjs.map +1 -1
- package/dist/src/filters/Pixelate.min.mjs.map +1 -1
- package/dist/src/filters/Pixelate.mjs.map +1 -1
- package/dist/src/filters/RemoveColor.min.mjs.map +1 -1
- package/dist/src/filters/RemoveColor.mjs.map +1 -1
- package/dist/src/filters/Resize.min.mjs.map +1 -1
- package/dist/src/filters/Resize.mjs.map +1 -1
- package/dist/src/filters/Saturation.min.mjs.map +1 -1
- package/dist/src/filters/Saturation.mjs.map +1 -1
- package/dist/src/filters/Vibrance.min.mjs.map +1 -1
- package/dist/src/filters/Vibrance.mjs.map +1 -1
- package/dist/src/filters/WebGLFilterBackend.min.mjs.map +1 -1
- package/dist/src/filters/WebGLFilterBackend.mjs.map +1 -1
- package/dist/src/filters/typedefs.d.ts +0 -1
- package/dist/src/filters/typedefs.d.ts.map +1 -1
- package/dist/src/filters/utils.min.mjs.map +1 -1
- package/dist/src/filters/utils.mjs.map +1 -1
- package/dist/src/gradient/Gradient.d.ts +7 -3
- package/dist/src/gradient/Gradient.d.ts.map +1 -1
- package/dist/src/gradient/Gradient.min.mjs +1 -1
- package/dist/src/gradient/Gradient.min.mjs.map +1 -1
- package/dist/src/gradient/Gradient.mjs +36 -24
- package/dist/src/gradient/Gradient.mjs.map +1 -1
- package/dist/src/gradient/parser/parseColorStops.min.mjs.map +1 -1
- package/dist/src/gradient/parser/parseColorStops.mjs.map +1 -1
- package/dist/src/gradient/parser/parseCoords.d.ts.map +1 -1
- package/dist/src/gradient/parser/parseCoords.min.mjs.map +1 -1
- package/dist/src/gradient/parser/parseCoords.mjs.map +1 -1
- package/dist/src/parser/applyViewboxTransform.min.mjs.map +1 -1
- package/dist/src/parser/applyViewboxTransform.mjs.map +1 -1
- package/dist/src/parser/constants.min.mjs.map +1 -1
- package/dist/src/parser/constants.mjs.map +1 -1
- package/dist/src/parser/elements_parser.min.mjs.map +1 -1
- package/dist/src/parser/elements_parser.mjs.map +1 -1
- package/dist/src/parser/getCSSRules.min.mjs.map +1 -1
- package/dist/src/parser/getCSSRules.mjs.map +1 -1
- package/dist/src/parser/getGlobalStylesForElement.min.mjs.map +1 -1
- package/dist/src/parser/getGlobalStylesForElement.mjs.map +1 -1
- package/dist/src/parser/getGradientDefs.min.mjs.map +1 -1
- package/dist/src/parser/getGradientDefs.mjs.map +1 -1
- package/dist/src/parser/getMultipleNodes.min.mjs.map +1 -1
- package/dist/src/parser/getMultipleNodes.mjs.map +1 -1
- package/dist/src/parser/loadSVGFromString.min.mjs.map +1 -1
- package/dist/src/parser/loadSVGFromString.mjs.map +1 -1
- package/dist/src/parser/loadSVGFromURL.min.mjs.map +1 -1
- package/dist/src/parser/loadSVGFromURL.mjs.map +1 -1
- package/dist/src/parser/normalizeAttr.min.mjs.map +1 -1
- package/dist/src/parser/normalizeAttr.mjs.map +1 -1
- package/dist/src/parser/normalizeValue.min.mjs.map +1 -1
- package/dist/src/parser/normalizeValue.mjs.map +1 -1
- package/dist/src/parser/parseAttributes.min.mjs.map +1 -1
- package/dist/src/parser/parseAttributes.mjs.map +1 -1
- package/dist/src/parser/parseFontDeclaration.min.mjs.map +1 -1
- package/dist/src/parser/parseFontDeclaration.mjs.map +1 -1
- package/dist/src/parser/parseSVGDocument.min.mjs.map +1 -1
- package/dist/src/parser/parseSVGDocument.mjs.map +1 -1
- package/dist/src/parser/parseStyleObject.min.mjs.map +1 -1
- package/dist/src/parser/parseStyleObject.mjs.map +1 -1
- package/dist/src/parser/parseStyleString.min.mjs.map +1 -1
- package/dist/src/parser/parseStyleString.mjs.map +1 -1
- package/dist/src/parser/parseTransformAttribute.min.mjs.map +1 -1
- package/dist/src/parser/parseTransformAttribute.mjs.map +1 -1
- package/dist/src/parser/parseUseDirectives.min.mjs.map +1 -1
- package/dist/src/parser/parseUseDirectives.mjs.map +1 -1
- package/dist/src/parser/percent.min.mjs.map +1 -1
- package/dist/src/parser/percent.mjs.map +1 -1
- package/dist/src/parser/recursivelyParseGradientsXlink.min.mjs.map +1 -1
- package/dist/src/parser/recursivelyParseGradientsXlink.mjs.map +1 -1
- package/dist/src/parser/setStrokeFillOpacity.min.mjs.map +1 -1
- package/dist/src/parser/setStrokeFillOpacity.mjs.map +1 -1
- package/dist/src/shapes/ActiveSelection.min.mjs.map +1 -1
- package/dist/src/shapes/ActiveSelection.mjs.map +1 -1
- package/dist/src/shapes/Circle.min.mjs.map +1 -1
- package/dist/src/shapes/Circle.mjs.map +1 -1
- package/dist/src/shapes/Ellipse.min.mjs.map +1 -1
- package/dist/src/shapes/Ellipse.mjs.map +1 -1
- package/dist/src/shapes/Group.d.ts +2 -2
- package/dist/src/shapes/Group.d.ts.map +1 -1
- package/dist/src/shapes/Group.min.mjs.map +1 -1
- package/dist/src/shapes/Group.mjs.map +1 -1
- package/dist/src/shapes/IText/DraggableTextDelegate.d.ts.map +1 -1
- package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs +1 -1
- package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs.map +1 -1
- package/dist/src/shapes/IText/DraggableTextDelegate.mjs +2 -2
- package/dist/src/shapes/IText/DraggableTextDelegate.mjs.map +1 -1
- package/dist/src/shapes/IText/IText.min.mjs.map +1 -1
- package/dist/src/shapes/IText/IText.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextBehavior.min.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextBehavior.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextClickBehavior.min.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextClickBehavior.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.mjs.map +1 -1
- package/dist/src/shapes/Image.min.mjs.map +1 -1
- package/dist/src/shapes/Image.mjs.map +1 -1
- package/dist/src/shapes/Line.min.mjs.map +1 -1
- package/dist/src/shapes/Line.mjs.map +1 -1
- package/dist/src/shapes/Object/AnimatableObject.d.ts.map +1 -1
- package/dist/src/shapes/Object/AnimatableObject.min.mjs.map +1 -1
- package/dist/src/shapes/Object/AnimatableObject.mjs.map +1 -1
- package/dist/src/shapes/Object/FabricObject.d.ts.map +1 -1
- package/dist/src/shapes/Object/FabricObject.min.mjs.map +1 -1
- package/dist/src/shapes/Object/FabricObject.mjs +2 -1
- package/dist/src/shapes/Object/FabricObject.mjs.map +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs.map +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.d.ts +13 -13
- package/dist/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.min.mjs.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.mjs +13 -13
- package/dist/src/shapes/Object/InteractiveObject.mjs.map +1 -1
- package/dist/src/shapes/Object/Object.d.ts +4 -4
- package/dist/src/shapes/Object/Object.d.ts.map +1 -1
- package/dist/src/shapes/Object/Object.min.mjs +1 -1
- package/dist/src/shapes/Object/Object.min.mjs.map +1 -1
- package/dist/src/shapes/Object/Object.mjs +10 -14
- package/dist/src/shapes/Object/Object.mjs.map +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.d.ts +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.min.mjs.map +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.mjs +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.mjs.map +1 -1
- package/dist/src/shapes/Object/ObjectOrigin.min.mjs.map +1 -1
- package/dist/src/shapes/Object/ObjectOrigin.mjs.map +1 -1
- package/dist/src/shapes/Object/StackedObject.d.ts.map +1 -1
- package/dist/src/shapes/Object/StackedObject.min.mjs.map +1 -1
- package/dist/src/shapes/Object/StackedObject.mjs.map +1 -1
- package/dist/src/shapes/Path.min.mjs.map +1 -1
- package/dist/src/shapes/Path.mjs.map +1 -1
- package/dist/src/shapes/Polyline.d.ts.map +1 -1
- package/dist/src/shapes/Polyline.min.mjs +1 -1
- package/dist/src/shapes/Polyline.min.mjs.map +1 -1
- package/dist/src/shapes/Polyline.mjs +10 -2
- package/dist/src/shapes/Polyline.mjs.map +1 -1
- package/dist/src/shapes/Rect.min.mjs.map +1 -1
- package/dist/src/shapes/Rect.mjs.map +1 -1
- package/dist/src/shapes/Text/StyledText.min.mjs.map +1 -1
- package/dist/src/shapes/Text/StyledText.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.mjs +1 -1
- package/dist/src/shapes/Text/Text.mjs.map +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs.map +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +1 -1
- package/dist/src/shapes/Textbox.min.mjs.map +1 -1
- package/dist/src/shapes/Textbox.mjs.map +1 -1
- package/dist/src/shapes/Triangle.min.mjs.map +1 -1
- package/dist/src/shapes/Triangle.mjs.map +1 -1
- package/dist/src/util/animation/AnimationBase.min.mjs.map +1 -1
- package/dist/src/util/animation/AnimationBase.mjs.map +1 -1
- package/dist/src/util/animation/AnimationRegistry.min.mjs.map +1 -1
- package/dist/src/util/animation/AnimationRegistry.mjs.map +1 -1
- package/dist/src/util/animation/ArrayAnimation.min.mjs.map +1 -1
- package/dist/src/util/animation/ArrayAnimation.mjs.map +1 -1
- package/dist/src/util/animation/ColorAnimation.min.mjs.map +1 -1
- package/dist/src/util/animation/ColorAnimation.mjs.map +1 -1
- package/dist/src/util/animation/ValueAnimation.min.mjs.map +1 -1
- package/dist/src/util/animation/ValueAnimation.mjs.map +1 -1
- package/dist/src/util/animation/animate.d.ts.map +1 -1
- package/dist/src/util/animation/animate.min.mjs.map +1 -1
- package/dist/src/util/animation/animate.mjs.map +1 -1
- package/dist/src/util/animation/easing.min.mjs.map +1 -1
- package/dist/src/util/animation/easing.mjs.map +1 -1
- package/dist/src/util/animation/types.d.ts.map +1 -1
- package/dist/src/util/applyMixins.min.mjs.map +1 -1
- package/dist/src/util/applyMixins.mjs.map +1 -1
- package/dist/src/util/dom_style.min.mjs.map +1 -1
- package/dist/src/util/dom_style.mjs.map +1 -1
- package/dist/src/util/internals/cloneDeep.d.ts +6 -0
- package/dist/src/util/internals/cloneDeep.d.ts.map +1 -1
- package/dist/src/util/internals/cloneStyles.d.ts +3 -0
- package/dist/src/util/internals/cloneStyles.d.ts.map +1 -0
- package/dist/src/util/internals/cloneStyles.min.mjs +2 -0
- package/dist/src/util/internals/cloneStyles.min.mjs.map +1 -0
- package/dist/src/util/internals/cloneStyles.mjs +15 -0
- package/dist/src/util/internals/cloneStyles.mjs.map +1 -0
- package/dist/src/util/internals/findRight.min.mjs.map +1 -1
- package/dist/src/util/internals/findRight.mjs.map +1 -1
- package/dist/src/util/misc/boundingBoxFromPoints.min.mjs.map +1 -1
- package/dist/src/util/misc/boundingBoxFromPoints.mjs.map +1 -1
- package/dist/src/util/misc/dom.min.mjs.map +1 -1
- package/dist/src/util/misc/dom.mjs.map +1 -1
- package/dist/src/util/misc/findScaleTo.min.mjs.map +1 -1
- package/dist/src/util/misc/findScaleTo.mjs.map +1 -1
- package/dist/src/util/misc/groupSVGElements.min.mjs.map +1 -1
- package/dist/src/util/misc/groupSVGElements.mjs.map +1 -1
- package/dist/src/util/misc/isTransparent.min.mjs.map +1 -1
- package/dist/src/util/misc/isTransparent.mjs.map +1 -1
- package/dist/src/util/misc/matrix.min.mjs.map +1 -1
- package/dist/src/util/misc/matrix.mjs.map +1 -1
- package/dist/src/util/misc/objectEnlive.min.mjs.map +1 -1
- package/dist/src/util/misc/objectEnlive.mjs.map +1 -1
- package/dist/src/util/misc/objectTransforms.min.mjs.map +1 -1
- package/dist/src/util/misc/objectTransforms.mjs.map +1 -1
- package/dist/src/util/misc/pick.min.mjs.map +1 -1
- package/dist/src/util/misc/pick.mjs.map +1 -1
- package/dist/src/util/misc/planeChange.min.mjs.map +1 -1
- package/dist/src/util/misc/planeChange.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.min.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.min.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.min.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/index.min.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/index.mjs.map +1 -1
- package/dist/src/util/misc/resolveOrigin.min.mjs.map +1 -1
- package/dist/src/util/misc/resolveOrigin.mjs.map +1 -1
- package/dist/src/util/misc/rotatePoint.min.mjs.map +1 -1
- package/dist/src/util/misc/rotatePoint.mjs.map +1 -1
- package/dist/src/util/misc/svgParsing.min.mjs.map +1 -1
- package/dist/src/util/misc/svgParsing.mjs.map +1 -1
- package/dist/src/util/misc/textStyles.min.mjs +1 -1
- package/dist/src/util/misc/textStyles.min.mjs.map +1 -1
- package/dist/src/util/misc/textStyles.mjs +3 -3
- package/dist/src/util/misc/textStyles.mjs.map +1 -1
- package/dist/src/util/misc/vectors.min.mjs.map +1 -1
- package/dist/src/util/misc/vectors.mjs.map +1 -1
- package/dist/src/util/path/index.min.mjs.map +1 -1
- package/dist/src/util/path/index.mjs.map +1 -1
- package/dist/src/util/path/typedefs.d.ts.map +1 -1
- package/dist/src/util/transform_matrix_removal.min.mjs.map +1 -1
- package/dist/src/util/transform_matrix_removal.mjs.map +1 -1
- package/dist/src/util/typeAssertions.min.mjs.map +1 -1
- package/dist/src/util/typeAssertions.mjs.map +1 -1
- package/dist-extensions/aligning_guidelines/constant.mjs +11 -0
- package/dist-extensions/aligning_guidelines/constant.mjs.map +1 -0
- package/dist-extensions/aligning_guidelines/index.mjs +130 -0
- package/dist-extensions/aligning_guidelines/index.mjs.map +1 -0
- package/dist-extensions/aligning_guidelines/util/basic.mjs +11 -0
- package/dist-extensions/aligning_guidelines/util/basic.mjs.map +1 -0
- package/dist-extensions/aligning_guidelines/util/collect-line.mjs +193 -0
- package/dist-extensions/aligning_guidelines/util/collect-line.mjs.map +1 -0
- package/dist-extensions/aligning_guidelines/util/collect-point.mjs +102 -0
- package/dist-extensions/aligning_guidelines/util/collect-point.mjs.map +1 -0
- package/dist-extensions/aligning_guidelines/util/draw.mjs +75 -0
- package/dist-extensions/aligning_guidelines/util/draw.mjs.map +1 -0
- package/dist-extensions/aligning_guidelines/util/get-objects-by-target.mjs +42 -0
- package/dist-extensions/aligning_guidelines/util/get-objects-by-target.mjs.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/constant.d.ts +3 -0
- package/dist-extensions/extensions/aligning_guidelines/constant.d.ts.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/index.d.ts +5 -0
- package/dist-extensions/extensions/aligning_guidelines/index.d.ts.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/typedefs.d.ts +33 -0
- package/dist-extensions/extensions/aligning_guidelines/typedefs.d.ts.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/util/basic.d.ts +4 -0
- package/dist-extensions/extensions/aligning_guidelines/util/basic.d.ts.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/util/collect-line.d.ts +13 -0
- package/dist-extensions/extensions/aligning_guidelines/util/collect-line.d.ts.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/util/collect-point.d.ts +20 -0
- package/dist-extensions/extensions/aligning_guidelines/util/collect-point.d.ts.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/util/draw.d.ts +6 -0
- package/dist-extensions/extensions/aligning_guidelines/util/draw.d.ts.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/util/get-objects-by-target.d.ts +3 -0
- package/dist-extensions/extensions/aligning_guidelines/util/get-objects-by-target.d.ts.map +1 -0
- package/dist-extensions/extensions/index.d.ts +2 -0
- package/dist-extensions/extensions/index.d.ts.map +1 -0
- package/dist-extensions/fabric-extensions.min.js +2 -0
- package/dist-extensions/fabric-extensions.min.js.map +1 -0
- package/dist-extensions/fabric.d.ts +119 -0
- package/dist-extensions/fabric.d.ts.map +1 -0
- package/dist-extensions/index.d.ts +2 -0
- package/dist-extensions/index.d.ts.map +1 -0
- package/dist-extensions/index.mjs +2 -0
- package/dist-extensions/index.mjs.map +1 -0
- package/dist-extensions/src/ClassRegistry.d.ts +14 -0
- package/dist-extensions/src/ClassRegistry.d.ts.map +1 -0
- package/dist-extensions/src/Collection.d.ts +141 -0
- package/dist-extensions/src/Collection.d.ts.map +1 -0
- package/dist-extensions/src/CommonMethods.d.ts +32 -0
- package/dist-extensions/src/CommonMethods.d.ts.map +1 -0
- package/dist-extensions/src/EventTypeDefs.d.ts +286 -0
- package/dist-extensions/src/EventTypeDefs.d.ts.map +1 -0
- package/dist-extensions/src/Intersection.d.ts +120 -0
- package/dist-extensions/src/Intersection.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/ActiveSelectionLayoutManager.d.ts +22 -0
- package/dist-extensions/src/LayoutManager/ActiveSelectionLayoutManager.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/LayoutManager.d.ts +56 -0
- package/dist-extensions/src/LayoutManager/LayoutManager.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts +13 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts +14 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts +14 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts +30 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/utils.d.ts +10 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/utils.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/constants.d.ts +7 -0
- package/dist-extensions/src/LayoutManager/constants.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/index.d.ts +7 -0
- package/dist-extensions/src/LayoutManager/index.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/types.d.ts +106 -0
- package/dist-extensions/src/LayoutManager/types.d.ts.map +1 -0
- package/dist-extensions/src/Observable.d.ts +68 -0
- package/dist-extensions/src/Observable.d.ts.map +1 -0
- package/dist-extensions/src/Pattern/Pattern.d.ts +99 -0
- package/dist-extensions/src/Pattern/Pattern.d.ts.map +1 -0
- package/dist-extensions/src/Pattern/index.d.ts +3 -0
- package/dist-extensions/src/Pattern/index.d.ts.map +1 -0
- package/dist-extensions/src/Pattern/types.d.ts +12 -0
- package/dist-extensions/src/Pattern/types.d.ts.map +1 -0
- package/dist-extensions/src/Point.d.ts +233 -0
- package/dist-extensions/src/Point.d.ts.map +1 -0
- package/dist-extensions/src/Shadow.d.ts +95 -0
- package/dist-extensions/src/Shadow.d.ts.map +1 -0
- package/dist-extensions/src/brushes/BaseBrush.d.ts +101 -0
- package/dist-extensions/src/brushes/BaseBrush.d.ts.map +1 -0
- package/dist-extensions/src/brushes/CircleBrush.d.ts +44 -0
- package/dist-extensions/src/brushes/CircleBrush.d.ts.map +1 -0
- package/dist-extensions/src/brushes/PatternBrush.d.ts +23 -0
- package/dist-extensions/src/brushes/PatternBrush.d.ts.map +1 -0
- package/dist-extensions/src/brushes/PencilBrush.d.ts +92 -0
- package/dist-extensions/src/brushes/PencilBrush.d.ts.map +1 -0
- package/dist-extensions/src/brushes/SprayBrush.d.ts +74 -0
- package/dist-extensions/src/brushes/SprayBrush.d.ts.map +1 -0
- package/dist-extensions/src/brushes/typedefs.d.ts +18 -0
- package/dist-extensions/src/brushes/typedefs.d.ts.map +1 -0
- package/dist-extensions/src/cache.d.ts +47 -0
- package/dist-extensions/src/cache.d.ts.map +1 -0
- package/dist-extensions/src/canvas/Canvas.d.ts +339 -0
- package/dist-extensions/src/canvas/Canvas.d.ts.map +1 -0
- package/dist-extensions/src/canvas/CanvasOptions.d.ts +229 -0
- package/dist-extensions/src/canvas/CanvasOptions.d.ts.map +1 -0
- package/dist-extensions/src/canvas/DOMManagers/CanvasDOMManager.d.ts +29 -0
- package/dist-extensions/src/canvas/DOMManagers/CanvasDOMManager.d.ts.map +1 -0
- package/dist-extensions/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts +29 -0
- package/dist-extensions/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts.map +1 -0
- package/dist-extensions/src/canvas/DOMManagers/util.d.ts +24 -0
- package/dist-extensions/src/canvas/DOMManagers/util.d.ts.map +1 -0
- package/dist-extensions/src/canvas/SelectableCanvas.d.ts +534 -0
- package/dist-extensions/src/canvas/SelectableCanvas.d.ts.map +1 -0
- package/dist-extensions/src/canvas/StaticCanvas.d.ts +639 -0
- package/dist-extensions/src/canvas/StaticCanvas.d.ts.map +1 -0
- package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts +153 -0
- package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts.map +1 -0
- package/dist-extensions/src/canvas/TextEditingManager.d.ts +21 -0
- package/dist-extensions/src/canvas/TextEditingManager.d.ts.map +1 -0
- package/dist-extensions/src/color/Color.d.ts +162 -0
- package/dist-extensions/src/color/Color.d.ts.map +1 -0
- package/dist-extensions/src/color/color_map.d.ts +155 -0
- package/dist-extensions/src/color/color_map.d.ts.map +1 -0
- package/dist-extensions/src/color/constants.d.ts +111 -0
- package/dist-extensions/src/color/constants.d.ts.map +1 -0
- package/dist-extensions/src/color/typedefs.d.ts +16 -0
- package/dist-extensions/src/color/typedefs.d.ts.map +1 -0
- package/dist-extensions/src/color/util.d.ts +27 -0
- package/dist-extensions/src/color/util.d.ts.map +1 -0
- package/dist-extensions/src/config.d.ts +115 -0
- package/dist-extensions/src/config.d.ts.map +1 -0
- package/dist-extensions/src/constants.d.ts +35 -0
- package/dist-extensions/src/constants.d.ts.map +1 -0
- package/dist-extensions/src/controls/Control.d.ts +229 -0
- package/dist-extensions/src/controls/Control.d.ts.map +1 -0
- package/dist-extensions/src/controls/changeWidth.d.ts +13 -0
- package/dist-extensions/src/controls/changeWidth.d.ts.map +1 -0
- package/dist-extensions/src/controls/commonControls.d.ts +28 -0
- package/dist-extensions/src/controls/commonControls.d.ts.map +1 -0
- package/dist-extensions/src/controls/controlRendering.d.ts +29 -0
- package/dist-extensions/src/controls/controlRendering.d.ts.map +1 -0
- package/dist-extensions/src/controls/drag.d.ts +12 -0
- package/dist-extensions/src/controls/drag.d.ts.map +1 -0
- package/dist-extensions/src/controls/fireEvent.d.ts +3 -0
- package/dist-extensions/src/controls/fireEvent.d.ts.map +1 -0
- package/dist-extensions/src/controls/index.d.ts +14 -0
- package/dist-extensions/src/controls/index.d.ts.map +1 -0
- package/dist-extensions/src/controls/pathControl.d.ts +12 -0
- package/dist-extensions/src/controls/pathControl.d.ts.map +1 -0
- package/dist-extensions/src/controls/polyControl.d.ts +30 -0
- package/dist-extensions/src/controls/polyControl.d.ts.map +1 -0
- package/dist-extensions/src/controls/rotate.d.ts +12 -0
- package/dist-extensions/src/controls/rotate.d.ts.map +1 -0
- package/dist-extensions/src/controls/scale.d.ts +47 -0
- package/dist-extensions/src/controls/scale.d.ts.map +1 -0
- package/dist-extensions/src/controls/scaleSkew.d.ts +39 -0
- package/dist-extensions/src/controls/scaleSkew.d.ts.map +1 -0
- package/dist-extensions/src/controls/skew.d.ts +33 -0
- package/dist-extensions/src/controls/skew.d.ts.map +1 -0
- package/dist-extensions/src/controls/util.d.ts +41 -0
- package/dist-extensions/src/controls/util.d.ts.map +1 -0
- package/dist-extensions/src/controls/wrapWithFireEvent.d.ts +10 -0
- package/dist-extensions/src/controls/wrapWithFireEvent.d.ts.map +1 -0
- package/dist-extensions/src/controls/wrapWithFixedAnchor.d.ts +9 -0
- package/dist-extensions/src/controls/wrapWithFixedAnchor.d.ts.map +1 -0
- package/dist-extensions/src/env/browser.d.ts +3 -0
- package/dist-extensions/src/env/browser.d.ts.map +1 -0
- package/dist-extensions/src/env/index.d.ts +34 -0
- package/dist-extensions/src/env/index.d.ts.map +1 -0
- package/dist-extensions/src/env/types.d.ts +16 -0
- package/dist-extensions/src/env/types.d.ts.map +1 -0
- package/dist-extensions/src/filters/BaseFilter.d.ts +153 -0
- package/dist-extensions/src/filters/BaseFilter.d.ts.map +1 -0
- package/dist-extensions/src/filters/BlendColor.d.ts +68 -0
- package/dist-extensions/src/filters/BlendColor.d.ts.map +1 -0
- package/dist-extensions/src/filters/BlendImage.d.ts +99 -0
- package/dist-extensions/src/filters/BlendImage.d.ts.map +1 -0
- package/dist-extensions/src/filters/Blur.d.ts +50 -0
- package/dist-extensions/src/filters/Blur.d.ts.map +1 -0
- package/dist-extensions/src/filters/Brightness.d.ts +46 -0
- package/dist-extensions/src/filters/Brightness.d.ts.map +1 -0
- package/dist-extensions/src/filters/Canvas2dFilterBackend.d.ts +27 -0
- package/dist-extensions/src/filters/Canvas2dFilterBackend.d.ts.map +1 -0
- package/dist-extensions/src/filters/ColorMatrix.d.ts +66 -0
- package/dist-extensions/src/filters/ColorMatrix.d.ts.map +1 -0
- package/dist-extensions/src/filters/ColorMatrixFilters.d.ts +15 -0
- package/dist-extensions/src/filters/ColorMatrixFilters.d.ts.map +1 -0
- package/dist-extensions/src/filters/Composed.d.ts +47 -0
- package/dist-extensions/src/filters/Composed.d.ts.map +1 -0
- package/dist-extensions/src/filters/Contrast.d.ts +44 -0
- package/dist-extensions/src/filters/Contrast.d.ts.map +1 -0
- package/dist-extensions/src/filters/Convolute.d.ts +81 -0
- package/dist-extensions/src/filters/Convolute.d.ts.map +1 -0
- package/dist-extensions/src/filters/FilterBackend.d.ts +15 -0
- package/dist-extensions/src/filters/FilterBackend.d.ts.map +1 -0
- package/dist-extensions/src/filters/GLProbes/GLProbe.d.ts +7 -0
- package/dist-extensions/src/filters/GLProbes/GLProbe.d.ts.map +1 -0
- package/dist-extensions/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
- package/dist-extensions/src/filters/GLProbes/WebGLProbe.d.ts.map +1 -0
- package/dist-extensions/src/filters/Gamma.d.ts +58 -0
- package/dist-extensions/src/filters/Gamma.d.ts.map +1 -0
- package/dist-extensions/src/filters/Grayscale.d.ts +44 -0
- package/dist-extensions/src/filters/Grayscale.d.ts.map +1 -0
- package/dist-extensions/src/filters/HueRotation.d.ts +31 -0
- package/dist-extensions/src/filters/HueRotation.d.ts.map +1 -0
- package/dist-extensions/src/filters/Invert.d.ts +53 -0
- package/dist-extensions/src/filters/Invert.d.ts.map +1 -0
- package/dist-extensions/src/filters/Noise.d.ts +44 -0
- package/dist-extensions/src/filters/Noise.d.ts.map +1 -0
- package/dist-extensions/src/filters/Pixelate.d.ts +41 -0
- package/dist-extensions/src/filters/Pixelate.d.ts.map +1 -0
- package/dist-extensions/src/filters/RemoveColor.d.ts +53 -0
- package/dist-extensions/src/filters/RemoveColor.d.ts.map +1 -0
- package/dist-extensions/src/filters/Resize.d.ts +137 -0
- package/dist-extensions/src/filters/Resize.d.ts.map +1 -0
- package/dist-extensions/src/filters/Saturation.d.ts +46 -0
- package/dist-extensions/src/filters/Saturation.d.ts.map +1 -0
- package/dist-extensions/src/filters/Vibrance.d.ts +46 -0
- package/dist-extensions/src/filters/Vibrance.d.ts.map +1 -0
- package/dist-extensions/src/filters/WebGLFilterBackend.d.ts +131 -0
- package/dist-extensions/src/filters/WebGLFilterBackend.d.ts.map +1 -0
- package/dist-extensions/src/filters/filters.d.ts +23 -0
- package/dist-extensions/src/filters/filters.d.ts.map +1 -0
- package/dist-extensions/src/filters/index.d.ts +7 -0
- package/dist-extensions/src/filters/index.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/baseFilter.d.ts +4 -0
- package/dist-extensions/src/filters/shaders/baseFilter.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/blendColor.d.ts +13 -0
- package/dist-extensions/src/filters/shaders/blendColor.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/blendImage.d.ts +4 -0
- package/dist-extensions/src/filters/shaders/blendImage.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/blur.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/blur.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/brightness.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/brightness.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/colorMatrix.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/colorMatrix.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/constrast.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/constrast.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/convolute.d.ts +11 -0
- package/dist-extensions/src/filters/shaders/convolute.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/gamma.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/gamma.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/grayscale.d.ts +3 -0
- package/dist-extensions/src/filters/shaders/grayscale.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/invert.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/invert.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/noise.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/noise.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/pixelate.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/pixelate.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/removeColor.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/removeColor.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/saturation.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/saturation.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/vibrance.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/vibrance.d.ts.map +1 -0
- package/dist-extensions/src/filters/typedefs.d.ts +70 -0
- package/dist-extensions/src/filters/typedefs.d.ts.map +1 -0
- package/dist-extensions/src/filters/utils.d.ts +10 -0
- package/dist-extensions/src/filters/utils.d.ts.map +1 -0
- package/dist-extensions/src/gradient/Gradient.d.ts +156 -0
- package/dist-extensions/src/gradient/Gradient.d.ts.map +1 -0
- package/dist-extensions/src/gradient/constants.d.ts +15 -0
- package/dist-extensions/src/gradient/constants.d.ts.map +1 -0
- package/dist-extensions/src/gradient/index.d.ts +3 -0
- package/dist-extensions/src/gradient/index.d.ts.map +1 -0
- package/dist-extensions/src/gradient/parser/misc.d.ts +4 -0
- package/dist-extensions/src/gradient/parser/misc.d.ts.map +1 -0
- package/dist-extensions/src/gradient/parser/parseColorStops.d.ts +3 -0
- package/dist-extensions/src/gradient/parser/parseColorStops.d.ts.map +1 -0
- package/dist-extensions/src/gradient/parser/parseCoords.d.ts +17 -0
- package/dist-extensions/src/gradient/parser/parseCoords.d.ts.map +1 -0
- package/dist-extensions/src/gradient/typedefs.d.ts +93 -0
- package/dist-extensions/src/gradient/typedefs.d.ts.map +1 -0
- package/dist-extensions/src/parser/applyViewboxTransform.d.ts +13 -0
- package/dist-extensions/src/parser/applyViewboxTransform.d.ts.map +1 -0
- package/dist-extensions/src/parser/attributes.d.ts +6 -0
- package/dist-extensions/src/parser/attributes.d.ts.map +1 -0
- package/dist-extensions/src/parser/constants.d.ts +41 -0
- package/dist-extensions/src/parser/constants.d.ts.map +1 -0
- package/dist-extensions/src/parser/doesSomeParentMatch.d.ts +2 -0
- package/dist-extensions/src/parser/doesSomeParentMatch.d.ts.map +1 -0
- package/dist-extensions/src/parser/elementMatchesRule.d.ts +5 -0
- package/dist-extensions/src/parser/elementMatchesRule.d.ts.map +1 -0
- package/dist-extensions/src/parser/elements_parser.d.ts +33 -0
- package/dist-extensions/src/parser/elements_parser.d.ts.map +1 -0
- package/dist-extensions/src/parser/getCSSRules.d.ts +8 -0
- package/dist-extensions/src/parser/getCSSRules.d.ts.map +1 -0
- package/dist-extensions/src/parser/getGlobalStylesForElement.d.ts +6 -0
- package/dist-extensions/src/parser/getGlobalStylesForElement.d.ts.map +1 -0
- package/dist-extensions/src/parser/getGradientDefs.d.ts +7 -0
- package/dist-extensions/src/parser/getGradientDefs.d.ts.map +1 -0
- package/dist-extensions/src/parser/getMultipleNodes.d.ts +2 -0
- package/dist-extensions/src/parser/getMultipleNodes.d.ts.map +1 -0
- package/dist-extensions/src/parser/getSvgRegex.d.ts +2 -0
- package/dist-extensions/src/parser/getSvgRegex.d.ts.map +1 -0
- package/dist-extensions/src/parser/getTagName.d.ts +2 -0
- package/dist-extensions/src/parser/getTagName.d.ts.map +1 -0
- package/dist-extensions/src/parser/hasInvalidAncestor.d.ts +2 -0
- package/dist-extensions/src/parser/hasInvalidAncestor.d.ts.map +1 -0
- package/dist-extensions/src/parser/loadSVGFromString.d.ts +18 -0
- package/dist-extensions/src/parser/loadSVGFromString.d.ts.map +1 -0
- package/dist-extensions/src/parser/loadSVGFromURL.d.ts +19 -0
- package/dist-extensions/src/parser/loadSVGFromURL.d.ts.map +1 -0
- package/dist-extensions/src/parser/normalizeAttr.d.ts +3 -0
- package/dist-extensions/src/parser/normalizeAttr.d.ts.map +1 -0
- package/dist-extensions/src/parser/normalizeValue.d.ts +2 -0
- package/dist-extensions/src/parser/normalizeValue.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseAttributes.d.ts +10 -0
- package/dist-extensions/src/parser/parseAttributes.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseFontDeclaration.d.ts +10 -0
- package/dist-extensions/src/parser/parseFontDeclaration.d.ts.map +1 -0
- package/dist-extensions/src/parser/parsePointsAttribute.d.ts +10 -0
- package/dist-extensions/src/parser/parsePointsAttribute.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseSVGDocument.d.ts +22 -0
- package/dist-extensions/src/parser/parseSVGDocument.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseStyleAttribute.d.ts +9 -0
- package/dist-extensions/src/parser/parseStyleAttribute.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseStyleObject.d.ts +8 -0
- package/dist-extensions/src/parser/parseStyleObject.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseStyleString.d.ts +8 -0
- package/dist-extensions/src/parser/parseStyleString.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseTransformAttribute.d.ts +11 -0
- package/dist-extensions/src/parser/parseTransformAttribute.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseUseDirectives.d.ts +2 -0
- package/dist-extensions/src/parser/parseUseDirectives.d.ts.map +1 -0
- package/dist-extensions/src/parser/percent.d.ts +9 -0
- package/dist-extensions/src/parser/percent.d.ts.map +1 -0
- package/dist-extensions/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
- package/dist-extensions/src/parser/recursivelyParseGradientsXlink.d.ts.map +1 -0
- package/dist-extensions/src/parser/selectorMatches.d.ts +2 -0
- package/dist-extensions/src/parser/selectorMatches.d.ts.map +1 -0
- package/dist-extensions/src/parser/setStrokeFillOpacity.d.ts +6 -0
- package/dist-extensions/src/parser/setStrokeFillOpacity.d.ts.map +1 -0
- package/dist-extensions/src/parser/typedefs.d.ts +10 -0
- package/dist-extensions/src/parser/typedefs.d.ts.map +1 -0
- package/dist-extensions/src/shapes/ActiveSelection.d.ts +109 -0
- package/dist-extensions/src/shapes/ActiveSelection.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Circle.d.ts +111 -0
- package/dist-extensions/src/shapes/Circle.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Ellipse.d.ts +88 -0
- package/dist-extensions/src/shapes/Ellipse.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Group.d.ts +303 -0
- package/dist-extensions/src/shapes/Group.d.ts.map +1 -0
- package/dist-extensions/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
- package/dist-extensions/src/shapes/IText/DraggableTextDelegate.d.ts.map +1 -0
- package/dist-extensions/src/shapes/IText/IText.d.ts +314 -0
- package/dist-extensions/src/shapes/IText/IText.d.ts.map +1 -0
- package/dist-extensions/src/shapes/IText/ITextBehavior.d.ts +299 -0
- package/dist-extensions/src/shapes/IText/ITextBehavior.d.ts.map +1 -0
- package/dist-extensions/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
- package/dist-extensions/src/shapes/IText/ITextClickBehavior.d.ts.map +1 -0
- package/dist-extensions/src/shapes/IText/ITextKeyBehavior.d.ts +198 -0
- package/dist-extensions/src/shapes/IText/ITextKeyBehavior.d.ts.map +1 -0
- package/dist-extensions/src/shapes/IText/constants.d.ts +13 -0
- package/dist-extensions/src/shapes/IText/constants.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Image.d.ts +312 -0
- package/dist-extensions/src/shapes/Image.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Line.d.ts +122 -0
- package/dist-extensions/src/shapes/Line.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/AnimatableObject.d.ts +33 -0
- package/dist-extensions/src/shapes/Object/AnimatableObject.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/FabricObject.d.ts +11 -0
- package/dist-extensions/src/shapes/Object/FabricObject.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +72 -0
- package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts +317 -0
- package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/Object.d.ts +614 -0
- package/dist-extensions/src/shapes/Object/Object.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/ObjectGeometry.d.ts +237 -0
- package/dist-extensions/src/shapes/Object/ObjectGeometry.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/ObjectOrigin.d.ts +96 -0
- package/dist-extensions/src/shapes/Object/ObjectOrigin.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/StackedObject.d.ts +60 -0
- package/dist-extensions/src/shapes/Object/StackedObject.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/defaultValues.d.ts +8 -0
- package/dist-extensions/src/shapes/Object/defaultValues.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/BaseProps.d.ts +88 -0
- package/dist-extensions/src/shapes/Object/types/BaseProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/BorderProps.d.ts +37 -0
- package/dist-extensions/src/shapes/Object/types/BorderProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/ControlProps.d.ts +63 -0
- package/dist-extensions/src/shapes/Object/types/ControlProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts +66 -0
- package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
- package/dist-extensions/src/shapes/Object/types/FillStrokeProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
- package/dist-extensions/src/shapes/Object/types/LockInteractionProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts +43 -0
- package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/ObjectTransformProps.d.ts +34 -0
- package/dist-extensions/src/shapes/Object/types/ObjectTransformProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
- package/dist-extensions/src/shapes/Object/types/SerializedObjectProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/index.d.ts +6 -0
- package/dist-extensions/src/shapes/Object/types/index.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Path.d.ts +215 -0
- package/dist-extensions/src/shapes/Path.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Polygon.d.ts +7 -0
- package/dist-extensions/src/shapes/Polygon.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Polyline.d.ts +156 -0
- package/dist-extensions/src/shapes/Polyline.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Rect.d.ts +83 -0
- package/dist-extensions/src/shapes/Rect.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Text/StyledText.d.ts +128 -0
- package/dist-extensions/src/shapes/Text/StyledText.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Text/Text.d.ts +697 -0
- package/dist-extensions/src/shapes/Text/Text.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Text/TextSVGExportMixin.d.ts +47 -0
- package/dist-extensions/src/shapes/Text/TextSVGExportMixin.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Text/constants.d.ts +13 -0
- package/dist-extensions/src/shapes/Text/constants.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Textbox.d.ts +226 -0
- package/dist-extensions/src/shapes/Textbox.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Triangle.d.ts +27 -0
- package/dist-extensions/src/shapes/Triangle.d.ts.map +1 -0
- package/dist-extensions/src/typedefs.d.ts +97 -0
- package/dist-extensions/src/typedefs.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/AnimationBase.d.ts +54 -0
- package/dist-extensions/src/util/animation/AnimationBase.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/AnimationFrameProvider.d.ts +3 -0
- package/dist-extensions/src/util/animation/AnimationFrameProvider.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/AnimationRegistry.d.ts +29 -0
- package/dist-extensions/src/util/animation/AnimationRegistry.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/ArrayAnimation.d.ts +10 -0
- package/dist-extensions/src/util/animation/ArrayAnimation.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/ColorAnimation.d.ts +11 -0
- package/dist-extensions/src/util/animation/ColorAnimation.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/ValueAnimation.d.ts +10 -0
- package/dist-extensions/src/util/animation/ValueAnimation.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/animate.d.ts +37 -0
- package/dist-extensions/src/util/animation/animate.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/easing.d.ts +130 -0
- package/dist-extensions/src/util/animation/easing.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/index.d.ts +3 -0
- package/dist-extensions/src/util/animation/index.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/types.d.ts +87 -0
- package/dist-extensions/src/util/animation/types.d.ts.map +1 -0
- package/dist-extensions/src/util/applyMixins.d.ts +8 -0
- package/dist-extensions/src/util/applyMixins.d.ts.map +1 -0
- package/dist-extensions/src/util/dom_event.d.ts +6 -0
- package/dist-extensions/src/util/dom_event.d.ts.map +1 -0
- package/dist-extensions/src/util/dom_misc.d.ts +12 -0
- package/dist-extensions/src/util/dom_misc.d.ts.map +1 -0
- package/dist-extensions/src/util/dom_style.d.ts +7 -0
- package/dist-extensions/src/util/dom_style.d.ts.map +1 -0
- package/dist-extensions/src/util/index.d.ts +37 -0
- package/dist-extensions/src/util/index.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/cleanupSvgAttribute.d.ts +2 -0
- package/dist-extensions/src/util/internals/cleanupSvgAttribute.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/cloneStyles.d.ts +3 -0
- package/dist-extensions/src/util/internals/cloneStyles.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/console.d.ts +8 -0
- package/dist-extensions/src/util/internals/console.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/dom_request.d.ts +16 -0
- package/dist-extensions/src/util/internals/dom_request.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/findRight.d.ts +2 -0
- package/dist-extensions/src/util/internals/findRight.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/getRandomInt.d.ts +8 -0
- package/dist-extensions/src/util/internals/getRandomInt.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/ifNaN.d.ts +8 -0
- package/dist-extensions/src/util/internals/ifNaN.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/removeFromArray.d.ts +9 -0
- package/dist-extensions/src/util/internals/removeFromArray.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/uid.d.ts +2 -0
- package/dist-extensions/src/util/internals/uid.d.ts.map +1 -0
- package/dist-extensions/src/util/lang_string.d.ts +22 -0
- package/dist-extensions/src/util/lang_string.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
- package/dist-extensions/src/util/misc/boundingBoxFromPoints.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/capValue.d.ts +2 -0
- package/dist-extensions/src/util/misc/capValue.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/cos.d.ts +10 -0
- package/dist-extensions/src/util/misc/cos.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/dom.d.ts +28 -0
- package/dist-extensions/src/util/misc/dom.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/findScaleTo.d.ts +20 -0
- package/dist-extensions/src/util/misc/findScaleTo.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/groupSVGElements.d.ts +11 -0
- package/dist-extensions/src/util/misc/groupSVGElements.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/isTransparent.d.ts +11 -0
- package/dist-extensions/src/util/misc/isTransparent.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/matrix.d.ts +170 -0
- package/dist-extensions/src/util/misc/matrix.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/mergeClipPaths.d.ts +23 -0
- package/dist-extensions/src/util/misc/mergeClipPaths.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/objectEnlive.d.ts +45 -0
- package/dist-extensions/src/util/misc/objectEnlive.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/objectTransforms.d.ts +62 -0
- package/dist-extensions/src/util/misc/objectTransforms.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/pick.d.ts +9 -0
- package/dist-extensions/src/util/misc/pick.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/planeChange.d.ts +64 -0
- package/dist-extensions/src/util/misc/planeChange.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +52 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +90 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +27 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/projectStroke/index.d.ts +12 -0
- package/dist-extensions/src/util/misc/projectStroke/index.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/projectStroke/types.d.ts +23 -0
- package/dist-extensions/src/util/misc/projectStroke/types.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/radiansDegreesConversion.d.ts +14 -0
- package/dist-extensions/src/util/misc/radiansDegreesConversion.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/resolveOrigin.d.ts +9 -0
- package/dist-extensions/src/util/misc/resolveOrigin.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/rotatePoint.d.ts +12 -0
- package/dist-extensions/src/util/misc/rotatePoint.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/sin.d.ts +10 -0
- package/dist-extensions/src/util/misc/sin.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/svgParsing.d.ts +46 -0
- package/dist-extensions/src/util/misc/svgParsing.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/textStyles.d.ts +32 -0
- package/dist-extensions/src/util/misc/textStyles.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/toFixed.d.ts +8 -0
- package/dist-extensions/src/util/misc/toFixed.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/vectors.d.ts +72 -0
- package/dist-extensions/src/util/misc/vectors.d.ts.map +1 -0
- package/dist-extensions/src/util/path/index.d.ts +95 -0
- package/dist-extensions/src/util/path/index.d.ts.map +1 -0
- package/dist-extensions/src/util/path/regex.d.ts +2 -0
- package/dist-extensions/src/util/path/regex.d.ts.map +1 -0
- package/dist-extensions/src/util/path/typedefs.d.ts +221 -0
- package/dist-extensions/src/util/path/typedefs.d.ts.map +1 -0
- package/dist-extensions/src/util/transform_matrix_removal.d.ts +14 -0
- package/dist-extensions/src/util/transform_matrix_removal.d.ts.map +1 -0
- package/dist-extensions/src/util/typeAssertions.d.ts +13 -0
- package/dist-extensions/src/util/typeAssertions.d.ts.map +1 -0
- package/eslint.config.mjs +108 -0
- package/extensions/README.MD +27 -0
- package/extensions/aligning_guidelines/README.MD +22 -0
- package/extensions/aligning_guidelines/constant.ts +10 -0
- package/extensions/aligning_guidelines/index.ts +166 -0
- package/extensions/aligning_guidelines/typedefs.ts +36 -0
- package/extensions/aligning_guidelines/util/basic.spec.ts +31 -0
- package/extensions/aligning_guidelines/util/basic.ts +20 -0
- package/extensions/aligning_guidelines/util/collect-line.ts +172 -0
- package/extensions/aligning_guidelines/util/collect-point.ts +83 -0
- package/extensions/aligning_guidelines/util/draw.ts +74 -0
- package/extensions/aligning_guidelines/util/get-objects-by-target.ts +45 -0
- package/extensions/index.ts +4 -0
- package/jest.config.js +1 -1
- package/jest.extend.ts +14 -15
- package/package.json +17 -12
- package/playwright.setup.ts +5 -5
- package/rollup.config.mjs +46 -4
- package/scripts/build.mjs +1 -1
- package/scripts/buildLock.mjs +5 -5
- package/scripts/buildStats.mjs +2 -2
- package/scripts/git.mjs +1 -1
- package/scripts/index.mjs +34 -32
- package/scripts/sandbox.mjs +15 -15
- package/src/ClassRegistry.spec.ts +1 -1
- package/src/ClassRegistry.ts +1 -1
- package/src/Collection.ts +9 -9
- package/src/EventTypeDefs.ts +2 -2
- package/src/Intersection.spec.ts +2 -2
- package/src/Intersection.ts +11 -11
- package/src/LayoutManager/ActiveSelectionLayoutManager.spec.ts +3 -3
- package/src/LayoutManager/ActiveSelectionLayoutManager.ts +2 -2
- package/src/LayoutManager/LayoutManager.spec.ts +17 -17
- package/src/LayoutManager/LayoutManager.ts +15 -15
- package/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts +3 -3
- package/src/LayoutManager/LayoutStrategies/FixedLayout.ts +1 -1
- package/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts +4 -4
- package/src/LayoutManager/LayoutStrategies/utils.ts +4 -4
- package/src/LayoutManager/types.ts +12 -13
- package/src/Observable.ts +7 -7
- package/src/Pattern/Pattern.ts +20 -10
- package/src/Point.ts +3 -3
- package/src/Shadow.ts +7 -7
- package/src/brushes/CircleBrush.ts +1 -1
- package/src/brushes/PatternBrush.ts +1 -1
- package/src/brushes/PencilBrush.ts +1 -1
- package/src/brushes/SprayBrush.ts +3 -3
- package/src/canvas/Canvas.ts +38 -35
- package/src/canvas/DOMManagers/CanvasDOMManager.ts +2 -2
- package/src/canvas/DOMManagers/StaticCanvasDOMManager.ts +1 -1
- package/src/canvas/DOMManagers/util.ts +2 -2
- package/src/canvas/SelectableCanvas.spec.ts +8 -8
- package/src/canvas/SelectableCanvas.ts +20 -20
- package/src/canvas/StaticCanvas.ts +44 -43
- package/src/canvas/StaticCanvasOptions.ts +0 -1
- package/src/canvas/TextEditingManager.ts +1 -1
- package/src/canvas/__tests__/eventData.test.ts +17 -17
- package/src/color/Color.ts +3 -2
- package/src/color/color.test.ts +2 -2
- package/src/color/typedefs.ts +1 -1
- package/src/color/util.ts +1 -1
- package/src/config.ts +1 -1
- package/src/controls/Control.spec.ts +8 -8
- package/src/controls/Control.ts +14 -14
- package/src/controls/changeWidth.test.ts +2 -2
- package/src/controls/changeWidth.ts +4 -4
- package/src/controls/controlRendering.ts +4 -4
- package/src/controls/drag.ts +1 -1
- package/src/controls/fireEvent.ts +1 -1
- package/src/controls/pathControl.spec.ts +9 -9
- package/src/controls/pathControl.ts +20 -20
- package/src/controls/polyControl.spec.ts +6 -6
- package/src/controls/polyControl.ts +11 -11
- package/src/controls/rotate.ts +4 -4
- package/src/controls/scale.test.ts +9 -9
- package/src/controls/scale.ts +13 -13
- package/src/controls/scaleSkew.ts +3 -3
- package/src/controls/skew.ts +8 -8
- package/src/controls/util.ts +6 -6
- package/src/controls/wrapWithFireEvent.ts +2 -2
- package/src/controls/wrapWithFixedAnchor.spec.ts +5 -5
- package/src/controls/wrapWithFixedAnchor.ts +2 -2
- package/src/env/node.ts +2 -2
- package/src/filters/BaseFilter.ts +27 -25
- package/src/filters/BlendColor.ts +1 -1
- package/src/filters/BlendImage.ts +4 -4
- package/src/filters/Blur.ts +1 -1
- package/src/filters/Boilerplate.ts +1 -1
- package/src/filters/Brightness.ts +1 -1
- package/src/filters/Canvas2dFilterBackend.ts +1 -1
- package/src/filters/ColorMatrix.ts +2 -2
- package/src/filters/ColorMatrixFilters.ts +7 -7
- package/src/filters/Composed.ts +5 -5
- package/src/filters/Contrast.ts +1 -1
- package/src/filters/Convolute.ts +1 -1
- package/src/filters/GLProbes/WebGLProbe.ts +2 -2
- package/src/filters/Gamma.ts +1 -1
- package/src/filters/Grayscale.ts +1 -1
- package/src/filters/Invert.ts +1 -1
- package/src/filters/Noise.ts +1 -1
- package/src/filters/Pixelate.ts +1 -1
- package/src/filters/RemoveColor.ts +1 -1
- package/src/filters/Resize.ts +9 -9
- package/src/filters/Saturation.ts +1 -1
- package/src/filters/Vibrance.ts +1 -1
- package/src/filters/WebGLFilterBackend.ts +10 -10
- package/src/filters/typedefs.ts +1 -3
- package/src/filters/utils.ts +3 -3
- package/src/gradient/Gradient.spec.ts +19 -19
- package/src/gradient/Gradient.ts +51 -50
- package/src/gradient/parser/parseColorStops.ts +3 -3
- package/src/gradient/parser/parseCoords.ts +28 -25
- package/src/mixins/eraser_brush.mixin.ts +21 -21
- package/src/parkinglot/straighten.ts +1 -1
- package/src/parser/applyViewboxTransform.ts +2 -2
- package/src/parser/constants.ts +2 -2
- package/src/parser/elements_parser.ts +13 -13
- package/src/parser/getCSSRules.ts +1 -1
- package/src/parser/getGlobalStylesForElement.ts +1 -1
- package/src/parser/getGradientDefs.ts +1 -1
- package/src/parser/getMultipleNodes.ts +2 -2
- package/src/parser/loadSVGFromString.test.ts +1 -4
- package/src/parser/loadSVGFromString.ts +1 -1
- package/src/parser/loadSVGFromURL.ts +1 -1
- package/src/parser/normalizeAttr.ts +1 -1
- package/src/parser/normalizeValue.ts +2 -2
- package/src/parser/parseAttributes.ts +3 -3
- package/src/parser/parseFontDeclaration.ts +1 -1
- package/src/parser/parseSVGDocument.ts +3 -3
- package/src/parser/parseStyleObject.ts +1 -1
- package/src/parser/parseStyleString.ts +1 -1
- package/src/parser/parseTransformAttribute.ts +1 -1
- package/src/parser/parseUseDirectives.ts +1 -1
- package/src/parser/percent.ts +4 -4
- package/src/parser/recursivelyParseGradientsXlink.ts +1 -1
- package/src/parser/setStrokeFillOpacity.ts +1 -1
- package/src/parser/typedefs.ts +1 -1
- package/src/shapes/ActiveSelection.spec.ts +1 -1
- package/src/shapes/ActiveSelection.ts +4 -4
- package/src/shapes/Circle.ts +5 -5
- package/src/shapes/Ellipse.ts +4 -4
- package/src/shapes/Group.spec.ts +5 -5
- package/src/shapes/Group.ts +19 -17
- package/src/shapes/IText/DraggableTextDelegate.ts +9 -10
- package/src/shapes/IText/IText.test.ts +1 -1
- package/src/shapes/IText/IText.ts +12 -12
- package/src/shapes/IText/ITextBehavior.test.ts +2 -2
- package/src/shapes/IText/ITextBehavior.ts +21 -21
- package/src/shapes/IText/ITextClickBehavior.ts +2 -2
- package/src/shapes/IText/ITextKeyBehavior.test.ts +2 -2
- package/src/shapes/IText/ITextKeyBehavior.ts +13 -13
- package/src/shapes/Image.ts +16 -16
- package/src/shapes/Line.ts +4 -4
- package/src/shapes/Object/AnimatableObject.ts +13 -10
- package/src/shapes/Object/FabricObject.ts +7 -3
- package/src/shapes/Object/FabricObjectSVGExportMixin.ts +9 -9
- package/src/shapes/Object/InteractiveObject.spec.ts +3 -3
- package/src/shapes/Object/InteractiveObject.ts +32 -32
- package/src/shapes/Object/Object.ts +33 -31
- package/src/shapes/Object/ObjectGeometry.ts +9 -9
- package/src/shapes/Object/ObjectOrigin.ts +11 -11
- package/src/shapes/Object/StackedObject.ts +3 -4
- package/src/shapes/Path.ts +14 -14
- package/src/shapes/Polyline.spec.ts +1 -1
- package/src/shapes/Polyline.ts +15 -16
- package/src/shapes/Rect.ts +6 -6
- package/src/shapes/Text/StyledText.spec.ts +2 -2
- package/src/shapes/Text/StyledText.ts +7 -7
- package/src/shapes/Text/Text.spec.ts +1 -1
- package/src/shapes/Text/Text.ts +33 -33
- package/src/shapes/Text/TextSVGExportMixin.spec.ts +1 -1
- package/src/shapes/Text/TextSVGExportMixin.ts +23 -23
- package/src/shapes/Textbox.ts +7 -7
- package/src/shapes/Triangle.ts +1 -1
- package/src/typedefs.ts +3 -3
- package/src/util/animation/AnimationBase.ts +2 -2
- package/src/util/animation/AnimationRegistry.ts +1 -1
- package/src/util/animation/ArrayAnimation.ts +2 -2
- package/src/util/animation/ColorAnimation.ts +5 -5
- package/src/util/animation/ValueAnimation.ts +1 -1
- package/src/util/animation/animate.ts +6 -6
- package/src/util/animation/animations.spec.ts +7 -7
- package/src/util/animation/easing.ts +1 -1
- package/src/util/animation/types.ts +5 -6
- package/src/util/applyMixins.ts +2 -2
- package/src/util/dom_style.ts +2 -2
- package/src/util/internals/cloneDeep.ts +6 -0
- package/src/util/internals/cloneStyles.spec.ts +46 -0
- package/src/util/internals/cloneStyles.ts +12 -0
- package/src/util/internals/findRight.ts +1 -1
- package/src/util/internals/getRandomInt.test.ts +1 -1
- package/src/util/misc/boundingBoxFromPoints.ts +1 -1
- package/src/util/misc/dom.ts +3 -3
- package/src/util/misc/findScaleTo.ts +2 -2
- package/src/util/misc/groupSVGElements.ts +1 -1
- package/src/util/misc/isTransparent.ts +1 -1
- package/src/util/misc/matrix.ts +6 -6
- package/src/util/misc/objectEnlive.ts +9 -9
- package/src/util/misc/objectTransforms.ts +5 -5
- package/src/util/misc/pick.ts +2 -2
- package/src/util/misc/planeChange.spec.ts +9 -9
- package/src/util/misc/planeChange.ts +5 -5
- package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +7 -7
- package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +16 -16
- package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +2 -2
- package/src/util/misc/projectStroke/index.ts +7 -7
- package/src/util/misc/resolveOrigin.ts +1 -1
- package/src/util/misc/rotatePoint.ts +1 -1
- package/src/util/misc/svgParsing.ts +5 -5
- package/src/util/misc/textStyles.ts +6 -6
- package/src/util/misc/vectors.ts +1 -1
- package/src/util/path/index.spec.ts +3 -3
- package/src/util/path/index.ts +30 -30
- package/src/util/path/typechecks.ts +22 -22
- package/src/util/path/typedefs.ts +14 -17
- package/src/util/transform_matrix_removal.ts +3 -3
- package/src/util/typeAssertions.ts +4 -4
- package/tsconfig-extensions.json +108 -0
- package/tsconfig.json +4 -3
- package/.eslintignore +0 -3
- package/.eslintrc.js +0 -60
- package/.eslintrc.json +0 -143
- package/.eslintrc_tests +0 -58
- package/dist/src/util/internals/cloneDeep.min.mjs +0 -2
- package/dist/src/util/internals/cloneDeep.min.mjs.map +0 -1
- package/dist/src/util/internals/cloneDeep.mjs +0 -4
- package/dist/src/util/internals/cloneDeep.mjs.map +0 -1
- package/dist/src/util/internals/index.d.ts +0 -5
- package/dist/src/util/internals/index.d.ts.map +0 -1
- package/src/benchmarks/README.md +0 -7
- package/src/benchmarks/calcCornerCoords.mjs +0 -117
- package/src/benchmarks/calcTransformMatrix.mjs +0 -104
- package/src/benchmarks/pathCloning.mjs +0 -111
- package/src/benchmarks/pathData.mjs +0 -5
- package/src/benchmarks/raycasting.mjs +0 -152
- package/src/benchmarks/transformMatrixKey.mjs +0 -97
- package/src/util/internals/index.ts +0 -4
|
@@ -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.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":"86BA2CA,MAAMA,UAA0BC,EAE9BC,aAAAA,GAAiB,EAwBZ,MAAMC,EAAuD,CAClEC,YAAa,EACbC,gBAAgB,EAChBC,aAAa,GASR,MAAMC,UACHC,EACNC,IA0CF,kBAAOC,GACL,OAAAC,EAAAA,EAAA,GACKC,MAAMF,eACNH,EAAMM,YAEb,CAQAC,WAAAA,GAA6E,IAAjEC,EAAuBC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAAIG,EAA4BH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAA,EACvEJ,QA5BFQ,wBAM2C,IAAEA,EAAAC,KAAA,gCAAA,GAAAD,EAAAC,KAAA,iCAAA,GAuB3CC,OAAOC,OAAOF,KAAMd,EAAMM,aAC1BQ,KAAKG,WAAWL,GAChBE,KAAKI,UAAUV,EAASI,EAC1B,CAMUM,SAAAA,CACRV,EACAI,GAKA,IAAAO,EACAL,KAAKM,SAAW,IAAIZ,GAEpBM,KAAKO,yBAA2BP,KAAKQ,yBAAyBC,KAC5DT,MACA,GAEFA,KAAKU,0BAA4BV,KAAKQ,yBAAyBC,KAC7DT,MACA,GAGFA,KAAKW,eAAeC,IAClBZ,KAAKa,WAAWD,GAAQ,EAAM,IAIhCZ,KAAKc,cAAqCT,QAAxBA,EAAGP,EAAQgB,yBAAaT,EAAAA,EAAI,IAAIzB,EAClDoB,KAAKc,cAAcjC,cAAc,CAC/BkC,KAAMC,EACNC,OAAQjB,KACRkB,QAAS,IAAIxB,GAIbyB,EAAGrB,EAAQsB,KACXC,EAAGvB,EAAQwB,KAEf,CAQAC,aAAAA,CAAcX,GACZ,OAAIA,IAAWZ,MAAQA,KAAKwB,eAAeZ,IAEzCa,EACE,QACA,4EAEK,IACqC,IAAnCzB,KAAKM,SAASoB,QAAQd,KAE/Ba,EACE,QACA,qFAEK,EAGX,CAOUE,iCAAAA,CAAkCjC,GAC1C,OAAOA,EAAQkC,QAAO,CAAChB,EAAQiB,EAAOC,IAE7B9B,KAAKuB,cAAcX,IAAWkB,EAAMJ,QAAQd,KAAYiB,GAEnE,CAMAE,GAAAA,GAAgC,IAAA,IAAAC,EAAArC,UAAAC,OAAzBF,EAAOuC,IAAAA,MAAAD,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAPxC,EAAOwC,GAAAvC,UAAAuC,GACZ,MAAMC,EAAiBnC,KAAK2B,kCAAkCjC,GACxD0C,EAAO7C,MAAMwC,OAAOI,GAE1B,OADAnC,KAAKqC,sBAAsBC,EAAmBH,GACvCC,CACT,CAOAG,QAAAA,CAASV,GAA2C,IAAAW,IAAAA,EAAA7C,UAAAC,OAAzBF,MAAOuC,MAAAO,EAAAA,EAAAA,OAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAP/C,EAAO+C,EAAA9C,GAAAA,UAAA8C,GAChC,MAAMN,EAAiBnC,KAAK2B,kCAAkCjC,GACxD0C,EAAO7C,MAAMgD,SAASV,KAAUM,GAEtC,OADAnC,KAAKqC,sBAAsBC,EAAmBH,GACvCC,CACT,CAOAM,MAAAA,GACE,MAAMC,EAAUpD,MAAMmD,UAAO/C,WAE7B,OADAK,KAAKqC,sBAAsBO,EAAqBD,GACzCA,CACT,CAEAE,cAAAA,CAAejC,GACbZ,KAAKa,WAAWD,GAAQ,GACxBZ,KAAK8C,KAAK,eAAgB,CAAE7B,OAAQL,IACpCA,EAAOkC,KAAK,QAAS,CAAE7B,OAAQjB,MACjC,CAOA+C,gBAAAA,CAAiBnC,EAAsBoC,GACrChD,KAAKiD,UAAUrC,EAAQoC,GACvBhD,KAAK8C,KAAK,iBAAkB,CAAE7B,OAAQL,IACtCA,EAAOkC,KAAK,UAAW,CAAE7B,OAAQjB,MACnC,CAOAqC,qBAAAA,CAAsBtB,EAA2BG,GAC/ClB,KAAKc,cAAcjC,cAAc,CAC/BkC,OACAG,UACAD,OAAQjB,MAEZ,CAEAkD,oBAAAA,GACElD,KAAKmD,KAAK,SAAS,EACrB,CAOAA,IAAAA,CAAKC,EAAaC,GAChB,MAAMC,EAAOtD,KAAKoD,GAOlB,OANA7D,MAAM4D,KAAKC,EAAKC,GACJ,WAARD,GAAoBE,IAASD,IAC9BrD,KAAKM,UAAY,IAAIiD,SAAS3C,IAC7BA,EAAOuC,KAAKC,EAAKC,EAAM,IAGpBrD,IACT,CAKAwD,sBAAAA,GACE,OAAOxD,KAAKhB,cACd,CAMAyE,SAAAA,GAEE,OADAzD,KAAK0D,eAAiB,GACf1D,KAAK0C,UAAU1C,KAAKM,SAC7B,CAMAE,wBAAAA,CACEmD,EAAWC,GAEX,IADE3C,OAAQL,GAAkEgD,EAE5E,MAAMC,EAAgB7D,KAAK0D,eAC3B,GAAIC,EACFE,EAAcC,KAAKlD,GACnBZ,KAAKmD,KAAK,SAAS,QACd,GAAIU,EAAcjE,OAAS,EAAG,CACnC,MAAMiC,EAAQgC,EAAcnC,QAAQd,GAChCiB,GAAS,IACXgC,EAAcE,OAAOlC,EAAO,GAC5B7B,KAAKmD,KAAK,SAAS,GAEvB,CACF,CAOAa,YAAAA,CAAaC,EAAgBrD,GAE3BqD,GAASjE,KAAKgE,cAAa,EAAOpD,GAC9BqD,GACFrD,EAAOsD,GAAG,WAAYlE,KAAKO,0BAC3BK,EAAOsD,GAAG,aAAclE,KAAKU,6BAE7BE,EAAOuD,IAAI,WAAYnE,KAAKO,0BAC5BK,EAAOuD,IAAI,aAAcnE,KAAKU,2BAElC,CAOAG,UAAAA,CAAWD,EAAsBoC,GAC/BpC,EAAOwD,OAASxD,EAAOwD,MAAM1B,OAAO9B,GACpCA,EAAOuC,KAAK,SAAUnD,MACtBA,KAAKqE,YAAYzD,EAAQoC,EAC3B,CAOAqB,WAAAA,CAAYzD,EAAsBoC,GAC5BA,GAEFsB,EACE1D,EACA2D,EACEC,EAAgBxE,KAAKyE,uBACrB7D,EAAO6D,wBAIbzE,KAAKwD,0BAA4B5C,EAAO8D,YACxC9D,EAAOuC,KAAK,QAASnD,MACrBY,EAAOuC,KAAK,SAAUnD,KAAK2E,QAC3B3E,KAAKgE,cAAa,EAAMpD,GACxB,MAAMgE,EACJ5E,KAAK2E,QACL3E,KAAK2E,OAAOE,iBACZ7E,KAAK2E,OAAOE,kBAGZD,IACCA,IAAiBhE,GAAUA,EAAOY,eAAeoD,KAElD5E,KAAK0D,eAAeI,KAAKlD,EAE7B,CAOAqC,SAAAA,CAAUrC,EAAsBoC,GAC9BhD,KAAK8E,WAAWlE,EAAQoC,GACxBpC,EAAOuC,KAAK,cAAUtD,GACtBe,EAAOuC,KAAK,cAAUtD,EACxB,CAWAiF,UAAAA,CAAWlE,EAAsBoC,GAC/BpC,EAAOuC,KAAK,aAAStD,GAChBmD,IACHsB,EACE1D,EACA2D,EACEvE,KAAKyE,sBACL7D,EAAO6D,wBAGX7D,EAAO8D,aAET1E,KAAKgE,cAAa,EAAOpD,GACzB,MAAMiB,EACJ7B,KAAK0D,eAAe9D,OAAS,EAAII,KAAK0D,eAAehC,QAAQd,IAAW,EACtEiB,GAAS,GACX7B,KAAK0D,eAAeK,OAAOlC,EAAO,EAEtC,CASAkD,WAAAA,GACE,MAAMC,EAAW5F,EAAa6F,UAAUF,YAAYG,KAAKlF,MACzD,GAAIgF,EACF,IAAK,IAAIG,EAAI,EAAGA,EAAInF,KAAKM,SAASV,OAAQuF,IACxC,GAAInF,KAAKM,SAAS6E,GAAGC,iBAEnB,OADApF,KAAKqF,YAAa,GACX,EAIb,OAAOL,CACT,CAMAI,cAAAA,GACE,GAAI7F,MAAM6F,iBACR,OAAO,EAET,IAAK,IAAID,EAAI,EAAGA,EAAInF,KAAKM,SAASV,OAAQuF,IACxC,GAAInF,KAAKM,SAAS6E,GAAGC,iBACnB,OAAO,EAGX,OAAO,CACT,CAMAE,UAAAA,GACE,OAAOtF,KAAKqF,cAAiBrF,KAAKuF,QAAUvF,KAAKuF,OAAOD,YAC1D,CAMAE,UAAAA,CAAWC,GACTzF,KAAK0F,kBAAkBD,GACvB,IAAK,IAAIN,EAAI,EAAGA,EAAInF,KAAKM,SAASV,OAAQuF,IAAK,CAAA,IAAAQ,EAGhCA,QAAXA,EAAI3F,KAAC2E,cAALgB,IAAWA,GAAXA,EAAaC,wBACb5F,KAAKM,SAAS6E,GAAGf,QAAUpE,MAE3ByF,EAAII,OACJJ,EAAIK,aAAatB,EAAgBxE,KAAKyE,wBACtCzE,KAAKM,SAAS6E,GAAGY,OAAON,GACxBA,EAAIO,WACKhG,KAAKM,SAAS6E,GAAGf,QAAUpE,MACpCA,KAAKM,SAAS6E,GAAGY,OAAON,EAE5B,CACAzF,KAAKiG,cAAcR,EAAKzF,KAAKkG,SAC/B,CAMAxB,SAAAA,GACEnF,MAAMmF,YACN1E,KAAKwD,0BACHxD,KAAKW,eAAeC,GAAWA,EAAO8D,aAC1C,CAEAyB,aAAAA,GAAqD,IAAvCrG,EAAgCH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAA,EAC/CK,KAAKc,cAAcjC,cAAaS,EAAA,CAC9B2B,OAAQjB,KACRe,KAAMqF,GACHtG,GAEP,CAMAiG,MAAAA,CAAON,GACLzF,KAAKqG,gBAAiB,EACtB9G,MAAMwG,OAAON,GACbzF,KAAKqG,gBAAiB,CACxB,CASAC,kBAAAA,CACEC,EACAC,GAEA,MAAMC,EAAwBzG,KAAK0G,qBACnC,OAAO1G,KAAKM,SACTsB,QAAO,SAAU+E,GAChB,OAAQA,EAAIC,iBACd,IACCC,KAAI,SAAUF,GACb,MAAMG,EAAmBH,EAAID,qBAC7BC,EAAID,qBAAuBD,EAC3B,MAAMM,EAAOJ,EAAIJ,GAAU,YAAYC,GAGvC,OAFAG,EAAID,qBAAuBI,EAEpBC,CACT,GACJ,CAOAC,QAAAA,GAMoE,IAAlER,EAAwB7G,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAC3B,MAAMmB,EAAgBd,KAAKc,cAAckG,WAEzC,OAAA1H,EAAAA,EAAAA,EAAA,CAAA,EACKC,MAAMyH,SAAS,CAChB,iBACA,iBACGR,KAE0B,gBAA3B1F,EAAcmG,UAA8BjH,KAAK0G,qBACjD,CAAE5F,iBACF,CAAA,GAAE,GAAA,CACNpB,QAASM,KAAKsG,mBACZ,WACAE,IAGN,CAEAU,QAAAA,GACE,MAAA,aAAAC,OAAoBnH,KAAKoH,aAAY,KACvC,CAEAC,OAAAA,GACErH,KAAKc,cAAcwG,mBAAmB,CACpCpG,QAASlB,KAAKuH,aACdtG,OAAQjB,OAEVA,KAAK0D,eAAiB,GACtB1D,KAAKW,eAAeC,IAClBZ,KAAKgE,cAAa,EAAOpD,GACzBA,EAAOyG,SAAS,IAElB9H,MAAM8H,SACR,CAKAG,gBAAAA,CAAiBC,GACf,IAAKzH,KAAK0H,gBACR,MAAO,GAET,MAAMC,EAAaC,EAAK3C,UAAU4C,OAAO3C,KAAKlF,MACxC8H,EAAUH,EAAWjG,QAAQ,gBACnCiG,EAAWG,GAAW,eACtB,MAAMC,EAASJ,EAAWK,KAAK,IAC/B,OAAOP,EAAUA,EAAQM,GAAUA,CACrC,CAOAF,MAAAA,CAAOJ,GACL,MAAMQ,EAAY,CAAC,MAAO,eAAgB,QACpCC,EAAKlI,KAAKwH,iBAAiBC,GACjCS,GAAMD,EAAUnE,KAAK,OAAQoE,GAC7B,IAAK,IAAI/C,EAAI,EAAGA,EAAInF,KAAKM,SAASV,OAAQuF,IACxC8C,EAAUnE,KAAK,OAAQ9D,KAAKM,SAAS6E,GAAGgD,MAAMV,IAGhD,OADAQ,EAAUnE,KAAK,UACRmE,CACT,CAMAG,YAAAA,GACE,MAAMC,OACsB,IAAjBrI,KAAKqI,SAA4C,IAAjBrI,KAAKqI,QAAalB,YAAAA,OACzCnH,KAAKqI,QAAO,KACxB,GACNC,EAAatI,KAAKuI,QAAU,GAAK,uBACnC,MAAO,CAACF,EAASrI,KAAKwI,eAAgBF,GAAYN,KAAK,GACzD,CAOAS,aAAAA,CAAchB,GACZ,MAAMQ,EAAY,GACZC,EAAKlI,KAAKwH,iBAAiBC,GACjCS,GAAMD,EAAUnE,KAAK,KAAMoE,GAC3B,IAAK,IAAI/C,EAAI,EAAGA,EAAInF,KAAKM,SAASV,OAAQuF,IACxC8C,EAAUnE,KAAK,KAAM9D,KAAKM,SAAS6E,GAAGsD,cAAchB,IAEtD,OAAOzH,KAAK0I,6BAA6BT,EAAW,CAClDR,WAEJ,CAUA,iBAAOkB,CAAUC,EAEfC,GACA,IAFA9H,KAAEA,EAAIrB,QAAEA,EAAU,GAAEoB,cAAEA,GAA8B8H,EAAZ9I,EAAOgJ,EAAAF,EAAAG,GAG/C,OAAOC,QAAQC,IAAI,CACjBC,EAA6BxJ,EAASmJ,GACtCM,EAAwBrJ,EAAS+I,KAChCO,MAAKC,IAAgC,IAA9B3J,EAAS4J,GAAgBD,EACjC,MAAMjF,EAAQ,IAAIpE,KAAKN,EAAOJ,EAAAA,EAAAA,EACzBQ,CAAAA,EAAAA,GACAwJ,GAAe,CAAA,EAAA,CAClBxI,cAAe,IAAInC,KAErB,GAAImC,EAAe,CACjB,MAAMyI,EAAcC,EAAcC,SAChC3I,EAAcC,MAEV2I,EAAgBF,EAAcC,SAClC3I,EAAcmG,UAEhB7C,EAAMtD,cAAgB,IAAIyI,EAAY,IAAIG,EAC5C,MACEtF,EAAMtD,cAAgB,IAAIlC,EAQ5B,OANAwF,EAAMtD,cAAc6I,iBAAiB,CACnC5I,KAAMC,EACNC,OAAQmD,EACRlD,QAASkD,EAAMmD,eAEjBnD,EAAMM,YACCN,CAAK,GAEhB,EACDrE,EAznBYb,EAAK,OAsCF,SAAOa,EAtCVb,EAAK,cAwC0BJ,GAmlB5C0K,EAAcI,SAAS1K"}
|
|
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 {\n target: object,\n }: 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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"}
|
|
@@ -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.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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"}
|
|
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 {\n target: object,\n }: 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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DraggableTextDelegate.d.ts","sourceRoot":"","sources":["../../../../src/shapes/IText/DraggableTextDelegate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DraggableTextDelegate.d.ts","sourceRoot":"","sources":["../../../../src/shapes/IText/DraggableTextDelegate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAOrC;;;;;;;;;GASG;AACH,qBAAa,qBAAqB;IAChC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,oBAAoB,CAAC,CAG3B;IACF,OAAO,CAAC,mBAAmB,CAAC,CAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,CAAa;gBAElB,MAAM,EAAE,KAAK;IAezB,sBAAsB,CAAC,CAAC,EAAE,aAAa;IAWvC;;OAEG;IACH,KAAK,CAAC,CAAC,EAAE,aAAa;IAItB;;OAEG;IACH,QAAQ;IAIR;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,aAAa;IAepB,qBAAqB;wBAjEH,MAAM;sBACR,MAAM;;IAoEtB;;;OAGG;IACH,YAAY,CACV,CAAC,EAAE,SAAS,EACZ,EACE,cAAc,EACd,YAAY,GACb,EAAE;QACD,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;KACtB;IAwDH;;OAEG;IACH,WAAW,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO;IAgClC;;;OAGG;IACH,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO;IAqB9B;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS;IAIpC,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa;IAOrC,eAAe,CAAC,EAAE,EAAE,aAAa;IAkBjC,gBAAgB;IAMhB;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,aAAa;IAoE7B;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa;IAyCnC,OAAO;CAGR"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t,objectSpread2 as e}from"../../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{Point as r}from"../../Point.min.mjs";import{setStyle as i}from"../../util/dom_style.min.mjs";import{
|
|
1
|
+
import{defineProperty as t,objectSpread2 as e}from"../../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{Point as r}from"../../Point.min.mjs";import{setStyle as i}from"../../util/dom_style.min.mjs";import{cloneStyles as a}from"../../util/internals/cloneStyles.min.mjs";import{getDocumentFromElement as s}from"../../util/dom_misc.min.mjs";import{NONE as n,CHANGED as o}from"../../constants.min.mjs";class d{constructor(e){t(this,"target",void 0),t(this,"__mouseDownInPlace",!1),t(this,"__dragStartFired",!1),t(this,"__isDraggingOver",!1),t(this,"__dragStartSelection",void 0),t(this,"__dragImageDisposer",void 0),t(this,"_dispose",void 0),this.target=e;const r=[this.target.on("dragenter",this.dragEnterHandler.bind(this)),this.target.on("dragover",this.dragOverHandler.bind(this)),this.target.on("dragleave",this.dragLeaveHandler.bind(this)),this.target.on("dragend",this.dragEndHandler.bind(this)),this.target.on("drop",this.dropHandler.bind(this))];this._dispose=()=>{r.forEach((t=>t())),this._dispose=void 0}}isPointerOverSelection(t){const e=this.target,r=e.getSelectionStartFromPointer(t);return e.isEditing&&r>=e.selectionStart&&r<=e.selectionEnd&&e.selectionStart<e.selectionEnd}start(t){return this.__mouseDownInPlace=this.isPointerOverSelection(t)}isActive(){return this.__mouseDownInPlace}end(t){const e=this.isActive();return e&&!this.__dragStartFired&&(this.target.setCursorByClick(t),this.target.initDelayedCursor(!0)),this.__mouseDownInPlace=!1,this.__dragStartFired=!1,this.__isDraggingOver=!1,e}getDragStartSelection(){return this.__dragStartSelection}setDragImage(t,e){var o;let{selectionStart:d,selectionEnd:g}=e;const l=this.target,c=l.canvas,h=new r(l.flipX?-1:1,l.flipY?-1:1),_=l._getCursorBoundaries(d),p=new r(_.left+_.leftOffset,_.top+_.topOffset).multiply(h).transform(l.calcTransformMatrix()),S=c.getScenePoint(t).subtract(p),v=l.getCanvasRetinaScaling(),m=l.getBoundingRect(),f=p.subtract(new r(m.left,m.top)),u=c.viewportTransform,D=f.add(S).transform(u,!0),x=l.backgroundColor,T=a(l.styles);l.backgroundColor="";const E={stroke:"transparent",fill:"transparent",textBackgroundColor:"transparent"};l.setSelectionStyles(E,0,d),l.setSelectionStyles(E,g,l.text.length),l.dirty=!0;const b=l.toCanvasElement({enableRetinaScaling:c.enableRetinaScaling,viewportTransform:!0});l.backgroundColor=x,l.styles=T,l.dirty=!0,i(b,{position:"fixed",left:"".concat(-b.width,"px"),border:n,width:"".concat(b.width/v,"px"),height:"".concat(b.height/v,"px")}),this.__dragImageDisposer&&this.__dragImageDisposer(),this.__dragImageDisposer=()=>{b.remove()},s(t.target||this.target.hiddenTextarea).body.appendChild(b),null===(o=t.dataTransfer)||void 0===o||o.setDragImage(b,D.x,D.y)}onDragStart(t){this.__dragStartFired=!0;const r=this.target,i=this.isActive();if(i&&t.dataTransfer){const i=this.__dragStartSelection={selectionStart:r.selectionStart,selectionEnd:r.selectionEnd},a=r._text.slice(i.selectionStart,i.selectionEnd).join(""),s=e({text:r.text,value:a},i);t.dataTransfer.setData("text/plain",a),t.dataTransfer.setData("application/fabric",JSON.stringify({value:a,styles:r.getSelectionStyles(i.selectionStart,i.selectionEnd,!0)})),t.dataTransfer.effectAllowed="copyMove",this.setDragImage(t,s)}return r.abortCursorAnimation(),i}canDrop(t){if(this.target.editable&&!this.target.getActiveControl()&&!t.defaultPrevented){if(this.isActive()&&this.__dragStartSelection){const e=this.target.getSelectionStartFromPointer(t),r=this.__dragStartSelection;return e<r.selectionStart||e>r.selectionEnd}return!0}return!1}targetCanDrop(t){return this.target.canDrop(t)}dragEnterHandler(t){let{e:e}=t;const r=this.targetCanDrop(e);!this.__isDraggingOver&&r&&(this.__isDraggingOver=!0)}dragOverHandler(t){const{e:e}=t,r=this.targetCanDrop(e);!this.__isDraggingOver&&r?this.__isDraggingOver=!0:this.__isDraggingOver&&!r&&(this.__isDraggingOver=!1),this.__isDraggingOver&&(e.preventDefault(),t.canDrop=!0,t.dropTarget=this.target)}dragLeaveHandler(){(this.__isDraggingOver||this.isActive())&&(this.__isDraggingOver=!1)}dropHandler(t){var e;const{e:r}=t,i=r.defaultPrevented;this.__isDraggingOver=!1,r.preventDefault();let a=null===(e=r.dataTransfer)||void 0===e?void 0:e.getData("text/plain");if(a&&!i){const e=this.target,i=e.canvas;let s=e.getSelectionStartFromPointer(r);const{styles:n}=r.dataTransfer.types.includes("application/fabric")?JSON.parse(r.dataTransfer.getData("application/fabric")):{},d=a[Math.max(0,a.length-1)],g=0;if(this.__dragStartSelection){const t=this.__dragStartSelection.selectionStart,r=this.__dragStartSelection.selectionEnd;s>t&&s<=r?s=t:s>r&&(s-=r-t),e.removeChars(t,r),delete this.__dragStartSelection}e._reNewline.test(d)&&(e._reNewline.test(e._text[s])||s===e._text.length)&&(a=a.trimEnd()),t.didDrop=!0,t.dropTarget=e,e.insertChars(a,n,s),i.setActiveObject(e),e.enterEditing(r),e.selectionStart=Math.min(s+g,e._text.length),e.selectionEnd=Math.min(e.selectionStart+a.length,e._text.length),e.hiddenTextarea.value=e.text,e._updateTextarea(),e.hiddenTextarea.focus(),e.fire(o,{index:s+g,action:"drop"}),i.fire("text:changed",{target:e}),i.contextTopDirty=!0,i.requestRenderAll()}}dragEndHandler(t){let{e:e}=t;if(this.isActive()&&this.__dragStartFired&&this.__dragStartSelection){var r;const t=this.target,i=this.target.canvas,{selectionStart:a,selectionEnd:s}=this.__dragStartSelection,d=(null===(r=e.dataTransfer)||void 0===r?void 0:r.dropEffect)||n;d===n?(t.selectionStart=a,t.selectionEnd=s,t._updateTextarea(),t.hiddenTextarea.focus()):(t.clearContextTop(),"move"===d&&(t.removeChars(a,s),t.selectionStart=t.selectionEnd=a,t.hiddenTextarea&&(t.hiddenTextarea.value=t.text),t._updateTextarea(),t.fire(o,{index:a,action:"dragend"}),i.fire("text:changed",{target:t}),i.requestRenderAll()),t.exitEditing())}this.__dragImageDisposer&&this.__dragImageDisposer(),delete this.__dragImageDisposer,delete this.__dragStartSelection,this.__isDraggingOver=!1}dispose(){this._dispose&&this._dispose()}}export{d as DraggableTextDelegate};
|
|
2
2
|
//# sourceMappingURL=DraggableTextDelegate.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DraggableTextDelegate.min.mjs","sources":["../../../../src/shapes/IText/DraggableTextDelegate.ts"],"sourcesContent":["import type { Canvas } from '../../canvas/Canvas';\nimport type {\n DragEventData,\n DropEventData,\n TPointerEvent,\n} from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport type { IText } from './IText';\nimport { setStyle } from '../../util/dom_style';\nimport { cloneDeep } from '../../util/internals/cloneDeep';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { CHANGED, NONE } from '../../constants';\n\n/**\n * #### Dragging IText/Textbox Lifecycle\n * - {@link start} is called from `mousedown` {@link IText#_mouseDownHandler} and determines if dragging should start by testing {@link isPointerOverSelection}\n * - if true `mousedown` {@link IText#_mouseDownHandler} is blocked to keep selection\n * - if the pointer moves, canvas fires numerous mousemove {@link Canvas#_onMouseMove} that we make sure **aren't** prevented ({@link IText#shouldStartDragging}) in order for the window to start a drag session\n * - once/if the session starts canvas calls {@link onDragStart} on the active object to determine if dragging should occur\n * - canvas fires relevant drag events that are handled by the handlers defined in this scope\n * - {@link end} is called from `mouseup` {@link IText#mouseUpHandler}, blocking IText default click behavior\n * - in case the drag session didn't occur, {@link end} handles a click, since logic to do so was blocked during `mousedown`\n */\nexport class DraggableTextDelegate {\n readonly target: IText;\n private __mouseDownInPlace = false;\n private __dragStartFired = false;\n private __isDraggingOver = false;\n private __dragStartSelection?: {\n selectionStart: number;\n selectionEnd: number;\n };\n private __dragImageDisposer?: VoidFunction;\n private _dispose?: () => void;\n\n constructor(target: IText) {\n this.target = target;\n const disposers = [\n this.target.on('dragenter', this.dragEnterHandler.bind(this)),\n this.target.on('dragover', this.dragOverHandler.bind(this)),\n this.target.on('dragleave', this.dragLeaveHandler.bind(this)),\n this.target.on('dragend', this.dragEndHandler.bind(this)),\n this.target.on('drop', this.dropHandler.bind(this)),\n ];\n this._dispose = () => {\n disposers.forEach((d) => d());\n this._dispose = undefined;\n };\n }\n\n isPointerOverSelection(e: TPointerEvent) {\n const target = this.target;\n const newSelection = target.getSelectionStartFromPointer(e);\n return (\n target.isEditing &&\n newSelection >= target.selectionStart &&\n newSelection <= target.selectionEnd &&\n target.selectionStart < target.selectionEnd\n );\n }\n\n /**\n * @public override this method to disable dragging and default to mousedown logic\n */\n start(e: TPointerEvent) {\n return (this.__mouseDownInPlace = this.isPointerOverSelection(e));\n }\n\n /**\n * @public override this method to disable dragging without discarding selection\n */\n isActive() {\n return this.__mouseDownInPlace;\n }\n\n /**\n * Ends interaction and sets cursor in case of a click\n * @returns true if was active\n */\n end(e: TPointerEvent) {\n const active = this.isActive();\n if (active && !this.__dragStartFired) {\n // mousedown has been blocked since `active` is true => cursor has not been set.\n // `__dragStartFired` is false => dragging didn't occur, pointer didn't move and is over selection.\n // meaning this is actually a click, `active` is a false positive.\n this.target.setCursorByClick(e);\n this.target.initDelayedCursor(true);\n }\n this.__mouseDownInPlace = false;\n this.__dragStartFired = false;\n this.__isDraggingOver = false;\n return active;\n }\n\n getDragStartSelection() {\n return this.__dragStartSelection;\n }\n\n /**\n * Override to customize the drag image\n * https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/setDragImage\n */\n setDragImage(\n e: DragEvent,\n {\n selectionStart,\n selectionEnd,\n }: {\n selectionStart: number;\n selectionEnd: number;\n }\n ) {\n const target = this.target;\n const canvas = target.canvas!;\n const flipFactor = new Point(target.flipX ? -1 : 1, target.flipY ? -1 : 1);\n const boundaries = target._getCursorBoundaries(selectionStart);\n const selectionPosition = new Point(\n boundaries.left + boundaries.leftOffset,\n boundaries.top + boundaries.topOffset\n ).multiply(flipFactor);\n const pos = selectionPosition.transform(target.calcTransformMatrix());\n const pointer = canvas.getScenePoint(e);\n const diff = pointer.subtract(pos);\n const retinaScaling = target.getCanvasRetinaScaling();\n const bbox = target.getBoundingRect();\n const correction = pos.subtract(new Point(bbox.left, bbox.top));\n const vpt = canvas.viewportTransform;\n const offset = correction.add(diff).transform(vpt, true);\n // prepare instance for drag image snapshot by making all non selected text invisible\n const bgc = target.backgroundColor;\n const styles = cloneDeep(target.styles);\n target.backgroundColor = '';\n const styleOverride = {\n stroke: 'transparent',\n fill: 'transparent',\n textBackgroundColor: 'transparent',\n };\n target.setSelectionStyles(styleOverride, 0, selectionStart);\n target.setSelectionStyles(styleOverride, selectionEnd, target.text.length);\n target.dirty = true;\n const dragImage = target.toCanvasElement({\n enableRetinaScaling: canvas.enableRetinaScaling,\n viewportTransform: true,\n });\n // restore values\n target.backgroundColor = bgc;\n target.styles = styles;\n target.dirty = true;\n // position drag image offscreen\n setStyle(dragImage, {\n position: 'fixed',\n left: `${-dragImage.width}px`,\n border: NONE,\n width: `${dragImage.width / retinaScaling}px`,\n height: `${dragImage.height / retinaScaling}px`,\n });\n this.__dragImageDisposer && this.__dragImageDisposer();\n this.__dragImageDisposer = () => {\n dragImage.remove();\n };\n getDocumentFromElement(\n (e.target || this.target.hiddenTextarea)! as HTMLElement\n ).body.appendChild(dragImage);\n e.dataTransfer?.setDragImage(dragImage, offset.x, offset.y);\n }\n\n /**\n * @returns {boolean} determines whether {@link target} should/shouldn't become a drag source\n */\n onDragStart(e: DragEvent): boolean {\n this.__dragStartFired = true;\n const target = this.target;\n const active = this.isActive();\n if (active && e.dataTransfer) {\n const selection = (this.__dragStartSelection = {\n selectionStart: target.selectionStart,\n selectionEnd: target.selectionEnd,\n });\n const value = target._text\n .slice(selection.selectionStart, selection.selectionEnd)\n .join('');\n const data = { text: target.text, value, ...selection };\n e.dataTransfer.setData('text/plain', value);\n e.dataTransfer.setData(\n 'application/fabric',\n JSON.stringify({\n value: value,\n styles: target.getSelectionStyles(\n selection.selectionStart,\n selection.selectionEnd,\n true\n ),\n })\n );\n e.dataTransfer.effectAllowed = 'copyMove';\n this.setDragImage(e, data);\n }\n target.abortCursorAnimation();\n return active;\n }\n\n /**\n * use {@link targetCanDrop} to respect overriding\n * @returns {boolean} determines whether {@link target} should/shouldn't become a drop target\n */\n canDrop(e: DragEvent): boolean {\n if (\n this.target.editable &&\n !this.target.getActiveControl() &&\n !e.defaultPrevented\n ) {\n if (this.isActive() && this.__dragStartSelection) {\n // drag source trying to drop over itself\n // allow dropping only outside of drag start selection\n const index = this.target.getSelectionStartFromPointer(e);\n const dragStartSelection = this.__dragStartSelection;\n return (\n index < dragStartSelection.selectionStart ||\n index > dragStartSelection.selectionEnd\n );\n }\n return true;\n }\n return false;\n }\n\n /**\n * in order to respect overriding {@link IText#canDrop} we call that instead of calling {@link canDrop} directly\n */\n protected targetCanDrop(e: DragEvent) {\n return this.target.canDrop(e);\n }\n\n dragEnterHandler({ e }: DragEventData) {\n const canDrop = this.targetCanDrop(e);\n if (!this.__isDraggingOver && canDrop) {\n this.__isDraggingOver = true;\n }\n }\n\n dragOverHandler(ev: DragEventData) {\n const { e } = ev;\n const canDrop = this.targetCanDrop(e);\n if (!this.__isDraggingOver && canDrop) {\n this.__isDraggingOver = true;\n } else if (this.__isDraggingOver && !canDrop) {\n // drop state has changed\n this.__isDraggingOver = false;\n }\n if (this.__isDraggingOver) {\n // can be dropped, inform browser\n e.preventDefault();\n // inform event subscribers\n ev.canDrop = true;\n ev.dropTarget = this.target;\n }\n }\n\n dragLeaveHandler() {\n if (this.__isDraggingOver || this.isActive()) {\n this.__isDraggingOver = false;\n }\n }\n\n /**\n * Override the `text/plain | application/fabric` types of {@link DragEvent#dataTransfer}\n * in order to change the drop value or to customize styling respectively, by listening to the `drop:before` event\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#performing_a_drop\n */\n dropHandler(ev: DropEventData) {\n const { e } = ev;\n const didDrop = e.defaultPrevented;\n this.__isDraggingOver = false;\n // inform browser that the drop has been accepted\n e.preventDefault();\n let insert = e.dataTransfer?.getData('text/plain');\n if (insert && !didDrop) {\n const target = this.target;\n const canvas = target.canvas!;\n let insertAt = target.getSelectionStartFromPointer(e);\n const { styles } = (\n e.dataTransfer!.types.includes('application/fabric')\n ? JSON.parse(e.dataTransfer!.getData('application/fabric'))\n : {}\n ) as { styles: TextStyleDeclaration[] };\n const trailing = insert[Math.max(0, insert.length - 1)];\n const selectionStartOffset = 0;\n // drag and drop in same instance\n if (this.__dragStartSelection) {\n const selectionStart = this.__dragStartSelection.selectionStart;\n const selectionEnd = this.__dragStartSelection.selectionEnd;\n if (insertAt > selectionStart && insertAt <= selectionEnd) {\n insertAt = selectionStart;\n } else if (insertAt > selectionEnd) {\n insertAt -= selectionEnd - selectionStart;\n }\n target.removeChars(selectionStart, selectionEnd);\n // prevent `dragend` from handling event\n delete this.__dragStartSelection;\n }\n // remove redundant line break\n if (\n target._reNewline.test(trailing) &&\n (target._reNewline.test(target._text[insertAt]) ||\n insertAt === target._text.length)\n ) {\n insert = insert.trimEnd();\n }\n // inform subscribers\n ev.didDrop = true;\n ev.dropTarget = target;\n // finalize\n target.insertChars(insert, styles, insertAt);\n // can this part be moved in an outside event? andrea to check.\n canvas.setActiveObject(target);\n target.enterEditing(e);\n target.selectionStart = Math.min(\n insertAt + selectionStartOffset,\n target._text.length\n );\n target.selectionEnd = Math.min(\n target.selectionStart + insert.length,\n target._text.length\n );\n target.hiddenTextarea!.value = target.text;\n target._updateTextarea();\n target.hiddenTextarea!.focus();\n target.fire(CHANGED, {\n index: insertAt + selectionStartOffset,\n action: 'drop',\n });\n canvas.fire('text:changed', { target });\n canvas.contextTopDirty = true;\n canvas.requestRenderAll();\n }\n }\n\n /**\n * fired only on the drag source after drop (if occurred)\n * handle changes to the drag source in case of a drop on another object or a cancellation\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#finishing_a_drag\n */\n dragEndHandler({ e }: DragEventData) {\n if (this.isActive() && this.__dragStartFired) {\n // once the drop event finishes we check if we need to change the drag source\n // if the drag source received the drop we bail out since the drop handler has already handled logic\n if (this.__dragStartSelection) {\n const target = this.target;\n const canvas = this.target.canvas!;\n const { selectionStart, selectionEnd } = this.__dragStartSelection;\n const dropEffect = e.dataTransfer?.dropEffect || NONE;\n if (dropEffect === NONE) {\n // pointer is back over selection\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n target._updateTextarea();\n target.hiddenTextarea!.focus();\n } else {\n target.clearContextTop();\n if (dropEffect === 'move') {\n target.removeChars(selectionStart, selectionEnd);\n target.selectionStart = target.selectionEnd = selectionStart;\n target.hiddenTextarea &&\n (target.hiddenTextarea.value = target.text);\n target._updateTextarea();\n target.fire(CHANGED, {\n index: selectionStart,\n action: 'dragend',\n });\n canvas.fire('text:changed', { target });\n canvas.requestRenderAll();\n }\n target.exitEditing();\n }\n }\n }\n\n this.__dragImageDisposer && this.__dragImageDisposer();\n delete this.__dragImageDisposer;\n delete this.__dragStartSelection;\n this.__isDraggingOver = false;\n }\n\n dispose() {\n this._dispose && this._dispose();\n }\n}\n"],"names":["DraggableTextDelegate","constructor","target","_defineProperty","this","disposers","on","dragEnterHandler","bind","dragOverHandler","dragLeaveHandler","dragEndHandler","dropHandler","_dispose","forEach","d","undefined","isPointerOverSelection","e","newSelection","getSelectionStartFromPointer","isEditing","selectionStart","selectionEnd","start","__mouseDownInPlace","isActive","end","active","__dragStartFired","setCursorByClick","initDelayedCursor","__isDraggingOver","getDragStartSelection","__dragStartSelection","setDragImage","_ref","_e$dataTransfer","canvas","flipFactor","Point","flipX","flipY","boundaries","_getCursorBoundaries","pos","left","leftOffset","top","topOffset","multiply","transform","calcTransformMatrix","diff","getScenePoint","subtract","retinaScaling","getCanvasRetinaScaling","bbox","getBoundingRect","correction","vpt","viewportTransform","offset","add","bgc","backgroundColor","styles","cloneDeep","styleOverride","stroke","fill","textBackgroundColor","setSelectionStyles","text","length","dirty","dragImage","toCanvasElement","enableRetinaScaling","setStyle","position","concat","width","border","NONE","height","__dragImageDisposer","remove","getDocumentFromElement","hiddenTextarea","body","appendChild","dataTransfer","x","y","onDragStart","selection","value","_text","slice","join","data","_objectSpread","setData","JSON","stringify","getSelectionStyles","effectAllowed","abortCursorAnimation","canDrop","editable","getActiveControl","defaultPrevented","index","dragStartSelection","targetCanDrop","_ref2","ev","preventDefault","dropTarget","_e$dataTransfer2","didDrop","insert","getData","insertAt","types","includes","parse","trailing","Math","max","selectionStartOffset","removeChars","_reNewline","test","trimEnd","insertChars","setActiveObject","enterEditing","min","_updateTextarea","focus","fire","CHANGED","action","contextTopDirty","requestRenderAll","_ref3","_e$dataTransfer3","dropEffect","clearContextTop","exitEditing","dispose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DraggableTextDelegate.min.mjs","sources":["../../../../src/shapes/IText/DraggableTextDelegate.ts"],"sourcesContent":["import type {\n DragEventData,\n DropEventData,\n TPointerEvent,\n} from '../../EventTypeDefs';\nimport { Point } from '../../Point';\nimport type { IText } from './IText';\nimport { setStyle } from '../../util/dom_style';\nimport { cloneStyles } from '../../util/internals/cloneStyles';\nimport type { TextStyleDeclaration } from '../Text/StyledText';\nimport { getDocumentFromElement } from '../../util/dom_misc';\nimport { CHANGED, NONE } from '../../constants';\n\n/**\n * #### Dragging IText/Textbox Lifecycle\n * - {@link start} is called from `mousedown` {@link IText#_mouseDownHandler} and determines if dragging should start by testing {@link isPointerOverSelection}\n * - if true `mousedown` {@link IText#_mouseDownHandler} is blocked to keep selection\n * - if the pointer moves, canvas fires numerous mousemove {@link Canvas#_onMouseMove} that we make sure **aren't** prevented ({@link IText#shouldStartDragging}) in order for the window to start a drag session\n * - once/if the session starts canvas calls {@link onDragStart} on the active object to determine if dragging should occur\n * - canvas fires relevant drag events that are handled by the handlers defined in this scope\n * - {@link end} is called from `mouseup` {@link IText#mouseUpHandler}, blocking IText default click behavior\n * - in case the drag session didn't occur, {@link end} handles a click, since logic to do so was blocked during `mousedown`\n */\nexport class DraggableTextDelegate {\n readonly target: IText;\n private __mouseDownInPlace = false;\n private __dragStartFired = false;\n private __isDraggingOver = false;\n private __dragStartSelection?: {\n selectionStart: number;\n selectionEnd: number;\n };\n private __dragImageDisposer?: VoidFunction;\n private _dispose?: () => void;\n\n constructor(target: IText) {\n this.target = target;\n const disposers = [\n this.target.on('dragenter', this.dragEnterHandler.bind(this)),\n this.target.on('dragover', this.dragOverHandler.bind(this)),\n this.target.on('dragleave', this.dragLeaveHandler.bind(this)),\n this.target.on('dragend', this.dragEndHandler.bind(this)),\n this.target.on('drop', this.dropHandler.bind(this)),\n ];\n this._dispose = () => {\n disposers.forEach((d) => d());\n this._dispose = undefined;\n };\n }\n\n isPointerOverSelection(e: TPointerEvent) {\n const target = this.target;\n const newSelection = target.getSelectionStartFromPointer(e);\n return (\n target.isEditing &&\n newSelection >= target.selectionStart &&\n newSelection <= target.selectionEnd &&\n target.selectionStart < target.selectionEnd\n );\n }\n\n /**\n * @public override this method to disable dragging and default to mousedown logic\n */\n start(e: TPointerEvent) {\n return (this.__mouseDownInPlace = this.isPointerOverSelection(e));\n }\n\n /**\n * @public override this method to disable dragging without discarding selection\n */\n isActive() {\n return this.__mouseDownInPlace;\n }\n\n /**\n * Ends interaction and sets cursor in case of a click\n * @returns true if was active\n */\n end(e: TPointerEvent) {\n const active = this.isActive();\n if (active && !this.__dragStartFired) {\n // mousedown has been blocked since `active` is true => cursor has not been set.\n // `__dragStartFired` is false => dragging didn't occur, pointer didn't move and is over selection.\n // meaning this is actually a click, `active` is a false positive.\n this.target.setCursorByClick(e);\n this.target.initDelayedCursor(true);\n }\n this.__mouseDownInPlace = false;\n this.__dragStartFired = false;\n this.__isDraggingOver = false;\n return active;\n }\n\n getDragStartSelection() {\n return this.__dragStartSelection;\n }\n\n /**\n * Override to customize the drag image\n * https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/setDragImage\n */\n setDragImage(\n e: DragEvent,\n {\n selectionStart,\n selectionEnd,\n }: {\n selectionStart: number;\n selectionEnd: number;\n },\n ) {\n const target = this.target;\n const canvas = target.canvas!;\n const flipFactor = new Point(target.flipX ? -1 : 1, target.flipY ? -1 : 1);\n const boundaries = target._getCursorBoundaries(selectionStart);\n const selectionPosition = new Point(\n boundaries.left + boundaries.leftOffset,\n boundaries.top + boundaries.topOffset,\n ).multiply(flipFactor);\n const pos = selectionPosition.transform(target.calcTransformMatrix());\n const pointer = canvas.getScenePoint(e);\n const diff = pointer.subtract(pos);\n const retinaScaling = target.getCanvasRetinaScaling();\n const bbox = target.getBoundingRect();\n const correction = pos.subtract(new Point(bbox.left, bbox.top));\n const vpt = canvas.viewportTransform;\n const offset = correction.add(diff).transform(vpt, true);\n // prepare instance for drag image snapshot by making all non selected text invisible\n const bgc = target.backgroundColor;\n const styles = cloneStyles(target.styles);\n target.backgroundColor = '';\n const styleOverride = {\n stroke: 'transparent',\n fill: 'transparent',\n textBackgroundColor: 'transparent',\n };\n target.setSelectionStyles(styleOverride, 0, selectionStart);\n target.setSelectionStyles(styleOverride, selectionEnd, target.text.length);\n target.dirty = true;\n const dragImage = target.toCanvasElement({\n enableRetinaScaling: canvas.enableRetinaScaling,\n viewportTransform: true,\n });\n // restore values\n target.backgroundColor = bgc;\n target.styles = styles;\n target.dirty = true;\n // position drag image offscreen\n setStyle(dragImage, {\n position: 'fixed',\n left: `${-dragImage.width}px`,\n border: NONE,\n width: `${dragImage.width / retinaScaling}px`,\n height: `${dragImage.height / retinaScaling}px`,\n });\n this.__dragImageDisposer && this.__dragImageDisposer();\n this.__dragImageDisposer = () => {\n dragImage.remove();\n };\n getDocumentFromElement(\n (e.target || this.target.hiddenTextarea)! as HTMLElement,\n ).body.appendChild(dragImage);\n e.dataTransfer?.setDragImage(dragImage, offset.x, offset.y);\n }\n\n /**\n * @returns {boolean} determines whether {@link target} should/shouldn't become a drag source\n */\n onDragStart(e: DragEvent): boolean {\n this.__dragStartFired = true;\n const target = this.target;\n const active = this.isActive();\n if (active && e.dataTransfer) {\n const selection = (this.__dragStartSelection = {\n selectionStart: target.selectionStart,\n selectionEnd: target.selectionEnd,\n });\n const value = target._text\n .slice(selection.selectionStart, selection.selectionEnd)\n .join('');\n const data = { text: target.text, value, ...selection };\n e.dataTransfer.setData('text/plain', value);\n e.dataTransfer.setData(\n 'application/fabric',\n JSON.stringify({\n value: value,\n styles: target.getSelectionStyles(\n selection.selectionStart,\n selection.selectionEnd,\n true,\n ),\n }),\n );\n e.dataTransfer.effectAllowed = 'copyMove';\n this.setDragImage(e, data);\n }\n target.abortCursorAnimation();\n return active;\n }\n\n /**\n * use {@link targetCanDrop} to respect overriding\n * @returns {boolean} determines whether {@link target} should/shouldn't become a drop target\n */\n canDrop(e: DragEvent): boolean {\n if (\n this.target.editable &&\n !this.target.getActiveControl() &&\n !e.defaultPrevented\n ) {\n if (this.isActive() && this.__dragStartSelection) {\n // drag source trying to drop over itself\n // allow dropping only outside of drag start selection\n const index = this.target.getSelectionStartFromPointer(e);\n const dragStartSelection = this.__dragStartSelection;\n return (\n index < dragStartSelection.selectionStart ||\n index > dragStartSelection.selectionEnd\n );\n }\n return true;\n }\n return false;\n }\n\n /**\n * in order to respect overriding {@link IText#canDrop} we call that instead of calling {@link canDrop} directly\n */\n protected targetCanDrop(e: DragEvent) {\n return this.target.canDrop(e);\n }\n\n dragEnterHandler({ e }: DragEventData) {\n const canDrop = this.targetCanDrop(e);\n if (!this.__isDraggingOver && canDrop) {\n this.__isDraggingOver = true;\n }\n }\n\n dragOverHandler(ev: DragEventData) {\n const { e } = ev;\n const canDrop = this.targetCanDrop(e);\n if (!this.__isDraggingOver && canDrop) {\n this.__isDraggingOver = true;\n } else if (this.__isDraggingOver && !canDrop) {\n // drop state has changed\n this.__isDraggingOver = false;\n }\n if (this.__isDraggingOver) {\n // can be dropped, inform browser\n e.preventDefault();\n // inform event subscribers\n ev.canDrop = true;\n ev.dropTarget = this.target;\n }\n }\n\n dragLeaveHandler() {\n if (this.__isDraggingOver || this.isActive()) {\n this.__isDraggingOver = false;\n }\n }\n\n /**\n * Override the `text/plain | application/fabric` types of {@link DragEvent#dataTransfer}\n * in order to change the drop value or to customize styling respectively, by listening to the `drop:before` event\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#performing_a_drop\n */\n dropHandler(ev: DropEventData) {\n const { e } = ev;\n const didDrop = e.defaultPrevented;\n this.__isDraggingOver = false;\n // inform browser that the drop has been accepted\n e.preventDefault();\n let insert = e.dataTransfer?.getData('text/plain');\n if (insert && !didDrop) {\n const target = this.target;\n const canvas = target.canvas!;\n let insertAt = target.getSelectionStartFromPointer(e);\n const { styles } = (\n e.dataTransfer!.types.includes('application/fabric')\n ? JSON.parse(e.dataTransfer!.getData('application/fabric'))\n : {}\n ) as { styles: TextStyleDeclaration[] };\n const trailing = insert[Math.max(0, insert.length - 1)];\n const selectionStartOffset = 0;\n // drag and drop in same instance\n if (this.__dragStartSelection) {\n const selectionStart = this.__dragStartSelection.selectionStart;\n const selectionEnd = this.__dragStartSelection.selectionEnd;\n if (insertAt > selectionStart && insertAt <= selectionEnd) {\n insertAt = selectionStart;\n } else if (insertAt > selectionEnd) {\n insertAt -= selectionEnd - selectionStart;\n }\n target.removeChars(selectionStart, selectionEnd);\n // prevent `dragend` from handling event\n delete this.__dragStartSelection;\n }\n // remove redundant line break\n if (\n target._reNewline.test(trailing) &&\n (target._reNewline.test(target._text[insertAt]) ||\n insertAt === target._text.length)\n ) {\n insert = insert.trimEnd();\n }\n // inform subscribers\n ev.didDrop = true;\n ev.dropTarget = target;\n // finalize\n target.insertChars(insert, styles, insertAt);\n // can this part be moved in an outside event? andrea to check.\n canvas.setActiveObject(target);\n target.enterEditing(e);\n target.selectionStart = Math.min(\n insertAt + selectionStartOffset,\n target._text.length,\n );\n target.selectionEnd = Math.min(\n target.selectionStart + insert.length,\n target._text.length,\n );\n target.hiddenTextarea!.value = target.text;\n target._updateTextarea();\n target.hiddenTextarea!.focus();\n target.fire(CHANGED, {\n index: insertAt + selectionStartOffset,\n action: 'drop',\n });\n canvas.fire('text:changed', { target });\n canvas.contextTopDirty = true;\n canvas.requestRenderAll();\n }\n }\n\n /**\n * fired only on the drag source after drop (if occurred)\n * handle changes to the drag source in case of a drop on another object or a cancellation\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#finishing_a_drag\n */\n dragEndHandler({ e }: DragEventData) {\n if (this.isActive() && this.__dragStartFired) {\n // once the drop event finishes we check if we need to change the drag source\n // if the drag source received the drop we bail out since the drop handler has already handled logic\n if (this.__dragStartSelection) {\n const target = this.target;\n const canvas = this.target.canvas!;\n const { selectionStart, selectionEnd } = this.__dragStartSelection;\n const dropEffect = e.dataTransfer?.dropEffect || NONE;\n if (dropEffect === NONE) {\n // pointer is back over selection\n target.selectionStart = selectionStart;\n target.selectionEnd = selectionEnd;\n target._updateTextarea();\n target.hiddenTextarea!.focus();\n } else {\n target.clearContextTop();\n if (dropEffect === 'move') {\n target.removeChars(selectionStart, selectionEnd);\n target.selectionStart = target.selectionEnd = selectionStart;\n target.hiddenTextarea &&\n (target.hiddenTextarea.value = target.text);\n target._updateTextarea();\n target.fire(CHANGED, {\n index: selectionStart,\n action: 'dragend',\n });\n canvas.fire('text:changed', { target });\n canvas.requestRenderAll();\n }\n target.exitEditing();\n }\n }\n }\n\n this.__dragImageDisposer && this.__dragImageDisposer();\n delete this.__dragImageDisposer;\n delete this.__dragStartSelection;\n this.__isDraggingOver = false;\n }\n\n dispose() {\n this._dispose && this._dispose();\n }\n}\n"],"names":["DraggableTextDelegate","constructor","target","_defineProperty","this","disposers","on","dragEnterHandler","bind","dragOverHandler","dragLeaveHandler","dragEndHandler","dropHandler","_dispose","forEach","d","undefined","isPointerOverSelection","e","newSelection","getSelectionStartFromPointer","isEditing","selectionStart","selectionEnd","start","__mouseDownInPlace","isActive","end","active","__dragStartFired","setCursorByClick","initDelayedCursor","__isDraggingOver","getDragStartSelection","__dragStartSelection","setDragImage","_ref","_e$dataTransfer","canvas","flipFactor","Point","flipX","flipY","boundaries","_getCursorBoundaries","pos","left","leftOffset","top","topOffset","multiply","transform","calcTransformMatrix","diff","getScenePoint","subtract","retinaScaling","getCanvasRetinaScaling","bbox","getBoundingRect","correction","vpt","viewportTransform","offset","add","bgc","backgroundColor","styles","cloneStyles","styleOverride","stroke","fill","textBackgroundColor","setSelectionStyles","text","length","dirty","dragImage","toCanvasElement","enableRetinaScaling","setStyle","position","concat","width","border","NONE","height","__dragImageDisposer","remove","getDocumentFromElement","hiddenTextarea","body","appendChild","dataTransfer","x","y","onDragStart","selection","value","_text","slice","join","data","_objectSpread","setData","JSON","stringify","getSelectionStyles","effectAllowed","abortCursorAnimation","canDrop","editable","getActiveControl","defaultPrevented","index","dragStartSelection","targetCanDrop","_ref2","ev","preventDefault","dropTarget","_e$dataTransfer2","didDrop","insert","getData","insertAt","types","includes","parse","trailing","Math","max","selectionStartOffset","removeChars","_reNewline","test","trimEnd","insertChars","setActiveObject","enterEditing","min","_updateTextarea","focus","fire","CHANGED","action","contextTopDirty","requestRenderAll","_ref3","_e$dataTransfer3","dropEffect","clearContextTop","exitEditing","dispose"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineProperty as _defineProperty, objectSpread2 as _objectSpread2 } from '../../../_virtual/_rollupPluginBabelHelpers.mjs';
|
|
2
2
|
import { Point } from '../../Point.mjs';
|
|
3
3
|
import { setStyle } from '../../util/dom_style.mjs';
|
|
4
|
-
import {
|
|
4
|
+
import { cloneStyles } from '../../util/internals/cloneStyles.mjs';
|
|
5
5
|
import { getDocumentFromElement } from '../../util/dom_misc.mjs';
|
|
6
6
|
import { NONE, CHANGED } from '../../constants.mjs';
|
|
7
7
|
|
|
@@ -98,7 +98,7 @@ class DraggableTextDelegate {
|
|
|
98
98
|
const offset = correction.add(diff).transform(vpt, true);
|
|
99
99
|
// prepare instance for drag image snapshot by making all non selected text invisible
|
|
100
100
|
const bgc = target.backgroundColor;
|
|
101
|
-
const styles =
|
|
101
|
+
const styles = cloneStyles(target.styles);
|
|
102
102
|
target.backgroundColor = '';
|
|
103
103
|
const styleOverride = {
|
|
104
104
|
stroke: 'transparent',
|