fabric 5.3.0 → 6.0.0-beta1
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/.eslintrc.js +43 -0
- package/.eslintrc.json +38 -46
- package/.eslintrc_tests +12 -0
- package/.gitattributes +2 -0
- package/.prettierignore +16 -0
- package/.prettierrc +4 -0
- package/CHANGELOG.md +491 -189
- package/CONTRIBUTING.md +226 -58
- package/README.md +188 -239
- package/bower.json +1 -3
- package/dist/fabric.d.ts +1021 -0
- package/dist/index.cjs +28027 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.min.js +1 -0
- package/dist/index.mjs +27964 -0
- package/dist/index.mjs.map +1 -0
- package/dist/index.node.cjs +28092 -0
- package/dist/index.node.cjs.map +1 -0
- package/dist/index.node.d.ts +15 -0
- package/dist/index.node.mjs +28035 -0
- package/dist/index.node.mjs.map +1 -0
- package/dist/src/Collection.d.ts +126 -0
- package/dist/src/CommonMethods.d.ts +32 -0
- package/dist/src/EventTypeDefs.d.ts +226 -0
- package/dist/src/Intersection.d.ts +100 -0
- package/dist/src/Observable.d.ts +54 -0
- package/dist/src/Pattern.d.ts +104 -0
- package/dist/src/Point.d.ts +232 -0
- package/dist/src/Shadow.d.ts +87 -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 +46 -0
- package/dist/src/canvas/Canvas.d.ts +567 -0
- package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
- package/dist/src/canvas/StaticCanvas.d.ts +751 -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/controls.render.d.ts +29 -0
- package/dist/src/controls/default_controls.d.ts +50 -0
- package/dist/src/controls/drag.d.ts +12 -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 +7 -0
- package/dist/src/env/node.d.ts +3 -0
- package/dist/src/env/types.d.ts +15 -0
- package/dist/src/filters/BaseFilter.d.ts +156 -0
- package/dist/src/filters/BlendColor.d.ts +80 -0
- package/dist/src/filters/BlendImage.d.ts +90 -0
- package/dist/src/filters/Blur.d.ts +50 -0
- package/dist/src/filters/Boilerplate.d.ts +46 -0
- package/dist/src/filters/Brightness.d.ts +46 -0
- package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
- package/dist/src/filters/ColorMatrix.d.ts +62 -0
- package/dist/src/filters/ColorMatrixFilters.d.ts +1169 -0
- package/dist/src/filters/Composed.d.ts +47 -0
- package/dist/src/filters/Contrast.d.ts +44 -0
- package/dist/src/filters/Convolute.d.ts +82 -0
- package/dist/src/filters/FilterBackend.d.ts +14 -0
- package/dist/src/filters/Gamma.d.ts +53 -0
- package/dist/src/filters/Grayscale.d.ts +45 -0
- package/dist/src/filters/HueRotation.d.ts +24 -0
- package/dist/src/filters/Invert.d.ts +54 -0
- package/dist/src/filters/Noise.d.ts +53 -0
- package/dist/src/filters/Pixelate.d.ts +43 -0
- package/dist/src/filters/RemoveColor.d.ts +62 -0
- package/dist/src/filters/Resize.d.ts +134 -0
- package/dist/src/filters/Saturation.d.ts +47 -0
- package/dist/src/filters/Vibrance.d.ts +47 -0
- package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
- package/dist/src/filters/WebGLProbe.d.ts +28 -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 +6 -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/mixins/stateful.mixin.d.ts +18 -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 +54 -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/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 +66 -0
- package/dist/src/shapes/Circle.d.ts +80 -0
- package/dist/src/shapes/Ellipse.d.ts +74 -0
- package/dist/src/shapes/Group.d.ts +381 -0
- package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
- package/dist/src/shapes/IText/IText.d.ts +322 -0
- package/dist/src/shapes/IText/ITextBehavior.d.ts +285 -0
- package/dist/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
- package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +193 -0
- package/dist/src/shapes/IText/constants.d.ts +13 -0
- package/dist/src/shapes/Image.d.ts +283 -0
- package/dist/src/shapes/Line.d.ts +117 -0
- package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
- package/dist/src/shapes/Object/FabricObject.d.ts +9 -0
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
- package/dist/src/shapes/Object/InteractiveObject.d.ts +282 -0
- package/dist/src/shapes/Object/Object.d.ts +906 -0
- package/dist/src/shapes/Object/ObjectGeometry.d.ts +343 -0
- package/dist/src/shapes/Object/ObjectOrigin.d.ts +178 -0
- package/dist/src/shapes/Object/StackedObject.d.ts +62 -0
- package/dist/src/shapes/Object/defaultValues.d.ts +77 -0
- package/dist/src/shapes/Path.d.ts +123 -0
- package/dist/src/shapes/Polygon.d.ts +7 -0
- package/dist/src/shapes/Polyline.d.ts +130 -0
- package/dist/src/shapes/Rect.d.ts +62 -0
- package/dist/src/shapes/Text/StyledText.d.ts +118 -0
- package/dist/src/shapes/Text/Text.d.ts +656 -0
- package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
- package/dist/src/shapes/Textbox.d.ts +170 -0
- package/dist/src/shapes/Triangle.d.ts +17 -0
- package/dist/src/typedefs.d.ts +93 -0
- package/dist/src/util/animation/AnimationBase.d.ts +54 -0
- package/dist/src/util/animation/AnimationFrameProvider.d.ts +8 -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/class_registry.d.ts +14 -0
- package/dist/src/util/dom_event.d.ts +5 -0
- package/dist/src/util/dom_misc.d.ts +40 -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/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_class.d.ts +12 -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 +8 -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.d.ts +108 -0
- package/dist/src/util/transform_matrix_removal.d.ts +14 -0
- package/dist/src/util/types.d.ts +19 -0
- package/fabric.ts +427 -0
- package/index.node.ts +43 -0
- package/index.ts +1 -0
- package/package.json +90 -39
- package/publish.js +0 -26
- package/rollup.config.mjs +79 -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/index.mjs +679 -0
- package/scripts/transform_files.mjs +504 -0
- package/src/Collection.ts +311 -0
- package/src/CommonMethods.ts +63 -0
- package/src/EventTypeDefs.ts +294 -0
- package/src/Intersection.ts +273 -0
- package/src/Observable.ts +175 -0
- package/src/Pattern.ts +211 -0
- package/src/Point.ts +388 -0
- package/src/Shadow.ts +215 -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 +89 -0
- package/src/canvas/Canvas.ts +1672 -0
- package/src/canvas/SelectableCanvas.ts +1636 -0
- package/src/canvas/StaticCanvas.ts +1709 -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 +19 -0
- package/src/controls/Control.ts +377 -0
- package/src/controls/changeWidth.ts +52 -0
- package/src/controls/controls.render.ts +138 -0
- package/src/controls/default_controls.ts +132 -0
- package/src/controls/drag.ts +31 -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 +28 -0
- package/src/env/index.ts +19 -0
- package/src/env/node.ts +52 -0
- package/src/env/types.ts +15 -0
- package/src/filters/{base_filter.class.js → BaseFilter.ts} +201 -149
- package/src/filters/BlendColor.ts +258 -0
- package/src/filters/BlendImage.ts +254 -0
- package/src/filters/Blur.ts +202 -0
- package/src/filters/Boilerplate.ts +91 -0
- package/src/filters/Brightness.ts +93 -0
- package/src/filters/Canvas2dFilterBackend.ts +65 -0
- package/src/filters/ColorMatrix.ts +156 -0
- package/src/filters/ColorMatrixFilters.ts +106 -0
- package/src/filters/Composed.ts +85 -0
- package/src/filters/Contrast.ts +94 -0
- package/src/filters/Convolute.ts +341 -0
- package/src/filters/FilterBackend.ts +32 -0
- package/src/filters/Gamma.ts +127 -0
- package/src/filters/Grayscale.ts +137 -0
- package/src/filters/HueRotation.ts +66 -0
- package/src/filters/Invert.ts +117 -0
- package/src/filters/Noise.ts +109 -0
- package/src/filters/Pixelate.ts +114 -0
- package/src/filters/RemoveColor.ts +148 -0
- package/src/filters/Resize.ts +540 -0
- package/src/filters/Saturation.ts +100 -0
- package/src/filters/Vibrance.ts +103 -0
- package/src/filters/WebGLFilterBackend.ts +430 -0
- package/src/filters/WebGLProbe.ts +62 -0
- package/src/filters/typedefs.ts +65 -0
- package/src/gradient/Gradient.ts +401 -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 +55 -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/mixins/stateful.mixin.ts +104 -0
- package/src/parkinglot/canvas_animation.mixin.ts +121 -0
- package/src/parkinglot/straighten.ts +58 -0
- package/src/parser/applyViewboxTransform.ts +162 -0
- package/src/parser/attributes.ts +25 -0
- package/src/parser/constants.ts +118 -0
- package/src/parser/doesSomeParentMatch.ts +19 -0
- package/src/parser/elementById.ts +23 -0
- package/src/parser/elementMatchesRule.ts +19 -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 +32 -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/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 +36 -0
- package/src/parser/parseSVGDocument.ts +106 -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 +79 -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 +157 -0
- package/src/shapes/Circle.ts +205 -0
- package/src/shapes/Ellipse.ts +154 -0
- package/src/shapes/Group.ts +1053 -0
- package/src/shapes/IText/DraggableTextDelegate.ts +394 -0
- package/src/shapes/IText/IText.ts +666 -0
- package/src/shapes/IText/ITextBehavior.ts +1055 -0
- package/src/shapes/IText/ITextClickBehavior.ts +321 -0
- package/src/shapes/IText/ITextKeyBehavior.ts +683 -0
- package/src/shapes/IText/constants.ts +47 -0
- package/src/shapes/Image.ts +789 -0
- package/src/shapes/Line.ts +329 -0
- package/src/shapes/Object/AnimatableObject.ts +106 -0
- package/src/shapes/Object/FabricObject.ts +19 -0
- package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
- package/src/shapes/Object/InteractiveObject.ts +645 -0
- package/src/shapes/Object/Object.ts +1896 -0
- package/src/shapes/Object/ObjectGeometry.ts +830 -0
- package/src/shapes/Object/ObjectOrigin.ts +354 -0
- package/src/shapes/Object/StackedObject.ts +191 -0
- package/src/shapes/Object/defaultValues.ts +112 -0
- package/src/shapes/Path.ts +395 -0
- package/src/shapes/Polygon.ts +19 -0
- package/src/shapes/Polyline.ts +333 -0
- package/src/shapes/Rect.ts +199 -0
- package/src/shapes/Text/StyledText.ts +319 -0
- package/src/shapes/Text/Text.ts +1948 -0
- package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
- package/src/shapes/Textbox.ts +471 -0
- package/src/shapes/Triangle.ts +45 -0
- package/src/typedefs.ts +119 -0
- package/src/util/animation/AnimationBase.ts +166 -0
- package/src/util/animation/AnimationFrameProvider.ts +28 -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/class_registry.ts +54 -0
- package/src/util/dom_event.ts +28 -0
- package/src/util/dom_misc.ts +138 -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/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_class.ts +90 -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 +51 -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 +17 -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 +231 -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 +133 -0
- package/src/util/misc/toFixed.ts +8 -0
- package/src/util/misc/vectors.ts +82 -0
- package/src/util/path.ts +941 -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,327 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Easing functions
|
|
3
|
+
* @see {@link http://gizma.com/easing/ Easing Equations by Robert Penner}
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { twoMathPi, halfPI } from '../../constants';
|
|
7
|
+
import { TEasingFunction } from './types';
|
|
8
|
+
|
|
9
|
+
const normalize = (a: number, c: number, p: number, s: number) => {
|
|
10
|
+
if (a < Math.abs(c)) {
|
|
11
|
+
a = c;
|
|
12
|
+
s = p / 4;
|
|
13
|
+
} else {
|
|
14
|
+
//handle the 0/0 case:
|
|
15
|
+
if (c === 0 && a === 0) {
|
|
16
|
+
s = (p / twoMathPi) * Math.asin(1);
|
|
17
|
+
} else {
|
|
18
|
+
s = (p / twoMathPi) * Math.asin(c / a);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return { a, c, p, s };
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const elastic = (
|
|
25
|
+
a: number,
|
|
26
|
+
s: number,
|
|
27
|
+
p: number,
|
|
28
|
+
t: number,
|
|
29
|
+
d: number
|
|
30
|
+
): number =>
|
|
31
|
+
a * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t * d - s) * twoMathPi) / p);
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Default sinusoidal easing
|
|
35
|
+
*/
|
|
36
|
+
export const defaultEasing: TEasingFunction = (t, b, c, d) =>
|
|
37
|
+
-c * Math.cos((t / d) * halfPI) + c + b;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Cubic easing in
|
|
41
|
+
*/
|
|
42
|
+
export const easeInCubic: TEasingFunction = (t, b, c, d) =>
|
|
43
|
+
c * (t / d) ** 3 + b;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Cubic easing out
|
|
47
|
+
*/
|
|
48
|
+
export const easeOutCubic: TEasingFunction = (t, b, c, d) =>
|
|
49
|
+
c * ((t / d - 1) ** 3 + 1) + b;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Cubic easing in and out
|
|
53
|
+
*/
|
|
54
|
+
export const easeInOutCubic: TEasingFunction = (t, b, c, d) => {
|
|
55
|
+
t /= d / 2;
|
|
56
|
+
if (t < 1) {
|
|
57
|
+
return (c / 2) * t ** 3 + b;
|
|
58
|
+
}
|
|
59
|
+
return (c / 2) * ((t - 2) ** 3 + 2) + b;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Quartic easing in
|
|
64
|
+
*/
|
|
65
|
+
export const easeInQuart: TEasingFunction = (t, b, c, d) =>
|
|
66
|
+
c * (t /= d) * t ** 3 + b;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Quartic easing out
|
|
70
|
+
*/
|
|
71
|
+
export const easeOutQuart: TEasingFunction = (t, b, c, d) =>
|
|
72
|
+
-c * ((t = t / d - 1) * t ** 3 - 1) + b;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Quartic easing in and out
|
|
76
|
+
*/
|
|
77
|
+
export const easeInOutQuart: TEasingFunction = (t, b, c, d) => {
|
|
78
|
+
t /= d / 2;
|
|
79
|
+
if (t < 1) {
|
|
80
|
+
return (c / 2) * t ** 4 + b;
|
|
81
|
+
}
|
|
82
|
+
return (-c / 2) * ((t -= 2) * t ** 3 - 2) + b;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Quintic easing in
|
|
87
|
+
*/
|
|
88
|
+
export const easeInQuint: TEasingFunction = (t, b, c, d) =>
|
|
89
|
+
c * (t / d) ** 5 + b;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Quintic easing out
|
|
93
|
+
*/
|
|
94
|
+
export const easeOutQuint: TEasingFunction = (t, b, c, d) =>
|
|
95
|
+
c * ((t / d - 1) ** 5 + 1) + b;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Quintic easing in and out
|
|
99
|
+
*/
|
|
100
|
+
export const easeInOutQuint: TEasingFunction = (t, b, c, d) => {
|
|
101
|
+
t /= d / 2;
|
|
102
|
+
if (t < 1) {
|
|
103
|
+
return (c / 2) * t ** 5 + b;
|
|
104
|
+
}
|
|
105
|
+
return (c / 2) * ((t - 2) ** 5 + 2) + b;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Sinusoidal easing in
|
|
110
|
+
*/
|
|
111
|
+
export const easeInSine: TEasingFunction = (t, b, c, d) =>
|
|
112
|
+
-c * Math.cos((t / d) * halfPI) + c + b;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Sinusoidal easing out
|
|
116
|
+
*/
|
|
117
|
+
export const easeOutSine: TEasingFunction = (t, b, c, d) =>
|
|
118
|
+
c * Math.sin((t / d) * halfPI) + b;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Sinusoidal easing in and out
|
|
122
|
+
*/
|
|
123
|
+
export const easeInOutSine: TEasingFunction = (t, b, c, d) =>
|
|
124
|
+
(-c / 2) * (Math.cos((Math.PI * t) / d) - 1) + b;
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Exponential easing in
|
|
128
|
+
*/
|
|
129
|
+
export const easeInExpo: TEasingFunction = (t, b, c, d) =>
|
|
130
|
+
t === 0 ? b : c * 2 ** (10 * (t / d - 1)) + b;
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Exponential easing out
|
|
134
|
+
*/
|
|
135
|
+
export const easeOutExpo: TEasingFunction = (t, b, c, d) =>
|
|
136
|
+
t === d ? b + c : c * -(2 ** ((-10 * t) / d) + 1) + b;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Exponential easing in and out
|
|
140
|
+
*/
|
|
141
|
+
export const easeInOutExpo: TEasingFunction = (t, b, c, d) => {
|
|
142
|
+
if (t === 0) {
|
|
143
|
+
return b;
|
|
144
|
+
}
|
|
145
|
+
if (t === d) {
|
|
146
|
+
return b + c;
|
|
147
|
+
}
|
|
148
|
+
t /= d / 2;
|
|
149
|
+
if (t < 1) {
|
|
150
|
+
return (c / 2) * 2 ** (10 * (t - 1)) + b;
|
|
151
|
+
}
|
|
152
|
+
return (c / 2) * -(2 ** (-10 * --t) + 2) + b;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Circular easing in
|
|
157
|
+
*/
|
|
158
|
+
export const easeInCirc: TEasingFunction = (t, b, c, d) =>
|
|
159
|
+
-c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Circular easing out
|
|
163
|
+
*/
|
|
164
|
+
export const easeOutCirc: TEasingFunction = (t, b, c, d) =>
|
|
165
|
+
c * Math.sqrt(1 - (t = t / d - 1) * t) + b;
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Circular easing in and out
|
|
169
|
+
*/
|
|
170
|
+
export const easeInOutCirc: TEasingFunction = (t, b, c, d) => {
|
|
171
|
+
t /= d / 2;
|
|
172
|
+
if (t < 1) {
|
|
173
|
+
return (-c / 2) * (Math.sqrt(1 - t ** 2) - 1) + b;
|
|
174
|
+
}
|
|
175
|
+
return (c / 2) * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Elastic easing in
|
|
180
|
+
*/
|
|
181
|
+
export const easeInElastic: TEasingFunction = (t, b, c, d) => {
|
|
182
|
+
const s = 1.70158,
|
|
183
|
+
a = c;
|
|
184
|
+
let p = 0;
|
|
185
|
+
if (t === 0) {
|
|
186
|
+
return b;
|
|
187
|
+
}
|
|
188
|
+
t /= d;
|
|
189
|
+
if (t === 1) {
|
|
190
|
+
return b + c;
|
|
191
|
+
}
|
|
192
|
+
if (!p) {
|
|
193
|
+
p = d * 0.3;
|
|
194
|
+
}
|
|
195
|
+
const { a: normA, s: normS, p: normP } = normalize(a, c, p, s);
|
|
196
|
+
return -elastic(normA, normS, normP, t, d) + b;
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Elastic easing out
|
|
201
|
+
*/
|
|
202
|
+
export const easeOutElastic: TEasingFunction = (t, b, c, d) => {
|
|
203
|
+
const s = 1.70158,
|
|
204
|
+
a = c;
|
|
205
|
+
let p = 0;
|
|
206
|
+
if (t === 0) {
|
|
207
|
+
return b;
|
|
208
|
+
}
|
|
209
|
+
t /= d;
|
|
210
|
+
if (t === 1) {
|
|
211
|
+
return b + c;
|
|
212
|
+
}
|
|
213
|
+
if (!p) {
|
|
214
|
+
p = d * 0.3;
|
|
215
|
+
}
|
|
216
|
+
const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);
|
|
217
|
+
return (
|
|
218
|
+
normA * 2 ** (-10 * t) * Math.sin(((t * d - normS) * twoMathPi) / normP) +
|
|
219
|
+
normC +
|
|
220
|
+
b
|
|
221
|
+
);
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Elastic easing in and out
|
|
226
|
+
*/
|
|
227
|
+
export const easeInOutElastic: TEasingFunction = (t, b, c, d) => {
|
|
228
|
+
const s = 1.70158,
|
|
229
|
+
a = c;
|
|
230
|
+
let p = 0;
|
|
231
|
+
if (t === 0) {
|
|
232
|
+
return b;
|
|
233
|
+
}
|
|
234
|
+
t /= d / 2;
|
|
235
|
+
if (t === 2) {
|
|
236
|
+
return b + c;
|
|
237
|
+
}
|
|
238
|
+
if (!p) {
|
|
239
|
+
p = d * (0.3 * 1.5);
|
|
240
|
+
}
|
|
241
|
+
const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);
|
|
242
|
+
if (t < 1) {
|
|
243
|
+
return -0.5 * elastic(normA, normS, normP, t, d) + b;
|
|
244
|
+
}
|
|
245
|
+
return (
|
|
246
|
+
normA *
|
|
247
|
+
Math.pow(2, -10 * (t -= 1)) *
|
|
248
|
+
Math.sin(((t * d - normS) * twoMathPi) / normP) *
|
|
249
|
+
0.5 +
|
|
250
|
+
normC +
|
|
251
|
+
b
|
|
252
|
+
);
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Backwards easing in
|
|
257
|
+
*/
|
|
258
|
+
export const easeInBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>
|
|
259
|
+
c * (t /= d) * t * ((s + 1) * t - s) + b;
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Backwards easing out
|
|
263
|
+
*/
|
|
264
|
+
export const easeOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>
|
|
265
|
+
c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Backwards easing in and out
|
|
269
|
+
*/
|
|
270
|
+
export const easeInOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) => {
|
|
271
|
+
t /= d / 2;
|
|
272
|
+
if (t < 1) {
|
|
273
|
+
return (c / 2) * (t * t * (((s *= 1.525) + 1) * t - s)) + b;
|
|
274
|
+
}
|
|
275
|
+
return (c / 2) * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Bouncing easing out
|
|
280
|
+
*/
|
|
281
|
+
export const easeOutBounce: TEasingFunction = (t, b, c, d) => {
|
|
282
|
+
if ((t /= d) < 1 / 2.75) {
|
|
283
|
+
return c * (7.5625 * t * t) + b;
|
|
284
|
+
} else if (t < 2 / 2.75) {
|
|
285
|
+
return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;
|
|
286
|
+
} else if (t < 2.5 / 2.75) {
|
|
287
|
+
return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;
|
|
288
|
+
} else {
|
|
289
|
+
return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Bouncing easing in
|
|
295
|
+
*/
|
|
296
|
+
export const easeInBounce: TEasingFunction = (t, b, c, d) =>
|
|
297
|
+
c - easeOutBounce(d - t, 0, c, d) + b;
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Bouncing easing in and out
|
|
301
|
+
*/
|
|
302
|
+
export const easeInOutBounce: TEasingFunction = (t, b, c, d) =>
|
|
303
|
+
t < d / 2
|
|
304
|
+
? easeInBounce(t * 2, 0, c, d) * 0.5 + b
|
|
305
|
+
: easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Quadratic easing in
|
|
309
|
+
*/
|
|
310
|
+
export const easeInQuad: TEasingFunction = (t, b, c, d) => c * (t /= d) * t + b;
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Quadratic easing out
|
|
314
|
+
*/
|
|
315
|
+
export const easeOutQuad: TEasingFunction = (t, b, c, d) =>
|
|
316
|
+
-c * (t /= d) * (t - 2) + b;
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Quadratic easing in and out
|
|
320
|
+
*/
|
|
321
|
+
export const easeInOutQuad: TEasingFunction = (t, b, c, d) => {
|
|
322
|
+
t /= d / 2;
|
|
323
|
+
if (t < 1) {
|
|
324
|
+
return (c / 2) * t ** 2 + b;
|
|
325
|
+
}
|
|
326
|
+
return (-c / 2) * (--t * (t - 2) - 1) + b;
|
|
327
|
+
};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { TColorArg } from '../../color/Color';
|
|
2
|
+
|
|
3
|
+
export type AnimationState = 'pending' | 'running' | 'completed' | 'aborted';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Callback called every frame
|
|
7
|
+
* @param {number | number[]} value current value of the animation.
|
|
8
|
+
* @param {number} valueProgress ∈ [0, 1], the current animation progress reflected on value, normalized.
|
|
9
|
+
* 0 is the starting value and 1 is the ending value.
|
|
10
|
+
* @param {number} durationProgress ∈ [0, 1], the current animation duration normalized to 1.
|
|
11
|
+
*/
|
|
12
|
+
export type TOnAnimationChangeCallback<T, R = void> = (
|
|
13
|
+
value: T,
|
|
14
|
+
valueProgress: number,
|
|
15
|
+
durationProgress: number
|
|
16
|
+
) => R;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Called on each step to determine if animation should abort
|
|
20
|
+
* @returns truthy if animation should abort
|
|
21
|
+
*/
|
|
22
|
+
export type TAbortCallback<T> = TOnAnimationChangeCallback<T, boolean>;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* An easing function used to calculate the current value
|
|
26
|
+
* @see {@link AnimationBase['calculate']}
|
|
27
|
+
*
|
|
28
|
+
* @param timeElapsed ms elapsed since start
|
|
29
|
+
* @param startValue
|
|
30
|
+
* @param byValue
|
|
31
|
+
* @param duration in ms
|
|
32
|
+
* @returns next value
|
|
33
|
+
*/
|
|
34
|
+
export type TEasingFunction<T = unknown> = T extends number[]
|
|
35
|
+
? (
|
|
36
|
+
timeElapsed: number,
|
|
37
|
+
startValue: number,
|
|
38
|
+
byValue: number,
|
|
39
|
+
duration: number,
|
|
40
|
+
index: number
|
|
41
|
+
) => number
|
|
42
|
+
: (
|
|
43
|
+
timeElapsed: number,
|
|
44
|
+
startValue: number,
|
|
45
|
+
byValue: number,
|
|
46
|
+
duration: number
|
|
47
|
+
) => number;
|
|
48
|
+
|
|
49
|
+
export type TAnimationBaseOptions<T> = {
|
|
50
|
+
/**
|
|
51
|
+
* Duration of the animation in ms
|
|
52
|
+
* @default 500
|
|
53
|
+
*/
|
|
54
|
+
duration: number;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Delay to start the animation in ms
|
|
58
|
+
* @default 0
|
|
59
|
+
*/
|
|
60
|
+
delay: number;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Easing function
|
|
64
|
+
* @default {defaultEasing}
|
|
65
|
+
*/
|
|
66
|
+
easing: TEasingFunction<T>;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* The object this animation is being performed on
|
|
70
|
+
*/
|
|
71
|
+
target: unknown;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export type TAnimationCallbacks<T> = {
|
|
75
|
+
/**
|
|
76
|
+
* Called when the animation starts
|
|
77
|
+
*/
|
|
78
|
+
onStart: VoidFunction;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Called at each frame of the animation
|
|
82
|
+
*/
|
|
83
|
+
onChange: TOnAnimationChangeCallback<T>;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Called after the last frame of the animation
|
|
87
|
+
*/
|
|
88
|
+
onComplete: TOnAnimationChangeCallback<T>;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Function called at each frame.
|
|
92
|
+
* If it returns true, abort
|
|
93
|
+
*/
|
|
94
|
+
abort: TAbortCallback<T>;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export type TBaseAnimationOptions<T, TCallback = T, TEasing = T> = Partial<
|
|
98
|
+
TAnimationBaseOptions<TEasing> & TAnimationCallbacks<TCallback>
|
|
99
|
+
> & {
|
|
100
|
+
startValue: T;
|
|
101
|
+
byValue: T;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export type TAnimationOptions<T, TCallback = T, TEasing = T> = Partial<
|
|
105
|
+
TAnimationBaseOptions<TEasing> &
|
|
106
|
+
TAnimationCallbacks<TCallback> & {
|
|
107
|
+
/**
|
|
108
|
+
* Starting value(s)
|
|
109
|
+
* @default 0
|
|
110
|
+
*/
|
|
111
|
+
startValue: T;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Ending value(s)
|
|
115
|
+
* @default 100
|
|
116
|
+
*/
|
|
117
|
+
endValue: T;
|
|
118
|
+
}
|
|
119
|
+
>;
|
|
120
|
+
|
|
121
|
+
export type ValueAnimationOptions = TAnimationOptions<number>;
|
|
122
|
+
|
|
123
|
+
export type ArrayAnimationOptions = TAnimationOptions<number[]>;
|
|
124
|
+
|
|
125
|
+
export type ColorAnimationOptions = TAnimationOptions<
|
|
126
|
+
TColorArg,
|
|
127
|
+
string,
|
|
128
|
+
number[]
|
|
129
|
+
>;
|
|
130
|
+
|
|
131
|
+
export type AnimationOptions<T extends number | number[] | TColorArg> =
|
|
132
|
+
T extends TColorArg
|
|
133
|
+
? ColorAnimationOptions
|
|
134
|
+
: T extends number[]
|
|
135
|
+
? ArrayAnimationOptions
|
|
136
|
+
: ValueAnimationOptions;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Constructor } from '../typedefs';
|
|
2
|
+
|
|
3
|
+
/***
|
|
4
|
+
* https://www.typescriptlang.org/docs/handbook/mixins.html#alternative-pattern
|
|
5
|
+
*/
|
|
6
|
+
export function applyMixins<T extends Constructor, S extends Constructor>(
|
|
7
|
+
derivedCtor: T,
|
|
8
|
+
constructors: S[]
|
|
9
|
+
) {
|
|
10
|
+
constructors.forEach((baseCtor) => {
|
|
11
|
+
Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
|
|
12
|
+
name !== 'constructor' &&
|
|
13
|
+
Object.defineProperty(
|
|
14
|
+
derivedCtor.prototype,
|
|
15
|
+
name,
|
|
16
|
+
Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||
|
|
17
|
+
Object.create(null)
|
|
18
|
+
);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
return derivedCtor as T & { prototype: InstanceType<T & S> };
|
|
22
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This Map connects the objects type value with their
|
|
3
|
+
* class implementation. It used from any object to understand which are
|
|
4
|
+
* the classes to enlive when requesting a object.type = 'path' for example.
|
|
5
|
+
* Objects uses it for clipPath, Canvas uses it for everything.
|
|
6
|
+
* This is necessary for generic code to run and enlive instances from serialized representation.
|
|
7
|
+
* You can customize which classes get enlived from SVG parsing using this classRegistry.
|
|
8
|
+
* The Registry start empty and gets filled in depending which files you import.
|
|
9
|
+
* If you want to be able to parse arbitrary SVGs or JSON representation of canvases, coming from
|
|
10
|
+
* differnet sources you will need to import all fabric because you may need all classes.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export const JSON = 'json';
|
|
14
|
+
export const SVG = 'svg';
|
|
15
|
+
|
|
16
|
+
export class ClassRegistry {
|
|
17
|
+
declare [JSON]: Map<string, any>;
|
|
18
|
+
declare [SVG]: Map<string, any>;
|
|
19
|
+
|
|
20
|
+
constructor() {
|
|
21
|
+
this[JSON] = new Map();
|
|
22
|
+
this[SVG] = new Map();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
getClass(classType: string): any {
|
|
26
|
+
const constructor = this[JSON].get(classType);
|
|
27
|
+
if (!constructor) {
|
|
28
|
+
throw new Error(`No class registered for ${classType}`);
|
|
29
|
+
}
|
|
30
|
+
return constructor;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
setClass(classConstructor: any, classType?: string) {
|
|
34
|
+
this[JSON].set(
|
|
35
|
+
classType ?? classConstructor.prototype.type,
|
|
36
|
+
classConstructor
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
getSVGClass(SVGTagName: string): any {
|
|
41
|
+
return this[SVG].get(SVGTagName);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
setSVGClass(classConstructor: any, SVGTagName?: string) {
|
|
45
|
+
this[SVG].set(
|
|
46
|
+
SVGTagName ?? classConstructor.prototype.type,
|
|
47
|
+
classConstructor
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const classRegistry = new ClassRegistry();
|
|
53
|
+
|
|
54
|
+
export { classRegistry };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//@ts-nocheck
|
|
2
|
+
import { Point } from '../Point';
|
|
3
|
+
import { getScrollLeftTop } from './dom_misc';
|
|
4
|
+
|
|
5
|
+
const touchEvents = ['touchstart', 'touchmove', 'touchend'];
|
|
6
|
+
|
|
7
|
+
function getTouchInfo(event) {
|
|
8
|
+
const touchProp = event.changedTouches;
|
|
9
|
+
if (touchProp && touchProp[0]) {
|
|
10
|
+
return touchProp[0];
|
|
11
|
+
}
|
|
12
|
+
return event;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const getPointer = (event) => {
|
|
16
|
+
const element = event.target,
|
|
17
|
+
scroll = getScrollLeftTop(element),
|
|
18
|
+
_evt = getTouchInfo(event);
|
|
19
|
+
return new Point(_evt.clientX + scroll.left, _evt.clientY + scroll.top);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const isTouchEvent = (event) =>
|
|
23
|
+
touchEvents.indexOf(event.type) > -1 || event.pointerType === 'touch';
|
|
24
|
+
|
|
25
|
+
export const stopEvent = (e: Event) => {
|
|
26
|
+
e.preventDefault();
|
|
27
|
+
e.stopPropagation();
|
|
28
|
+
};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
//@ts-nocheck
|
|
2
|
+
|
|
3
|
+
import { getEnv } from '../env';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Wraps element with another element
|
|
7
|
+
* @param {HTMLElement} element Element to wrap
|
|
8
|
+
* @param {HTMLElement|String} wrapper Element to wrap with
|
|
9
|
+
* @param {Object} [attributes] Attributes to set on a wrapper
|
|
10
|
+
* @return {HTMLElement} wrapper
|
|
11
|
+
*/
|
|
12
|
+
export function wrapElement(element, wrapper) {
|
|
13
|
+
if (element.parentNode) {
|
|
14
|
+
element.parentNode.replaceChild(wrapper, element);
|
|
15
|
+
}
|
|
16
|
+
wrapper.appendChild(element);
|
|
17
|
+
return wrapper;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Returns element scroll offsets
|
|
22
|
+
* @param {HTMLElement} element Element to operate on
|
|
23
|
+
* @return {Object} Object with left/top values
|
|
24
|
+
*/
|
|
25
|
+
export function getScrollLeftTop(element) {
|
|
26
|
+
let left = 0,
|
|
27
|
+
top = 0;
|
|
28
|
+
|
|
29
|
+
const docElement = getEnv().document.documentElement,
|
|
30
|
+
body = getEnv().document.body || {
|
|
31
|
+
scrollLeft: 0,
|
|
32
|
+
scrollTop: 0,
|
|
33
|
+
};
|
|
34
|
+
// While loop checks (and then sets element to) .parentNode OR .host
|
|
35
|
+
// to account for ShadowDOM. We still want to traverse up out of ShadowDOM,
|
|
36
|
+
// but the .parentNode of a root ShadowDOM node will always be null, instead
|
|
37
|
+
// it should be accessed through .host. See http://stackoverflow.com/a/24765528/4383938
|
|
38
|
+
while (element && (element.parentNode || element.host)) {
|
|
39
|
+
// Set element to element parent, or 'host' in case of ShadowDOM
|
|
40
|
+
element = element.parentNode || element.host;
|
|
41
|
+
|
|
42
|
+
if (element === getEnv().document) {
|
|
43
|
+
left = body.scrollLeft || docElement.scrollLeft || 0;
|
|
44
|
+
top = body.scrollTop || docElement.scrollTop || 0;
|
|
45
|
+
} else {
|
|
46
|
+
left += element.scrollLeft || 0;
|
|
47
|
+
top += element.scrollTop || 0;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (element.nodeType === 1 && element.style.position === 'fixed') {
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return { left, top };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Returns offset for a given element
|
|
60
|
+
* @param {HTMLElement} element Element to get offset for
|
|
61
|
+
* @return {Object} Object with "left" and "top" properties
|
|
62
|
+
*/
|
|
63
|
+
export function getElementOffset(element) {
|
|
64
|
+
let box = { left: 0, top: 0 };
|
|
65
|
+
const doc = element && element.ownerDocument,
|
|
66
|
+
offset = { left: 0, top: 0 },
|
|
67
|
+
offsetAttributes = {
|
|
68
|
+
borderLeftWidth: 'left',
|
|
69
|
+
borderTopWidth: 'top',
|
|
70
|
+
paddingLeft: 'left',
|
|
71
|
+
paddingTop: 'top',
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
if (!doc) {
|
|
75
|
+
return offset;
|
|
76
|
+
}
|
|
77
|
+
const elemStyle = getEnv().document.defaultView.getComputedStyle(
|
|
78
|
+
element,
|
|
79
|
+
null
|
|
80
|
+
);
|
|
81
|
+
for (const attr in offsetAttributes) {
|
|
82
|
+
offset[offsetAttributes[attr]] += parseInt(elemStyle[attr], 10) || 0;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const docElem = doc.documentElement;
|
|
86
|
+
if (typeof element.getBoundingClientRect !== 'undefined') {
|
|
87
|
+
box = element.getBoundingClientRect();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const scrollLeftTop = getScrollLeftTop(element);
|
|
91
|
+
|
|
92
|
+
return {
|
|
93
|
+
left:
|
|
94
|
+
box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,
|
|
95
|
+
top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Makes element unselectable
|
|
101
|
+
* @param {HTMLElement} element Element to make unselectable
|
|
102
|
+
* @return {HTMLElement} Element that was passed in
|
|
103
|
+
*/
|
|
104
|
+
export function makeElementUnselectable(element) {
|
|
105
|
+
if (typeof element.onselectstart !== 'undefined') {
|
|
106
|
+
element.onselectstart = () => false;
|
|
107
|
+
}
|
|
108
|
+
element.style.userSelect = 'none';
|
|
109
|
+
return element;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Makes element selectable
|
|
114
|
+
* @param {HTMLElement} element Element to make selectable
|
|
115
|
+
* @return {HTMLElement} Element that was passed in
|
|
116
|
+
*/
|
|
117
|
+
export function makeElementSelectable(element) {
|
|
118
|
+
if (typeof element.onselectstart !== 'undefined') {
|
|
119
|
+
element.onselectstart = null;
|
|
120
|
+
}
|
|
121
|
+
element.style.userSelect = '';
|
|
122
|
+
return element;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function cleanUpJsdomNode(element) {
|
|
126
|
+
if (!getEnv().isLikelyNode) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const impl = getEnv().jsdomImplForWrapper(element);
|
|
130
|
+
if (impl) {
|
|
131
|
+
impl._image = null;
|
|
132
|
+
impl._canvas = null;
|
|
133
|
+
// unsure if necessary
|
|
134
|
+
impl._currentSrc = null;
|
|
135
|
+
impl._attributes = null;
|
|
136
|
+
impl._classList = null;
|
|
137
|
+
}
|
|
138
|
+
}
|