fabric 7.0.0 → 7.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.husky/pre-commit +1 -0
- package/CHANGELOG.md +21 -0
- package/dist/extensions/cropping_controls/croppingControls.d.ts +16 -0
- package/dist/extensions/cropping_controls/croppingControls.d.ts.map +1 -0
- package/dist/extensions/cropping_controls/croppingHandlers.d.ts +39 -0
- package/dist/extensions/cropping_controls/croppingHandlers.d.ts.map +1 -0
- package/dist/extensions/cropping_controls/enterCropMode.d.ts +7 -0
- package/dist/extensions/cropping_controls/enterCropMode.d.ts.map +1 -0
- package/dist/extensions/cropping_controls/renderCornerControl.d.ts +14 -0
- package/dist/extensions/cropping_controls/renderCornerControl.d.ts.map +1 -0
- package/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/fabric.d.ts +1 -0
- package/dist/fabric.d.ts.map +1 -1
- package/dist/index.js +628 -537
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/index.min.mjs +1 -1
- package/dist/index.min.mjs.map +1 -1
- package/dist/index.mjs +628 -537
- package/dist/index.mjs.map +1 -1
- package/dist/index.node.cjs +628 -537
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +628 -537
- package/dist/index.node.mjs.map +1 -1
- package/dist/package.json.min.mjs +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/EventTypeDefs.d.ts +5 -0
- package/dist/src/EventTypeDefs.d.ts.map +1 -1
- package/dist/src/Pattern/Pattern.d.ts.map +1 -1
- package/dist/src/Pattern/Pattern.min.mjs +1 -1
- package/dist/src/Pattern/Pattern.min.mjs.map +1 -1
- package/dist/src/Pattern/Pattern.mjs +2 -1
- package/dist/src/Pattern/Pattern.mjs.map +1 -1
- package/dist/src/Shadow.d.ts +1 -1
- package/dist/src/Shadow.d.ts.map +1 -1
- package/dist/src/Shadow.min.mjs +1 -1
- package/dist/src/Shadow.min.mjs.map +1 -1
- package/dist/src/Shadow.mjs +5 -4
- package/dist/src/Shadow.mjs.map +1 -1
- package/dist/src/canvas/CanvasOptions.d.ts.map +1 -1
- package/dist/src/canvas/CanvasOptions.min.mjs.map +1 -1
- package/dist/src/canvas/CanvasOptions.mjs.map +1 -1
- package/dist/src/canvas/SelectableCanvas.d.ts +2 -0
- package/dist/src/canvas/SelectableCanvas.d.ts.map +1 -1
- package/dist/src/canvas/SelectableCanvas.min.mjs +1 -1
- package/dist/src/canvas/SelectableCanvas.min.mjs.map +1 -1
- package/dist/src/canvas/SelectableCanvas.mjs +33 -13
- package/dist/src/canvas/SelectableCanvas.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvas.d.ts.map +1 -1
- package/dist/src/canvas/StaticCanvas.min.mjs +1 -1
- package/dist/src/canvas/StaticCanvas.min.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvas.mjs +3 -1
- package/dist/src/canvas/StaticCanvas.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvasOptions.d.ts.map +1 -1
- package/dist/src/canvas/StaticCanvasOptions.min.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvasOptions.mjs.map +1 -1
- package/dist/src/constants.d.ts +1 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.min.mjs.map +1 -1
- package/dist/src/constants.mjs.map +1 -1
- package/dist/src/controls/Control.d.ts +22 -1
- package/dist/src/controls/Control.d.ts.map +1 -1
- package/dist/src/controls/Control.min.mjs +1 -1
- package/dist/src/controls/Control.min.mjs.map +1 -1
- package/dist/src/controls/Control.mjs +45 -1
- package/dist/src/controls/Control.mjs.map +1 -1
- package/dist/src/controls/changeWidth.d.ts +22 -0
- package/dist/src/controls/changeWidth.d.ts.map +1 -1
- package/dist/src/controls/changeWidth.min.mjs +1 -1
- package/dist/src/controls/changeWidth.min.mjs.map +1 -1
- package/dist/src/controls/changeWidth.mjs +46 -18
- package/dist/src/controls/changeWidth.mjs.map +1 -1
- package/dist/src/controls/controlRendering.d.ts.map +1 -1
- package/dist/src/controls/controlRendering.min.mjs +1 -1
- package/dist/src/controls/controlRendering.min.mjs.map +1 -1
- package/dist/src/controls/controlRendering.mjs +18 -34
- package/dist/src/controls/controlRendering.mjs.map +1 -1
- package/dist/src/controls/index.d.ts +2 -1
- package/dist/src/controls/index.d.ts.map +1 -1
- package/dist/src/controls/index.min.mjs +1 -1
- package/dist/src/controls/index.mjs +1 -1
- package/dist/src/gradient/Gradient.d.ts.map +1 -1
- package/dist/src/gradient/Gradient.min.mjs +1 -1
- package/dist/src/gradient/Gradient.min.mjs.map +1 -1
- package/dist/src/gradient/Gradient.mjs +19 -6
- package/dist/src/gradient/Gradient.mjs.map +1 -1
- package/dist/src/shapes/Circle.d.ts.map +1 -1
- package/dist/src/shapes/Circle.min.mjs +1 -1
- package/dist/src/shapes/Circle.min.mjs.map +1 -1
- package/dist/src/shapes/Circle.mjs +10 -7
- package/dist/src/shapes/Circle.mjs.map +1 -1
- package/dist/src/shapes/Ellipse.d.ts.map +1 -1
- package/dist/src/shapes/Ellipse.min.mjs +1 -1
- package/dist/src/shapes/Ellipse.min.mjs.map +1 -1
- package/dist/src/shapes/Ellipse.mjs +2 -1
- package/dist/src/shapes/Ellipse.mjs.map +1 -1
- package/dist/src/shapes/Group.d.ts.map +1 -1
- package/dist/src/shapes/Group.min.mjs +1 -1
- package/dist/src/shapes/Group.min.mjs.map +1 -1
- package/dist/src/shapes/Group.mjs +2 -1
- package/dist/src/shapes/Group.mjs.map +1 -1
- package/dist/src/shapes/IText/IText.d.ts.map +1 -1
- package/dist/src/shapes/IText/IText.min.mjs.map +1 -1
- package/dist/src/shapes/IText/IText.mjs.map +1 -1
- package/dist/src/shapes/Image.d.ts +1 -1
- package/dist/src/shapes/Image.d.ts.map +1 -1
- package/dist/src/shapes/Image.min.mjs +1 -1
- package/dist/src/shapes/Image.min.mjs.map +1 -1
- package/dist/src/shapes/Image.mjs +4 -3
- package/dist/src/shapes/Image.mjs.map +1 -1
- package/dist/src/shapes/Line.d.ts.map +1 -1
- package/dist/src/shapes/Line.min.mjs +1 -1
- package/dist/src/shapes/Line.min.mjs.map +1 -1
- package/dist/src/shapes/Line.mjs +6 -10
- package/dist/src/shapes/Line.mjs.map +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs.map +1 -1
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs +5 -4
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.min.mjs.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.mjs.map +1 -1
- package/dist/src/shapes/Object/Object.d.ts.map +1 -1
- package/dist/src/shapes/Object/Object.min.mjs +1 -1
- package/dist/src/shapes/Object/Object.min.mjs.map +1 -1
- package/dist/src/shapes/Object/Object.mjs +3 -0
- package/dist/src/shapes/Object/Object.mjs.map +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.min.mjs +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.min.mjs.map +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.mjs +1 -1
- package/dist/src/shapes/Object/ObjectGeometry.mjs.map +1 -1
- package/dist/src/shapes/Object/types/FabricObjectProps.d.ts.map +1 -1
- package/dist/src/shapes/Object/types/ObjectProps.d.ts.map +1 -1
- package/dist/src/shapes/Path.d.ts.map +1 -1
- package/dist/src/shapes/Path.min.mjs.map +1 -1
- package/dist/src/shapes/Path.mjs +1 -2
- package/dist/src/shapes/Path.mjs.map +1 -1
- package/dist/src/shapes/Polyline.d.ts.map +1 -1
- package/dist/src/shapes/Polyline.min.mjs +1 -1
- package/dist/src/shapes/Polyline.min.mjs.map +1 -1
- package/dist/src/shapes/Polyline.mjs +10 -6
- package/dist/src/shapes/Polyline.mjs.map +1 -1
- package/dist/src/shapes/Rect.d.ts.map +1 -1
- package/dist/src/shapes/Rect.min.mjs +1 -1
- package/dist/src/shapes/Rect.min.mjs.map +1 -1
- package/dist/src/shapes/Rect.mjs +2 -1
- package/dist/src/shapes/Rect.mjs.map +1 -1
- package/dist/src/shapes/Text/StyledText.d.ts.map +1 -1
- package/dist/src/shapes/Text/StyledText.min.mjs.map +1 -1
- package/dist/src/shapes/Text/StyledText.mjs +0 -3
- package/dist/src/shapes/Text/StyledText.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.d.ts.map +1 -1
- package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.mjs.map +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.d.ts.map +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs.map +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.mjs +5 -6
- package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +1 -1
- package/dist/src/shapes/Textbox.d.ts.map +1 -1
- package/dist/src/shapes/Textbox.min.mjs.map +1 -1
- package/dist/src/shapes/Textbox.mjs.map +1 -1
- package/dist/src/shapes/Triangle.d.ts.map +1 -1
- package/dist/src/shapes/Triangle.min.mjs.map +1 -1
- package/dist/src/shapes/Triangle.mjs.map +1 -1
- package/dist/src/util/lang_string.d.ts +1 -1
- package/dist/src/util/lang_string.d.ts.map +1 -1
- package/dist/src/util/lang_string.min.mjs +1 -1
- package/dist/src/util/lang_string.min.mjs.map +1 -1
- package/dist/src/util/lang_string.mjs +1 -1
- package/dist/src/util/lang_string.mjs.map +1 -1
- package/dist/src/util/misc/svgParsing.d.ts.map +1 -1
- package/dist/src/util/misc/svgParsing.min.mjs +1 -1
- package/dist/src/util/misc/svgParsing.min.mjs.map +1 -1
- package/dist/src/util/misc/svgParsing.mjs +2 -1
- package/dist/src/util/misc/svgParsing.mjs.map +1 -1
- package/dist-extensions/cropping_controls/croppingControls.mjs +140 -0
- package/dist-extensions/cropping_controls/croppingControls.mjs.map +1 -0
- package/dist-extensions/cropping_controls/croppingHandlers.mjs +228 -0
- package/dist-extensions/cropping_controls/croppingHandlers.mjs.map +1 -0
- package/dist-extensions/cropping_controls/enterCropMode.mjs +38 -0
- package/dist-extensions/cropping_controls/enterCropMode.mjs.map +1 -0
- package/dist-extensions/cropping_controls/renderCornerControl.mjs +45 -0
- package/dist-extensions/cropping_controls/renderCornerControl.mjs.map +1 -0
- package/dist-extensions/extensions/cropping_controls/croppingControls.d.ts +16 -0
- package/dist-extensions/extensions/cropping_controls/croppingControls.d.ts.map +1 -0
- package/dist-extensions/extensions/cropping_controls/croppingHandlers.d.ts +39 -0
- package/dist-extensions/extensions/cropping_controls/croppingHandlers.d.ts.map +1 -0
- package/dist-extensions/extensions/cropping_controls/enterCropMode.d.ts +7 -0
- package/dist-extensions/extensions/cropping_controls/enterCropMode.d.ts.map +1 -0
- package/dist-extensions/extensions/cropping_controls/renderCornerControl.d.ts +14 -0
- package/dist-extensions/extensions/cropping_controls/renderCornerControl.d.ts.map +1 -0
- package/dist-extensions/extensions/index.d.ts +3 -0
- package/dist-extensions/extensions/index.d.ts.map +1 -1
- package/dist-extensions/fabric-extensions.min.js +1 -1
- package/dist-extensions/fabric-extensions.min.js.map +1 -1
- package/dist-extensions/fabric.d.ts +1 -0
- package/dist-extensions/fabric.d.ts.map +1 -1
- package/dist-extensions/index.mjs +3 -0
- package/dist-extensions/index.mjs.map +1 -1
- package/dist-extensions/src/EventTypeDefs.d.ts +5 -0
- package/dist-extensions/src/EventTypeDefs.d.ts.map +1 -1
- package/dist-extensions/src/Pattern/Pattern.d.ts.map +1 -1
- package/dist-extensions/src/Shadow.d.ts +1 -1
- package/dist-extensions/src/Shadow.d.ts.map +1 -1
- package/dist-extensions/src/canvas/CanvasOptions.d.ts.map +1 -1
- package/dist-extensions/src/canvas/SelectableCanvas.d.ts +2 -0
- package/dist-extensions/src/canvas/SelectableCanvas.d.ts.map +1 -1
- package/dist-extensions/src/canvas/StaticCanvas.d.ts.map +1 -1
- package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts.map +1 -1
- package/dist-extensions/src/constants.d.ts +1 -0
- package/dist-extensions/src/constants.d.ts.map +1 -1
- package/dist-extensions/src/controls/Control.d.ts +22 -1
- package/dist-extensions/src/controls/Control.d.ts.map +1 -1
- package/dist-extensions/src/controls/changeWidth.d.ts +22 -0
- package/dist-extensions/src/controls/changeWidth.d.ts.map +1 -1
- package/dist-extensions/src/controls/controlRendering.d.ts.map +1 -1
- package/dist-extensions/src/controls/index.d.ts +2 -1
- package/dist-extensions/src/controls/index.d.ts.map +1 -1
- package/dist-extensions/src/gradient/Gradient.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Circle.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Ellipse.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Group.d.ts.map +1 -1
- package/dist-extensions/src/shapes/IText/IText.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Image.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Line.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Object/Object.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Path.d.ts +1 -1
- package/dist-extensions/src/shapes/Path.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Polyline.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Rect.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Text/StyledText.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Text/Text.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Text/TextSVGExportMixin.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Textbox.d.ts.map +1 -1
- package/dist-extensions/src/shapes/Triangle.d.ts.map +1 -1
- package/dist-extensions/src/util/lang_string.d.ts +1 -1
- package/dist-extensions/src/util/lang_string.d.ts.map +1 -1
- package/dist-extensions/src/util/misc/svgParsing.d.ts.map +1 -1
- package/eslint.config.mjs +2 -0
- package/extensions/cropping_controls/croppingControls.spec.ts +115 -0
- package/extensions/cropping_controls/croppingControls.ts +150 -0
- package/extensions/cropping_controls/croppingHandlers.spec.ts +579 -0
- package/extensions/cropping_controls/croppingHandlers.ts +285 -0
- package/extensions/cropping_controls/enterCropMode.ts +30 -0
- package/extensions/cropping_controls/renderCornerControl.ts +53 -0
- package/extensions/index.ts +9 -0
- package/fabric.ts +1 -0
- package/package.json +17 -8
- package/src/ClassRegistry.spec.ts +18 -19
- package/src/EventTypeDefs.ts +15 -11
- package/src/Pattern/Pattern.spec.ts +12 -0
- package/src/Pattern/Pattern.ts +3 -2
- package/src/Shadow.ts +9 -8
- package/src/brushes/PencilBrush.spec.ts +11 -11
- package/src/canvas/Canvas-dispose.spec.ts +8 -7
- package/src/canvas/Canvas.spec.ts +27 -29
- package/src/canvas/CanvasOptions.ts +2 -1
- package/src/canvas/SelectableCanvas.ts +38 -15
- package/src/canvas/StaticCanvas.spec.ts +20 -0
- package/src/canvas/StaticCanvas.ts +7 -4
- package/src/canvas/StaticCanvasOptions.ts +1 -3
- package/src/constants.ts +1 -0
- package/src/controls/Control.spec.ts +102 -0
- package/src/controls/Control.ts +71 -2
- package/src/controls/changeHeight.spec.ts +147 -0
- package/src/controls/changeWidth.ts +68 -35
- package/src/controls/controlRendering.ts +20 -48
- package/src/controls/index.ts +7 -1
- package/src/gradient/Gradient.spec.ts +101 -46
- package/src/gradient/Gradient.ts +27 -14
- package/src/shapes/Circle.spec.ts +10 -39
- package/src/shapes/Circle.ts +11 -11
- package/src/shapes/Ellipse.spec.ts +8 -37
- package/src/shapes/Ellipse.ts +7 -7
- package/src/shapes/Group.ts +3 -3
- package/src/shapes/IText/IText-click-behavior.spec.ts +36 -49
- package/src/shapes/IText/IText.ts +5 -6
- package/src/shapes/IText/ITextKeyBehavior.test.ts +0 -1
- package/src/shapes/IText/__snapshots__/ITextBehavior.test.ts.snap +6 -6
- package/src/shapes/Image.spec.ts +17 -33
- package/src/shapes/Image.ts +15 -11
- package/src/shapes/Line.spec.ts +4 -30
- package/src/shapes/Line.ts +11 -16
- package/src/shapes/Object/FabricObjectSVGExportMixin.ts +11 -4
- package/src/shapes/Object/InteractiveObject.ts +4 -4
- package/src/shapes/Object/Object.ts +6 -5
- package/src/shapes/Object/ObjectGeometry.spec.ts +15 -0
- package/src/shapes/Object/ObjectGeometry.ts +1 -1
- package/src/shapes/Object/objectSvgExport.spec.ts +112 -0
- package/src/shapes/Object/types/FabricObjectProps.ts +1 -4
- package/src/shapes/Object/types/ObjectProps.ts +1 -3
- package/src/shapes/Path.spec.ts +4 -27
- package/src/shapes/Path.ts +2 -4
- package/src/shapes/Polygon.spec.ts +4 -31
- package/src/shapes/Polyline.spec.ts +4 -31
- package/src/shapes/Polyline.ts +11 -12
- package/src/shapes/Rect.spec.ts +25 -33
- package/src/shapes/Rect.ts +7 -7
- package/src/shapes/Text/StyledText.ts +0 -3
- package/src/shapes/Text/Text.spec.ts +3 -32
- package/src/shapes/Text/Text.ts +5 -6
- package/src/shapes/Text/TextSVGExportMixin.spec.ts +9 -0
- package/src/shapes/Text/TextSVGExportMixin.ts +14 -16
- package/src/shapes/Text/__snapshots__/Text.spec.ts.snap +1 -1
- package/src/shapes/Text/__snapshots__/TextSVGExportMixin.spec.ts.snap +1 -1
- package/src/shapes/Textbox.spec.ts +5 -5
- package/src/shapes/Textbox.ts +6 -5
- package/src/shapes/Triangle.ts +4 -4
- package/src/shapes/__snapshots__/Image.spec.ts.snap +4 -4
- package/src/shapes/__snapshots__/Textbox.spec.ts.snap +5 -5
- package/src/util/lang_string.ts +3 -2
- package/src/util/misc/svgParsing.ts +2 -1
- package/tsconfig.spec.json +1 -0
- package/vitest.config.ts +12 -2
- package/vitest.extend.ts +6 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Path.mjs","sources":["../../../src/shapes/Path.ts"],"sourcesContent":["import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { toFixed } from '../util/misc/toFixed';\nimport {\n getBoundsOfCurve,\n joinPath,\n makePathSimpler,\n parsePath,\n} from '../util/path';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type {\n TComplexPathData,\n TPathSegmentInfo,\n TSimplePathData,\n} from '../util/path/typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type {\n TBBox,\n TClassProperties,\n TSVGReviver,\n TOptions,\n} from '../typedefs';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\ninterface UniquePathProps {\n sourcePath?: string;\n path?: TSimplePathData;\n}\n\nexport interface SerializedPathProps\n extends SerializedObjectProps,\n UniquePathProps {}\n\nexport interface PathProps extends FabricObjectProps, UniquePathProps {}\n\nexport interface IPathBBox extends TBBox {\n left: number;\n top: number;\n pathOffset: Point;\n}\n\nexport class Path<\n Props extends TOptions<PathProps> = Partial<PathProps>,\n SProps extends SerializedPathProps = SerializedPathProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject<Props, SProps, EventSpec> {\n /**\n * Array of path points\n * @type Array\n */\n declare path: TSimplePathData;\n\n declare pathOffset: Point;\n\n declare sourcePath?: string;\n\n declare segmentsInfo?: TPathSegmentInfo[];\n\n static type = 'Path';\n\n static cacheProperties = [...cacheProperties, 'path', 'fillRule'];\n\n /**\n * Constructor\n * @param {TComplexPathData} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {Partial<PathProps>} [options] Options object\n * @return {Path} thisArg\n */\n constructor(\n path: TComplexPathData | string,\n // todo: evaluate this spread here\n { path: _, left, top, ...options }: Partial<Props> = {},\n ) {\n super();\n Object.assign(this, Path.ownDefaults);\n this.setOptions(options);\n this._setPath(path || [], true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n /**\n * @private\n * @param {TComplexPathData | string} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {boolean} [adjustPosition] pass true to reposition the object according to the bounding box\n * @returns {Point} top left position of the bounding box, useful for complementary positioning\n */\n _setPath(path: TComplexPathData | string, adjustPosition?: boolean) {\n this.path = makePathSimpler(Array.isArray(path) ? path : parsePath(path));\n this.setBoundingBox(adjustPosition);\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = this._calcBoundsFromPath();\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _renderPathCommands(ctx: CanvasRenderingContext2D) {\n const l = -this.pathOffset.x,\n t = -this.pathOffset.y;\n\n ctx.beginPath();\n\n for (const command of this.path) {\n switch (\n command[0] // first letter\n ) {\n case 'L': // lineto, absolute\n ctx.lineTo(command[1] + l, command[2] + t);\n break;\n\n case 'M': // moveTo, absolute\n ctx.moveTo(command[1] + l, command[2] + t);\n break;\n\n case 'C': // bezierCurveTo, absolute\n ctx.bezierCurveTo(\n command[1] + l,\n command[2] + t,\n command[3] + l,\n command[4] + t,\n command[5] + l,\n command[6] + t,\n );\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n ctx.quadraticCurveTo(\n command[1] + l,\n command[2] + t,\n command[3] + l,\n command[4] + t,\n );\n break;\n\n case 'Z':\n ctx.closePath();\n break;\n }\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _render(ctx: CanvasRenderingContext2D) {\n this._renderPathCommands(ctx);\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns string representation of an instance\n * @return {string} string representation of an instance\n */\n toString() {\n return `#<Path (${this.complexity()}): { \"top\": ${this.top}, \"left\": ${\n this.left\n } }>`;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n path: this.path.map((pathCmd) => pathCmd.slice()),\n };\n }\n\n /**\n * Returns dataless object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n const o = this.toObject<T, K>(propertiesToInclude);\n if (this.sourcePath) {\n delete o.path;\n o.sourcePath = this.sourcePath;\n }\n return o;\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const path = joinPath(this.path, config.NUM_FRACTION_DIGITS);\n return [\n '<path ',\n 'COMMON_PARTS',\n `d=\"${path}\" stroke-linecap=\"round\" />\\n`,\n ];\n }\n\n /**\n * @private\n * @return the path command's translate transform attribute\n */\n _getOffsetTransform() {\n const digits = config.NUM_FRACTION_DIGITS;\n return ` translate(${toFixed(-this.pathOffset.x, digits)}, ${toFixed(\n -this.pathOffset.y,\n digits,\n )})`;\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {string} svg representation of an instance\n */\n toClipPathSVG(reviver?: TSVGReviver): string {\n const additionalTransform = this._getOffsetTransform();\n return (\n '\\t' +\n this._createBaseClipPathSVGMarkup(this._toSVG(), {\n reviver,\n additionalTransform: additionalTransform,\n })\n );\n }\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {string} svg representation of an instance\n */\n toSVG(reviver?: TSVGReviver): string {\n const additionalTransform = this._getOffsetTransform();\n return this._createBaseSVGMarkup(this._toSVG(), {\n reviver,\n additionalTransform: additionalTransform,\n });\n }\n\n /**\n * Returns number representation of an instance complexity\n * @return {number} complexity of this instance\n */\n complexity() {\n return this.path.length;\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { width, height, pathOffset } = this._calcDimensions();\n this.set({ width, height, pathOffset });\n // using pathOffset because it match the use case.\n // if pathOffset change here we need to use left + width/2 , top + height/2\n adjustPosition && this.setPositionByOrigin(pathOffset, CENTER, CENTER);\n }\n\n _calcBoundsFromPath(): TBBox {\n const bounds: XY[] = [];\n let subpathStartX = 0,\n subpathStartY = 0,\n x = 0, // current x\n y = 0; // current y\n\n for (const command of this.path) {\n // current instruction\n switch (\n command[0] // first letter\n ) {\n case 'L': // lineto, absolute\n x = command[1];\n y = command[2];\n bounds.push({ x: subpathStartX, y: subpathStartY }, { x, y });\n break;\n\n case 'M': // moveTo, absolute\n x = command[1];\n y = command[2];\n subpathStartX = x;\n subpathStartY = y;\n break;\n\n case 'C': // bezierCurveTo, absolute\n bounds.push(\n ...getBoundsOfCurve(\n x,\n y,\n command[1],\n command[2],\n command[3],\n command[4],\n command[5],\n command[6],\n ),\n );\n x = command[5];\n y = command[6];\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n bounds.push(\n ...getBoundsOfCurve(\n x,\n y,\n command[1],\n command[2],\n command[1],\n command[2],\n command[3],\n command[4],\n ),\n );\n x = command[3];\n y = command[4];\n break;\n\n case 'Z':\n x = subpathStartX;\n y = subpathStartY;\n break;\n }\n }\n return makeBoundingBoxFromPoints(bounds);\n }\n\n /**\n * @private\n */\n _calcDimensions(): IPathBBox {\n const bbox = this._calcBoundsFromPath();\n\n return {\n ...bbox,\n pathOffset: new Point(\n bbox.left + bbox.width / 2,\n bbox.top + bbox.height / 2,\n ),\n };\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `Path.fromElement`)\n * @see http://www.w3.org/TR/SVG/paths.html#PathElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'd'];\n\n /**\n * Creates an instance of Path from an object\n * @param {Object} object\n * @returns {Promise<Path>}\n */\n static fromObject<T extends TOptions<SerializedPathProps>>(object: T) {\n return this._fromObject<Path>(object, {\n extraParam: 'path',\n });\n }\n\n /**\n * Creates an instance of Path from an SVG <path> element\n * @param {HTMLElement} element to parse\n * @param {Partial<PathProps>} [options] Options object\n */\n static async fromElement(\n element: HTMLElement | SVGElement,\n options?: Partial<PathProps>,\n cssRules?: CSSRules,\n ) {\n const { d, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(d, {\n ...parsedAttributes,\n ...options,\n // we pass undefined to instruct the constructor to position the object using the bbox\n left: undefined,\n top: undefined,\n });\n }\n}\n\nclassRegistry.setClass(Path);\nclassRegistry.setSVGClass(Path);\n\n/* _FROM_SVG_START_ */\n"],"names":["Path","FabricObject","constructor","path","_","left","top","options","arguments","length","undefined","Object","assign","ownDefaults","setOptions","_setPath","set","LEFT","TOP","adjustPosition","makePathSimpler","Array","isArray","parsePath","setBoundingBox","_findCenterFromElement","bbox","_calcBoundsFromPath","Point","width","height","_renderPathCommands","ctx","l","pathOffset","x","t","y","beginPath","command","lineTo","moveTo","bezierCurveTo","quadraticCurveTo","closePath","_render","_renderPaintInOrder","toString","complexity","toObject","propertiesToInclude","map","pathCmd","slice","toDatalessObject","o","sourcePath","_toSVG","joinPath","config","NUM_FRACTION_DIGITS","_getOffsetTransform","digits","toFixed","toClipPathSVG","reviver","additionalTransform","_createBaseClipPathSVGMarkup","toSVG","_createBaseSVGMarkup","setDimensions","_calcDimensions","setPositionByOrigin","CENTER","bounds","subpathStartX","subpathStartY","push","getBoundsOfCurve","makeBoundingBoxFromPoints","fromObject","object","_fromObject","extraParam","fromElement","element","cssRules","d","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","_defineProperty","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Path.mjs","sources":["../../../src/shapes/Path.ts"],"sourcesContent":["import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { toFixed } from '../util/misc/toFixed';\nimport {\n getBoundsOfCurve,\n joinPath,\n makePathSimpler,\n parsePath,\n} from '../util/path';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type {\n TComplexPathData,\n TPathSegmentInfo,\n TSimplePathData,\n} from '../util/path/typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type {\n TBBox,\n TClassProperties,\n TSVGReviver,\n TOptions,\n} from '../typedefs';\nimport { CENTER, LEFT, TOP } from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\ninterface UniquePathProps {\n sourcePath?: string;\n path?: TSimplePathData;\n}\n\nexport interface SerializedPathProps\n extends SerializedObjectProps, UniquePathProps {}\n\nexport interface PathProps extends FabricObjectProps, UniquePathProps {}\n\nexport interface IPathBBox extends TBBox {\n left: number;\n top: number;\n pathOffset: Point;\n}\n\nexport class Path<\n Props extends TOptions<PathProps> = Partial<PathProps>,\n SProps extends SerializedPathProps = SerializedPathProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject<Props, SProps, EventSpec> {\n /**\n * Array of path points\n * @type Array\n */\n declare path: TSimplePathData;\n\n declare pathOffset: Point;\n\n declare sourcePath?: string;\n\n declare segmentsInfo?: TPathSegmentInfo[];\n\n static type = 'Path';\n\n static cacheProperties = [...cacheProperties, 'path', 'fillRule'];\n\n /**\n * Constructor\n * @param {TComplexPathData} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {Partial<PathProps>} [options] Options object\n * @return {Path} thisArg\n */\n constructor(\n path: TComplexPathData | string,\n // todo: evaluate this spread here\n { path: _, left, top, ...options }: Partial<Props> = {},\n ) {\n super();\n Object.assign(this, Path.ownDefaults);\n this.setOptions(options);\n this._setPath(path || [], true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n /**\n * @private\n * @param {TComplexPathData | string} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {boolean} [adjustPosition] pass true to reposition the object according to the bounding box\n * @returns {Point} top left position of the bounding box, useful for complementary positioning\n */\n _setPath(path: TComplexPathData | string, adjustPosition?: boolean) {\n this.path = makePathSimpler(Array.isArray(path) ? path : parsePath(path));\n this.setBoundingBox(adjustPosition);\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = this._calcBoundsFromPath();\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _renderPathCommands(ctx: CanvasRenderingContext2D) {\n const l = -this.pathOffset.x,\n t = -this.pathOffset.y;\n\n ctx.beginPath();\n\n for (const command of this.path) {\n switch (\n command[0] // first letter\n ) {\n case 'L': // lineto, absolute\n ctx.lineTo(command[1] + l, command[2] + t);\n break;\n\n case 'M': // moveTo, absolute\n ctx.moveTo(command[1] + l, command[2] + t);\n break;\n\n case 'C': // bezierCurveTo, absolute\n ctx.bezierCurveTo(\n command[1] + l,\n command[2] + t,\n command[3] + l,\n command[4] + t,\n command[5] + l,\n command[6] + t,\n );\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n ctx.quadraticCurveTo(\n command[1] + l,\n command[2] + t,\n command[3] + l,\n command[4] + t,\n );\n break;\n\n case 'Z':\n ctx.closePath();\n break;\n }\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _render(ctx: CanvasRenderingContext2D) {\n this._renderPathCommands(ctx);\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns string representation of an instance\n * @return {string} string representation of an instance\n */\n toString() {\n return `#<Path (${this.complexity()}): { \"top\": ${this.top}, \"left\": ${\n this.left\n } }>`;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n path: this.path.map((pathCmd) => pathCmd.slice()),\n };\n }\n\n /**\n * Returns dataless object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n const o = this.toObject<T, K>(propertiesToInclude);\n if (this.sourcePath) {\n delete o.path;\n o.sourcePath = this.sourcePath;\n }\n return o;\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n return [\n '<path ',\n 'COMMON_PARTS',\n `d=\"${joinPath(this.path, config.NUM_FRACTION_DIGITS)}\" stroke-linecap=\"round\" />\\n`,\n ];\n }\n\n /**\n * @private\n * @return the path command's translate transform attribute\n */\n _getOffsetTransform() {\n const digits = config.NUM_FRACTION_DIGITS;\n return ` translate(${toFixed(-this.pathOffset.x, digits)}, ${toFixed(\n -this.pathOffset.y,\n digits,\n )})`;\n }\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {string} svg representation of an instance\n */\n toClipPathSVG(reviver?: TSVGReviver): string {\n const additionalTransform = this._getOffsetTransform();\n return (\n '\\t' +\n this._createBaseClipPathSVGMarkup(this._toSVG(), {\n reviver,\n additionalTransform: additionalTransform,\n })\n );\n }\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {string} svg representation of an instance\n */\n toSVG(reviver?: TSVGReviver): string {\n const additionalTransform = this._getOffsetTransform();\n return this._createBaseSVGMarkup(this._toSVG(), {\n reviver,\n additionalTransform: additionalTransform,\n });\n }\n\n /**\n * Returns number representation of an instance complexity\n * @return {number} complexity of this instance\n */\n complexity() {\n return this.path.length;\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { width, height, pathOffset } = this._calcDimensions();\n this.set({ width, height, pathOffset });\n // using pathOffset because it match the use case.\n // if pathOffset change here we need to use left + width/2 , top + height/2\n adjustPosition && this.setPositionByOrigin(pathOffset, CENTER, CENTER);\n }\n\n _calcBoundsFromPath(): TBBox {\n const bounds: XY[] = [];\n let subpathStartX = 0,\n subpathStartY = 0,\n x = 0, // current x\n y = 0; // current y\n\n for (const command of this.path) {\n // current instruction\n switch (\n command[0] // first letter\n ) {\n case 'L': // lineto, absolute\n x = command[1];\n y = command[2];\n bounds.push({ x: subpathStartX, y: subpathStartY }, { x, y });\n break;\n\n case 'M': // moveTo, absolute\n x = command[1];\n y = command[2];\n subpathStartX = x;\n subpathStartY = y;\n break;\n\n case 'C': // bezierCurveTo, absolute\n bounds.push(\n ...getBoundsOfCurve(\n x,\n y,\n command[1],\n command[2],\n command[3],\n command[4],\n command[5],\n command[6],\n ),\n );\n x = command[5];\n y = command[6];\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n bounds.push(\n ...getBoundsOfCurve(\n x,\n y,\n command[1],\n command[2],\n command[1],\n command[2],\n command[3],\n command[4],\n ),\n );\n x = command[3];\n y = command[4];\n break;\n\n case 'Z':\n x = subpathStartX;\n y = subpathStartY;\n break;\n }\n }\n return makeBoundingBoxFromPoints(bounds);\n }\n\n /**\n * @private\n */\n _calcDimensions(): IPathBBox {\n const bbox = this._calcBoundsFromPath();\n\n return {\n ...bbox,\n pathOffset: new Point(\n bbox.left + bbox.width / 2,\n bbox.top + bbox.height / 2,\n ),\n };\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `Path.fromElement`)\n * @see http://www.w3.org/TR/SVG/paths.html#PathElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'd'];\n\n /**\n * Creates an instance of Path from an object\n * @param {Object} object\n * @returns {Promise<Path>}\n */\n static fromObject<T extends TOptions<SerializedPathProps>>(object: T) {\n return this._fromObject<Path>(object, {\n extraParam: 'path',\n });\n }\n\n /**\n * Creates an instance of Path from an SVG <path> element\n * @param {HTMLElement} element to parse\n * @param {Partial<PathProps>} [options] Options object\n */\n static async fromElement(\n element: HTMLElement | SVGElement,\n options?: Partial<PathProps>,\n cssRules?: CSSRules,\n ) {\n const { d, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(d, {\n ...parsedAttributes,\n ...options,\n // we pass undefined to instruct the constructor to position the object using the bbox\n left: undefined,\n top: undefined,\n });\n }\n}\n\nclassRegistry.setClass(Path);\nclassRegistry.setSVGClass(Path);\n\n/* _FROM_SVG_START_ */\n"],"names":["Path","FabricObject","constructor","path","_","left","top","options","arguments","length","undefined","Object","assign","ownDefaults","setOptions","_setPath","set","LEFT","TOP","adjustPosition","makePathSimpler","Array","isArray","parsePath","setBoundingBox","_findCenterFromElement","bbox","_calcBoundsFromPath","Point","width","height","_renderPathCommands","ctx","l","pathOffset","x","t","y","beginPath","command","lineTo","moveTo","bezierCurveTo","quadraticCurveTo","closePath","_render","_renderPaintInOrder","toString","complexity","toObject","propertiesToInclude","map","pathCmd","slice","toDatalessObject","o","sourcePath","_toSVG","joinPath","config","NUM_FRACTION_DIGITS","_getOffsetTransform","digits","toFixed","toClipPathSVG","reviver","additionalTransform","_createBaseClipPathSVGMarkup","toSVG","_createBaseSVGMarkup","setDimensions","_calcDimensions","setPositionByOrigin","CENTER","bounds","subpathStartX","subpathStartY","push","getBoundsOfCurve","makeBoundingBoxFromPoints","fromObject","object","_fromObject","extraParam","fromElement","element","cssRules","d","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","_defineProperty","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Polyline.d.ts","sourceRoot":"","sources":["../../../src/shapes/Polyline.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAKzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAGtF,OAAO,EAAE,YAAY,EAAmB,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAUrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Polyline.d.ts","sourceRoot":"","sources":["../../../src/shapes/Polyline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{config as i}from"../config.min.mjs";import{SHARED_ATTRIBUTES as s}from"../parser/attributes.min.mjs";import{parseAttributes as e}from"../parser/parseAttributes.min.mjs";import{parsePointsAttribute as o}from"../parser/parsePointsAttribute.min.mjs";import{Point as n}from"../Point.min.mjs";import{classRegistry as r}from"../ClassRegistry.min.mjs";import{makeBoundingBoxFromPoints as h}from"../util/misc/boundingBoxFromPoints.min.mjs";import{calcDimensionsMatrix as m,transformPoint as
|
|
1
|
+
import{defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{config as i}from"../config.min.mjs";import{SHARED_ATTRIBUTES as s}from"../parser/attributes.min.mjs";import{parseAttributes as e}from"../parser/parseAttributes.min.mjs";import{parsePointsAttribute as o}from"../parser/parsePointsAttribute.min.mjs";import{Point as n}from"../Point.min.mjs";import{classRegistry as r}from"../ClassRegistry.min.mjs";import{makeBoundingBoxFromPoints as h}from"../util/misc/boundingBoxFromPoints.min.mjs";import{calcDimensionsMatrix as m,transformPoint as a}from"../util/misc/matrix.min.mjs";import{projectStrokeOnPoints as p}from"../util/misc/projectStroke/index.min.mjs";import{degreesToRadians as l}from"../util/misc/radiansDegreesConversion.min.mjs";import{toFixed as f}from"../util/misc/toFixed.min.mjs";import{FabricObject as c}from"./Object/FabricObject.min.mjs";import{SKEW_X as u,SKEW_Y as d,LEFT as g,TOP as k,CENTER as w,SCALE_X as x,SCALE_Y as O}from"../constants.min.mjs";import{escapeXml as j}from"../util/lang_string.min.mjs";import{cacheProperties as y}from"./Object/defaultValues.min.mjs";const B={exactBoundingBox:!1};class _ extends c{static getDefaults(){return{...super.getDefaults(),..._.ownDefaults}}constructor(){let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),t(this,"strokeDiff",void 0),Object.assign(this,_.ownDefaults),this.setOptions(s),this.points=i;const{left:e,top:o}=s;this.initialized=!0,this.setBoundingBox(!0),"number"==typeof e&&this.set(g,e),"number"==typeof o&&this.set(k,o)}isOpen(){return!0}_projectStrokeOnPoints(t){return p(this.points,t,this.isOpen())}_calcDimensions(t){t={scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:this.strokeMiterLimit,strokeUniform:this.strokeUniform,strokeWidth:this.strokeWidth,...t||{}};const i=this.exactBoundingBox?this._projectStrokeOnPoints(t).map(t=>t.projectedPoint):this.points;if(0===i.length)return{left:0,top:0,width:0,height:0,pathOffset:new n,strokeOffset:new n,strokeDiff:new n};const s=h(i),e=m({...t,scaleX:1,scaleY:1}),o=h(this.points.map(t=>a(t,e,!0))),r=new n(this.scaleX,this.scaleY);let p=s.left+s.width/2,f=s.top+s.height/2;return this.exactBoundingBox&&(p-=f*Math.tan(l(this.skewX)),f-=p*Math.tan(l(this.skewY))),{...s,pathOffset:new n(p,f),strokeOffset:new n(o.left,o.top).subtract(new n(s.left,s.top)).multiply(r),strokeDiff:new n(s.width,s.height).subtract(new n(o.width,o.height)).multiply(r)}}_findCenterFromElement(){const t=h(this.points);return new n(t.left+t.width/2,t.top+t.height/2)}setDimensions(){this.setBoundingBox()}setBoundingBox(t){const{left:i,top:s,width:e,height:o,pathOffset:r,strokeOffset:h,strokeDiff:m}=this._calcDimensions();this.set({width:e,height:o,pathOffset:r,strokeOffset:h,strokeDiff:m}),t&&this.setPositionByOrigin(new n(i+e/2,s+o/2),w,w)}isStrokeAccountedForInDimensions(){return this.exactBoundingBox}_getNonTransformedDimensions(){return this.exactBoundingBox?new n(this.width,this.height):super._getNonTransformedDimensions()}_getTransformedDimensions(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this.exactBoundingBox){let r;if(Object.keys(t).some(t=>this.strokeUniform||this.constructor.layoutProperties.includes(t))){var i,s;const{width:e,height:o}=this._calcDimensions(t);r=new n(null!==(i=t.width)&&void 0!==i?i:e,null!==(s=t.height)&&void 0!==s?s:o)}else{var e,o;r=new n(null!==(e=t.width)&&void 0!==e?e:this.width,null!==(o=t.height)&&void 0!==o?o:this.height)}return r.multiply(new n(t.scaleX||this.scaleX,t.scaleY||this.scaleY))}return super._getTransformedDimensions(t)}_set(t,i){const s=this.initialized&&this[t]!==i,e=super._set(t,i);return this.exactBoundingBox&&s&&((t===x||t===O)&&this.strokeUniform&&this.constructor.layoutProperties.includes("strokeUniform")||this.constructor.layoutProperties.includes(t))&&this.setDimensions(),e}toObject(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{...super.toObject(t),points:this.points.map(t=>{let{x:i,y:s}=t;return{x:i,y:s}})}}_toSVG(){const t=this.pathOffset.x,s=this.pathOffset.y,e=i.NUM_FRACTION_DIGITS,o=this.points.map(i=>{let{x:o,y:n}=i;return`${f(o-t,e)},${f(n-s,e)}`}).join(" ");return[`<${j(this.constructor.type).toLowerCase()} `,"COMMON_PARTS",`points="${o}" />\n`]}_render(t){const i=this.points.length,s=this.pathOffset.x,e=this.pathOffset.y;if(i&&!isNaN(this.points[i-1].y)){t.beginPath(),t.moveTo(this.points[0].x-s,this.points[0].y-e);for(let o=0;o<i;o++){const i=this.points[o];t.lineTo(i.x-s,i.y-e)}!this.isOpen()&&t.closePath(),this._renderPaintInOrder(t)}}complexity(){return this.points.length}static async fromElement(t,i,s){const n=o(t.getAttribute("points")),{left:r,top:h,...m}=e(t,this.ATTRIBUTE_NAMES,s);return new this(n,{...m,...i})}static fromObject(t){return this._fromObject(t,{extraParam:"points"})}}t(_,"ownDefaults",B),t(_,"type","Polyline"),t(_,"layoutProperties",[u,d,"strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeWidth","strokeUniform","points"]),t(_,"cacheProperties",[...y,"points"]),t(_,"ATTRIBUTE_NAMES",[...s]),r.setClass(_),r.setSVGClass(_);export{_ as Polyline,B as polylineDefaultValues};
|
|
2
2
|
//# sourceMappingURL=Polyline.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Polyline.min.mjs","sources":["../../../src/shapes/Polyline.ts"],"sourcesContent":["import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { parsePointsAttribute } from '../parser/parsePointsAttribute';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { calcDimensionsMatrix, transformPoint } from '../util/misc/matrix';\nimport { projectStrokeOnPoints } from '../util/misc/projectStroke';\nimport type { TProjectStrokeOnPointsOptions } from '../util/misc/projectStroke/types';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport {\n CENTER,\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const polylineDefaultValues: Partial<TClassProperties<Polyline>> = {\n /**\n * @deprecated transient option soon to be removed in favor of a different design\n */\n exactBoundingBox: false,\n};\n\nexport interface SerializedPolylineProps extends SerializedObjectProps {\n points: XY[];\n}\n\nexport class Polyline<\n Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n SProps extends SerializedPolylineProps = SerializedPolylineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject<Props, SProps, EventSpec> {\n /**\n * Points array\n * @type Array\n */\n declare points: XY[];\n\n /**\n * WARNING: Feature in progress\n * Calculate the exact bounding box taking in account strokeWidth on acute angles\n * this will be turned to true by default on fabric 6.0\n * maybe will be left in as an optimization since calculations may be slow\n * @deprecated transient option soon to be removed in favor of a different design\n * @type Boolean\n * @default false\n */\n declare exactBoundingBox: boolean;\n\n declare private initialized: true | undefined;\n\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polyline';\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Polyline.ownDefaults,\n };\n }\n\n /**\n * A list of properties that if changed trigger a recalculation of dimensions\n * @todo check if you really need to recalculate for all cases\n */\n static layoutProperties: (keyof Polyline)[] = [\n SKEW_X,\n SKEW_Y,\n 'strokeLineCap',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'strokeWidth',\n 'strokeUniform',\n 'points',\n ];\n\n declare pathOffset: Point;\n\n declare strokeOffset: Point;\n\n static cacheProperties = [...cacheProperties, 'points'];\n\n strokeDiff: Point;\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {Polyline} thisArg\n * @example\n * var poly = new Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n constructor(points: XY[] = [], options: Props = {} as Props) {\n super();\n Object.assign(this, Polyline.ownDefaults);\n this.setOptions(options);\n this.points = points;\n const { left, top } = options;\n this.initialized = true;\n this.setBoundingBox(true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n protected isOpen() {\n return true;\n }\n\n private _projectStrokeOnPoints(options: TProjectStrokeOnPointsOptions) {\n return projectStrokeOnPoints(this.points, options, this.isOpen());\n }\n\n /**\n * Calculate the polygon bounding box\n * @private\n */\n _calcDimensions(options?: Partial<TProjectStrokeOnPointsOptions>) {\n options = {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n strokeLineCap: this.strokeLineCap,\n strokeLineJoin: this.strokeLineJoin,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeUniform: this.strokeUniform,\n strokeWidth: this.strokeWidth,\n ...(options || {}),\n };\n const points = this.exactBoundingBox\n ? this._projectStrokeOnPoints(\n options as TProjectStrokeOnPointsOptions,\n ).map((projection) => projection.projectedPoint)\n : this.points;\n if (points.length === 0) {\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n pathOffset: new Point(),\n strokeOffset: new Point(),\n strokeDiff: new Point(),\n };\n }\n const bbox = makeBoundingBoxFromPoints(points),\n // Remove scale effect, since it's applied after\n matrix = calcDimensionsMatrix({ ...options, scaleX: 1, scaleY: 1 }),\n bboxNoStroke = makeBoundingBoxFromPoints(\n this.points.map((p) => transformPoint(p, matrix, true)),\n ),\n scale = new Point(this.scaleX, this.scaleY);\n let offsetX = bbox.left + bbox.width / 2,\n offsetY = bbox.top + bbox.height / 2;\n if (this.exactBoundingBox) {\n offsetX = offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));\n // Order of those assignments is important.\n // offsetY relies on offsetX being already changed by the line above\n offsetY = offsetY - offsetX * Math.tan(degreesToRadians(this.skewY));\n }\n\n return {\n ...bbox,\n pathOffset: new Point(offsetX, offsetY),\n strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top)\n .subtract(new Point(bbox.left, bbox.top))\n .multiply(scale),\n strokeDiff: new Point(bbox.width, bbox.height)\n .subtract(new Point(bboxNoStroke.width, bboxNoStroke.height))\n .multiply(scale),\n };\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = makeBoundingBoxFromPoints(this.points);\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { left, top, width, height, pathOffset, strokeOffset, strokeDiff } =\n this._calcDimensions();\n this.set({ width, height, pathOffset, strokeOffset, strokeDiff });\n adjustPosition &&\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER,\n );\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return this.exactBoundingBox;\n }\n\n /**\n * @override stroke is taken in account in size\n */\n _getNonTransformedDimensions() {\n return this.exactBoundingBox\n ? // TODO: fix this\n new Point(this.width, this.height)\n : super._getNonTransformedDimensions();\n }\n\n /**\n * @override stroke and skewing are taken into account when projecting stroke on points,\n * therefore we don't want the default calculation to account for skewing as well.\n * Though it is possible to pass `width` and `height` in `options`, doing so is very strange, use with discretion.\n *\n * @private\n */\n _getTransformedDimensions(options: any = {}) {\n if (this.exactBoundingBox) {\n let size: Point;\n /* When `strokeUniform = true`, any changes to the properties require recalculating the `width` and `height` because\n the stroke projections are affected.\n When `strokeUniform = false`, we don't need to recalculate for scale transformations, as the effect of scale on\n projections follows a linear function (e.g. scaleX of 2 just multiply width by 2)*/\n if (\n Object.keys(options).some(\n (key) =>\n this.strokeUniform ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof TProjectStrokeOnPointsOptions,\n ),\n )\n ) {\n const { width, height } = this._calcDimensions(options);\n size = new Point(options.width ?? width, options.height ?? height);\n } else {\n size = new Point(\n options.width ?? this.width,\n options.height ?? this.height,\n );\n }\n return size.multiply(\n new Point(options.scaleX || this.scaleX, options.scaleY || this.scaleY),\n );\n } else {\n return super._getTransformedDimensions(options);\n }\n }\n\n /**\n * Recalculates dimensions when changing skew and scale\n * @private\n */\n _set(key: string, value: any) {\n const changed = this.initialized && this[key as keyof this] !== value;\n const output = super._set(key, value);\n if (\n this.exactBoundingBox &&\n changed &&\n (((key === SCALE_X || key === SCALE_Y) &&\n this.strokeUniform &&\n (this.constructor as typeof Polyline).layoutProperties.includes(\n 'strokeUniform',\n )) ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof Polyline,\n ))\n ) {\n this.setDimensions();\n }\n return output;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n points: this.points.map(({ x, y }) => ({ x, y })),\n };\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const points = [],\n diffX = this.pathOffset.x,\n diffY = this.pathOffset.y,\n NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n\n for (let i = 0, len = this.points.length; i < len; i++) {\n points.push(\n toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS),\n ',',\n toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS),\n ' ',\n );\n }\n return [\n `<${\n (this.constructor as typeof Polyline).type.toLowerCase() as\n | 'polyline'\n | 'polygon'\n } `,\n 'COMMON_PARTS',\n `points=\"${points.join('')}\" />\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return;\n }\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (let i = 0; i < len; i++) {\n const point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n !this.isOpen() && ctx.closePath();\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity(): number {\n return this.points.length;\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Polyline.fromElement})\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES];\n\n /**\n * Returns Polyline instance from an SVG element\n * @param {HTMLElement} element Element to parser\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement | SVGElement,\n options?: Abortable,\n cssRules?: CSSRules,\n ) {\n const points = parsePointsAttribute(element.getAttribute('points')),\n // we omit left and top to instruct the constructor to position the object using the bbox\n\n { left, top, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(points, {\n ...parsedAttributes,\n ...options,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Polyline instance from an object representation\n * @param {Object} object Object to create an instance from\n * @returns {Promise<Polyline>}\n */\n static fromObject<T extends TOptions<SerializedPolylineProps>>(object: T) {\n return this._fromObject<Polyline>(object, {\n extraParam: 'points',\n });\n }\n}\n\nclassRegistry.setClass(Polyline);\nclassRegistry.setSVGClass(Polyline);\n"],"names":["polylineDefaultValues","exactBoundingBox","Polyline","FabricObject","getDefaults","super","ownDefaults","constructor","points","arguments","length","undefined","options","_defineProperty","this","Object","assign","setOptions","left","top","initialized","setBoundingBox","set","LEFT","TOP","isOpen","_projectStrokeOnPoints","projectStrokeOnPoints","_calcDimensions","scaleX","scaleY","skewX","skewY","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeUniform","strokeWidth","map","projection","projectedPoint","width","height","pathOffset","Point","strokeOffset","strokeDiff","bbox","makeBoundingBoxFromPoints","matrix","calcDimensionsMatrix","bboxNoStroke","p","transformPoint","scale","offsetX","offsetY","Math","tan","degreesToRadians","subtract","multiply","_findCenterFromElement","setDimensions","adjustPosition","setPositionByOrigin","CENTER","isStrokeAccountedForInDimensions","_getNonTransformedDimensions","_getTransformedDimensions","size","keys","some","key","layoutProperties","includes","_options$width","_options$height","_options$width2","_options$height2","_set","value","changed","output","SCALE_X","SCALE_Y","toObject","propertiesToInclude","_ref","x","y","_toSVG","diffX","diffY","NUM_FRACTION_DIGITS","config","i","len","push","toFixed","type","toLowerCase","join","_render","ctx","isNaN","beginPath","moveTo","point","lineTo","closePath","_renderPaintInOrder","complexity","fromElement","element","cssRules","parsePointsAttribute","getAttribute","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","fromObject","object","_fromObject","extraParam","SKEW_X","SKEW_Y","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Polyline.min.mjs","sources":["../../../src/shapes/Polyline.ts"],"sourcesContent":["import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { parsePointsAttribute } from '../parser/parsePointsAttribute';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { calcDimensionsMatrix, transformPoint } from '../util/misc/matrix';\nimport { projectStrokeOnPoints } from '../util/misc/projectStroke';\nimport type { TProjectStrokeOnPointsOptions } from '../util/misc/projectStroke/types';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport {\n CENTER,\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\nimport { escapeXml } from '../util/lang_string';\n\nexport const polylineDefaultValues: Partial<TClassProperties<Polyline>> = {\n /**\n * @deprecated transient option soon to be removed in favor of a different design\n */\n exactBoundingBox: false,\n};\n\nexport interface SerializedPolylineProps extends SerializedObjectProps {\n points: XY[];\n}\n\nexport class Polyline<\n Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n SProps extends SerializedPolylineProps = SerializedPolylineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject<Props, SProps, EventSpec> {\n /**\n * Points array\n * @type Array\n */\n declare points: XY[];\n\n /**\n * WARNING: Feature in progress\n * Calculate the exact bounding box taking in account strokeWidth on acute angles\n * this will be turned to true by default on fabric 6.0\n * maybe will be left in as an optimization since calculations may be slow\n * @deprecated transient option soon to be removed in favor of a different design\n * @type Boolean\n * @default false\n */\n declare exactBoundingBox: boolean;\n\n declare private initialized: true | undefined;\n\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polyline';\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Polyline.ownDefaults,\n };\n }\n\n /**\n * A list of properties that if changed trigger a recalculation of dimensions\n * @todo check if you really need to recalculate for all cases\n */\n static layoutProperties: (keyof Polyline)[] = [\n SKEW_X,\n SKEW_Y,\n 'strokeLineCap',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'strokeWidth',\n 'strokeUniform',\n 'points',\n ];\n\n declare pathOffset: Point;\n\n declare strokeOffset: Point;\n\n static cacheProperties = [...cacheProperties, 'points'];\n\n strokeDiff: Point;\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {Polyline} thisArg\n * @example\n * var poly = new Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n constructor(points: XY[] = [], options: Props = {} as Props) {\n super();\n Object.assign(this, Polyline.ownDefaults);\n this.setOptions(options);\n this.points = points;\n const { left, top } = options;\n this.initialized = true;\n this.setBoundingBox(true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n protected isOpen() {\n return true;\n }\n\n private _projectStrokeOnPoints(options: TProjectStrokeOnPointsOptions) {\n return projectStrokeOnPoints(this.points, options, this.isOpen());\n }\n\n /**\n * Calculate the polygon bounding box\n * @private\n */\n _calcDimensions(options?: Partial<TProjectStrokeOnPointsOptions>) {\n options = {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n strokeLineCap: this.strokeLineCap,\n strokeLineJoin: this.strokeLineJoin,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeUniform: this.strokeUniform,\n strokeWidth: this.strokeWidth,\n ...(options || {}),\n };\n const points = this.exactBoundingBox\n ? this._projectStrokeOnPoints(\n options as TProjectStrokeOnPointsOptions,\n ).map((projection) => projection.projectedPoint)\n : this.points;\n if (points.length === 0) {\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n pathOffset: new Point(),\n strokeOffset: new Point(),\n strokeDiff: new Point(),\n };\n }\n const bbox = makeBoundingBoxFromPoints(points),\n // Remove scale effect, since it's applied after\n matrix = calcDimensionsMatrix({ ...options, scaleX: 1, scaleY: 1 }),\n bboxNoStroke = makeBoundingBoxFromPoints(\n this.points.map((p) => transformPoint(p, matrix, true)),\n ),\n scale = new Point(this.scaleX, this.scaleY);\n let offsetX = bbox.left + bbox.width / 2,\n offsetY = bbox.top + bbox.height / 2;\n if (this.exactBoundingBox) {\n offsetX = offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));\n // Order of those assignments is important.\n // offsetY relies on offsetX being already changed by the line above\n offsetY = offsetY - offsetX * Math.tan(degreesToRadians(this.skewY));\n }\n\n return {\n ...bbox,\n pathOffset: new Point(offsetX, offsetY),\n strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top)\n .subtract(new Point(bbox.left, bbox.top))\n .multiply(scale),\n strokeDiff: new Point(bbox.width, bbox.height)\n .subtract(new Point(bboxNoStroke.width, bboxNoStroke.height))\n .multiply(scale),\n };\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = makeBoundingBoxFromPoints(this.points);\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { left, top, width, height, pathOffset, strokeOffset, strokeDiff } =\n this._calcDimensions();\n this.set({ width, height, pathOffset, strokeOffset, strokeDiff });\n adjustPosition &&\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER,\n );\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return this.exactBoundingBox;\n }\n\n /**\n * @override stroke is taken in account in size\n */\n _getNonTransformedDimensions() {\n return this.exactBoundingBox\n ? // TODO: fix this\n new Point(this.width, this.height)\n : super._getNonTransformedDimensions();\n }\n\n /**\n * @override stroke and skewing are taken into account when projecting stroke on points,\n * therefore we don't want the default calculation to account for skewing as well.\n * Though it is possible to pass `width` and `height` in `options`, doing so is very strange, use with discretion.\n *\n * @private\n */\n _getTransformedDimensions(options: any = {}) {\n if (this.exactBoundingBox) {\n let size: Point;\n /* When `strokeUniform = true`, any changes to the properties require recalculating the `width` and `height` because\n the stroke projections are affected.\n When `strokeUniform = false`, we don't need to recalculate for scale transformations, as the effect of scale on\n projections follows a linear function (e.g. scaleX of 2 just multiply width by 2)*/\n if (\n Object.keys(options).some(\n (key) =>\n this.strokeUniform ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof TProjectStrokeOnPointsOptions,\n ),\n )\n ) {\n const { width, height } = this._calcDimensions(options);\n size = new Point(options.width ?? width, options.height ?? height);\n } else {\n size = new Point(\n options.width ?? this.width,\n options.height ?? this.height,\n );\n }\n return size.multiply(\n new Point(options.scaleX || this.scaleX, options.scaleY || this.scaleY),\n );\n } else {\n return super._getTransformedDimensions(options);\n }\n }\n\n /**\n * Recalculates dimensions when changing skew and scale\n * @private\n */\n _set(key: string, value: any) {\n const changed = this.initialized && this[key as keyof this] !== value;\n const output = super._set(key, value);\n if (\n this.exactBoundingBox &&\n changed &&\n (((key === SCALE_X || key === SCALE_Y) &&\n this.strokeUniform &&\n (this.constructor as typeof Polyline).layoutProperties.includes(\n 'strokeUniform',\n )) ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof Polyline,\n ))\n ) {\n this.setDimensions();\n }\n return output;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n points: this.points.map(({ x, y }) => ({ x, y })),\n };\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const diffX = this.pathOffset.x,\n diffY = this.pathOffset.y,\n NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n\n const points = this.points\n .map(\n ({ x, y }) =>\n `${toFixed(x - diffX, NUM_FRACTION_DIGITS)},${toFixed(y - diffY, NUM_FRACTION_DIGITS)}`,\n )\n .join(' ');\n\n return [\n `<${\n escapeXml((this.constructor as typeof Polyline).type).toLowerCase() as\n | 'polyline'\n | 'polygon'\n } `,\n 'COMMON_PARTS',\n `points=\"${points}\" />\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return;\n }\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (let i = 0; i < len; i++) {\n const point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n !this.isOpen() && ctx.closePath();\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity(): number {\n return this.points.length;\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Polyline.fromElement})\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES];\n\n /**\n * Returns Polyline instance from an SVG element\n * @param {HTMLElement} element Element to parser\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement | SVGElement,\n options?: Abortable,\n cssRules?: CSSRules,\n ) {\n const points = parsePointsAttribute(element.getAttribute('points')),\n // we omit left and top to instruct the constructor to position the object using the bbox\n\n { left, top, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(points, {\n ...parsedAttributes,\n ...options,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Polyline instance from an object representation\n * @param {Object} object Object to create an instance from\n * @returns {Promise<Polyline>}\n */\n static fromObject<T extends TOptions<SerializedPolylineProps>>(object: T) {\n return this._fromObject<Polyline>(object, {\n extraParam: 'points',\n });\n }\n}\n\nclassRegistry.setClass(Polyline);\nclassRegistry.setSVGClass(Polyline);\n"],"names":["polylineDefaultValues","exactBoundingBox","Polyline","FabricObject","getDefaults","super","ownDefaults","constructor","points","arguments","length","undefined","options","_defineProperty","this","Object","assign","setOptions","left","top","initialized","setBoundingBox","set","LEFT","TOP","isOpen","_projectStrokeOnPoints","projectStrokeOnPoints","_calcDimensions","scaleX","scaleY","skewX","skewY","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeUniform","strokeWidth","map","projection","projectedPoint","width","height","pathOffset","Point","strokeOffset","strokeDiff","bbox","makeBoundingBoxFromPoints","matrix","calcDimensionsMatrix","bboxNoStroke","p","transformPoint","scale","offsetX","offsetY","Math","tan","degreesToRadians","subtract","multiply","_findCenterFromElement","setDimensions","adjustPosition","setPositionByOrigin","CENTER","isStrokeAccountedForInDimensions","_getNonTransformedDimensions","_getTransformedDimensions","size","keys","some","key","layoutProperties","includes","_options$width","_options$height","_options$width2","_options$height2","_set","value","changed","output","SCALE_X","SCALE_Y","toObject","propertiesToInclude","_ref","x","y","_toSVG","diffX","diffY","NUM_FRACTION_DIGITS","config","_ref2","toFixed","join","escapeXml","type","toLowerCase","_render","ctx","len","isNaN","beginPath","moveTo","i","point","lineTo","closePath","_renderPaintInOrder","complexity","fromElement","element","cssRules","parsePointsAttribute","getAttribute","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","fromObject","object","_fromObject","extraParam","SKEW_X","SKEW_Y","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ import { degreesToRadians } from '../util/misc/radiansDegreesConversion.mjs';
|
|
|
12
12
|
import { toFixed } from '../util/misc/toFixed.mjs';
|
|
13
13
|
import { FabricObject } from './Object/FabricObject.mjs';
|
|
14
14
|
import { SKEW_X, SKEW_Y, LEFT, TOP, CENTER, SCALE_X, SCALE_Y } from '../constants.mjs';
|
|
15
|
+
import { escapeXml } from '../util/lang_string.mjs';
|
|
15
16
|
import { cacheProperties } from './Object/defaultValues.mjs';
|
|
16
17
|
|
|
17
18
|
const polylineDefaultValues = {
|
|
@@ -252,14 +253,17 @@ class Polyline extends FabricObject {
|
|
|
252
253
|
* of the instance
|
|
253
254
|
*/
|
|
254
255
|
_toSVG() {
|
|
255
|
-
const
|
|
256
|
-
diffX = this.pathOffset.x,
|
|
256
|
+
const diffX = this.pathOffset.x,
|
|
257
257
|
diffY = this.pathOffset.y,
|
|
258
258
|
NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
259
|
+
const points = this.points.map(_ref2 => {
|
|
260
|
+
let {
|
|
261
|
+
x,
|
|
262
|
+
y
|
|
263
|
+
} = _ref2;
|
|
264
|
+
return `${toFixed(x - diffX, NUM_FRACTION_DIGITS)},${toFixed(y - diffY, NUM_FRACTION_DIGITS)}`;
|
|
265
|
+
}).join(' ');
|
|
266
|
+
return [`<${escapeXml(this.constructor.type).toLowerCase()} `, 'COMMON_PARTS', `points="${points}" />\n`];
|
|
263
267
|
}
|
|
264
268
|
|
|
265
269
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Polyline.mjs","sources":["../../../src/shapes/Polyline.ts"],"sourcesContent":["import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { parsePointsAttribute } from '../parser/parsePointsAttribute';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { calcDimensionsMatrix, transformPoint } from '../util/misc/matrix';\nimport { projectStrokeOnPoints } from '../util/misc/projectStroke';\nimport type { TProjectStrokeOnPointsOptions } from '../util/misc/projectStroke/types';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport {\n CENTER,\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const polylineDefaultValues: Partial<TClassProperties<Polyline>> = {\n /**\n * @deprecated transient option soon to be removed in favor of a different design\n */\n exactBoundingBox: false,\n};\n\nexport interface SerializedPolylineProps extends SerializedObjectProps {\n points: XY[];\n}\n\nexport class Polyline<\n Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n SProps extends SerializedPolylineProps = SerializedPolylineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject<Props, SProps, EventSpec> {\n /**\n * Points array\n * @type Array\n */\n declare points: XY[];\n\n /**\n * WARNING: Feature in progress\n * Calculate the exact bounding box taking in account strokeWidth on acute angles\n * this will be turned to true by default on fabric 6.0\n * maybe will be left in as an optimization since calculations may be slow\n * @deprecated transient option soon to be removed in favor of a different design\n * @type Boolean\n * @default false\n */\n declare exactBoundingBox: boolean;\n\n declare private initialized: true | undefined;\n\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polyline';\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Polyline.ownDefaults,\n };\n }\n\n /**\n * A list of properties that if changed trigger a recalculation of dimensions\n * @todo check if you really need to recalculate for all cases\n */\n static layoutProperties: (keyof Polyline)[] = [\n SKEW_X,\n SKEW_Y,\n 'strokeLineCap',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'strokeWidth',\n 'strokeUniform',\n 'points',\n ];\n\n declare pathOffset: Point;\n\n declare strokeOffset: Point;\n\n static cacheProperties = [...cacheProperties, 'points'];\n\n strokeDiff: Point;\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {Polyline} thisArg\n * @example\n * var poly = new Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n constructor(points: XY[] = [], options: Props = {} as Props) {\n super();\n Object.assign(this, Polyline.ownDefaults);\n this.setOptions(options);\n this.points = points;\n const { left, top } = options;\n this.initialized = true;\n this.setBoundingBox(true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n protected isOpen() {\n return true;\n }\n\n private _projectStrokeOnPoints(options: TProjectStrokeOnPointsOptions) {\n return projectStrokeOnPoints(this.points, options, this.isOpen());\n }\n\n /**\n * Calculate the polygon bounding box\n * @private\n */\n _calcDimensions(options?: Partial<TProjectStrokeOnPointsOptions>) {\n options = {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n strokeLineCap: this.strokeLineCap,\n strokeLineJoin: this.strokeLineJoin,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeUniform: this.strokeUniform,\n strokeWidth: this.strokeWidth,\n ...(options || {}),\n };\n const points = this.exactBoundingBox\n ? this._projectStrokeOnPoints(\n options as TProjectStrokeOnPointsOptions,\n ).map((projection) => projection.projectedPoint)\n : this.points;\n if (points.length === 0) {\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n pathOffset: new Point(),\n strokeOffset: new Point(),\n strokeDiff: new Point(),\n };\n }\n const bbox = makeBoundingBoxFromPoints(points),\n // Remove scale effect, since it's applied after\n matrix = calcDimensionsMatrix({ ...options, scaleX: 1, scaleY: 1 }),\n bboxNoStroke = makeBoundingBoxFromPoints(\n this.points.map((p) => transformPoint(p, matrix, true)),\n ),\n scale = new Point(this.scaleX, this.scaleY);\n let offsetX = bbox.left + bbox.width / 2,\n offsetY = bbox.top + bbox.height / 2;\n if (this.exactBoundingBox) {\n offsetX = offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));\n // Order of those assignments is important.\n // offsetY relies on offsetX being already changed by the line above\n offsetY = offsetY - offsetX * Math.tan(degreesToRadians(this.skewY));\n }\n\n return {\n ...bbox,\n pathOffset: new Point(offsetX, offsetY),\n strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top)\n .subtract(new Point(bbox.left, bbox.top))\n .multiply(scale),\n strokeDiff: new Point(bbox.width, bbox.height)\n .subtract(new Point(bboxNoStroke.width, bboxNoStroke.height))\n .multiply(scale),\n };\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = makeBoundingBoxFromPoints(this.points);\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { left, top, width, height, pathOffset, strokeOffset, strokeDiff } =\n this._calcDimensions();\n this.set({ width, height, pathOffset, strokeOffset, strokeDiff });\n adjustPosition &&\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER,\n );\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return this.exactBoundingBox;\n }\n\n /**\n * @override stroke is taken in account in size\n */\n _getNonTransformedDimensions() {\n return this.exactBoundingBox\n ? // TODO: fix this\n new Point(this.width, this.height)\n : super._getNonTransformedDimensions();\n }\n\n /**\n * @override stroke and skewing are taken into account when projecting stroke on points,\n * therefore we don't want the default calculation to account for skewing as well.\n * Though it is possible to pass `width` and `height` in `options`, doing so is very strange, use with discretion.\n *\n * @private\n */\n _getTransformedDimensions(options: any = {}) {\n if (this.exactBoundingBox) {\n let size: Point;\n /* When `strokeUniform = true`, any changes to the properties require recalculating the `width` and `height` because\n the stroke projections are affected.\n When `strokeUniform = false`, we don't need to recalculate for scale transformations, as the effect of scale on\n projections follows a linear function (e.g. scaleX of 2 just multiply width by 2)*/\n if (\n Object.keys(options).some(\n (key) =>\n this.strokeUniform ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof TProjectStrokeOnPointsOptions,\n ),\n )\n ) {\n const { width, height } = this._calcDimensions(options);\n size = new Point(options.width ?? width, options.height ?? height);\n } else {\n size = new Point(\n options.width ?? this.width,\n options.height ?? this.height,\n );\n }\n return size.multiply(\n new Point(options.scaleX || this.scaleX, options.scaleY || this.scaleY),\n );\n } else {\n return super._getTransformedDimensions(options);\n }\n }\n\n /**\n * Recalculates dimensions when changing skew and scale\n * @private\n */\n _set(key: string, value: any) {\n const changed = this.initialized && this[key as keyof this] !== value;\n const output = super._set(key, value);\n if (\n this.exactBoundingBox &&\n changed &&\n (((key === SCALE_X || key === SCALE_Y) &&\n this.strokeUniform &&\n (this.constructor as typeof Polyline).layoutProperties.includes(\n 'strokeUniform',\n )) ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof Polyline,\n ))\n ) {\n this.setDimensions();\n }\n return output;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n points: this.points.map(({ x, y }) => ({ x, y })),\n };\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const points = [],\n diffX = this.pathOffset.x,\n diffY = this.pathOffset.y,\n NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n\n for (let i = 0, len = this.points.length; i < len; i++) {\n points.push(\n toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS),\n ',',\n toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS),\n ' ',\n );\n }\n return [\n `<${\n (this.constructor as typeof Polyline).type.toLowerCase() as\n | 'polyline'\n | 'polygon'\n } `,\n 'COMMON_PARTS',\n `points=\"${points.join('')}\" />\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return;\n }\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (let i = 0; i < len; i++) {\n const point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n !this.isOpen() && ctx.closePath();\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity(): number {\n return this.points.length;\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Polyline.fromElement})\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES];\n\n /**\n * Returns Polyline instance from an SVG element\n * @param {HTMLElement} element Element to parser\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement | SVGElement,\n options?: Abortable,\n cssRules?: CSSRules,\n ) {\n const points = parsePointsAttribute(element.getAttribute('points')),\n // we omit left and top to instruct the constructor to position the object using the bbox\n\n { left, top, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(points, {\n ...parsedAttributes,\n ...options,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Polyline instance from an object representation\n * @param {Object} object Object to create an instance from\n * @returns {Promise<Polyline>}\n */\n static fromObject<T extends TOptions<SerializedPolylineProps>>(object: T) {\n return this._fromObject<Polyline>(object, {\n extraParam: 'points',\n });\n }\n}\n\nclassRegistry.setClass(Polyline);\nclassRegistry.setSVGClass(Polyline);\n"],"names":["polylineDefaultValues","exactBoundingBox","Polyline","FabricObject","getDefaults","ownDefaults","constructor","points","arguments","length","undefined","options","_defineProperty","Object","assign","setOptions","left","top","initialized","setBoundingBox","set","LEFT","TOP","isOpen","_projectStrokeOnPoints","projectStrokeOnPoints","_calcDimensions","scaleX","scaleY","skewX","skewY","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeUniform","strokeWidth","map","projection","projectedPoint","width","height","pathOffset","Point","strokeOffset","strokeDiff","bbox","makeBoundingBoxFromPoints","matrix","calcDimensionsMatrix","bboxNoStroke","p","transformPoint","scale","offsetX","offsetY","Math","tan","degreesToRadians","subtract","multiply","_findCenterFromElement","setDimensions","adjustPosition","setPositionByOrigin","CENTER","isStrokeAccountedForInDimensions","_getNonTransformedDimensions","_getTransformedDimensions","size","keys","some","key","layoutProperties","includes","_options$width","_options$height","_options$width2","_options$height2","_set","value","changed","output","SCALE_X","SCALE_Y","toObject","propertiesToInclude","_ref","x","y","_toSVG","diffX","diffY","NUM_FRACTION_DIGITS","config","i","len","push","toFixed","type","toLowerCase","join","_render","ctx","isNaN","beginPath","moveTo","point","lineTo","closePath","_renderPaintInOrder","complexity","fromElement","element","cssRules","parsePointsAttribute","getAttribute","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","fromObject","object","_fromObject","extraParam","SKEW_X","SKEW_Y","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Polyline.mjs","sources":["../../../src/shapes/Polyline.ts"],"sourcesContent":["import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { parsePointsAttribute } from '../parser/parsePointsAttribute';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { calcDimensionsMatrix, transformPoint } from '../util/misc/matrix';\nimport { projectStrokeOnPoints } from '../util/misc/projectStroke';\nimport type { TProjectStrokeOnPointsOptions } from '../util/misc/projectStroke/types';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport {\n CENTER,\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\nimport { escapeXml } from '../util/lang_string';\n\nexport const polylineDefaultValues: Partial<TClassProperties<Polyline>> = {\n /**\n * @deprecated transient option soon to be removed in favor of a different design\n */\n exactBoundingBox: false,\n};\n\nexport interface SerializedPolylineProps extends SerializedObjectProps {\n points: XY[];\n}\n\nexport class Polyline<\n Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n SProps extends SerializedPolylineProps = SerializedPolylineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject<Props, SProps, EventSpec> {\n /**\n * Points array\n * @type Array\n */\n declare points: XY[];\n\n /**\n * WARNING: Feature in progress\n * Calculate the exact bounding box taking in account strokeWidth on acute angles\n * this will be turned to true by default on fabric 6.0\n * maybe will be left in as an optimization since calculations may be slow\n * @deprecated transient option soon to be removed in favor of a different design\n * @type Boolean\n * @default false\n */\n declare exactBoundingBox: boolean;\n\n declare private initialized: true | undefined;\n\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polyline';\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Polyline.ownDefaults,\n };\n }\n\n /**\n * A list of properties that if changed trigger a recalculation of dimensions\n * @todo check if you really need to recalculate for all cases\n */\n static layoutProperties: (keyof Polyline)[] = [\n SKEW_X,\n SKEW_Y,\n 'strokeLineCap',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'strokeWidth',\n 'strokeUniform',\n 'points',\n ];\n\n declare pathOffset: Point;\n\n declare strokeOffset: Point;\n\n static cacheProperties = [...cacheProperties, 'points'];\n\n strokeDiff: Point;\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {Polyline} thisArg\n * @example\n * var poly = new Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n constructor(points: XY[] = [], options: Props = {} as Props) {\n super();\n Object.assign(this, Polyline.ownDefaults);\n this.setOptions(options);\n this.points = points;\n const { left, top } = options;\n this.initialized = true;\n this.setBoundingBox(true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n protected isOpen() {\n return true;\n }\n\n private _projectStrokeOnPoints(options: TProjectStrokeOnPointsOptions) {\n return projectStrokeOnPoints(this.points, options, this.isOpen());\n }\n\n /**\n * Calculate the polygon bounding box\n * @private\n */\n _calcDimensions(options?: Partial<TProjectStrokeOnPointsOptions>) {\n options = {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n strokeLineCap: this.strokeLineCap,\n strokeLineJoin: this.strokeLineJoin,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeUniform: this.strokeUniform,\n strokeWidth: this.strokeWidth,\n ...(options || {}),\n };\n const points = this.exactBoundingBox\n ? this._projectStrokeOnPoints(\n options as TProjectStrokeOnPointsOptions,\n ).map((projection) => projection.projectedPoint)\n : this.points;\n if (points.length === 0) {\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n pathOffset: new Point(),\n strokeOffset: new Point(),\n strokeDiff: new Point(),\n };\n }\n const bbox = makeBoundingBoxFromPoints(points),\n // Remove scale effect, since it's applied after\n matrix = calcDimensionsMatrix({ ...options, scaleX: 1, scaleY: 1 }),\n bboxNoStroke = makeBoundingBoxFromPoints(\n this.points.map((p) => transformPoint(p, matrix, true)),\n ),\n scale = new Point(this.scaleX, this.scaleY);\n let offsetX = bbox.left + bbox.width / 2,\n offsetY = bbox.top + bbox.height / 2;\n if (this.exactBoundingBox) {\n offsetX = offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));\n // Order of those assignments is important.\n // offsetY relies on offsetX being already changed by the line above\n offsetY = offsetY - offsetX * Math.tan(degreesToRadians(this.skewY));\n }\n\n return {\n ...bbox,\n pathOffset: new Point(offsetX, offsetY),\n strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top)\n .subtract(new Point(bbox.left, bbox.top))\n .multiply(scale),\n strokeDiff: new Point(bbox.width, bbox.height)\n .subtract(new Point(bboxNoStroke.width, bboxNoStroke.height))\n .multiply(scale),\n };\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = makeBoundingBoxFromPoints(this.points);\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { left, top, width, height, pathOffset, strokeOffset, strokeDiff } =\n this._calcDimensions();\n this.set({ width, height, pathOffset, strokeOffset, strokeDiff });\n adjustPosition &&\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER,\n );\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return this.exactBoundingBox;\n }\n\n /**\n * @override stroke is taken in account in size\n */\n _getNonTransformedDimensions() {\n return this.exactBoundingBox\n ? // TODO: fix this\n new Point(this.width, this.height)\n : super._getNonTransformedDimensions();\n }\n\n /**\n * @override stroke and skewing are taken into account when projecting stroke on points,\n * therefore we don't want the default calculation to account for skewing as well.\n * Though it is possible to pass `width` and `height` in `options`, doing so is very strange, use with discretion.\n *\n * @private\n */\n _getTransformedDimensions(options: any = {}) {\n if (this.exactBoundingBox) {\n let size: Point;\n /* When `strokeUniform = true`, any changes to the properties require recalculating the `width` and `height` because\n the stroke projections are affected.\n When `strokeUniform = false`, we don't need to recalculate for scale transformations, as the effect of scale on\n projections follows a linear function (e.g. scaleX of 2 just multiply width by 2)*/\n if (\n Object.keys(options).some(\n (key) =>\n this.strokeUniform ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof TProjectStrokeOnPointsOptions,\n ),\n )\n ) {\n const { width, height } = this._calcDimensions(options);\n size = new Point(options.width ?? width, options.height ?? height);\n } else {\n size = new Point(\n options.width ?? this.width,\n options.height ?? this.height,\n );\n }\n return size.multiply(\n new Point(options.scaleX || this.scaleX, options.scaleY || this.scaleY),\n );\n } else {\n return super._getTransformedDimensions(options);\n }\n }\n\n /**\n * Recalculates dimensions when changing skew and scale\n * @private\n */\n _set(key: string, value: any) {\n const changed = this.initialized && this[key as keyof this] !== value;\n const output = super._set(key, value);\n if (\n this.exactBoundingBox &&\n changed &&\n (((key === SCALE_X || key === SCALE_Y) &&\n this.strokeUniform &&\n (this.constructor as typeof Polyline).layoutProperties.includes(\n 'strokeUniform',\n )) ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof Polyline,\n ))\n ) {\n this.setDimensions();\n }\n return output;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n points: this.points.map(({ x, y }) => ({ x, y })),\n };\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const diffX = this.pathOffset.x,\n diffY = this.pathOffset.y,\n NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n\n const points = this.points\n .map(\n ({ x, y }) =>\n `${toFixed(x - diffX, NUM_FRACTION_DIGITS)},${toFixed(y - diffY, NUM_FRACTION_DIGITS)}`,\n )\n .join(' ');\n\n return [\n `<${\n escapeXml((this.constructor as typeof Polyline).type).toLowerCase() as\n | 'polyline'\n | 'polygon'\n } `,\n 'COMMON_PARTS',\n `points=\"${points}\" />\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return;\n }\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (let i = 0; i < len; i++) {\n const point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n !this.isOpen() && ctx.closePath();\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity(): number {\n return this.points.length;\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Polyline.fromElement})\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES];\n\n /**\n * Returns Polyline instance from an SVG element\n * @param {HTMLElement} element Element to parser\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement | SVGElement,\n options?: Abortable,\n cssRules?: CSSRules,\n ) {\n const points = parsePointsAttribute(element.getAttribute('points')),\n // we omit left and top to instruct the constructor to position the object using the bbox\n\n { left, top, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(points, {\n ...parsedAttributes,\n ...options,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Polyline instance from an object representation\n * @param {Object} object Object to create an instance from\n * @returns {Promise<Polyline>}\n */\n static fromObject<T extends TOptions<SerializedPolylineProps>>(object: T) {\n return this._fromObject<Polyline>(object, {\n extraParam: 'points',\n });\n }\n}\n\nclassRegistry.setClass(Polyline);\nclassRegistry.setSVGClass(Polyline);\n"],"names":["polylineDefaultValues","exactBoundingBox","Polyline","FabricObject","getDefaults","ownDefaults","constructor","points","arguments","length","undefined","options","_defineProperty","Object","assign","setOptions","left","top","initialized","setBoundingBox","set","LEFT","TOP","isOpen","_projectStrokeOnPoints","projectStrokeOnPoints","_calcDimensions","scaleX","scaleY","skewX","skewY","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeUniform","strokeWidth","map","projection","projectedPoint","width","height","pathOffset","Point","strokeOffset","strokeDiff","bbox","makeBoundingBoxFromPoints","matrix","calcDimensionsMatrix","bboxNoStroke","p","transformPoint","scale","offsetX","offsetY","Math","tan","degreesToRadians","subtract","multiply","_findCenterFromElement","setDimensions","adjustPosition","setPositionByOrigin","CENTER","isStrokeAccountedForInDimensions","_getNonTransformedDimensions","_getTransformedDimensions","size","keys","some","key","layoutProperties","includes","_options$width","_options$height","_options$width2","_options$height2","_set","value","changed","output","SCALE_X","SCALE_Y","toObject","propertiesToInclude","_ref","x","y","_toSVG","diffX","diffY","NUM_FRACTION_DIGITS","config","_ref2","toFixed","join","escapeXml","type","toLowerCase","_render","ctx","len","isNaN","beginPath","moveTo","i","point","lineTo","closePath","_renderPaintInOrder","complexity","fromElement","element","cssRules","parsePointsAttribute","getAttribute","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","fromObject","object","_fromObject","extraParam","SKEW_X","SKEW_Y","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Rect.d.ts","sourceRoot":"","sources":["../../../src/shapes/Rect.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAmB,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Rect.d.ts","sourceRoot":"","sources":["../../../src/shapes/Rect.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAmB,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAG7D,CAAC;AAEF,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,mBACf,SAAQ,qBAAqB,EAAE,eAAe;CAAG;AAEnD,MAAM,WAAW,SAAU,SAAQ,iBAAiB,EAAE,eAAe;CAAG;AAIxE,qBAAa,IAAI,CACf,KAAK,SAAS,QAAQ,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,EACtD,MAAM,SAAS,mBAAmB,GAAG,mBAAmB,EACxD,SAAS,SAAS,YAAY,GAAG,YAAY,CAE7C,SAAQ,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAC7C,YAAW,SAAS;IAEpB;;;OAGG;IACK,EAAE,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACK,EAAE,EAAE,MAAM,CAAC;IAEnB,MAAM,CAAC,IAAI,SAAU;IAErB,MAAM,CAAC,eAAe,WAAuC;IAE7D,MAAM,CAAC,WAAW,yFAAqB;IAEvC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAOzC;;;OAGG;gBACS,OAAO,CAAC,EAAE,KAAK;IAM3B;;;OAGG;IACH,SAAS;IAST;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,wBAAwB;IAsDrC;;;;OAIG;IACH,QAAQ,CACN,CAAC,SAAS,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,MAAM,CAAC,EAC5D,CAAC,SAAS,MAAM,CAAC,GAAG,KAAK,EACzB,mBAAmB,GAAE,CAAC,EAAO,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM;IAIrD;;;;OAIG;IACH,MAAM;IAWN;;;OAGG;IACH,MAAM,CAAC,eAAe,WAQpB;IAIF;;;;OAIG;WACU,WAAW,CACtB,OAAO,EAAE,WAAW,GAAG,UAAU,EACjC,OAAO,CAAC,EAAE,SAAS,EACnB,QAAQ,CAAC,EAAE,QAAQ;;;;;;;;CAuBtB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{kRect as e}from"../constants.min.mjs";import{SHARED_ATTRIBUTES as r}from"../parser/attributes.min.mjs";import{parseAttributes as i}from"../parser/parseAttributes.min.mjs";import{classRegistry as s}from"../ClassRegistry.min.mjs";import{FabricObject as o}from"./Object/FabricObject.min.mjs";import{
|
|
1
|
+
import{defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{kRect as e}from"../constants.min.mjs";import{SHARED_ATTRIBUTES as r}from"../parser/attributes.min.mjs";import{parseAttributes as i}from"../parser/parseAttributes.min.mjs";import{classRegistry as s}from"../ClassRegistry.min.mjs";import{FabricObject as o}from"./Object/FabricObject.min.mjs";import{escapeXml as n}from"../util/lang_string.min.mjs";import{cacheProperties as h}from"./Object/defaultValues.min.mjs";const m={rx:0,ry:0},a=["rx","ry"];class l extends o{static getDefaults(){return{...super.getDefaults(),...l.ownDefaults}}constructor(t){super(),Object.assign(this,l.ownDefaults),this.setOptions(t),this._initRxRy()}_initRxRy(){const{rx:t,ry:e}=this;t&&!e?this.ry=t:e&&!t&&(this.rx=e)}_render(t){const{width:r,height:i}=this,s=-r/2,o=-i/2,n=this.rx?Math.min(this.rx,r/2):0,h=this.ry?Math.min(this.ry,i/2):0,m=0!==n||0!==h;t.beginPath(),t.moveTo(s+n,o),t.lineTo(s+r-n,o),m&&t.bezierCurveTo(s+r-e*n,o,s+r,o+e*h,s+r,o+h),t.lineTo(s+r,o+i-h),m&&t.bezierCurveTo(s+r,o+i-e*h,s+r-e*n,o+i,s+r-n,o+i),t.lineTo(s+n,o+i),m&&t.bezierCurveTo(s+e*n,o+i,s,o+i-e*h,s,o+i-h),t.lineTo(s,o+h),m&&t.bezierCurveTo(s,o+e*h,s+e*n,o,s+n,o),t.closePath(),this._renderPaintInOrder(t)}toObject(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return super.toObject([...a,...t])}_toSVG(){const{width:t,height:e,rx:r,ry:i}=this;return["<rect ","COMMON_PARTS",`x="${-t/2}" y="${-e/2}" rx="${n(r)}" ry="${n(i)}" width="${n(t)}" height="${n(e)}" />\n`]}static async fromElement(t,e,r){const{left:s=0,top:o=0,width:n=0,height:h=0,visible:m=!0,...a}=i(t,this.ATTRIBUTE_NAMES,r);return new this({...e,...a,left:s,top:o,width:n,height:h,visible:Boolean(m&&n&&h)})}}t(l,"type","Rect"),t(l,"cacheProperties",[...h,...a]),t(l,"ownDefaults",m),t(l,"ATTRIBUTE_NAMES",[...r,"x","y","rx","ry","width","height"]),s.setClass(l),s.setSVGClass(l);export{l as Rect,m as rectDefaultValues};
|
|
2
2
|
//# sourceMappingURL=Rect.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Rect.min.mjs","sources":["../../../src/shapes/Rect.ts"],"sourcesContent":["import { kRect } from '../constants';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const rectDefaultValues: Partial<TClassProperties<Rect>> = {\n rx: 0,\n ry: 0,\n};\n\ninterface UniqueRectProps {\n rx: number;\n ry: number;\n}\n\nexport interface SerializedRectProps\n extends SerializedObjectProps
|
|
1
|
+
{"version":3,"file":"Rect.min.mjs","sources":["../../../src/shapes/Rect.ts"],"sourcesContent":["import { kRect } from '../constants';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type { CSSRules } from '../parser/typedefs';\nimport { escapeXml } from '../util/lang_string';\n\nexport const rectDefaultValues: Partial<TClassProperties<Rect>> = {\n rx: 0,\n ry: 0,\n};\n\ninterface UniqueRectProps {\n rx: number;\n ry: number;\n}\n\nexport interface SerializedRectProps\n extends SerializedObjectProps, UniqueRectProps {}\n\nexport interface RectProps extends FabricObjectProps, UniqueRectProps {}\n\nconst RECT_PROPS = ['rx', 'ry'] as const;\n\nexport class Rect<\n Props extends TOptions<RectProps> = Partial<RectProps>,\n SProps extends SerializedRectProps = SerializedRectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n>\n extends FabricObject<Props, SProps, EventSpec>\n implements RectProps\n{\n /**\n * Horizontal border radius\n * @type Number\n */\n declare rx: number;\n\n /**\n * Vertical border radius\n * @type Number\n */\n declare ry: number;\n\n static type = 'Rect';\n\n static cacheProperties = [...cacheProperties, ...RECT_PROPS];\n\n static ownDefaults = rectDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Rect.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Rect.ownDefaults);\n this.setOptions(options);\n this._initRxRy();\n }\n /**\n * Initializes rx/ry attributes\n * @private\n */\n _initRxRy() {\n const { rx, ry } = this;\n if (rx && !ry) {\n this.ry = rx;\n } else if (ry && !rx) {\n this.rx = ry;\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const { width: w, height: h } = this;\n const x = -w / 2;\n const y = -h / 2;\n const rx = this.rx ? Math.min(this.rx, w / 2) : 0;\n const ry = this.ry ? Math.min(this.ry, h / 2) : 0;\n const isRounded = rx !== 0 || ry !== 0;\n\n ctx.beginPath();\n\n ctx.moveTo(x + rx, y);\n\n ctx.lineTo(x + w - rx, y);\n isRounded &&\n ctx.bezierCurveTo(\n x + w - kRect * rx,\n y,\n x + w,\n y + kRect * ry,\n x + w,\n y + ry,\n );\n\n ctx.lineTo(x + w, y + h - ry);\n isRounded &&\n ctx.bezierCurveTo(\n x + w,\n y + h - kRect * ry,\n x + w - kRect * rx,\n y + h,\n x + w - rx,\n y + h,\n );\n\n ctx.lineTo(x + rx, y + h);\n isRounded &&\n ctx.bezierCurveTo(\n x + kRect * rx,\n y + h,\n x,\n y + h - kRect * ry,\n x,\n y + h - ry,\n );\n\n ctx.lineTo(x, y + ry);\n isRounded &&\n ctx.bezierCurveTo(x, y + kRect * ry, x + kRect * rx, y, x + rx, y);\n\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return super.toObject([...RECT_PROPS, ...propertiesToInclude]);\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const { width, height, rx, ry } = this;\n return [\n '<rect ',\n 'COMMON_PARTS',\n `x=\"${-width / 2}\" y=\"${\n -height / 2\n }\" rx=\"${escapeXml(rx)}\" ry=\"${escapeXml(ry)}\" width=\"${escapeXml(width)}\" height=\"${escapeXml(height)}\" />\\n`,\n ];\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `Rect.fromElement`)\n * @see: http://www.w3.org/TR/SVG/shapes.html#RectElement\n */\n static ATTRIBUTE_NAMES = [\n ...SHARED_ATTRIBUTES,\n 'x',\n 'y',\n 'rx',\n 'ry',\n 'width',\n 'height',\n ];\n\n /* _FROM_SVG_START_ */\n\n /**\n * Returns {@link Rect} instance from an SVG element\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement | SVGElement,\n options?: Abortable,\n cssRules?: CSSRules,\n ) {\n const {\n left = 0,\n top = 0,\n width = 0,\n height = 0,\n visible = true,\n ...restOfparsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n\n return new this({\n ...options,\n ...restOfparsedAttributes,\n left,\n top,\n width,\n height,\n visible: Boolean(visible && width && height),\n });\n }\n\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Rect);\nclassRegistry.setSVGClass(Rect);\n"],"names":["rectDefaultValues","rx","ry","RECT_PROPS","Rect","FabricObject","getDefaults","super","ownDefaults","constructor","options","Object","assign","this","setOptions","_initRxRy","_render","ctx","width","w","height","h","x","y","Math","min","isRounded","beginPath","moveTo","lineTo","bezierCurveTo","kRect","closePath","_renderPaintInOrder","toObject","propertiesToInclude","arguments","length","undefined","_toSVG","escapeXml","fromElement","element","cssRules","left","top","visible","restOfparsedAttributes","parseAttributes","ATTRIBUTE_NAMES","Boolean","_defineProperty","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}
|
package/dist/src/shapes/Rect.mjs
CHANGED
|
@@ -4,6 +4,7 @@ import { SHARED_ATTRIBUTES } from '../parser/attributes.mjs';
|
|
|
4
4
|
import { parseAttributes } from '../parser/parseAttributes.mjs';
|
|
5
5
|
import { classRegistry } from '../ClassRegistry.mjs';
|
|
6
6
|
import { FabricObject } from './Object/FabricObject.mjs';
|
|
7
|
+
import { escapeXml } from '../util/lang_string.mjs';
|
|
7
8
|
import { cacheProperties } from './Object/defaultValues.mjs';
|
|
8
9
|
|
|
9
10
|
const rectDefaultValues = {
|
|
@@ -95,7 +96,7 @@ class Rect extends FabricObject {
|
|
|
95
96
|
rx,
|
|
96
97
|
ry
|
|
97
98
|
} = this;
|
|
98
|
-
return ['<rect ', 'COMMON_PARTS', `x="${-width / 2}" y="${-height / 2}" rx="${rx}" ry="${ry}" width="${width}" height="${height}" />\n`];
|
|
99
|
+
return ['<rect ', 'COMMON_PARTS', `x="${-width / 2}" y="${-height / 2}" rx="${escapeXml(rx)}" ry="${escapeXml(ry)}" width="${escapeXml(width)}" height="${escapeXml(height)}" />\n`];
|
|
99
100
|
}
|
|
100
101
|
|
|
101
102
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Rect.mjs","sources":["../../../src/shapes/Rect.ts"],"sourcesContent":["import { kRect } from '../constants';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const rectDefaultValues: Partial<TClassProperties<Rect>> = {\n rx: 0,\n ry: 0,\n};\n\ninterface UniqueRectProps {\n rx: number;\n ry: number;\n}\n\nexport interface SerializedRectProps\n extends SerializedObjectProps,\n UniqueRectProps {}\n\nexport interface RectProps extends FabricObjectProps, UniqueRectProps {}\n\nconst RECT_PROPS = ['rx', 'ry'] as const;\n\nexport class Rect<\n Props extends TOptions<RectProps> = Partial<RectProps>,\n SProps extends SerializedRectProps = SerializedRectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends FabricObject<Props, SProps, EventSpec>\n implements RectProps\n{\n /**\n * Horizontal border radius\n * @type Number\n */\n declare rx: number;\n\n /**\n * Vertical border radius\n * @type Number\n */\n declare ry: number;\n\n static type = 'Rect';\n\n static cacheProperties = [...cacheProperties, ...RECT_PROPS];\n\n static ownDefaults = rectDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Rect.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Rect.ownDefaults);\n this.setOptions(options);\n this._initRxRy();\n }\n /**\n * Initializes rx/ry attributes\n * @private\n */\n _initRxRy() {\n const { rx, ry } = this;\n if (rx && !ry) {\n this.ry = rx;\n } else if (ry && !rx) {\n this.rx = ry;\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const { width: w, height: h } = this;\n const x = -w / 2;\n const y = -h / 2;\n const rx = this.rx ? Math.min(this.rx, w / 2) : 0;\n const ry = this.ry ? Math.min(this.ry, h / 2) : 0;\n const isRounded = rx !== 0 || ry !== 0;\n\n ctx.beginPath();\n\n ctx.moveTo(x + rx, y);\n\n ctx.lineTo(x + w - rx, y);\n isRounded &&\n ctx.bezierCurveTo(\n x + w - kRect * rx,\n y,\n x + w,\n y + kRect * ry,\n x + w,\n y + ry,\n );\n\n ctx.lineTo(x + w, y + h - ry);\n isRounded &&\n ctx.bezierCurveTo(\n x + w,\n y + h - kRect * ry,\n x + w - kRect * rx,\n y + h,\n x + w - rx,\n y + h,\n );\n\n ctx.lineTo(x + rx, y + h);\n isRounded &&\n ctx.bezierCurveTo(\n x + kRect * rx,\n y + h,\n x,\n y + h - kRect * ry,\n x,\n y + h - ry,\n );\n\n ctx.lineTo(x, y + ry);\n isRounded &&\n ctx.bezierCurveTo(x, y + kRect * ry, x + kRect * rx, y, x + rx, y);\n\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return super.toObject([...RECT_PROPS, ...propertiesToInclude]);\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const { width, height, rx, ry } = this;\n return [\n '<rect ',\n 'COMMON_PARTS',\n `x=\"${-width / 2}\" y=\"${\n -height / 2\n }\" rx=\"${rx}\" ry=\"${ry}\" width=\"${width}\" height=\"${height}\" />\\n`,\n ];\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `Rect.fromElement`)\n * @see: http://www.w3.org/TR/SVG/shapes.html#RectElement\n */\n static ATTRIBUTE_NAMES = [\n ...SHARED_ATTRIBUTES,\n 'x',\n 'y',\n 'rx',\n 'ry',\n 'width',\n 'height',\n ];\n\n /* _FROM_SVG_START_ */\n\n /**\n * Returns {@link Rect} instance from an SVG element\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement | SVGElement,\n options?: Abortable,\n cssRules?: CSSRules,\n ) {\n const {\n left = 0,\n top = 0,\n width = 0,\n height = 0,\n visible = true,\n ...restOfparsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n\n return new this({\n ...options,\n ...restOfparsedAttributes,\n left,\n top,\n width,\n height,\n visible: Boolean(visible && width && height),\n });\n }\n\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Rect);\nclassRegistry.setSVGClass(Rect);\n"],"names":["rectDefaultValues","rx","ry","RECT_PROPS","Rect","FabricObject","getDefaults","ownDefaults","constructor","options","Object","assign","setOptions","_initRxRy","_render","ctx","width","w","height","h","x","y","Math","min","isRounded","beginPath","moveTo","lineTo","bezierCurveTo","kRect","closePath","_renderPaintInOrder","toObject","propertiesToInclude","arguments","length","undefined","_toSVG","fromElement","element","cssRules","left","top","visible","restOfparsedAttributes","parseAttributes","ATTRIBUTE_NAMES","Boolean","_defineProperty","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Rect.mjs","sources":["../../../src/shapes/Rect.ts"],"sourcesContent":["import { kRect } from '../constants';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport type { CSSRules } from '../parser/typedefs';\nimport { escapeXml } from '../util/lang_string';\n\nexport const rectDefaultValues: Partial<TClassProperties<Rect>> = {\n rx: 0,\n ry: 0,\n};\n\ninterface UniqueRectProps {\n rx: number;\n ry: number;\n}\n\nexport interface SerializedRectProps\n extends SerializedObjectProps, UniqueRectProps {}\n\nexport interface RectProps extends FabricObjectProps, UniqueRectProps {}\n\nconst RECT_PROPS = ['rx', 'ry'] as const;\n\nexport class Rect<\n Props extends TOptions<RectProps> = Partial<RectProps>,\n SProps extends SerializedRectProps = SerializedRectProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n>\n extends FabricObject<Props, SProps, EventSpec>\n implements RectProps\n{\n /**\n * Horizontal border radius\n * @type Number\n */\n declare rx: number;\n\n /**\n * Vertical border radius\n * @type Number\n */\n declare ry: number;\n\n static type = 'Rect';\n\n static cacheProperties = [...cacheProperties, ...RECT_PROPS];\n\n static ownDefaults = rectDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Rect.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Rect.ownDefaults);\n this.setOptions(options);\n this._initRxRy();\n }\n /**\n * Initializes rx/ry attributes\n * @private\n */\n _initRxRy() {\n const { rx, ry } = this;\n if (rx && !ry) {\n this.ry = rx;\n } else if (ry && !rx) {\n this.rx = ry;\n }\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const { width: w, height: h } = this;\n const x = -w / 2;\n const y = -h / 2;\n const rx = this.rx ? Math.min(this.rx, w / 2) : 0;\n const ry = this.ry ? Math.min(this.ry, h / 2) : 0;\n const isRounded = rx !== 0 || ry !== 0;\n\n ctx.beginPath();\n\n ctx.moveTo(x + rx, y);\n\n ctx.lineTo(x + w - rx, y);\n isRounded &&\n ctx.bezierCurveTo(\n x + w - kRect * rx,\n y,\n x + w,\n y + kRect * ry,\n x + w,\n y + ry,\n );\n\n ctx.lineTo(x + w, y + h - ry);\n isRounded &&\n ctx.bezierCurveTo(\n x + w,\n y + h - kRect * ry,\n x + w - kRect * rx,\n y + h,\n x + w - rx,\n y + h,\n );\n\n ctx.lineTo(x + rx, y + h);\n isRounded &&\n ctx.bezierCurveTo(\n x + kRect * rx,\n y + h,\n x,\n y + h - kRect * ry,\n x,\n y + h - ry,\n );\n\n ctx.lineTo(x, y + ry);\n isRounded &&\n ctx.bezierCurveTo(x, y + kRect * ry, x + kRect * rx, y, x + rx, y);\n\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return super.toObject([...RECT_PROPS, ...propertiesToInclude]);\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const { width, height, rx, ry } = this;\n return [\n '<rect ',\n 'COMMON_PARTS',\n `x=\"${-width / 2}\" y=\"${\n -height / 2\n }\" rx=\"${escapeXml(rx)}\" ry=\"${escapeXml(ry)}\" width=\"${escapeXml(width)}\" height=\"${escapeXml(height)}\" />\\n`,\n ];\n }\n\n /**\n * List of attribute names to account for when parsing SVG element (used by `Rect.fromElement`)\n * @see: http://www.w3.org/TR/SVG/shapes.html#RectElement\n */\n static ATTRIBUTE_NAMES = [\n ...SHARED_ATTRIBUTES,\n 'x',\n 'y',\n 'rx',\n 'ry',\n 'width',\n 'height',\n ];\n\n /* _FROM_SVG_START_ */\n\n /**\n * Returns {@link Rect} instance from an SVG element\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement | SVGElement,\n options?: Abortable,\n cssRules?: CSSRules,\n ) {\n const {\n left = 0,\n top = 0,\n width = 0,\n height = 0,\n visible = true,\n ...restOfparsedAttributes\n } = parseAttributes(element, this.ATTRIBUTE_NAMES, cssRules);\n\n return new this({\n ...options,\n ...restOfparsedAttributes,\n left,\n top,\n width,\n height,\n visible: Boolean(visible && width && height),\n });\n }\n\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Rect);\nclassRegistry.setSVGClass(Rect);\n"],"names":["rectDefaultValues","rx","ry","RECT_PROPS","Rect","FabricObject","getDefaults","ownDefaults","constructor","options","Object","assign","setOptions","_initRxRy","_render","ctx","width","w","height","h","x","y","Math","min","isRounded","beginPath","moveTo","lineTo","bezierCurveTo","kRect","closePath","_renderPaintInOrder","toObject","propertiesToInclude","arguments","length","undefined","_toSVG","escapeXml","fromElement","element","cssRules","left","top","visible","restOfparsedAttributes","parseAttributes","ATTRIBUTE_NAMES","Boolean","_defineProperty","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}
|