fabric 5.3.0 → 6.0.0-beta3
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/.babelrc +11 -0
- package/.babelrcAlt +19 -0
- package/.browserslistrc +5 -0
- package/.eslintignore +3 -0
- package/.eslintrc.js +43 -0
- package/.eslintrc.json +38 -46
- package/.eslintrc_tests +12 -0
- package/.gitattributes +2 -0
- package/.gitpod.yml +17 -1
- package/.prettierignore +19 -0
- package/.prettierrc +4 -0
- package/CHANGELOG.md +532 -189
- package/CONTRIBUTING.md +224 -59
- package/README.md +200 -235
- package/bower.json +1 -3
- package/dist/fabric.d.ts +42 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +27582 -0
- package/dist/index.js.map +1 -0
- package/dist/index.min.js +1 -0
- package/dist/index.mjs +27519 -0
- package/dist/index.mjs.map +1 -0
- package/dist/index.node.cjs +27663 -0
- package/dist/index.node.cjs.map +1 -0
- package/dist/index.node.d.ts +14 -0
- package/dist/index.node.mjs +27606 -0
- package/dist/index.node.mjs.map +1 -0
- package/dist/src/ClassRegistry.d.ts +13 -0
- package/dist/src/Collection.d.ts +136 -0
- package/dist/src/CommonMethods.d.ts +32 -0
- package/dist/src/EventTypeDefs.d.ts +227 -0
- package/dist/src/Intersection.d.ts +112 -0
- package/dist/src/Observable.d.ts +60 -0
- package/dist/src/Pattern.d.ts +113 -0
- package/dist/src/Point.d.ts +232 -0
- package/dist/src/Shadow.d.ts +97 -0
- package/dist/src/brushes/BaseBrush.d.ts +105 -0
- package/dist/src/brushes/CircleBrush.d.ts +49 -0
- package/dist/src/brushes/PatternBrush.d.ts +23 -0
- package/dist/src/brushes/PencilBrush.d.ts +92 -0
- package/dist/src/brushes/SprayBrush.d.ts +79 -0
- package/dist/src/cache.d.ts +47 -0
- package/dist/src/canvas/Canvas.d.ts +548 -0
- package/dist/src/canvas/SelectableCanvas.d.ts +754 -0
- package/dist/src/canvas/StaticCanvas.d.ts +778 -0
- package/dist/src/canvas/TextEditingManager.d.ts +17 -0
- package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
- package/dist/src/color/Color.d.ts +174 -0
- package/dist/src/color/color_map.d.ts +155 -0
- package/dist/src/color/constants.d.ts +22 -0
- package/dist/src/color/util.d.ts +12 -0
- package/dist/src/config.d.ts +115 -0
- package/dist/src/constants.d.ts +14 -0
- package/dist/src/controls/Control.d.ts +228 -0
- package/dist/src/controls/changeWidth.d.ts +13 -0
- package/dist/src/controls/commonControls.d.ts +28 -0
- package/dist/src/controls/controlRendering.d.ts +29 -0
- package/dist/src/controls/drag.d.ts +12 -0
- package/dist/src/controls/index.d.ts +13 -0
- package/dist/src/controls/polyControl.d.ts +5 -0
- package/dist/src/controls/rotate.d.ts +12 -0
- package/dist/src/controls/scale.d.ts +47 -0
- package/dist/src/controls/scaleSkew.d.ts +39 -0
- package/dist/src/controls/skew.d.ts +33 -0
- package/dist/src/controls/util.d.ts +41 -0
- package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
- package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
- package/dist/src/env/browser.d.ts +3 -0
- package/dist/src/env/index.d.ts +15 -0
- package/dist/src/env/node.d.ts +5 -0
- package/dist/src/env/types.d.ts +15 -0
- package/dist/src/filters/BaseFilter.d.ts +153 -0
- package/dist/src/filters/BlendColor.d.ts +80 -0
- package/dist/src/filters/BlendImage.d.ts +92 -0
- package/dist/src/filters/Blur.d.ts +51 -0
- package/dist/src/filters/Boilerplate.d.ts +48 -0
- package/dist/src/filters/Brightness.d.ts +47 -0
- package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
- package/dist/src/filters/ColorMatrix.d.ts +63 -0
- package/dist/src/filters/ColorMatrixFilters.d.ts +545 -0
- package/dist/src/filters/Composed.d.ts +45 -0
- package/dist/src/filters/Contrast.d.ts +45 -0
- package/dist/src/filters/Convolute.d.ts +82 -0
- package/dist/src/filters/FilterBackend.d.ts +14 -0
- package/dist/src/filters/GLProbes/GLProbe.d.ts +11 -0
- package/dist/src/filters/GLProbes/NodeGLProbe.d.ts +11 -0
- package/dist/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
- package/dist/src/filters/Gamma.d.ts +54 -0
- package/dist/src/filters/Grayscale.d.ts +46 -0
- package/dist/src/filters/HueRotation.d.ts +24 -0
- package/dist/src/filters/Invert.d.ts +55 -0
- package/dist/src/filters/Noise.d.ts +54 -0
- package/dist/src/filters/Pixelate.d.ts +44 -0
- package/dist/src/filters/RemoveColor.d.ts +63 -0
- package/dist/src/filters/Resize.d.ts +136 -0
- package/dist/src/filters/Saturation.d.ts +48 -0
- package/dist/src/filters/Vibrance.d.ts +48 -0
- package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
- package/dist/src/filters/filters.d.ts +21 -0
- package/dist/src/filters/index.d.ts +5 -0
- package/dist/src/filters/shaders/baseFilter.d.ts +4 -0
- package/dist/src/filters/shaders/blendColor.d.ts +13 -0
- package/dist/src/filters/shaders/blendImage.d.ts +3 -0
- package/dist/src/filters/shaders/blur.d.ts +2 -0
- package/dist/src/filters/shaders/brightness.d.ts +2 -0
- package/dist/src/filters/shaders/colorMatrix.d.ts +2 -0
- package/dist/src/filters/shaders/constrast.d.ts +2 -0
- package/dist/src/filters/shaders/convolute.d.ts +11 -0
- package/dist/src/filters/shaders/gamma.d.ts +2 -0
- package/dist/src/filters/shaders/grayscale.d.ts +3 -0
- package/dist/src/filters/shaders/invert.d.ts +2 -0
- package/dist/src/filters/shaders/noise.d.ts +2 -0
- package/dist/src/filters/shaders/pixelate.d.ts +2 -0
- package/dist/src/filters/shaders/removeColor.d.ts +2 -0
- package/dist/src/filters/shaders/saturation.d.ts +2 -0
- package/dist/src/filters/shaders/vibrance.d.ts +2 -0
- package/dist/src/filters/typedefs.d.ts +49 -0
- package/dist/src/gradient/Gradient.d.ts +149 -0
- package/dist/src/gradient/constants.d.ts +15 -0
- package/dist/src/gradient/parser/index.d.ts +4 -0
- package/dist/src/gradient/parser/misc.d.ts +4 -0
- package/dist/src/gradient/parser/parseColorStops.d.ts +3 -0
- package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
- package/dist/src/gradient/typedefs.d.ts +93 -0
- package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
- package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
- package/dist/src/parkinglot/straighten.d.ts +2 -0
- package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
- package/dist/src/parser/attributes.d.ts +6 -0
- package/dist/src/parser/constants.d.ts +53 -0
- package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
- package/dist/src/parser/elementById.d.ts +6 -0
- package/dist/src/parser/elementMatchesRule.d.ts +5 -0
- package/dist/src/parser/elements_parser.d.ts +3 -0
- package/dist/src/parser/getCSSRules.d.ts +7 -0
- package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
- package/dist/src/parser/getGradientDefs.d.ts +7 -0
- package/dist/src/parser/getMultipleNodes.d.ts +2 -0
- package/dist/src/parser/getSvgRegex.d.ts +2 -0
- package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
- package/dist/src/parser/index.d.ts +10 -0
- package/dist/src/parser/loadSVGFromString.d.ts +12 -0
- package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
- package/dist/src/parser/normalizeAttr.d.ts +2 -0
- package/dist/src/parser/normalizeValue.d.ts +2 -0
- package/dist/src/parser/parseAttributes.d.ts +9 -0
- package/dist/src/parser/parseElements.d.ts +11 -0
- package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
- package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
- package/dist/src/parser/parseSVGDocument.d.ts +15 -0
- package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
- package/dist/src/parser/parseStyleObject.d.ts +2 -0
- package/dist/src/parser/parseStyleString.d.ts +2 -0
- package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
- package/dist/src/parser/parseUseDirectives.d.ts +2 -0
- package/dist/src/parser/percent.d.ts +9 -0
- package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
- package/dist/src/parser/rotateMatrix.d.ts +2 -0
- package/dist/src/parser/scaleMatrix.d.ts +2 -0
- package/dist/src/parser/selectorMatches.d.ts +2 -0
- package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
- package/dist/src/parser/skewMatrix.d.ts +2 -0
- package/dist/src/parser/translateMatrix.d.ts +2 -0
- package/dist/src/shapes/ActiveSelection.d.ts +82 -0
- package/dist/src/shapes/Circle.d.ts +99 -0
- package/dist/src/shapes/Ellipse.d.ts +84 -0
- package/dist/src/shapes/Group.d.ts +408 -0
- package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
- package/dist/src/shapes/IText/IText.d.ts +335 -0
- package/dist/src/shapes/IText/ITextBehavior.d.ts +287 -0
- package/dist/src/shapes/IText/ITextClickBehavior.d.ts +83 -0
- package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +195 -0
- package/dist/src/shapes/IText/constants.d.ts +13 -0
- package/dist/src/shapes/Image.d.ts +311 -0
- package/dist/src/shapes/Line.d.ts +126 -0
- package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
- package/dist/src/shapes/Object/FabricObject.d.ts +11 -0
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
- package/dist/src/shapes/Object/InteractiveObject.d.ts +296 -0
- package/dist/src/shapes/Object/Object.d.ts +594 -0
- package/dist/src/shapes/Object/ObjectGeometry.d.ts +327 -0
- package/dist/src/shapes/Object/ObjectOrigin.d.ts +109 -0
- package/dist/src/shapes/Object/StackedObject.d.ts +72 -0
- package/dist/src/shapes/Object/defaultValues.d.ts +76 -0
- package/dist/src/shapes/Object/types/BaseProps.d.ts +84 -0
- package/dist/src/shapes/Object/types/BorderProps.d.ts +37 -0
- package/dist/src/shapes/Object/types/ControlProps.d.ts +62 -0
- package/dist/src/shapes/Object/types/FabricObjectProps.d.ts +96 -0
- package/dist/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
- package/dist/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
- package/dist/src/shapes/Object/types/ObjectProps.d.ts +42 -0
- package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
- package/dist/src/shapes/Object/types/index.d.ts +6 -0
- package/dist/src/shapes/Path.d.ts +130 -0
- package/dist/src/shapes/Polygon.d.ts +9 -0
- package/dist/src/shapes/Polyline.d.ts +140 -0
- package/dist/src/shapes/Rect.d.ts +76 -0
- package/dist/src/shapes/Text/StyledText.d.ts +119 -0
- package/dist/src/shapes/Text/Text.d.ts +673 -0
- package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
- package/dist/src/shapes/Text/constants.d.ts +7 -0
- package/dist/src/shapes/Textbox.d.ts +185 -0
- package/dist/src/shapes/Triangle.d.ts +25 -0
- package/dist/src/typedefs.d.ts +90 -0
- package/dist/src/util/animation/AnimationBase.d.ts +54 -0
- package/dist/src/util/animation/AnimationFrameProvider.d.ts +3 -0
- package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
- package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
- package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
- package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
- package/dist/src/util/animation/animate.d.ts +37 -0
- package/dist/src/util/animation/easing.d.ts +130 -0
- package/dist/src/util/animation/types.d.ts +87 -0
- package/dist/src/util/applyMixins.d.ts +8 -0
- package/dist/src/util/dom_event.d.ts +5 -0
- package/dist/src/util/dom_misc.d.ts +39 -0
- package/dist/src/util/dom_request.d.ts +14 -0
- package/dist/src/util/dom_style.d.ts +7 -0
- package/dist/src/util/fireEvent.d.ts +3 -0
- package/dist/src/util/index.d.ts +35 -0
- package/dist/src/util/internals/cloneDeep.d.ts +2 -0
- package/dist/src/util/internals/getRandomInt.d.ts +8 -0
- package/dist/src/util/internals/ifNaN.d.ts +8 -0
- package/dist/src/util/internals/index.d.ts +4 -0
- package/dist/src/util/internals/removeFromArray.d.ts +9 -0
- package/dist/src/util/internals/uid.d.ts +2 -0
- package/dist/src/util/lang_string.d.ts +22 -0
- package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
- package/dist/src/util/misc/capValue.d.ts +2 -0
- package/dist/src/util/misc/cos.d.ts +10 -0
- package/dist/src/util/misc/dom.d.ts +28 -0
- package/dist/src/util/misc/findScaleTo.d.ts +29 -0
- package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
- package/dist/src/util/misc/isTransparent.d.ts +11 -0
- package/dist/src/util/misc/matrix.d.ts +92 -0
- package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
- package/dist/src/util/misc/objectEnlive.d.ts +56 -0
- package/dist/src/util/misc/objectTransforms.d.ts +68 -0
- package/dist/src/util/misc/pick.d.ts +9 -0
- package/dist/src/util/misc/planeChange.d.ts +84 -0
- package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
- package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
- package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
- package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
- package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
- package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
- package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
- package/dist/src/util/misc/rotatePoint.d.ts +12 -0
- package/dist/src/util/misc/sin.d.ts +10 -0
- package/dist/src/util/misc/svgParsing.d.ts +53 -0
- package/dist/src/util/misc/textStyles.d.ts +32 -0
- package/dist/src/util/misc/toFixed.d.ts +8 -0
- package/dist/src/util/misc/vectors.d.ts +57 -0
- package/dist/src/util/path/index.d.ts +96 -0
- package/dist/src/util/path/regex.d.ts +3 -0
- package/dist/src/util/path/typechecks.d.ts +24 -0
- package/dist/src/util/path/typedefs.d.ts +220 -0
- package/dist/src/util/transform_matrix_removal.d.ts +14 -0
- package/dist/src/util/types.d.ts +19 -0
- package/fabric.ts +51 -0
- package/index.node.ts +37 -0
- package/index.ts +1 -0
- package/package.json +100 -40
- package/publish.js +0 -26
- package/rollup.config.mjs +91 -0
- package/rollup.test.config.js +24 -0
- package/scripts/build.mjs +50 -0
- package/scripts/buildLock.mjs +115 -0
- package/scripts/buildReporter.mjs +15 -0
- package/scripts/buildStats.mjs +139 -0
- package/scripts/dirname.mjs +14 -0
- package/scripts/git.mjs +36 -0
- package/scripts/index.mjs +564 -0
- package/scripts/sandbox.mjs +149 -0
- package/src/ClassRegistry.ts +56 -0
- package/src/Collection.ts +346 -0
- package/src/CommonMethods.ts +63 -0
- package/src/EventTypeDefs.ts +296 -0
- package/src/Intersection.ts +302 -0
- package/src/Observable.ts +181 -0
- package/src/Pattern.ts +227 -0
- package/src/Point.ts +388 -0
- package/src/Shadow.ts +214 -0
- package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
- package/src/brushes/CircleBrush.ts +145 -0
- package/src/brushes/PatternBrush.ts +70 -0
- package/src/brushes/PencilBrush.ts +300 -0
- package/src/brushes/SprayBrush.ts +219 -0
- package/src/cache.ts +90 -0
- package/src/canvas/Canvas.ts +1607 -0
- package/src/canvas/SelectableCanvas.ts +1608 -0
- package/src/canvas/StaticCanvas.ts +1734 -0
- package/src/canvas/TextEditingManager.ts +48 -0
- package/src/canvas/canvas_gestures.mixin.ts +207 -0
- package/src/color/Color.ts +404 -0
- package/src/color/color_map.ts +154 -0
- package/src/color/constants.ts +26 -0
- package/src/color/util.ts +32 -0
- package/src/config.ts +159 -0
- package/src/constants.ts +20 -0
- package/src/controls/Control.ts +380 -0
- package/src/controls/changeWidth.ts +52 -0
- package/src/controls/commonControls.ts +105 -0
- package/src/controls/controlRendering.ts +138 -0
- package/src/controls/drag.ts +31 -0
- package/src/controls/index.ts +22 -0
- package/src/controls/polyControl.ts +135 -0
- package/src/controls/rotate.ts +87 -0
- package/src/controls/scale.ts +277 -0
- package/src/controls/scaleSkew.ts +92 -0
- package/src/controls/skew.ts +242 -0
- package/src/controls/util.ts +154 -0
- package/src/controls/wrapWithFireEvent.ts +25 -0
- package/src/controls/wrapWithFixedAnchor.ts +20 -0
- package/src/env/browser.ts +32 -0
- package/src/env/index.ts +24 -0
- package/src/env/node.ts +56 -0
- package/src/env/types.ts +15 -0
- package/src/filters/{base_filter.class.js → BaseFilter.ts} +192 -151
- package/src/filters/BlendColor.ts +217 -0
- package/src/filters/BlendImage.ts +228 -0
- package/src/filters/Blur.ts +179 -0
- package/src/filters/Boilerplate.ts +94 -0
- package/src/filters/Brightness.ts +83 -0
- package/src/filters/Canvas2dFilterBackend.ts +65 -0
- package/src/filters/ColorMatrix.ts +145 -0
- package/src/filters/ColorMatrixFilters.ts +77 -0
- package/src/filters/Composed.ts +76 -0
- package/src/filters/Contrast.ts +82 -0
- package/src/filters/Convolute.ts +184 -0
- package/src/filters/FilterBackend.ts +34 -0
- package/src/filters/GLProbes/GLProbe.ts +11 -0
- package/src/filters/GLProbes/NodeGLProbe.ts +15 -0
- package/src/filters/GLProbes/WebGLProbe.ts +46 -0
- package/src/filters/Gamma.ts +110 -0
- package/src/filters/Grayscale.ts +102 -0
- package/src/filters/HueRotation.ts +62 -0
- package/src/filters/Invert.ts +99 -0
- package/src/filters/Noise.ts +94 -0
- package/src/filters/Pixelate.ts +96 -0
- package/src/filters/RemoveColor.ts +135 -0
- package/src/filters/Resize.ts +538 -0
- package/src/filters/Saturation.ts +87 -0
- package/src/filters/Vibrance.ts +88 -0
- package/src/filters/WebGLFilterBackend.ts +430 -0
- package/src/filters/filters.ts +28 -0
- package/src/filters/index.ts +5 -0
- package/src/filters/shaders/baseFilter.ts +19 -0
- package/src/filters/shaders/blendColor.ts +33 -0
- package/src/filters/shaders/blendImage.ts +32 -0
- package/src/filters/shaders/blur.ts +24 -0
- package/src/filters/shaders/brightness.ts +11 -0
- package/src/filters/shaders/colorMatrix.ts +12 -0
- package/src/filters/shaders/constrast.ts +11 -0
- package/src/filters/shaders/convolute.ts +154 -0
- package/src/filters/shaders/gamma.ts +15 -0
- package/src/filters/shaders/grayscale.ts +36 -0
- package/src/filters/shaders/invert.ts +19 -0
- package/src/filters/shaders/noise.ts +16 -0
- package/src/filters/shaders/pixelate.ts +19 -0
- package/src/filters/shaders/removeColor.ts +13 -0
- package/src/filters/shaders/saturation.ts +15 -0
- package/src/filters/shaders/vibrance.ts +16 -0
- package/src/filters/typedefs.ts +65 -0
- package/src/gradient/Gradient.ts +406 -0
- package/src/gradient/constants.ts +12 -0
- package/src/gradient/parser/index.ts +3 -0
- package/src/gradient/parser/misc.ts +13 -0
- package/src/gradient/parser/parseColorStops.ts +56 -0
- package/src/gradient/parser/parseCoords.ts +73 -0
- package/src/gradient/typedefs.ts +104 -0
- package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
- package/src/parkinglot/canvas_animation.mixin.ts +121 -0
- package/src/parkinglot/straighten.ts +58 -0
- package/src/parser/applyViewboxTransform.ts +157 -0
- package/src/parser/attributes.ts +25 -0
- package/src/parser/constants.ts +115 -0
- package/src/parser/doesSomeParentMatch.ts +19 -0
- package/src/parser/elementById.ts +21 -0
- package/src/parser/elementMatchesRule.ts +16 -0
- package/src/parser/elements_parser.ts +191 -0
- package/src/parser/getCSSRules.ts +62 -0
- package/src/parser/getGlobalStylesForElement.ts +19 -0
- package/src/parser/getGradientDefs.ts +31 -0
- package/src/parser/getMultipleNodes.ts +15 -0
- package/src/parser/getSvgRegex.ts +5 -0
- package/src/parser/hasAncestorWithNodeName.ts +14 -0
- package/src/parser/index.ts +9 -0
- package/src/parser/loadSVGFromString.ts +26 -0
- package/src/parser/loadSVGFromURL.ts +40 -0
- package/src/parser/normalizeAttr.ts +10 -0
- package/src/parser/normalizeValue.ts +63 -0
- package/src/parser/parseAttributes.ts +90 -0
- package/src/parser/parseElements.ts +28 -0
- package/src/parser/parseFontDeclaration.ts +44 -0
- package/src/parser/parsePointsAttribute.ts +34 -0
- package/src/parser/parseSVGDocument.ts +93 -0
- package/src/parser/parseStyleAttribute.ts +27 -0
- package/src/parser/parseStyleObject.ts +15 -0
- package/src/parser/parseStyleString.ts +16 -0
- package/src/parser/parseTransformAttribute.ts +155 -0
- package/src/parser/parseUseDirectives.ts +78 -0
- package/src/parser/percent.ts +27 -0
- package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
- package/src/parser/rotateMatrix.ts +21 -0
- package/src/parser/scaleMatrix.ts +9 -0
- package/src/parser/selectorMatches.ts +25 -0
- package/src/parser/setStrokeFillOpacity.ts +40 -0
- package/src/parser/skewMatrix.ts +6 -0
- package/src/parser/translateMatrix.ts +8 -0
- package/src/shapes/ActiveSelection.ts +189 -0
- package/src/shapes/Circle.ts +242 -0
- package/src/shapes/Ellipse.ts +179 -0
- package/src/shapes/Group.ts +1100 -0
- package/src/shapes/IText/DraggableTextDelegate.ts +382 -0
- package/src/shapes/IText/IText.ts +693 -0
- package/src/shapes/IText/ITextBehavior.ts +1064 -0
- package/src/shapes/IText/ITextClickBehavior.ts +325 -0
- package/src/shapes/IText/ITextKeyBehavior.ts +685 -0
- package/src/shapes/IText/constants.ts +47 -0
- package/src/shapes/Image.ts +841 -0
- package/src/shapes/Line.ts +346 -0
- package/src/shapes/Object/AnimatableObject.ts +106 -0
- package/src/shapes/Object/FabricObject.ts +29 -0
- package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
- package/src/shapes/Object/InteractiveObject.ts +672 -0
- package/src/shapes/Object/Object.ts +1561 -0
- package/src/shapes/Object/ObjectGeometry.ts +813 -0
- package/src/shapes/Object/ObjectOrigin.ts +276 -0
- package/src/shapes/Object/StackedObject.ts +206 -0
- package/src/shapes/Object/defaultValues.ts +108 -0
- package/src/shapes/Object/types/BaseProps.ts +96 -0
- package/src/shapes/Object/types/BorderProps.ts +40 -0
- package/src/shapes/Object/types/ControlProps.ts +69 -0
- package/src/shapes/Object/types/FabricObjectProps.ts +111 -0
- package/src/shapes/Object/types/FillStrokeProps.ts +90 -0
- package/src/shapes/Object/types/LockInteractionProps.ts +57 -0
- package/src/shapes/Object/types/ObjectProps.ts +46 -0
- package/src/shapes/Object/types/SerializedObjectProps.ts +73 -0
- package/src/shapes/Object/types/index.ts +8 -0
- package/src/shapes/Path.ts +416 -0
- package/src/shapes/Polygon.ts +20 -0
- package/src/shapes/Polyline.ts +359 -0
- package/src/shapes/Rect.ts +233 -0
- package/src/shapes/Text/StyledText.ts +329 -0
- package/src/shapes/Text/Text.ts +1884 -0
- package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
- package/src/shapes/Text/constants.ts +91 -0
- package/src/shapes/Textbox.ts +477 -0
- package/src/shapes/Triangle.ts +60 -0
- package/src/typedefs.ts +115 -0
- package/src/util/animation/AnimationBase.ts +166 -0
- package/src/util/animation/AnimationFrameProvider.ts +9 -0
- package/src/util/animation/AnimationRegistry.ts +58 -0
- package/src/util/animation/ArrayAnimation.ts +27 -0
- package/src/util/animation/ColorAnimation.ts +74 -0
- package/src/util/animation/ValueAnimation.ts +29 -0
- package/src/util/animation/animate.ts +74 -0
- package/src/util/animation/easing.ts +327 -0
- package/src/util/animation/types.ts +136 -0
- package/src/util/applyMixins.ts +22 -0
- package/src/util/dom_event.ts +28 -0
- package/src/util/dom_misc.ts +121 -0
- package/src/util/dom_request.ts +64 -0
- package/src/util/dom_style.ts +20 -0
- package/src/util/fireEvent.ts +15 -0
- package/src/util/index.ts +102 -0
- package/src/util/internals/cloneDeep.ts +2 -0
- package/src/util/internals/getRandomInt.ts +8 -0
- package/src/util/internals/ifNaN.ts +9 -0
- package/src/util/internals/index.ts +3 -0
- package/src/util/internals/removeFromArray.ts +14 -0
- package/src/util/internals/uid.ts +3 -0
- package/src/util/lang_string.ts +79 -0
- package/src/util/misc/boundingBoxFromPoints.ts +37 -0
- package/src/util/misc/capValue.ts +2 -0
- package/src/util/misc/cos.ts +24 -0
- package/src/util/misc/dom.ts +50 -0
- package/src/util/misc/findScaleTo.ts +44 -0
- package/src/util/misc/groupSVGElements.ts +15 -0
- package/src/util/misc/isTransparent.ts +28 -0
- package/src/util/misc/matrix.ts +207 -0
- package/src/util/misc/mergeClipPaths.ts +40 -0
- package/src/util/misc/objectEnlive.ts +189 -0
- package/src/util/misc/objectTransforms.ts +129 -0
- package/src/util/misc/pick.ts +29 -0
- package/src/util/misc/planeChange.ts +136 -0
- package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
- package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +226 -0
- package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
- package/src/util/misc/projectStroke/index.ts +53 -0
- package/src/util/misc/projectStroke/types.ts +24 -0
- package/src/util/misc/radiansDegreesConversion.ts +18 -0
- package/src/util/misc/resolveOrigin.ts +22 -0
- package/src/util/misc/rotatePoint.ts +15 -0
- package/src/util/misc/sin.ts +26 -0
- package/src/util/misc/svgParsing.ts +181 -0
- package/src/util/misc/textStyles.ts +134 -0
- package/src/util/misc/toFixed.ts +8 -0
- package/src/util/misc/vectors.ts +82 -0
- package/src/util/path/index.ts +1038 -0
- package/src/util/path/regex.ts +41 -0
- package/src/util/path/typechecks.ts +145 -0
- package/src/util/path/typedefs.ts +305 -0
- package/src/util/transform_matrix_removal.ts +60 -0
- package/src/util/types.ts +78 -0
- package/tsconfig.json +106 -0
- package/HEADER.js +0 -203
- package/build.js +0 -287
- package/dist/fabric.js +0 -31187
- package/dist/fabric.min.js +0 -1
- package/old-travis-reference.yml +0 -97
- package/src/brushes/circle_brush.class.js +0 -144
- package/src/brushes/pattern_brush.class.js +0 -61
- package/src/brushes/pencil_brush.class.js +0 -310
- package/src/brushes/spray_brush.class.js +0 -219
- package/src/canvas.class.js +0 -1312
- package/src/color.class.js +0 -636
- package/src/control.class.js +0 -339
- package/src/controls.actions.js +0 -740
- package/src/controls.render.js +0 -99
- package/src/elements_parser.js +0 -152
- package/src/filters/2d_backend.class.js +0 -65
- package/src/filters/blendcolor_filter.class.js +0 -251
- package/src/filters/blendimage_filter.class.js +0 -247
- package/src/filters/blur_filter.class.js +0 -217
- package/src/filters/brightness_filter.class.js +0 -113
- package/src/filters/colormatrix_filter.class.js +0 -159
- package/src/filters/composed_filter.class.js +0 -72
- package/src/filters/contrast_filter.class.js +0 -113
- package/src/filters/convolute_filter.class.js +0 -352
- package/src/filters/filter_boilerplate.js +0 -111
- package/src/filters/filter_generator.js +0 -85
- package/src/filters/gamma_filter.class.js +0 -136
- package/src/filters/grayscale_filter.class.js +0 -154
- package/src/filters/hue_rotation.class.js +0 -107
- package/src/filters/invert_filter.class.js +0 -111
- package/src/filters/noise_filter.class.js +0 -134
- package/src/filters/pixelate_filter.class.js +0 -137
- package/src/filters/removecolor_filter.class.js +0 -173
- package/src/filters/resize_filter.class.js +0 -490
- package/src/filters/saturate_filter.class.js +0 -119
- package/src/filters/vibrance_filter.class.js +0 -122
- package/src/filters/webgl_backend.class.js +0 -396
- package/src/globalFabric.js +0 -4
- package/src/gradient.class.js +0 -490
- package/src/intersection.class.js +0 -172
- package/src/log.js +0 -11
- package/src/mixins/animation.mixin.js +0 -231
- package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
- package/src/mixins/canvas_events.mixin.js +0 -974
- package/src/mixins/canvas_gestures.mixin.js +0 -149
- package/src/mixins/canvas_grouping.mixin.js +0 -177
- package/src/mixins/canvas_serialization.mixin.js +0 -228
- package/src/mixins/collection.mixin.js +0 -170
- package/src/mixins/default_controls.js +0 -114
- package/src/mixins/itext.svg_export.js +0 -241
- package/src/mixins/itext_behavior.mixin.js +0 -940
- package/src/mixins/itext_click_behavior.mixin.js +0 -278
- package/src/mixins/itext_key_behavior.mixin.js +0 -694
- package/src/mixins/object.svg_export.js +0 -258
- package/src/mixins/object_geometry.mixin.js +0 -683
- package/src/mixins/object_interactivity.mixin.js +0 -314
- package/src/mixins/object_origin.mixin.js +0 -255
- package/src/mixins/object_stacking.mixin.js +0 -80
- package/src/mixins/object_straightening.mixin.js +0 -80
- package/src/mixins/observable.mixin.js +0 -141
- package/src/mixins/shared_methods.mixin.js +0 -94
- package/src/mixins/stateful.mixin.js +0 -107
- package/src/mixins/text_style.mixin.js +0 -324
- package/src/parser.js +0 -1090
- package/src/pattern.class.js +0 -189
- package/src/point.class.js +0 -337
- package/src/shadow.class.js +0 -195
- package/src/shapes/active_selection.class.js +0 -155
- package/src/shapes/circle.class.js +0 -210
- package/src/shapes/ellipse.class.js +0 -181
- package/src/shapes/group.class.js +0 -593
- package/src/shapes/image.class.js +0 -764
- package/src/shapes/itext.class.js +0 -526
- package/src/shapes/line.class.js +0 -324
- package/src/shapes/object.class.js +0 -2008
- package/src/shapes/path.class.js +0 -384
- package/src/shapes/polygon.class.js +0 -81
- package/src/shapes/polyline.class.js +0 -268
- package/src/shapes/rect.class.js +0 -187
- package/src/shapes/text.class.js +0 -1696
- package/src/shapes/textbox.class.js +0 -461
- package/src/shapes/triangle.class.js +0 -93
- package/src/static_canvas.class.js +0 -1881
- package/src/util/anim_ease.js +0 -398
- package/src/util/animate.js +0 -254
- package/src/util/animate_color.js +0 -74
- package/src/util/dom_event.js +0 -50
- package/src/util/dom_misc.js +0 -300
- package/src/util/dom_request.js +0 -54
- package/src/util/dom_style.js +0 -70
- package/src/util/lang_array.js +0 -94
- package/src/util/lang_class.js +0 -115
- package/src/util/lang_object.js +0 -75
- package/src/util/lang_string.js +0 -110
- package/src/util/misc.js +0 -1330
- package/src/util/named_accessors.mixin.js +0 -428
- package/src/util/path.js +0 -829
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//@ts-nocheck
|
|
2
|
+
// TODO this file needs to go away, cross browser style support is not fabricjs domain.
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* wrapper for setting element's style
|
|
6
|
+
* @param {HTMLElement} element
|
|
7
|
+
* @param {Object | string} styles
|
|
8
|
+
*/
|
|
9
|
+
export function setStyle(element, styles) {
|
|
10
|
+
const elementStyle = element.style;
|
|
11
|
+
if (!elementStyle) {
|
|
12
|
+
return;
|
|
13
|
+
} else if (typeof styles === 'string') {
|
|
14
|
+
element.style.cssText += ';' + styles;
|
|
15
|
+
} else {
|
|
16
|
+
Object.entries(styles).forEach(([property, value]) =>
|
|
17
|
+
elementStyle.setProperty(property, value)
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BasicTransformEvent, TModificationEvents } from '../EventTypeDefs';
|
|
2
|
+
|
|
3
|
+
export const fireEvent = (
|
|
4
|
+
eventName: TModificationEvents,
|
|
5
|
+
options: BasicTransformEvent
|
|
6
|
+
) => {
|
|
7
|
+
const {
|
|
8
|
+
transform: { target },
|
|
9
|
+
} = options;
|
|
10
|
+
target.canvas?.fire(`object:${eventName}`, {
|
|
11
|
+
...options,
|
|
12
|
+
target,
|
|
13
|
+
});
|
|
14
|
+
target.fire(eventName, options);
|
|
15
|
+
};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
export { cos } from './misc/cos';
|
|
2
|
+
export { sin } from './misc/sin';
|
|
3
|
+
export {
|
|
4
|
+
rotateVector,
|
|
5
|
+
createVector,
|
|
6
|
+
calcAngleBetweenVectors,
|
|
7
|
+
getUnitVector,
|
|
8
|
+
getBisector,
|
|
9
|
+
} from './misc/vectors';
|
|
10
|
+
export {
|
|
11
|
+
degreesToRadians,
|
|
12
|
+
radiansToDegrees,
|
|
13
|
+
} from './misc/radiansDegreesConversion';
|
|
14
|
+
export { rotatePoint } from './misc/rotatePoint';
|
|
15
|
+
export { projectStrokeOnPoints } from './misc/projectStroke';
|
|
16
|
+
export {
|
|
17
|
+
transformPoint,
|
|
18
|
+
invertTransform,
|
|
19
|
+
composeMatrix,
|
|
20
|
+
qrDecompose,
|
|
21
|
+
calcDimensionsMatrix,
|
|
22
|
+
calcRotateMatrix,
|
|
23
|
+
multiplyTransformMatrices,
|
|
24
|
+
isIdentityMatrix,
|
|
25
|
+
} from './misc/matrix';
|
|
26
|
+
export {
|
|
27
|
+
stylesFromArray,
|
|
28
|
+
stylesToArray,
|
|
29
|
+
hasStyleChanged,
|
|
30
|
+
} from './misc/textStyles';
|
|
31
|
+
export {
|
|
32
|
+
createCanvasElement,
|
|
33
|
+
createImage,
|
|
34
|
+
copyCanvasElement,
|
|
35
|
+
toDataURL,
|
|
36
|
+
} from './misc/dom';
|
|
37
|
+
export { toFixed } from './misc/toFixed';
|
|
38
|
+
export {
|
|
39
|
+
matrixToSVG,
|
|
40
|
+
parsePreserveAspectRatioAttribute,
|
|
41
|
+
parseUnit,
|
|
42
|
+
getSvgAttributes,
|
|
43
|
+
} from './misc/svgParsing';
|
|
44
|
+
export { groupSVGElements } from './misc/groupSVGElements';
|
|
45
|
+
export { findScaleToFit, findScaleToCover } from './misc/findScaleTo';
|
|
46
|
+
export { capValue } from './misc/capValue';
|
|
47
|
+
export {
|
|
48
|
+
saveObjectTransform,
|
|
49
|
+
resetObjectTransform,
|
|
50
|
+
addTransformToObject,
|
|
51
|
+
applyTransformToObject,
|
|
52
|
+
removeTransformFromObject,
|
|
53
|
+
sizeAfterTransform,
|
|
54
|
+
} from './misc/objectTransforms';
|
|
55
|
+
export { makeBoundingBoxFromPoints } from './misc/boundingBoxFromPoints';
|
|
56
|
+
export {
|
|
57
|
+
calcPlaneChangeMatrix,
|
|
58
|
+
sendPointToPlane,
|
|
59
|
+
transformPointRelativeToCanvas,
|
|
60
|
+
sendObjectToPlane,
|
|
61
|
+
} from './misc/planeChange';
|
|
62
|
+
export * as string from './lang_string';
|
|
63
|
+
export {
|
|
64
|
+
loadImage,
|
|
65
|
+
enlivenObjects,
|
|
66
|
+
enlivenObjectEnlivables,
|
|
67
|
+
} from './misc/objectEnlive';
|
|
68
|
+
export { pick } from './misc/pick';
|
|
69
|
+
export {
|
|
70
|
+
joinPath,
|
|
71
|
+
parsePath,
|
|
72
|
+
makePathSimpler,
|
|
73
|
+
getSmoothPathFromPoints,
|
|
74
|
+
getPathSegmentsInfo,
|
|
75
|
+
getBoundsOfCurve,
|
|
76
|
+
getPointOnPath,
|
|
77
|
+
transformPath,
|
|
78
|
+
getRegularPolygonPath,
|
|
79
|
+
} from './path';
|
|
80
|
+
export { setStyle } from './dom_style';
|
|
81
|
+
export { isTouchEvent, getPointer } from './dom_event';
|
|
82
|
+
export {
|
|
83
|
+
// getScrollLeftTop,
|
|
84
|
+
getElementOffset,
|
|
85
|
+
makeElementUnselectable,
|
|
86
|
+
makeElementSelectable,
|
|
87
|
+
} from './dom_misc';
|
|
88
|
+
export { isTransparent } from './misc/isTransparent';
|
|
89
|
+
export { mergeClipPaths } from './misc/mergeClipPaths';
|
|
90
|
+
export { animate, animateColor } from './animation/animate';
|
|
91
|
+
export * as ease from './animation/easing';
|
|
92
|
+
export {
|
|
93
|
+
requestAnimFrame,
|
|
94
|
+
cancelAnimFrame,
|
|
95
|
+
} from './animation/AnimationFrameProvider';
|
|
96
|
+
export { removeFromArray } from './internals/removeFromArray';
|
|
97
|
+
export { getRandomInt } from './internals/getRandomInt';
|
|
98
|
+
export { wrapElement } from './dom_misc';
|
|
99
|
+
export { request } from './dom_request';
|
|
100
|
+
|
|
101
|
+
// for test compatibility. We don't want to export it
|
|
102
|
+
export { removeTransformMatrixForSvgParsing } from './transform_matrix_removal';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns random number between 2 specified ones.
|
|
3
|
+
* @param {Number} min lower limit
|
|
4
|
+
* @param {Number} max upper limit
|
|
5
|
+
* @return {Number} random value (between min and max)
|
|
6
|
+
*/
|
|
7
|
+
export const getRandomInt = (min: number, max: number): number =>
|
|
8
|
+
Math.floor(Math.random() * (max - min + 1)) + min;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @param value value to check if NaN
|
|
4
|
+
* @param [valueIfNaN]
|
|
5
|
+
* @returns `fallback` is `value is NaN
|
|
6
|
+
*/
|
|
7
|
+
export const ifNaN = (value: number, valueIfNaN?: number) => {
|
|
8
|
+
return isNaN(value) && typeof valueIfNaN === 'number' ? valueIfNaN : value;
|
|
9
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Removes value from an array.
|
|
3
|
+
* Presence of value (and its position in an array) is determined via `Array.prototype.indexOf`
|
|
4
|
+
* @param {Array} array
|
|
5
|
+
* @param {*} value
|
|
6
|
+
* @return {Array} original array
|
|
7
|
+
*/
|
|
8
|
+
export const removeFromArray = <T>(array: T[], value: T): T[] => {
|
|
9
|
+
const idx = array.indexOf(value);
|
|
10
|
+
if (idx !== -1) {
|
|
11
|
+
array.splice(idx, 1);
|
|
12
|
+
}
|
|
13
|
+
return array;
|
|
14
|
+
};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capitalizes a string
|
|
3
|
+
* @param {String} string String to capitalize
|
|
4
|
+
* @param {Boolean} [firstLetterOnly] If true only first letter is capitalized
|
|
5
|
+
* and other letters stay untouched, if false first letter is capitalized
|
|
6
|
+
* and other letters are converted to lowercase.
|
|
7
|
+
* @return {String} Capitalized version of a string
|
|
8
|
+
*/
|
|
9
|
+
export const capitalize = (string: string, firstLetterOnly = false): string =>
|
|
10
|
+
`${string.charAt(0).toUpperCase()}${
|
|
11
|
+
firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase()
|
|
12
|
+
}`;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Escapes XML in a string
|
|
16
|
+
* @param {String} string String to escape
|
|
17
|
+
* @return {String} Escaped version of a string
|
|
18
|
+
*/
|
|
19
|
+
export const escapeXml = (string: string): string =>
|
|
20
|
+
string
|
|
21
|
+
.replace(/&/g, '&')
|
|
22
|
+
.replace(/"/g, '"')
|
|
23
|
+
.replace(/'/g, ''')
|
|
24
|
+
.replace(/</g, '<')
|
|
25
|
+
.replace(/>/g, '>');
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Divide a string in the user perceived single units
|
|
29
|
+
* @param {String} textstring String to escape
|
|
30
|
+
* @return {Array} array containing the graphemes
|
|
31
|
+
*/
|
|
32
|
+
export const graphemeSplit = (textstring: string): string[] => {
|
|
33
|
+
const graphemes = [];
|
|
34
|
+
for (let i = 0, chr; i < textstring.length; i++) {
|
|
35
|
+
if ((chr = getWholeChar(textstring, i)) === false) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
graphemes.push(chr as string);
|
|
39
|
+
}
|
|
40
|
+
return graphemes;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
// taken from mdn in the charAt doc page.
|
|
44
|
+
const getWholeChar = (str: string, i: number): string | boolean => {
|
|
45
|
+
const code = str.charCodeAt(i);
|
|
46
|
+
if (isNaN(code)) {
|
|
47
|
+
return ''; // Position not found
|
|
48
|
+
}
|
|
49
|
+
if (code < 0xd800 || code > 0xdfff) {
|
|
50
|
+
return str.charAt(i);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// High surrogate (could change last hex to 0xDB7F to treat high private
|
|
54
|
+
// surrogates as single characters)
|
|
55
|
+
if (0xd800 <= code && code <= 0xdbff) {
|
|
56
|
+
if (str.length <= i + 1) {
|
|
57
|
+
throw 'High surrogate without following low surrogate';
|
|
58
|
+
}
|
|
59
|
+
const next = str.charCodeAt(i + 1);
|
|
60
|
+
if (0xdc00 > next || next > 0xdfff) {
|
|
61
|
+
throw 'High surrogate without following low surrogate';
|
|
62
|
+
}
|
|
63
|
+
return str.charAt(i) + str.charAt(i + 1);
|
|
64
|
+
}
|
|
65
|
+
// Low surrogate (0xDC00 <= code && code <= 0xDFFF)
|
|
66
|
+
if (i === 0) {
|
|
67
|
+
throw 'Low surrogate without preceding high surrogate';
|
|
68
|
+
}
|
|
69
|
+
const prev = str.charCodeAt(i - 1);
|
|
70
|
+
|
|
71
|
+
// (could change last hex to 0xDB7F to treat high private
|
|
72
|
+
// surrogates as single characters)
|
|
73
|
+
if (0xd800 > prev || prev > 0xdbff) {
|
|
74
|
+
throw 'Low surrogate without preceding high surrogate';
|
|
75
|
+
}
|
|
76
|
+
// We can pass over low surrogates now as the second component
|
|
77
|
+
// in a pair which we have already processed
|
|
78
|
+
return false;
|
|
79
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { XY, Point } from '../../Point';
|
|
2
|
+
import { TBBox } from '../../typedefs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Calculates bounding box (left, top, width, height) from given `points`
|
|
6
|
+
* @param {XY[]} points
|
|
7
|
+
* @return {Object} Object with left, top, width, height properties
|
|
8
|
+
*/
|
|
9
|
+
export const makeBoundingBoxFromPoints = (points: XY[]): TBBox => {
|
|
10
|
+
if (points.length === 0) {
|
|
11
|
+
return {
|
|
12
|
+
left: 0,
|
|
13
|
+
top: 0,
|
|
14
|
+
width: 0,
|
|
15
|
+
height: 0,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const { min, max } = points.reduce(
|
|
20
|
+
({ min, max }, curr) => {
|
|
21
|
+
return {
|
|
22
|
+
min: min.min(curr),
|
|
23
|
+
max: max.max(curr),
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
{ min: new Point(points[0]), max: new Point(points[0]) }
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
const size = max.subtract(min);
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
left: min.x,
|
|
33
|
+
top: min.y,
|
|
34
|
+
width: size.x,
|
|
35
|
+
height: size.y,
|
|
36
|
+
};
|
|
37
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { TRadian } from '../../typedefs';
|
|
2
|
+
import { halfPI } from '../../constants';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Calculate the cos of an angle, avoiding returning floats for known results
|
|
6
|
+
* This function is here just to avoid getting 0.999999999999999 when dealing
|
|
7
|
+
* with numbers that are really 1 or 0.
|
|
8
|
+
* @param {TRadian} angle the angle
|
|
9
|
+
* @return {Number} the cosin value for angle.
|
|
10
|
+
*/
|
|
11
|
+
export const cos = (angle: TRadian): number => {
|
|
12
|
+
if (angle === 0) {
|
|
13
|
+
return 1;
|
|
14
|
+
}
|
|
15
|
+
const angleSlice = Math.abs(angle) / halfPI;
|
|
16
|
+
switch (angleSlice) {
|
|
17
|
+
case 1:
|
|
18
|
+
case 3:
|
|
19
|
+
return 0;
|
|
20
|
+
case 2:
|
|
21
|
+
return -1;
|
|
22
|
+
}
|
|
23
|
+
return Math.cos(angle);
|
|
24
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { getDocument } from '../../env';
|
|
2
|
+
import { ImageFormat } from '../../typedefs';
|
|
3
|
+
/**
|
|
4
|
+
* Creates canvas element
|
|
5
|
+
* @return {CanvasElement} initialized canvas element
|
|
6
|
+
*/
|
|
7
|
+
export const createCanvasElement = (): HTMLCanvasElement =>
|
|
8
|
+
getDocument().createElement('canvas');
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Creates image element (works on client and node)
|
|
12
|
+
* @return {HTMLImageElement} HTML image element
|
|
13
|
+
*/
|
|
14
|
+
export const createImage = (): HTMLImageElement =>
|
|
15
|
+
getDocument().createElement('img');
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Creates a canvas element that is a copy of another and is also painted
|
|
19
|
+
* @param {CanvasElement} canvas to copy size and content of
|
|
20
|
+
* @return {CanvasElement} initialized canvas element
|
|
21
|
+
*/
|
|
22
|
+
export const copyCanvasElement = (
|
|
23
|
+
canvas: HTMLCanvasElement
|
|
24
|
+
): HTMLCanvasElement => {
|
|
25
|
+
const newCanvas = createCanvasElement();
|
|
26
|
+
newCanvas.width = canvas.width;
|
|
27
|
+
newCanvas.height = canvas.height;
|
|
28
|
+
newCanvas.getContext('2d')?.drawImage(canvas, 0, 0);
|
|
29
|
+
return newCanvas;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* since 2.6.0 moved from canvas instance to utility.
|
|
34
|
+
* possibly useless
|
|
35
|
+
* @param {CanvasElement} canvasEl to copy size and content of
|
|
36
|
+
* @param {String} format 'jpeg' or 'png', in some browsers 'webp' is ok too
|
|
37
|
+
* @param {Number} quality <= 1 and > 0
|
|
38
|
+
* @return {String} data url
|
|
39
|
+
*/
|
|
40
|
+
export const toDataURL = (
|
|
41
|
+
canvasEl: HTMLCanvasElement,
|
|
42
|
+
format: ImageFormat,
|
|
43
|
+
quality: number
|
|
44
|
+
) => canvasEl.toDataURL(`image/${format}`, quality);
|
|
45
|
+
|
|
46
|
+
export const isHTMLCanvas = (
|
|
47
|
+
canvas: HTMLCanvasElement | string
|
|
48
|
+
): canvas is HTMLCanvasElement => {
|
|
49
|
+
return !!canvas && (canvas as HTMLCanvasElement).getContext !== undefined;
|
|
50
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface IWithDimensions {
|
|
2
|
+
/**
|
|
3
|
+
* natural unscaled width of the object
|
|
4
|
+
*/
|
|
5
|
+
width: number;
|
|
6
|
+
/**
|
|
7
|
+
* natural unscaled height of the object
|
|
8
|
+
*/
|
|
9
|
+
height: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Finds the scale for the object source to fit inside the object destination,
|
|
14
|
+
* keeping aspect ratio intact.
|
|
15
|
+
* respect the total allowed area for the cache.
|
|
16
|
+
* @param {IWithDimensions} source
|
|
17
|
+
* @param {IWithDimensions} destination
|
|
18
|
+
* @return {Number} scale factor to apply to source to fit into destination
|
|
19
|
+
*/
|
|
20
|
+
export const findScaleToFit = (
|
|
21
|
+
source: IWithDimensions,
|
|
22
|
+
destination: IWithDimensions
|
|
23
|
+
) =>
|
|
24
|
+
Math.min(
|
|
25
|
+
destination.width / source.width,
|
|
26
|
+
destination.height / source.height
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Finds the scale for the object source to cover entirely the object destination,
|
|
31
|
+
* keeping aspect ratio intact.
|
|
32
|
+
* respect the total allowed area for the cache.
|
|
33
|
+
* @param {IWithDimensions} source
|
|
34
|
+
* @param {IWithDimensions} destination
|
|
35
|
+
* @return {Number} scale factor to apply to source to cover destination
|
|
36
|
+
*/
|
|
37
|
+
export const findScaleToCover = (
|
|
38
|
+
source: IWithDimensions,
|
|
39
|
+
destination: IWithDimensions
|
|
40
|
+
) =>
|
|
41
|
+
Math.max(
|
|
42
|
+
destination.width / source.width,
|
|
43
|
+
destination.height / source.height
|
|
44
|
+
);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { FabricObject } from '../../shapes/Object/FabricObject';
|
|
2
|
+
import { Group } from '../../shapes/Group';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Groups SVG elements (usually those retrieved from SVG document)
|
|
6
|
+
* @static
|
|
7
|
+
* @param {FabricObject[]} elements FabricObject(s) parsed from svg, to group
|
|
8
|
+
* @return {FabricObject | Group}
|
|
9
|
+
*/
|
|
10
|
+
export const groupSVGElements = (elements: FabricObject[]) => {
|
|
11
|
+
if (elements && elements.length === 1) {
|
|
12
|
+
return elements[0];
|
|
13
|
+
}
|
|
14
|
+
return new Group(elements);
|
|
15
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns true if context has transparent pixel
|
|
3
|
+
* at specified location (taking tolerance into account)
|
|
4
|
+
* @param {CanvasRenderingContext2D} ctx context
|
|
5
|
+
* @param {Number} x x coordinate in canvasElementCoordinate, not fabric space. integer
|
|
6
|
+
* @param {Number} y y coordinate in canvasElementCoordinate, not fabric space. integer
|
|
7
|
+
* @param {Number} tolerance Tolerance pixels around the point, not alpha tolerance, integer
|
|
8
|
+
* @return {boolean} true if transparent
|
|
9
|
+
*/
|
|
10
|
+
export const isTransparent = (
|
|
11
|
+
ctx: CanvasRenderingContext2D,
|
|
12
|
+
x: number,
|
|
13
|
+
y: number,
|
|
14
|
+
tolerance: number
|
|
15
|
+
): boolean => {
|
|
16
|
+
tolerance = Math.round(tolerance);
|
|
17
|
+
const size = tolerance * 2 + 1;
|
|
18
|
+
const { data } = ctx.getImageData(x - tolerance, y - tolerance, size, size);
|
|
19
|
+
|
|
20
|
+
// Split image data - for tolerance > 1, pixelDataSize = 4;
|
|
21
|
+
for (let i = 3; i < data.length; i += 4) {
|
|
22
|
+
const alphaChannel = data[i];
|
|
23
|
+
if (alphaChannel > 0) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
};
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { iMatrix } from '../../constants';
|
|
2
|
+
import { XY, Point } from '../../Point';
|
|
3
|
+
import { TDegree, TMat2D } from '../../typedefs';
|
|
4
|
+
import { cos } from './cos';
|
|
5
|
+
import { degreesToRadians, radiansToDegrees } from './radiansDegreesConversion';
|
|
6
|
+
import { sin } from './sin';
|
|
7
|
+
|
|
8
|
+
type TRotateMatrixArgs = {
|
|
9
|
+
angle?: TDegree;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
type TTranslateMatrixArgs = {
|
|
13
|
+
translateX?: number;
|
|
14
|
+
translateY?: number;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export type TScaleMatrixArgs = {
|
|
18
|
+
scaleX?: number;
|
|
19
|
+
scaleY?: number;
|
|
20
|
+
flipX?: boolean;
|
|
21
|
+
flipY?: boolean;
|
|
22
|
+
skewX?: TDegree;
|
|
23
|
+
skewY?: TDegree;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export type TComposeMatrixArgs = TTranslateMatrixArgs &
|
|
27
|
+
TRotateMatrixArgs &
|
|
28
|
+
TScaleMatrixArgs;
|
|
29
|
+
|
|
30
|
+
export type TQrDecomposeOut = Required<
|
|
31
|
+
Omit<TComposeMatrixArgs, 'flipX' | 'flipY'>
|
|
32
|
+
>;
|
|
33
|
+
|
|
34
|
+
export const isIdentityMatrix = (mat: TMat2D) =>
|
|
35
|
+
mat.every((value, index) => value === iMatrix[index]);
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Apply transform t to point p
|
|
39
|
+
* @param {Point | XY} p The point to transform
|
|
40
|
+
* @param {Array} t The transform
|
|
41
|
+
* @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied
|
|
42
|
+
* @return {Point} The transformed point
|
|
43
|
+
*/
|
|
44
|
+
export const transformPoint = (
|
|
45
|
+
p: XY,
|
|
46
|
+
t: TMat2D,
|
|
47
|
+
ignoreOffset?: boolean
|
|
48
|
+
): Point => new Point(p).transform(t, ignoreOffset);
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Invert transformation t
|
|
52
|
+
* @param {Array} t The transform
|
|
53
|
+
* @return {Array} The inverted transform
|
|
54
|
+
*/
|
|
55
|
+
export const invertTransform = (t: TMat2D): TMat2D => {
|
|
56
|
+
const a = 1 / (t[0] * t[3] - t[1] * t[2]),
|
|
57
|
+
r = [a * t[3], -a * t[1], -a * t[2], a * t[0], 0, 0] as TMat2D,
|
|
58
|
+
{ x, y } = transformPoint(new Point(t[4], t[5]), r, true);
|
|
59
|
+
r[4] = -x;
|
|
60
|
+
r[5] = -y;
|
|
61
|
+
return r;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Multiply matrix A by matrix B to nest transformations
|
|
66
|
+
* @param {TMat2D} a First transformMatrix
|
|
67
|
+
* @param {TMat2D} b Second transformMatrix
|
|
68
|
+
* @param {Boolean} is2x2 flag to multiply matrices as 2x2 matrices
|
|
69
|
+
* @return {TMat2D} The product of the two transform matrices
|
|
70
|
+
*/
|
|
71
|
+
export const multiplyTransformMatrices = (
|
|
72
|
+
a: TMat2D,
|
|
73
|
+
b: TMat2D,
|
|
74
|
+
is2x2?: boolean
|
|
75
|
+
): TMat2D =>
|
|
76
|
+
[
|
|
77
|
+
a[0] * b[0] + a[2] * b[1],
|
|
78
|
+
a[1] * b[0] + a[3] * b[1],
|
|
79
|
+
a[0] * b[2] + a[2] * b[3],
|
|
80
|
+
a[1] * b[2] + a[3] * b[3],
|
|
81
|
+
is2x2 ? 0 : a[0] * b[4] + a[2] * b[5] + a[4],
|
|
82
|
+
is2x2 ? 0 : a[1] * b[4] + a[3] * b[5] + a[5],
|
|
83
|
+
] as TMat2D;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Decomposes standard 2x3 matrix into transform components
|
|
87
|
+
* @param {TMat2D} a transformMatrix
|
|
88
|
+
* @return {Object} Components of transform
|
|
89
|
+
*/
|
|
90
|
+
export const qrDecompose = (a: TMat2D): TQrDecomposeOut => {
|
|
91
|
+
const angle = Math.atan2(a[1], a[0]),
|
|
92
|
+
denom = Math.pow(a[0], 2) + Math.pow(a[1], 2),
|
|
93
|
+
scaleX = Math.sqrt(denom),
|
|
94
|
+
scaleY = (a[0] * a[3] - a[2] * a[1]) / scaleX,
|
|
95
|
+
skewX = Math.atan2(a[0] * a[2] + a[1] * a[3], denom);
|
|
96
|
+
return {
|
|
97
|
+
angle: radiansToDegrees(angle),
|
|
98
|
+
scaleX,
|
|
99
|
+
scaleY,
|
|
100
|
+
skewX: radiansToDegrees(skewX),
|
|
101
|
+
skewY: 0 as TDegree,
|
|
102
|
+
translateX: a[4] || 0,
|
|
103
|
+
translateY: a[5] || 0,
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Returns a transform matrix starting from an object of the same kind of
|
|
109
|
+
* the one returned from qrDecompose, useful also if you want to calculate some
|
|
110
|
+
* transformations from an object that is not enlived yet
|
|
111
|
+
* @param {Object} options
|
|
112
|
+
* @param {Number} [options.angle] angle in degrees
|
|
113
|
+
* @return {TMat2D} transform matrix
|
|
114
|
+
*/
|
|
115
|
+
export const calcRotateMatrix = ({ angle }: TRotateMatrixArgs): TMat2D => {
|
|
116
|
+
if (!angle) {
|
|
117
|
+
return iMatrix;
|
|
118
|
+
}
|
|
119
|
+
const theta = degreesToRadians(angle),
|
|
120
|
+
cosin = cos(theta),
|
|
121
|
+
sinus = sin(theta);
|
|
122
|
+
return [cosin, sinus, -sinus, cosin, 0, 0];
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Returns a transform matrix starting from an object of the same kind of
|
|
127
|
+
* the one returned from qrDecompose, useful also if you want to calculate some
|
|
128
|
+
* transformations from an object that is not enlived yet.
|
|
129
|
+
* is called DimensionsTransformMatrix because those properties are the one that influence
|
|
130
|
+
* the size of the resulting box of the object.
|
|
131
|
+
* @param {Object} options
|
|
132
|
+
* @param {Number} [options.scaleX]
|
|
133
|
+
* @param {Number} [options.scaleY]
|
|
134
|
+
* @param {Boolean} [options.flipX]
|
|
135
|
+
* @param {Boolean} [options.flipY]
|
|
136
|
+
* @param {Number} [options.skewX]
|
|
137
|
+
* @param {Number} [options.skewY]
|
|
138
|
+
* @return {Number[]} transform matrix
|
|
139
|
+
*/
|
|
140
|
+
export const calcDimensionsMatrix = ({
|
|
141
|
+
scaleX = 1,
|
|
142
|
+
scaleY = 1,
|
|
143
|
+
flipX = false,
|
|
144
|
+
flipY = false,
|
|
145
|
+
skewX = 0 as TDegree,
|
|
146
|
+
skewY = 0 as TDegree,
|
|
147
|
+
}: TScaleMatrixArgs) => {
|
|
148
|
+
let scaleMatrix = iMatrix;
|
|
149
|
+
if (scaleX !== 1 || scaleY !== 1 || flipX || flipY) {
|
|
150
|
+
scaleMatrix = [
|
|
151
|
+
flipX ? -scaleX : scaleX,
|
|
152
|
+
0,
|
|
153
|
+
0,
|
|
154
|
+
flipY ? -scaleY : scaleY,
|
|
155
|
+
0,
|
|
156
|
+
0,
|
|
157
|
+
] as TMat2D;
|
|
158
|
+
}
|
|
159
|
+
if (skewX) {
|
|
160
|
+
scaleMatrix = multiplyTransformMatrices(
|
|
161
|
+
scaleMatrix,
|
|
162
|
+
[1, 0, Math.tan(degreesToRadians(skewX)), 1] as unknown as TMat2D,
|
|
163
|
+
true
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
if (skewY) {
|
|
167
|
+
scaleMatrix = multiplyTransformMatrices(
|
|
168
|
+
scaleMatrix,
|
|
169
|
+
[1, Math.tan(degreesToRadians(skewY)), 0, 1] as unknown as TMat2D,
|
|
170
|
+
true
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
return scaleMatrix;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Returns a transform matrix starting from an object of the same kind of
|
|
178
|
+
* the one returned from qrDecompose, useful also if you want to calculate some
|
|
179
|
+
* transformations from an object that is not enlived yet
|
|
180
|
+
* @param {Object} options
|
|
181
|
+
* @param {Number} [options.angle]
|
|
182
|
+
* @param {Number} [options.scaleX]
|
|
183
|
+
* @param {Number} [options.scaleY]
|
|
184
|
+
* @param {Boolean} [options.flipX]
|
|
185
|
+
* @param {Boolean} [options.flipY]
|
|
186
|
+
* @param {Number} [options.skewX]
|
|
187
|
+
* @param {Number} [options.skewY]
|
|
188
|
+
* @param {Number} [options.translateX]
|
|
189
|
+
* @param {Number} [options.translateY]
|
|
190
|
+
* @return {Number[]} transform matrix
|
|
191
|
+
*/
|
|
192
|
+
export const composeMatrix = ({
|
|
193
|
+
translateX = 0,
|
|
194
|
+
translateY = 0,
|
|
195
|
+
angle = 0 as TDegree,
|
|
196
|
+
...otherOptions
|
|
197
|
+
}: TComposeMatrixArgs): TMat2D => {
|
|
198
|
+
let matrix = [1, 0, 0, 1, translateX, translateY] as TMat2D;
|
|
199
|
+
if (angle) {
|
|
200
|
+
matrix = multiplyTransformMatrices(matrix, calcRotateMatrix({ angle }));
|
|
201
|
+
}
|
|
202
|
+
const scaleMatrix = calcDimensionsMatrix(otherOptions);
|
|
203
|
+
if (scaleMatrix !== iMatrix) {
|
|
204
|
+
matrix = multiplyTransformMatrices(matrix, scaleMatrix);
|
|
205
|
+
}
|
|
206
|
+
return matrix;
|
|
207
|
+
};
|