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,26 @@
|
|
|
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 sin value for angle.
|
|
10
|
+
*/
|
|
11
|
+
export const sin = (angle: TRadian): number => {
|
|
12
|
+
if (angle === 0) {
|
|
13
|
+
return 0;
|
|
14
|
+
}
|
|
15
|
+
const angleSlice = angle / halfPI;
|
|
16
|
+
const value = Math.sign(angle);
|
|
17
|
+
switch (angleSlice) {
|
|
18
|
+
case 1:
|
|
19
|
+
return value;
|
|
20
|
+
case 2:
|
|
21
|
+
return 0;
|
|
22
|
+
case 3:
|
|
23
|
+
return -value;
|
|
24
|
+
}
|
|
25
|
+
return Math.sin(angle);
|
|
26
|
+
};
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { Color } from '../../color/Color';
|
|
2
|
+
import { config } from '../../config';
|
|
3
|
+
import { DEFAULT_SVG_FONT_SIZE } from '../../constants';
|
|
4
|
+
import {
|
|
5
|
+
SupportedSVGUnit,
|
|
6
|
+
SVGElementName,
|
|
7
|
+
TBBox,
|
|
8
|
+
TMat2D,
|
|
9
|
+
} from '../../typedefs';
|
|
10
|
+
import { toFixed } from './toFixed';
|
|
11
|
+
/**
|
|
12
|
+
* Returns array of attributes for given svg that fabric parses
|
|
13
|
+
* @param {SVGElementName} type Type of svg element (eg. 'circle')
|
|
14
|
+
* @return {Array} string names of supported attributes
|
|
15
|
+
*/
|
|
16
|
+
export const getSvgAttributes = (type: SVGElementName) => {
|
|
17
|
+
const commonAttributes = ['instantiated_by_use', 'style', 'id', 'class'];
|
|
18
|
+
switch (type) {
|
|
19
|
+
case SVGElementName.linearGradient:
|
|
20
|
+
return commonAttributes.concat([
|
|
21
|
+
'x1',
|
|
22
|
+
'y1',
|
|
23
|
+
'x2',
|
|
24
|
+
'y2',
|
|
25
|
+
'gradientUnits',
|
|
26
|
+
'gradientTransform',
|
|
27
|
+
]);
|
|
28
|
+
case 'radialGradient':
|
|
29
|
+
return commonAttributes.concat([
|
|
30
|
+
'gradientUnits',
|
|
31
|
+
'gradientTransform',
|
|
32
|
+
'cx',
|
|
33
|
+
'cy',
|
|
34
|
+
'r',
|
|
35
|
+
'fx',
|
|
36
|
+
'fy',
|
|
37
|
+
'fr',
|
|
38
|
+
]);
|
|
39
|
+
case 'stop':
|
|
40
|
+
return commonAttributes.concat(['offset', 'stop-color', 'stop-opacity']);
|
|
41
|
+
}
|
|
42
|
+
return commonAttributes;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Converts from attribute value to pixel value if applicable.
|
|
47
|
+
* Returns converted pixels or original value not converted.
|
|
48
|
+
* @param {string} value number to operate on
|
|
49
|
+
* @param {number} fontSize
|
|
50
|
+
* @return {number}
|
|
51
|
+
*/
|
|
52
|
+
export const parseUnit = (value: string, fontSize: number) => {
|
|
53
|
+
const unit = /\D{0,2}$/.exec(value),
|
|
54
|
+
number = parseFloat(value);
|
|
55
|
+
if (!fontSize) {
|
|
56
|
+
fontSize = DEFAULT_SVG_FONT_SIZE;
|
|
57
|
+
}
|
|
58
|
+
const dpi = config.DPI;
|
|
59
|
+
switch (unit?.[0]) {
|
|
60
|
+
case SupportedSVGUnit.mm:
|
|
61
|
+
return (number * dpi) / 25.4;
|
|
62
|
+
|
|
63
|
+
case SupportedSVGUnit.cm:
|
|
64
|
+
return (number * dpi) / 2.54;
|
|
65
|
+
|
|
66
|
+
case SupportedSVGUnit.in:
|
|
67
|
+
return number * dpi;
|
|
68
|
+
|
|
69
|
+
case SupportedSVGUnit.pt:
|
|
70
|
+
return (number * dpi) / 72; // or * 4 / 3
|
|
71
|
+
|
|
72
|
+
case SupportedSVGUnit.pc:
|
|
73
|
+
return ((number * dpi) / 72) * 12; // or * 16
|
|
74
|
+
|
|
75
|
+
case SupportedSVGUnit.em:
|
|
76
|
+
return number * fontSize;
|
|
77
|
+
|
|
78
|
+
default:
|
|
79
|
+
return number;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export const enum MeetOrSlice {
|
|
84
|
+
meet = 'meet',
|
|
85
|
+
slice = 'slice',
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export const enum MinMidMax {
|
|
89
|
+
min = 'Min',
|
|
90
|
+
mid = 'Mid',
|
|
91
|
+
max = 'Max',
|
|
92
|
+
none = 'none',
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export type TPreserveArParsed = {
|
|
96
|
+
meetOrSlice: MeetOrSlice;
|
|
97
|
+
alignX: MinMidMax;
|
|
98
|
+
alignY: MinMidMax;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
// align can be either none or undefined or a combination of mid/max
|
|
102
|
+
const parseAlign = (align: string): MinMidMax[] => {
|
|
103
|
+
//divide align in alignX and alignY
|
|
104
|
+
if (align && align !== MinMidMax.none) {
|
|
105
|
+
return [align.slice(1, 4) as MinMidMax, align.slice(5, 8) as MinMidMax];
|
|
106
|
+
} else if (align === MinMidMax.none) {
|
|
107
|
+
return [align, align];
|
|
108
|
+
}
|
|
109
|
+
return [MinMidMax.mid, MinMidMax.mid];
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Parse preserveAspectRatio attribute from element
|
|
114
|
+
* https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio
|
|
115
|
+
* @param {string} attribute to be parsed
|
|
116
|
+
* @return {Object} an object containing align and meetOrSlice attribute
|
|
117
|
+
*/
|
|
118
|
+
export const parsePreserveAspectRatioAttribute = (
|
|
119
|
+
attribute: string
|
|
120
|
+
): TPreserveArParsed => {
|
|
121
|
+
const [firstPart, secondPart] = attribute.trim().split(' ') as [
|
|
122
|
+
MinMidMax,
|
|
123
|
+
MeetOrSlice | undefined
|
|
124
|
+
];
|
|
125
|
+
const [alignX, alignY] = parseAlign(firstPart);
|
|
126
|
+
return {
|
|
127
|
+
meetOrSlice: secondPart || MeetOrSlice.meet,
|
|
128
|
+
alignX,
|
|
129
|
+
alignY,
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* given an array of 6 number returns something like `"matrix(...numbers)"`
|
|
135
|
+
* @param {TMat2D} transform an array with 6 numbers
|
|
136
|
+
* @return {String} transform matrix for svg
|
|
137
|
+
*/
|
|
138
|
+
export const matrixToSVG = (transform: TMat2D) =>
|
|
139
|
+
'matrix(' +
|
|
140
|
+
transform
|
|
141
|
+
.map((value) => toFixed(value, config.NUM_FRACTION_DIGITS))
|
|
142
|
+
.join(' ') +
|
|
143
|
+
')';
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Adobe Illustrator (at least CS5) is unable to render rgba()-based fill values
|
|
147
|
+
* we work around it by "moving" alpha channel into opacity attribute and setting fill's alpha to 1
|
|
148
|
+
* @param prop
|
|
149
|
+
* @param value
|
|
150
|
+
* @returns
|
|
151
|
+
*/
|
|
152
|
+
export const colorPropToSVG = (prop: string, value?: any) => {
|
|
153
|
+
if (!value) {
|
|
154
|
+
return `${prop}: none; `;
|
|
155
|
+
} else if (value.toLive) {
|
|
156
|
+
return `${prop}: url(#SVGID_${value.id}); `;
|
|
157
|
+
} else {
|
|
158
|
+
const color = new Color(value),
|
|
159
|
+
opacity = color.getAlpha();
|
|
160
|
+
|
|
161
|
+
let str = `${prop}: ${color.toRgb()}; `;
|
|
162
|
+
|
|
163
|
+
if (opacity !== 1) {
|
|
164
|
+
//change the color in rgb + opacity
|
|
165
|
+
str += `${prop}-opacity: ${opacity.toString()}; `;
|
|
166
|
+
}
|
|
167
|
+
return str;
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
export const createSVGRect = (
|
|
172
|
+
color: string,
|
|
173
|
+
{ left, top, width, height }: TBBox,
|
|
174
|
+
precision = config.NUM_FRACTION_DIGITS
|
|
175
|
+
) => {
|
|
176
|
+
const svgColor = colorPropToSVG('fill', color);
|
|
177
|
+
const [x, y, w, h] = [left, top, width, height].map((value) =>
|
|
178
|
+
toFixed(value, precision)
|
|
179
|
+
);
|
|
180
|
+
return `<rect ${svgColor} x="${x}" y="${y}" width="${w}" height="${h}"></rect>`;
|
|
181
|
+
};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
TextStyle,
|
|
3
|
+
TextStyleDeclaration,
|
|
4
|
+
} from '../../shapes/Text/StyledText';
|
|
5
|
+
import { cloneDeep } from '../internals/cloneDeep';
|
|
6
|
+
|
|
7
|
+
export type TextStyleArray = {
|
|
8
|
+
start: number;
|
|
9
|
+
end: number;
|
|
10
|
+
style: TextStyleDeclaration;
|
|
11
|
+
}[];
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @param {Object} prevStyle first style to compare
|
|
15
|
+
* @param {Object} thisStyle second style to compare
|
|
16
|
+
* @param {boolean} forTextSpans whether to check overline, underline, and line-through properties
|
|
17
|
+
* @return {boolean} true if the style changed
|
|
18
|
+
*/
|
|
19
|
+
export const hasStyleChanged = (
|
|
20
|
+
prevStyle: TextStyleDeclaration,
|
|
21
|
+
thisStyle: TextStyleDeclaration,
|
|
22
|
+
forTextSpans = false
|
|
23
|
+
) =>
|
|
24
|
+
prevStyle.fill !== thisStyle.fill ||
|
|
25
|
+
prevStyle.stroke !== thisStyle.stroke ||
|
|
26
|
+
prevStyle.strokeWidth !== thisStyle.strokeWidth ||
|
|
27
|
+
prevStyle.fontSize !== thisStyle.fontSize ||
|
|
28
|
+
prevStyle.fontFamily !== thisStyle.fontFamily ||
|
|
29
|
+
prevStyle.fontWeight !== thisStyle.fontWeight ||
|
|
30
|
+
prevStyle.fontStyle !== thisStyle.fontStyle ||
|
|
31
|
+
prevStyle.textBackgroundColor !== thisStyle.textBackgroundColor ||
|
|
32
|
+
prevStyle.deltaY !== thisStyle.deltaY ||
|
|
33
|
+
(forTextSpans &&
|
|
34
|
+
(prevStyle.overline !== thisStyle.overline ||
|
|
35
|
+
prevStyle.underline !== thisStyle.underline ||
|
|
36
|
+
prevStyle.linethrough !== thisStyle.linethrough));
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Returns the array form of a text object's inline styles property with styles grouped in ranges
|
|
40
|
+
* rather than per character. This format is less verbose, and is better suited for storage
|
|
41
|
+
* so it is used in serialization (not during runtime).
|
|
42
|
+
* @param {object} styles per character styles for a text object
|
|
43
|
+
* @param {String} text the text string that the styles are applied to
|
|
44
|
+
* @return {{start: number, end: number, style: object}[]}
|
|
45
|
+
*/
|
|
46
|
+
export const stylesToArray = (
|
|
47
|
+
styles: TextStyle,
|
|
48
|
+
text: string
|
|
49
|
+
): TextStyleArray => {
|
|
50
|
+
const textLines = text.split('\n'),
|
|
51
|
+
stylesArray = [];
|
|
52
|
+
let charIndex = -1,
|
|
53
|
+
prevStyle = {};
|
|
54
|
+
// clone style structure to prevent mutation
|
|
55
|
+
styles = cloneDeep(styles);
|
|
56
|
+
|
|
57
|
+
//loop through each textLine
|
|
58
|
+
for (let i = 0; i < textLines.length; i++) {
|
|
59
|
+
if (!styles[i]) {
|
|
60
|
+
//no styles exist for this line, so add the line's length to the charIndex total
|
|
61
|
+
charIndex += textLines[i].length;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
//loop through each character of the current line
|
|
65
|
+
for (let c = 0; c < textLines[i].length; c++) {
|
|
66
|
+
charIndex++;
|
|
67
|
+
const thisStyle = styles[i][c];
|
|
68
|
+
//check if style exists for this character
|
|
69
|
+
if (thisStyle && Object.keys(thisStyle).length > 0) {
|
|
70
|
+
if (hasStyleChanged(prevStyle, thisStyle, true)) {
|
|
71
|
+
stylesArray.push({
|
|
72
|
+
start: charIndex,
|
|
73
|
+
end: charIndex + 1,
|
|
74
|
+
style: thisStyle,
|
|
75
|
+
});
|
|
76
|
+
} else {
|
|
77
|
+
//if style is the same as previous character, increase end index
|
|
78
|
+
stylesArray[stylesArray.length - 1].end++;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
prevStyle = thisStyle || {};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return stylesArray;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Returns the object form of the styles property with styles that are assigned per
|
|
89
|
+
* character rather than grouped by range. This format is more verbose, and is
|
|
90
|
+
* only used during runtime (not for serialization/storage)
|
|
91
|
+
* @param {Array} styles the serialized form of a text object's styles
|
|
92
|
+
* @param {String} text the text string that the styles are applied to
|
|
93
|
+
* @return {Object}
|
|
94
|
+
*/
|
|
95
|
+
export const stylesFromArray = (
|
|
96
|
+
styles: TextStyleArray | TextStyle,
|
|
97
|
+
text: string
|
|
98
|
+
): TextStyle => {
|
|
99
|
+
if (!Array.isArray(styles)) {
|
|
100
|
+
// clone to prevent mutation
|
|
101
|
+
return cloneDeep(styles);
|
|
102
|
+
}
|
|
103
|
+
const textLines = text.split('\n'),
|
|
104
|
+
stylesObject = {} as Record<
|
|
105
|
+
string | number,
|
|
106
|
+
Record<string | number, Record<string, string>>
|
|
107
|
+
>;
|
|
108
|
+
let charIndex = -1,
|
|
109
|
+
styleIndex = 0;
|
|
110
|
+
//loop through each textLine
|
|
111
|
+
for (let i = 0; i < textLines.length; i++) {
|
|
112
|
+
//loop through each character of the current line
|
|
113
|
+
for (let c = 0; c < textLines[i].length; c++) {
|
|
114
|
+
charIndex++;
|
|
115
|
+
//check if there's a style collection that includes the current character
|
|
116
|
+
if (
|
|
117
|
+
styles[styleIndex] &&
|
|
118
|
+
styles[styleIndex].start <= charIndex &&
|
|
119
|
+
charIndex < styles[styleIndex].end
|
|
120
|
+
) {
|
|
121
|
+
//create object for line index if it doesn't exist
|
|
122
|
+
stylesObject[i] = stylesObject[i] || {};
|
|
123
|
+
//assign a style at this character's index
|
|
124
|
+
stylesObject[i][c] = { ...styles[styleIndex].style };
|
|
125
|
+
//if character is at the end of the current style collection, move to the next
|
|
126
|
+
if (charIndex === styles[styleIndex].end - 1) {
|
|
127
|
+
styleIndex++;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return stylesObject;
|
|
133
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A wrapper around Number#toFixed, which contrary to native method returns number, not string.
|
|
3
|
+
* @param {number|string} number number to operate on
|
|
4
|
+
* @param {number} fractionDigits number of fraction digits to "leave"
|
|
5
|
+
* @return {number}
|
|
6
|
+
*/
|
|
7
|
+
export const toFixed = (number: number | string, fractionDigits: number) =>
|
|
8
|
+
parseFloat(Number(number).toFixed(fractionDigits));
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { IPoint, Point } from '../../Point';
|
|
2
|
+
import { TRadian } from '../../typedefs';
|
|
3
|
+
|
|
4
|
+
const unitVectorX = new Point(1, 0);
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Rotates `vector` with `radians`
|
|
8
|
+
* @param {Point} vector The vector to rotate (x and y)
|
|
9
|
+
* @param {Number} radians The radians of the angle for the rotation
|
|
10
|
+
* @return {Point} The new rotated point
|
|
11
|
+
*/
|
|
12
|
+
export const rotateVector = (vector: Point, radians: TRadian) =>
|
|
13
|
+
vector.rotate(radians);
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Creates a vector from points represented as a point
|
|
17
|
+
*
|
|
18
|
+
* @param {Point} from
|
|
19
|
+
* @param {Point} to
|
|
20
|
+
* @returns {Point} vector
|
|
21
|
+
*/
|
|
22
|
+
export const createVector = (from: IPoint, to: IPoint): Point =>
|
|
23
|
+
new Point(to).subtract(from);
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* return the magnitude of a vector
|
|
27
|
+
* @return {number}
|
|
28
|
+
*/
|
|
29
|
+
export const magnitude = (point: Point) => point.distanceFrom(new Point());
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Calculates the angle between 2 vectors
|
|
33
|
+
* @param {Point} a
|
|
34
|
+
* @param {Point} b
|
|
35
|
+
* @returns the angle in radians from `a` to `b`
|
|
36
|
+
*/
|
|
37
|
+
export const calcAngleBetweenVectors = (a: Point, b: Point): TRadian => {
|
|
38
|
+
const dot = a.x * b.x + a.y * b.y,
|
|
39
|
+
det = a.x * b.y - a.y * b.x;
|
|
40
|
+
return Math.atan2(det, dot) as TRadian;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Calculates the angle between the x axis and the vector
|
|
45
|
+
* @param {Point} v
|
|
46
|
+
* @returns the angle in radians of `v`
|
|
47
|
+
*/
|
|
48
|
+
export const calcVectorRotation = (v: Point) =>
|
|
49
|
+
calcAngleBetweenVectors(unitVectorX, v);
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @param {Point} v
|
|
53
|
+
* @returns {Point} vector representing the unit vector pointing to the direction of `v`
|
|
54
|
+
*/
|
|
55
|
+
export const getUnitVector = (v: Point): Point => v.scalarDivide(magnitude(v));
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @param {Point} A
|
|
59
|
+
* @param {Point} B
|
|
60
|
+
* @param {Point} C
|
|
61
|
+
* @returns {{ vector: Point, angle: TRadian}} vector representing the bisector of A and A's angle
|
|
62
|
+
*/
|
|
63
|
+
export const getBisector = (A: Point, B: Point, C: Point) => {
|
|
64
|
+
const AB = createVector(A, B),
|
|
65
|
+
AC = createVector(A, C),
|
|
66
|
+
alpha = calcAngleBetweenVectors(AB, AC);
|
|
67
|
+
return {
|
|
68
|
+
vector: getUnitVector(rotateVector(AB, alpha / 2)),
|
|
69
|
+
angle: alpha,
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @param {Point} v
|
|
75
|
+
* @param {Boolean} [counterClockwise] the direction of the orthogonal vector, defaults to `true`
|
|
76
|
+
* @returns {Point} the unit orthogonal vector
|
|
77
|
+
*/
|
|
78
|
+
export const getOrthonormalVector = (
|
|
79
|
+
v: Point,
|
|
80
|
+
counterClockwise = true
|
|
81
|
+
): Point =>
|
|
82
|
+
getUnitVector(new Point(-v.y, v.x).scalarMultiply(counterClockwise ? 1 : -1));
|