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,477 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import { TClassProperties } from '../typedefs';
|
|
3
|
+
import { IText } from './IText/IText';
|
|
4
|
+
import { classRegistry } from '../ClassRegistry';
|
|
5
|
+
import { createTextboxDefaultControls } from '../controls/commonControls';
|
|
6
|
+
|
|
7
|
+
// @TODO: Many things here are configuration related and shouldn't be on the class nor prototype
|
|
8
|
+
// regexes, list of properties that are not suppose to change by instances, magic consts.
|
|
9
|
+
// this will be a separated effort
|
|
10
|
+
export const textboxDefaultValues: Partial<TClassProperties<Textbox>> = {
|
|
11
|
+
minWidth: 20,
|
|
12
|
+
dynamicMinWidth: 2,
|
|
13
|
+
lockScalingFlip: true,
|
|
14
|
+
noScaleCache: false,
|
|
15
|
+
_wordJoiners: /[ \t\r]/,
|
|
16
|
+
splitByGrapheme: false,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Textbox class, based on IText, allows the user to resize the text rectangle
|
|
21
|
+
* and wraps lines automatically. Textboxes have their Y scaling locked, the
|
|
22
|
+
* user can only change width. Height is adjusted automatically based on the
|
|
23
|
+
* wrapping of lines.
|
|
24
|
+
*/
|
|
25
|
+
export class Textbox extends IText {
|
|
26
|
+
/**
|
|
27
|
+
* Minimum width of textbox, in pixels.
|
|
28
|
+
* @type Number
|
|
29
|
+
* @default
|
|
30
|
+
*/
|
|
31
|
+
declare minWidth: number;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Minimum calculated width of a textbox, in pixels.
|
|
35
|
+
* fixed to 2 so that an empty textbox cannot go to 0
|
|
36
|
+
* and is still selectable without text.
|
|
37
|
+
* @type Number
|
|
38
|
+
* @default
|
|
39
|
+
*/
|
|
40
|
+
declare dynamicMinWidth: number;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Use this boolean property in order to split strings that have no white space concept.
|
|
44
|
+
* this is a cheap way to help with chinese/japanese
|
|
45
|
+
* @type Boolean
|
|
46
|
+
* @since 2.6.0
|
|
47
|
+
*/
|
|
48
|
+
declare splitByGrapheme: boolean;
|
|
49
|
+
|
|
50
|
+
static textLayoutProperties = [...IText.textLayoutProperties, 'width'];
|
|
51
|
+
|
|
52
|
+
static ownDefaults: Record<string, any> = textboxDefaultValues;
|
|
53
|
+
|
|
54
|
+
static getDefaults() {
|
|
55
|
+
return {
|
|
56
|
+
...super.getDefaults(),
|
|
57
|
+
controls: createTextboxDefaultControls(),
|
|
58
|
+
...Textbox.ownDefaults,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Unlike superclass's version of this function, Textbox does not update
|
|
64
|
+
* its width.
|
|
65
|
+
* @private
|
|
66
|
+
* @override
|
|
67
|
+
*/
|
|
68
|
+
initDimensions() {
|
|
69
|
+
if (!this.initialized) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
this.isEditing && this.initDelayedCursor();
|
|
73
|
+
this._clearCache();
|
|
74
|
+
// clear dynamicMinWidth as it will be different after we re-wrap line
|
|
75
|
+
this.dynamicMinWidth = 0;
|
|
76
|
+
// wrap lines
|
|
77
|
+
this._styleMap = this._generateStyleMap(this._splitText());
|
|
78
|
+
// if after wrapping, the width is smaller than dynamicMinWidth, change the width and re-wrap
|
|
79
|
+
if (this.dynamicMinWidth > this.width) {
|
|
80
|
+
this._set('width', this.dynamicMinWidth);
|
|
81
|
+
}
|
|
82
|
+
if (this.textAlign.indexOf('justify') !== -1) {
|
|
83
|
+
// once text is measured we need to make space fatter to make justified text.
|
|
84
|
+
this.enlargeSpaces();
|
|
85
|
+
}
|
|
86
|
+
// clear cache and re-calculate height
|
|
87
|
+
this.height = this.calcTextHeight();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Generate an object that translates the style object so that it is
|
|
92
|
+
* broken up by visual lines (new lines and automatic wrapping).
|
|
93
|
+
* The original text styles object is broken up by actual lines (new lines only),
|
|
94
|
+
* which is only sufficient for Text / IText
|
|
95
|
+
* @private
|
|
96
|
+
*/
|
|
97
|
+
_generateStyleMap(textInfo) {
|
|
98
|
+
let realLineCount = 0,
|
|
99
|
+
realLineCharCount = 0,
|
|
100
|
+
charCount = 0;
|
|
101
|
+
const map = {};
|
|
102
|
+
|
|
103
|
+
for (let i = 0; i < textInfo.graphemeLines.length; i++) {
|
|
104
|
+
if (textInfo.graphemeText[charCount] === '\n' && i > 0) {
|
|
105
|
+
realLineCharCount = 0;
|
|
106
|
+
charCount++;
|
|
107
|
+
realLineCount++;
|
|
108
|
+
} else if (
|
|
109
|
+
!this.splitByGrapheme &&
|
|
110
|
+
this._reSpaceAndTab.test(textInfo.graphemeText[charCount]) &&
|
|
111
|
+
i > 0
|
|
112
|
+
) {
|
|
113
|
+
// this case deals with space's that are removed from end of lines when wrapping
|
|
114
|
+
realLineCharCount++;
|
|
115
|
+
charCount++;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
map[i] = { line: realLineCount, offset: realLineCharCount };
|
|
119
|
+
|
|
120
|
+
charCount += textInfo.graphemeLines[i].length;
|
|
121
|
+
realLineCharCount += textInfo.graphemeLines[i].length;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return map;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Returns true if object has a style property or has it on a specified line
|
|
129
|
+
* @param {Number} lineIndex
|
|
130
|
+
* @return {Boolean}
|
|
131
|
+
*/
|
|
132
|
+
styleHas(property, lineIndex: number): boolean {
|
|
133
|
+
if (this._styleMap && !this.isWrapping) {
|
|
134
|
+
const map = this._styleMap[lineIndex];
|
|
135
|
+
if (map) {
|
|
136
|
+
lineIndex = map.line;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return super.styleHas(property, lineIndex);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Returns true if object has no styling or no styling in a line
|
|
144
|
+
* @param {Number} lineIndex , lineIndex is on wrapped lines.
|
|
145
|
+
* @return {Boolean}
|
|
146
|
+
*/
|
|
147
|
+
isEmptyStyles(lineIndex: number): boolean {
|
|
148
|
+
if (!this.styles) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
let offset = 0,
|
|
152
|
+
nextLineIndex = lineIndex + 1,
|
|
153
|
+
nextOffset,
|
|
154
|
+
shouldLimit = false;
|
|
155
|
+
const map = this._styleMap[lineIndex],
|
|
156
|
+
mapNextLine = this._styleMap[lineIndex + 1];
|
|
157
|
+
if (map) {
|
|
158
|
+
lineIndex = map.line;
|
|
159
|
+
offset = map.offset;
|
|
160
|
+
}
|
|
161
|
+
if (mapNextLine) {
|
|
162
|
+
nextLineIndex = mapNextLine.line;
|
|
163
|
+
shouldLimit = nextLineIndex === lineIndex;
|
|
164
|
+
nextOffset = mapNextLine.offset;
|
|
165
|
+
}
|
|
166
|
+
const obj =
|
|
167
|
+
typeof lineIndex === 'undefined'
|
|
168
|
+
? this.styles
|
|
169
|
+
: { line: this.styles[lineIndex] };
|
|
170
|
+
for (const p1 in obj) {
|
|
171
|
+
for (const p2 in obj[p1]) {
|
|
172
|
+
if (p2 >= offset && (!shouldLimit || p2 < nextOffset)) {
|
|
173
|
+
// eslint-disable-next-line no-unused-vars
|
|
174
|
+
for (const p3 in obj[p1][p2]) {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* @param {Number} lineIndex
|
|
185
|
+
* @param {Number} charIndex
|
|
186
|
+
* @private
|
|
187
|
+
*/
|
|
188
|
+
_getStyleDeclaration(lineIndex: number, charIndex: number) {
|
|
189
|
+
if (this._styleMap && !this.isWrapping) {
|
|
190
|
+
const map = this._styleMap[lineIndex];
|
|
191
|
+
if (!map) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
lineIndex = map.line;
|
|
195
|
+
charIndex = map.offset + charIndex;
|
|
196
|
+
}
|
|
197
|
+
return super._getStyleDeclaration(lineIndex, charIndex);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* @param {Number} lineIndex
|
|
202
|
+
* @param {Number} charIndex
|
|
203
|
+
* @param {Object} style
|
|
204
|
+
* @private
|
|
205
|
+
*/
|
|
206
|
+
_setStyleDeclaration(lineIndex: number, charIndex: number, style: object) {
|
|
207
|
+
const map = this._styleMap[lineIndex];
|
|
208
|
+
lineIndex = map.line;
|
|
209
|
+
charIndex = map.offset + charIndex;
|
|
210
|
+
|
|
211
|
+
this.styles[lineIndex][charIndex] = style;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* @param {Number} lineIndex
|
|
216
|
+
* @param {Number} charIndex
|
|
217
|
+
* @private
|
|
218
|
+
*/
|
|
219
|
+
_deleteStyleDeclaration(lineIndex: number, charIndex: number) {
|
|
220
|
+
const map = this._styleMap[lineIndex];
|
|
221
|
+
lineIndex = map.line;
|
|
222
|
+
charIndex = map.offset + charIndex;
|
|
223
|
+
delete this.styles[lineIndex][charIndex];
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* probably broken need a fix
|
|
228
|
+
* Returns the real style line that correspond to the wrapped lineIndex line
|
|
229
|
+
* Used just to verify if the line does exist or not.
|
|
230
|
+
* @param {Number} lineIndex
|
|
231
|
+
* @returns {Boolean} if the line exists or not
|
|
232
|
+
* @private
|
|
233
|
+
*/
|
|
234
|
+
_getLineStyle(lineIndex: number): boolean {
|
|
235
|
+
const map = this._styleMap[lineIndex];
|
|
236
|
+
return !!this.styles[map.line];
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Set the line style to an empty object so that is initialized
|
|
241
|
+
* @param {Number} lineIndex
|
|
242
|
+
* @param {Object} style
|
|
243
|
+
* @private
|
|
244
|
+
*/
|
|
245
|
+
_setLineStyle(lineIndex: number) {
|
|
246
|
+
const map = this._styleMap[lineIndex];
|
|
247
|
+
this.styles[map.line] = {};
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Wraps text using the 'width' property of Textbox. First this function
|
|
252
|
+
* splits text on newlines, so we preserve newlines entered by the user.
|
|
253
|
+
* Then it wraps each line using the width of the Textbox by calling
|
|
254
|
+
* _wrapLine().
|
|
255
|
+
* @param {Array} lines The string array of text that is split into lines
|
|
256
|
+
* @param {Number} desiredWidth width you want to wrap to
|
|
257
|
+
* @returns {Array} Array of lines
|
|
258
|
+
*/
|
|
259
|
+
_wrapText(lines: Array<any>, desiredWidth: number): Array<any> {
|
|
260
|
+
const wrapped = [];
|
|
261
|
+
this.isWrapping = true;
|
|
262
|
+
for (let i = 0; i < lines.length; i++) {
|
|
263
|
+
wrapped.push(...this._wrapLine(lines[i], i, desiredWidth));
|
|
264
|
+
}
|
|
265
|
+
this.isWrapping = false;
|
|
266
|
+
return wrapped;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Helper function to measure a string of text, given its lineIndex and charIndex offset
|
|
271
|
+
* It gets called when charBounds are not available yet.
|
|
272
|
+
* Override if necessary
|
|
273
|
+
* Use with {@link Textbox#wordSplit}
|
|
274
|
+
*
|
|
275
|
+
* @param {CanvasRenderingContext2D} ctx
|
|
276
|
+
* @param {String} text
|
|
277
|
+
* @param {number} lineIndex
|
|
278
|
+
* @param {number} charOffset
|
|
279
|
+
* @returns {number}
|
|
280
|
+
*/
|
|
281
|
+
_measureWord(word, lineIndex: number, charOffset = 0): number {
|
|
282
|
+
let width = 0,
|
|
283
|
+
prevGrapheme;
|
|
284
|
+
const skipLeft = true;
|
|
285
|
+
for (let i = 0, len = word.length; i < len; i++) {
|
|
286
|
+
const box = this._getGraphemeBox(
|
|
287
|
+
word[i],
|
|
288
|
+
lineIndex,
|
|
289
|
+
i + charOffset,
|
|
290
|
+
prevGrapheme,
|
|
291
|
+
skipLeft
|
|
292
|
+
);
|
|
293
|
+
width += box.kernedWidth;
|
|
294
|
+
prevGrapheme = word[i];
|
|
295
|
+
}
|
|
296
|
+
return width;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Override this method to customize word splitting
|
|
301
|
+
* Use with {@link Textbox#_measureWord}
|
|
302
|
+
* @param {string} value
|
|
303
|
+
* @returns {string[]} array of words
|
|
304
|
+
*/
|
|
305
|
+
wordSplit(value: string): string[] {
|
|
306
|
+
return value.split(this._wordJoiners);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Wraps a line of text using the width of the Textbox and a context.
|
|
311
|
+
* @param {Array} line The grapheme array that represent the line
|
|
312
|
+
* @param {Number} lineIndex
|
|
313
|
+
* @param {Number} desiredWidth width you want to wrap the line to
|
|
314
|
+
* @param {Number} reservedSpace space to remove from wrapping for custom functionalities
|
|
315
|
+
* @returns {Array} Array of line(s) into which the given text is wrapped
|
|
316
|
+
* to.
|
|
317
|
+
*/
|
|
318
|
+
_wrapLine(
|
|
319
|
+
_line,
|
|
320
|
+
lineIndex: number,
|
|
321
|
+
desiredWidth: number,
|
|
322
|
+
reservedSpace = 0
|
|
323
|
+
): Array<any> {
|
|
324
|
+
const additionalSpace = this._getWidthOfCharSpacing(),
|
|
325
|
+
splitByGrapheme = this.splitByGrapheme,
|
|
326
|
+
graphemeLines = [],
|
|
327
|
+
words = splitByGrapheme
|
|
328
|
+
? this.graphemeSplit(_line)
|
|
329
|
+
: this.wordSplit(_line),
|
|
330
|
+
infix = splitByGrapheme ? '' : ' ';
|
|
331
|
+
|
|
332
|
+
let lineWidth = 0,
|
|
333
|
+
line = [],
|
|
334
|
+
// spaces in different languages?
|
|
335
|
+
offset = 0,
|
|
336
|
+
infixWidth = 0,
|
|
337
|
+
largestWordWidth = 0,
|
|
338
|
+
lineJustStarted = true;
|
|
339
|
+
// fix a difference between split and graphemeSplit
|
|
340
|
+
if (words.length === 0) {
|
|
341
|
+
words.push([]);
|
|
342
|
+
}
|
|
343
|
+
desiredWidth -= reservedSpace;
|
|
344
|
+
// measure words
|
|
345
|
+
const data = words.map((word) => {
|
|
346
|
+
// if using splitByGrapheme words are already in graphemes.
|
|
347
|
+
word = splitByGrapheme ? word : this.graphemeSplit(word);
|
|
348
|
+
const width = this._measureWord(word, lineIndex, offset);
|
|
349
|
+
largestWordWidth = Math.max(width, largestWordWidth);
|
|
350
|
+
offset += word.length + 1;
|
|
351
|
+
return { word: word, width: width };
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
const maxWidth = Math.max(
|
|
355
|
+
desiredWidth,
|
|
356
|
+
largestWordWidth,
|
|
357
|
+
this.dynamicMinWidth
|
|
358
|
+
);
|
|
359
|
+
// layout words
|
|
360
|
+
offset = 0;
|
|
361
|
+
let i;
|
|
362
|
+
for (i = 0; i < words.length; i++) {
|
|
363
|
+
const word = data[i].word;
|
|
364
|
+
const wordWidth = data[i].width;
|
|
365
|
+
offset += word.length;
|
|
366
|
+
|
|
367
|
+
lineWidth += infixWidth + wordWidth - additionalSpace;
|
|
368
|
+
if (lineWidth > maxWidth && !lineJustStarted) {
|
|
369
|
+
graphemeLines.push(line);
|
|
370
|
+
line = [];
|
|
371
|
+
lineWidth = wordWidth;
|
|
372
|
+
lineJustStarted = true;
|
|
373
|
+
} else {
|
|
374
|
+
lineWidth += additionalSpace;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
if (!lineJustStarted && !splitByGrapheme) {
|
|
378
|
+
line.push(infix);
|
|
379
|
+
}
|
|
380
|
+
line = line.concat(word);
|
|
381
|
+
|
|
382
|
+
infixWidth = splitByGrapheme
|
|
383
|
+
? 0
|
|
384
|
+
: this._measureWord([infix], lineIndex, offset);
|
|
385
|
+
offset++;
|
|
386
|
+
lineJustStarted = false;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
i && graphemeLines.push(line);
|
|
390
|
+
|
|
391
|
+
if (largestWordWidth + reservedSpace > this.dynamicMinWidth) {
|
|
392
|
+
this.dynamicMinWidth = largestWordWidth - additionalSpace + reservedSpace;
|
|
393
|
+
}
|
|
394
|
+
return graphemeLines;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Detect if the text line is ended with an hard break
|
|
399
|
+
* text and itext do not have wrapping, return false
|
|
400
|
+
* @param {Number} lineIndex text to split
|
|
401
|
+
* @return {Boolean}
|
|
402
|
+
*/
|
|
403
|
+
isEndOfWrapping(lineIndex: number): boolean {
|
|
404
|
+
if (!this._styleMap[lineIndex + 1]) {
|
|
405
|
+
// is last line, return true;
|
|
406
|
+
return true;
|
|
407
|
+
}
|
|
408
|
+
if (this._styleMap[lineIndex + 1].line !== this._styleMap[lineIndex].line) {
|
|
409
|
+
// this is last line before a line break, return true;
|
|
410
|
+
return true;
|
|
411
|
+
}
|
|
412
|
+
return false;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* Detect if a line has a linebreak and so we need to account for it when moving
|
|
417
|
+
* and counting style.
|
|
418
|
+
* @return Number
|
|
419
|
+
*/
|
|
420
|
+
missingNewlineOffset(lineIndex) {
|
|
421
|
+
if (this.splitByGrapheme) {
|
|
422
|
+
return this.isEndOfWrapping(lineIndex) ? 1 : 0;
|
|
423
|
+
}
|
|
424
|
+
return 1;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Gets lines of text to render in the Textbox. This function calculates
|
|
429
|
+
* text wrapping on the fly every time it is called.
|
|
430
|
+
* @param {String} text text to split
|
|
431
|
+
* @returns {Array} Array of lines in the Textbox.
|
|
432
|
+
* @override
|
|
433
|
+
*/
|
|
434
|
+
_splitTextIntoLines(text: string) {
|
|
435
|
+
const newText = super._splitTextIntoLines(text),
|
|
436
|
+
graphemeLines = this._wrapText(newText.lines, this.width),
|
|
437
|
+
lines = new Array(graphemeLines.length);
|
|
438
|
+
for (let i = 0; i < graphemeLines.length; i++) {
|
|
439
|
+
lines[i] = graphemeLines[i].join('');
|
|
440
|
+
}
|
|
441
|
+
newText.lines = lines;
|
|
442
|
+
newText.graphemeLines = graphemeLines;
|
|
443
|
+
return newText;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
getMinWidth() {
|
|
447
|
+
return Math.max(this.minWidth, this.dynamicMinWidth);
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
_removeExtraneousStyles() {
|
|
451
|
+
const linesToKeep = {};
|
|
452
|
+
for (const prop in this._styleMap) {
|
|
453
|
+
if (this._textLines[prop]) {
|
|
454
|
+
linesToKeep[this._styleMap[prop].line] = 1;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
for (const prop in this.styles) {
|
|
458
|
+
if (!linesToKeep[prop]) {
|
|
459
|
+
delete this.styles[prop];
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Returns object representation of an instance
|
|
466
|
+
* @method toObject
|
|
467
|
+
* @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output
|
|
468
|
+
* @return {Object} object representation of an instance
|
|
469
|
+
*/
|
|
470
|
+
toObject(propertiesToInclude: Array<any>): object {
|
|
471
|
+
return super.toObject(
|
|
472
|
+
['minWidth', 'splitByGrapheme'].concat(propertiesToInclude)
|
|
473
|
+
);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
classRegistry.setClass(Textbox);
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { classRegistry } from '../ClassRegistry';
|
|
2
|
+
import { FabricObject } from './Object/FabricObject';
|
|
3
|
+
import type {
|
|
4
|
+
FabricObjectProps,
|
|
5
|
+
SerializedObjectProps,
|
|
6
|
+
TProps,
|
|
7
|
+
} from './Object/types';
|
|
8
|
+
import type { ObjectEvents } from '../EventTypeDefs';
|
|
9
|
+
|
|
10
|
+
export const triangleDefaultValues = {
|
|
11
|
+
width: 100,
|
|
12
|
+
height: 100,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export class Triangle<
|
|
16
|
+
Props extends TProps<FabricObjectProps> = Partial<FabricObjectProps>,
|
|
17
|
+
SProps extends SerializedObjectProps = SerializedObjectProps,
|
|
18
|
+
EventSpec extends ObjectEvents = ObjectEvents
|
|
19
|
+
>
|
|
20
|
+
extends FabricObject<Props, SProps, EventSpec>
|
|
21
|
+
implements FabricObjectProps
|
|
22
|
+
{
|
|
23
|
+
static ownDefaults: Record<string, any> = triangleDefaultValues;
|
|
24
|
+
|
|
25
|
+
static getDefaults() {
|
|
26
|
+
return { ...super.getDefaults(), ...Triangle.ownDefaults };
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @private
|
|
31
|
+
* @param {CanvasRenderingContext2D} ctx Context to render on
|
|
32
|
+
*/
|
|
33
|
+
_render(ctx: CanvasRenderingContext2D) {
|
|
34
|
+
const widthBy2 = this.width / 2,
|
|
35
|
+
heightBy2 = this.height / 2;
|
|
36
|
+
|
|
37
|
+
ctx.beginPath();
|
|
38
|
+
ctx.moveTo(-widthBy2, heightBy2);
|
|
39
|
+
ctx.lineTo(0, -heightBy2);
|
|
40
|
+
ctx.lineTo(widthBy2, heightBy2);
|
|
41
|
+
ctx.closePath();
|
|
42
|
+
|
|
43
|
+
this._renderPaintInOrder(ctx);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Returns svg representation of an instance
|
|
48
|
+
* @return {Array} an array of strings with the specific svg representation
|
|
49
|
+
* of the instance
|
|
50
|
+
*/
|
|
51
|
+
_toSVG() {
|
|
52
|
+
const widthBy2 = this.width / 2,
|
|
53
|
+
heightBy2 = this.height / 2,
|
|
54
|
+
points = `${-widthBy2} ${heightBy2},0 ${-heightBy2},${widthBy2} ${heightBy2}`;
|
|
55
|
+
return ['<polygon ', 'COMMON_PARTS', 'points="', points, '" />'];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
classRegistry.setClass(Triangle);
|
|
60
|
+
classRegistry.setSVGClass(Triangle);
|
package/src/typedefs.ts
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// https://www.typescriptlang.org/docs/handbook/utility-types.html
|
|
2
|
+
import { BaseFabricObject } from './EventTypeDefs';
|
|
3
|
+
import type { Gradient } from './gradient/Gradient';
|
|
4
|
+
import type { Pattern } from './Pattern';
|
|
5
|
+
import type { XY, Point } from './Point';
|
|
6
|
+
|
|
7
|
+
interface NominalTag<T> {
|
|
8
|
+
nominalTag?: T;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
type Nominal<Type, Tag> = NominalTag<Tag> & Type;
|
|
12
|
+
|
|
13
|
+
type TNonFunctionPropertyNames<T> = {
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
15
|
+
[K in keyof T]: T[K] extends Function ? never : K;
|
|
16
|
+
}[keyof T];
|
|
17
|
+
export type TClassProperties<T> = Pick<T, TNonFunctionPropertyNames<T>>;
|
|
18
|
+
|
|
19
|
+
// https://github.com/microsoft/TypeScript/issues/32080
|
|
20
|
+
export type Constructor<T = object> = new (...args: any[]) => T;
|
|
21
|
+
|
|
22
|
+
const enum Degree {}
|
|
23
|
+
const enum Radian {}
|
|
24
|
+
|
|
25
|
+
export type TDegree = Nominal<number, Degree>;
|
|
26
|
+
export type TRadian = Nominal<number, Radian>;
|
|
27
|
+
|
|
28
|
+
export type TAxis = 'x' | 'y';
|
|
29
|
+
|
|
30
|
+
export type TAxisKey<T extends string> = `${T}${Capitalize<TAxis>}`;
|
|
31
|
+
|
|
32
|
+
export type TFiller = Gradient<'linear'> | Gradient<'radial'> | Pattern;
|
|
33
|
+
|
|
34
|
+
export type TSize = {
|
|
35
|
+
width: number;
|
|
36
|
+
height: number;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export type TBBox = {
|
|
40
|
+
left: number;
|
|
41
|
+
top: number;
|
|
42
|
+
} & TSize;
|
|
43
|
+
|
|
44
|
+
export type Percent = `${number}%`;
|
|
45
|
+
|
|
46
|
+
export const enum ImageFormat {
|
|
47
|
+
jpeg = 'jpeg',
|
|
48
|
+
jpg = 'jpeg',
|
|
49
|
+
png = 'png',
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export const enum SVGElementName {
|
|
53
|
+
linearGradient = 'linearGradient',
|
|
54
|
+
radialGradient = 'radialGradient',
|
|
55
|
+
stop = 'stop',
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export const enum SupportedSVGUnit {
|
|
59
|
+
mm = 'mm',
|
|
60
|
+
cm = 'cm',
|
|
61
|
+
in = 'in',
|
|
62
|
+
pt = 'pt',
|
|
63
|
+
pc = 'pc',
|
|
64
|
+
em = 'em',
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export type TMat2D = [number, number, number, number, number, number];
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* An invalid keyword and an empty string will be handled as the `anonymous` keyword.
|
|
71
|
+
* @see https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes
|
|
72
|
+
*/
|
|
73
|
+
export type TCrossOrigin = '' | 'anonymous' | 'use-credentials' | null;
|
|
74
|
+
|
|
75
|
+
export type TOriginX = 'center' | 'left' | 'right' | number;
|
|
76
|
+
export type TOriginY = 'center' | 'top' | 'bottom' | number;
|
|
77
|
+
|
|
78
|
+
export type TCornerPoint = {
|
|
79
|
+
tl: Point;
|
|
80
|
+
tr: Point;
|
|
81
|
+
bl: Point;
|
|
82
|
+
br: Point;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export type TSVGReviver = (markup: string) => string;
|
|
86
|
+
|
|
87
|
+
export type TValidToObjectMethod = 'toDatalessObject' | 'toObject';
|
|
88
|
+
|
|
89
|
+
export type TCacheCanvasDimensions = {
|
|
90
|
+
width: number;
|
|
91
|
+
height: number;
|
|
92
|
+
zoomX: number;
|
|
93
|
+
zoomY: number;
|
|
94
|
+
x: number;
|
|
95
|
+
y: number;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export type TRectBounds = [min: XY, max: XY];
|
|
99
|
+
|
|
100
|
+
export type TToCanvasElementOptions = {
|
|
101
|
+
left?: number;
|
|
102
|
+
top?: number;
|
|
103
|
+
width?: number;
|
|
104
|
+
height?: number;
|
|
105
|
+
filter?: (object: BaseFabricObject) => boolean;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export type TDataUrlOptions = TToCanvasElementOptions & {
|
|
109
|
+
multiplier: number;
|
|
110
|
+
format?: ImageFormat;
|
|
111
|
+
quality?: number;
|
|
112
|
+
enableRetinaScaling?: boolean;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
export type AssertKeys<T, K extends keyof T> = T & Record<K, NonNullable<T[K]>>;
|