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,2 +1,2 @@
|
|
|
1
|
-
var r="6.
|
|
1
|
+
var r="6.3.0";export{r as version};
|
|
2
2
|
//# sourceMappingURL=package.json.min.mjs.map
|
package/dist/package.json.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassRegistry.min.mjs","sources":["../../src/ClassRegistry.ts"],"sourcesContent":["import { FabricError } from './util/internals/console';\n\n/*\n * This Map connects the objects type value with their\n * class implementation. It used from any object to understand which are\n * the classes to enlive when requesting a object.type = 'path' for example.\n * Objects uses it for clipPath, Canvas uses it for everything.\n * This is necessary for generic code to run and enlive instances from serialized representation.\n * You can customize which classes get enlived from SVG parsing using this classRegistry.\n * The Registry start empty and gets filled in depending which files you import.\n * If you want to be able to parse arbitrary SVGs or JSON representation of canvases, coming from\n * different sources you will need to import all fabric because you may need all classes.\n */\n\nexport const JSON = 'json';\nexport const SVG = 'svg';\n\nexport class ClassRegistry {\n declare [JSON]: Map<string, any>;\n declare [SVG]: Map<string, any>;\n\n constructor() {\n this[JSON] = new Map();\n this[SVG] = new Map();\n }\n\n has(classType: string): boolean {\n return this[JSON].has(classType);\n }\n\n getClass<T>(classType: string): T {\n const constructor = this[JSON].get(classType);\n if (!constructor) {\n throw new FabricError(`No class registered for ${classType}`);\n }\n return constructor;\n }\n\n setClass(classConstructor: any, classType?: string) {\n if (classType) {\n this[JSON].set(classType, classConstructor);\n } else {\n this[JSON].set(classConstructor.type, classConstructor);\n // legacy\n // @TODO: needs to be removed in fabric 7 or 8\n this[JSON].set(classConstructor.type.toLowerCase(), classConstructor);\n }\n }\n\n getSVGClass(SVGTagName: string): any {\n return this[SVG].get(SVGTagName);\n }\n\n setSVGClass(classConstructor: any, SVGTagName?: string) {\n this[SVG].set(\n SVGTagName ?? classConstructor.type.toLowerCase(),\n classConstructor
|
|
1
|
+
{"version":3,"file":"ClassRegistry.min.mjs","sources":["../../src/ClassRegistry.ts"],"sourcesContent":["import { FabricError } from './util/internals/console';\n\n/*\n * This Map connects the objects type value with their\n * class implementation. It used from any object to understand which are\n * the classes to enlive when requesting a object.type = 'path' for example.\n * Objects uses it for clipPath, Canvas uses it for everything.\n * This is necessary for generic code to run and enlive instances from serialized representation.\n * You can customize which classes get enlived from SVG parsing using this classRegistry.\n * The Registry start empty and gets filled in depending which files you import.\n * If you want to be able to parse arbitrary SVGs or JSON representation of canvases, coming from\n * different sources you will need to import all fabric because you may need all classes.\n */\n\nexport const JSON = 'json';\nexport const SVG = 'svg';\n\nexport class ClassRegistry {\n declare [JSON]: Map<string, any>;\n declare [SVG]: Map<string, any>;\n\n constructor() {\n this[JSON] = new Map();\n this[SVG] = new Map();\n }\n\n has(classType: string): boolean {\n return this[JSON].has(classType);\n }\n\n getClass<T>(classType: string): T {\n const constructor = this[JSON].get(classType);\n if (!constructor) {\n throw new FabricError(`No class registered for ${classType}`);\n }\n return constructor;\n }\n\n setClass(classConstructor: any, classType?: string) {\n if (classType) {\n this[JSON].set(classType, classConstructor);\n } else {\n this[JSON].set(classConstructor.type, classConstructor);\n // legacy\n // @TODO: needs to be removed in fabric 7 or 8\n this[JSON].set(classConstructor.type.toLowerCase(), classConstructor);\n }\n }\n\n getSVGClass(SVGTagName: string): any {\n return this[SVG].get(SVGTagName);\n }\n\n setSVGClass(classConstructor: any, SVGTagName?: string) {\n this[SVG].set(\n SVGTagName ?? classConstructor.type.toLowerCase(),\n classConstructor,\n );\n }\n}\n\nexport const classRegistry = new ClassRegistry();\n"],"names":["JSON","SVG","ClassRegistry","constructor","this","Map","has","classType","getClass","get","FabricError","concat","setClass","classConstructor","set","type","toLowerCase","getSVGClass","SVGTagName","setSVGClass","classRegistry"],"mappings":"+DAcO,MAAMA,EAAO,OACPC,EAAM,MAEZ,MAAMC,EAIXC,WAAAA,GACEC,KAAKJ,GAAQ,IAAIK,IACjBD,KAAKH,GAAO,IAAII,GAClB,CAEAC,GAAAA,CAAIC,GACF,OAAOH,KAAKJ,GAAMM,IAAIC,EACxB,CAEAC,QAAAA,CAAYD,GACV,MAAMJ,EAAcC,KAAKJ,GAAMS,IAAIF,GACnC,IAAKJ,EACH,MAAM,IAAIO,EAAW,2BAAAC,OAA4BJ,IAEnD,OAAOJ,CACT,CAEAS,QAAAA,CAASC,EAAuBN,GAC1BA,EACFH,KAAKJ,GAAMc,IAAIP,EAAWM,IAE1BT,KAAKJ,GAAMc,IAAID,EAAiBE,KAAMF,GAGtCT,KAAKJ,GAAMc,IAAID,EAAiBE,KAAKC,cAAeH,GAExD,CAEAI,WAAAA,CAAYC,GACV,OAAOd,KAAKH,GAAKQ,IAAIS,EACvB,CAEAC,WAAAA,CAAYN,EAAuBK,GACjCd,KAAKH,GAAKa,IACRI,QAAAA,EAAcL,EAAiBE,KAAKC,cACpCH,EAEJ,QAGWO,EAAgB,IAAIlB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassRegistry.mjs","sources":["../../src/ClassRegistry.ts"],"sourcesContent":["import { FabricError } from './util/internals/console';\n\n/*\n * This Map connects the objects type value with their\n * class implementation. It used from any object to understand which are\n * the classes to enlive when requesting a object.type = 'path' for example.\n * Objects uses it for clipPath, Canvas uses it for everything.\n * This is necessary for generic code to run and enlive instances from serialized representation.\n * You can customize which classes get enlived from SVG parsing using this classRegistry.\n * The Registry start empty and gets filled in depending which files you import.\n * If you want to be able to parse arbitrary SVGs or JSON representation of canvases, coming from\n * different sources you will need to import all fabric because you may need all classes.\n */\n\nexport const JSON = 'json';\nexport const SVG = 'svg';\n\nexport class ClassRegistry {\n declare [JSON]: Map<string, any>;\n declare [SVG]: Map<string, any>;\n\n constructor() {\n this[JSON] = new Map();\n this[SVG] = new Map();\n }\n\n has(classType: string): boolean {\n return this[JSON].has(classType);\n }\n\n getClass<T>(classType: string): T {\n const constructor = this[JSON].get(classType);\n if (!constructor) {\n throw new FabricError(`No class registered for ${classType}`);\n }\n return constructor;\n }\n\n setClass(classConstructor: any, classType?: string) {\n if (classType) {\n this[JSON].set(classType, classConstructor);\n } else {\n this[JSON].set(classConstructor.type, classConstructor);\n // legacy\n // @TODO: needs to be removed in fabric 7 or 8\n this[JSON].set(classConstructor.type.toLowerCase(), classConstructor);\n }\n }\n\n getSVGClass(SVGTagName: string): any {\n return this[SVG].get(SVGTagName);\n }\n\n setSVGClass(classConstructor: any, SVGTagName?: string) {\n this[SVG].set(\n SVGTagName ?? classConstructor.type.toLowerCase(),\n classConstructor
|
|
1
|
+
{"version":3,"file":"ClassRegistry.mjs","sources":["../../src/ClassRegistry.ts"],"sourcesContent":["import { FabricError } from './util/internals/console';\n\n/*\n * This Map connects the objects type value with their\n * class implementation. It used from any object to understand which are\n * the classes to enlive when requesting a object.type = 'path' for example.\n * Objects uses it for clipPath, Canvas uses it for everything.\n * This is necessary for generic code to run and enlive instances from serialized representation.\n * You can customize which classes get enlived from SVG parsing using this classRegistry.\n * The Registry start empty and gets filled in depending which files you import.\n * If you want to be able to parse arbitrary SVGs or JSON representation of canvases, coming from\n * different sources you will need to import all fabric because you may need all classes.\n */\n\nexport const JSON = 'json';\nexport const SVG = 'svg';\n\nexport class ClassRegistry {\n declare [JSON]: Map<string, any>;\n declare [SVG]: Map<string, any>;\n\n constructor() {\n this[JSON] = new Map();\n this[SVG] = new Map();\n }\n\n has(classType: string): boolean {\n return this[JSON].has(classType);\n }\n\n getClass<T>(classType: string): T {\n const constructor = this[JSON].get(classType);\n if (!constructor) {\n throw new FabricError(`No class registered for ${classType}`);\n }\n return constructor;\n }\n\n setClass(classConstructor: any, classType?: string) {\n if (classType) {\n this[JSON].set(classType, classConstructor);\n } else {\n this[JSON].set(classConstructor.type, classConstructor);\n // legacy\n // @TODO: needs to be removed in fabric 7 or 8\n this[JSON].set(classConstructor.type.toLowerCase(), classConstructor);\n }\n }\n\n getSVGClass(SVGTagName: string): any {\n return this[SVG].get(SVGTagName);\n }\n\n setSVGClass(classConstructor: any, SVGTagName?: string) {\n this[SVG].set(\n SVGTagName ?? classConstructor.type.toLowerCase(),\n classConstructor,\n );\n }\n}\n\nexport const classRegistry = new ClassRegistry();\n"],"names":["JSON","SVG","ClassRegistry","constructor","Map","has","classType","getClass","get","FabricError","concat","setClass","classConstructor","set","type","toLowerCase","getSVGClass","SVGTagName","setSVGClass","classRegistry"],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,MAAMA,IAAI,GAAG,OAAM;AACnB,MAAMC,GAAG,GAAG,MAAK;AAEjB,MAAMC,aAAa,CAAC;AAIzBC,EAAAA,WAAWA,GAAG;AACZ,IAAA,IAAI,CAACH,IAAI,CAAC,GAAG,IAAII,GAAG,EAAE,CAAA;AACtB,IAAA,IAAI,CAACH,GAAG,CAAC,GAAG,IAAIG,GAAG,EAAE,CAAA;AACvB,GAAA;EAEAC,GAAGA,CAACC,SAAiB,EAAW;IAC9B,OAAO,IAAI,CAACN,IAAI,CAAC,CAACK,GAAG,CAACC,SAAS,CAAC,CAAA;AAClC,GAAA;EAEAC,QAAQA,CAAID,SAAiB,EAAK;IAChC,MAAMH,WAAW,GAAG,IAAI,CAACH,IAAI,CAAC,CAACQ,GAAG,CAACF,SAAS,CAAC,CAAA;IAC7C,IAAI,CAACH,WAAW,EAAE;AAChB,MAAA,MAAM,IAAIM,WAAW,CAAA,0BAAA,CAAAC,MAAA,CAA4BJ,SAAS,CAAE,CAAC,CAAA;AAC/D,KAAA;AACA,IAAA,OAAOH,WAAW,CAAA;AACpB,GAAA;AAEAQ,EAAAA,QAAQA,CAACC,gBAAqB,EAAEN,SAAkB,EAAE;AAClD,IAAA,IAAIA,SAAS,EAAE;MACb,IAAI,CAACN,IAAI,CAAC,CAACa,GAAG,CAACP,SAAS,EAAEM,gBAAgB,CAAC,CAAA;AAC7C,KAAC,MAAM;MACL,IAAI,CAACZ,IAAI,CAAC,CAACa,GAAG,CAACD,gBAAgB,CAACE,IAAI,EAAEF,gBAAgB,CAAC,CAAA;AACvD;AACA;AACA,MAAA,IAAI,CAACZ,IAAI,CAAC,CAACa,GAAG,CAACD,gBAAgB,CAACE,IAAI,CAACC,WAAW,EAAE,EAAEH,gBAAgB,CAAC,CAAA;AACvE,KAAA;AACF,GAAA;EAEAI,WAAWA,CAACC,UAAkB,EAAO;IACnC,OAAO,IAAI,CAAChB,GAAG,CAAC,CAACO,GAAG,CAACS,UAAU,CAAC,CAAA;AAClC,GAAA;AAEAC,EAAAA,WAAWA,CAACN,gBAAqB,EAAEK,UAAmB,EAAE;IACtD,IAAI,CAAChB,GAAG,CAAC,CAACY,GAAG,CACXI,UAAU,aAAVA,UAAU,KAAA,KAAA,CAAA,GAAVA,UAAU,GAAIL,gBAAgB,CAACE,IAAI,CAACC,WAAW,EAAE,EACjDH,gBACF,CAAC,CAAA;AACH,GAAA;AACF,CAAA;MAEaO,aAAa,GAAG,IAAIjB,aAAa;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collection.min.mjs","sources":["../../src/Collection.ts"],"sourcesContent":["import type { Constructor, TBBox } from './typedefs';\nimport { removeFromArray } from './util/internals';\nimport { Point } from './Point';\nimport type { ActiveSelection } from './shapes/ActiveSelection';\nimport type { Group } from './shapes/Group';\nimport type { InteractiveFabricObject } from './shapes/Object/InteractiveObject';\nimport type { FabricObject } from './shapes/Object/FabricObject';\n\nexport const isCollection = (\n fabricObject?: FabricObject\n): fabricObject is Group | ActiveSelection => {\n return !!fabricObject && Array.isArray((fabricObject as Group)._objects);\n};\n\nexport function createCollectionMixin<TBase extends Constructor>(Base: TBase) {\n class Collection extends Base {\n /**\n * @type {FabricObject[]}\n * @TODO needs to end up in the constructor too\n */\n _objects: FabricObject[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectAdded(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectRemoved(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onStackOrderChanged(object: FabricObject) {\n // subclasses should override this method\n }\n\n /**\n * Adds objects to collection\n * Objects should be instances of (or inherit from) FabricObject\n * @param {...FabricObject[]} objects to add\n * @returns {number} new array length\n */\n add(...objects: FabricObject[]): number {\n const size = this._objects.push(...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return size;\n }\n\n /**\n * Inserts an object into collection at specified index\n * @param {number} index Index to insert object at\n * @param {...FabricObject[]} objects Object(s) to insert\n * @returns {number} new array length\n */\n insertAt(index: number, ...objects: FabricObject[]) {\n this._objects.splice(index, 0, ...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return this._objects.length;\n }\n\n /**\n * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n * @private\n * @param {...FabricObject[]} objects objects to remove\n * @returns {FabricObject[]} removed objects\n */\n remove(...objects: FabricObject[]) {\n const array = this._objects,\n removed: FabricObject[] = [];\n objects.forEach((object) => {\n const index = array.indexOf(object);\n // only call onObjectRemoved if an object was actually removed\n if (index !== -1) {\n array.splice(index, 1);\n removed.push(object);\n this._onObjectRemoved(object);\n }\n });\n return removed;\n }\n\n /**\n * Executes given function for each object in this group\n * A simple shortcut for getObjects().forEach, before es6 was more complicated,\n * now is just a shortcut.\n * @param {Function} callback\n * Callback invoked with current object as first argument,\n * index - as second and an array of all objects - as third.\n */\n forEachObject(\n callback: (\n object: FabricObject,\n index: number,\n array: FabricObject[]\n ) => any\n ) {\n this.getObjects().forEach((object, index, objects) =>\n callback(object, index, objects)\n );\n }\n\n /**\n * Returns an array of children objects of this instance\n * @param {...String} [types] When specified, only objects of these types are returned\n * @return {Array}\n */\n getObjects(...types: string[]) {\n if (types.length === 0) {\n return [...this._objects];\n }\n return this._objects.filter((o) => o.isType(...types));\n }\n\n /**\n * Returns object at specified index\n * @param {Number} index\n * @return {Object} object at index\n */\n item(index: number) {\n return this._objects[index];\n }\n\n /**\n * Returns true if collection contains no objects\n * @return {Boolean} true if collection is empty\n */\n isEmpty() {\n return this._objects.length === 0;\n }\n\n /**\n * Returns a size of a collection (i.e: length of an array containing its objects)\n * @return {Number} Collection size\n */\n size() {\n return this._objects.length;\n }\n\n /**\n * Returns true if collection contains an object.\\\n * **Prefer using {@link FabricObject#isDescendantOf} for performance reasons**\n * instead of `a.contains(b)` use `b.isDescendantOf(a)`\n * @param {Object} object Object to check against\n * @param {Boolean} [deep=false] `true` to check all descendants, `false` to check only `_objects`\n * @return {Boolean} `true` if collection contains an object\n */\n contains(object: FabricObject, deep?: boolean): boolean {\n if (this._objects.includes(object)) {\n return true;\n } else if (deep) {\n return this._objects.some(\n (obj) =>\n obj instanceof Collection &&\n (obj as unknown as Collection).contains(object, true)\n );\n }\n return false;\n }\n\n /**\n * Returns number representation of a collection complexity\n * @return {Number} complexity\n */\n complexity() {\n return this._objects.reduce((memo, current) => {\n memo += current.complexity ? current.complexity() : 0;\n return memo;\n }, 0);\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the bottom of the stack of drawn objects\n * @param {fabric.Object} object Object to send to back\n * @returns {boolean} true if change occurred\n */\n sendObjectToBack(object: FabricObject) {\n if (!object || object === this._objects[0]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.unshift(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the top of the stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @returns {boolean} true if change occurred\n */\n bringObjectToFront(object: FabricObject) {\n if (!object || object === this._objects[this._objects.length - 1]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.push(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or a selection down in stack of drawn objects\n * An optional parameter, `intersecting` allows to move the object in behind\n * the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @returns {boolean} true if change occurred\n */\n sendObjectBackwards(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== 0) {\n // if object is not on the bottom of stack\n const newIdx = this.findNewLowerIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object or a selection up in stack of drawn objects\n * An optional parameter, intersecting allows to move the object in front\n * of the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @returns {boolean} true if change occurred\n */\n bringObjectForward(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== this._objects.length - 1) {\n // if object is not on top of stack (last item in an array)\n const newIdx = this.findNewUpperIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @param {number} index Position to move to\n * @returns {boolean} true if change occurred\n */\n moveObjectTo(object: FabricObject, index: number) {\n if (object === this._objects[index]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.splice(index, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n findNewLowerIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse down the stack looking for the nearest intersecting object\n for (let i = idx - 1; i >= 0; --i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx - 1;\n }\n\n return newIdx;\n }\n\n findNewUpperIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse up the stack looking for the nearest intersecting object\n for (let i = idx + 1; i < this._objects.length; ++i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx + 1;\n }\n\n return newIdx;\n }\n\n /**\n * Given a bounding box, return all the objects of the collection that are contained in the bounding box.\n * If `includeIntersecting` is true, return also the objects that intersect the bounding box as well.\n * This is meant to work with selection. Is not a generic method.\n * @param {TBBox} bbox a bounding box in scene coordinates\n * @param {{ includeIntersecting?: boolean }} options an object with includeIntersecting\n * @returns array of objects contained in the bounding box, ordered from top to bottom stacking wise\n */\n collectObjects(\n { left, top, width, height }: TBBox,\n { includeIntersecting = true }: { includeIntersecting?: boolean } = {}\n ) {\n const objects: InteractiveFabricObject[] = [],\n tl = new Point(left, top),\n br = tl.add(new Point(width, height));\n\n // we iterate reverse order to collect top first in case of click.\n for (let i = this._objects.length - 1; i >= 0; i--) {\n const object = this._objects[i] as unknown as InteractiveFabricObject;\n if (\n object.selectable &&\n object.visible &&\n ((includeIntersecting && object.intersectsWithRect(tl, br)) ||\n object.isContainedWithinRect(tl, br) ||\n (includeIntersecting && object.containsPoint(tl)) ||\n (includeIntersecting && object.containsPoint(br)))\n ) {\n objects.push(object);\n }\n }\n\n return objects;\n }\n }\n\n // https://github.com/microsoft/TypeScript/issues/32080\n return Collection as typeof Collection & TBase;\n}\n"],"names":["isCollection","fabricObject","Array","isArray","_objects","createCollectionMixin","Base","Collection","constructor","super","arguments","_defineProperty","_onObjectAdded","object","_onObjectRemoved","_onStackOrderChanged","add","_len","length","objects","_key","size","this","push","forEach","insertAt","index","_len2","_key2","splice","remove","array","removed","_len3","_key3","indexOf","forEachObject","callback","getObjects","_len4","types","_key4","filter","o","isType","item","isEmpty","contains","deep","includes","some","obj","complexity","reduce","memo","current","sendObjectToBack","removeFromArray","unshift","bringObjectToFront","sendObjectBackwards","intersecting","idx","newIdx","findNewLowerIndex","bringObjectForward","findNewUpperIndex","moveObjectTo","i","isOverlapping","collectObjects","_ref","left","top","width","height","includeIntersecting","undefined","tl","Point","br","selectable","visible","intersectsWithRect","isContainedWithinRect","containsPoint"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Collection.min.mjs","sources":["../../src/Collection.ts"],"sourcesContent":["import type { Constructor, TBBox } from './typedefs';\nimport { removeFromArray } from './util/internals/removeFromArray';\nimport { Point } from './Point';\nimport type { ActiveSelection } from './shapes/ActiveSelection';\nimport type { Group } from './shapes/Group';\nimport type { InteractiveFabricObject } from './shapes/Object/InteractiveObject';\nimport type { FabricObject } from './shapes/Object/FabricObject';\n\nexport const isCollection = (\n fabricObject?: FabricObject,\n): fabricObject is Group | ActiveSelection => {\n return !!fabricObject && Array.isArray((fabricObject as Group)._objects);\n};\n\nexport function createCollectionMixin<TBase extends Constructor>(Base: TBase) {\n class Collection extends Base {\n /**\n * @type {FabricObject[]}\n * @TODO needs to end up in the constructor too\n */\n _objects: FabricObject[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectAdded(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectRemoved(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onStackOrderChanged(object: FabricObject) {\n // subclasses should override this method\n }\n\n /**\n * Adds objects to collection\n * Objects should be instances of (or inherit from) FabricObject\n * @param {...FabricObject[]} objects to add\n * @returns {number} new array length\n */\n add(...objects: FabricObject[]): number {\n const size = this._objects.push(...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return size;\n }\n\n /**\n * Inserts an object into collection at specified index\n * @param {number} index Index to insert object at\n * @param {...FabricObject[]} objects Object(s) to insert\n * @returns {number} new array length\n */\n insertAt(index: number, ...objects: FabricObject[]) {\n this._objects.splice(index, 0, ...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return this._objects.length;\n }\n\n /**\n * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n * @private\n * @param {...FabricObject[]} objects objects to remove\n * @returns {FabricObject[]} removed objects\n */\n remove(...objects: FabricObject[]) {\n const array = this._objects,\n removed: FabricObject[] = [];\n objects.forEach((object) => {\n const index = array.indexOf(object);\n // only call onObjectRemoved if an object was actually removed\n if (index !== -1) {\n array.splice(index, 1);\n removed.push(object);\n this._onObjectRemoved(object);\n }\n });\n return removed;\n }\n\n /**\n * Executes given function for each object in this group\n * A simple shortcut for getObjects().forEach, before es6 was more complicated,\n * now is just a shortcut.\n * @param {Function} callback\n * Callback invoked with current object as first argument,\n * index - as second and an array of all objects - as third.\n */\n forEachObject(\n callback: (\n object: FabricObject,\n index: number,\n array: FabricObject[],\n ) => any,\n ) {\n this.getObjects().forEach((object, index, objects) =>\n callback(object, index, objects),\n );\n }\n\n /**\n * Returns an array of children objects of this instance\n * @param {...String} [types] When specified, only objects of these types are returned\n * @return {Array}\n */\n getObjects(...types: string[]) {\n if (types.length === 0) {\n return [...this._objects];\n }\n return this._objects.filter((o) => o.isType(...types));\n }\n\n /**\n * Returns object at specified index\n * @param {Number} index\n * @return {Object} object at index\n */\n item(index: number) {\n return this._objects[index];\n }\n\n /**\n * Returns true if collection contains no objects\n * @return {Boolean} true if collection is empty\n */\n isEmpty() {\n return this._objects.length === 0;\n }\n\n /**\n * Returns a size of a collection (i.e: length of an array containing its objects)\n * @return {Number} Collection size\n */\n size() {\n return this._objects.length;\n }\n\n /**\n * Returns true if collection contains an object.\\\n * **Prefer using {@link FabricObject#isDescendantOf} for performance reasons**\n * instead of `a.contains(b)` use `b.isDescendantOf(a)`\n * @param {Object} object Object to check against\n * @param {Boolean} [deep=false] `true` to check all descendants, `false` to check only `_objects`\n * @return {Boolean} `true` if collection contains an object\n */\n contains(object: FabricObject, deep?: boolean): boolean {\n if (this._objects.includes(object)) {\n return true;\n } else if (deep) {\n return this._objects.some(\n (obj) =>\n obj instanceof Collection &&\n (obj as unknown as Collection).contains(object, true),\n );\n }\n return false;\n }\n\n /**\n * Returns number representation of a collection complexity\n * @return {Number} complexity\n */\n complexity() {\n return this._objects.reduce((memo, current) => {\n memo += current.complexity ? current.complexity() : 0;\n return memo;\n }, 0);\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the bottom of the stack of drawn objects\n * @param {fabric.Object} object Object to send to back\n * @returns {boolean} true if change occurred\n */\n sendObjectToBack(object: FabricObject) {\n if (!object || object === this._objects[0]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.unshift(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the top of the stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @returns {boolean} true if change occurred\n */\n bringObjectToFront(object: FabricObject) {\n if (!object || object === this._objects[this._objects.length - 1]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.push(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or a selection down in stack of drawn objects\n * An optional parameter, `intersecting` allows to move the object in behind\n * the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @returns {boolean} true if change occurred\n */\n sendObjectBackwards(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== 0) {\n // if object is not on the bottom of stack\n const newIdx = this.findNewLowerIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object or a selection up in stack of drawn objects\n * An optional parameter, intersecting allows to move the object in front\n * of the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @returns {boolean} true if change occurred\n */\n bringObjectForward(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== this._objects.length - 1) {\n // if object is not on top of stack (last item in an array)\n const newIdx = this.findNewUpperIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @param {number} index Position to move to\n * @returns {boolean} true if change occurred\n */\n moveObjectTo(object: FabricObject, index: number) {\n if (object === this._objects[index]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.splice(index, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n findNewLowerIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean,\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse down the stack looking for the nearest intersecting object\n for (let i = idx - 1; i >= 0; --i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx - 1;\n }\n\n return newIdx;\n }\n\n findNewUpperIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean,\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse up the stack looking for the nearest intersecting object\n for (let i = idx + 1; i < this._objects.length; ++i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx + 1;\n }\n\n return newIdx;\n }\n\n /**\n * Given a bounding box, return all the objects of the collection that are contained in the bounding box.\n * If `includeIntersecting` is true, return also the objects that intersect the bounding box as well.\n * This is meant to work with selection. Is not a generic method.\n * @param {TBBox} bbox a bounding box in scene coordinates\n * @param {{ includeIntersecting?: boolean }} options an object with includeIntersecting\n * @returns array of objects contained in the bounding box, ordered from top to bottom stacking wise\n */\n collectObjects(\n { left, top, width, height }: TBBox,\n { includeIntersecting = true }: { includeIntersecting?: boolean } = {},\n ) {\n const objects: InteractiveFabricObject[] = [],\n tl = new Point(left, top),\n br = tl.add(new Point(width, height));\n\n // we iterate reverse order to collect top first in case of click.\n for (let i = this._objects.length - 1; i >= 0; i--) {\n const object = this._objects[i] as unknown as InteractiveFabricObject;\n if (\n object.selectable &&\n object.visible &&\n ((includeIntersecting && object.intersectsWithRect(tl, br)) ||\n object.isContainedWithinRect(tl, br) ||\n (includeIntersecting && object.containsPoint(tl)) ||\n (includeIntersecting && object.containsPoint(br)))\n ) {\n objects.push(object);\n }\n }\n\n return objects;\n }\n }\n\n // https://github.com/microsoft/TypeScript/issues/32080\n return Collection as typeof Collection & TBase;\n}\n"],"names":["isCollection","fabricObject","Array","isArray","_objects","createCollectionMixin","Base","Collection","constructor","super","arguments","_defineProperty","_onObjectAdded","object","_onObjectRemoved","_onStackOrderChanged","add","_len","length","objects","_key","size","this","push","forEach","insertAt","index","_len2","_key2","splice","remove","array","removed","_len3","_key3","indexOf","forEachObject","callback","getObjects","_len4","types","_key4","filter","o","isType","item","isEmpty","contains","deep","includes","some","obj","complexity","reduce","memo","current","sendObjectToBack","removeFromArray","unshift","bringObjectToFront","sendObjectBackwards","intersecting","idx","newIdx","findNewLowerIndex","bringObjectForward","findNewUpperIndex","moveObjectTo","i","isOverlapping","collectObjects","_ref","left","top","width","height","includeIntersecting","undefined","tl","Point","br","selectable","visible","intersectsWithRect","isContainedWithinRect","containsPoint"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collection.mjs","sources":["../../src/Collection.ts"],"sourcesContent":["import type { Constructor, TBBox } from './typedefs';\nimport { removeFromArray } from './util/internals';\nimport { Point } from './Point';\nimport type { ActiveSelection } from './shapes/ActiveSelection';\nimport type { Group } from './shapes/Group';\nimport type { InteractiveFabricObject } from './shapes/Object/InteractiveObject';\nimport type { FabricObject } from './shapes/Object/FabricObject';\n\nexport const isCollection = (\n fabricObject?: FabricObject\n): fabricObject is Group | ActiveSelection => {\n return !!fabricObject && Array.isArray((fabricObject as Group)._objects);\n};\n\nexport function createCollectionMixin<TBase extends Constructor>(Base: TBase) {\n class Collection extends Base {\n /**\n * @type {FabricObject[]}\n * @TODO needs to end up in the constructor too\n */\n _objects: FabricObject[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectAdded(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectRemoved(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onStackOrderChanged(object: FabricObject) {\n // subclasses should override this method\n }\n\n /**\n * Adds objects to collection\n * Objects should be instances of (or inherit from) FabricObject\n * @param {...FabricObject[]} objects to add\n * @returns {number} new array length\n */\n add(...objects: FabricObject[]): number {\n const size = this._objects.push(...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return size;\n }\n\n /**\n * Inserts an object into collection at specified index\n * @param {number} index Index to insert object at\n * @param {...FabricObject[]} objects Object(s) to insert\n * @returns {number} new array length\n */\n insertAt(index: number, ...objects: FabricObject[]) {\n this._objects.splice(index, 0, ...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return this._objects.length;\n }\n\n /**\n * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n * @private\n * @param {...FabricObject[]} objects objects to remove\n * @returns {FabricObject[]} removed objects\n */\n remove(...objects: FabricObject[]) {\n const array = this._objects,\n removed: FabricObject[] = [];\n objects.forEach((object) => {\n const index = array.indexOf(object);\n // only call onObjectRemoved if an object was actually removed\n if (index !== -1) {\n array.splice(index, 1);\n removed.push(object);\n this._onObjectRemoved(object);\n }\n });\n return removed;\n }\n\n /**\n * Executes given function for each object in this group\n * A simple shortcut for getObjects().forEach, before es6 was more complicated,\n * now is just a shortcut.\n * @param {Function} callback\n * Callback invoked with current object as first argument,\n * index - as second and an array of all objects - as third.\n */\n forEachObject(\n callback: (\n object: FabricObject,\n index: number,\n array: FabricObject[]\n ) => any\n ) {\n this.getObjects().forEach((object, index, objects) =>\n callback(object, index, objects)\n );\n }\n\n /**\n * Returns an array of children objects of this instance\n * @param {...String} [types] When specified, only objects of these types are returned\n * @return {Array}\n */\n getObjects(...types: string[]) {\n if (types.length === 0) {\n return [...this._objects];\n }\n return this._objects.filter((o) => o.isType(...types));\n }\n\n /**\n * Returns object at specified index\n * @param {Number} index\n * @return {Object} object at index\n */\n item(index: number) {\n return this._objects[index];\n }\n\n /**\n * Returns true if collection contains no objects\n * @return {Boolean} true if collection is empty\n */\n isEmpty() {\n return this._objects.length === 0;\n }\n\n /**\n * Returns a size of a collection (i.e: length of an array containing its objects)\n * @return {Number} Collection size\n */\n size() {\n return this._objects.length;\n }\n\n /**\n * Returns true if collection contains an object.\\\n * **Prefer using {@link FabricObject#isDescendantOf} for performance reasons**\n * instead of `a.contains(b)` use `b.isDescendantOf(a)`\n * @param {Object} object Object to check against\n * @param {Boolean} [deep=false] `true` to check all descendants, `false` to check only `_objects`\n * @return {Boolean} `true` if collection contains an object\n */\n contains(object: FabricObject, deep?: boolean): boolean {\n if (this._objects.includes(object)) {\n return true;\n } else if (deep) {\n return this._objects.some(\n (obj) =>\n obj instanceof Collection &&\n (obj as unknown as Collection).contains(object, true)\n );\n }\n return false;\n }\n\n /**\n * Returns number representation of a collection complexity\n * @return {Number} complexity\n */\n complexity() {\n return this._objects.reduce((memo, current) => {\n memo += current.complexity ? current.complexity() : 0;\n return memo;\n }, 0);\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the bottom of the stack of drawn objects\n * @param {fabric.Object} object Object to send to back\n * @returns {boolean} true if change occurred\n */\n sendObjectToBack(object: FabricObject) {\n if (!object || object === this._objects[0]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.unshift(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the top of the stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @returns {boolean} true if change occurred\n */\n bringObjectToFront(object: FabricObject) {\n if (!object || object === this._objects[this._objects.length - 1]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.push(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or a selection down in stack of drawn objects\n * An optional parameter, `intersecting` allows to move the object in behind\n * the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @returns {boolean} true if change occurred\n */\n sendObjectBackwards(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== 0) {\n // if object is not on the bottom of stack\n const newIdx = this.findNewLowerIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object or a selection up in stack of drawn objects\n * An optional parameter, intersecting allows to move the object in front\n * of the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @returns {boolean} true if change occurred\n */\n bringObjectForward(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== this._objects.length - 1) {\n // if object is not on top of stack (last item in an array)\n const newIdx = this.findNewUpperIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @param {number} index Position to move to\n * @returns {boolean} true if change occurred\n */\n moveObjectTo(object: FabricObject, index: number) {\n if (object === this._objects[index]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.splice(index, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n findNewLowerIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse down the stack looking for the nearest intersecting object\n for (let i = idx - 1; i >= 0; --i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx - 1;\n }\n\n return newIdx;\n }\n\n findNewUpperIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse up the stack looking for the nearest intersecting object\n for (let i = idx + 1; i < this._objects.length; ++i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx + 1;\n }\n\n return newIdx;\n }\n\n /**\n * Given a bounding box, return all the objects of the collection that are contained in the bounding box.\n * If `includeIntersecting` is true, return also the objects that intersect the bounding box as well.\n * This is meant to work with selection. Is not a generic method.\n * @param {TBBox} bbox a bounding box in scene coordinates\n * @param {{ includeIntersecting?: boolean }} options an object with includeIntersecting\n * @returns array of objects contained in the bounding box, ordered from top to bottom stacking wise\n */\n collectObjects(\n { left, top, width, height }: TBBox,\n { includeIntersecting = true }: { includeIntersecting?: boolean } = {}\n ) {\n const objects: InteractiveFabricObject[] = [],\n tl = new Point(left, top),\n br = tl.add(new Point(width, height));\n\n // we iterate reverse order to collect top first in case of click.\n for (let i = this._objects.length - 1; i >= 0; i--) {\n const object = this._objects[i] as unknown as InteractiveFabricObject;\n if (\n object.selectable &&\n object.visible &&\n ((includeIntersecting && object.intersectsWithRect(tl, br)) ||\n object.isContainedWithinRect(tl, br) ||\n (includeIntersecting && object.containsPoint(tl)) ||\n (includeIntersecting && object.containsPoint(br)))\n ) {\n objects.push(object);\n }\n }\n\n return objects;\n }\n }\n\n // https://github.com/microsoft/TypeScript/issues/32080\n return Collection as typeof Collection & TBase;\n}\n"],"names":["isCollection","fabricObject","Array","isArray","_objects","createCollectionMixin","Base","Collection","constructor","arguments","_defineProperty","_onObjectAdded","object","_onObjectRemoved","_onStackOrderChanged","add","_len","length","objects","_key","size","push","forEach","insertAt","index","_len2","_key2","splice","remove","array","removed","_len3","_key3","indexOf","forEachObject","callback","getObjects","_len4","types","_key4","filter","o","isType","item","isEmpty","contains","deep","includes","some","obj","complexity","reduce","memo","current","sendObjectToBack","removeFromArray","unshift","bringObjectToFront","sendObjectBackwards","intersecting","idx","newIdx","findNewLowerIndex","bringObjectForward","findNewUpperIndex","moveObjectTo","i","isOverlapping","collectObjects","_ref","left","top","width","height","includeIntersecting","undefined","tl","Point","br","selectable","visible","intersectsWithRect","isContainedWithinRect","containsPoint"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Collection.mjs","sources":["../../src/Collection.ts"],"sourcesContent":["import type { Constructor, TBBox } from './typedefs';\nimport { removeFromArray } from './util/internals/removeFromArray';\nimport { Point } from './Point';\nimport type { ActiveSelection } from './shapes/ActiveSelection';\nimport type { Group } from './shapes/Group';\nimport type { InteractiveFabricObject } from './shapes/Object/InteractiveObject';\nimport type { FabricObject } from './shapes/Object/FabricObject';\n\nexport const isCollection = (\n fabricObject?: FabricObject,\n): fabricObject is Group | ActiveSelection => {\n return !!fabricObject && Array.isArray((fabricObject as Group)._objects);\n};\n\nexport function createCollectionMixin<TBase extends Constructor>(Base: TBase) {\n class Collection extends Base {\n /**\n * @type {FabricObject[]}\n * @TODO needs to end up in the constructor too\n */\n _objects: FabricObject[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectAdded(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onObjectRemoved(object: FabricObject) {\n // subclasses should override this method\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _onStackOrderChanged(object: FabricObject) {\n // subclasses should override this method\n }\n\n /**\n * Adds objects to collection\n * Objects should be instances of (or inherit from) FabricObject\n * @param {...FabricObject[]} objects to add\n * @returns {number} new array length\n */\n add(...objects: FabricObject[]): number {\n const size = this._objects.push(...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return size;\n }\n\n /**\n * Inserts an object into collection at specified index\n * @param {number} index Index to insert object at\n * @param {...FabricObject[]} objects Object(s) to insert\n * @returns {number} new array length\n */\n insertAt(index: number, ...objects: FabricObject[]) {\n this._objects.splice(index, 0, ...objects);\n objects.forEach((object) => this._onObjectAdded(object));\n return this._objects.length;\n }\n\n /**\n * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n * @private\n * @param {...FabricObject[]} objects objects to remove\n * @returns {FabricObject[]} removed objects\n */\n remove(...objects: FabricObject[]) {\n const array = this._objects,\n removed: FabricObject[] = [];\n objects.forEach((object) => {\n const index = array.indexOf(object);\n // only call onObjectRemoved if an object was actually removed\n if (index !== -1) {\n array.splice(index, 1);\n removed.push(object);\n this._onObjectRemoved(object);\n }\n });\n return removed;\n }\n\n /**\n * Executes given function for each object in this group\n * A simple shortcut for getObjects().forEach, before es6 was more complicated,\n * now is just a shortcut.\n * @param {Function} callback\n * Callback invoked with current object as first argument,\n * index - as second and an array of all objects - as third.\n */\n forEachObject(\n callback: (\n object: FabricObject,\n index: number,\n array: FabricObject[],\n ) => any,\n ) {\n this.getObjects().forEach((object, index, objects) =>\n callback(object, index, objects),\n );\n }\n\n /**\n * Returns an array of children objects of this instance\n * @param {...String} [types] When specified, only objects of these types are returned\n * @return {Array}\n */\n getObjects(...types: string[]) {\n if (types.length === 0) {\n return [...this._objects];\n }\n return this._objects.filter((o) => o.isType(...types));\n }\n\n /**\n * Returns object at specified index\n * @param {Number} index\n * @return {Object} object at index\n */\n item(index: number) {\n return this._objects[index];\n }\n\n /**\n * Returns true if collection contains no objects\n * @return {Boolean} true if collection is empty\n */\n isEmpty() {\n return this._objects.length === 0;\n }\n\n /**\n * Returns a size of a collection (i.e: length of an array containing its objects)\n * @return {Number} Collection size\n */\n size() {\n return this._objects.length;\n }\n\n /**\n * Returns true if collection contains an object.\\\n * **Prefer using {@link FabricObject#isDescendantOf} for performance reasons**\n * instead of `a.contains(b)` use `b.isDescendantOf(a)`\n * @param {Object} object Object to check against\n * @param {Boolean} [deep=false] `true` to check all descendants, `false` to check only `_objects`\n * @return {Boolean} `true` if collection contains an object\n */\n contains(object: FabricObject, deep?: boolean): boolean {\n if (this._objects.includes(object)) {\n return true;\n } else if (deep) {\n return this._objects.some(\n (obj) =>\n obj instanceof Collection &&\n (obj as unknown as Collection).contains(object, true),\n );\n }\n return false;\n }\n\n /**\n * Returns number representation of a collection complexity\n * @return {Number} complexity\n */\n complexity() {\n return this._objects.reduce((memo, current) => {\n memo += current.complexity ? current.complexity() : 0;\n return memo;\n }, 0);\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the bottom of the stack of drawn objects\n * @param {fabric.Object} object Object to send to back\n * @returns {boolean} true if change occurred\n */\n sendObjectToBack(object: FabricObject) {\n if (!object || object === this._objects[0]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.unshift(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the top of the stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @returns {boolean} true if change occurred\n */\n bringObjectToFront(object: FabricObject) {\n if (!object || object === this._objects[this._objects.length - 1]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.push(object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n /**\n * Moves an object or a selection down in stack of drawn objects\n * An optional parameter, `intersecting` allows to move the object in behind\n * the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @returns {boolean} true if change occurred\n */\n sendObjectBackwards(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== 0) {\n // if object is not on the bottom of stack\n const newIdx = this.findNewLowerIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object or a selection up in stack of drawn objects\n * An optional parameter, intersecting allows to move the object in front\n * of the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @returns {boolean} true if change occurred\n */\n bringObjectForward(object: FabricObject, intersecting?: boolean) {\n if (!object) {\n return false;\n }\n const idx = this._objects.indexOf(object);\n if (idx !== this._objects.length - 1) {\n // if object is not on top of stack (last item in an array)\n const newIdx = this.findNewUpperIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n return false;\n }\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @param {number} index Position to move to\n * @returns {boolean} true if change occurred\n */\n moveObjectTo(object: FabricObject, index: number) {\n if (object === this._objects[index]) {\n return false;\n }\n removeFromArray(this._objects, object);\n this._objects.splice(index, 0, object);\n this._onStackOrderChanged(object);\n return true;\n }\n\n findNewLowerIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean,\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse down the stack looking for the nearest intersecting object\n for (let i = idx - 1; i >= 0; --i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx - 1;\n }\n\n return newIdx;\n }\n\n findNewUpperIndex(\n object: FabricObject,\n idx: number,\n intersecting?: boolean,\n ) {\n let newIdx;\n\n if (intersecting) {\n newIdx = idx;\n // traverse up the stack looking for the nearest intersecting object\n for (let i = idx + 1; i < this._objects.length; ++i) {\n if (object.isOverlapping(this._objects[i])) {\n newIdx = i;\n break;\n }\n }\n } else {\n newIdx = idx + 1;\n }\n\n return newIdx;\n }\n\n /**\n * Given a bounding box, return all the objects of the collection that are contained in the bounding box.\n * If `includeIntersecting` is true, return also the objects that intersect the bounding box as well.\n * This is meant to work with selection. Is not a generic method.\n * @param {TBBox} bbox a bounding box in scene coordinates\n * @param {{ includeIntersecting?: boolean }} options an object with includeIntersecting\n * @returns array of objects contained in the bounding box, ordered from top to bottom stacking wise\n */\n collectObjects(\n { left, top, width, height }: TBBox,\n { includeIntersecting = true }: { includeIntersecting?: boolean } = {},\n ) {\n const objects: InteractiveFabricObject[] = [],\n tl = new Point(left, top),\n br = tl.add(new Point(width, height));\n\n // we iterate reverse order to collect top first in case of click.\n for (let i = this._objects.length - 1; i >= 0; i--) {\n const object = this._objects[i] as unknown as InteractiveFabricObject;\n if (\n object.selectable &&\n object.visible &&\n ((includeIntersecting && object.intersectsWithRect(tl, br)) ||\n object.isContainedWithinRect(tl, br) ||\n (includeIntersecting && object.containsPoint(tl)) ||\n (includeIntersecting && object.containsPoint(br)))\n ) {\n objects.push(object);\n }\n }\n\n return objects;\n }\n }\n\n // https://github.com/microsoft/TypeScript/issues/32080\n return Collection as typeof Collection & TBase;\n}\n"],"names":["isCollection","fabricObject","Array","isArray","_objects","createCollectionMixin","Base","Collection","constructor","arguments","_defineProperty","_onObjectAdded","object","_onObjectRemoved","_onStackOrderChanged","add","_len","length","objects","_key","size","push","forEach","insertAt","index","_len2","_key2","splice","remove","array","removed","_len3","_key3","indexOf","forEachObject","callback","getObjects","_len4","types","_key4","filter","o","isType","item","isEmpty","contains","deep","includes","some","obj","complexity","reduce","memo","current","sendObjectToBack","removeFromArray","unshift","bringObjectToFront","sendObjectBackwards","intersecting","idx","newIdx","findNewLowerIndex","bringObjectForward","findNewUpperIndex","moveObjectTo","i","isOverlapping","collectObjects","_ref","left","top","width","height","includeIntersecting","undefined","tl","Point","br","selectable","visible","intersectsWithRect","isContainedWithinRect","containsPoint"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Intersection.min.mjs","sources":["../../src/Intersection.ts"],"sourcesContent":["import { Point } from './Point';\nimport { createVector } from './util/misc/vectors';\n\n/* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n\nexport type IntersectionType = 'Intersection' | 'Coincident' | 'Parallel';\n\nexport class Intersection {\n declare points: Point[];\n\n declare status?: IntersectionType;\n\n constructor(status?: IntersectionType) {\n this.status = status;\n this.points = [];\n }\n\n /**\n * Used to verify if a point is alredy in the collection\n * @param {Point} point\n * @returns {boolean}\n */\n private includes(point: Point): boolean {\n return this.points.some((p) => p.eq(point));\n }\n\n /**\n * Appends points of intersection\n * @param {...Point[]} points\n * @return {Intersection} thisArg\n * @chainable\n */\n private append(...points: Point[]): Intersection {\n this.points = this.points.concat(\n points.filter((point) => {\n return !this.includes(point);\n })\n );\n return this;\n }\n\n /**\n * check if point T is on the segment or line defined between A and B\n *\n * @param {Point} T the point we are checking for\n * @param {Point} A one extremity of the segment\n * @param {Point} B the other extremity of the segment\n * @param [infinite] if true checks if `T` is on the line defined by `A` and `B`\n * @returns true if `T` is contained\n */\n static isPointContained(T: Point, A: Point, B: Point, infinite = false) {\n if (A.eq(B)) {\n // Edge case: the segment is a point, we check for coincidence,\n // infinite param has no meaning because there are infinite lines to consider\n return T.eq(A);\n } else if (A.x === B.x) {\n // Edge case: horizontal line.\n // we first check if T.x has the same value, and then if T.y is contained between A.y and B.y\n return (\n T.x === A.x &&\n (infinite || (T.y >= Math.min(A.y, B.y) && T.y <= Math.max(A.y, B.y)))\n );\n } else if (A.y === B.y) {\n // Edge case: vertical line.\n // we first check if T.y has the same value, and then if T.x is contained between A.x and B.x\n return (\n T.y === A.y &&\n (infinite || (T.x >= Math.min(A.x, B.x) && T.x <= Math.max(A.x, B.x)))\n );\n } else {\n // Generic case: sloped line.\n // we check that AT has the same slope as AB\n // for the segment case we need both the vectors to have the same direction and for AT to be lte AB in size\n // for the infinite case we check the absolute value of the slope, since direction is meaningless\n const AB = createVector(A, B);\n const AT = createVector(A, T);\n const s = AT.divide(AB);\n return infinite\n ? Math.abs(s.x) === Math.abs(s.y)\n : s.x === s.y && s.x >= 0 && s.x <= 1;\n }\n }\n\n /**\n * Use the ray casting algorithm to determine if {@link point} is in the polygon defined by {@link points}\n * @see https://en.wikipedia.org/wiki/Point_in_polygon\n * @param point\n * @param points polygon points\n * @returns\n */\n static isPointInPolygon(point: Point, points: Point[]) {\n const other = new Point(point).setX(\n Math.min(point.x - 1, ...points.map((p) => p.x))\n );\n let hits = 0;\n for (let index = 0; index < points.length; index++) {\n const inter = this.intersectSegmentSegment(\n // polygon side\n points[index],\n points[(index + 1) % points.length],\n // ray\n point,\n other\n );\n if (inter.includes(point)) {\n // point is on the polygon side\n return true;\n }\n hits += Number(inter.status === 'Intersection');\n }\n return hits % 2 === 1;\n }\n\n /**\n * Checks if a line intersects another\n * @see {@link https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection line intersection}\n * @see {@link https://en.wikipedia.org/wiki/Cramer%27s_rule Cramer's rule}\n * @static\n * @param {Point} a1\n * @param {Point} a2\n * @param {Point} b1\n * @param {Point} b2\n * @param {boolean} [aInfinite=true] check segment intersection by passing `false`\n * @param {boolean} [bInfinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLineLine(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point,\n aInfinite = true,\n bInfinite = true\n ): Intersection {\n const a2xa1x = a2.x - a1.x,\n a2ya1y = a2.y - a1.y,\n b2xb1x = b2.x - b1.x,\n b2yb1y = b2.y - b1.y,\n a1xb1x = a1.x - b1.x,\n a1yb1y = a1.y - b1.y,\n uaT = b2xb1x * a1yb1y - b2yb1y * a1xb1x,\n ubT = a2xa1x * a1yb1y - a2ya1y * a1xb1x,\n uB = b2yb1y * a2xa1x - b2xb1x * a2ya1y;\n if (uB !== 0) {\n const ua = uaT / uB,\n ub = ubT / uB;\n if (\n (aInfinite || (0 <= ua && ua <= 1)) &&\n (bInfinite || (0 <= ub && ub <= 1))\n ) {\n return new Intersection('Intersection').append(\n new Point(a1.x + ua * a2xa1x, a1.y + ua * a2ya1y)\n );\n } else {\n return new Intersection();\n }\n } else {\n if (uaT === 0 || ubT === 0) {\n const segmentsCoincide =\n aInfinite ||\n bInfinite ||\n Intersection.isPointContained(a1, b1, b2) ||\n Intersection.isPointContained(a2, b1, b2) ||\n Intersection.isPointContained(b1, a1, a2) ||\n Intersection.isPointContained(b2, a1, a2);\n return new Intersection(segmentsCoincide ? 'Coincident' : undefined);\n } else {\n return new Intersection('Parallel');\n }\n }\n }\n\n /**\n * Checks if a segment intersects a line\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} s1 boundary point of segment\n * @param {Point} s2 other boundary point of segment\n * @param {Point} l1 point on line\n * @param {Point} l2 other point on line\n * @return {Intersection}\n */\n static intersectSegmentLine(\n s1: Point,\n s2: Point,\n l1: Point,\n l2: Point\n ): Intersection {\n return Intersection.intersectLineLine(s1, s2, l1, l2, false, true);\n }\n\n /**\n * Checks if a segment intersects another\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point} b1 boundary point of segment\n * @param {Point} b2 other boundary point of segment\n * @return {Intersection}\n */\n static intersectSegmentSegment(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point\n ): Intersection {\n return Intersection.intersectLineLine(a1, a2, b1, b2, false, false);\n }\n\n /**\n * Checks if line intersects polygon\n *\n * @todo account for stroke\n *\n * @static\n * @see {@link intersectSegmentPolygon} for segment intersection\n * @param {Point} a1 point on line\n * @param {Point} a2 other point on line\n * @param {Point[]} points polygon points\n * @param {boolean} [infinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLinePolygon(\n a1: Point,\n a2: Point,\n points: Point[],\n infinite = true\n ): Intersection {\n const result = new Intersection();\n const length = points.length;\n\n for (let i = 0, b1, b2, inter; i < length; i++) {\n b1 = points[i];\n b2 = points[(i + 1) % length];\n inter = Intersection.intersectLineLine(a1, a2, b1, b2, infinite, false);\n if (inter.status === 'Coincident') {\n return inter;\n }\n result.append(...inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if segment intersects polygon\n * @static\n * @see {@link intersectLinePolygon} for line intersection\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point[]} points polygon points\n * @return {Intersection}\n */\n static intersectSegmentPolygon(\n a1: Point,\n a2: Point,\n points: Point[]\n ): Intersection {\n return Intersection.intersectLinePolygon(a1, a2, points, false);\n }\n\n /**\n * Checks if polygon intersects another polygon\n *\n * @todo account for stroke\n *\n * @static\n * @param {Point[]} points1\n * @param {Point[]} points2\n * @return {Intersection}\n */\n static intersectPolygonPolygon(\n points1: Point[],\n points2: Point[]\n ): Intersection {\n const result = new Intersection(),\n length = points1.length;\n const coincidences: Intersection[] = [];\n\n for (let i = 0; i < length; i++) {\n const a1 = points1[i],\n a2 = points1[(i + 1) % length],\n inter = Intersection.intersectSegmentPolygon(a1, a2, points2);\n if (inter.status === 'Coincident') {\n coincidences.push(inter);\n result.append(a1, a2);\n } else {\n result.append(...inter.points);\n }\n }\n\n if (coincidences.length > 0 && coincidences.length === points1.length) {\n return new Intersection('Coincident');\n } else if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if polygon intersects rectangle\n * @static\n * @see {@link intersectPolygonPolygon} for polygon intersection\n * @param {Point[]} points polygon points\n * @param {Point} r1 top left point of rect\n * @param {Point} r2 bottom right point of rect\n * @return {Intersection}\n */\n static intersectPolygonRectangle(\n points: Point[],\n r1: Point,\n r2: Point\n ): Intersection {\n const min = r1.min(r2),\n max = r1.max(r2),\n topRight = new Point(max.x, min.y),\n bottomLeft = new Point(min.x, max.y);\n\n return Intersection.intersectPolygonPolygon(points, [\n min,\n topRight,\n max,\n bottomLeft,\n ]);\n }\n}\n"],"names":["Intersection","constructor","status","this","points","includes","point","some","p","eq","append","_len","arguments","length","Array","_key","concat","filter","isPointContained","T","A","B","infinite","undefined","x","y","Math","min","max","AB","createVector","s","divide","abs","isPointInPolygon","other","Point","setX","map","hits","index","inter","intersectSegmentSegment","Number","intersectLineLine","a1","a2","b1","b2","aInfinite","bInfinite","a2xa1x","a2ya1y","b2xb1x","b2yb1y","a1xb1x","a1yb1y","uaT","ubT","uB","ua","ub","segmentsCoincide","intersectSegmentLine","s1","s2","l1","l2","intersectLinePolygon","result","i","intersectSegmentPolygon","intersectPolygonPolygon","points1","points2","coincidences","push","intersectPolygonRectangle","r1","r2","topRight","bottomLeft"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Intersection.min.mjs","sources":["../../src/Intersection.ts"],"sourcesContent":["import { Point } from './Point';\nimport { createVector } from './util/misc/vectors';\n\n/* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n\nexport type IntersectionType = 'Intersection' | 'Coincident' | 'Parallel';\n\nexport class Intersection {\n declare points: Point[];\n\n declare status?: IntersectionType;\n\n constructor(status?: IntersectionType) {\n this.status = status;\n this.points = [];\n }\n\n /**\n * Used to verify if a point is alredy in the collection\n * @param {Point} point\n * @returns {boolean}\n */\n private includes(point: Point): boolean {\n return this.points.some((p) => p.eq(point));\n }\n\n /**\n * Appends points of intersection\n * @param {...Point[]} points\n * @return {Intersection} thisArg\n * @chainable\n */\n private append(...points: Point[]): Intersection {\n this.points = this.points.concat(\n points.filter((point) => {\n return !this.includes(point);\n }),\n );\n return this;\n }\n\n /**\n * check if point T is on the segment or line defined between A and B\n *\n * @param {Point} T the point we are checking for\n * @param {Point} A one extremity of the segment\n * @param {Point} B the other extremity of the segment\n * @param [infinite] if true checks if `T` is on the line defined by `A` and `B`\n * @returns true if `T` is contained\n */\n static isPointContained(T: Point, A: Point, B: Point, infinite = false) {\n if (A.eq(B)) {\n // Edge case: the segment is a point, we check for coincidence,\n // infinite param has no meaning because there are infinite lines to consider\n return T.eq(A);\n } else if (A.x === B.x) {\n // Edge case: horizontal line.\n // we first check if T.x has the same value, and then if T.y is contained between A.y and B.y\n return (\n T.x === A.x &&\n (infinite || (T.y >= Math.min(A.y, B.y) && T.y <= Math.max(A.y, B.y)))\n );\n } else if (A.y === B.y) {\n // Edge case: vertical line.\n // we first check if T.y has the same value, and then if T.x is contained between A.x and B.x\n return (\n T.y === A.y &&\n (infinite || (T.x >= Math.min(A.x, B.x) && T.x <= Math.max(A.x, B.x)))\n );\n } else {\n // Generic case: sloped line.\n // we check that AT has the same slope as AB\n // for the segment case we need both the vectors to have the same direction and for AT to be lte AB in size\n // for the infinite case we check the absolute value of the slope, since direction is meaningless\n const AB = createVector(A, B);\n const AT = createVector(A, T);\n const s = AT.divide(AB);\n return infinite\n ? Math.abs(s.x) === Math.abs(s.y)\n : s.x === s.y && s.x >= 0 && s.x <= 1;\n }\n }\n\n /**\n * Use the ray casting algorithm to determine if {@link point} is in the polygon defined by {@link points}\n * @see https://en.wikipedia.org/wiki/Point_in_polygon\n * @param point\n * @param points polygon points\n * @returns\n */\n static isPointInPolygon(point: Point, points: Point[]) {\n const other = new Point(point).setX(\n Math.min(point.x - 1, ...points.map((p) => p.x)),\n );\n let hits = 0;\n for (let index = 0; index < points.length; index++) {\n const inter = this.intersectSegmentSegment(\n // polygon side\n points[index],\n points[(index + 1) % points.length],\n // ray\n point,\n other,\n );\n if (inter.includes(point)) {\n // point is on the polygon side\n return true;\n }\n hits += Number(inter.status === 'Intersection');\n }\n return hits % 2 === 1;\n }\n\n /**\n * Checks if a line intersects another\n * @see {@link https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection line intersection}\n * @see {@link https://en.wikipedia.org/wiki/Cramer%27s_rule Cramer's rule}\n * @static\n * @param {Point} a1\n * @param {Point} a2\n * @param {Point} b1\n * @param {Point} b2\n * @param {boolean} [aInfinite=true] check segment intersection by passing `false`\n * @param {boolean} [bInfinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLineLine(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point,\n aInfinite = true,\n bInfinite = true,\n ): Intersection {\n const a2xa1x = a2.x - a1.x,\n a2ya1y = a2.y - a1.y,\n b2xb1x = b2.x - b1.x,\n b2yb1y = b2.y - b1.y,\n a1xb1x = a1.x - b1.x,\n a1yb1y = a1.y - b1.y,\n uaT = b2xb1x * a1yb1y - b2yb1y * a1xb1x,\n ubT = a2xa1x * a1yb1y - a2ya1y * a1xb1x,\n uB = b2yb1y * a2xa1x - b2xb1x * a2ya1y;\n if (uB !== 0) {\n const ua = uaT / uB,\n ub = ubT / uB;\n if (\n (aInfinite || (0 <= ua && ua <= 1)) &&\n (bInfinite || (0 <= ub && ub <= 1))\n ) {\n return new Intersection('Intersection').append(\n new Point(a1.x + ua * a2xa1x, a1.y + ua * a2ya1y),\n );\n } else {\n return new Intersection();\n }\n } else {\n if (uaT === 0 || ubT === 0) {\n const segmentsCoincide =\n aInfinite ||\n bInfinite ||\n Intersection.isPointContained(a1, b1, b2) ||\n Intersection.isPointContained(a2, b1, b2) ||\n Intersection.isPointContained(b1, a1, a2) ||\n Intersection.isPointContained(b2, a1, a2);\n return new Intersection(segmentsCoincide ? 'Coincident' : undefined);\n } else {\n return new Intersection('Parallel');\n }\n }\n }\n\n /**\n * Checks if a segment intersects a line\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} s1 boundary point of segment\n * @param {Point} s2 other boundary point of segment\n * @param {Point} l1 point on line\n * @param {Point} l2 other point on line\n * @return {Intersection}\n */\n static intersectSegmentLine(\n s1: Point,\n s2: Point,\n l1: Point,\n l2: Point,\n ): Intersection {\n return Intersection.intersectLineLine(s1, s2, l1, l2, false, true);\n }\n\n /**\n * Checks if a segment intersects another\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point} b1 boundary point of segment\n * @param {Point} b2 other boundary point of segment\n * @return {Intersection}\n */\n static intersectSegmentSegment(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point,\n ): Intersection {\n return Intersection.intersectLineLine(a1, a2, b1, b2, false, false);\n }\n\n /**\n * Checks if line intersects polygon\n *\n * @todo account for stroke\n *\n * @static\n * @see {@link intersectSegmentPolygon} for segment intersection\n * @param {Point} a1 point on line\n * @param {Point} a2 other point on line\n * @param {Point[]} points polygon points\n * @param {boolean} [infinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLinePolygon(\n a1: Point,\n a2: Point,\n points: Point[],\n infinite = true,\n ): Intersection {\n const result = new Intersection();\n const length = points.length;\n\n for (let i = 0, b1, b2, inter; i < length; i++) {\n b1 = points[i];\n b2 = points[(i + 1) % length];\n inter = Intersection.intersectLineLine(a1, a2, b1, b2, infinite, false);\n if (inter.status === 'Coincident') {\n return inter;\n }\n result.append(...inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if segment intersects polygon\n * @static\n * @see {@link intersectLinePolygon} for line intersection\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point[]} points polygon points\n * @return {Intersection}\n */\n static intersectSegmentPolygon(\n a1: Point,\n a2: Point,\n points: Point[],\n ): Intersection {\n return Intersection.intersectLinePolygon(a1, a2, points, false);\n }\n\n /**\n * Checks if polygon intersects another polygon\n *\n * @todo account for stroke\n *\n * @static\n * @param {Point[]} points1\n * @param {Point[]} points2\n * @return {Intersection}\n */\n static intersectPolygonPolygon(\n points1: Point[],\n points2: Point[],\n ): Intersection {\n const result = new Intersection(),\n length = points1.length;\n const coincidences: Intersection[] = [];\n\n for (let i = 0; i < length; i++) {\n const a1 = points1[i],\n a2 = points1[(i + 1) % length],\n inter = Intersection.intersectSegmentPolygon(a1, a2, points2);\n if (inter.status === 'Coincident') {\n coincidences.push(inter);\n result.append(a1, a2);\n } else {\n result.append(...inter.points);\n }\n }\n\n if (coincidences.length > 0 && coincidences.length === points1.length) {\n return new Intersection('Coincident');\n } else if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if polygon intersects rectangle\n * @static\n * @see {@link intersectPolygonPolygon} for polygon intersection\n * @param {Point[]} points polygon points\n * @param {Point} r1 top left point of rect\n * @param {Point} r2 bottom right point of rect\n * @return {Intersection}\n */\n static intersectPolygonRectangle(\n points: Point[],\n r1: Point,\n r2: Point,\n ): Intersection {\n const min = r1.min(r2),\n max = r1.max(r2),\n topRight = new Point(max.x, min.y),\n bottomLeft = new Point(min.x, max.y);\n\n return Intersection.intersectPolygonPolygon(points, [\n min,\n topRight,\n max,\n bottomLeft,\n ]);\n }\n}\n"],"names":["Intersection","constructor","status","this","points","includes","point","some","p","eq","append","_len","arguments","length","Array","_key","concat","filter","isPointContained","T","A","B","infinite","undefined","x","y","Math","min","max","AB","createVector","s","divide","abs","isPointInPolygon","other","Point","setX","map","hits","index","inter","intersectSegmentSegment","Number","intersectLineLine","a1","a2","b1","b2","aInfinite","bInfinite","a2xa1x","a2ya1y","b2xb1x","b2yb1y","a1xb1x","a1yb1y","uaT","ubT","uB","ua","ub","segmentsCoincide","intersectSegmentLine","s1","s2","l1","l2","intersectLinePolygon","result","i","intersectSegmentPolygon","intersectPolygonPolygon","points1","points2","coincidences","push","intersectPolygonRectangle","r1","r2","topRight","bottomLeft"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Intersection.mjs","sources":["../../src/Intersection.ts"],"sourcesContent":["import { Point } from './Point';\nimport { createVector } from './util/misc/vectors';\n\n/* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n\nexport type IntersectionType = 'Intersection' | 'Coincident' | 'Parallel';\n\nexport class Intersection {\n declare points: Point[];\n\n declare status?: IntersectionType;\n\n constructor(status?: IntersectionType) {\n this.status = status;\n this.points = [];\n }\n\n /**\n * Used to verify if a point is alredy in the collection\n * @param {Point} point\n * @returns {boolean}\n */\n private includes(point: Point): boolean {\n return this.points.some((p) => p.eq(point));\n }\n\n /**\n * Appends points of intersection\n * @param {...Point[]} points\n * @return {Intersection} thisArg\n * @chainable\n */\n private append(...points: Point[]): Intersection {\n this.points = this.points.concat(\n points.filter((point) => {\n return !this.includes(point);\n })\n );\n return this;\n }\n\n /**\n * check if point T is on the segment or line defined between A and B\n *\n * @param {Point} T the point we are checking for\n * @param {Point} A one extremity of the segment\n * @param {Point} B the other extremity of the segment\n * @param [infinite] if true checks if `T` is on the line defined by `A` and `B`\n * @returns true if `T` is contained\n */\n static isPointContained(T: Point, A: Point, B: Point, infinite = false) {\n if (A.eq(B)) {\n // Edge case: the segment is a point, we check for coincidence,\n // infinite param has no meaning because there are infinite lines to consider\n return T.eq(A);\n } else if (A.x === B.x) {\n // Edge case: horizontal line.\n // we first check if T.x has the same value, and then if T.y is contained between A.y and B.y\n return (\n T.x === A.x &&\n (infinite || (T.y >= Math.min(A.y, B.y) && T.y <= Math.max(A.y, B.y)))\n );\n } else if (A.y === B.y) {\n // Edge case: vertical line.\n // we first check if T.y has the same value, and then if T.x is contained between A.x and B.x\n return (\n T.y === A.y &&\n (infinite || (T.x >= Math.min(A.x, B.x) && T.x <= Math.max(A.x, B.x)))\n );\n } else {\n // Generic case: sloped line.\n // we check that AT has the same slope as AB\n // for the segment case we need both the vectors to have the same direction and for AT to be lte AB in size\n // for the infinite case we check the absolute value of the slope, since direction is meaningless\n const AB = createVector(A, B);\n const AT = createVector(A, T);\n const s = AT.divide(AB);\n return infinite\n ? Math.abs(s.x) === Math.abs(s.y)\n : s.x === s.y && s.x >= 0 && s.x <= 1;\n }\n }\n\n /**\n * Use the ray casting algorithm to determine if {@link point} is in the polygon defined by {@link points}\n * @see https://en.wikipedia.org/wiki/Point_in_polygon\n * @param point\n * @param points polygon points\n * @returns\n */\n static isPointInPolygon(point: Point, points: Point[]) {\n const other = new Point(point).setX(\n Math.min(point.x - 1, ...points.map((p) => p.x))\n );\n let hits = 0;\n for (let index = 0; index < points.length; index++) {\n const inter = this.intersectSegmentSegment(\n // polygon side\n points[index],\n points[(index + 1) % points.length],\n // ray\n point,\n other\n );\n if (inter.includes(point)) {\n // point is on the polygon side\n return true;\n }\n hits += Number(inter.status === 'Intersection');\n }\n return hits % 2 === 1;\n }\n\n /**\n * Checks if a line intersects another\n * @see {@link https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection line intersection}\n * @see {@link https://en.wikipedia.org/wiki/Cramer%27s_rule Cramer's rule}\n * @static\n * @param {Point} a1\n * @param {Point} a2\n * @param {Point} b1\n * @param {Point} b2\n * @param {boolean} [aInfinite=true] check segment intersection by passing `false`\n * @param {boolean} [bInfinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLineLine(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point,\n aInfinite = true,\n bInfinite = true\n ): Intersection {\n const a2xa1x = a2.x - a1.x,\n a2ya1y = a2.y - a1.y,\n b2xb1x = b2.x - b1.x,\n b2yb1y = b2.y - b1.y,\n a1xb1x = a1.x - b1.x,\n a1yb1y = a1.y - b1.y,\n uaT = b2xb1x * a1yb1y - b2yb1y * a1xb1x,\n ubT = a2xa1x * a1yb1y - a2ya1y * a1xb1x,\n uB = b2yb1y * a2xa1x - b2xb1x * a2ya1y;\n if (uB !== 0) {\n const ua = uaT / uB,\n ub = ubT / uB;\n if (\n (aInfinite || (0 <= ua && ua <= 1)) &&\n (bInfinite || (0 <= ub && ub <= 1))\n ) {\n return new Intersection('Intersection').append(\n new Point(a1.x + ua * a2xa1x, a1.y + ua * a2ya1y)\n );\n } else {\n return new Intersection();\n }\n } else {\n if (uaT === 0 || ubT === 0) {\n const segmentsCoincide =\n aInfinite ||\n bInfinite ||\n Intersection.isPointContained(a1, b1, b2) ||\n Intersection.isPointContained(a2, b1, b2) ||\n Intersection.isPointContained(b1, a1, a2) ||\n Intersection.isPointContained(b2, a1, a2);\n return new Intersection(segmentsCoincide ? 'Coincident' : undefined);\n } else {\n return new Intersection('Parallel');\n }\n }\n }\n\n /**\n * Checks if a segment intersects a line\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} s1 boundary point of segment\n * @param {Point} s2 other boundary point of segment\n * @param {Point} l1 point on line\n * @param {Point} l2 other point on line\n * @return {Intersection}\n */\n static intersectSegmentLine(\n s1: Point,\n s2: Point,\n l1: Point,\n l2: Point\n ): Intersection {\n return Intersection.intersectLineLine(s1, s2, l1, l2, false, true);\n }\n\n /**\n * Checks if a segment intersects another\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point} b1 boundary point of segment\n * @param {Point} b2 other boundary point of segment\n * @return {Intersection}\n */\n static intersectSegmentSegment(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point\n ): Intersection {\n return Intersection.intersectLineLine(a1, a2, b1, b2, false, false);\n }\n\n /**\n * Checks if line intersects polygon\n *\n * @todo account for stroke\n *\n * @static\n * @see {@link intersectSegmentPolygon} for segment intersection\n * @param {Point} a1 point on line\n * @param {Point} a2 other point on line\n * @param {Point[]} points polygon points\n * @param {boolean} [infinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLinePolygon(\n a1: Point,\n a2: Point,\n points: Point[],\n infinite = true\n ): Intersection {\n const result = new Intersection();\n const length = points.length;\n\n for (let i = 0, b1, b2, inter; i < length; i++) {\n b1 = points[i];\n b2 = points[(i + 1) % length];\n inter = Intersection.intersectLineLine(a1, a2, b1, b2, infinite, false);\n if (inter.status === 'Coincident') {\n return inter;\n }\n result.append(...inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if segment intersects polygon\n * @static\n * @see {@link intersectLinePolygon} for line intersection\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point[]} points polygon points\n * @return {Intersection}\n */\n static intersectSegmentPolygon(\n a1: Point,\n a2: Point,\n points: Point[]\n ): Intersection {\n return Intersection.intersectLinePolygon(a1, a2, points, false);\n }\n\n /**\n * Checks if polygon intersects another polygon\n *\n * @todo account for stroke\n *\n * @static\n * @param {Point[]} points1\n * @param {Point[]} points2\n * @return {Intersection}\n */\n static intersectPolygonPolygon(\n points1: Point[],\n points2: Point[]\n ): Intersection {\n const result = new Intersection(),\n length = points1.length;\n const coincidences: Intersection[] = [];\n\n for (let i = 0; i < length; i++) {\n const a1 = points1[i],\n a2 = points1[(i + 1) % length],\n inter = Intersection.intersectSegmentPolygon(a1, a2, points2);\n if (inter.status === 'Coincident') {\n coincidences.push(inter);\n result.append(a1, a2);\n } else {\n result.append(...inter.points);\n }\n }\n\n if (coincidences.length > 0 && coincidences.length === points1.length) {\n return new Intersection('Coincident');\n } else if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if polygon intersects rectangle\n * @static\n * @see {@link intersectPolygonPolygon} for polygon intersection\n * @param {Point[]} points polygon points\n * @param {Point} r1 top left point of rect\n * @param {Point} r2 bottom right point of rect\n * @return {Intersection}\n */\n static intersectPolygonRectangle(\n points: Point[],\n r1: Point,\n r2: Point\n ): Intersection {\n const min = r1.min(r2),\n max = r1.max(r2),\n topRight = new Point(max.x, min.y),\n bottomLeft = new Point(min.x, max.y);\n\n return Intersection.intersectPolygonPolygon(points, [\n min,\n topRight,\n max,\n bottomLeft,\n ]);\n }\n}\n"],"names":["Intersection","constructor","status","points","includes","point","some","p","eq","append","_len","arguments","length","Array","_key","concat","filter","isPointContained","T","A","B","infinite","undefined","x","y","Math","min","max","AB","createVector","AT","s","divide","abs","isPointInPolygon","other","Point","setX","map","hits","index","inter","intersectSegmentSegment","Number","intersectLineLine","a1","a2","b1","b2","aInfinite","bInfinite","a2xa1x","a2ya1y","b2xb1x","b2yb1y","a1xb1x","a1yb1y","uaT","ubT","uB","ua","ub","segmentsCoincide","intersectSegmentLine","s1","s2","l1","l2","intersectLinePolygon","result","i","intersectSegmentPolygon","intersectPolygonPolygon","points1","points2","coincidences","push","intersectPolygonRectangle","r1","r2","topRight","bottomLeft"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Intersection.mjs","sources":["../../src/Intersection.ts"],"sourcesContent":["import { Point } from './Point';\nimport { createVector } from './util/misc/vectors';\n\n/* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n\nexport type IntersectionType = 'Intersection' | 'Coincident' | 'Parallel';\n\nexport class Intersection {\n declare points: Point[];\n\n declare status?: IntersectionType;\n\n constructor(status?: IntersectionType) {\n this.status = status;\n this.points = [];\n }\n\n /**\n * Used to verify if a point is alredy in the collection\n * @param {Point} point\n * @returns {boolean}\n */\n private includes(point: Point): boolean {\n return this.points.some((p) => p.eq(point));\n }\n\n /**\n * Appends points of intersection\n * @param {...Point[]} points\n * @return {Intersection} thisArg\n * @chainable\n */\n private append(...points: Point[]): Intersection {\n this.points = this.points.concat(\n points.filter((point) => {\n return !this.includes(point);\n }),\n );\n return this;\n }\n\n /**\n * check if point T is on the segment or line defined between A and B\n *\n * @param {Point} T the point we are checking for\n * @param {Point} A one extremity of the segment\n * @param {Point} B the other extremity of the segment\n * @param [infinite] if true checks if `T` is on the line defined by `A` and `B`\n * @returns true if `T` is contained\n */\n static isPointContained(T: Point, A: Point, B: Point, infinite = false) {\n if (A.eq(B)) {\n // Edge case: the segment is a point, we check for coincidence,\n // infinite param has no meaning because there are infinite lines to consider\n return T.eq(A);\n } else if (A.x === B.x) {\n // Edge case: horizontal line.\n // we first check if T.x has the same value, and then if T.y is contained between A.y and B.y\n return (\n T.x === A.x &&\n (infinite || (T.y >= Math.min(A.y, B.y) && T.y <= Math.max(A.y, B.y)))\n );\n } else if (A.y === B.y) {\n // Edge case: vertical line.\n // we first check if T.y has the same value, and then if T.x is contained between A.x and B.x\n return (\n T.y === A.y &&\n (infinite || (T.x >= Math.min(A.x, B.x) && T.x <= Math.max(A.x, B.x)))\n );\n } else {\n // Generic case: sloped line.\n // we check that AT has the same slope as AB\n // for the segment case we need both the vectors to have the same direction and for AT to be lte AB in size\n // for the infinite case we check the absolute value of the slope, since direction is meaningless\n const AB = createVector(A, B);\n const AT = createVector(A, T);\n const s = AT.divide(AB);\n return infinite\n ? Math.abs(s.x) === Math.abs(s.y)\n : s.x === s.y && s.x >= 0 && s.x <= 1;\n }\n }\n\n /**\n * Use the ray casting algorithm to determine if {@link point} is in the polygon defined by {@link points}\n * @see https://en.wikipedia.org/wiki/Point_in_polygon\n * @param point\n * @param points polygon points\n * @returns\n */\n static isPointInPolygon(point: Point, points: Point[]) {\n const other = new Point(point).setX(\n Math.min(point.x - 1, ...points.map((p) => p.x)),\n );\n let hits = 0;\n for (let index = 0; index < points.length; index++) {\n const inter = this.intersectSegmentSegment(\n // polygon side\n points[index],\n points[(index + 1) % points.length],\n // ray\n point,\n other,\n );\n if (inter.includes(point)) {\n // point is on the polygon side\n return true;\n }\n hits += Number(inter.status === 'Intersection');\n }\n return hits % 2 === 1;\n }\n\n /**\n * Checks if a line intersects another\n * @see {@link https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection line intersection}\n * @see {@link https://en.wikipedia.org/wiki/Cramer%27s_rule Cramer's rule}\n * @static\n * @param {Point} a1\n * @param {Point} a2\n * @param {Point} b1\n * @param {Point} b2\n * @param {boolean} [aInfinite=true] check segment intersection by passing `false`\n * @param {boolean} [bInfinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLineLine(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point,\n aInfinite = true,\n bInfinite = true,\n ): Intersection {\n const a2xa1x = a2.x - a1.x,\n a2ya1y = a2.y - a1.y,\n b2xb1x = b2.x - b1.x,\n b2yb1y = b2.y - b1.y,\n a1xb1x = a1.x - b1.x,\n a1yb1y = a1.y - b1.y,\n uaT = b2xb1x * a1yb1y - b2yb1y * a1xb1x,\n ubT = a2xa1x * a1yb1y - a2ya1y * a1xb1x,\n uB = b2yb1y * a2xa1x - b2xb1x * a2ya1y;\n if (uB !== 0) {\n const ua = uaT / uB,\n ub = ubT / uB;\n if (\n (aInfinite || (0 <= ua && ua <= 1)) &&\n (bInfinite || (0 <= ub && ub <= 1))\n ) {\n return new Intersection('Intersection').append(\n new Point(a1.x + ua * a2xa1x, a1.y + ua * a2ya1y),\n );\n } else {\n return new Intersection();\n }\n } else {\n if (uaT === 0 || ubT === 0) {\n const segmentsCoincide =\n aInfinite ||\n bInfinite ||\n Intersection.isPointContained(a1, b1, b2) ||\n Intersection.isPointContained(a2, b1, b2) ||\n Intersection.isPointContained(b1, a1, a2) ||\n Intersection.isPointContained(b2, a1, a2);\n return new Intersection(segmentsCoincide ? 'Coincident' : undefined);\n } else {\n return new Intersection('Parallel');\n }\n }\n }\n\n /**\n * Checks if a segment intersects a line\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} s1 boundary point of segment\n * @param {Point} s2 other boundary point of segment\n * @param {Point} l1 point on line\n * @param {Point} l2 other point on line\n * @return {Intersection}\n */\n static intersectSegmentLine(\n s1: Point,\n s2: Point,\n l1: Point,\n l2: Point,\n ): Intersection {\n return Intersection.intersectLineLine(s1, s2, l1, l2, false, true);\n }\n\n /**\n * Checks if a segment intersects another\n * @see {@link intersectLineLine} for line intersection\n * @static\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point} b1 boundary point of segment\n * @param {Point} b2 other boundary point of segment\n * @return {Intersection}\n */\n static intersectSegmentSegment(\n a1: Point,\n a2: Point,\n b1: Point,\n b2: Point,\n ): Intersection {\n return Intersection.intersectLineLine(a1, a2, b1, b2, false, false);\n }\n\n /**\n * Checks if line intersects polygon\n *\n * @todo account for stroke\n *\n * @static\n * @see {@link intersectSegmentPolygon} for segment intersection\n * @param {Point} a1 point on line\n * @param {Point} a2 other point on line\n * @param {Point[]} points polygon points\n * @param {boolean} [infinite=true] check segment intersection by passing `false`\n * @return {Intersection}\n */\n static intersectLinePolygon(\n a1: Point,\n a2: Point,\n points: Point[],\n infinite = true,\n ): Intersection {\n const result = new Intersection();\n const length = points.length;\n\n for (let i = 0, b1, b2, inter; i < length; i++) {\n b1 = points[i];\n b2 = points[(i + 1) % length];\n inter = Intersection.intersectLineLine(a1, a2, b1, b2, infinite, false);\n if (inter.status === 'Coincident') {\n return inter;\n }\n result.append(...inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if segment intersects polygon\n * @static\n * @see {@link intersectLinePolygon} for line intersection\n * @param {Point} a1 boundary point of segment\n * @param {Point} a2 other boundary point of segment\n * @param {Point[]} points polygon points\n * @return {Intersection}\n */\n static intersectSegmentPolygon(\n a1: Point,\n a2: Point,\n points: Point[],\n ): Intersection {\n return Intersection.intersectLinePolygon(a1, a2, points, false);\n }\n\n /**\n * Checks if polygon intersects another polygon\n *\n * @todo account for stroke\n *\n * @static\n * @param {Point[]} points1\n * @param {Point[]} points2\n * @return {Intersection}\n */\n static intersectPolygonPolygon(\n points1: Point[],\n points2: Point[],\n ): Intersection {\n const result = new Intersection(),\n length = points1.length;\n const coincidences: Intersection[] = [];\n\n for (let i = 0; i < length; i++) {\n const a1 = points1[i],\n a2 = points1[(i + 1) % length],\n inter = Intersection.intersectSegmentPolygon(a1, a2, points2);\n if (inter.status === 'Coincident') {\n coincidences.push(inter);\n result.append(a1, a2);\n } else {\n result.append(...inter.points);\n }\n }\n\n if (coincidences.length > 0 && coincidences.length === points1.length) {\n return new Intersection('Coincident');\n } else if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n\n return result;\n }\n\n /**\n * Checks if polygon intersects rectangle\n * @static\n * @see {@link intersectPolygonPolygon} for polygon intersection\n * @param {Point[]} points polygon points\n * @param {Point} r1 top left point of rect\n * @param {Point} r2 bottom right point of rect\n * @return {Intersection}\n */\n static intersectPolygonRectangle(\n points: Point[],\n r1: Point,\n r2: Point,\n ): Intersection {\n const min = r1.min(r2),\n max = r1.max(r2),\n topRight = new Point(max.x, min.y),\n bottomLeft = new Point(min.x, max.y);\n\n return Intersection.intersectPolygonPolygon(points, [\n min,\n topRight,\n max,\n bottomLeft,\n ]);\n }\n}\n"],"names":["Intersection","constructor","status","points","includes","point","some","p","eq","append","_len","arguments","length","Array","_key","concat","filter","isPointContained","T","A","B","infinite","undefined","x","y","Math","min","max","AB","createVector","AT","s","divide","abs","isPointInPolygon","other","Point","setX","map","hits","index","inter","intersectSegmentSegment","Number","intersectLineLine","a1","a2","b1","b2","aInfinite","bInfinite","a2xa1x","a2ya1y","b2xb1x","b2yb1y","a1xb1x","a1yb1y","uaT","ubT","uB","ua","ub","segmentsCoincide","intersectSegmentLine","s1","s2","l1","l2","intersectLinePolygon","result","i","intersectSegmentPolygon","intersectPolygonPolygon","points1","points2","coincidences","push","intersectPolygonRectangle","r1","r2","topRight","bottomLeft"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActiveSelectionLayoutManager.min.mjs","sources":["../../../src/LayoutManager/ActiveSelectionLayoutManager.ts"],"sourcesContent":["import { LayoutManager } from './LayoutManager';\nimport type { RegistrationContext, StrictLayoutContext } from './types';\nimport type { Group } from '../shapes/Group';\n\n/**\n * Today the LayoutManager class also takes care of subscribing event handlers\n * to update the group layout when the group is interactive and a transform is applied\n * to a child object.\n * The ActiveSelection is never interactive, but it could contain objects from\n * groups that are.\n * The standard LayoutManager would subscribe the children of the activeSelection to\n * perform layout changes to the active selection itself, what we need instead is that\n * the transformation applied to the active selection will trigger changes to the\n * original group of the children ( the one referenced under the parent property )\n * This subclass of the LayoutManager has a single duty to fill the gap of this difference.`\n */\nexport class ActiveSelectionLayoutManager extends LayoutManager {\n subscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext
|
|
1
|
+
{"version":3,"file":"ActiveSelectionLayoutManager.min.mjs","sources":["../../../src/LayoutManager/ActiveSelectionLayoutManager.ts"],"sourcesContent":["import { LayoutManager } from './LayoutManager';\nimport type { RegistrationContext, StrictLayoutContext } from './types';\nimport type { Group } from '../shapes/Group';\n\n/**\n * Today the LayoutManager class also takes care of subscribing event handlers\n * to update the group layout when the group is interactive and a transform is applied\n * to a child object.\n * The ActiveSelection is never interactive, but it could contain objects from\n * groups that are.\n * The standard LayoutManager would subscribe the children of the activeSelection to\n * perform layout changes to the active selection itself, what we need instead is that\n * the transformation applied to the active selection will trigger changes to the\n * original group of the children ( the one referenced under the parent property )\n * This subclass of the LayoutManager has a single duty to fill the gap of this difference.`\n */\nexport class ActiveSelectionLayoutManager extends LayoutManager {\n subscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>,\n ): void {\n const activeSelection = context.target;\n const parents = context.targets.reduce((parents, target) => {\n target.parent && parents.add(target.parent);\n return parents;\n }, new Set<Group>());\n parents.forEach((parent) => {\n parent.layoutManager.subscribeTargets({\n target: parent,\n targets: [activeSelection],\n });\n });\n }\n\n /**\n * unsubscribe from parent only if all its children were deselected\n */\n unsubscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>,\n ): void {\n const activeSelection = context.target;\n const selectedObjects = activeSelection.getObjects();\n const parents = context.targets.reduce((parents, target) => {\n target.parent && parents.add(target.parent);\n return parents;\n }, new Set<Group>());\n parents.forEach((parent) => {\n !selectedObjects.some((object) => object.parent === parent) &&\n parent.layoutManager.unsubscribeTargets({\n target: parent,\n targets: [activeSelection],\n });\n });\n }\n}\n"],"names":["ActiveSelectionLayoutManager","LayoutManager","subscribeTargets","context","activeSelection","target","targets","reduce","parents","parent","add","Set","forEach","layoutManager","unsubscribeTargets","selectedObjects","getObjects","some","object"],"mappings":"wDAgBO,MAAMA,UAAqCC,EAChDC,gBAAAA,CACEC,GAEA,MAAMC,EAAkBD,EAAQE,OAChBF,EAAQG,QAAQC,QAAO,CAACC,EAASH,KAC/CA,EAAOI,QAAUD,EAAQE,IAAIL,EAAOI,QAC7BD,IACN,IAAIG,KACCC,SAASH,IACfA,EAAOI,cAAcX,iBAAiB,CACpCG,OAAQI,EACRH,QAAS,CAACF,IACV,GAEN,CAKAU,kBAAAA,CACEX,GAEA,MAAMC,EAAkBD,EAAQE,OAC1BU,EAAkBX,EAAgBY,aACxBb,EAAQG,QAAQC,QAAO,CAACC,EAASH,KAC/CA,EAAOI,QAAUD,EAAQE,IAAIL,EAAOI,QAC7BD,IACN,IAAIG,KACCC,SAASH,KACdM,EAAgBE,MAAMC,GAAWA,EAAOT,SAAWA,KAClDA,EAAOI,cAAcC,mBAAmB,CACtCT,OAAQI,EACRH,QAAS,CAACF,IACV,GAER"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActiveSelectionLayoutManager.mjs","sources":["../../../src/LayoutManager/ActiveSelectionLayoutManager.ts"],"sourcesContent":["import { LayoutManager } from './LayoutManager';\nimport type { RegistrationContext, StrictLayoutContext } from './types';\nimport type { Group } from '../shapes/Group';\n\n/**\n * Today the LayoutManager class also takes care of subscribing event handlers\n * to update the group layout when the group is interactive and a transform is applied\n * to a child object.\n * The ActiveSelection is never interactive, but it could contain objects from\n * groups that are.\n * The standard LayoutManager would subscribe the children of the activeSelection to\n * perform layout changes to the active selection itself, what we need instead is that\n * the transformation applied to the active selection will trigger changes to the\n * original group of the children ( the one referenced under the parent property )\n * This subclass of the LayoutManager has a single duty to fill the gap of this difference.`\n */\nexport class ActiveSelectionLayoutManager extends LayoutManager {\n subscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext
|
|
1
|
+
{"version":3,"file":"ActiveSelectionLayoutManager.mjs","sources":["../../../src/LayoutManager/ActiveSelectionLayoutManager.ts"],"sourcesContent":["import { LayoutManager } from './LayoutManager';\nimport type { RegistrationContext, StrictLayoutContext } from './types';\nimport type { Group } from '../shapes/Group';\n\n/**\n * Today the LayoutManager class also takes care of subscribing event handlers\n * to update the group layout when the group is interactive and a transform is applied\n * to a child object.\n * The ActiveSelection is never interactive, but it could contain objects from\n * groups that are.\n * The standard LayoutManager would subscribe the children of the activeSelection to\n * perform layout changes to the active selection itself, what we need instead is that\n * the transformation applied to the active selection will trigger changes to the\n * original group of the children ( the one referenced under the parent property )\n * This subclass of the LayoutManager has a single duty to fill the gap of this difference.`\n */\nexport class ActiveSelectionLayoutManager extends LayoutManager {\n subscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>,\n ): void {\n const activeSelection = context.target;\n const parents = context.targets.reduce((parents, target) => {\n target.parent && parents.add(target.parent);\n return parents;\n }, new Set<Group>());\n parents.forEach((parent) => {\n parent.layoutManager.subscribeTargets({\n target: parent,\n targets: [activeSelection],\n });\n });\n }\n\n /**\n * unsubscribe from parent only if all its children were deselected\n */\n unsubscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>,\n ): void {\n const activeSelection = context.target;\n const selectedObjects = activeSelection.getObjects();\n const parents = context.targets.reduce((parents, target) => {\n target.parent && parents.add(target.parent);\n return parents;\n }, new Set<Group>());\n parents.forEach((parent) => {\n !selectedObjects.some((object) => object.parent === parent) &&\n parent.layoutManager.unsubscribeTargets({\n target: parent,\n targets: [activeSelection],\n });\n });\n }\n}\n"],"names":["ActiveSelectionLayoutManager","LayoutManager","subscribeTargets","context","activeSelection","target","parents","targets","reduce","parent","add","Set","forEach","layoutManager","unsubscribeTargets","selectedObjects","getObjects","some","object"],"mappings":";;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,4BAA4B,SAASC,aAAa,CAAC;EAC9DC,gBAAgBA,CACdC,OAA2D,EACrD;AACN,IAAA,MAAMC,eAAe,GAAGD,OAAO,CAACE,MAAM,CAAA;AACtC,IAAA,MAAMC,OAAO,GAAGH,OAAO,CAACI,OAAO,CAACC,MAAM,CAAC,CAACF,OAAO,EAAED,MAAM,KAAK;MAC1DA,MAAM,CAACI,MAAM,IAAIH,OAAO,CAACI,GAAG,CAACL,MAAM,CAACI,MAAM,CAAC,CAAA;AAC3C,MAAA,OAAOH,OAAO,CAAA;AAChB,KAAC,EAAE,IAAIK,GAAG,EAAS,CAAC,CAAA;AACpBL,IAAAA,OAAO,CAACM,OAAO,CAAEH,MAAM,IAAK;AAC1BA,MAAAA,MAAM,CAACI,aAAa,CAACX,gBAAgB,CAAC;AACpCG,QAAAA,MAAM,EAAEI,MAAM;QACdF,OAAO,EAAE,CAACH,eAAe,CAAA;AAC3B,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA;AACF;AACA;EACEU,kBAAkBA,CAChBX,OAA2D,EACrD;AACN,IAAA,MAAMC,eAAe,GAAGD,OAAO,CAACE,MAAM,CAAA;AACtC,IAAA,MAAMU,eAAe,GAAGX,eAAe,CAACY,UAAU,EAAE,CAAA;AACpD,IAAA,MAAMV,OAAO,GAAGH,OAAO,CAACI,OAAO,CAACC,MAAM,CAAC,CAACF,OAAO,EAAED,MAAM,KAAK;MAC1DA,MAAM,CAACI,MAAM,IAAIH,OAAO,CAACI,GAAG,CAACL,MAAM,CAACI,MAAM,CAAC,CAAA;AAC3C,MAAA,OAAOH,OAAO,CAAA;AAChB,KAAC,EAAE,IAAIK,GAAG,EAAS,CAAC,CAAA;AACpBL,IAAAA,OAAO,CAACM,OAAO,CAAEH,MAAM,IAAK;AAC1B,MAAA,CAACM,eAAe,CAACE,IAAI,CAAEC,MAAM,IAAKA,MAAM,CAACT,MAAM,KAAKA,MAAM,CAAC,IACzDA,MAAM,CAACI,aAAa,CAACC,kBAAkB,CAAC;AACtCT,QAAAA,MAAM,EAAEI,MAAM;QACdF,OAAO,EAAE,CAACH,eAAe,CAAA;AAC3B,OAAC,CAAC,CAAA;AACN,KAAC,CAAC,CAAA;AACJ,GAAA;AACF;;;;"}
|
|
@@ -30,7 +30,7 @@ export declare class LayoutManager {
|
|
|
30
30
|
/**
|
|
31
31
|
* unsubscribe object layout triggers
|
|
32
32
|
*/
|
|
33
|
-
protected unsubscribe(object: FabricObject,
|
|
33
|
+
protected unsubscribe(object: FabricObject, _context?: RegistrationContext & Partial<StrictLayoutContext>): void;
|
|
34
34
|
unsubscribeTargets(context: RegistrationContext & Partial<StrictLayoutContext>): void;
|
|
35
35
|
subscribeTargets(context: RegistrationContext & Partial<StrictLayoutContext>): void;
|
|
36
36
|
protected onBeforeLayout(context: StrictLayoutContext): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutManager.d.ts","sourceRoot":"","sources":["../../../src/LayoutManager/LayoutManager.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAIlE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AASxE,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAMjB,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,qBAAa,aAAa;IACxB,QAAgB,mBAAmB,CAAC,CAAiB;IACrD,UAAkB,cAAc,EAAE,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;IAEpE,QAAQ,EAAE,cAAc,CAAC;gBAEb,QAAQ,GAAE,cAAuC;IAKtD,aAAa,CAAC,OAAO,EAAE,aAAa;IAsB3C;;;;;;;OAOG;IACH,SAAS,CAAC,cAAc,CACtB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAC1D,YAAY,EAAE;IAmCjB;;;;;OAKG;IACH,SAAS,CAAC,SAAS,CACjB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAO7D;;OAEG;IACH,SAAS,CAAC,WAAW,CACnB,MAAM,EAAE,YAAY,EACpB,
|
|
1
|
+
{"version":3,"file":"LayoutManager.d.ts","sourceRoot":"","sources":["../../../src/LayoutManager/LayoutManager.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAIlE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AASxE,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAMjB,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,qBAAa,aAAa;IACxB,QAAgB,mBAAmB,CAAC,CAAiB;IACrD,UAAkB,cAAc,EAAE,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;IAEpE,QAAQ,EAAE,cAAc,CAAC;gBAEb,QAAQ,GAAE,cAAuC;IAKtD,aAAa,CAAC,OAAO,EAAE,aAAa;IAsB3C;;;;;;;OAOG;IACH,SAAS,CAAC,cAAc,CACtB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAC1D,YAAY,EAAE;IAmCjB;;;;;OAKG;IACH,SAAS,CAAC,SAAS,CACjB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAO7D;;OAEG;IACH,SAAS,CAAC,WAAW,CACnB,MAAM,EAAE,YAAY,EACpB,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAM/D,kBAAkB,CAChB,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAK7D,gBAAgB,CACd,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAK7D,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,mBAAmB;IAmCrD,SAAS,CAAC,eAAe,CACvB,OAAO,EAAE,mBAAmB,GAC3B,QAAQ,CAAC,YAAY,CAAC,GAAG,SAAS;IAuCrC,SAAS,CAAC,YAAY,CACpB,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC;IA4BtC,SAAS,CAAC,aAAa,CACrB,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC;IAatC;;;OAGG;IACH,SAAS,CAAC,YAAY,CACpB,OAAO,EAAE,mBAAmB,EAC5B,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,YAAY,CAAC,EAClC,MAAM,EAAE,YAAY;IAWtB,SAAS,CAAC,aAAa,CACrB,OAAO,EAAE,mBAAmB,EAC5B,YAAY,CAAC,EAAE,YAAY;IAqC7B,OAAO;IAMP,QAAQ;;;;IAOR,MAAM;;;;CAGP"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutManager.min.mjs","sources":["../../../src/LayoutManager/LayoutManager.ts"],"sourcesContent":["import { Point } from '../Point';\nimport {\n CENTER,\n CHANGED,\n MODIFIED,\n MODIFY_PATH,\n MODIFY_POLY,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n iMatrix,\n} from '../constants';\nimport type { Group } from '../shapes/Group';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { invertTransform } from '../util/misc/matrix';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { FitContentLayout } from './LayoutStrategies/FitContentLayout';\nimport type { LayoutStrategy } from './LayoutStrategies/LayoutStrategy';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_OBJECT_MODIFIED,\n LAYOUT_TYPE_OBJECT_MODIFYING,\n} from './constants';\nimport type {\n LayoutContext,\n LayoutResult,\n RegistrationContext,\n StrictLayoutContext,\n} from './types';\nimport { classRegistry } from '../ClassRegistry';\nimport type { TModificationEvents } from '../EventTypeDefs';\n\nconst LAYOUT_MANAGER = 'layoutManager';\n\nexport type SerializedLayoutManager = {\n type: string;\n strategy: string;\n};\n\nexport class LayoutManager {\n private declare _prevLayoutStrategy?: LayoutStrategy;\n protected declare _subscriptions: Map<FabricObject, VoidFunction[]>;\n\n strategy: LayoutStrategy;\n\n constructor(strategy: LayoutStrategy = new FitContentLayout()) {\n this.strategy = strategy;\n this._subscriptions = new Map();\n }\n\n public performLayout(context: LayoutContext) {\n const strictContext: StrictLayoutContext = {\n bubbles: true,\n strategy: this.strategy,\n ...context,\n prevStrategy: this._prevLayoutStrategy,\n stopPropagation() {\n this.bubbles = false;\n },\n };\n\n this.onBeforeLayout(strictContext);\n\n const layoutResult = this.getLayoutResult(strictContext);\n if (layoutResult) {\n this.commitLayout(strictContext, layoutResult);\n }\n\n this.onAfterLayout(strictContext, layoutResult);\n this._prevLayoutStrategy = strictContext.strategy;\n }\n\n /**\n * Attach handlers for events that we know will invalidate the layout when\n * performed on child objects ( general transforms ).\n * Returns the disposers for later unsubscribing and cleanup\n * @param {FabricObject} object\n * @param {RegistrationContext & Partial<StrictLayoutContext>} context\n * @returns {VoidFunction[]} disposers remove the handlers\n */\n protected attachHandlers(\n object: FabricObject,\n context: RegistrationContext & Partial<StrictLayoutContext>\n ): VoidFunction[] {\n const { target } = context;\n return (\n [\n MODIFIED,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n CHANGED,\n MODIFY_POLY,\n MODIFY_PATH,\n ] as (TModificationEvents & 'modified')[]\n ).map((key) =>\n object.on(key, (e) =>\n this.performLayout(\n key === MODIFIED\n ? {\n type: LAYOUT_TYPE_OBJECT_MODIFIED,\n trigger: key,\n e,\n target,\n }\n : {\n type: LAYOUT_TYPE_OBJECT_MODIFYING,\n trigger: key,\n e,\n target,\n }\n )\n )\n );\n }\n\n /**\n * Subscribe an object to transform events that will trigger a layout change on the parent\n * This is important only for interactive groups.\n * @param object\n * @param context\n */\n protected subscribe(\n object: FabricObject,\n context: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n this.unsubscribe(object, context);\n const disposers = this.attachHandlers(object, context);\n this._subscriptions.set(object, disposers);\n }\n\n /**\n * unsubscribe object layout triggers\n */\n protected unsubscribe(\n object: FabricObject,\n context?: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n (this._subscriptions.get(object) || []).forEach((d) => d());\n this._subscriptions.delete(object);\n }\n\n unsubscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n context.targets.forEach((object) => this.unsubscribe(object, context));\n }\n\n subscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>\n ) {\n context.targets.forEach((object) => this.subscribe(object, context));\n }\n\n protected onBeforeLayout(context: StrictLayoutContext) {\n const { target, type } = context;\n const { canvas } = target;\n // handle layout triggers subscription\n // @TODO: gate the registration when the group is interactive\n if (type === LAYOUT_TYPE_INITIALIZATION || type === LAYOUT_TYPE_ADDED) {\n this.subscribeTargets(context);\n } else if (type === LAYOUT_TYPE_REMOVED) {\n this.unsubscribeTargets(context);\n }\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:before', {\n context,\n });\n canvas &&\n canvas.fire('object:layout:before', {\n target,\n context,\n });\n\n if (type === LAYOUT_TYPE_IMPERATIVE && context.deep) {\n const { strategy: _, ...tricklingContext } = context;\n // traverse the tree\n target.forEachObject(\n (object) =>\n (object as Group).layoutManager &&\n (object as Group).layoutManager.performLayout({\n ...tricklingContext,\n bubbles: false,\n target: object as Group,\n })\n );\n }\n }\n\n protected getLayoutResult(\n context: StrictLayoutContext\n ): Required<LayoutResult> | undefined {\n const { target, strategy, type } = context;\n\n const result = strategy.calcLayoutResult(context, target.getObjects());\n\n if (!result) {\n return;\n }\n\n const prevCenter =\n type === LAYOUT_TYPE_INITIALIZATION\n ? new Point()\n : target.getRelativeCenterPoint();\n\n const {\n center: nextCenter,\n correction = new Point(),\n relativeCorrection = new Point(),\n } = result;\n const offset = prevCenter\n .subtract(nextCenter)\n .add(correction)\n .transform(\n // in `initialization` we do not account for target's transformation matrix\n type === LAYOUT_TYPE_INITIALIZATION\n ? iMatrix\n : invertTransform(target.calcOwnMatrix()),\n true\n )\n .add(relativeCorrection);\n\n return {\n result,\n prevCenter,\n nextCenter,\n offset,\n };\n }\n\n protected commitLayout(\n context: StrictLayoutContext,\n layoutResult: Required<LayoutResult>\n ) {\n const { target } = context;\n const {\n result: { size },\n nextCenter,\n } = layoutResult;\n // set dimensions\n target.set({ width: size.x, height: size.y });\n // layout descendants\n this.layoutObjects(context, layoutResult);\n // set position\n // in `initialization` we do not account for target's transformation matrix\n if (context.type === LAYOUT_TYPE_INITIALIZATION) {\n // TODO: what about strokeWidth?\n target.set({\n left:\n context.x ?? nextCenter.x + size.x * resolveOrigin(target.originX),\n top: context.y ?? nextCenter.y + size.y * resolveOrigin(target.originY),\n });\n } else {\n target.setPositionByOrigin(nextCenter, CENTER, CENTER);\n // invalidate\n target.setCoords();\n target.set('dirty', true);\n }\n }\n\n protected layoutObjects(\n context: StrictLayoutContext,\n layoutResult: Required<LayoutResult>\n ) {\n const { target } = context;\n // adjust objects to account for new center\n target.forEachObject((object) => {\n object.group === target &&\n this.layoutObject(context, layoutResult, object);\n });\n // adjust clip path to account for new center\n context.strategy.shouldLayoutClipPath(context) &&\n this.layoutObject(context, layoutResult, target.clipPath as FabricObject);\n }\n\n /**\n * @param {FabricObject} object\n * @param {Point} offset\n */\n protected layoutObject(\n context: StrictLayoutContext,\n { offset }: Required<LayoutResult>,\n object: FabricObject\n ) {\n // TODO: this is here for cache invalidation.\n // verify if this is necessary since we have explicit\n // cache invalidation at the end of commitLayout\n object.set({\n left: object.left + offset.x,\n top: object.top + offset.y,\n });\n }\n\n protected onAfterLayout(\n context: StrictLayoutContext,\n layoutResult?: LayoutResult\n ) {\n const {\n target,\n strategy,\n bubbles,\n prevStrategy: _,\n ...bubblingContext\n } = context;\n const { canvas } = target;\n\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:after', {\n context,\n result: layoutResult,\n });\n canvas &&\n canvas.fire('object:layout:after', {\n context,\n result: layoutResult,\n target,\n });\n\n // bubble\n const parent = target.parent;\n if (bubbles && parent?.layoutManager) {\n // add target to context#path\n (bubblingContext.path || (bubblingContext.path = [])).push(target);\n // all parents should invalidate their layout\n parent.layoutManager.performLayout({\n ...bubblingContext,\n target: parent,\n });\n }\n target.set('dirty', true);\n }\n\n dispose() {\n const { _subscriptions } = this;\n _subscriptions.forEach((disposers) => disposers.forEach((d) => d()));\n _subscriptions.clear();\n }\n\n toObject() {\n return {\n type: LAYOUT_MANAGER,\n strategy: (this.strategy.constructor as typeof LayoutStrategy).type,\n };\n }\n\n toJSON() {\n return this.toObject();\n }\n}\n\nclassRegistry.setClass(LayoutManager, LAYOUT_MANAGER);\n"],"names":["LAYOUT_MANAGER","LayoutManager","constructor","strategy","arguments","length","undefined","FitContentLayout","_defineProperty","this","_subscriptions","Map","performLayout","context","strictContext","_objectSpread","bubbles","prevStrategy","_prevLayoutStrategy","stopPropagation","onBeforeLayout","layoutResult","getLayoutResult","commitLayout","onAfterLayout","attachHandlers","object","target","MODIFIED","MOVING","RESIZING","ROTATING","SCALING","SKEWING","CHANGED","MODIFY_POLY","MODIFY_PATH","map","key","on","e","type","LAYOUT_TYPE_OBJECT_MODIFIED","trigger","LAYOUT_TYPE_OBJECT_MODIFYING","subscribe","unsubscribe","disposers","set","get","forEach","d","delete","unsubscribeTargets","targets","subscribeTargets","canvas","LAYOUT_TYPE_INITIALIZATION","LAYOUT_TYPE_ADDED","LAYOUT_TYPE_REMOVED","fire","LAYOUT_TYPE_IMPERATIVE","deep","tricklingContext","_objectWithoutProperties","_excluded","forEachObject","layoutManager","result","calcLayoutResult","getObjects","prevCenter","Point","getRelativeCenterPoint","center","nextCenter","correction","relativeCorrection","offset","subtract","add","transform","iMatrix","invertTransform","calcOwnMatrix","size","_context$x","_context$y","width","x","height","y","layoutObjects","left","resolveOrigin","originX","top","originY","setPositionByOrigin","CENTER","setCoords","group","layoutObject","shouldLayoutClipPath","clipPath","_ref","_","bubblingContext","_excluded2","parent","path","push","dispose","clear","toObject","toJSON","classRegistry","setClass"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LayoutManager.min.mjs","sources":["../../../src/LayoutManager/LayoutManager.ts"],"sourcesContent":["import { Point } from '../Point';\nimport {\n CENTER,\n CHANGED,\n MODIFIED,\n MODIFY_PATH,\n MODIFY_POLY,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n iMatrix,\n} from '../constants';\nimport type { Group } from '../shapes/Group';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { invertTransform } from '../util/misc/matrix';\nimport { resolveOrigin } from '../util/misc/resolveOrigin';\nimport { FitContentLayout } from './LayoutStrategies/FitContentLayout';\nimport type { LayoutStrategy } from './LayoutStrategies/LayoutStrategy';\nimport {\n LAYOUT_TYPE_INITIALIZATION,\n LAYOUT_TYPE_ADDED,\n LAYOUT_TYPE_REMOVED,\n LAYOUT_TYPE_IMPERATIVE,\n LAYOUT_TYPE_OBJECT_MODIFIED,\n LAYOUT_TYPE_OBJECT_MODIFYING,\n} from './constants';\nimport type {\n LayoutContext,\n LayoutResult,\n RegistrationContext,\n StrictLayoutContext,\n} from './types';\nimport { classRegistry } from '../ClassRegistry';\nimport type { TModificationEvents } from '../EventTypeDefs';\n\nconst LAYOUT_MANAGER = 'layoutManager';\n\nexport type SerializedLayoutManager = {\n type: string;\n strategy: string;\n};\n\nexport class LayoutManager {\n private declare _prevLayoutStrategy?: LayoutStrategy;\n protected declare _subscriptions: Map<FabricObject, VoidFunction[]>;\n\n strategy: LayoutStrategy;\n\n constructor(strategy: LayoutStrategy = new FitContentLayout()) {\n this.strategy = strategy;\n this._subscriptions = new Map();\n }\n\n public performLayout(context: LayoutContext) {\n const strictContext: StrictLayoutContext = {\n bubbles: true,\n strategy: this.strategy,\n ...context,\n prevStrategy: this._prevLayoutStrategy,\n stopPropagation() {\n this.bubbles = false;\n },\n };\n\n this.onBeforeLayout(strictContext);\n\n const layoutResult = this.getLayoutResult(strictContext);\n if (layoutResult) {\n this.commitLayout(strictContext, layoutResult);\n }\n\n this.onAfterLayout(strictContext, layoutResult);\n this._prevLayoutStrategy = strictContext.strategy;\n }\n\n /**\n * Attach handlers for events that we know will invalidate the layout when\n * performed on child objects ( general transforms ).\n * Returns the disposers for later unsubscribing and cleanup\n * @param {FabricObject} object\n * @param {RegistrationContext & Partial<StrictLayoutContext>} context\n * @returns {VoidFunction[]} disposers remove the handlers\n */\n protected attachHandlers(\n object: FabricObject,\n context: RegistrationContext & Partial<StrictLayoutContext>,\n ): VoidFunction[] {\n const { target } = context;\n return (\n [\n MODIFIED,\n MOVING,\n RESIZING,\n ROTATING,\n SCALING,\n SKEWING,\n CHANGED,\n MODIFY_POLY,\n MODIFY_PATH,\n ] as (TModificationEvents & 'modified')[]\n ).map((key) =>\n object.on(key, (e) =>\n this.performLayout(\n key === MODIFIED\n ? {\n type: LAYOUT_TYPE_OBJECT_MODIFIED,\n trigger: key,\n e,\n target,\n }\n : {\n type: LAYOUT_TYPE_OBJECT_MODIFYING,\n trigger: key,\n e,\n target,\n },\n ),\n ),\n );\n }\n\n /**\n * Subscribe an object to transform events that will trigger a layout change on the parent\n * This is important only for interactive groups.\n * @param object\n * @param context\n */\n protected subscribe(\n object: FabricObject,\n context: RegistrationContext & Partial<StrictLayoutContext>,\n ) {\n this.unsubscribe(object, context);\n const disposers = this.attachHandlers(object, context);\n this._subscriptions.set(object, disposers);\n }\n\n /**\n * unsubscribe object layout triggers\n */\n protected unsubscribe(\n object: FabricObject,\n _context?: RegistrationContext & Partial<StrictLayoutContext>,\n ) {\n (this._subscriptions.get(object) || []).forEach((d) => d());\n this._subscriptions.delete(object);\n }\n\n unsubscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>,\n ) {\n context.targets.forEach((object) => this.unsubscribe(object, context));\n }\n\n subscribeTargets(\n context: RegistrationContext & Partial<StrictLayoutContext>,\n ) {\n context.targets.forEach((object) => this.subscribe(object, context));\n }\n\n protected onBeforeLayout(context: StrictLayoutContext) {\n const { target, type } = context;\n const { canvas } = target;\n // handle layout triggers subscription\n // @TODO: gate the registration when the group is interactive\n if (type === LAYOUT_TYPE_INITIALIZATION || type === LAYOUT_TYPE_ADDED) {\n this.subscribeTargets(context);\n } else if (type === LAYOUT_TYPE_REMOVED) {\n this.unsubscribeTargets(context);\n }\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:before', {\n context,\n });\n canvas &&\n canvas.fire('object:layout:before', {\n target,\n context,\n });\n\n if (type === LAYOUT_TYPE_IMPERATIVE && context.deep) {\n const { strategy: _, ...tricklingContext } = context;\n // traverse the tree\n target.forEachObject(\n (object) =>\n (object as Group).layoutManager &&\n (object as Group).layoutManager.performLayout({\n ...tricklingContext,\n bubbles: false,\n target: object as Group,\n }),\n );\n }\n }\n\n protected getLayoutResult(\n context: StrictLayoutContext,\n ): Required<LayoutResult> | undefined {\n const { target, strategy, type } = context;\n\n const result = strategy.calcLayoutResult(context, target.getObjects());\n\n if (!result) {\n return;\n }\n\n const prevCenter =\n type === LAYOUT_TYPE_INITIALIZATION\n ? new Point()\n : target.getRelativeCenterPoint();\n\n const {\n center: nextCenter,\n correction = new Point(),\n relativeCorrection = new Point(),\n } = result;\n const offset = prevCenter\n .subtract(nextCenter)\n .add(correction)\n .transform(\n // in `initialization` we do not account for target's transformation matrix\n type === LAYOUT_TYPE_INITIALIZATION\n ? iMatrix\n : invertTransform(target.calcOwnMatrix()),\n true,\n )\n .add(relativeCorrection);\n\n return {\n result,\n prevCenter,\n nextCenter,\n offset,\n };\n }\n\n protected commitLayout(\n context: StrictLayoutContext,\n layoutResult: Required<LayoutResult>,\n ) {\n const { target } = context;\n const {\n result: { size },\n nextCenter,\n } = layoutResult;\n // set dimensions\n target.set({ width: size.x, height: size.y });\n // layout descendants\n this.layoutObjects(context, layoutResult);\n // set position\n // in `initialization` we do not account for target's transformation matrix\n if (context.type === LAYOUT_TYPE_INITIALIZATION) {\n // TODO: what about strokeWidth?\n target.set({\n left:\n context.x ?? nextCenter.x + size.x * resolveOrigin(target.originX),\n top: context.y ?? nextCenter.y + size.y * resolveOrigin(target.originY),\n });\n } else {\n target.setPositionByOrigin(nextCenter, CENTER, CENTER);\n // invalidate\n target.setCoords();\n target.set('dirty', true);\n }\n }\n\n protected layoutObjects(\n context: StrictLayoutContext,\n layoutResult: Required<LayoutResult>,\n ) {\n const { target } = context;\n // adjust objects to account for new center\n target.forEachObject((object) => {\n object.group === target &&\n this.layoutObject(context, layoutResult, object);\n });\n // adjust clip path to account for new center\n context.strategy.shouldLayoutClipPath(context) &&\n this.layoutObject(context, layoutResult, target.clipPath as FabricObject);\n }\n\n /**\n * @param {FabricObject} object\n * @param {Point} offset\n */\n protected layoutObject(\n context: StrictLayoutContext,\n { offset }: Required<LayoutResult>,\n object: FabricObject,\n ) {\n // TODO: this is here for cache invalidation.\n // verify if this is necessary since we have explicit\n // cache invalidation at the end of commitLayout\n object.set({\n left: object.left + offset.x,\n top: object.top + offset.y,\n });\n }\n\n protected onAfterLayout(\n context: StrictLayoutContext,\n layoutResult?: LayoutResult,\n ) {\n const {\n target,\n strategy,\n bubbles,\n prevStrategy: _,\n ...bubblingContext\n } = context;\n const { canvas } = target;\n\n // fire layout event (event will fire only for layouts after initialization layout)\n target.fire('layout:after', {\n context,\n result: layoutResult,\n });\n canvas &&\n canvas.fire('object:layout:after', {\n context,\n result: layoutResult,\n target,\n });\n\n // bubble\n const parent = target.parent;\n if (bubbles && parent?.layoutManager) {\n // add target to context#path\n (bubblingContext.path || (bubblingContext.path = [])).push(target);\n // all parents should invalidate their layout\n parent.layoutManager.performLayout({\n ...bubblingContext,\n target: parent,\n });\n }\n target.set('dirty', true);\n }\n\n dispose() {\n const { _subscriptions } = this;\n _subscriptions.forEach((disposers) => disposers.forEach((d) => d()));\n _subscriptions.clear();\n }\n\n toObject() {\n return {\n type: LAYOUT_MANAGER,\n strategy: (this.strategy.constructor as typeof LayoutStrategy).type,\n };\n }\n\n toJSON() {\n return this.toObject();\n }\n}\n\nclassRegistry.setClass(LayoutManager, LAYOUT_MANAGER);\n"],"names":["LAYOUT_MANAGER","LayoutManager","constructor","strategy","arguments","length","undefined","FitContentLayout","_defineProperty","this","_subscriptions","Map","performLayout","context","strictContext","_objectSpread","bubbles","prevStrategy","_prevLayoutStrategy","stopPropagation","onBeforeLayout","layoutResult","getLayoutResult","commitLayout","onAfterLayout","attachHandlers","object","target","MODIFIED","MOVING","RESIZING","ROTATING","SCALING","SKEWING","CHANGED","MODIFY_POLY","MODIFY_PATH","map","key","on","e","type","LAYOUT_TYPE_OBJECT_MODIFIED","trigger","LAYOUT_TYPE_OBJECT_MODIFYING","subscribe","unsubscribe","disposers","set","_context","get","forEach","d","delete","unsubscribeTargets","targets","subscribeTargets","canvas","LAYOUT_TYPE_INITIALIZATION","LAYOUT_TYPE_ADDED","LAYOUT_TYPE_REMOVED","fire","LAYOUT_TYPE_IMPERATIVE","deep","tricklingContext","_objectWithoutProperties","_excluded","forEachObject","layoutManager","result","calcLayoutResult","getObjects","prevCenter","Point","getRelativeCenterPoint","center","nextCenter","correction","relativeCorrection","offset","subtract","add","transform","iMatrix","invertTransform","calcOwnMatrix","size","_context$x","_context$y","width","x","height","y","layoutObjects","left","resolveOrigin","originX","top","originY","setPositionByOrigin","CENTER","setCoords","group","layoutObject","shouldLayoutClipPath","clipPath","_ref","_","bubblingContext","_excluded2","parent","path","push","dispose","clear","toObject","toJSON","classRegistry","setClass"],"mappings":"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"}
|