fabric 6.2.0 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +1 -0
- package/CHANGELOG.md +12 -4
- package/README.md +1 -1
- package/dist/extensions/aligning_guidelines/constant.d.ts +3 -0
- package/dist/extensions/aligning_guidelines/constant.d.ts.map +1 -0
- package/dist/extensions/aligning_guidelines/index.d.ts +5 -0
- package/dist/extensions/aligning_guidelines/index.d.ts.map +1 -0
- package/dist/extensions/aligning_guidelines/typedefs.d.ts +33 -0
- package/dist/extensions/aligning_guidelines/typedefs.d.ts.map +1 -0
- package/dist/extensions/aligning_guidelines/util/basic.d.ts +4 -0
- package/dist/extensions/aligning_guidelines/util/basic.d.ts.map +1 -0
- package/dist/extensions/aligning_guidelines/util/collect-line.d.ts +13 -0
- package/dist/extensions/aligning_guidelines/util/collect-line.d.ts.map +1 -0
- package/dist/extensions/aligning_guidelines/util/collect-point.d.ts +20 -0
- package/dist/extensions/aligning_guidelines/util/collect-point.d.ts.map +1 -0
- package/dist/extensions/aligning_guidelines/util/draw.d.ts +6 -0
- package/dist/extensions/aligning_guidelines/util/draw.d.ts.map +1 -0
- package/dist/extensions/aligning_guidelines/util/get-objects-by-target.d.ts +3 -0
- package/dist/extensions/aligning_guidelines/util/get-objects-by-target.d.ts.map +1 -0
- package/dist/extensions/index.d.ts +2 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/index.js +140 -108
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/index.min.mjs +1 -1
- package/dist/index.min.mjs.map +1 -1
- package/dist/index.mjs +140 -108
- package/dist/index.mjs.map +1 -1
- package/dist/index.node.cjs +140 -108
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +140 -108
- package/dist/index.node.mjs.map +1 -1
- package/dist/package.json.min.mjs +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/ClassRegistry.min.mjs.map +1 -1
- package/dist/src/ClassRegistry.mjs.map +1 -1
- package/dist/src/Collection.min.mjs.map +1 -1
- package/dist/src/Collection.mjs.map +1 -1
- package/dist/src/Intersection.min.mjs.map +1 -1
- package/dist/src/Intersection.mjs.map +1 -1
- package/dist/src/LayoutManager/ActiveSelectionLayoutManager.min.mjs.map +1 -1
- package/dist/src/LayoutManager/ActiveSelectionLayoutManager.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutManager.d.ts +1 -1
- package/dist/src/LayoutManager/LayoutManager.d.ts.map +1 -1
- package/dist/src/LayoutManager/LayoutManager.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutManager.mjs +1 -1
- package/dist/src/LayoutManager/LayoutManager.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/utils.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/utils.mjs.map +1 -1
- package/dist/src/LayoutManager/types.d.ts.map +1 -1
- package/dist/src/Observable.min.mjs.map +1 -1
- package/dist/src/Observable.mjs.map +1 -1
- package/dist/src/Pattern/Pattern.d.ts +2 -2
- package/dist/src/Pattern/Pattern.d.ts.map +1 -1
- package/dist/src/Pattern/Pattern.min.mjs +1 -1
- package/dist/src/Pattern/Pattern.min.mjs.map +1 -1
- package/dist/src/Pattern/Pattern.mjs +14 -12
- package/dist/src/Pattern/Pattern.mjs.map +1 -1
- package/dist/src/Point.min.mjs.map +1 -1
- package/dist/src/Point.mjs.map +1 -1
- package/dist/src/Shadow.min.mjs.map +1 -1
- package/dist/src/Shadow.mjs.map +1 -1
- package/dist/src/brushes/CircleBrush.min.mjs.map +1 -1
- package/dist/src/brushes/CircleBrush.mjs.map +1 -1
- package/dist/src/brushes/PatternBrush.min.mjs.map +1 -1
- package/dist/src/brushes/PatternBrush.mjs.map +1 -1
- package/dist/src/brushes/PencilBrush.min.mjs.map +1 -1
- package/dist/src/brushes/PencilBrush.mjs.map +1 -1
- package/dist/src/brushes/SprayBrush.min.mjs.map +1 -1
- package/dist/src/brushes/SprayBrush.mjs.map +1 -1
- package/dist/src/canvas/Canvas.d.ts +1 -1
- package/dist/src/canvas/Canvas.d.ts.map +1 -1
- package/dist/src/canvas/Canvas.min.mjs.map +1 -1
- package/dist/src/canvas/Canvas.mjs +2 -1
- package/dist/src/canvas/Canvas.mjs.map +1 -1
- package/dist/src/canvas/DOMManagers/CanvasDOMManager.min.mjs.map +1 -1
- package/dist/src/canvas/DOMManagers/CanvasDOMManager.mjs.map +1 -1
- package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.min.mjs.map +1 -1
- package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.mjs.map +1 -1
- package/dist/src/canvas/DOMManagers/util.min.mjs.map +1 -1
- package/dist/src/canvas/DOMManagers/util.mjs.map +1 -1
- package/dist/src/canvas/SelectableCanvas.min.mjs.map +1 -1
- package/dist/src/canvas/SelectableCanvas.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvas.d.ts +1 -1
- package/dist/src/canvas/StaticCanvas.d.ts.map +1 -1
- package/dist/src/canvas/StaticCanvas.min.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvas.mjs +1 -1
- package/dist/src/canvas/StaticCanvas.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvasOptions.d.ts.map +1 -1
- package/dist/src/canvas/StaticCanvasOptions.min.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvasOptions.mjs.map +1 -1
- package/dist/src/canvas/TextEditingManager.min.mjs.map +1 -1
- package/dist/src/canvas/TextEditingManager.mjs.map +1 -1
- package/dist/src/color/Color.d.ts.map +1 -1
- package/dist/src/color/Color.min.mjs.map +1 -1
- package/dist/src/color/Color.mjs +1 -0
- package/dist/src/color/Color.mjs.map +1 -1
- package/dist/src/color/util.min.mjs.map +1 -1
- package/dist/src/color/util.mjs.map +1 -1
- package/dist/src/config.min.mjs.map +1 -1
- package/dist/src/config.mjs.map +1 -1
- package/dist/src/controls/Control.min.mjs.map +1 -1
- package/dist/src/controls/Control.mjs.map +1 -1
- package/dist/src/controls/changeWidth.min.mjs.map +1 -1
- package/dist/src/controls/changeWidth.mjs.map +1 -1
- package/dist/src/controls/controlRendering.min.mjs.map +1 -1
- package/dist/src/controls/controlRendering.mjs.map +1 -1
- package/dist/src/controls/drag.min.mjs.map +1 -1
- package/dist/src/controls/drag.mjs.map +1 -1
- package/dist/src/controls/fireEvent.min.mjs.map +1 -1
- package/dist/src/controls/fireEvent.mjs.map +1 -1
- package/dist/src/controls/pathControl.min.mjs.map +1 -1
- package/dist/src/controls/pathControl.mjs.map +1 -1
- package/dist/src/controls/polyControl.min.mjs.map +1 -1
- package/dist/src/controls/polyControl.mjs.map +1 -1
- package/dist/src/controls/rotate.min.mjs.map +1 -1
- package/dist/src/controls/rotate.mjs.map +1 -1
- package/dist/src/controls/scale.min.mjs.map +1 -1
- package/dist/src/controls/scale.mjs.map +1 -1
- package/dist/src/controls/scaleSkew.min.mjs.map +1 -1
- package/dist/src/controls/scaleSkew.mjs.map +1 -1
- package/dist/src/controls/skew.min.mjs.map +1 -1
- package/dist/src/controls/skew.mjs.map +1 -1
- package/dist/src/controls/util.min.mjs.map +1 -1
- package/dist/src/controls/util.mjs.map +1 -1
- package/dist/src/controls/wrapWithFireEvent.min.mjs.map +1 -1
- package/dist/src/controls/wrapWithFireEvent.mjs.map +1 -1
- package/dist/src/controls/wrapWithFixedAnchor.min.mjs.map +1 -1
- package/dist/src/controls/wrapWithFixedAnchor.mjs.map +1 -1
- package/dist/src/filters/BaseFilter.d.ts +5 -5
- package/dist/src/filters/BaseFilter.d.ts.map +1 -1
- package/dist/src/filters/BaseFilter.min.mjs.map +1 -1
- package/dist/src/filters/BaseFilter.mjs +5 -5
- package/dist/src/filters/BaseFilter.mjs.map +1 -1
- package/dist/src/filters/BlendColor.min.mjs.map +1 -1
- package/dist/src/filters/BlendColor.mjs.map +1 -1
- package/dist/src/filters/BlendImage.min.mjs.map +1 -1
- package/dist/src/filters/BlendImage.mjs.map +1 -1
- package/dist/src/filters/Blur.min.mjs.map +1 -1
- package/dist/src/filters/Blur.mjs.map +1 -1
- package/dist/src/filters/Brightness.min.mjs.map +1 -1
- package/dist/src/filters/Brightness.mjs.map +1 -1
- package/dist/src/filters/Canvas2dFilterBackend.min.mjs.map +1 -1
- package/dist/src/filters/Canvas2dFilterBackend.mjs.map +1 -1
- package/dist/src/filters/ColorMatrix.min.mjs.map +1 -1
- package/dist/src/filters/ColorMatrix.mjs.map +1 -1
- package/dist/src/filters/ColorMatrixFilters.min.mjs.map +1 -1
- package/dist/src/filters/ColorMatrixFilters.mjs.map +1 -1
- package/dist/src/filters/Composed.min.mjs.map +1 -1
- package/dist/src/filters/Composed.mjs.map +1 -1
- package/dist/src/filters/Contrast.min.mjs.map +1 -1
- package/dist/src/filters/Contrast.mjs.map +1 -1
- package/dist/src/filters/Convolute.min.mjs.map +1 -1
- package/dist/src/filters/Convolute.mjs.map +1 -1
- package/dist/src/filters/GLProbes/WebGLProbe.min.mjs.map +1 -1
- package/dist/src/filters/GLProbes/WebGLProbe.mjs.map +1 -1
- package/dist/src/filters/Gamma.min.mjs.map +1 -1
- package/dist/src/filters/Gamma.mjs.map +1 -1
- package/dist/src/filters/Grayscale.min.mjs.map +1 -1
- package/dist/src/filters/Grayscale.mjs.map +1 -1
- package/dist/src/filters/Invert.min.mjs.map +1 -1
- package/dist/src/filters/Invert.mjs.map +1 -1
- package/dist/src/filters/Noise.min.mjs.map +1 -1
- package/dist/src/filters/Noise.mjs.map +1 -1
- package/dist/src/filters/Pixelate.min.mjs.map +1 -1
- package/dist/src/filters/Pixelate.mjs.map +1 -1
- package/dist/src/filters/RemoveColor.min.mjs.map +1 -1
- package/dist/src/filters/RemoveColor.mjs.map +1 -1
- package/dist/src/filters/Resize.min.mjs.map +1 -1
- package/dist/src/filters/Resize.mjs.map +1 -1
- package/dist/src/filters/Saturation.min.mjs.map +1 -1
- package/dist/src/filters/Saturation.mjs.map +1 -1
- package/dist/src/filters/Vibrance.min.mjs.map +1 -1
- package/dist/src/filters/Vibrance.mjs.map +1 -1
- package/dist/src/filters/WebGLFilterBackend.min.mjs.map +1 -1
- package/dist/src/filters/WebGLFilterBackend.mjs.map +1 -1
- package/dist/src/filters/typedefs.d.ts +0 -1
- package/dist/src/filters/typedefs.d.ts.map +1 -1
- package/dist/src/filters/utils.min.mjs.map +1 -1
- package/dist/src/filters/utils.mjs.map +1 -1
- package/dist/src/gradient/Gradient.d.ts +7 -3
- package/dist/src/gradient/Gradient.d.ts.map +1 -1
- package/dist/src/gradient/Gradient.min.mjs +1 -1
- package/dist/src/gradient/Gradient.min.mjs.map +1 -1
- package/dist/src/gradient/Gradient.mjs +36 -24
- package/dist/src/gradient/Gradient.mjs.map +1 -1
- package/dist/src/gradient/parser/parseColorStops.min.mjs.map +1 -1
- package/dist/src/gradient/parser/parseColorStops.mjs.map +1 -1
- package/dist/src/gradient/parser/parseCoords.d.ts.map +1 -1
- package/dist/src/gradient/parser/parseCoords.min.mjs.map +1 -1
- package/dist/src/gradient/parser/parseCoords.mjs.map +1 -1
- package/dist/src/parser/applyViewboxTransform.min.mjs.map +1 -1
- package/dist/src/parser/applyViewboxTransform.mjs.map +1 -1
- package/dist/src/parser/constants.min.mjs.map +1 -1
- package/dist/src/parser/constants.mjs.map +1 -1
- package/dist/src/parser/elements_parser.min.mjs.map +1 -1
- package/dist/src/parser/elements_parser.mjs.map +1 -1
- package/dist/src/parser/getCSSRules.min.mjs.map +1 -1
- package/dist/src/parser/getCSSRules.mjs.map +1 -1
- package/dist/src/parser/getGlobalStylesForElement.min.mjs.map +1 -1
- package/dist/src/parser/getGlobalStylesForElement.mjs.map +1 -1
- package/dist/src/parser/getGradientDefs.min.mjs.map +1 -1
- package/dist/src/parser/getGradientDefs.mjs.map +1 -1
- package/dist/src/parser/getMultipleNodes.min.mjs.map +1 -1
- package/dist/src/parser/getMultipleNodes.mjs.map +1 -1
- package/dist/src/parser/loadSVGFromString.min.mjs.map +1 -1
- package/dist/src/parser/loadSVGFromString.mjs.map +1 -1
- package/dist/src/parser/loadSVGFromURL.min.mjs.map +1 -1
- package/dist/src/parser/loadSVGFromURL.mjs.map +1 -1
- package/dist/src/parser/normalizeAttr.min.mjs.map +1 -1
- package/dist/src/parser/normalizeAttr.mjs.map +1 -1
- package/dist/src/parser/normalizeValue.min.mjs.map +1 -1
- package/dist/src/parser/normalizeValue.mjs.map +1 -1
- package/dist/src/parser/parseAttributes.min.mjs.map +1 -1
- package/dist/src/parser/parseAttributes.mjs.map +1 -1
- package/dist/src/parser/parseFontDeclaration.min.mjs.map +1 -1
- package/dist/src/parser/parseFontDeclaration.mjs.map +1 -1
- package/dist/src/parser/parseSVGDocument.min.mjs.map +1 -1
- package/dist/src/parser/parseSVGDocument.mjs.map +1 -1
- package/dist/src/parser/parseStyleObject.min.mjs.map +1 -1
- package/dist/src/parser/parseStyleObject.mjs.map +1 -1
- package/dist/src/parser/parseStyleString.min.mjs.map +1 -1
- package/dist/src/parser/parseStyleString.mjs.map +1 -1
- package/dist/src/parser/parseTransformAttribute.min.mjs.map +1 -1
- package/dist/src/parser/parseTransformAttribute.mjs.map +1 -1
- package/dist/src/parser/parseUseDirectives.min.mjs.map +1 -1
- package/dist/src/parser/parseUseDirectives.mjs.map +1 -1
- package/dist/src/parser/percent.min.mjs.map +1 -1
- package/dist/src/parser/percent.mjs.map +1 -1
- package/dist/src/parser/recursivelyParseGradientsXlink.min.mjs.map +1 -1
- package/dist/src/parser/recursivelyParseGradientsXlink.mjs.map +1 -1
- package/dist/src/parser/setStrokeFillOpacity.min.mjs.map +1 -1
- package/dist/src/parser/setStrokeFillOpacity.mjs.map +1 -1
- package/dist/src/shapes/ActiveSelection.min.mjs.map +1 -1
- package/dist/src/shapes/ActiveSelection.mjs.map +1 -1
- package/dist/src/shapes/Circle.min.mjs.map +1 -1
- package/dist/src/shapes/Circle.mjs.map +1 -1
- package/dist/src/shapes/Ellipse.min.mjs.map +1 -1
- package/dist/src/shapes/Ellipse.mjs.map +1 -1
- package/dist/src/shapes/Group.d.ts +2 -2
- package/dist/src/shapes/Group.d.ts.map +1 -1
- package/dist/src/shapes/Group.min.mjs.map +1 -1
- package/dist/src/shapes/Group.mjs.map +1 -1
- package/dist/src/shapes/IText/DraggableTextDelegate.d.ts.map +1 -1
- package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs +1 -1
- package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs.map +1 -1
- package/dist/src/shapes/IText/DraggableTextDelegate.mjs +2 -2
- package/dist/src/shapes/IText/DraggableTextDelegate.mjs.map +1 -1
- package/dist/src/shapes/IText/IText.min.mjs.map +1 -1
- package/dist/src/shapes/IText/IText.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextBehavior.min.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextBehavior.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextClickBehavior.min.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextClickBehavior.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.mjs.map +1 -1
- package/dist/src/shapes/Image.min.mjs.map +1 -1
- package/dist/src/shapes/Image.mjs.map +1 -1
- package/dist/src/shapes/Line.min.mjs.map +1 -1
- package/dist/src/shapes/Line.mjs.map +1 -1
- package/dist/src/shapes/Object/AnimatableObject.d.ts.map +1 -1
- package/dist/src/shapes/Object/AnimatableObject.min.mjs.map +1 -1
- package/dist/src/shapes/Object/AnimatableObject.mjs.map +1 -1
- package/dist/src/shapes/Object/FabricObject.d.ts.map +1 -1
- package/dist/src/shapes/Object/FabricObject.min.mjs.map +1 -1
- package/dist/src/shapes/Object/FabricObject.mjs +2 -1
- package/dist/src/shapes/Object/FabricObject.mjs.map +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs.map +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.d.ts +13 -13
- package/dist/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.min.mjs.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.mjs +13 -13
- package/dist/src/shapes/Object/InteractiveObject.mjs.map +1 -1
- package/dist/src/shapes/Object/Object.d.ts +4 -4
- package/dist/src/shapes/Object/Object.d.ts.map +1 -1
- package/dist/src/shapes/Object/Object.min.mjs +1 -1
- package/dist/src/shapes/Object/Object.min.mjs.map +1 -1
- package/dist/src/shapes/Object/Object.mjs +10 -14
- package/dist/src/shapes/Object/Object.mjs.map +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.d.ts +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.min.mjs.map +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.mjs +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.mjs.map +1 -1
- package/dist/src/shapes/Object/ObjectOrigin.min.mjs.map +1 -1
- package/dist/src/shapes/Object/ObjectOrigin.mjs.map +1 -1
- package/dist/src/shapes/Object/StackedObject.d.ts.map +1 -1
- package/dist/src/shapes/Object/StackedObject.min.mjs.map +1 -1
- package/dist/src/shapes/Object/StackedObject.mjs.map +1 -1
- package/dist/src/shapes/Path.min.mjs.map +1 -1
- package/dist/src/shapes/Path.mjs.map +1 -1
- package/dist/src/shapes/Polyline.d.ts.map +1 -1
- package/dist/src/shapes/Polyline.min.mjs +1 -1
- package/dist/src/shapes/Polyline.min.mjs.map +1 -1
- package/dist/src/shapes/Polyline.mjs +10 -2
- package/dist/src/shapes/Polyline.mjs.map +1 -1
- package/dist/src/shapes/Rect.min.mjs.map +1 -1
- package/dist/src/shapes/Rect.mjs.map +1 -1
- package/dist/src/shapes/Text/StyledText.min.mjs.map +1 -1
- package/dist/src/shapes/Text/StyledText.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.mjs +1 -1
- package/dist/src/shapes/Text/Text.mjs.map +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs.map +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +1 -1
- package/dist/src/shapes/Textbox.min.mjs.map +1 -1
- package/dist/src/shapes/Textbox.mjs.map +1 -1
- package/dist/src/shapes/Triangle.min.mjs.map +1 -1
- package/dist/src/shapes/Triangle.mjs.map +1 -1
- package/dist/src/util/animation/AnimationBase.min.mjs.map +1 -1
- package/dist/src/util/animation/AnimationBase.mjs.map +1 -1
- package/dist/src/util/animation/AnimationRegistry.min.mjs.map +1 -1
- package/dist/src/util/animation/AnimationRegistry.mjs.map +1 -1
- package/dist/src/util/animation/ArrayAnimation.min.mjs.map +1 -1
- package/dist/src/util/animation/ArrayAnimation.mjs.map +1 -1
- package/dist/src/util/animation/ColorAnimation.min.mjs.map +1 -1
- package/dist/src/util/animation/ColorAnimation.mjs.map +1 -1
- package/dist/src/util/animation/ValueAnimation.min.mjs.map +1 -1
- package/dist/src/util/animation/ValueAnimation.mjs.map +1 -1
- package/dist/src/util/animation/animate.d.ts.map +1 -1
- package/dist/src/util/animation/animate.min.mjs.map +1 -1
- package/dist/src/util/animation/animate.mjs.map +1 -1
- package/dist/src/util/animation/easing.min.mjs.map +1 -1
- package/dist/src/util/animation/easing.mjs.map +1 -1
- package/dist/src/util/animation/types.d.ts.map +1 -1
- package/dist/src/util/applyMixins.min.mjs.map +1 -1
- package/dist/src/util/applyMixins.mjs.map +1 -1
- package/dist/src/util/dom_style.min.mjs.map +1 -1
- package/dist/src/util/dom_style.mjs.map +1 -1
- package/dist/src/util/internals/cloneDeep.d.ts +6 -0
- package/dist/src/util/internals/cloneDeep.d.ts.map +1 -1
- package/dist/src/util/internals/cloneStyles.d.ts +3 -0
- package/dist/src/util/internals/cloneStyles.d.ts.map +1 -0
- package/dist/src/util/internals/cloneStyles.min.mjs +2 -0
- package/dist/src/util/internals/cloneStyles.min.mjs.map +1 -0
- package/dist/src/util/internals/cloneStyles.mjs +15 -0
- package/dist/src/util/internals/cloneStyles.mjs.map +1 -0
- package/dist/src/util/internals/findRight.min.mjs.map +1 -1
- package/dist/src/util/internals/findRight.mjs.map +1 -1
- package/dist/src/util/misc/boundingBoxFromPoints.min.mjs.map +1 -1
- package/dist/src/util/misc/boundingBoxFromPoints.mjs.map +1 -1
- package/dist/src/util/misc/dom.min.mjs.map +1 -1
- package/dist/src/util/misc/dom.mjs.map +1 -1
- package/dist/src/util/misc/findScaleTo.min.mjs.map +1 -1
- package/dist/src/util/misc/findScaleTo.mjs.map +1 -1
- package/dist/src/util/misc/groupSVGElements.min.mjs.map +1 -1
- package/dist/src/util/misc/groupSVGElements.mjs.map +1 -1
- package/dist/src/util/misc/isTransparent.min.mjs.map +1 -1
- package/dist/src/util/misc/isTransparent.mjs.map +1 -1
- package/dist/src/util/misc/matrix.min.mjs.map +1 -1
- package/dist/src/util/misc/matrix.mjs.map +1 -1
- package/dist/src/util/misc/objectEnlive.min.mjs.map +1 -1
- package/dist/src/util/misc/objectEnlive.mjs.map +1 -1
- package/dist/src/util/misc/objectTransforms.min.mjs.map +1 -1
- package/dist/src/util/misc/objectTransforms.mjs.map +1 -1
- package/dist/src/util/misc/pick.min.mjs.map +1 -1
- package/dist/src/util/misc/pick.mjs.map +1 -1
- package/dist/src/util/misc/planeChange.min.mjs.map +1 -1
- package/dist/src/util/misc/planeChange.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.min.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.min.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.min.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/index.min.mjs.map +1 -1
- package/dist/src/util/misc/projectStroke/index.mjs.map +1 -1
- package/dist/src/util/misc/resolveOrigin.min.mjs.map +1 -1
- package/dist/src/util/misc/resolveOrigin.mjs.map +1 -1
- package/dist/src/util/misc/rotatePoint.min.mjs.map +1 -1
- package/dist/src/util/misc/rotatePoint.mjs.map +1 -1
- package/dist/src/util/misc/svgParsing.min.mjs.map +1 -1
- package/dist/src/util/misc/svgParsing.mjs.map +1 -1
- package/dist/src/util/misc/textStyles.min.mjs +1 -1
- package/dist/src/util/misc/textStyles.min.mjs.map +1 -1
- package/dist/src/util/misc/textStyles.mjs +3 -3
- package/dist/src/util/misc/textStyles.mjs.map +1 -1
- package/dist/src/util/misc/vectors.min.mjs.map +1 -1
- package/dist/src/util/misc/vectors.mjs.map +1 -1
- package/dist/src/util/path/index.min.mjs.map +1 -1
- package/dist/src/util/path/index.mjs.map +1 -1
- package/dist/src/util/path/typedefs.d.ts.map +1 -1
- package/dist/src/util/transform_matrix_removal.min.mjs.map +1 -1
- package/dist/src/util/transform_matrix_removal.mjs.map +1 -1
- package/dist/src/util/typeAssertions.min.mjs.map +1 -1
- package/dist/src/util/typeAssertions.mjs.map +1 -1
- package/dist-extensions/aligning_guidelines/constant.mjs +11 -0
- package/dist-extensions/aligning_guidelines/constant.mjs.map +1 -0
- package/dist-extensions/aligning_guidelines/index.mjs +130 -0
- package/dist-extensions/aligning_guidelines/index.mjs.map +1 -0
- package/dist-extensions/aligning_guidelines/util/basic.mjs +11 -0
- package/dist-extensions/aligning_guidelines/util/basic.mjs.map +1 -0
- package/dist-extensions/aligning_guidelines/util/collect-line.mjs +193 -0
- package/dist-extensions/aligning_guidelines/util/collect-line.mjs.map +1 -0
- package/dist-extensions/aligning_guidelines/util/collect-point.mjs +102 -0
- package/dist-extensions/aligning_guidelines/util/collect-point.mjs.map +1 -0
- package/dist-extensions/aligning_guidelines/util/draw.mjs +75 -0
- package/dist-extensions/aligning_guidelines/util/draw.mjs.map +1 -0
- package/dist-extensions/aligning_guidelines/util/get-objects-by-target.mjs +42 -0
- package/dist-extensions/aligning_guidelines/util/get-objects-by-target.mjs.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/constant.d.ts +3 -0
- package/dist-extensions/extensions/aligning_guidelines/constant.d.ts.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/index.d.ts +5 -0
- package/dist-extensions/extensions/aligning_guidelines/index.d.ts.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/typedefs.d.ts +33 -0
- package/dist-extensions/extensions/aligning_guidelines/typedefs.d.ts.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/util/basic.d.ts +4 -0
- package/dist-extensions/extensions/aligning_guidelines/util/basic.d.ts.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/util/collect-line.d.ts +13 -0
- package/dist-extensions/extensions/aligning_guidelines/util/collect-line.d.ts.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/util/collect-point.d.ts +20 -0
- package/dist-extensions/extensions/aligning_guidelines/util/collect-point.d.ts.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/util/draw.d.ts +6 -0
- package/dist-extensions/extensions/aligning_guidelines/util/draw.d.ts.map +1 -0
- package/dist-extensions/extensions/aligning_guidelines/util/get-objects-by-target.d.ts +3 -0
- package/dist-extensions/extensions/aligning_guidelines/util/get-objects-by-target.d.ts.map +1 -0
- package/dist-extensions/extensions/index.d.ts +2 -0
- package/dist-extensions/extensions/index.d.ts.map +1 -0
- package/dist-extensions/fabric-extensions.min.js +2 -0
- package/dist-extensions/fabric-extensions.min.js.map +1 -0
- package/dist-extensions/fabric.d.ts +119 -0
- package/dist-extensions/fabric.d.ts.map +1 -0
- package/dist-extensions/index.d.ts +2 -0
- package/dist-extensions/index.d.ts.map +1 -0
- package/dist-extensions/index.mjs +2 -0
- package/dist-extensions/index.mjs.map +1 -0
- package/dist-extensions/src/ClassRegistry.d.ts +14 -0
- package/dist-extensions/src/ClassRegistry.d.ts.map +1 -0
- package/dist-extensions/src/Collection.d.ts +141 -0
- package/dist-extensions/src/Collection.d.ts.map +1 -0
- package/dist-extensions/src/CommonMethods.d.ts +32 -0
- package/dist-extensions/src/CommonMethods.d.ts.map +1 -0
- package/dist-extensions/src/EventTypeDefs.d.ts +286 -0
- package/dist-extensions/src/EventTypeDefs.d.ts.map +1 -0
- package/dist-extensions/src/Intersection.d.ts +120 -0
- package/dist-extensions/src/Intersection.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/ActiveSelectionLayoutManager.d.ts +22 -0
- package/dist-extensions/src/LayoutManager/ActiveSelectionLayoutManager.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/LayoutManager.d.ts +56 -0
- package/dist-extensions/src/LayoutManager/LayoutManager.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts +13 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts +14 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts +14 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts +30 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/utils.d.ts +10 -0
- package/dist-extensions/src/LayoutManager/LayoutStrategies/utils.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/constants.d.ts +7 -0
- package/dist-extensions/src/LayoutManager/constants.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/index.d.ts +7 -0
- package/dist-extensions/src/LayoutManager/index.d.ts.map +1 -0
- package/dist-extensions/src/LayoutManager/types.d.ts +106 -0
- package/dist-extensions/src/LayoutManager/types.d.ts.map +1 -0
- package/dist-extensions/src/Observable.d.ts +68 -0
- package/dist-extensions/src/Observable.d.ts.map +1 -0
- package/dist-extensions/src/Pattern/Pattern.d.ts +99 -0
- package/dist-extensions/src/Pattern/Pattern.d.ts.map +1 -0
- package/dist-extensions/src/Pattern/index.d.ts +3 -0
- package/dist-extensions/src/Pattern/index.d.ts.map +1 -0
- package/dist-extensions/src/Pattern/types.d.ts +12 -0
- package/dist-extensions/src/Pattern/types.d.ts.map +1 -0
- package/dist-extensions/src/Point.d.ts +233 -0
- package/dist-extensions/src/Point.d.ts.map +1 -0
- package/dist-extensions/src/Shadow.d.ts +95 -0
- package/dist-extensions/src/Shadow.d.ts.map +1 -0
- package/dist-extensions/src/brushes/BaseBrush.d.ts +101 -0
- package/dist-extensions/src/brushes/BaseBrush.d.ts.map +1 -0
- package/dist-extensions/src/brushes/CircleBrush.d.ts +44 -0
- package/dist-extensions/src/brushes/CircleBrush.d.ts.map +1 -0
- package/dist-extensions/src/brushes/PatternBrush.d.ts +23 -0
- package/dist-extensions/src/brushes/PatternBrush.d.ts.map +1 -0
- package/dist-extensions/src/brushes/PencilBrush.d.ts +92 -0
- package/dist-extensions/src/brushes/PencilBrush.d.ts.map +1 -0
- package/dist-extensions/src/brushes/SprayBrush.d.ts +74 -0
- package/dist-extensions/src/brushes/SprayBrush.d.ts.map +1 -0
- package/dist-extensions/src/brushes/typedefs.d.ts +18 -0
- package/dist-extensions/src/brushes/typedefs.d.ts.map +1 -0
- package/dist-extensions/src/cache.d.ts +47 -0
- package/dist-extensions/src/cache.d.ts.map +1 -0
- package/dist-extensions/src/canvas/Canvas.d.ts +339 -0
- package/dist-extensions/src/canvas/Canvas.d.ts.map +1 -0
- package/dist-extensions/src/canvas/CanvasOptions.d.ts +229 -0
- package/dist-extensions/src/canvas/CanvasOptions.d.ts.map +1 -0
- package/dist-extensions/src/canvas/DOMManagers/CanvasDOMManager.d.ts +29 -0
- package/dist-extensions/src/canvas/DOMManagers/CanvasDOMManager.d.ts.map +1 -0
- package/dist-extensions/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts +29 -0
- package/dist-extensions/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts.map +1 -0
- package/dist-extensions/src/canvas/DOMManagers/util.d.ts +24 -0
- package/dist-extensions/src/canvas/DOMManagers/util.d.ts.map +1 -0
- package/dist-extensions/src/canvas/SelectableCanvas.d.ts +534 -0
- package/dist-extensions/src/canvas/SelectableCanvas.d.ts.map +1 -0
- package/dist-extensions/src/canvas/StaticCanvas.d.ts +639 -0
- package/dist-extensions/src/canvas/StaticCanvas.d.ts.map +1 -0
- package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts +153 -0
- package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts.map +1 -0
- package/dist-extensions/src/canvas/TextEditingManager.d.ts +21 -0
- package/dist-extensions/src/canvas/TextEditingManager.d.ts.map +1 -0
- package/dist-extensions/src/color/Color.d.ts +162 -0
- package/dist-extensions/src/color/Color.d.ts.map +1 -0
- package/dist-extensions/src/color/color_map.d.ts +155 -0
- package/dist-extensions/src/color/color_map.d.ts.map +1 -0
- package/dist-extensions/src/color/constants.d.ts +111 -0
- package/dist-extensions/src/color/constants.d.ts.map +1 -0
- package/dist-extensions/src/color/typedefs.d.ts +16 -0
- package/dist-extensions/src/color/typedefs.d.ts.map +1 -0
- package/dist-extensions/src/color/util.d.ts +27 -0
- package/dist-extensions/src/color/util.d.ts.map +1 -0
- package/dist-extensions/src/config.d.ts +115 -0
- package/dist-extensions/src/config.d.ts.map +1 -0
- package/dist-extensions/src/constants.d.ts +35 -0
- package/dist-extensions/src/constants.d.ts.map +1 -0
- package/dist-extensions/src/controls/Control.d.ts +229 -0
- package/dist-extensions/src/controls/Control.d.ts.map +1 -0
- package/dist-extensions/src/controls/changeWidth.d.ts +13 -0
- package/dist-extensions/src/controls/changeWidth.d.ts.map +1 -0
- package/dist-extensions/src/controls/commonControls.d.ts +28 -0
- package/dist-extensions/src/controls/commonControls.d.ts.map +1 -0
- package/dist-extensions/src/controls/controlRendering.d.ts +29 -0
- package/dist-extensions/src/controls/controlRendering.d.ts.map +1 -0
- package/dist-extensions/src/controls/drag.d.ts +12 -0
- package/dist-extensions/src/controls/drag.d.ts.map +1 -0
- package/dist-extensions/src/controls/fireEvent.d.ts +3 -0
- package/dist-extensions/src/controls/fireEvent.d.ts.map +1 -0
- package/dist-extensions/src/controls/index.d.ts +14 -0
- package/dist-extensions/src/controls/index.d.ts.map +1 -0
- package/dist-extensions/src/controls/pathControl.d.ts +12 -0
- package/dist-extensions/src/controls/pathControl.d.ts.map +1 -0
- package/dist-extensions/src/controls/polyControl.d.ts +30 -0
- package/dist-extensions/src/controls/polyControl.d.ts.map +1 -0
- package/dist-extensions/src/controls/rotate.d.ts +12 -0
- package/dist-extensions/src/controls/rotate.d.ts.map +1 -0
- package/dist-extensions/src/controls/scale.d.ts +47 -0
- package/dist-extensions/src/controls/scale.d.ts.map +1 -0
- package/dist-extensions/src/controls/scaleSkew.d.ts +39 -0
- package/dist-extensions/src/controls/scaleSkew.d.ts.map +1 -0
- package/dist-extensions/src/controls/skew.d.ts +33 -0
- package/dist-extensions/src/controls/skew.d.ts.map +1 -0
- package/dist-extensions/src/controls/util.d.ts +41 -0
- package/dist-extensions/src/controls/util.d.ts.map +1 -0
- package/dist-extensions/src/controls/wrapWithFireEvent.d.ts +10 -0
- package/dist-extensions/src/controls/wrapWithFireEvent.d.ts.map +1 -0
- package/dist-extensions/src/controls/wrapWithFixedAnchor.d.ts +9 -0
- package/dist-extensions/src/controls/wrapWithFixedAnchor.d.ts.map +1 -0
- package/dist-extensions/src/env/browser.d.ts +3 -0
- package/dist-extensions/src/env/browser.d.ts.map +1 -0
- package/dist-extensions/src/env/index.d.ts +34 -0
- package/dist-extensions/src/env/index.d.ts.map +1 -0
- package/dist-extensions/src/env/types.d.ts +16 -0
- package/dist-extensions/src/env/types.d.ts.map +1 -0
- package/dist-extensions/src/filters/BaseFilter.d.ts +153 -0
- package/dist-extensions/src/filters/BaseFilter.d.ts.map +1 -0
- package/dist-extensions/src/filters/BlendColor.d.ts +68 -0
- package/dist-extensions/src/filters/BlendColor.d.ts.map +1 -0
- package/dist-extensions/src/filters/BlendImage.d.ts +99 -0
- package/dist-extensions/src/filters/BlendImage.d.ts.map +1 -0
- package/dist-extensions/src/filters/Blur.d.ts +50 -0
- package/dist-extensions/src/filters/Blur.d.ts.map +1 -0
- package/dist-extensions/src/filters/Brightness.d.ts +46 -0
- package/dist-extensions/src/filters/Brightness.d.ts.map +1 -0
- package/dist-extensions/src/filters/Canvas2dFilterBackend.d.ts +27 -0
- package/dist-extensions/src/filters/Canvas2dFilterBackend.d.ts.map +1 -0
- package/dist-extensions/src/filters/ColorMatrix.d.ts +66 -0
- package/dist-extensions/src/filters/ColorMatrix.d.ts.map +1 -0
- package/dist-extensions/src/filters/ColorMatrixFilters.d.ts +15 -0
- package/dist-extensions/src/filters/ColorMatrixFilters.d.ts.map +1 -0
- package/dist-extensions/src/filters/Composed.d.ts +47 -0
- package/dist-extensions/src/filters/Composed.d.ts.map +1 -0
- package/dist-extensions/src/filters/Contrast.d.ts +44 -0
- package/dist-extensions/src/filters/Contrast.d.ts.map +1 -0
- package/dist-extensions/src/filters/Convolute.d.ts +81 -0
- package/dist-extensions/src/filters/Convolute.d.ts.map +1 -0
- package/dist-extensions/src/filters/FilterBackend.d.ts +15 -0
- package/dist-extensions/src/filters/FilterBackend.d.ts.map +1 -0
- package/dist-extensions/src/filters/GLProbes/GLProbe.d.ts +7 -0
- package/dist-extensions/src/filters/GLProbes/GLProbe.d.ts.map +1 -0
- package/dist-extensions/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
- package/dist-extensions/src/filters/GLProbes/WebGLProbe.d.ts.map +1 -0
- package/dist-extensions/src/filters/Gamma.d.ts +58 -0
- package/dist-extensions/src/filters/Gamma.d.ts.map +1 -0
- package/dist-extensions/src/filters/Grayscale.d.ts +44 -0
- package/dist-extensions/src/filters/Grayscale.d.ts.map +1 -0
- package/dist-extensions/src/filters/HueRotation.d.ts +31 -0
- package/dist-extensions/src/filters/HueRotation.d.ts.map +1 -0
- package/dist-extensions/src/filters/Invert.d.ts +53 -0
- package/dist-extensions/src/filters/Invert.d.ts.map +1 -0
- package/dist-extensions/src/filters/Noise.d.ts +44 -0
- package/dist-extensions/src/filters/Noise.d.ts.map +1 -0
- package/dist-extensions/src/filters/Pixelate.d.ts +41 -0
- package/dist-extensions/src/filters/Pixelate.d.ts.map +1 -0
- package/dist-extensions/src/filters/RemoveColor.d.ts +53 -0
- package/dist-extensions/src/filters/RemoveColor.d.ts.map +1 -0
- package/dist-extensions/src/filters/Resize.d.ts +137 -0
- package/dist-extensions/src/filters/Resize.d.ts.map +1 -0
- package/dist-extensions/src/filters/Saturation.d.ts +46 -0
- package/dist-extensions/src/filters/Saturation.d.ts.map +1 -0
- package/dist-extensions/src/filters/Vibrance.d.ts +46 -0
- package/dist-extensions/src/filters/Vibrance.d.ts.map +1 -0
- package/dist-extensions/src/filters/WebGLFilterBackend.d.ts +131 -0
- package/dist-extensions/src/filters/WebGLFilterBackend.d.ts.map +1 -0
- package/dist-extensions/src/filters/filters.d.ts +23 -0
- package/dist-extensions/src/filters/filters.d.ts.map +1 -0
- package/dist-extensions/src/filters/index.d.ts +7 -0
- package/dist-extensions/src/filters/index.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/baseFilter.d.ts +4 -0
- package/dist-extensions/src/filters/shaders/baseFilter.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/blendColor.d.ts +13 -0
- package/dist-extensions/src/filters/shaders/blendColor.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/blendImage.d.ts +4 -0
- package/dist-extensions/src/filters/shaders/blendImage.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/blur.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/blur.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/brightness.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/brightness.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/colorMatrix.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/colorMatrix.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/constrast.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/constrast.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/convolute.d.ts +11 -0
- package/dist-extensions/src/filters/shaders/convolute.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/gamma.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/gamma.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/grayscale.d.ts +3 -0
- package/dist-extensions/src/filters/shaders/grayscale.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/invert.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/invert.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/noise.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/noise.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/pixelate.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/pixelate.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/removeColor.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/removeColor.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/saturation.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/saturation.d.ts.map +1 -0
- package/dist-extensions/src/filters/shaders/vibrance.d.ts +2 -0
- package/dist-extensions/src/filters/shaders/vibrance.d.ts.map +1 -0
- package/dist-extensions/src/filters/typedefs.d.ts +70 -0
- package/dist-extensions/src/filters/typedefs.d.ts.map +1 -0
- package/dist-extensions/src/filters/utils.d.ts +10 -0
- package/dist-extensions/src/filters/utils.d.ts.map +1 -0
- package/dist-extensions/src/gradient/Gradient.d.ts +156 -0
- package/dist-extensions/src/gradient/Gradient.d.ts.map +1 -0
- package/dist-extensions/src/gradient/constants.d.ts +15 -0
- package/dist-extensions/src/gradient/constants.d.ts.map +1 -0
- package/dist-extensions/src/gradient/index.d.ts +3 -0
- package/dist-extensions/src/gradient/index.d.ts.map +1 -0
- package/dist-extensions/src/gradient/parser/misc.d.ts +4 -0
- package/dist-extensions/src/gradient/parser/misc.d.ts.map +1 -0
- package/dist-extensions/src/gradient/parser/parseColorStops.d.ts +3 -0
- package/dist-extensions/src/gradient/parser/parseColorStops.d.ts.map +1 -0
- package/dist-extensions/src/gradient/parser/parseCoords.d.ts +17 -0
- package/dist-extensions/src/gradient/parser/parseCoords.d.ts.map +1 -0
- package/dist-extensions/src/gradient/typedefs.d.ts +93 -0
- package/dist-extensions/src/gradient/typedefs.d.ts.map +1 -0
- package/dist-extensions/src/parser/applyViewboxTransform.d.ts +13 -0
- package/dist-extensions/src/parser/applyViewboxTransform.d.ts.map +1 -0
- package/dist-extensions/src/parser/attributes.d.ts +6 -0
- package/dist-extensions/src/parser/attributes.d.ts.map +1 -0
- package/dist-extensions/src/parser/constants.d.ts +41 -0
- package/dist-extensions/src/parser/constants.d.ts.map +1 -0
- package/dist-extensions/src/parser/doesSomeParentMatch.d.ts +2 -0
- package/dist-extensions/src/parser/doesSomeParentMatch.d.ts.map +1 -0
- package/dist-extensions/src/parser/elementMatchesRule.d.ts +5 -0
- package/dist-extensions/src/parser/elementMatchesRule.d.ts.map +1 -0
- package/dist-extensions/src/parser/elements_parser.d.ts +33 -0
- package/dist-extensions/src/parser/elements_parser.d.ts.map +1 -0
- package/dist-extensions/src/parser/getCSSRules.d.ts +8 -0
- package/dist-extensions/src/parser/getCSSRules.d.ts.map +1 -0
- package/dist-extensions/src/parser/getGlobalStylesForElement.d.ts +6 -0
- package/dist-extensions/src/parser/getGlobalStylesForElement.d.ts.map +1 -0
- package/dist-extensions/src/parser/getGradientDefs.d.ts +7 -0
- package/dist-extensions/src/parser/getGradientDefs.d.ts.map +1 -0
- package/dist-extensions/src/parser/getMultipleNodes.d.ts +2 -0
- package/dist-extensions/src/parser/getMultipleNodes.d.ts.map +1 -0
- package/dist-extensions/src/parser/getSvgRegex.d.ts +2 -0
- package/dist-extensions/src/parser/getSvgRegex.d.ts.map +1 -0
- package/dist-extensions/src/parser/getTagName.d.ts +2 -0
- package/dist-extensions/src/parser/getTagName.d.ts.map +1 -0
- package/dist-extensions/src/parser/hasInvalidAncestor.d.ts +2 -0
- package/dist-extensions/src/parser/hasInvalidAncestor.d.ts.map +1 -0
- package/dist-extensions/src/parser/loadSVGFromString.d.ts +18 -0
- package/dist-extensions/src/parser/loadSVGFromString.d.ts.map +1 -0
- package/dist-extensions/src/parser/loadSVGFromURL.d.ts +19 -0
- package/dist-extensions/src/parser/loadSVGFromURL.d.ts.map +1 -0
- package/dist-extensions/src/parser/normalizeAttr.d.ts +3 -0
- package/dist-extensions/src/parser/normalizeAttr.d.ts.map +1 -0
- package/dist-extensions/src/parser/normalizeValue.d.ts +2 -0
- package/dist-extensions/src/parser/normalizeValue.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseAttributes.d.ts +10 -0
- package/dist-extensions/src/parser/parseAttributes.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseFontDeclaration.d.ts +10 -0
- package/dist-extensions/src/parser/parseFontDeclaration.d.ts.map +1 -0
- package/dist-extensions/src/parser/parsePointsAttribute.d.ts +10 -0
- package/dist-extensions/src/parser/parsePointsAttribute.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseSVGDocument.d.ts +22 -0
- package/dist-extensions/src/parser/parseSVGDocument.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseStyleAttribute.d.ts +9 -0
- package/dist-extensions/src/parser/parseStyleAttribute.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseStyleObject.d.ts +8 -0
- package/dist-extensions/src/parser/parseStyleObject.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseStyleString.d.ts +8 -0
- package/dist-extensions/src/parser/parseStyleString.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseTransformAttribute.d.ts +11 -0
- package/dist-extensions/src/parser/parseTransformAttribute.d.ts.map +1 -0
- package/dist-extensions/src/parser/parseUseDirectives.d.ts +2 -0
- package/dist-extensions/src/parser/parseUseDirectives.d.ts.map +1 -0
- package/dist-extensions/src/parser/percent.d.ts +9 -0
- package/dist-extensions/src/parser/percent.d.ts.map +1 -0
- package/dist-extensions/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
- package/dist-extensions/src/parser/recursivelyParseGradientsXlink.d.ts.map +1 -0
- package/dist-extensions/src/parser/selectorMatches.d.ts +2 -0
- package/dist-extensions/src/parser/selectorMatches.d.ts.map +1 -0
- package/dist-extensions/src/parser/setStrokeFillOpacity.d.ts +6 -0
- package/dist-extensions/src/parser/setStrokeFillOpacity.d.ts.map +1 -0
- package/dist-extensions/src/parser/typedefs.d.ts +10 -0
- package/dist-extensions/src/parser/typedefs.d.ts.map +1 -0
- package/dist-extensions/src/shapes/ActiveSelection.d.ts +109 -0
- package/dist-extensions/src/shapes/ActiveSelection.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Circle.d.ts +111 -0
- package/dist-extensions/src/shapes/Circle.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Ellipse.d.ts +88 -0
- package/dist-extensions/src/shapes/Ellipse.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Group.d.ts +303 -0
- package/dist-extensions/src/shapes/Group.d.ts.map +1 -0
- package/dist-extensions/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
- package/dist-extensions/src/shapes/IText/DraggableTextDelegate.d.ts.map +1 -0
- package/dist-extensions/src/shapes/IText/IText.d.ts +314 -0
- package/dist-extensions/src/shapes/IText/IText.d.ts.map +1 -0
- package/dist-extensions/src/shapes/IText/ITextBehavior.d.ts +299 -0
- package/dist-extensions/src/shapes/IText/ITextBehavior.d.ts.map +1 -0
- package/dist-extensions/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
- package/dist-extensions/src/shapes/IText/ITextClickBehavior.d.ts.map +1 -0
- package/dist-extensions/src/shapes/IText/ITextKeyBehavior.d.ts +198 -0
- package/dist-extensions/src/shapes/IText/ITextKeyBehavior.d.ts.map +1 -0
- package/dist-extensions/src/shapes/IText/constants.d.ts +13 -0
- package/dist-extensions/src/shapes/IText/constants.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Image.d.ts +312 -0
- package/dist-extensions/src/shapes/Image.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Line.d.ts +122 -0
- package/dist-extensions/src/shapes/Line.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/AnimatableObject.d.ts +33 -0
- package/dist-extensions/src/shapes/Object/AnimatableObject.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/FabricObject.d.ts +11 -0
- package/dist-extensions/src/shapes/Object/FabricObject.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +72 -0
- package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts +317 -0
- package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/Object.d.ts +614 -0
- package/dist-extensions/src/shapes/Object/Object.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/ObjectGeometry.d.ts +237 -0
- package/dist-extensions/src/shapes/Object/ObjectGeometry.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/ObjectOrigin.d.ts +96 -0
- package/dist-extensions/src/shapes/Object/ObjectOrigin.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/StackedObject.d.ts +60 -0
- package/dist-extensions/src/shapes/Object/StackedObject.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/defaultValues.d.ts +8 -0
- package/dist-extensions/src/shapes/Object/defaultValues.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/BaseProps.d.ts +88 -0
- package/dist-extensions/src/shapes/Object/types/BaseProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/BorderProps.d.ts +37 -0
- package/dist-extensions/src/shapes/Object/types/BorderProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/ControlProps.d.ts +63 -0
- package/dist-extensions/src/shapes/Object/types/ControlProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts +66 -0
- package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
- package/dist-extensions/src/shapes/Object/types/FillStrokeProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
- package/dist-extensions/src/shapes/Object/types/LockInteractionProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts +43 -0
- package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/ObjectTransformProps.d.ts +34 -0
- package/dist-extensions/src/shapes/Object/types/ObjectTransformProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
- package/dist-extensions/src/shapes/Object/types/SerializedObjectProps.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Object/types/index.d.ts +6 -0
- package/dist-extensions/src/shapes/Object/types/index.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Path.d.ts +215 -0
- package/dist-extensions/src/shapes/Path.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Polygon.d.ts +7 -0
- package/dist-extensions/src/shapes/Polygon.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Polyline.d.ts +156 -0
- package/dist-extensions/src/shapes/Polyline.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Rect.d.ts +83 -0
- package/dist-extensions/src/shapes/Rect.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Text/StyledText.d.ts +128 -0
- package/dist-extensions/src/shapes/Text/StyledText.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Text/Text.d.ts +697 -0
- package/dist-extensions/src/shapes/Text/Text.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Text/TextSVGExportMixin.d.ts +47 -0
- package/dist-extensions/src/shapes/Text/TextSVGExportMixin.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Text/constants.d.ts +13 -0
- package/dist-extensions/src/shapes/Text/constants.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Textbox.d.ts +226 -0
- package/dist-extensions/src/shapes/Textbox.d.ts.map +1 -0
- package/dist-extensions/src/shapes/Triangle.d.ts +27 -0
- package/dist-extensions/src/shapes/Triangle.d.ts.map +1 -0
- package/dist-extensions/src/typedefs.d.ts +97 -0
- package/dist-extensions/src/typedefs.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/AnimationBase.d.ts +54 -0
- package/dist-extensions/src/util/animation/AnimationBase.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/AnimationFrameProvider.d.ts +3 -0
- package/dist-extensions/src/util/animation/AnimationFrameProvider.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/AnimationRegistry.d.ts +29 -0
- package/dist-extensions/src/util/animation/AnimationRegistry.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/ArrayAnimation.d.ts +10 -0
- package/dist-extensions/src/util/animation/ArrayAnimation.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/ColorAnimation.d.ts +11 -0
- package/dist-extensions/src/util/animation/ColorAnimation.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/ValueAnimation.d.ts +10 -0
- package/dist-extensions/src/util/animation/ValueAnimation.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/animate.d.ts +37 -0
- package/dist-extensions/src/util/animation/animate.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/easing.d.ts +130 -0
- package/dist-extensions/src/util/animation/easing.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/index.d.ts +3 -0
- package/dist-extensions/src/util/animation/index.d.ts.map +1 -0
- package/dist-extensions/src/util/animation/types.d.ts +87 -0
- package/dist-extensions/src/util/animation/types.d.ts.map +1 -0
- package/dist-extensions/src/util/applyMixins.d.ts +8 -0
- package/dist-extensions/src/util/applyMixins.d.ts.map +1 -0
- package/dist-extensions/src/util/dom_event.d.ts +6 -0
- package/dist-extensions/src/util/dom_event.d.ts.map +1 -0
- package/dist-extensions/src/util/dom_misc.d.ts +12 -0
- package/dist-extensions/src/util/dom_misc.d.ts.map +1 -0
- package/dist-extensions/src/util/dom_style.d.ts +7 -0
- package/dist-extensions/src/util/dom_style.d.ts.map +1 -0
- package/dist-extensions/src/util/index.d.ts +37 -0
- package/dist-extensions/src/util/index.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/cleanupSvgAttribute.d.ts +2 -0
- package/dist-extensions/src/util/internals/cleanupSvgAttribute.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/cloneStyles.d.ts +3 -0
- package/dist-extensions/src/util/internals/cloneStyles.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/console.d.ts +8 -0
- package/dist-extensions/src/util/internals/console.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/dom_request.d.ts +16 -0
- package/dist-extensions/src/util/internals/dom_request.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/findRight.d.ts +2 -0
- package/dist-extensions/src/util/internals/findRight.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/getRandomInt.d.ts +8 -0
- package/dist-extensions/src/util/internals/getRandomInt.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/ifNaN.d.ts +8 -0
- package/dist-extensions/src/util/internals/ifNaN.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/removeFromArray.d.ts +9 -0
- package/dist-extensions/src/util/internals/removeFromArray.d.ts.map +1 -0
- package/dist-extensions/src/util/internals/uid.d.ts +2 -0
- package/dist-extensions/src/util/internals/uid.d.ts.map +1 -0
- package/dist-extensions/src/util/lang_string.d.ts +22 -0
- package/dist-extensions/src/util/lang_string.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
- package/dist-extensions/src/util/misc/boundingBoxFromPoints.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/capValue.d.ts +2 -0
- package/dist-extensions/src/util/misc/capValue.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/cos.d.ts +10 -0
- package/dist-extensions/src/util/misc/cos.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/dom.d.ts +28 -0
- package/dist-extensions/src/util/misc/dom.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/findScaleTo.d.ts +20 -0
- package/dist-extensions/src/util/misc/findScaleTo.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/groupSVGElements.d.ts +11 -0
- package/dist-extensions/src/util/misc/groupSVGElements.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/isTransparent.d.ts +11 -0
- package/dist-extensions/src/util/misc/isTransparent.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/matrix.d.ts +170 -0
- package/dist-extensions/src/util/misc/matrix.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/mergeClipPaths.d.ts +23 -0
- package/dist-extensions/src/util/misc/mergeClipPaths.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/objectEnlive.d.ts +45 -0
- package/dist-extensions/src/util/misc/objectEnlive.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/objectTransforms.d.ts +62 -0
- package/dist-extensions/src/util/misc/objectTransforms.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/pick.d.ts +9 -0
- package/dist-extensions/src/util/misc/pick.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/planeChange.d.ts +64 -0
- package/dist-extensions/src/util/misc/planeChange.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +52 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +90 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +27 -0
- package/dist-extensions/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/projectStroke/index.d.ts +12 -0
- package/dist-extensions/src/util/misc/projectStroke/index.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/projectStroke/types.d.ts +23 -0
- package/dist-extensions/src/util/misc/projectStroke/types.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/radiansDegreesConversion.d.ts +14 -0
- package/dist-extensions/src/util/misc/radiansDegreesConversion.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/resolveOrigin.d.ts +9 -0
- package/dist-extensions/src/util/misc/resolveOrigin.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/rotatePoint.d.ts +12 -0
- package/dist-extensions/src/util/misc/rotatePoint.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/sin.d.ts +10 -0
- package/dist-extensions/src/util/misc/sin.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/svgParsing.d.ts +46 -0
- package/dist-extensions/src/util/misc/svgParsing.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/textStyles.d.ts +32 -0
- package/dist-extensions/src/util/misc/textStyles.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/toFixed.d.ts +8 -0
- package/dist-extensions/src/util/misc/toFixed.d.ts.map +1 -0
- package/dist-extensions/src/util/misc/vectors.d.ts +72 -0
- package/dist-extensions/src/util/misc/vectors.d.ts.map +1 -0
- package/dist-extensions/src/util/path/index.d.ts +95 -0
- package/dist-extensions/src/util/path/index.d.ts.map +1 -0
- package/dist-extensions/src/util/path/regex.d.ts +2 -0
- package/dist-extensions/src/util/path/regex.d.ts.map +1 -0
- package/dist-extensions/src/util/path/typedefs.d.ts +221 -0
- package/dist-extensions/src/util/path/typedefs.d.ts.map +1 -0
- package/dist-extensions/src/util/transform_matrix_removal.d.ts +14 -0
- package/dist-extensions/src/util/transform_matrix_removal.d.ts.map +1 -0
- package/dist-extensions/src/util/typeAssertions.d.ts +13 -0
- package/dist-extensions/src/util/typeAssertions.d.ts.map +1 -0
- package/eslint.config.mjs +108 -0
- package/extensions/README.MD +27 -0
- package/extensions/aligning_guidelines/README.MD +22 -0
- package/extensions/aligning_guidelines/constant.ts +10 -0
- package/extensions/aligning_guidelines/index.ts +166 -0
- package/extensions/aligning_guidelines/typedefs.ts +36 -0
- package/extensions/aligning_guidelines/util/basic.spec.ts +31 -0
- package/extensions/aligning_guidelines/util/basic.ts +20 -0
- package/extensions/aligning_guidelines/util/collect-line.ts +172 -0
- package/extensions/aligning_guidelines/util/collect-point.ts +83 -0
- package/extensions/aligning_guidelines/util/draw.ts +74 -0
- package/extensions/aligning_guidelines/util/get-objects-by-target.ts +45 -0
- package/extensions/index.ts +4 -0
- package/jest.config.js +1 -1
- package/jest.extend.ts +14 -15
- package/package.json +17 -12
- package/playwright.setup.ts +5 -5
- package/rollup.config.mjs +46 -4
- package/scripts/build.mjs +1 -1
- package/scripts/buildLock.mjs +5 -5
- package/scripts/buildStats.mjs +2 -2
- package/scripts/git.mjs +1 -1
- package/scripts/index.mjs +34 -32
- package/scripts/sandbox.mjs +15 -15
- package/src/ClassRegistry.spec.ts +1 -1
- package/src/ClassRegistry.ts +1 -1
- package/src/Collection.ts +9 -9
- package/src/EventTypeDefs.ts +2 -2
- package/src/Intersection.spec.ts +2 -2
- package/src/Intersection.ts +11 -11
- package/src/LayoutManager/ActiveSelectionLayoutManager.spec.ts +3 -3
- package/src/LayoutManager/ActiveSelectionLayoutManager.ts +2 -2
- package/src/LayoutManager/LayoutManager.spec.ts +17 -17
- package/src/LayoutManager/LayoutManager.ts +15 -15
- package/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts +3 -3
- package/src/LayoutManager/LayoutStrategies/FixedLayout.ts +1 -1
- package/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts +4 -4
- package/src/LayoutManager/LayoutStrategies/utils.ts +4 -4
- package/src/LayoutManager/types.ts +12 -13
- package/src/Observable.ts +7 -7
- package/src/Pattern/Pattern.ts +20 -10
- package/src/Point.ts +3 -3
- package/src/Shadow.ts +7 -7
- package/src/brushes/CircleBrush.ts +1 -1
- package/src/brushes/PatternBrush.ts +1 -1
- package/src/brushes/PencilBrush.ts +1 -1
- package/src/brushes/SprayBrush.ts +3 -3
- package/src/canvas/Canvas.ts +38 -35
- package/src/canvas/DOMManagers/CanvasDOMManager.ts +2 -2
- package/src/canvas/DOMManagers/StaticCanvasDOMManager.ts +1 -1
- package/src/canvas/DOMManagers/util.ts +2 -2
- package/src/canvas/SelectableCanvas.spec.ts +8 -8
- package/src/canvas/SelectableCanvas.ts +20 -20
- package/src/canvas/StaticCanvas.ts +44 -43
- package/src/canvas/StaticCanvasOptions.ts +0 -1
- package/src/canvas/TextEditingManager.ts +1 -1
- package/src/canvas/__tests__/eventData.test.ts +17 -17
- package/src/color/Color.ts +3 -2
- package/src/color/color.test.ts +2 -2
- package/src/color/typedefs.ts +1 -1
- package/src/color/util.ts +1 -1
- package/src/config.ts +1 -1
- package/src/controls/Control.spec.ts +8 -8
- package/src/controls/Control.ts +14 -14
- package/src/controls/changeWidth.test.ts +2 -2
- package/src/controls/changeWidth.ts +4 -4
- package/src/controls/controlRendering.ts +4 -4
- package/src/controls/drag.ts +1 -1
- package/src/controls/fireEvent.ts +1 -1
- package/src/controls/pathControl.spec.ts +9 -9
- package/src/controls/pathControl.ts +20 -20
- package/src/controls/polyControl.spec.ts +6 -6
- package/src/controls/polyControl.ts +11 -11
- package/src/controls/rotate.ts +4 -4
- package/src/controls/scale.test.ts +9 -9
- package/src/controls/scale.ts +13 -13
- package/src/controls/scaleSkew.ts +3 -3
- package/src/controls/skew.ts +8 -8
- package/src/controls/util.ts +6 -6
- package/src/controls/wrapWithFireEvent.ts +2 -2
- package/src/controls/wrapWithFixedAnchor.spec.ts +5 -5
- package/src/controls/wrapWithFixedAnchor.ts +2 -2
- package/src/env/node.ts +2 -2
- package/src/filters/BaseFilter.ts +27 -25
- package/src/filters/BlendColor.ts +1 -1
- package/src/filters/BlendImage.ts +4 -4
- package/src/filters/Blur.ts +1 -1
- package/src/filters/Boilerplate.ts +1 -1
- package/src/filters/Brightness.ts +1 -1
- package/src/filters/Canvas2dFilterBackend.ts +1 -1
- package/src/filters/ColorMatrix.ts +2 -2
- package/src/filters/ColorMatrixFilters.ts +7 -7
- package/src/filters/Composed.ts +5 -5
- package/src/filters/Contrast.ts +1 -1
- package/src/filters/Convolute.ts +1 -1
- package/src/filters/GLProbes/WebGLProbe.ts +2 -2
- package/src/filters/Gamma.ts +1 -1
- package/src/filters/Grayscale.ts +1 -1
- package/src/filters/Invert.ts +1 -1
- package/src/filters/Noise.ts +1 -1
- package/src/filters/Pixelate.ts +1 -1
- package/src/filters/RemoveColor.ts +1 -1
- package/src/filters/Resize.ts +9 -9
- package/src/filters/Saturation.ts +1 -1
- package/src/filters/Vibrance.ts +1 -1
- package/src/filters/WebGLFilterBackend.ts +10 -10
- package/src/filters/typedefs.ts +1 -3
- package/src/filters/utils.ts +3 -3
- package/src/gradient/Gradient.spec.ts +19 -19
- package/src/gradient/Gradient.ts +51 -50
- package/src/gradient/parser/parseColorStops.ts +3 -3
- package/src/gradient/parser/parseCoords.ts +28 -25
- package/src/mixins/eraser_brush.mixin.ts +21 -21
- package/src/parkinglot/straighten.ts +1 -1
- package/src/parser/applyViewboxTransform.ts +2 -2
- package/src/parser/constants.ts +2 -2
- package/src/parser/elements_parser.ts +13 -13
- package/src/parser/getCSSRules.ts +1 -1
- package/src/parser/getGlobalStylesForElement.ts +1 -1
- package/src/parser/getGradientDefs.ts +1 -1
- package/src/parser/getMultipleNodes.ts +2 -2
- package/src/parser/loadSVGFromString.test.ts +1 -4
- package/src/parser/loadSVGFromString.ts +1 -1
- package/src/parser/loadSVGFromURL.ts +1 -1
- package/src/parser/normalizeAttr.ts +1 -1
- package/src/parser/normalizeValue.ts +2 -2
- package/src/parser/parseAttributes.ts +3 -3
- package/src/parser/parseFontDeclaration.ts +1 -1
- package/src/parser/parseSVGDocument.ts +3 -3
- package/src/parser/parseStyleObject.ts +1 -1
- package/src/parser/parseStyleString.ts +1 -1
- package/src/parser/parseTransformAttribute.ts +1 -1
- package/src/parser/parseUseDirectives.ts +1 -1
- package/src/parser/percent.ts +4 -4
- package/src/parser/recursivelyParseGradientsXlink.ts +1 -1
- package/src/parser/setStrokeFillOpacity.ts +1 -1
- package/src/parser/typedefs.ts +1 -1
- package/src/shapes/ActiveSelection.spec.ts +1 -1
- package/src/shapes/ActiveSelection.ts +4 -4
- package/src/shapes/Circle.ts +5 -5
- package/src/shapes/Ellipse.ts +4 -4
- package/src/shapes/Group.spec.ts +5 -5
- package/src/shapes/Group.ts +19 -17
- package/src/shapes/IText/DraggableTextDelegate.ts +9 -10
- package/src/shapes/IText/IText.test.ts +1 -1
- package/src/shapes/IText/IText.ts +12 -12
- package/src/shapes/IText/ITextBehavior.test.ts +2 -2
- package/src/shapes/IText/ITextBehavior.ts +21 -21
- package/src/shapes/IText/ITextClickBehavior.ts +2 -2
- package/src/shapes/IText/ITextKeyBehavior.test.ts +2 -2
- package/src/shapes/IText/ITextKeyBehavior.ts +13 -13
- package/src/shapes/Image.ts +16 -16
- package/src/shapes/Line.ts +4 -4
- package/src/shapes/Object/AnimatableObject.ts +13 -10
- package/src/shapes/Object/FabricObject.ts +7 -3
- package/src/shapes/Object/FabricObjectSVGExportMixin.ts +9 -9
- package/src/shapes/Object/InteractiveObject.spec.ts +3 -3
- package/src/shapes/Object/InteractiveObject.ts +32 -32
- package/src/shapes/Object/Object.ts +33 -31
- package/src/shapes/Object/ObjectGeometry.ts +9 -9
- package/src/shapes/Object/ObjectOrigin.ts +11 -11
- package/src/shapes/Object/StackedObject.ts +3 -4
- package/src/shapes/Path.ts +14 -14
- package/src/shapes/Polyline.spec.ts +1 -1
- package/src/shapes/Polyline.ts +15 -16
- package/src/shapes/Rect.ts +6 -6
- package/src/shapes/Text/StyledText.spec.ts +2 -2
- package/src/shapes/Text/StyledText.ts +7 -7
- package/src/shapes/Text/Text.spec.ts +1 -1
- package/src/shapes/Text/Text.ts +33 -33
- package/src/shapes/Text/TextSVGExportMixin.spec.ts +1 -1
- package/src/shapes/Text/TextSVGExportMixin.ts +23 -23
- package/src/shapes/Textbox.ts +7 -7
- package/src/shapes/Triangle.ts +1 -1
- package/src/typedefs.ts +3 -3
- package/src/util/animation/AnimationBase.ts +2 -2
- package/src/util/animation/AnimationRegistry.ts +1 -1
- package/src/util/animation/ArrayAnimation.ts +2 -2
- package/src/util/animation/ColorAnimation.ts +5 -5
- package/src/util/animation/ValueAnimation.ts +1 -1
- package/src/util/animation/animate.ts +6 -6
- package/src/util/animation/animations.spec.ts +7 -7
- package/src/util/animation/easing.ts +1 -1
- package/src/util/animation/types.ts +5 -6
- package/src/util/applyMixins.ts +2 -2
- package/src/util/dom_style.ts +2 -2
- package/src/util/internals/cloneDeep.ts +6 -0
- package/src/util/internals/cloneStyles.spec.ts +46 -0
- package/src/util/internals/cloneStyles.ts +12 -0
- package/src/util/internals/findRight.ts +1 -1
- package/src/util/internals/getRandomInt.test.ts +1 -1
- package/src/util/misc/boundingBoxFromPoints.ts +1 -1
- package/src/util/misc/dom.ts +3 -3
- package/src/util/misc/findScaleTo.ts +2 -2
- package/src/util/misc/groupSVGElements.ts +1 -1
- package/src/util/misc/isTransparent.ts +1 -1
- package/src/util/misc/matrix.ts +6 -6
- package/src/util/misc/objectEnlive.ts +9 -9
- package/src/util/misc/objectTransforms.ts +5 -5
- package/src/util/misc/pick.ts +2 -2
- package/src/util/misc/planeChange.spec.ts +9 -9
- package/src/util/misc/planeChange.ts +5 -5
- package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +7 -7
- package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +16 -16
- package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +2 -2
- package/src/util/misc/projectStroke/index.ts +7 -7
- package/src/util/misc/resolveOrigin.ts +1 -1
- package/src/util/misc/rotatePoint.ts +1 -1
- package/src/util/misc/svgParsing.ts +5 -5
- package/src/util/misc/textStyles.ts +6 -6
- package/src/util/misc/vectors.ts +1 -1
- package/src/util/path/index.spec.ts +3 -3
- package/src/util/path/index.ts +30 -30
- package/src/util/path/typechecks.ts +22 -22
- package/src/util/path/typedefs.ts +14 -17
- package/src/util/transform_matrix_removal.ts +3 -3
- package/src/util/typeAssertions.ts +4 -4
- package/tsconfig-extensions.json +108 -0
- package/tsconfig.json +4 -3
- package/.eslintignore +0 -3
- package/.eslintrc.js +0 -60
- package/.eslintrc.json +0 -143
- package/.eslintrc_tests +0 -58
- package/dist/src/util/internals/cloneDeep.min.mjs +0 -2
- package/dist/src/util/internals/cloneDeep.min.mjs.map +0 -1
- package/dist/src/util/internals/cloneDeep.mjs +0 -4
- package/dist/src/util/internals/cloneDeep.mjs.map +0 -1
- package/dist/src/util/internals/index.d.ts +0 -5
- package/dist/src/util/internals/index.d.ts.map +0 -1
- package/src/benchmarks/README.md +0 -7
- package/src/benchmarks/calcCornerCoords.mjs +0 -117
- package/src/benchmarks/calcTransformMatrix.mjs +0 -104
- package/src/benchmarks/pathCloning.mjs +0 -111
- package/src/benchmarks/pathData.mjs +0 -5
- package/src/benchmarks/raycasting.mjs +0 -152
- package/src/benchmarks/transformMatrixKey.mjs +0 -97
- package/src/util/internals/index.ts +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controlRendering.mjs","sources":["../../../src/controls/controlRendering.ts"],"sourcesContent":["import { FILL, STROKE, twoMathPi } from '../constants';\nimport type { InteractiveFabricObject } from '../shapes/Object/InteractiveObject';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport type { Control } from './Control';\n\nexport type ControlRenderingStyleOverride = Partial<\n Pick<\n InteractiveFabricObject,\n | 'cornerStyle'\n | 'cornerSize'\n | 'cornerColor'\n | 'cornerStrokeColor'\n | 'cornerDashArray'\n | 'transparentCorners'\n >\n>;\n\nexport type ControlRenderer<\n O extends InteractiveFabricObject = InteractiveFabricObject
|
|
1
|
+
{"version":3,"file":"controlRendering.mjs","sources":["../../../src/controls/controlRendering.ts"],"sourcesContent":["import { FILL, STROKE, twoMathPi } from '../constants';\nimport type { InteractiveFabricObject } from '../shapes/Object/InteractiveObject';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport type { Control } from './Control';\n\nexport type ControlRenderingStyleOverride = Partial<\n Pick<\n InteractiveFabricObject,\n | 'cornerStyle'\n | 'cornerSize'\n | 'cornerColor'\n | 'cornerStrokeColor'\n | 'cornerDashArray'\n | 'transparentCorners'\n >\n>;\n\nexport type ControlRenderer<\n O extends InteractiveFabricObject = InteractiveFabricObject,\n> = (\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: O,\n) => void;\n\n/**\n * Render a round control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for FabricObject controls style\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n */\nexport function renderCircleControl(\n this: Control,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: InteractiveFabricObject,\n) {\n styleOverride = styleOverride || {};\n const xSize =\n this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners =\n typeof styleOverride.transparentCorners !== 'undefined'\n ? styleOverride.transparentCorners\n : fabricObject.transparentCorners,\n methodName = transparentCorners ? STROKE : FILL,\n stroke =\n !transparentCorners &&\n (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor);\n let myLeft = left,\n myTop = top,\n size;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor || '';\n ctx.strokeStyle =\n styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor || '';\n // TODO: use proper ellipse code.\n if (xSize > ySize) {\n size = xSize;\n ctx.scale(1.0, ySize / xSize);\n myTop = (top * xSize) / ySize;\n } else if (ySize > xSize) {\n size = ySize;\n ctx.scale(xSize / ySize, 1.0);\n myLeft = (left * ySize) / xSize;\n } else {\n size = xSize;\n }\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.arc(myLeft, myTop, size / 2, 0, twoMathPi, false);\n ctx[methodName]();\n if (stroke) {\n ctx.stroke();\n }\n ctx.restore();\n}\n\n/**\n * Render a square control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for FabricObject controls style\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n */\nexport function renderSquareControl(\n this: Control,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: InteractiveFabricObject,\n) {\n styleOverride = styleOverride || {};\n const xSize =\n this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners =\n typeof styleOverride.transparentCorners !== 'undefined'\n ? styleOverride.transparentCorners\n : fabricObject.transparentCorners,\n methodName = transparentCorners ? STROKE : FILL,\n stroke =\n !transparentCorners &&\n (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor),\n xSizeBy2 = xSize / 2,\n ySizeBy2 = ySize / 2;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor || '';\n ctx.strokeStyle =\n styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor || '';\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.translate(left, top);\n // angle is relative to canvas plane\n const angle = fabricObject.getTotalAngle();\n ctx.rotate(degreesToRadians(angle));\n // this does not work, and fixed with ( && ) does not make sense.\n // to have real transparent corners we need the controls on upperCanvas\n // transparentCorners || ctx.clearRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n ctx[`${methodName}Rect`](-xSizeBy2, -ySizeBy2, xSize, ySize);\n if (stroke) {\n ctx.strokeRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n }\n ctx.restore();\n}\n"],"names":["renderCircleControl","ctx","left","top","styleOverride","fabricObject","xSize","sizeX","cornerSize","ySize","sizeY","transparentCorners","methodName","STROKE","FILL","stroke","cornerStrokeColor","myLeft","myTop","size","save","fillStyle","cornerColor","strokeStyle","scale","lineWidth","beginPath","arc","twoMathPi","restore","renderSquareControl","xSizeBy2","ySizeBy2","translate","angle","getTotalAngle","rotate","degreesToRadians","concat","strokeRect"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drag.min.mjs","sources":["../../../src/controls/drag.ts"],"sourcesContent":["import type { TransformActionHandler } from '../EventTypeDefs';\nimport { LEFT, TOP, MOVING } from '../constants';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo, isLocked } from './util';\n\n/**\n * Action handler\n * @private\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if the translation occurred\n */\nexport const dragHandler: TransformActionHandler = (\n eventData,\n transform,\n x,\n y
|
|
1
|
+
{"version":3,"file":"drag.min.mjs","sources":["../../../src/controls/drag.ts"],"sourcesContent":["import type { TransformActionHandler } from '../EventTypeDefs';\nimport { LEFT, TOP, MOVING } from '../constants';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo, isLocked } from './util';\n\n/**\n * Action handler\n * @private\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if the translation occurred\n */\nexport const dragHandler: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target, offsetX, offsetY } = transform,\n newLeft = x - offsetX,\n newTop = y - offsetY,\n moveX = !isLocked(target, 'lockMovementX') && target.left !== newLeft,\n moveY = !isLocked(target, 'lockMovementY') && target.top !== newTop;\n moveX && target.set(LEFT, newLeft);\n moveY && target.set(TOP, newTop);\n if (moveX || moveY) {\n fireEvent(MOVING, commonEventInfo(eventData, transform, x, y));\n }\n return moveX || moveY;\n};\n"],"names":["dragHandler","eventData","transform","x","y","target","offsetX","offsetY","newLeft","newTop","moveX","isLocked","left","moveY","top","set","LEFT","TOP","fireEvent","MOVING","commonEventInfo"],"mappings":"gLAcO,MAAMA,EAAsCA,CACjDC,EACAC,EACAC,EACAC,KAEA,MAAMC,OAAEA,EAAMC,QAAEA,EAAOC,QAAEA,GAAYL,EACnCM,EAAUL,EAAIG,EACdG,EAASL,EAAIG,EACbG,GAASC,EAASN,EAAQ,kBAAoBA,EAAOO,OAASJ,EAC9DK,GAASF,EAASN,EAAQ,kBAAoBA,EAAOS,MAAQL,EAM/D,OALAC,GAASL,EAAOU,IAAIC,EAAMR,GAC1BK,GAASR,EAAOU,IAAIE,EAAKR,IACrBC,GAASG,IACXK,EAAUC,EAAQC,EAAgBnB,EAAWC,EAAWC,EAAGC,IAEtDM,GAASG,CAAK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drag.mjs","sources":["../../../src/controls/drag.ts"],"sourcesContent":["import type { TransformActionHandler } from '../EventTypeDefs';\nimport { LEFT, TOP, MOVING } from '../constants';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo, isLocked } from './util';\n\n/**\n * Action handler\n * @private\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if the translation occurred\n */\nexport const dragHandler: TransformActionHandler = (\n eventData,\n transform,\n x,\n y
|
|
1
|
+
{"version":3,"file":"drag.mjs","sources":["../../../src/controls/drag.ts"],"sourcesContent":["import type { TransformActionHandler } from '../EventTypeDefs';\nimport { LEFT, TOP, MOVING } from '../constants';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo, isLocked } from './util';\n\n/**\n * Action handler\n * @private\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if the translation occurred\n */\nexport const dragHandler: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target, offsetX, offsetY } = transform,\n newLeft = x - offsetX,\n newTop = y - offsetY,\n moveX = !isLocked(target, 'lockMovementX') && target.left !== newLeft,\n moveY = !isLocked(target, 'lockMovementY') && target.top !== newTop;\n moveX && target.set(LEFT, newLeft);\n moveY && target.set(TOP, newTop);\n if (moveX || moveY) {\n fireEvent(MOVING, commonEventInfo(eventData, transform, x, y));\n }\n return moveX || moveY;\n};\n"],"names":["dragHandler","eventData","transform","x","y","target","offsetX","offsetY","newLeft","newTop","moveX","isLocked","left","moveY","top","set","LEFT","TOP","fireEvent","MOVING","commonEventInfo"],"mappings":";;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,WAAmC,GAAGA,CACjDC,SAAS,EACTC,SAAS,EACTC,CAAC,EACDC,CAAC,KACE;EACH,MAAM;MAAEC,MAAM;MAAEC,OAAO;AAAEC,MAAAA,OAAAA;AAAQ,KAAC,GAAGL,SAAS;IAC5CM,OAAO,GAAGL,CAAC,GAAGG,OAAO;IACrBG,MAAM,GAAGL,CAAC,GAAGG,OAAO;AACpBG,IAAAA,KAAK,GAAG,CAACC,QAAQ,CAACN,MAAM,EAAE,eAAe,CAAC,IAAIA,MAAM,CAACO,IAAI,KAAKJ,OAAO;AACrEK,IAAAA,KAAK,GAAG,CAACF,QAAQ,CAACN,MAAM,EAAE,eAAe,CAAC,IAAIA,MAAM,CAACS,GAAG,KAAKL,MAAM,CAAA;EACrEC,KAAK,IAAIL,MAAM,CAACU,GAAG,CAACC,IAAI,EAAER,OAAO,CAAC,CAAA;EAClCK,KAAK,IAAIR,MAAM,CAACU,GAAG,CAACE,GAAG,EAAER,MAAM,CAAC,CAAA;EAChC,IAAIC,KAAK,IAAIG,KAAK,EAAE;AAClBK,IAAAA,SAAS,CAACC,MAAM,EAAEC,eAAe,CAACnB,SAAS,EAAEC,SAAS,EAAEC,CAAC,EAAEC,CAAC,CAAC,CAAC,CAAA;AAChE,GAAA;EACA,OAAOM,KAAK,IAAIG,KAAK,CAAA;AACvB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fireEvent.min.mjs","sources":["../../../src/controls/fireEvent.ts"],"sourcesContent":["import type {\n ObjectModificationEvents,\n TModificationEvents,\n} from '../EventTypeDefs';\n\nexport const fireEvent = (\n eventName: TModificationEvents,\n options: ObjectModificationEvents[typeof eventName]
|
|
1
|
+
{"version":3,"file":"fireEvent.min.mjs","sources":["../../../src/controls/fireEvent.ts"],"sourcesContent":["import type {\n ObjectModificationEvents,\n TModificationEvents,\n} from '../EventTypeDefs';\n\nexport const fireEvent = (\n eventName: TModificationEvents,\n options: ObjectModificationEvents[typeof eventName],\n) => {\n const {\n transform: { target },\n } = options;\n target.canvas?.fire(`object:${eventName}`, {\n ...options,\n target,\n });\n target.fire(eventName, options);\n};\n"],"names":["fireEvent","eventName","options","_target$canvas","transform","target","canvas","fire","concat","_objectSpread"],"mappings":"uFAKaA,EAAYA,CACvBC,EACAC,KACG,IAAAC,EACH,MACEC,WAAWC,OAAEA,IACXH,EACSC,QAAbA,EAAAE,EAAOC,kBAAMH,GAAbA,EAAeI,KAAIC,UAAAA,OAAWP,GAASQ,EAAAA,KAClCP,GAAO,GAAA,CACVG,YAEFA,EAAOE,KAAKN,EAAWC,EAAQ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fireEvent.mjs","sources":["../../../src/controls/fireEvent.ts"],"sourcesContent":["import type {\n ObjectModificationEvents,\n TModificationEvents,\n} from '../EventTypeDefs';\n\nexport const fireEvent = (\n eventName: TModificationEvents,\n options: ObjectModificationEvents[typeof eventName]
|
|
1
|
+
{"version":3,"file":"fireEvent.mjs","sources":["../../../src/controls/fireEvent.ts"],"sourcesContent":["import type {\n ObjectModificationEvents,\n TModificationEvents,\n} from '../EventTypeDefs';\n\nexport const fireEvent = (\n eventName: TModificationEvents,\n options: ObjectModificationEvents[typeof eventName],\n) => {\n const {\n transform: { target },\n } = options;\n target.canvas?.fire(`object:${eventName}`, {\n ...options,\n target,\n });\n target.fire(eventName, options);\n};\n"],"names":["fireEvent","eventName","options","_target$canvas","transform","target","canvas","fire","concat","_objectSpread"],"mappings":";;MAKaA,SAAS,GAAGA,CACvBC,SAA8B,EAC9BC,OAAmD,KAChD;AAAA,EAAA,IAAAC,cAAA,CAAA;EACH,MAAM;AACJC,IAAAA,SAAS,EAAE;AAAEC,MAAAA,MAAAA;AAAO,KAAA;AACtB,GAAC,GAAGH,OAAO,CAAA;EACX,CAAAC,cAAA,GAAAE,MAAM,CAACC,MAAM,MAAAH,IAAAA,IAAAA,cAAA,eAAbA,cAAA,CAAeI,IAAI,CAAAC,SAAAA,CAAAA,MAAA,CAAWP,SAAS,CAAA,EAAAQ,cAAA,CAAAA,cAAA,KAClCP,OAAO,CAAA,EAAA,EAAA,EAAA;AACVG,IAAAA,MAAAA;AAAM,GAAA,CACP,CAAC,CAAA;AACFA,EAAAA,MAAM,CAACE,IAAI,CAACN,SAAS,EAAEC,OAAO,CAAC,CAAA;AACjC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pathControl.min.mjs","sources":["../../../src/controls/pathControl.ts"],"sourcesContent":["import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Path } from '../shapes/Path';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n} from '../EventTypeDefs';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport type { TSimpleParseCommandType } from '../util/path/typedefs';\nimport type { ControlRenderingStyleOverride } from './controlRendering';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo } from './util';\n\nconst ACTION_NAME: TModificationEvents = 'modifyPath' as const;\n\ntype TTransformAnchor = Transform;\n\nexport type PathPointControlStyle = {\n controlFill?: string;\n controlStroke?: string;\n connectionDashArray?: number[];\n};\n\nconst calcPathPointPosition = (\n pathObject: Path,\n commandIndex: number,\n pointIndex: number\n) => {\n const { path, pathOffset } = pathObject;\n const command = path[commandIndex];\n return new Point(\n (command[pointIndex] as number) - pathOffset.x,\n (command[pointIndex + 1] as number) - pathOffset.y\n ).transform(\n multiplyTransformMatrices(\n pathObject.getViewportTransform(),\n pathObject.calcTransformMatrix()\n )\n );\n};\n\nconst movePathPoint = (\n pathObject: Path,\n x: number,\n y: number,\n commandIndex: number,\n pointIndex: number\n) => {\n const { path, pathOffset } = pathObject;\n\n const anchorCommand =\n path[(commandIndex > 0 ? commandIndex : path.length) - 1];\n const anchorPoint = new Point(\n anchorCommand[pointIndex] as number,\n anchorCommand[pointIndex + 1] as number\n );\n\n const anchorPointInParentPlane = anchorPoint\n .subtract(pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const mouseLocalPosition = sendPointToPlane(\n new Point(x, y),\n undefined,\n pathObject.calcOwnMatrix()\n );\n\n path[commandIndex][pointIndex] = mouseLocalPosition.x + pathOffset.x;\n path[commandIndex][pointIndex + 1] = mouseLocalPosition.y + pathOffset.y;\n pathObject.setDimensions();\n\n const newAnchorPointInParentPlane = anchorPoint\n .subtract(pathObject.pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const diff = newAnchorPointInParentPlane.subtract(anchorPointInParentPlane);\n pathObject.left -= diff.x;\n pathObject.top -= diff.y;\n pathObject.set('dirty', true);\n return true;\n};\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nfunction pathPositionHandler(\n this: PathPointControl,\n dim: Point,\n finalMatrix: TMat2D,\n pathObject: Path\n) {\n const { commandIndex, pointIndex } = this;\n return calcPathPointPosition(pathObject, commandIndex, pointIndex);\n}\n\n/**\n * This function defines what the control does.\n * It'll be called on every mouse move after a control has been clicked and is being dragged.\n * The function receives as argument the mouse event, the current transform object\n * and the current position in canvas coordinate `transform.target` is a reference to the\n * current object being transformed.\n */\nfunction pathActionHandler(\n this: PathPointControl,\n eventData: TPointerEvent,\n transform: TTransformAnchor,\n x: number,\n y: number\n) {\n const { target } = transform;\n const { commandIndex, pointIndex } = this;\n const actionPerformed = movePathPoint(\n target as Path,\n x,\n y,\n commandIndex,\n pointIndex\n );\n if (actionPerformed) {\n fireEvent(this.actionName as TModificationEvents, {\n ...commonEventInfo(eventData, transform, x, y),\n commandIndex,\n pointIndex,\n });\n }\n return actionPerformed;\n}\n\nconst indexFromPrevCommand = (previousCommandType: TSimpleParseCommandType) =>\n previousCommandType === 'C' ? 5 : previousCommandType === 'Q' ? 3 : 1;\n\nclass PathPointControl extends Control {\n declare commandIndex: number;\n declare pointIndex: number;\n declare controlFill: string;\n declare controlStroke: string;\n constructor(options?: Partial<PathPointControl>) {\n super(options);\n }\n\n render(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path\n ) {\n const overrides: ControlRenderingStyleOverride = {\n ...styleOverride,\n cornerColor: this.controlFill,\n cornerStrokeColor: this.controlStroke,\n transparentCorners: !this.controlFill,\n };\n super.render(ctx, left, top, overrides, fabricObject);\n }\n}\n\nclass PathControlPointControl extends PathPointControl {\n declare connectionDashArray?: number[];\n declare connectToCommandIndex: number;\n declare connectToPointIndex: number;\n constructor(options?: Partial<PathControlPointControl>) {\n super(options);\n }\n\n render(\n this: PathControlPointControl,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path\n ) {\n const { path } = fabricObject;\n const {\n commandIndex,\n pointIndex,\n connectToCommandIndex,\n connectToPointIndex,\n } = this;\n ctx.save();\n ctx.strokeStyle = this.controlStroke;\n if (this.connectionDashArray) {\n ctx.setLineDash(this.connectionDashArray);\n }\n const [commandType] = path[commandIndex];\n const point = calcPathPointPosition(\n fabricObject,\n connectToCommandIndex,\n connectToPointIndex\n );\n\n if (commandType === 'Q') {\n // one control point connects to 2 points\n const point2 = calcPathPointPosition(\n fabricObject,\n commandIndex,\n pointIndex + 2\n );\n ctx.moveTo(point2.x, point2.y);\n ctx.lineTo(left, top);\n } else {\n ctx.moveTo(left, top);\n }\n ctx.lineTo(point.x, point.y);\n ctx.stroke();\n ctx.restore();\n\n super.render(ctx, left, top, styleOverride, fabricObject);\n }\n}\n\nconst createControl = (\n commandIndexPos: number,\n pointIndexPos: number,\n isControlPoint: boolean,\n options: Partial<Control> & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n },\n connectToCommandIndex?: number,\n connectToPointIndex?: number\n) =>\n new (isControlPoint ? PathControlPointControl : PathPointControl)({\n commandIndex: commandIndexPos,\n pointIndex: pointIndexPos,\n actionName: ACTION_NAME,\n positionHandler: pathPositionHandler,\n actionHandler: pathActionHandler,\n connectToCommandIndex,\n connectToPointIndex,\n ...options,\n ...(isControlPoint ? options.controlPointStyle : options.pointStyle),\n } as Partial<PathControlPointControl>);\n\nexport function createPathControls(\n path: Path,\n options: Partial<Control> & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n } = {}\n): Record<string, Control> {\n const controls = {} as Record<string, Control>;\n let previousCommandType: TSimpleParseCommandType = 'M';\n path.path.forEach((command, commandIndex) => {\n const commandType = command[0];\n\n if (commandType !== 'Z') {\n controls[`c_${commandIndex}_${commandType}`] = createControl(\n commandIndex,\n command.length - 2,\n false,\n options\n );\n }\n switch (commandType) {\n case 'C':\n controls[`c_${commandIndex}_C_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex - 1,\n indexFromPrevCommand(previousCommandType)\n );\n controls[`c_${commandIndex}_C_CP_2`] = createControl(\n commandIndex,\n 3,\n true,\n options,\n commandIndex,\n 5\n );\n break;\n case 'Q':\n controls[`c_${commandIndex}_Q_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex,\n 3\n );\n break;\n }\n previousCommandType = commandType;\n });\n return controls;\n}\n"],"names":["calcPathPointPosition","pathObject","commandIndex","pointIndex","path","pathOffset","command","Point","x","y","transform","multiplyTransformMatrices","getViewportTransform","calcTransformMatrix","pathPositionHandler","dim","finalMatrix","this","pathActionHandler","eventData","target","actionPerformed","movePathPoint","anchorCommand","length","anchorPoint","anchorPointInParentPlane","subtract","calcOwnMatrix","mouseLocalPosition","sendPointToPlane","undefined","setDimensions","diff","left","top","set","fireEvent","actionName","_objectSpread","commonEventInfo","PathPointControl","Control","constructor","options","super","render","ctx","styleOverride","fabricObject","overrides","cornerColor","controlFill","cornerStrokeColor","controlStroke","transparentCorners","PathControlPointControl","connectToCommandIndex","connectToPointIndex","save","strokeStyle","connectionDashArray","setLineDash","commandType","point","point2","moveTo","lineTo","stroke","restore","createControl","commandIndexPos","pointIndexPos","isControlPoint","positionHandler","actionHandler","controlPointStyle","pointStyle","createPathControls","arguments","controls","previousCommandType","forEach","concat","indexFromPrevCommand"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pathControl.min.mjs","sources":["../../../src/controls/pathControl.ts"],"sourcesContent":["import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Path } from '../shapes/Path';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n} from '../EventTypeDefs';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport type { TSimpleParseCommandType } from '../util/path/typedefs';\nimport type { ControlRenderingStyleOverride } from './controlRendering';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo } from './util';\n\nconst ACTION_NAME: TModificationEvents = 'modifyPath' as const;\n\ntype TTransformAnchor = Transform;\n\nexport type PathPointControlStyle = {\n controlFill?: string;\n controlStroke?: string;\n connectionDashArray?: number[];\n};\n\nconst calcPathPointPosition = (\n pathObject: Path,\n commandIndex: number,\n pointIndex: number,\n) => {\n const { path, pathOffset } = pathObject;\n const command = path[commandIndex];\n return new Point(\n (command[pointIndex] as number) - pathOffset.x,\n (command[pointIndex + 1] as number) - pathOffset.y,\n ).transform(\n multiplyTransformMatrices(\n pathObject.getViewportTransform(),\n pathObject.calcTransformMatrix(),\n ),\n );\n};\n\nconst movePathPoint = (\n pathObject: Path,\n x: number,\n y: number,\n commandIndex: number,\n pointIndex: number,\n) => {\n const { path, pathOffset } = pathObject;\n\n const anchorCommand =\n path[(commandIndex > 0 ? commandIndex : path.length) - 1];\n const anchorPoint = new Point(\n anchorCommand[pointIndex] as number,\n anchorCommand[pointIndex + 1] as number,\n );\n\n const anchorPointInParentPlane = anchorPoint\n .subtract(pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const mouseLocalPosition = sendPointToPlane(\n new Point(x, y),\n undefined,\n pathObject.calcOwnMatrix(),\n );\n\n path[commandIndex][pointIndex] = mouseLocalPosition.x + pathOffset.x;\n path[commandIndex][pointIndex + 1] = mouseLocalPosition.y + pathOffset.y;\n pathObject.setDimensions();\n\n const newAnchorPointInParentPlane = anchorPoint\n .subtract(pathObject.pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const diff = newAnchorPointInParentPlane.subtract(anchorPointInParentPlane);\n pathObject.left -= diff.x;\n pathObject.top -= diff.y;\n pathObject.set('dirty', true);\n return true;\n};\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nfunction pathPositionHandler(\n this: PathPointControl,\n dim: Point,\n finalMatrix: TMat2D,\n pathObject: Path,\n) {\n const { commandIndex, pointIndex } = this;\n return calcPathPointPosition(pathObject, commandIndex, pointIndex);\n}\n\n/**\n * This function defines what the control does.\n * It'll be called on every mouse move after a control has been clicked and is being dragged.\n * The function receives as argument the mouse event, the current transform object\n * and the current position in canvas coordinate `transform.target` is a reference to the\n * current object being transformed.\n */\nfunction pathActionHandler(\n this: PathPointControl,\n eventData: TPointerEvent,\n transform: TTransformAnchor,\n x: number,\n y: number,\n) {\n const { target } = transform;\n const { commandIndex, pointIndex } = this;\n const actionPerformed = movePathPoint(\n target as Path,\n x,\n y,\n commandIndex,\n pointIndex,\n );\n if (actionPerformed) {\n fireEvent(this.actionName as TModificationEvents, {\n ...commonEventInfo(eventData, transform, x, y),\n commandIndex,\n pointIndex,\n });\n }\n return actionPerformed;\n}\n\nconst indexFromPrevCommand = (previousCommandType: TSimpleParseCommandType) =>\n previousCommandType === 'C' ? 5 : previousCommandType === 'Q' ? 3 : 1;\n\nclass PathPointControl extends Control {\n declare commandIndex: number;\n declare pointIndex: number;\n declare controlFill: string;\n declare controlStroke: string;\n constructor(options?: Partial<PathPointControl>) {\n super(options);\n }\n\n render(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path,\n ) {\n const overrides: ControlRenderingStyleOverride = {\n ...styleOverride,\n cornerColor: this.controlFill,\n cornerStrokeColor: this.controlStroke,\n transparentCorners: !this.controlFill,\n };\n super.render(ctx, left, top, overrides, fabricObject);\n }\n}\n\nclass PathControlPointControl extends PathPointControl {\n declare connectionDashArray?: number[];\n declare connectToCommandIndex: number;\n declare connectToPointIndex: number;\n constructor(options?: Partial<PathControlPointControl>) {\n super(options);\n }\n\n render(\n this: PathControlPointControl,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path,\n ) {\n const { path } = fabricObject;\n const {\n commandIndex,\n pointIndex,\n connectToCommandIndex,\n connectToPointIndex,\n } = this;\n ctx.save();\n ctx.strokeStyle = this.controlStroke;\n if (this.connectionDashArray) {\n ctx.setLineDash(this.connectionDashArray);\n }\n const [commandType] = path[commandIndex];\n const point = calcPathPointPosition(\n fabricObject,\n connectToCommandIndex,\n connectToPointIndex,\n );\n\n if (commandType === 'Q') {\n // one control point connects to 2 points\n const point2 = calcPathPointPosition(\n fabricObject,\n commandIndex,\n pointIndex + 2,\n );\n ctx.moveTo(point2.x, point2.y);\n ctx.lineTo(left, top);\n } else {\n ctx.moveTo(left, top);\n }\n ctx.lineTo(point.x, point.y);\n ctx.stroke();\n ctx.restore();\n\n super.render(ctx, left, top, styleOverride, fabricObject);\n }\n}\n\nconst createControl = (\n commandIndexPos: number,\n pointIndexPos: number,\n isControlPoint: boolean,\n options: Partial<Control> & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n },\n connectToCommandIndex?: number,\n connectToPointIndex?: number,\n) =>\n new (isControlPoint ? PathControlPointControl : PathPointControl)({\n commandIndex: commandIndexPos,\n pointIndex: pointIndexPos,\n actionName: ACTION_NAME,\n positionHandler: pathPositionHandler,\n actionHandler: pathActionHandler,\n connectToCommandIndex,\n connectToPointIndex,\n ...options,\n ...(isControlPoint ? options.controlPointStyle : options.pointStyle),\n } as Partial<PathControlPointControl>);\n\nexport function createPathControls(\n path: Path,\n options: Partial<Control> & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n } = {},\n): Record<string, Control> {\n const controls = {} as Record<string, Control>;\n let previousCommandType: TSimpleParseCommandType = 'M';\n path.path.forEach((command, commandIndex) => {\n const commandType = command[0];\n\n if (commandType !== 'Z') {\n controls[`c_${commandIndex}_${commandType}`] = createControl(\n commandIndex,\n command.length - 2,\n false,\n options,\n );\n }\n switch (commandType) {\n case 'C':\n controls[`c_${commandIndex}_C_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex - 1,\n indexFromPrevCommand(previousCommandType),\n );\n controls[`c_${commandIndex}_C_CP_2`] = createControl(\n commandIndex,\n 3,\n true,\n options,\n commandIndex,\n 5,\n );\n break;\n case 'Q':\n controls[`c_${commandIndex}_Q_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex,\n 3,\n );\n break;\n }\n previousCommandType = commandType;\n });\n return controls;\n}\n"],"names":["calcPathPointPosition","pathObject","commandIndex","pointIndex","path","pathOffset","command","Point","x","y","transform","multiplyTransformMatrices","getViewportTransform","calcTransformMatrix","pathPositionHandler","dim","finalMatrix","this","pathActionHandler","eventData","target","actionPerformed","movePathPoint","anchorCommand","length","anchorPoint","anchorPointInParentPlane","subtract","calcOwnMatrix","mouseLocalPosition","sendPointToPlane","undefined","setDimensions","diff","left","top","set","fireEvent","actionName","_objectSpread","commonEventInfo","PathPointControl","Control","constructor","options","super","render","ctx","styleOverride","fabricObject","overrides","cornerColor","controlFill","cornerStrokeColor","controlStroke","transparentCorners","PathControlPointControl","connectToCommandIndex","connectToPointIndex","save","strokeStyle","connectionDashArray","setLineDash","commandType","point","point2","moveTo","lineTo","stroke","restore","createControl","commandIndexPos","pointIndexPos","isControlPoint","positionHandler","actionHandler","controlPointStyle","pointStyle","createPathControls","arguments","controls","previousCommandType","forEach","concat","indexFromPrevCommand"],"mappings":"mZAgBA,MAUMA,EAAwBA,CAC5BC,EACAC,EACAC,KAEA,MAAMC,KAAEA,EAAIC,WAAEA,GAAeJ,EACvBK,EAAUF,EAAKF,GACrB,OAAO,IAAIK,EACRD,EAAQH,GAAyBE,EAAWG,EAC5CF,EAAQH,EAAa,GAAgBE,EAAWI,GACjDC,UACAC,EACEV,EAAWW,uBACXX,EAAWY,uBAEd,EAgDH,SAASC,EAEPC,EACAC,EACAf,GAEA,MAAMC,aAAEA,EAAYC,WAAEA,GAAec,KACrC,OAAOjB,EAAsBC,EAAYC,EAAcC,EACzD,CASA,SAASe,EAEPC,EACAT,EACAF,EACAC,GAEA,MAAMW,OAAEA,GAAWV,GACbR,aAAEA,EAAYC,WAAEA,GAAec,KAC/BI,EAvEcC,EACpBrB,EACAO,EACAC,EACAP,EACAC,KAEA,MAAMC,KAAEA,EAAIC,WAAEA,GAAeJ,EAEvBsB,EACJnB,GAAMF,EAAe,EAAIA,EAAeE,EAAKoB,QAAU,GACnDC,EAAc,IAAIlB,EACtBgB,EAAcpB,GACdoB,EAAcpB,EAAa,IAGvBuB,EAA2BD,EAC9BE,SAAStB,GACTK,UAAUT,EAAW2B,iBAElBC,EAAqBC,EACzB,IAAIvB,EAAMC,EAAGC,QACbsB,EACA9B,EAAW2B,iBAGbxB,EAAKF,GAAcC,GAAc0B,EAAmBrB,EAAIH,EAAWG,EACnEJ,EAAKF,GAAcC,EAAa,GAAK0B,EAAmBpB,EAAIJ,EAAWI,EACvER,EAAW+B,gBAEX,MAIMC,EAJ8BR,EACjCE,SAAS1B,EAAWI,YACpBK,UAAUT,EAAW2B,iBAEiBD,SAASD,GAIlD,OAHAzB,EAAWiC,MAAQD,EAAKzB,EACxBP,EAAWkC,KAAOF,EAAKxB,EACvBR,EAAWmC,IAAI,SAAS,IACjB,CAAI,EAiCad,CACtBF,EACAZ,EACAC,EACAP,EACAC,GASF,OANEkC,EAAUpB,KAAKqB,WAAUC,EAAAA,EAAA,CAAA,EACpBC,EAAgBrB,EAAWT,EAAWF,EAAGC,IAAE,CAAA,EAAA,CAC9CP,eACAC,gBAGGkB,CACT,CAKA,MAAMoB,UAAyBC,EAK7BC,WAAAA,CAAYC,GACVC,MAAMD,EACR,CAEAE,MAAAA,CACEC,EACAb,EACAC,EACAa,EACAC,GAEA,MAAMC,EAAwCX,EAAAA,KACzCS,GAAa,GAAA,CAChBG,YAAalC,KAAKmC,YAClBC,kBAAmBpC,KAAKqC,cACxBC,oBAAqBtC,KAAKmC,cAE5BP,MAAMC,OAAOC,EAAKb,EAAMC,EAAKe,EAAWD,EAC1C,EAGF,MAAMO,UAAgCf,EAIpCE,WAAAA,CAAYC,GACVC,MAAMD,EACR,CAEAE,MAAAA,CAEEC,EACAb,EACAC,EACAa,EACAC,GAEA,MAAM7C,KAAEA,GAAS6C,GACX/C,aACJA,EAAYC,WACZA,EAAUsD,sBACVA,EAAqBC,oBACrBA,GACEzC,KACJ8B,EAAIY,OACJZ,EAAIa,YAAc3C,KAAKqC,cACnBrC,KAAK4C,qBACPd,EAAIe,YAAY7C,KAAK4C,qBAEvB,MAAOE,GAAe3D,EAAKF,GACrB8D,EAAQhE,EACZiD,EACAQ,EACAC,GAGF,GAAoB,MAAhBK,EAAqB,CAEvB,MAAME,EAASjE,EACbiD,EACA/C,EACAC,EAAa,GAEf4C,EAAImB,OAAOD,EAAOzD,EAAGyD,EAAOxD,GAC5BsC,EAAIoB,OAAOjC,EAAMC,EACnB,MACEY,EAAImB,OAAOhC,EAAMC,GAEnBY,EAAIoB,OAAOH,EAAMxD,EAAGwD,EAAMvD,GAC1BsC,EAAIqB,SACJrB,EAAIsB,UAEJxB,MAAMC,OAAOC,EAAKb,EAAMC,EAAKa,EAAeC,EAC9C,EAGF,MAAMqB,EAAgBA,CACpBC,EACAC,EACAC,EACA7B,EAIAa,EACAC,IAEA,IAAKe,EAAiBjB,EAA0Bf,GAAgBF,EAAAA,EAAA,CAC9DrC,aAAcqE,EACdpE,WAAYqE,EACZlC,WAtNqC,aAuNrCoC,gBAAiB5D,EACjB6D,cAAezD,EACfuC,wBACAC,uBACGd,GACC6B,EAAiB7B,EAAQgC,kBAAoBhC,EAAQiC,aAGtD,SAASC,EACd1E,GAKyB,IAJzBwC,EAGCmC,UAAAvD,OAAA,QAAAO,IAAAgD,UAAA,GAAAA,UAAA,GAAG,CAAA,EAEJ,MAAMC,EAAW,CAAA,EACjB,IAAIC,EAA+C,IA4CnD,OA3CA7E,EAAKA,KAAK8E,SAAQ,CAAC5E,EAASJ,KAC1B,MAAM6D,EAAczD,EAAQ,GAU5B,OARoB,MAAhByD,IACFiB,EAAQ,KAAAG,OAAMjF,OAAYiF,OAAIpB,IAAiBO,EAC7CpE,EACAI,EAAQkB,OAAS,GACjB,EACAoB,IAGImB,GACN,IAAK,IACHiB,EAAQ,KAAAG,OAAMjF,EAAY,YAAaoE,EACrCpE,EACA,GACA,EACA0C,EACA1C,EAAe,EAtIK+E,IACJ,MAAxBA,EAA8B,EAA4B,MAAxBA,EAA8B,EAAI,EAsI5DG,CAAqBH,IAEvBD,OAAQG,OAAMjF,EAAsB,YAAGoE,EACrCpE,EACA,GACA,EACA0C,EACA1C,EACA,GAEF,MACF,IAAK,IACH8E,OAAQG,OAAMjF,EAAsB,YAAGoE,EACrCpE,EACA,GACA,EACA0C,EACA1C,EACA,GAIN+E,EAAsBlB,CAAW,IAE5BiB,CACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pathControl.mjs","sources":["../../../src/controls/pathControl.ts"],"sourcesContent":["import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Path } from '../shapes/Path';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n} from '../EventTypeDefs';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport type { TSimpleParseCommandType } from '../util/path/typedefs';\nimport type { ControlRenderingStyleOverride } from './controlRendering';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo } from './util';\n\nconst ACTION_NAME: TModificationEvents = 'modifyPath' as const;\n\ntype TTransformAnchor = Transform;\n\nexport type PathPointControlStyle = {\n controlFill?: string;\n controlStroke?: string;\n connectionDashArray?: number[];\n};\n\nconst calcPathPointPosition = (\n pathObject: Path,\n commandIndex: number,\n pointIndex: number\n) => {\n const { path, pathOffset } = pathObject;\n const command = path[commandIndex];\n return new Point(\n (command[pointIndex] as number) - pathOffset.x,\n (command[pointIndex + 1] as number) - pathOffset.y\n ).transform(\n multiplyTransformMatrices(\n pathObject.getViewportTransform(),\n pathObject.calcTransformMatrix()\n )\n );\n};\n\nconst movePathPoint = (\n pathObject: Path,\n x: number,\n y: number,\n commandIndex: number,\n pointIndex: number\n) => {\n const { path, pathOffset } = pathObject;\n\n const anchorCommand =\n path[(commandIndex > 0 ? commandIndex : path.length) - 1];\n const anchorPoint = new Point(\n anchorCommand[pointIndex] as number,\n anchorCommand[pointIndex + 1] as number\n );\n\n const anchorPointInParentPlane = anchorPoint\n .subtract(pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const mouseLocalPosition = sendPointToPlane(\n new Point(x, y),\n undefined,\n pathObject.calcOwnMatrix()\n );\n\n path[commandIndex][pointIndex] = mouseLocalPosition.x + pathOffset.x;\n path[commandIndex][pointIndex + 1] = mouseLocalPosition.y + pathOffset.y;\n pathObject.setDimensions();\n\n const newAnchorPointInParentPlane = anchorPoint\n .subtract(pathObject.pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const diff = newAnchorPointInParentPlane.subtract(anchorPointInParentPlane);\n pathObject.left -= diff.x;\n pathObject.top -= diff.y;\n pathObject.set('dirty', true);\n return true;\n};\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nfunction pathPositionHandler(\n this: PathPointControl,\n dim: Point,\n finalMatrix: TMat2D,\n pathObject: Path\n) {\n const { commandIndex, pointIndex } = this;\n return calcPathPointPosition(pathObject, commandIndex, pointIndex);\n}\n\n/**\n * This function defines what the control does.\n * It'll be called on every mouse move after a control has been clicked and is being dragged.\n * The function receives as argument the mouse event, the current transform object\n * and the current position in canvas coordinate `transform.target` is a reference to the\n * current object being transformed.\n */\nfunction pathActionHandler(\n this: PathPointControl,\n eventData: TPointerEvent,\n transform: TTransformAnchor,\n x: number,\n y: number\n) {\n const { target } = transform;\n const { commandIndex, pointIndex } = this;\n const actionPerformed = movePathPoint(\n target as Path,\n x,\n y,\n commandIndex,\n pointIndex\n );\n if (actionPerformed) {\n fireEvent(this.actionName as TModificationEvents, {\n ...commonEventInfo(eventData, transform, x, y),\n commandIndex,\n pointIndex,\n });\n }\n return actionPerformed;\n}\n\nconst indexFromPrevCommand = (previousCommandType: TSimpleParseCommandType) =>\n previousCommandType === 'C' ? 5 : previousCommandType === 'Q' ? 3 : 1;\n\nclass PathPointControl extends Control {\n declare commandIndex: number;\n declare pointIndex: number;\n declare controlFill: string;\n declare controlStroke: string;\n constructor(options?: Partial<PathPointControl>) {\n super(options);\n }\n\n render(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path\n ) {\n const overrides: ControlRenderingStyleOverride = {\n ...styleOverride,\n cornerColor: this.controlFill,\n cornerStrokeColor: this.controlStroke,\n transparentCorners: !this.controlFill,\n };\n super.render(ctx, left, top, overrides, fabricObject);\n }\n}\n\nclass PathControlPointControl extends PathPointControl {\n declare connectionDashArray?: number[];\n declare connectToCommandIndex: number;\n declare connectToPointIndex: number;\n constructor(options?: Partial<PathControlPointControl>) {\n super(options);\n }\n\n render(\n this: PathControlPointControl,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path\n ) {\n const { path } = fabricObject;\n const {\n commandIndex,\n pointIndex,\n connectToCommandIndex,\n connectToPointIndex,\n } = this;\n ctx.save();\n ctx.strokeStyle = this.controlStroke;\n if (this.connectionDashArray) {\n ctx.setLineDash(this.connectionDashArray);\n }\n const [commandType] = path[commandIndex];\n const point = calcPathPointPosition(\n fabricObject,\n connectToCommandIndex,\n connectToPointIndex\n );\n\n if (commandType === 'Q') {\n // one control point connects to 2 points\n const point2 = calcPathPointPosition(\n fabricObject,\n commandIndex,\n pointIndex + 2\n );\n ctx.moveTo(point2.x, point2.y);\n ctx.lineTo(left, top);\n } else {\n ctx.moveTo(left, top);\n }\n ctx.lineTo(point.x, point.y);\n ctx.stroke();\n ctx.restore();\n\n super.render(ctx, left, top, styleOverride, fabricObject);\n }\n}\n\nconst createControl = (\n commandIndexPos: number,\n pointIndexPos: number,\n isControlPoint: boolean,\n options: Partial<Control> & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n },\n connectToCommandIndex?: number,\n connectToPointIndex?: number\n) =>\n new (isControlPoint ? PathControlPointControl : PathPointControl)({\n commandIndex: commandIndexPos,\n pointIndex: pointIndexPos,\n actionName: ACTION_NAME,\n positionHandler: pathPositionHandler,\n actionHandler: pathActionHandler,\n connectToCommandIndex,\n connectToPointIndex,\n ...options,\n ...(isControlPoint ? options.controlPointStyle : options.pointStyle),\n } as Partial<PathControlPointControl>);\n\nexport function createPathControls(\n path: Path,\n options: Partial<Control> & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n } = {}\n): Record<string, Control> {\n const controls = {} as Record<string, Control>;\n let previousCommandType: TSimpleParseCommandType = 'M';\n path.path.forEach((command, commandIndex) => {\n const commandType = command[0];\n\n if (commandType !== 'Z') {\n controls[`c_${commandIndex}_${commandType}`] = createControl(\n commandIndex,\n command.length - 2,\n false,\n options\n );\n }\n switch (commandType) {\n case 'C':\n controls[`c_${commandIndex}_C_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex - 1,\n indexFromPrevCommand(previousCommandType)\n );\n controls[`c_${commandIndex}_C_CP_2`] = createControl(\n commandIndex,\n 3,\n true,\n options,\n commandIndex,\n 5\n );\n break;\n case 'Q':\n controls[`c_${commandIndex}_Q_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex,\n 3\n );\n break;\n }\n previousCommandType = commandType;\n });\n return controls;\n}\n"],"names":["ACTION_NAME","calcPathPointPosition","pathObject","commandIndex","pointIndex","path","pathOffset","command","Point","x","y","transform","multiplyTransformMatrices","getViewportTransform","calcTransformMatrix","movePathPoint","anchorCommand","length","anchorPoint","anchorPointInParentPlane","subtract","calcOwnMatrix","mouseLocalPosition","sendPointToPlane","undefined","setDimensions","newAnchorPointInParentPlane","diff","left","top","set","pathPositionHandler","dim","finalMatrix","pathActionHandler","eventData","target","actionPerformed","fireEvent","actionName","_objectSpread","commonEventInfo","indexFromPrevCommand","previousCommandType","PathPointControl","Control","constructor","options","render","ctx","styleOverride","fabricObject","overrides","cornerColor","controlFill","cornerStrokeColor","controlStroke","transparentCorners","PathControlPointControl","connectToCommandIndex","connectToPointIndex","save","strokeStyle","connectionDashArray","setLineDash","commandType","point","point2","moveTo","lineTo","stroke","restore","createControl","commandIndexPos","pointIndexPos","isControlPoint","positionHandler","actionHandler","controlPointStyle","pointStyle","createPathControls","arguments","controls","forEach","concat"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pathControl.mjs","sources":["../../../src/controls/pathControl.ts"],"sourcesContent":["import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Path } from '../shapes/Path';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n} from '../EventTypeDefs';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport type { TSimpleParseCommandType } from '../util/path/typedefs';\nimport type { ControlRenderingStyleOverride } from './controlRendering';\nimport { fireEvent } from './fireEvent';\nimport { commonEventInfo } from './util';\n\nconst ACTION_NAME: TModificationEvents = 'modifyPath' as const;\n\ntype TTransformAnchor = Transform;\n\nexport type PathPointControlStyle = {\n controlFill?: string;\n controlStroke?: string;\n connectionDashArray?: number[];\n};\n\nconst calcPathPointPosition = (\n pathObject: Path,\n commandIndex: number,\n pointIndex: number,\n) => {\n const { path, pathOffset } = pathObject;\n const command = path[commandIndex];\n return new Point(\n (command[pointIndex] as number) - pathOffset.x,\n (command[pointIndex + 1] as number) - pathOffset.y,\n ).transform(\n multiplyTransformMatrices(\n pathObject.getViewportTransform(),\n pathObject.calcTransformMatrix(),\n ),\n );\n};\n\nconst movePathPoint = (\n pathObject: Path,\n x: number,\n y: number,\n commandIndex: number,\n pointIndex: number,\n) => {\n const { path, pathOffset } = pathObject;\n\n const anchorCommand =\n path[(commandIndex > 0 ? commandIndex : path.length) - 1];\n const anchorPoint = new Point(\n anchorCommand[pointIndex] as number,\n anchorCommand[pointIndex + 1] as number,\n );\n\n const anchorPointInParentPlane = anchorPoint\n .subtract(pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const mouseLocalPosition = sendPointToPlane(\n new Point(x, y),\n undefined,\n pathObject.calcOwnMatrix(),\n );\n\n path[commandIndex][pointIndex] = mouseLocalPosition.x + pathOffset.x;\n path[commandIndex][pointIndex + 1] = mouseLocalPosition.y + pathOffset.y;\n pathObject.setDimensions();\n\n const newAnchorPointInParentPlane = anchorPoint\n .subtract(pathObject.pathOffset)\n .transform(pathObject.calcOwnMatrix());\n\n const diff = newAnchorPointInParentPlane.subtract(anchorPointInParentPlane);\n pathObject.left -= diff.x;\n pathObject.top -= diff.y;\n pathObject.set('dirty', true);\n return true;\n};\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nfunction pathPositionHandler(\n this: PathPointControl,\n dim: Point,\n finalMatrix: TMat2D,\n pathObject: Path,\n) {\n const { commandIndex, pointIndex } = this;\n return calcPathPointPosition(pathObject, commandIndex, pointIndex);\n}\n\n/**\n * This function defines what the control does.\n * It'll be called on every mouse move after a control has been clicked and is being dragged.\n * The function receives as argument the mouse event, the current transform object\n * and the current position in canvas coordinate `transform.target` is a reference to the\n * current object being transformed.\n */\nfunction pathActionHandler(\n this: PathPointControl,\n eventData: TPointerEvent,\n transform: TTransformAnchor,\n x: number,\n y: number,\n) {\n const { target } = transform;\n const { commandIndex, pointIndex } = this;\n const actionPerformed = movePathPoint(\n target as Path,\n x,\n y,\n commandIndex,\n pointIndex,\n );\n if (actionPerformed) {\n fireEvent(this.actionName as TModificationEvents, {\n ...commonEventInfo(eventData, transform, x, y),\n commandIndex,\n pointIndex,\n });\n }\n return actionPerformed;\n}\n\nconst indexFromPrevCommand = (previousCommandType: TSimpleParseCommandType) =>\n previousCommandType === 'C' ? 5 : previousCommandType === 'Q' ? 3 : 1;\n\nclass PathPointControl extends Control {\n declare commandIndex: number;\n declare pointIndex: number;\n declare controlFill: string;\n declare controlStroke: string;\n constructor(options?: Partial<PathPointControl>) {\n super(options);\n }\n\n render(\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path,\n ) {\n const overrides: ControlRenderingStyleOverride = {\n ...styleOverride,\n cornerColor: this.controlFill,\n cornerStrokeColor: this.controlStroke,\n transparentCorners: !this.controlFill,\n };\n super.render(ctx, left, top, overrides, fabricObject);\n }\n}\n\nclass PathControlPointControl extends PathPointControl {\n declare connectionDashArray?: number[];\n declare connectToCommandIndex: number;\n declare connectToPointIndex: number;\n constructor(options?: Partial<PathControlPointControl>) {\n super(options);\n }\n\n render(\n this: PathControlPointControl,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride | undefined,\n fabricObject: Path,\n ) {\n const { path } = fabricObject;\n const {\n commandIndex,\n pointIndex,\n connectToCommandIndex,\n connectToPointIndex,\n } = this;\n ctx.save();\n ctx.strokeStyle = this.controlStroke;\n if (this.connectionDashArray) {\n ctx.setLineDash(this.connectionDashArray);\n }\n const [commandType] = path[commandIndex];\n const point = calcPathPointPosition(\n fabricObject,\n connectToCommandIndex,\n connectToPointIndex,\n );\n\n if (commandType === 'Q') {\n // one control point connects to 2 points\n const point2 = calcPathPointPosition(\n fabricObject,\n commandIndex,\n pointIndex + 2,\n );\n ctx.moveTo(point2.x, point2.y);\n ctx.lineTo(left, top);\n } else {\n ctx.moveTo(left, top);\n }\n ctx.lineTo(point.x, point.y);\n ctx.stroke();\n ctx.restore();\n\n super.render(ctx, left, top, styleOverride, fabricObject);\n }\n}\n\nconst createControl = (\n commandIndexPos: number,\n pointIndexPos: number,\n isControlPoint: boolean,\n options: Partial<Control> & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n },\n connectToCommandIndex?: number,\n connectToPointIndex?: number,\n) =>\n new (isControlPoint ? PathControlPointControl : PathPointControl)({\n commandIndex: commandIndexPos,\n pointIndex: pointIndexPos,\n actionName: ACTION_NAME,\n positionHandler: pathPositionHandler,\n actionHandler: pathActionHandler,\n connectToCommandIndex,\n connectToPointIndex,\n ...options,\n ...(isControlPoint ? options.controlPointStyle : options.pointStyle),\n } as Partial<PathControlPointControl>);\n\nexport function createPathControls(\n path: Path,\n options: Partial<Control> & {\n controlPointStyle?: PathPointControlStyle;\n pointStyle?: PathPointControlStyle;\n } = {},\n): Record<string, Control> {\n const controls = {} as Record<string, Control>;\n let previousCommandType: TSimpleParseCommandType = 'M';\n path.path.forEach((command, commandIndex) => {\n const commandType = command[0];\n\n if (commandType !== 'Z') {\n controls[`c_${commandIndex}_${commandType}`] = createControl(\n commandIndex,\n command.length - 2,\n false,\n options,\n );\n }\n switch (commandType) {\n case 'C':\n controls[`c_${commandIndex}_C_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex - 1,\n indexFromPrevCommand(previousCommandType),\n );\n controls[`c_${commandIndex}_C_CP_2`] = createControl(\n commandIndex,\n 3,\n true,\n options,\n commandIndex,\n 5,\n );\n break;\n case 'Q':\n controls[`c_${commandIndex}_Q_CP_1`] = createControl(\n commandIndex,\n 1,\n true,\n options,\n commandIndex,\n 3,\n );\n break;\n }\n previousCommandType = commandType;\n });\n return controls;\n}\n"],"names":["ACTION_NAME","calcPathPointPosition","pathObject","commandIndex","pointIndex","path","pathOffset","command","Point","x","y","transform","multiplyTransformMatrices","getViewportTransform","calcTransformMatrix","movePathPoint","anchorCommand","length","anchorPoint","anchorPointInParentPlane","subtract","calcOwnMatrix","mouseLocalPosition","sendPointToPlane","undefined","setDimensions","newAnchorPointInParentPlane","diff","left","top","set","pathPositionHandler","dim","finalMatrix","pathActionHandler","eventData","target","actionPerformed","fireEvent","actionName","_objectSpread","commonEventInfo","indexFromPrevCommand","previousCommandType","PathPointControl","Control","constructor","options","render","ctx","styleOverride","fabricObject","overrides","cornerColor","controlFill","cornerStrokeColor","controlStroke","transparentCorners","PathControlPointControl","connectToCommandIndex","connectToPointIndex","save","strokeStyle","connectionDashArray","setLineDash","commandType","point","point2","moveTo","lineTo","stroke","restore","createControl","commandIndexPos","pointIndexPos","isControlPoint","positionHandler","actionHandler","controlPointStyle","pointStyle","createPathControls","arguments","controls","forEach","concat"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polyControl.min.mjs","sources":["../../../src/controls/polyControl.ts"],"sourcesContent":["import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Polyline } from '../shapes/Polyline';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { MODIFY_POLY } from '../constants';\n\nconst ACTION_NAME: TModificationEvents = MODIFY_POLY;\n\ntype TTransformAnchor = Transform & { pointIndex: number };\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nexport const createPolyPositionHandler = (pointIndex: number) => {\n return function (dim: Point, finalMatrix: TMat2D, polyObject: Polyline) {\n const { points, pathOffset } = polyObject;\n return new Point(points[pointIndex])\n .subtract(pathOffset)\n .transform(\n multiplyTransformMatrices(\n polyObject.getViewportTransform(),\n polyObject.calcTransformMatrix()
|
|
1
|
+
{"version":3,"file":"polyControl.min.mjs","sources":["../../../src/controls/polyControl.ts"],"sourcesContent":["import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Polyline } from '../shapes/Polyline';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { MODIFY_POLY } from '../constants';\n\nconst ACTION_NAME: TModificationEvents = MODIFY_POLY;\n\ntype TTransformAnchor = Transform & { pointIndex: number };\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nexport const createPolyPositionHandler = (pointIndex: number) => {\n return function (dim: Point, finalMatrix: TMat2D, polyObject: Polyline) {\n const { points, pathOffset } = polyObject;\n return new Point(points[pointIndex])\n .subtract(pathOffset)\n .transform(\n multiplyTransformMatrices(\n polyObject.getViewportTransform(),\n polyObject.calcTransformMatrix(),\n ),\n );\n };\n};\n\n/**\n * This function defines what the control does.\n * It'll be called on every mouse move after a control has been clicked and is being dragged.\n * The function receives as argument the mouse event, the current transform object\n * and the current position in canvas coordinate `transform.target` is a reference to the\n * current object being transformed.\n */\nexport const polyActionHandler = (\n eventData: TPointerEvent,\n transform: TTransformAnchor,\n x: number,\n y: number,\n) => {\n const { target, pointIndex } = transform;\n const poly = target as Polyline;\n const mouseLocalPosition = sendPointToPlane(\n new Point(x, y),\n undefined,\n poly.calcOwnMatrix(),\n );\n\n poly.points[pointIndex] = mouseLocalPosition.add(poly.pathOffset);\n poly.setDimensions();\n\n return true;\n};\n\n/**\n * Keep the polygon in the same position when we change its `width`/`height`/`top`/`left`.\n */\nexport const factoryPolyActionHandler = (\n pointIndex: number,\n fn: TransformActionHandler<TTransformAnchor>,\n) => {\n return function (\n eventData: TPointerEvent,\n transform: Transform,\n x: number,\n y: number,\n ) {\n const poly = transform.target as Polyline,\n anchorPoint = new Point(\n poly.points[(pointIndex > 0 ? pointIndex : poly.points.length) - 1],\n ),\n anchorPointInParentPlane = anchorPoint\n .subtract(poly.pathOffset)\n .transform(poly.calcOwnMatrix()),\n actionPerformed = fn(eventData, { ...transform, pointIndex }, x, y);\n\n const newAnchorPointInParentPlane = anchorPoint\n .subtract(poly.pathOffset)\n .transform(poly.calcOwnMatrix());\n\n const diff = newAnchorPointInParentPlane.subtract(anchorPointInParentPlane);\n poly.left -= diff.x;\n poly.top -= diff.y;\n\n return actionPerformed;\n };\n};\n\nexport const createPolyActionHandler = (pointIndex: number) =>\n wrapWithFireEvent(\n ACTION_NAME,\n factoryPolyActionHandler(pointIndex, polyActionHandler),\n );\n\nexport function createPolyControls(\n poly: Polyline,\n options?: Partial<Control>,\n): Record<string, Control>;\nexport function createPolyControls(\n numOfControls: number,\n options?: Partial<Control>,\n): Record<string, Control>;\nexport function createPolyControls(\n arg0: number | Polyline,\n options: Partial<Control> = {},\n) {\n const controls = {} as Record<string, Control>;\n for (\n let idx = 0;\n idx < (typeof arg0 === 'number' ? arg0 : arg0.points.length);\n idx++\n ) {\n controls[`p${idx}`] = new Control({\n actionName: ACTION_NAME,\n positionHandler: createPolyPositionHandler(idx),\n actionHandler: createPolyActionHandler(idx),\n ...options,\n });\n }\n return controls;\n}\n"],"names":["ACTION_NAME","MODIFY_POLY","createPolyPositionHandler","pointIndex","dim","finalMatrix","polyObject","points","pathOffset","Point","subtract","transform","multiplyTransformMatrices","getViewportTransform","calcTransformMatrix","polyActionHandler","eventData","x","y","target","poly","mouseLocalPosition","sendPointToPlane","undefined","calcOwnMatrix","add","setDimensions","factoryPolyActionHandler","fn","anchorPoint","length","anchorPointInParentPlane","actionPerformed","_objectSpread","diff","left","top","createPolyActionHandler","wrapWithFireEvent","createPolyControls","arg0","options","arguments","controls","idx","concat","Control","actionName","positionHandler","actionHandler"],"mappings":"qaAeA,MAAMA,EAAmCC,EAQ5BC,EAA6BC,GACjC,SAAUC,EAAYC,EAAqBC,GAChD,MAAMC,OAAEA,EAAMC,WAAEA,GAAeF,EAC/B,OAAO,IAAIG,EAAMF,EAAOJ,IACrBO,SAASF,GACTG,UACCC,EACEN,EAAWO,uBACXP,EAAWQ,yBAaRC,EAAoBA,CAC/BC,EACAL,EACAM,EACAC,KAEA,MAAMC,OAAEA,EAAMhB,WAAEA,GAAeQ,EACzBS,EAAOD,EACPE,EAAqBC,EACzB,IAAIb,EAAMQ,EAAGC,QACbK,EACAH,EAAKI,iBAMP,OAHAJ,EAAKb,OAAOJ,GAAckB,EAAmBI,IAAIL,EAAKZ,YACtDY,EAAKM,iBAEE,CAAI,EAMAC,EAA2BA,CACtCxB,EACAyB,IAEO,SACLZ,EACAL,EACAM,EACAC,GAEA,MAAME,EAAOT,EAAUQ,OACrBU,EAAc,IAAIpB,EAChBW,EAAKb,QAAQJ,EAAa,EAAIA,EAAaiB,EAAKb,OAAOuB,QAAU,IAEnEC,EAA2BF,EACxBnB,SAASU,EAAKZ,YACdG,UAAUS,EAAKI,iBAClBQ,EAAkBJ,EAAGZ,EAASiB,EAAAA,EAAA,GAAOtB,GAAS,GAAA,CAAER,eAAcc,EAAGC,GAM7DgB,EAJ8BL,EACjCnB,SAASU,EAAKZ,YACdG,UAAUS,EAAKI,iBAEuBd,SAASqB,GAIlD,OAHAX,EAAKe,MAAQD,EAAKjB,EAClBG,EAAKgB,KAAOF,EAAKhB,EAEVc,GAIEK,EAA2BlC,GACtCmC,EACEtC,EACA2B,EAAyBxB,EAAYY,IAWlC,SAASwB,EACdC,GAEA,IADAC,EAAyBC,UAAAZ,OAAA,QAAAP,IAAAmB,UAAA,GAAAA,UAAA,GAAG,CAAA,EAE5B,MAAMC,EAAW,CAAA,EACjB,IACE,IAAIC,EAAM,EACVA,GAAuB,iBAATJ,EAAoBA,EAAOA,EAAKjC,OAAOuB,QACrDc,IAEAD,EAAQ,IAAAE,OAAKD,IAAS,IAAIE,EAAOb,EAAA,CAC/Bc,WAAY/C,EACZgD,gBAAiB9C,EAA0B0C,GAC3CK,cAAeZ,EAAwBO,IACpCH,IAGP,OAAOE,CACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polyControl.mjs","sources":["../../../src/controls/polyControl.ts"],"sourcesContent":["import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Polyline } from '../shapes/Polyline';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { MODIFY_POLY } from '../constants';\n\nconst ACTION_NAME: TModificationEvents = MODIFY_POLY;\n\ntype TTransformAnchor = Transform & { pointIndex: number };\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nexport const createPolyPositionHandler = (pointIndex: number) => {\n return function (dim: Point, finalMatrix: TMat2D, polyObject: Polyline) {\n const { points, pathOffset } = polyObject;\n return new Point(points[pointIndex])\n .subtract(pathOffset)\n .transform(\n multiplyTransformMatrices(\n polyObject.getViewportTransform(),\n polyObject.calcTransformMatrix()
|
|
1
|
+
{"version":3,"file":"polyControl.mjs","sources":["../../../src/controls/polyControl.ts"],"sourcesContent":["import { Point } from '../Point';\nimport { Control } from './Control';\nimport type { TMat2D } from '../typedefs';\nimport type { Polyline } from '../shapes/Polyline';\nimport { multiplyTransformMatrices } from '../util/misc/matrix';\nimport type {\n TModificationEvents,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { sendPointToPlane } from '../util/misc/planeChange';\nimport { MODIFY_POLY } from '../constants';\n\nconst ACTION_NAME: TModificationEvents = MODIFY_POLY;\n\ntype TTransformAnchor = Transform & { pointIndex: number };\n\n/**\n * This function locates the controls.\n * It'll be used both for drawing and for interaction.\n */\nexport const createPolyPositionHandler = (pointIndex: number) => {\n return function (dim: Point, finalMatrix: TMat2D, polyObject: Polyline) {\n const { points, pathOffset } = polyObject;\n return new Point(points[pointIndex])\n .subtract(pathOffset)\n .transform(\n multiplyTransformMatrices(\n polyObject.getViewportTransform(),\n polyObject.calcTransformMatrix(),\n ),\n );\n };\n};\n\n/**\n * This function defines what the control does.\n * It'll be called on every mouse move after a control has been clicked and is being dragged.\n * The function receives as argument the mouse event, the current transform object\n * and the current position in canvas coordinate `transform.target` is a reference to the\n * current object being transformed.\n */\nexport const polyActionHandler = (\n eventData: TPointerEvent,\n transform: TTransformAnchor,\n x: number,\n y: number,\n) => {\n const { target, pointIndex } = transform;\n const poly = target as Polyline;\n const mouseLocalPosition = sendPointToPlane(\n new Point(x, y),\n undefined,\n poly.calcOwnMatrix(),\n );\n\n poly.points[pointIndex] = mouseLocalPosition.add(poly.pathOffset);\n poly.setDimensions();\n\n return true;\n};\n\n/**\n * Keep the polygon in the same position when we change its `width`/`height`/`top`/`left`.\n */\nexport const factoryPolyActionHandler = (\n pointIndex: number,\n fn: TransformActionHandler<TTransformAnchor>,\n) => {\n return function (\n eventData: TPointerEvent,\n transform: Transform,\n x: number,\n y: number,\n ) {\n const poly = transform.target as Polyline,\n anchorPoint = new Point(\n poly.points[(pointIndex > 0 ? pointIndex : poly.points.length) - 1],\n ),\n anchorPointInParentPlane = anchorPoint\n .subtract(poly.pathOffset)\n .transform(poly.calcOwnMatrix()),\n actionPerformed = fn(eventData, { ...transform, pointIndex }, x, y);\n\n const newAnchorPointInParentPlane = anchorPoint\n .subtract(poly.pathOffset)\n .transform(poly.calcOwnMatrix());\n\n const diff = newAnchorPointInParentPlane.subtract(anchorPointInParentPlane);\n poly.left -= diff.x;\n poly.top -= diff.y;\n\n return actionPerformed;\n };\n};\n\nexport const createPolyActionHandler = (pointIndex: number) =>\n wrapWithFireEvent(\n ACTION_NAME,\n factoryPolyActionHandler(pointIndex, polyActionHandler),\n );\n\nexport function createPolyControls(\n poly: Polyline,\n options?: Partial<Control>,\n): Record<string, Control>;\nexport function createPolyControls(\n numOfControls: number,\n options?: Partial<Control>,\n): Record<string, Control>;\nexport function createPolyControls(\n arg0: number | Polyline,\n options: Partial<Control> = {},\n) {\n const controls = {} as Record<string, Control>;\n for (\n let idx = 0;\n idx < (typeof arg0 === 'number' ? arg0 : arg0.points.length);\n idx++\n ) {\n controls[`p${idx}`] = new Control({\n actionName: ACTION_NAME,\n positionHandler: createPolyPositionHandler(idx),\n actionHandler: createPolyActionHandler(idx),\n ...options,\n });\n }\n return controls;\n}\n"],"names":["ACTION_NAME","MODIFY_POLY","createPolyPositionHandler","pointIndex","dim","finalMatrix","polyObject","points","pathOffset","Point","subtract","transform","multiplyTransformMatrices","getViewportTransform","calcTransformMatrix","polyActionHandler","eventData","x","y","target","poly","mouseLocalPosition","sendPointToPlane","undefined","calcOwnMatrix","add","setDimensions","factoryPolyActionHandler","fn","anchorPoint","length","anchorPointInParentPlane","actionPerformed","_objectSpread","newAnchorPointInParentPlane","diff","left","top","createPolyActionHandler","wrapWithFireEvent","createPolyControls","arg0","options","arguments","controls","idx","concat","Control","actionName","positionHandler","actionHandler"],"mappings":";;;;;;;;AAeA,MAAMA,WAAgC,GAAGC,WAAW,CAAA;AAIpD;AACA;AACA;AACA;AACaC,MAAAA,yBAAyB,GAAIC,UAAkB,IAAK;AAC/D,EAAA,OAAO,UAAUC,GAAU,EAAEC,WAAmB,EAAEC,UAAoB,EAAE;IACtE,MAAM;MAAEC,MAAM;AAAEC,MAAAA,UAAAA;AAAW,KAAC,GAAGF,UAAU,CAAA;AACzC,IAAA,OAAO,IAAIG,KAAK,CAACF,MAAM,CAACJ,UAAU,CAAC,CAAC,CACjCO,QAAQ,CAACF,UAAU,CAAC,CACpBG,SAAS,CACRC,yBAAyB,CACvBN,UAAU,CAACO,oBAAoB,EAAE,EACjCP,UAAU,CAACQ,mBAAmB,EAChC,CACF,CAAC,CAAA;GACJ,CAAA;AACH,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,iBAAiB,GAAGA,CAC/BC,SAAwB,EACxBL,SAA2B,EAC3BM,CAAS,EACTC,CAAS,KACN;EACH,MAAM;IAAEC,MAAM;AAAEhB,IAAAA,UAAAA;AAAW,GAAC,GAAGQ,SAAS,CAAA;EACxC,MAAMS,IAAI,GAAGD,MAAkB,CAAA;AAC/B,EAAA,MAAME,kBAAkB,GAAGC,gBAAgB,CACzC,IAAIb,KAAK,CAACQ,CAAC,EAAEC,CAAC,CAAC,EACfK,SAAS,EACTH,IAAI,CAACI,aAAa,EACpB,CAAC,CAAA;AAEDJ,EAAAA,IAAI,CAACb,MAAM,CAACJ,UAAU,CAAC,GAAGkB,kBAAkB,CAACI,GAAG,CAACL,IAAI,CAACZ,UAAU,CAAC,CAAA;EACjEY,IAAI,CAACM,aAAa,EAAE,CAAA;AAEpB,EAAA,OAAO,IAAI,CAAA;AACb,EAAC;;AAED;AACA;AACA;MACaC,wBAAwB,GAAGA,CACtCxB,UAAkB,EAClByB,EAA4C,KACzC;EACH,OAAO,UACLZ,SAAwB,EACxBL,SAAoB,EACpBM,CAAS,EACTC,CAAS,EACT;AACA,IAAA,MAAME,IAAI,GAAGT,SAAS,CAACQ,MAAkB;MACvCU,WAAW,GAAG,IAAIpB,KAAK,CACrBW,IAAI,CAACb,MAAM,CAAC,CAACJ,UAAU,GAAG,CAAC,GAAGA,UAAU,GAAGiB,IAAI,CAACb,MAAM,CAACuB,MAAM,IAAI,CAAC,CACpE,CAAC;AACDC,MAAAA,wBAAwB,GAAGF,WAAW,CACnCnB,QAAQ,CAACU,IAAI,CAACZ,UAAU,CAAC,CACzBG,SAAS,CAACS,IAAI,CAACI,aAAa,EAAE,CAAC;MAClCQ,eAAe,GAAGJ,EAAE,CAACZ,SAAS,EAAAiB,cAAA,CAAAA,cAAA,CAAA,EAAA,EAAOtB,SAAS,CAAA,EAAA,EAAA,EAAA;AAAER,QAAAA,UAAAA;OAAcc,CAAAA,EAAAA,CAAC,EAAEC,CAAC,CAAC,CAAA;AAErE,IAAA,MAAMgB,2BAA2B,GAAGL,WAAW,CAC5CnB,QAAQ,CAACU,IAAI,CAACZ,UAAU,CAAC,CACzBG,SAAS,CAACS,IAAI,CAACI,aAAa,EAAE,CAAC,CAAA;AAElC,IAAA,MAAMW,IAAI,GAAGD,2BAA2B,CAACxB,QAAQ,CAACqB,wBAAwB,CAAC,CAAA;AAC3EX,IAAAA,IAAI,CAACgB,IAAI,IAAID,IAAI,CAAClB,CAAC,CAAA;AACnBG,IAAAA,IAAI,CAACiB,GAAG,IAAIF,IAAI,CAACjB,CAAC,CAAA;AAElB,IAAA,OAAOc,eAAe,CAAA;GACvB,CAAA;AACH,EAAC;AAEYM,MAAAA,uBAAuB,GAAInC,UAAkB,IACxDoC,iBAAiB,CACfvC,WAAW,EACX2B,wBAAwB,CAACxB,UAAU,EAAEY,iBAAiB,CACxD,EAAC;AAUI,SAASyB,kBAAkBA,CAChCC,IAAuB,EAEvB;AAAA,EAAA,IADAC,OAAyB,GAAAC,SAAA,CAAAb,MAAA,GAAA,CAAA,IAAAa,SAAA,CAAA,CAAA,CAAA,KAAApB,SAAA,GAAAoB,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;EAE9B,MAAMC,QAAQ,GAAG,EAA6B,CAAA;EAC9C,KACE,IAAIC,GAAG,GAAG,CAAC,EACXA,GAAG,IAAI,OAAOJ,IAAI,KAAK,QAAQ,GAAGA,IAAI,GAAGA,IAAI,CAAClC,MAAM,CAACuB,MAAM,CAAC,EAC5De,GAAG,EAAE,EACL;IACAD,QAAQ,CAAA,GAAA,CAAAE,MAAA,CAAKD,GAAG,EAAG,GAAG,IAAIE,OAAO,CAAAd,cAAA,CAAA;AAC/Be,MAAAA,UAAU,EAAEhD,WAAW;AACvBiD,MAAAA,eAAe,EAAE/C,yBAAyB,CAAC2C,GAAG,CAAC;MAC/CK,aAAa,EAAEZ,uBAAuB,CAACO,GAAG,CAAA;KACvCH,EAAAA,OAAO,CACX,CAAC,CAAA;AACJ,GAAA;AACA,EAAA,OAAOE,QAAQ,CAAA;AACjB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rotate.min.mjs","sources":["../../../src/controls/rotate.ts"],"sourcesContent":["import type {\n ControlCursorCallback,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { ROTATING } from '../constants';\nimport { radiansToDegrees } from '../util/misc/radiansDegreesConversion';\nimport { isLocked, NOT_ALLOWED_CURSOR } from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\n\n/**\n * Find the correct style for the control that is used for rotation.\n * this function is very simple and it just take care of not-allowed or standard cursor\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const rotationStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject
|
|
1
|
+
{"version":3,"file":"rotate.min.mjs","sources":["../../../src/controls/rotate.ts"],"sourcesContent":["import type {\n ControlCursorCallback,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { ROTATING } from '../constants';\nimport { radiansToDegrees } from '../util/misc/radiansDegreesConversion';\nimport { isLocked, NOT_ALLOWED_CURSOR } from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\n\n/**\n * Find the correct style for the control that is used for rotation.\n * this function is very simple and it just take care of not-allowed or standard cursor\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const rotationStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n if (fabricObject.lockRotation) {\n return NOT_ALLOWED_CURSOR;\n }\n return control.cursorStyle;\n};\n\n/**\n * Action handler for rotation and snapping, without anchor point.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n * @private\n */\nconst rotateObjectWithSnapping: TransformActionHandler = (\n eventData,\n { target, ex, ey, theta, originX, originY },\n x,\n y,\n) => {\n const pivotPoint = target.translateToOriginPoint(\n target.getRelativeCenterPoint(),\n originX,\n originY,\n );\n\n if (isLocked(target, 'lockRotation')) {\n return false;\n }\n\n const lastAngle = Math.atan2(ey - pivotPoint.y, ex - pivotPoint.x),\n curAngle = Math.atan2(y - pivotPoint.y, x - pivotPoint.x);\n let angle = radiansToDegrees(curAngle - lastAngle + theta);\n\n if (target.snapAngle && target.snapAngle > 0) {\n const snapAngle = target.snapAngle,\n snapThreshold = target.snapThreshold || snapAngle,\n rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle,\n leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle;\n\n if (Math.abs(angle - leftAngleLocked) < snapThreshold) {\n angle = leftAngleLocked;\n } else if (Math.abs(angle - rightAngleLocked) < snapThreshold) {\n angle = rightAngleLocked;\n }\n }\n\n // normalize angle to positive value\n if (angle < 0) {\n angle = 360 + angle;\n }\n angle %= 360;\n\n const hasRotated = target.angle !== angle;\n // TODO: why aren't we using set?\n target.angle = angle;\n return hasRotated;\n};\n\nexport const rotationWithSnapping = wrapWithFireEvent(\n ROTATING,\n wrapWithFixedAnchor(rotateObjectWithSnapping),\n);\n"],"names":["rotationStyleHandler","eventData","control","fabricObject","lockRotation","NOT_ALLOWED_CURSOR","cursorStyle","rotationWithSnapping","wrapWithFireEvent","ROTATING","wrapWithFixedAnchor","rotateObjectWithSnapping","_ref","x","y","target","ex","ey","theta","originX","originY","pivotPoint","translateToOriginPoint","getRelativeCenterPoint","isLocked","lastAngle","Math","atan2","curAngle","angle","radiansToDegrees","snapAngle","snapThreshold","rightAngleLocked","ceil","leftAngleLocked","floor","abs","hasRotated"],"mappings":"uUAkBO,MAAMA,EAA8CA,CACzDC,EACAC,EACAC,IAEIA,EAAaC,aACRC,EAEFH,EAAQI,YA0DJC,EAAuBC,EAClCC,EACAC,GA/CuDC,CACvDV,EAASW,EAETC,EACAC,KACG,IAHHC,OAAEA,EAAMC,GAAEA,EAAEC,GAAEA,EAAEC,MAAEA,EAAKC,QAAEA,EAAOC,QAAEA,GAASR,EAI3C,MAAMS,EAAaN,EAAOO,uBACxBP,EAAOQ,yBACPJ,EACAC,GAGF,GAAII,EAAST,EAAQ,gBACnB,OAAO,EAGT,MAAMU,EAAYC,KAAKC,MAAMV,EAAKI,EAAWP,EAAGE,EAAKK,EAAWR,GAC9De,EAAWF,KAAKC,MAAMb,EAAIO,EAAWP,EAAGD,EAAIQ,EAAWR,GACzD,IAAIgB,EAAQC,EAAiBF,EAAWH,EAAYP,GAEpD,GAAIH,EAAOgB,WAAahB,EAAOgB,UAAY,EAAG,CAC5C,MAAMA,EAAYhB,EAAOgB,UACvBC,EAAgBjB,EAAOiB,eAAiBD,EACxCE,EAAmBP,KAAKQ,KAAKL,EAAQE,GAAaA,EAClDI,EAAkBT,KAAKU,MAAMP,EAAQE,GAAaA,EAEhDL,KAAKW,IAAIR,EAAQM,GAAmBH,EACtCH,EAAQM,EACCT,KAAKW,IAAIR,EAAQI,GAAoBD,IAC9CH,EAAQI,EAEZ,CAGIJ,EAAQ,IACVA,EAAQ,IAAMA,GAEhBA,GAAS,IAET,MAAMS,EAAavB,EAAOc,QAAUA,EAGpC,OADAd,EAAOc,MAAQA,EACRS,CAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rotate.mjs","sources":["../../../src/controls/rotate.ts"],"sourcesContent":["import type {\n ControlCursorCallback,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { ROTATING } from '../constants';\nimport { radiansToDegrees } from '../util/misc/radiansDegreesConversion';\nimport { isLocked, NOT_ALLOWED_CURSOR } from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\n\n/**\n * Find the correct style for the control that is used for rotation.\n * this function is very simple and it just take care of not-allowed or standard cursor\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const rotationStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject
|
|
1
|
+
{"version":3,"file":"rotate.mjs","sources":["../../../src/controls/rotate.ts"],"sourcesContent":["import type {\n ControlCursorCallback,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { ROTATING } from '../constants';\nimport { radiansToDegrees } from '../util/misc/radiansDegreesConversion';\nimport { isLocked, NOT_ALLOWED_CURSOR } from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\n\n/**\n * Find the correct style for the control that is used for rotation.\n * this function is very simple and it just take care of not-allowed or standard cursor\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const rotationStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n if (fabricObject.lockRotation) {\n return NOT_ALLOWED_CURSOR;\n }\n return control.cursorStyle;\n};\n\n/**\n * Action handler for rotation and snapping, without anchor point.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n * @private\n */\nconst rotateObjectWithSnapping: TransformActionHandler = (\n eventData,\n { target, ex, ey, theta, originX, originY },\n x,\n y,\n) => {\n const pivotPoint = target.translateToOriginPoint(\n target.getRelativeCenterPoint(),\n originX,\n originY,\n );\n\n if (isLocked(target, 'lockRotation')) {\n return false;\n }\n\n const lastAngle = Math.atan2(ey - pivotPoint.y, ex - pivotPoint.x),\n curAngle = Math.atan2(y - pivotPoint.y, x - pivotPoint.x);\n let angle = radiansToDegrees(curAngle - lastAngle + theta);\n\n if (target.snapAngle && target.snapAngle > 0) {\n const snapAngle = target.snapAngle,\n snapThreshold = target.snapThreshold || snapAngle,\n rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle,\n leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle;\n\n if (Math.abs(angle - leftAngleLocked) < snapThreshold) {\n angle = leftAngleLocked;\n } else if (Math.abs(angle - rightAngleLocked) < snapThreshold) {\n angle = rightAngleLocked;\n }\n }\n\n // normalize angle to positive value\n if (angle < 0) {\n angle = 360 + angle;\n }\n angle %= 360;\n\n const hasRotated = target.angle !== angle;\n // TODO: why aren't we using set?\n target.angle = angle;\n return hasRotated;\n};\n\nexport const rotationWithSnapping = wrapWithFireEvent(\n ROTATING,\n wrapWithFixedAnchor(rotateObjectWithSnapping),\n);\n"],"names":["rotationStyleHandler","eventData","control","fabricObject","lockRotation","NOT_ALLOWED_CURSOR","cursorStyle","rotateObjectWithSnapping","_ref","x","y","target","ex","ey","theta","originX","originY","pivotPoint","translateToOriginPoint","getRelativeCenterPoint","isLocked","lastAngle","Math","atan2","curAngle","angle","radiansToDegrees","snapAngle","snapThreshold","rightAngleLocked","ceil","leftAngleLocked","floor","abs","hasRotated","rotationWithSnapping","wrapWithFireEvent","ROTATING","wrapWithFixedAnchor"],"mappings":";;;;;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,oBAA2C,GAAGA,CACzDC,SAAS,EACTC,OAAO,EACPC,YAAY,KACT;EACH,IAAIA,YAAY,CAACC,YAAY,EAAE;AAC7B,IAAA,OAAOC,kBAAkB,CAAA;AAC3B,GAAA;EACA,OAAOH,OAAO,CAACI,WAAW,CAAA;AAC5B,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,wBAAgD,GAAGA,CACvDN,SAAS,EAAAO,IAAA,EAETC,CAAC,EACDC,CAAC,KACE;EAAA,IAHH;IAAEC,MAAM;IAAEC,EAAE;IAAEC,EAAE;IAAEC,KAAK;IAAEC,OAAO;AAAEC,IAAAA,OAAAA;AAAQ,GAAC,GAAAR,IAAA,CAAA;AAI3C,EAAA,MAAMS,UAAU,GAAGN,MAAM,CAACO,sBAAsB,CAC9CP,MAAM,CAACQ,sBAAsB,EAAE,EAC/BJ,OAAO,EACPC,OACF,CAAC,CAAA;AAED,EAAA,IAAII,QAAQ,CAACT,MAAM,EAAE,cAAc,CAAC,EAAE;AACpC,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AAEA,EAAA,MAAMU,SAAS,GAAGC,IAAI,CAACC,KAAK,CAACV,EAAE,GAAGI,UAAU,CAACP,CAAC,EAAEE,EAAE,GAAGK,UAAU,CAACR,CAAC,CAAC;AAChEe,IAAAA,QAAQ,GAAGF,IAAI,CAACC,KAAK,CAACb,CAAC,GAAGO,UAAU,CAACP,CAAC,EAAED,CAAC,GAAGQ,UAAU,CAACR,CAAC,CAAC,CAAA;EAC3D,IAAIgB,KAAK,GAAGC,gBAAgB,CAACF,QAAQ,GAAGH,SAAS,GAAGP,KAAK,CAAC,CAAA;EAE1D,IAAIH,MAAM,CAACgB,SAAS,IAAIhB,MAAM,CAACgB,SAAS,GAAG,CAAC,EAAE;AAC5C,IAAA,MAAMA,SAAS,GAAGhB,MAAM,CAACgB,SAAS;AAChCC,MAAAA,aAAa,GAAGjB,MAAM,CAACiB,aAAa,IAAID,SAAS;MACjDE,gBAAgB,GAAGP,IAAI,CAACQ,IAAI,CAACL,KAAK,GAAGE,SAAS,CAAC,GAAGA,SAAS;MAC3DI,eAAe,GAAGT,IAAI,CAACU,KAAK,CAACP,KAAK,GAAGE,SAAS,CAAC,GAAGA,SAAS,CAAA;IAE7D,IAAIL,IAAI,CAACW,GAAG,CAACR,KAAK,GAAGM,eAAe,CAAC,GAAGH,aAAa,EAAE;AACrDH,MAAAA,KAAK,GAAGM,eAAe,CAAA;AACzB,KAAC,MAAM,IAAIT,IAAI,CAACW,GAAG,CAACR,KAAK,GAAGI,gBAAgB,CAAC,GAAGD,aAAa,EAAE;AAC7DH,MAAAA,KAAK,GAAGI,gBAAgB,CAAA;AAC1B,KAAA;AACF,GAAA;;AAEA;EACA,IAAIJ,KAAK,GAAG,CAAC,EAAE;IACbA,KAAK,GAAG,GAAG,GAAGA,KAAK,CAAA;AACrB,GAAA;AACAA,EAAAA,KAAK,IAAI,GAAG,CAAA;AAEZ,EAAA,MAAMS,UAAU,GAAGvB,MAAM,CAACc,KAAK,KAAKA,KAAK,CAAA;AACzC;EACAd,MAAM,CAACc,KAAK,GAAGA,KAAK,CAAA;AACpB,EAAA,OAAOS,UAAU,CAAA;AACnB,CAAC,CAAA;AAEM,MAAMC,oBAAoB,GAAGC,iBAAiB,CACnDC,QAAQ,EACRC,mBAAmB,CAAC/B,wBAAwB,CAC9C;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scale.min.mjs","sources":["../../../src/controls/scale.ts"],"sourcesContent":["import type {\n ControlCursorCallback,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TAxis } from '../typedefs';\nimport type { Canvas } from '../canvas/Canvas';\nimport {\n findCornerQuadrant,\n getLocalPoint,\n invertOrigin,\n isLocked,\n isTransformCentered,\n NOT_ALLOWED_CURSOR,\n} from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\nimport { SCALE_X, SCALE_Y, SCALING } from '../constants';\n\ntype ScaleTransform = Transform & {\n gestureScale?: number;\n signX?: number;\n signY?: number;\n};\n\ntype ScaleBy = TAxis | 'equally' | '' | undefined;\n\n/**\n * Inspect event and fabricObject properties to understand if the scaling action\n * @param {Event} eventData from the user action\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @return {Boolean} true if scale is proportional\n */\nexport function scaleIsProportional(\n eventData: TPointerEvent,\n fabricObject: FabricObject\n): boolean {\n const canvas = fabricObject.canvas as Canvas,\n uniformIsToggled = eventData[canvas.uniScaleKey!];\n return (\n (canvas.uniformScaling && !uniformIsToggled) ||\n (!canvas.uniformScaling && uniformIsToggled)\n );\n}\n\n/**\n * Inspect fabricObject to understand if the current scaling action is allowed\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @param {String} by 'x' or 'y' or ''\n * @param {Boolean} scaleProportionally true if we are trying to scale proportionally\n * @return {Boolean} true if scaling is not allowed at current conditions\n */\nexport function scalingIsForbidden(\n fabricObject: FabricObject,\n by: ScaleBy,\n scaleProportionally: boolean\n) {\n const lockX = isLocked(fabricObject, 'lockScalingX'),\n lockY = isLocked(fabricObject, 'lockScalingY');\n if (lockX && lockY) {\n return true;\n }\n if (!by && (lockX || lockY) && scaleProportionally) {\n return true;\n }\n if (lockX && by === 'x') {\n return true;\n }\n if (lockY && by === 'y') {\n return true;\n }\n // code crashes because of a division by 0 if a 0 sized object is scaled\n // forbid to prevent scaling to happen. ISSUE-9475\n const { width, height, strokeWidth } = fabricObject;\n if (width === 0 && strokeWidth === 0 && by !== 'y') {\n return true;\n }\n if (height === 0 && strokeWidth === 0 && by !== 'x') {\n return true;\n }\n return false;\n}\n\nconst scaleMap = ['e', 'se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'];\n\n/**\n * return the correct cursor style for the scale action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const scaleCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject\n) => {\n const scaleProportionally = scaleIsProportional(eventData, fabricObject),\n by =\n control.x !== 0 && control.y === 0\n ? 'x'\n : control.x === 0 && control.y !== 0\n ? 'y'\n : '';\n if (scalingIsForbidden(fabricObject, by, scaleProportionally)) {\n return NOT_ALLOWED_CURSOR;\n }\n const n = findCornerQuadrant(fabricObject, control);\n return `${scaleMap[n]}-resize`;\n};\n\n/**\n * Basic scaling logic, reused with different constrain for scaling X,Y, freely or equally.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @param {Object} options additional information for scaling\n * @param {String} options.by 'x', 'y', 'equally' or '' to indicate type of scaling\n * @return {Boolean} true if some change happened\n * @private\n */\nfunction scaleObject(\n eventData: TPointerEvent,\n transform: ScaleTransform,\n x: number,\n y: number,\n options: { by?: ScaleBy } = {}\n) {\n const target = transform.target,\n by = options.by,\n scaleProportionally = scaleIsProportional(eventData, target),\n forbidScaling = scalingIsForbidden(target, by, scaleProportionally);\n let newPoint, scaleX, scaleY, dim, signX, signY;\n\n if (forbidScaling) {\n return false;\n }\n if (transform.gestureScale) {\n scaleX = transform.scaleX * transform.gestureScale;\n scaleY = transform.scaleY * transform.gestureScale;\n } else {\n newPoint = getLocalPoint(\n transform,\n transform.originX,\n transform.originY,\n x,\n y\n );\n // use of sign: We use sign to detect change of direction of an action. sign usually change when\n // we cross the origin point with the mouse. So a scale flip for example. There is an issue when scaling\n // by center and scaling using one middle control ( default: mr, mt, ml, mb), the mouse movement can easily\n // cross many time the origin point and flip the object. so we need a way to filter out the noise.\n // This ternary here should be ok to filter out X scaling when we want Y only and vice versa.\n signX = by !== 'y' ? Math.sign(newPoint.x || transform.signX || 1) : 1;\n signY = by !== 'x' ? Math.sign(newPoint.y || transform.signY || 1) : 1;\n if (!transform.signX) {\n transform.signX = signX;\n }\n if (!transform.signY) {\n transform.signY = signY;\n }\n\n if (\n isLocked(target, 'lockScalingFlip') &&\n (transform.signX !== signX || transform.signY !== signY)\n ) {\n return false;\n }\n\n dim = target._getTransformedDimensions();\n // missing detection of flip and logic to switch the origin\n if (scaleProportionally && !by) {\n // uniform scaling\n const distance = Math.abs(newPoint.x) + Math.abs(newPoint.y),\n { original } = transform,\n originalDistance =\n Math.abs((dim.x * original.scaleX) / target.scaleX) +\n Math.abs((dim.y * original.scaleY) / target.scaleY),\n scale = distance / originalDistance;\n scaleX = original.scaleX * scale;\n scaleY = original.scaleY * scale;\n } else {\n scaleX = Math.abs((newPoint.x * target.scaleX) / dim.x);\n scaleY = Math.abs((newPoint.y * target.scaleY) / dim.y);\n }\n // if we are scaling by center, we need to double the scale\n if (isTransformCentered(transform)) {\n scaleX *= 2;\n scaleY *= 2;\n }\n if (transform.signX !== signX && by !== 'y') {\n transform.originX = invertOrigin(transform.originX);\n scaleX *= -1;\n transform.signX = signX;\n }\n if (transform.signY !== signY && by !== 'x') {\n transform.originY = invertOrigin(transform.originY);\n scaleY *= -1;\n transform.signY = signY;\n }\n }\n // minScale is taken care of in the setter.\n const oldScaleX = target.scaleX,\n oldScaleY = target.scaleY;\n if (!by) {\n !isLocked(target, 'lockScalingX') && target.set(SCALE_X, scaleX);\n !isLocked(target, 'lockScalingY') && target.set(SCALE_Y, scaleY);\n } else {\n // forbidden cases already handled on top here.\n by === 'x' && target.set(SCALE_X, scaleX);\n by === 'y' && target.set(SCALE_Y, scaleY);\n }\n return oldScaleX !== target.scaleX || oldScaleY !== target.scaleY;\n}\n\n/**\n * Generic scaling logic, to scale from corners either equally or freely.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scaleObjectFromCorner: TransformActionHandler<ScaleTransform> = (\n eventData,\n transform,\n x,\n y\n) => {\n return scaleObject(eventData, transform, x, y);\n};\n\n/**\n * Scaling logic for the X axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectX: TransformActionHandler<ScaleTransform> = (\n eventData,\n transform,\n x,\n y\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'x' });\n};\n\n/**\n * Scaling logic for the Y axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectY: TransformActionHandler<ScaleTransform> = (\n eventData,\n transform,\n x,\n y\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'y' });\n};\n\nexport const scalingEqually = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectFromCorner)\n);\n\nexport const scalingX = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectX)\n);\n\nexport const scalingY = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectY)\n);\n"],"names":["scaleIsProportional","eventData","fabricObject","canvas","uniformIsToggled","uniScaleKey","uniformScaling","scalingIsForbidden","by","scaleProportionally","lockX","isLocked","lockY","width","height","strokeWidth","scaleMap","scaleCursorStyleHandler","control","x","y","NOT_ALLOWED_CURSOR","n","findCornerQuadrant","concat","scaleObject","transform","options","arguments","length","undefined","target","newPoint","scaleX","scaleY","dim","signX","signY","gestureScale","getLocalPoint","originX","originY","Math","sign","_getTransformedDimensions","distance","abs","original","scale","isTransformCentered","invertOrigin","oldScaleX","oldScaleY","set","SCALE_X","SCALE_Y","scaleObjectFromCorner","scalingEqually","wrapWithFireEvent","SCALING","wrapWithFixedAnchor","scalingX","scaleObjectX","scalingY","scaleObjectY"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scale.min.mjs","sources":["../../../src/controls/scale.ts"],"sourcesContent":["import type {\n ControlCursorCallback,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TAxis } from '../typedefs';\nimport type { Canvas } from '../canvas/Canvas';\nimport {\n findCornerQuadrant,\n getLocalPoint,\n invertOrigin,\n isLocked,\n isTransformCentered,\n NOT_ALLOWED_CURSOR,\n} from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\nimport { SCALE_X, SCALE_Y, SCALING } from '../constants';\n\ntype ScaleTransform = Transform & {\n gestureScale?: number;\n signX?: number;\n signY?: number;\n};\n\ntype ScaleBy = TAxis | 'equally' | '' | undefined;\n\n/**\n * Inspect event and fabricObject properties to understand if the scaling action\n * @param {Event} eventData from the user action\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @return {Boolean} true if scale is proportional\n */\nexport function scaleIsProportional(\n eventData: TPointerEvent,\n fabricObject: FabricObject,\n): boolean {\n const canvas = fabricObject.canvas as Canvas,\n uniformIsToggled = eventData[canvas.uniScaleKey!];\n return (\n (canvas.uniformScaling && !uniformIsToggled) ||\n (!canvas.uniformScaling && uniformIsToggled)\n );\n}\n\n/**\n * Inspect fabricObject to understand if the current scaling action is allowed\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @param {String} by 'x' or 'y' or ''\n * @param {Boolean} scaleProportionally true if we are trying to scale proportionally\n * @return {Boolean} true if scaling is not allowed at current conditions\n */\nexport function scalingIsForbidden(\n fabricObject: FabricObject,\n by: ScaleBy,\n scaleProportionally: boolean,\n) {\n const lockX = isLocked(fabricObject, 'lockScalingX'),\n lockY = isLocked(fabricObject, 'lockScalingY');\n if (lockX && lockY) {\n return true;\n }\n if (!by && (lockX || lockY) && scaleProportionally) {\n return true;\n }\n if (lockX && by === 'x') {\n return true;\n }\n if (lockY && by === 'y') {\n return true;\n }\n // code crashes because of a division by 0 if a 0 sized object is scaled\n // forbid to prevent scaling to happen. ISSUE-9475\n const { width, height, strokeWidth } = fabricObject;\n if (width === 0 && strokeWidth === 0 && by !== 'y') {\n return true;\n }\n if (height === 0 && strokeWidth === 0 && by !== 'x') {\n return true;\n }\n return false;\n}\n\nconst scaleMap = ['e', 'se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'];\n\n/**\n * return the correct cursor style for the scale action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const scaleCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n const scaleProportionally = scaleIsProportional(eventData, fabricObject),\n by =\n control.x !== 0 && control.y === 0\n ? 'x'\n : control.x === 0 && control.y !== 0\n ? 'y'\n : '';\n if (scalingIsForbidden(fabricObject, by, scaleProportionally)) {\n return NOT_ALLOWED_CURSOR;\n }\n const n = findCornerQuadrant(fabricObject, control);\n return `${scaleMap[n]}-resize`;\n};\n\n/**\n * Basic scaling logic, reused with different constrain for scaling X,Y, freely or equally.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @param {Object} options additional information for scaling\n * @param {String} options.by 'x', 'y', 'equally' or '' to indicate type of scaling\n * @return {Boolean} true if some change happened\n * @private\n */\nfunction scaleObject(\n eventData: TPointerEvent,\n transform: ScaleTransform,\n x: number,\n y: number,\n options: { by?: ScaleBy } = {},\n) {\n const target = transform.target,\n by = options.by,\n scaleProportionally = scaleIsProportional(eventData, target),\n forbidScaling = scalingIsForbidden(target, by, scaleProportionally);\n let newPoint, scaleX, scaleY, dim, signX, signY;\n\n if (forbidScaling) {\n return false;\n }\n if (transform.gestureScale) {\n scaleX = transform.scaleX * transform.gestureScale;\n scaleY = transform.scaleY * transform.gestureScale;\n } else {\n newPoint = getLocalPoint(\n transform,\n transform.originX,\n transform.originY,\n x,\n y,\n );\n // use of sign: We use sign to detect change of direction of an action. sign usually change when\n // we cross the origin point with the mouse. So a scale flip for example. There is an issue when scaling\n // by center and scaling using one middle control ( default: mr, mt, ml, mb), the mouse movement can easily\n // cross many time the origin point and flip the object. so we need a way to filter out the noise.\n // This ternary here should be ok to filter out X scaling when we want Y only and vice versa.\n signX = by !== 'y' ? Math.sign(newPoint.x || transform.signX || 1) : 1;\n signY = by !== 'x' ? Math.sign(newPoint.y || transform.signY || 1) : 1;\n if (!transform.signX) {\n transform.signX = signX;\n }\n if (!transform.signY) {\n transform.signY = signY;\n }\n\n if (\n isLocked(target, 'lockScalingFlip') &&\n (transform.signX !== signX || transform.signY !== signY)\n ) {\n return false;\n }\n\n dim = target._getTransformedDimensions();\n // missing detection of flip and logic to switch the origin\n if (scaleProportionally && !by) {\n // uniform scaling\n const distance = Math.abs(newPoint.x) + Math.abs(newPoint.y),\n { original } = transform,\n originalDistance =\n Math.abs((dim.x * original.scaleX) / target.scaleX) +\n Math.abs((dim.y * original.scaleY) / target.scaleY),\n scale = distance / originalDistance;\n scaleX = original.scaleX * scale;\n scaleY = original.scaleY * scale;\n } else {\n scaleX = Math.abs((newPoint.x * target.scaleX) / dim.x);\n scaleY = Math.abs((newPoint.y * target.scaleY) / dim.y);\n }\n // if we are scaling by center, we need to double the scale\n if (isTransformCentered(transform)) {\n scaleX *= 2;\n scaleY *= 2;\n }\n if (transform.signX !== signX && by !== 'y') {\n transform.originX = invertOrigin(transform.originX);\n scaleX *= -1;\n transform.signX = signX;\n }\n if (transform.signY !== signY && by !== 'x') {\n transform.originY = invertOrigin(transform.originY);\n scaleY *= -1;\n transform.signY = signY;\n }\n }\n // minScale is taken care of in the setter.\n const oldScaleX = target.scaleX,\n oldScaleY = target.scaleY;\n if (!by) {\n !isLocked(target, 'lockScalingX') && target.set(SCALE_X, scaleX);\n !isLocked(target, 'lockScalingY') && target.set(SCALE_Y, scaleY);\n } else {\n // forbidden cases already handled on top here.\n by === 'x' && target.set(SCALE_X, scaleX);\n by === 'y' && target.set(SCALE_Y, scaleY);\n }\n return oldScaleX !== target.scaleX || oldScaleY !== target.scaleY;\n}\n\n/**\n * Generic scaling logic, to scale from corners either equally or freely.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scaleObjectFromCorner: TransformActionHandler<ScaleTransform> = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y);\n};\n\n/**\n * Scaling logic for the X axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectX: TransformActionHandler<ScaleTransform> = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'x' });\n};\n\n/**\n * Scaling logic for the Y axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectY: TransformActionHandler<ScaleTransform> = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'y' });\n};\n\nexport const scalingEqually = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectFromCorner),\n);\n\nexport const scalingX = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectX),\n);\n\nexport const scalingY = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectY),\n);\n"],"names":["scaleIsProportional","eventData","fabricObject","canvas","uniformIsToggled","uniScaleKey","uniformScaling","scalingIsForbidden","by","scaleProportionally","lockX","isLocked","lockY","width","height","strokeWidth","scaleMap","scaleCursorStyleHandler","control","x","y","NOT_ALLOWED_CURSOR","n","findCornerQuadrant","concat","scaleObject","transform","options","arguments","length","undefined","target","newPoint","scaleX","scaleY","dim","signX","signY","gestureScale","getLocalPoint","originX","originY","Math","sign","_getTransformedDimensions","distance","abs","original","scale","isTransformCentered","invertOrigin","oldScaleX","oldScaleY","set","SCALE_X","SCALE_Y","scaleObjectFromCorner","scalingEqually","wrapWithFireEvent","SCALING","wrapWithFixedAnchor","scalingX","scaleObjectX","scalingY","scaleObjectY"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scale.mjs","sources":["../../../src/controls/scale.ts"],"sourcesContent":["import type {\n ControlCursorCallback,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TAxis } from '../typedefs';\nimport type { Canvas } from '../canvas/Canvas';\nimport {\n findCornerQuadrant,\n getLocalPoint,\n invertOrigin,\n isLocked,\n isTransformCentered,\n NOT_ALLOWED_CURSOR,\n} from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\nimport { SCALE_X, SCALE_Y, SCALING } from '../constants';\n\ntype ScaleTransform = Transform & {\n gestureScale?: number;\n signX?: number;\n signY?: number;\n};\n\ntype ScaleBy = TAxis | 'equally' | '' | undefined;\n\n/**\n * Inspect event and fabricObject properties to understand if the scaling action\n * @param {Event} eventData from the user action\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @return {Boolean} true if scale is proportional\n */\nexport function scaleIsProportional(\n eventData: TPointerEvent,\n fabricObject: FabricObject\n): boolean {\n const canvas = fabricObject.canvas as Canvas,\n uniformIsToggled = eventData[canvas.uniScaleKey!];\n return (\n (canvas.uniformScaling && !uniformIsToggled) ||\n (!canvas.uniformScaling && uniformIsToggled)\n );\n}\n\n/**\n * Inspect fabricObject to understand if the current scaling action is allowed\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @param {String} by 'x' or 'y' or ''\n * @param {Boolean} scaleProportionally true if we are trying to scale proportionally\n * @return {Boolean} true if scaling is not allowed at current conditions\n */\nexport function scalingIsForbidden(\n fabricObject: FabricObject,\n by: ScaleBy,\n scaleProportionally: boolean\n) {\n const lockX = isLocked(fabricObject, 'lockScalingX'),\n lockY = isLocked(fabricObject, 'lockScalingY');\n if (lockX && lockY) {\n return true;\n }\n if (!by && (lockX || lockY) && scaleProportionally) {\n return true;\n }\n if (lockX && by === 'x') {\n return true;\n }\n if (lockY && by === 'y') {\n return true;\n }\n // code crashes because of a division by 0 if a 0 sized object is scaled\n // forbid to prevent scaling to happen. ISSUE-9475\n const { width, height, strokeWidth } = fabricObject;\n if (width === 0 && strokeWidth === 0 && by !== 'y') {\n return true;\n }\n if (height === 0 && strokeWidth === 0 && by !== 'x') {\n return true;\n }\n return false;\n}\n\nconst scaleMap = ['e', 'se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'];\n\n/**\n * return the correct cursor style for the scale action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const scaleCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject\n) => {\n const scaleProportionally = scaleIsProportional(eventData, fabricObject),\n by =\n control.x !== 0 && control.y === 0\n ? 'x'\n : control.x === 0 && control.y !== 0\n ? 'y'\n : '';\n if (scalingIsForbidden(fabricObject, by, scaleProportionally)) {\n return NOT_ALLOWED_CURSOR;\n }\n const n = findCornerQuadrant(fabricObject, control);\n return `${scaleMap[n]}-resize`;\n};\n\n/**\n * Basic scaling logic, reused with different constrain for scaling X,Y, freely or equally.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @param {Object} options additional information for scaling\n * @param {String} options.by 'x', 'y', 'equally' or '' to indicate type of scaling\n * @return {Boolean} true if some change happened\n * @private\n */\nfunction scaleObject(\n eventData: TPointerEvent,\n transform: ScaleTransform,\n x: number,\n y: number,\n options: { by?: ScaleBy } = {}\n) {\n const target = transform.target,\n by = options.by,\n scaleProportionally = scaleIsProportional(eventData, target),\n forbidScaling = scalingIsForbidden(target, by, scaleProportionally);\n let newPoint, scaleX, scaleY, dim, signX, signY;\n\n if (forbidScaling) {\n return false;\n }\n if (transform.gestureScale) {\n scaleX = transform.scaleX * transform.gestureScale;\n scaleY = transform.scaleY * transform.gestureScale;\n } else {\n newPoint = getLocalPoint(\n transform,\n transform.originX,\n transform.originY,\n x,\n y\n );\n // use of sign: We use sign to detect change of direction of an action. sign usually change when\n // we cross the origin point with the mouse. So a scale flip for example. There is an issue when scaling\n // by center and scaling using one middle control ( default: mr, mt, ml, mb), the mouse movement can easily\n // cross many time the origin point and flip the object. so we need a way to filter out the noise.\n // This ternary here should be ok to filter out X scaling when we want Y only and vice versa.\n signX = by !== 'y' ? Math.sign(newPoint.x || transform.signX || 1) : 1;\n signY = by !== 'x' ? Math.sign(newPoint.y || transform.signY || 1) : 1;\n if (!transform.signX) {\n transform.signX = signX;\n }\n if (!transform.signY) {\n transform.signY = signY;\n }\n\n if (\n isLocked(target, 'lockScalingFlip') &&\n (transform.signX !== signX || transform.signY !== signY)\n ) {\n return false;\n }\n\n dim = target._getTransformedDimensions();\n // missing detection of flip and logic to switch the origin\n if (scaleProportionally && !by) {\n // uniform scaling\n const distance = Math.abs(newPoint.x) + Math.abs(newPoint.y),\n { original } = transform,\n originalDistance =\n Math.abs((dim.x * original.scaleX) / target.scaleX) +\n Math.abs((dim.y * original.scaleY) / target.scaleY),\n scale = distance / originalDistance;\n scaleX = original.scaleX * scale;\n scaleY = original.scaleY * scale;\n } else {\n scaleX = Math.abs((newPoint.x * target.scaleX) / dim.x);\n scaleY = Math.abs((newPoint.y * target.scaleY) / dim.y);\n }\n // if we are scaling by center, we need to double the scale\n if (isTransformCentered(transform)) {\n scaleX *= 2;\n scaleY *= 2;\n }\n if (transform.signX !== signX && by !== 'y') {\n transform.originX = invertOrigin(transform.originX);\n scaleX *= -1;\n transform.signX = signX;\n }\n if (transform.signY !== signY && by !== 'x') {\n transform.originY = invertOrigin(transform.originY);\n scaleY *= -1;\n transform.signY = signY;\n }\n }\n // minScale is taken care of in the setter.\n const oldScaleX = target.scaleX,\n oldScaleY = target.scaleY;\n if (!by) {\n !isLocked(target, 'lockScalingX') && target.set(SCALE_X, scaleX);\n !isLocked(target, 'lockScalingY') && target.set(SCALE_Y, scaleY);\n } else {\n // forbidden cases already handled on top here.\n by === 'x' && target.set(SCALE_X, scaleX);\n by === 'y' && target.set(SCALE_Y, scaleY);\n }\n return oldScaleX !== target.scaleX || oldScaleY !== target.scaleY;\n}\n\n/**\n * Generic scaling logic, to scale from corners either equally or freely.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scaleObjectFromCorner: TransformActionHandler<ScaleTransform> = (\n eventData,\n transform,\n x,\n y\n) => {\n return scaleObject(eventData, transform, x, y);\n};\n\n/**\n * Scaling logic for the X axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectX: TransformActionHandler<ScaleTransform> = (\n eventData,\n transform,\n x,\n y\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'x' });\n};\n\n/**\n * Scaling logic for the Y axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectY: TransformActionHandler<ScaleTransform> = (\n eventData,\n transform,\n x,\n y\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'y' });\n};\n\nexport const scalingEqually = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectFromCorner)\n);\n\nexport const scalingX = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectX)\n);\n\nexport const scalingY = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectY)\n);\n"],"names":["scaleIsProportional","eventData","fabricObject","canvas","uniformIsToggled","uniScaleKey","uniformScaling","scalingIsForbidden","by","scaleProportionally","lockX","isLocked","lockY","width","height","strokeWidth","scaleMap","scaleCursorStyleHandler","control","x","y","NOT_ALLOWED_CURSOR","n","findCornerQuadrant","concat","scaleObject","transform","options","arguments","length","undefined","target","forbidScaling","newPoint","scaleX","scaleY","dim","signX","signY","gestureScale","getLocalPoint","originX","originY","Math","sign","_getTransformedDimensions","distance","abs","original","originalDistance","scale","isTransformCentered","invertOrigin","oldScaleX","oldScaleY","set","SCALE_X","SCALE_Y","scaleObjectFromCorner","scaleObjectX","scaleObjectY","scalingEqually","wrapWithFireEvent","SCALING","wrapWithFixedAnchor","scalingX","scalingY"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scale.mjs","sources":["../../../src/controls/scale.ts"],"sourcesContent":["import type {\n ControlCursorCallback,\n TPointerEvent,\n Transform,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TAxis } from '../typedefs';\nimport type { Canvas } from '../canvas/Canvas';\nimport {\n findCornerQuadrant,\n getLocalPoint,\n invertOrigin,\n isLocked,\n isTransformCentered,\n NOT_ALLOWED_CURSOR,\n} from './util';\nimport { wrapWithFireEvent } from './wrapWithFireEvent';\nimport { wrapWithFixedAnchor } from './wrapWithFixedAnchor';\nimport { SCALE_X, SCALE_Y, SCALING } from '../constants';\n\ntype ScaleTransform = Transform & {\n gestureScale?: number;\n signX?: number;\n signY?: number;\n};\n\ntype ScaleBy = TAxis | 'equally' | '' | undefined;\n\n/**\n * Inspect event and fabricObject properties to understand if the scaling action\n * @param {Event} eventData from the user action\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @return {Boolean} true if scale is proportional\n */\nexport function scaleIsProportional(\n eventData: TPointerEvent,\n fabricObject: FabricObject,\n): boolean {\n const canvas = fabricObject.canvas as Canvas,\n uniformIsToggled = eventData[canvas.uniScaleKey!];\n return (\n (canvas.uniformScaling && !uniformIsToggled) ||\n (!canvas.uniformScaling && uniformIsToggled)\n );\n}\n\n/**\n * Inspect fabricObject to understand if the current scaling action is allowed\n * @param {FabricObject} fabricObject the fabric object about to scale\n * @param {String} by 'x' or 'y' or ''\n * @param {Boolean} scaleProportionally true if we are trying to scale proportionally\n * @return {Boolean} true if scaling is not allowed at current conditions\n */\nexport function scalingIsForbidden(\n fabricObject: FabricObject,\n by: ScaleBy,\n scaleProportionally: boolean,\n) {\n const lockX = isLocked(fabricObject, 'lockScalingX'),\n lockY = isLocked(fabricObject, 'lockScalingY');\n if (lockX && lockY) {\n return true;\n }\n if (!by && (lockX || lockY) && scaleProportionally) {\n return true;\n }\n if (lockX && by === 'x') {\n return true;\n }\n if (lockY && by === 'y') {\n return true;\n }\n // code crashes because of a division by 0 if a 0 sized object is scaled\n // forbid to prevent scaling to happen. ISSUE-9475\n const { width, height, strokeWidth } = fabricObject;\n if (width === 0 && strokeWidth === 0 && by !== 'y') {\n return true;\n }\n if (height === 0 && strokeWidth === 0 && by !== 'x') {\n return true;\n }\n return false;\n}\n\nconst scaleMap = ['e', 'se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'];\n\n/**\n * return the correct cursor style for the scale action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const scaleCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n const scaleProportionally = scaleIsProportional(eventData, fabricObject),\n by =\n control.x !== 0 && control.y === 0\n ? 'x'\n : control.x === 0 && control.y !== 0\n ? 'y'\n : '';\n if (scalingIsForbidden(fabricObject, by, scaleProportionally)) {\n return NOT_ALLOWED_CURSOR;\n }\n const n = findCornerQuadrant(fabricObject, control);\n return `${scaleMap[n]}-resize`;\n};\n\n/**\n * Basic scaling logic, reused with different constrain for scaling X,Y, freely or equally.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @param {Object} options additional information for scaling\n * @param {String} options.by 'x', 'y', 'equally' or '' to indicate type of scaling\n * @return {Boolean} true if some change happened\n * @private\n */\nfunction scaleObject(\n eventData: TPointerEvent,\n transform: ScaleTransform,\n x: number,\n y: number,\n options: { by?: ScaleBy } = {},\n) {\n const target = transform.target,\n by = options.by,\n scaleProportionally = scaleIsProportional(eventData, target),\n forbidScaling = scalingIsForbidden(target, by, scaleProportionally);\n let newPoint, scaleX, scaleY, dim, signX, signY;\n\n if (forbidScaling) {\n return false;\n }\n if (transform.gestureScale) {\n scaleX = transform.scaleX * transform.gestureScale;\n scaleY = transform.scaleY * transform.gestureScale;\n } else {\n newPoint = getLocalPoint(\n transform,\n transform.originX,\n transform.originY,\n x,\n y,\n );\n // use of sign: We use sign to detect change of direction of an action. sign usually change when\n // we cross the origin point with the mouse. So a scale flip for example. There is an issue when scaling\n // by center and scaling using one middle control ( default: mr, mt, ml, mb), the mouse movement can easily\n // cross many time the origin point and flip the object. so we need a way to filter out the noise.\n // This ternary here should be ok to filter out X scaling when we want Y only and vice versa.\n signX = by !== 'y' ? Math.sign(newPoint.x || transform.signX || 1) : 1;\n signY = by !== 'x' ? Math.sign(newPoint.y || transform.signY || 1) : 1;\n if (!transform.signX) {\n transform.signX = signX;\n }\n if (!transform.signY) {\n transform.signY = signY;\n }\n\n if (\n isLocked(target, 'lockScalingFlip') &&\n (transform.signX !== signX || transform.signY !== signY)\n ) {\n return false;\n }\n\n dim = target._getTransformedDimensions();\n // missing detection of flip and logic to switch the origin\n if (scaleProportionally && !by) {\n // uniform scaling\n const distance = Math.abs(newPoint.x) + Math.abs(newPoint.y),\n { original } = transform,\n originalDistance =\n Math.abs((dim.x * original.scaleX) / target.scaleX) +\n Math.abs((dim.y * original.scaleY) / target.scaleY),\n scale = distance / originalDistance;\n scaleX = original.scaleX * scale;\n scaleY = original.scaleY * scale;\n } else {\n scaleX = Math.abs((newPoint.x * target.scaleX) / dim.x);\n scaleY = Math.abs((newPoint.y * target.scaleY) / dim.y);\n }\n // if we are scaling by center, we need to double the scale\n if (isTransformCentered(transform)) {\n scaleX *= 2;\n scaleY *= 2;\n }\n if (transform.signX !== signX && by !== 'y') {\n transform.originX = invertOrigin(transform.originX);\n scaleX *= -1;\n transform.signX = signX;\n }\n if (transform.signY !== signY && by !== 'x') {\n transform.originY = invertOrigin(transform.originY);\n scaleY *= -1;\n transform.signY = signY;\n }\n }\n // minScale is taken care of in the setter.\n const oldScaleX = target.scaleX,\n oldScaleY = target.scaleY;\n if (!by) {\n !isLocked(target, 'lockScalingX') && target.set(SCALE_X, scaleX);\n !isLocked(target, 'lockScalingY') && target.set(SCALE_Y, scaleY);\n } else {\n // forbidden cases already handled on top here.\n by === 'x' && target.set(SCALE_X, scaleX);\n by === 'y' && target.set(SCALE_Y, scaleY);\n }\n return oldScaleX !== target.scaleX || oldScaleY !== target.scaleY;\n}\n\n/**\n * Generic scaling logic, to scale from corners either equally or freely.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scaleObjectFromCorner: TransformActionHandler<ScaleTransform> = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y);\n};\n\n/**\n * Scaling logic for the X axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectX: TransformActionHandler<ScaleTransform> = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'x' });\n};\n\n/**\n * Scaling logic for the Y axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nconst scaleObjectY: TransformActionHandler<ScaleTransform> = (\n eventData,\n transform,\n x,\n y,\n) => {\n return scaleObject(eventData, transform, x, y, { by: 'y' });\n};\n\nexport const scalingEqually = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectFromCorner),\n);\n\nexport const scalingX = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectX),\n);\n\nexport const scalingY = wrapWithFireEvent(\n SCALING,\n wrapWithFixedAnchor(scaleObjectY),\n);\n"],"names":["scaleIsProportional","eventData","fabricObject","canvas","uniformIsToggled","uniScaleKey","uniformScaling","scalingIsForbidden","by","scaleProportionally","lockX","isLocked","lockY","width","height","strokeWidth","scaleMap","scaleCursorStyleHandler","control","x","y","NOT_ALLOWED_CURSOR","n","findCornerQuadrant","concat","scaleObject","transform","options","arguments","length","undefined","target","forbidScaling","newPoint","scaleX","scaleY","dim","signX","signY","gestureScale","getLocalPoint","originX","originY","Math","sign","_getTransformedDimensions","distance","abs","original","originalDistance","scale","isTransformCentered","invertOrigin","oldScaleX","oldScaleY","set","SCALE_X","SCALE_Y","scaleObjectFromCorner","scaleObjectX","scaleObjectY","scalingEqually","wrapWithFireEvent","SCALING","wrapWithFixedAnchor","scalingX","scalingY"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaleSkew.min.mjs","sources":["../../../src/controls/scaleSkew.ts"],"sourcesContent":["import type {\n ControlCallback,\n ControlCursorCallback,\n TPointerEvent,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { SCALE_X, SCALE_Y, SKEW_X, SKEW_Y } from '../constants';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TAxisKey } from '../typedefs';\nimport { scaleCursorStyleHandler, scalingX, scalingY } from './scale';\nimport { skewCursorStyleHandler, skewHandlerX, skewHandlerY } from './skew';\n\nfunction isAltAction(eventData: TPointerEvent, target: FabricObject) {\n return eventData[target.canvas!.altActionKey!];\n}\n\n/**\n * Inspect event, control and fabricObject to return the correct action name\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} an action name\n */\nexport const scaleOrSkewActionName: ControlCallback<\n TAxisKey<'skew' | 'scale'> | ''\n> = (eventData, control, fabricObject) => {\n const isAlternative = isAltAction(eventData, fabricObject);\n if (control.x === 0) {\n // then is scaleY or skewX\n return isAlternative ? SKEW_X : SCALE_Y;\n }\n if (control.y === 0) {\n // then is scaleY or skewX\n return isAlternative ? SKEW_Y : SCALE_X;\n }\n return '';\n};\n\n/**\n * Combine skew and scale style handlers to cover fabric standard use case\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const scaleSkewCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject
|
|
1
|
+
{"version":3,"file":"scaleSkew.min.mjs","sources":["../../../src/controls/scaleSkew.ts"],"sourcesContent":["import type {\n ControlCallback,\n ControlCursorCallback,\n TPointerEvent,\n TransformActionHandler,\n} from '../EventTypeDefs';\nimport { SCALE_X, SCALE_Y, SKEW_X, SKEW_Y } from '../constants';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TAxisKey } from '../typedefs';\nimport { scaleCursorStyleHandler, scalingX, scalingY } from './scale';\nimport { skewCursorStyleHandler, skewHandlerX, skewHandlerY } from './skew';\n\nfunction isAltAction(eventData: TPointerEvent, target: FabricObject) {\n return eventData[target.canvas!.altActionKey!];\n}\n\n/**\n * Inspect event, control and fabricObject to return the correct action name\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} an action name\n */\nexport const scaleOrSkewActionName: ControlCallback<\n TAxisKey<'skew' | 'scale'> | ''\n> = (eventData, control, fabricObject) => {\n const isAlternative = isAltAction(eventData, fabricObject);\n if (control.x === 0) {\n // then is scaleY or skewX\n return isAlternative ? SKEW_X : SCALE_Y;\n }\n if (control.y === 0) {\n // then is scaleY or skewX\n return isAlternative ? SKEW_Y : SCALE_X;\n }\n return '';\n};\n\n/**\n * Combine skew and scale style handlers to cover fabric standard use case\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {Control} control the control that is interested in the action\n * @param {FabricObject} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\nexport const scaleSkewCursorStyleHandler: ControlCursorCallback = (\n eventData,\n control,\n fabricObject,\n) => {\n return isAltAction(eventData, fabricObject)\n ? skewCursorStyleHandler(eventData, control, fabricObject)\n : scaleCursorStyleHandler(eventData, control, fabricObject);\n};\n/**\n * Composed action handler to either scale X or skew Y\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scalingXOrSkewingY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return isAltAction(eventData, transform.target)\n ? skewHandlerY(eventData, transform, x, y)\n : scalingX(eventData, transform, x, y);\n};\n\n/**\n * Composed action handler to either scale Y or skew X\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\nexport const scalingYOrSkewingX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n return isAltAction(eventData, transform.target)\n ? skewHandlerX(eventData, transform, x, y)\n : scalingY(eventData, transform, x, y);\n};\n"],"names":["isAltAction","eventData","target","canvas","altActionKey","scaleOrSkewActionName","control","fabricObject","isAlternative","x","SKEW_X","SCALE_Y","y","SKEW_Y","SCALE_X","scaleSkewCursorStyleHandler","skewCursorStyleHandler","scaleCursorStyleHandler","scalingXOrSkewingY","transform","skewHandlerY","scalingX","scalingYOrSkewingX","skewHandlerX","scalingY"],"mappings":"sQAYA,SAASA,EAAYC,EAA0BC,GAC7C,OAAOD,EAAUC,EAAOC,OAAQC,aAClC,CASO,MAAMC,EAETA,CAACJ,EAAWK,EAASC,KACvB,MAAMC,EAAgBR,EAAYC,EAAWM,GAC7C,OAAkB,IAAdD,EAAQG,EAEHD,EAAgBE,EAASC,EAEhB,IAAdL,EAAQM,EAEHJ,EAAgBK,EAASC,EAE3B,EAAE,EAUEC,EAAqDA,CAChEd,EACAK,EACAC,IAEOP,EAAYC,EAAWM,GAC1BS,EAAuBf,EAAWK,EAASC,GAC3CU,EAAwBhB,EAAWK,EAASC,GAWrCW,EAA6CA,CACxDjB,EACAkB,EACAV,EACAG,IAEOZ,EAAYC,EAAWkB,EAAUjB,QACpCkB,EAAanB,EAAWkB,EAAWV,EAAGG,GACtCS,EAASpB,EAAWkB,EAAWV,EAAGG,GAY3BU,EAA6CA,CACxDrB,EACAkB,EACAV,EACAG,IAEOZ,EAAYC,EAAWkB,EAAUjB,QACpCqB,EAAatB,EAAWkB,EAAWV,EAAGG,GACtCY,EAASvB,EAAWkB,EAAWV,EAAGG"}
|