fabric 6.0.0 → 6.0.2
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/CHANGELOG.md +12 -0
- package/README.md +8 -18
- package/dist/fabric.d.ts +4 -0
- package/dist/fabric.d.ts.map +1 -1
- package/dist/fabric.min.mjs +1 -1
- package/dist/fabric.mjs +1 -0
- package/dist/fabric.mjs.map +1 -1
- package/dist/index.js +146 -107
- 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 +146 -108
- package/dist/index.mjs.map +1 -1
- package/dist/index.node.cjs +146 -107
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +146 -108
- 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 +2 -1
- package/dist/src/EventTypeDefs.d.ts.map +1 -1
- package/dist/src/LayoutManager/LayoutManager.d.ts.map +1 -1
- package/dist/src/LayoutManager/LayoutManager.min.mjs +1 -1
- package/dist/src/LayoutManager/LayoutManager.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutManager.mjs +13 -8
- package/dist/src/LayoutManager/LayoutManager.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.min.mjs +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.mjs +3 -3
- package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.min.mjs +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.min.mjs.map +1 -1
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.mjs +15 -9
- package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.mjs.map +1 -1
- package/dist/src/Observable.d.ts +8 -0
- package/dist/src/Observable.d.ts.map +1 -1
- package/dist/src/Observable.min.mjs.map +1 -1
- package/dist/src/Observable.mjs +8 -0
- package/dist/src/Observable.mjs.map +1 -1
- 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 +5 -5
- package/dist/src/canvas/SelectableCanvas.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvas.d.ts +1 -1
- package/dist/src/constants.d.ts +16 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.min.mjs +1 -1
- package/dist/src/constants.min.mjs.map +1 -1
- package/dist/src/constants.mjs +17 -1
- package/dist/src/constants.mjs.map +1 -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 +2 -1
- package/dist/src/controls/Control.mjs.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 +2 -2
- package/dist/src/controls/changeWidth.mjs.map +1 -1
- package/dist/src/controls/commonControls.d.ts.map +1 -1
- package/dist/src/controls/commonControls.min.mjs +1 -1
- package/dist/src/controls/commonControls.min.mjs.map +1 -1
- package/dist/src/controls/commonControls.mjs +4 -3
- package/dist/src/controls/commonControls.mjs.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 +3 -3
- package/dist/src/controls/controlRendering.mjs.map +1 -1
- package/dist/src/controls/drag.min.mjs +1 -1
- package/dist/src/controls/drag.min.mjs.map +1 -1
- package/dist/src/controls/drag.mjs +2 -2
- package/dist/src/controls/drag.mjs.map +1 -1
- package/dist/src/controls/polyControl.d.ts.map +1 -1
- package/dist/src/controls/polyControl.min.mjs +1 -1
- package/dist/src/controls/polyControl.min.mjs.map +1 -1
- package/dist/src/controls/polyControl.mjs +2 -1
- package/dist/src/controls/polyControl.mjs.map +1 -1
- package/dist/src/controls/rotate.d.ts.map +1 -1
- package/dist/src/controls/rotate.min.mjs +1 -1
- package/dist/src/controls/rotate.min.mjs.map +1 -1
- package/dist/src/controls/rotate.mjs +2 -1
- package/dist/src/controls/rotate.mjs.map +1 -1
- package/dist/src/controls/scale.d.ts.map +1 -1
- package/dist/src/controls/scale.min.mjs +1 -1
- package/dist/src/controls/scale.min.mjs.map +1 -1
- package/dist/src/controls/scale.mjs +8 -7
- package/dist/src/controls/scale.mjs.map +1 -1
- package/dist/src/controls/scaleSkew.d.ts.map +1 -1
- package/dist/src/controls/scaleSkew.min.mjs +1 -1
- package/dist/src/controls/scaleSkew.min.mjs.map +1 -1
- package/dist/src/controls/scaleSkew.mjs +3 -2
- package/dist/src/controls/scaleSkew.mjs.map +1 -1
- package/dist/src/controls/skew.d.ts.map +1 -1
- package/dist/src/controls/skew.min.mjs +1 -1
- package/dist/src/controls/skew.min.mjs.map +1 -1
- package/dist/src/controls/skew.mjs +7 -7
- package/dist/src/controls/skew.mjs.map +1 -1
- package/dist/src/filters/Blur.min.mjs +1 -1
- package/dist/src/filters/Blur.min.mjs.map +1 -1
- package/dist/src/filters/Blur.mjs +1 -1
- package/dist/src/filters/Blur.mjs.map +1 -1
- package/dist/src/filters/Pixelate.min.mjs +1 -1
- package/dist/src/filters/Pixelate.min.mjs.map +1 -1
- package/dist/src/filters/Pixelate.mjs +1 -1
- package/dist/src/filters/Pixelate.mjs.map +1 -1
- package/dist/src/parser/attributes.d.ts.map +1 -1
- package/dist/src/parser/attributes.min.mjs +1 -1
- package/dist/src/parser/attributes.min.mjs.map +1 -1
- package/dist/src/parser/attributes.mjs +3 -1
- package/dist/src/parser/attributes.mjs.map +1 -1
- package/dist/src/parser/elements_parser.min.mjs +1 -1
- package/dist/src/parser/elements_parser.min.mjs.map +1 -1
- package/dist/src/parser/elements_parser.mjs +3 -3
- package/dist/src/parser/elements_parser.mjs.map +1 -1
- package/dist/src/parser/normalizeValue.min.mjs +1 -1
- package/dist/src/parser/normalizeValue.min.mjs.map +1 -1
- package/dist/src/parser/normalizeValue.mjs +7 -7
- package/dist/src/parser/normalizeValue.mjs.map +1 -1
- package/dist/src/parser/parseTransformAttribute.min.mjs +1 -1
- package/dist/src/parser/parseTransformAttribute.min.mjs.map +1 -1
- package/dist/src/parser/parseTransformAttribute.mjs +5 -5
- package/dist/src/parser/parseTransformAttribute.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 +3 -2
- package/dist/src/shapes/Circle.mjs.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 +3 -3
- package/dist/src/shapes/Ellipse.mjs.map +1 -1
- package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs +1 -1
- package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs.map +1 -1
- package/dist/src/shapes/IText/DraggableTextDelegate.mjs +3 -3
- package/dist/src/shapes/IText/DraggableTextDelegate.mjs.map +1 -1
- package/dist/src/shapes/IText/IText.min.mjs +1 -1
- package/dist/src/shapes/IText/IText.min.mjs.map +1 -1
- package/dist/src/shapes/IText/IText.mjs +3 -3
- package/dist/src/shapes/IText/IText.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextBehavior.min.mjs +1 -1
- package/dist/src/shapes/IText/ITextBehavior.min.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextBehavior.mjs +2 -2
- package/dist/src/shapes/IText/ITextBehavior.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs.map +1 -1
- package/dist/src/shapes/IText/ITextKeyBehavior.mjs +2 -2
- package/dist/src/shapes/IText/ITextKeyBehavior.mjs.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 +2 -2
- package/dist/src/shapes/Image.mjs.map +1 -1
- package/dist/src/shapes/Object/AnimatableObject.d.ts.map +1 -1
- package/dist/src/shapes/Object/AnimatableObject.min.mjs +1 -1
- package/dist/src/shapes/Object/AnimatableObject.min.mjs.map +1 -1
- package/dist/src/shapes/Object/AnimatableObject.mjs +2 -1
- package/dist/src/shapes/Object/AnimatableObject.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 +4 -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 +1 -1
- package/dist/src/shapes/Object/InteractiveObject.min.mjs.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.mjs +2 -1
- package/dist/src/shapes/Object/InteractiveObject.mjs.map +1 -1
- package/dist/src/shapes/Object/Object.d.ts +9 -7
- 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 +14 -12
- 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 +3 -3
- package/dist/src/shapes/Object/ObjectGeometry.mjs.map +1 -1
- package/dist/src/shapes/Object/defaultValues.d.ts.map +1 -1
- package/dist/src/shapes/Object/defaultValues.min.mjs +1 -1
- package/dist/src/shapes/Object/defaultValues.min.mjs.map +1 -1
- package/dist/src/shapes/Object/defaultValues.mjs +4 -4
- package/dist/src/shapes/Object/defaultValues.mjs.map +1 -1
- package/dist/src/shapes/Object/types/ControlProps.d.ts +4 -3
- package/dist/src/shapes/Object/types/ControlProps.d.ts.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 +3 -3
- package/dist/src/shapes/Polyline.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.d.ts +2 -2
- package/dist/src/shapes/Text/Text.d.ts.map +1 -1
- package/dist/src/shapes/Text/Text.min.mjs +1 -1
- package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
- package/dist/src/shapes/Text/Text.mjs +5 -5
- 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 +2 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +1 -1
- package/dist/src/shapes/Text/constants.min.mjs +1 -1
- package/dist/src/shapes/Text/constants.min.mjs.map +1 -1
- package/dist/src/shapes/Text/constants.mjs +2 -2
- package/dist/src/shapes/Text/constants.mjs.map +1 -1
- package/dist/src/util/misc/objectEnlive.d.ts +1 -0
- package/dist/src/util/misc/objectEnlive.d.ts.map +1 -1
- package/dist/src/util/misc/objectEnlive.min.mjs.map +1 -1
- package/dist/src/util/misc/objectEnlive.mjs +1 -0
- package/dist/src/util/misc/objectEnlive.mjs.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 -2
- package/dist/src/util/misc/svgParsing.mjs.map +1 -1
- package/dist/src/util/transform_matrix_removal.min.mjs +1 -1
- package/dist/src/util/transform_matrix_removal.min.mjs.map +1 -1
- package/dist/src/util/transform_matrix_removal.mjs +3 -3
- package/dist/src/util/transform_matrix_removal.mjs.map +1 -1
- package/fabric.ts +4 -0
- package/package.json +1 -1
- package/src/EventTypeDefs.ts +14 -6
- package/src/LayoutManager/LayoutManager.ts +28 -19
- package/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts +2 -2
- package/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts +7 -7
- package/src/Observable.ts +8 -0
- package/src/canvas/SelectableCanvas.ts +25 -11
- package/src/canvas/canvas_gestures.mixin.ts +6 -5
- package/src/constants.ts +17 -0
- package/src/controls/Control.ts +2 -1
- package/src/controls/changeWidth.ts +2 -2
- package/src/controls/commonControls.ts +4 -3
- package/src/controls/controlRendering.ts +3 -3
- package/src/controls/drag.ts +2 -2
- package/src/controls/polyControl.ts +2 -1
- package/src/controls/rotate.ts +2 -1
- package/src/controls/scale.ts +8 -7
- package/src/controls/scaleSkew.ts +3 -2
- package/src/controls/skew.ts +14 -7
- package/src/filters/Blur.ts +1 -1
- package/src/filters/Pixelate.ts +1 -1
- package/src/parser/attributes.ts +4 -2
- package/src/parser/elements_parser.ts +3 -3
- package/src/parser/normalizeValue.ts +7 -7
- package/src/parser/parseTransformAttribute.ts +5 -5
- package/src/shapes/Circle.ts +3 -2
- package/src/shapes/Ellipse.ts +3 -3
- package/src/shapes/IText/DraggableTextDelegate.ts +3 -3
- package/src/shapes/IText/IText.ts +3 -3
- package/src/shapes/IText/ITextBehavior.ts +2 -2
- package/src/shapes/IText/ITextKeyBehavior.ts +2 -2
- package/src/shapes/Image.ts +2 -2
- package/src/shapes/Object/AnimatableObject.ts +2 -1
- package/src/shapes/Object/FabricObjectSVGExportMixin.ts +4 -6
- package/src/shapes/Object/InteractiveObject.ts +2 -1
- package/src/shapes/Object/Object.ts +16 -11
- package/src/shapes/Object/ObjectGeometry.ts +3 -3
- package/src/shapes/Object/defaultValues.ts +17 -8
- package/src/shapes/Object/types/ControlProps.ts +4 -3
- package/src/shapes/Polyline.spec.ts +0 -1
- package/src/shapes/Polyline.ts +12 -4
- package/src/shapes/Text/Text.ts +7 -7
- package/src/shapes/Text/TextSVGExportMixin.ts +3 -2
- package/src/shapes/Text/constants.ts +3 -3
- package/src/util/misc/objectEnlive.ts +1 -0
- package/src/util/misc/svgParsing.ts +2 -2
- package/src/util/transform_matrix_removal.ts +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elements_parser.mjs","sources":["../../../src/parser/elements_parser.ts"],"sourcesContent":["import { Gradient } from '../gradient/Gradient';\nimport { Group } from '../shapes/Group';\nimport { FabricImage } from '../shapes/Image';\nimport { classRegistry } from '../ClassRegistry';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n qrDecompose,\n} from '../util/misc/matrix';\nimport { removeTransformMatrixForSvgParsing } from '../util/transform_matrix_removal';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { Point } from '../Point';\nimport { CENTER } from '../constants';\nimport { getGradientDefs } from './getGradientDefs';\nimport { getCSSRules } from './getCSSRules';\nimport type { LoadImageOptions } from '../util';\nimport type { CSSRules, TSvgReviverCallback } from './typedefs';\nimport type { ParsedViewboxTransform } from './applyViewboxTransform';\nimport type { SVGOptions } from '../gradient';\nimport { getTagName } from './getTagName';\nimport { parseTransformAttribute } from './parseTransformAttribute';\n\nconst findTag = (el: Element) =>\n classRegistry.getSVGClass(getTagName(el).toLowerCase());\n\ntype StorageType = {\n fill: SVGGradientElement;\n stroke: SVGGradientElement;\n clipPath: Element[];\n};\n\ntype NotParsedFabricObject = FabricObject & {\n fill: string;\n stroke: string;\n clipPath?: string;\n clipRule?: CanvasFillRule;\n};\n\nexport class ElementsParser {\n declare elements: Element[];\n declare options: LoadImageOptions & ParsedViewboxTransform;\n declare reviver?: TSvgReviverCallback;\n declare regexUrl: RegExp;\n declare doc: Document;\n declare clipPaths: Record<string, Element[]>;\n declare gradientDefs: Record<string, SVGGradientElement>;\n declare cssRules: CSSRules;\n\n constructor(\n elements: Element[],\n options: LoadImageOptions & ParsedViewboxTransform,\n reviver: TSvgReviverCallback | undefined,\n doc: Document,\n clipPaths: Record<string, Element[]>\n ) {\n this.elements = elements;\n this.options = options;\n this.reviver = reviver;\n this.regexUrl = /^url\\(['\"]?#([^'\"]+)['\"]?\\)/g;\n this.doc = doc;\n this.clipPaths = clipPaths;\n this.gradientDefs = getGradientDefs(doc);\n this.cssRules = getCSSRules(doc);\n }\n\n parse(): Promise<Array<FabricObject | null>> {\n return Promise.all(\n this.elements.map((element) => this.createObject(element))\n );\n }\n\n async createObject(el: Element): Promise<FabricObject | null> {\n const klass = findTag(el);\n if (klass) {\n const obj: NotParsedFabricObject = await klass.fromElement(\n el,\n this.options,\n this.cssRules\n );\n this.resolveGradient(obj, el, 'fill');\n this.resolveGradient(obj, el, 'stroke');\n if (obj instanceof FabricImage && obj._originalElement) {\n removeTransformMatrixForSvgParsing(\n obj,\n obj.parsePreserveAspectRatioAttribute()\n );\n } else {\n removeTransformMatrixForSvgParsing(obj);\n }\n await this.resolveClipPath(obj, el);\n this.reviver && this.reviver(el, obj);\n return obj;\n }\n return null;\n }\n\n extractPropertyDefinition(\n obj: NotParsedFabricObject,\n property: 'fill' | 'stroke' | 'clipPath',\n storage: Record<string, StorageType[typeof property]>\n ): StorageType[typeof property] | undefined {\n const value = obj[property]!,\n regex = this.regexUrl;\n if (!regex.test(value)) {\n return undefined;\n }\n // verify: can we remove the 'g' flag? and remove lastIndex changes?\n regex.lastIndex = 0;\n // we passed the regex test, so we know is not null;\n const id = regex.exec(value)![1];\n regex.lastIndex = 0;\n // @todo fix this\n return storage[id];\n }\n\n resolveGradient(\n obj: NotParsedFabricObject,\n el: Element,\n property: 'fill' | 'stroke'\n ) {\n const gradientDef = this.extractPropertyDefinition(\n obj,\n property,\n this.gradientDefs\n ) as SVGGradientElement;\n if (gradientDef) {\n const opacityAttr = el.getAttribute(property + '-opacity');\n const gradient = Gradient.fromElement(gradientDef, obj, {\n ...this.options,\n opacity: opacityAttr,\n } as SVGOptions);\n obj.set(property, gradient);\n }\n }\n\n // TODO: resolveClipPath could be run once per clippath with minor work per object.\n // is a refactor that i m not sure is worth on this code\n async resolveClipPath(obj: NotParsedFabricObject, usingElement: Element) {\n const clipPathElements = this.extractPropertyDefinition(\n obj,\n 'clipPath',\n this.clipPaths\n ) as Element[];\n if (clipPathElements) {\n const objTransformInv = invertTransform(obj.calcTransformMatrix());\n const clipPathTag = clipPathElements[0].parentElement!;\n let clipPathOwner = usingElement;\n while (\n clipPathOwner.parentElement &&\n clipPathOwner.getAttribute('clip-path') !== obj.clipPath\n ) {\n clipPathOwner = clipPathOwner.parentElement;\n }\n // move the clipPath tag as sibling to the real element that is using it\n clipPathOwner.parentElement!.appendChild(clipPathTag!);\n\n // this multiplication order could be opposite.\n // but i don't have an svg to test it\n // at the first SVG that has a transform on both places and is misplaced\n // try to invert this multiplication order\n const finalTransform = parseTransformAttribute(\n `${clipPathOwner.getAttribute('transform') || ''} ${\n clipPathTag.getAttribute('originalTransform') || ''\n }`\n );\n\n clipPathTag.setAttribute(\n 'transform',\n `matrix(${finalTransform.join(',')})`\n );\n\n const container = await Promise.all(\n clipPathElements.map((clipPathElement) => {\n return findTag(clipPathElement)\n .fromElement(clipPathElement, this.options, this.cssRules)\n .then((enlivedClippath: NotParsedFabricObject) => {\n removeTransformMatrixForSvgParsing(enlivedClippath);\n enlivedClippath.fillRule = enlivedClippath.clipRule!;\n delete enlivedClippath.clipRule;\n return enlivedClippath;\n });\n })\n );\n const clipPath =\n container.length === 1 ? container[0] : new Group(container);\n const gTransform = multiplyTransformMatrices(\n objTransformInv,\n clipPath.calcTransformMatrix()\n );\n if (clipPath.clipPath) {\n await this.resolveClipPath(clipPath, clipPathOwner);\n }\n const { scaleX, scaleY, angle, skewX, translateX, translateY } =\n qrDecompose(gTransform);\n clipPath.set({\n flipX: false,\n flipY: false,\n });\n clipPath.set({\n scaleX,\n scaleY,\n angle,\n skewX,\n skewY: 0,\n });\n clipPath.setPositionByOrigin(\n new Point(translateX, translateY),\n CENTER,\n CENTER\n );\n obj.clipPath = clipPath;\n } else {\n // if clip-path does not resolve to any element, delete the property.\n delete obj.clipPath;\n return;\n }\n }\n}\n"],"names":["findTag","el","classRegistry","getSVGClass","getTagName","toLowerCase","ElementsParser","constructor","elements","options","reviver","doc","clipPaths","regexUrl","gradientDefs","getGradientDefs","cssRules","getCSSRules","parse","Promise","all","map","element","createObject","klass","obj","fromElement","resolveGradient","FabricImage","_originalElement","removeTransformMatrixForSvgParsing","parsePreserveAspectRatioAttribute","resolveClipPath","extractPropertyDefinition","property","storage","value","regex","test","undefined","lastIndex","id","exec","gradientDef","opacityAttr","getAttribute","gradient","Gradient","_objectSpread","opacity","set","usingElement","clipPathElements","objTransformInv","invertTransform","calcTransformMatrix","clipPathTag","parentElement","clipPathOwner","clipPath","appendChild","finalTransform","parseTransformAttribute","concat","setAttribute","join","container","clipPathElement","then","enlivedClippath","fillRule","clipRule","length","Group","gTransform","multiplyTransformMatrices","scaleX","scaleY","angle","skewX","translateX","translateY","qrDecompose","flipX","flipY","skewY","setPositionByOrigin","Point","CENTER"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"elements_parser.mjs","sources":["../../../src/parser/elements_parser.ts"],"sourcesContent":["import { Gradient } from '../gradient/Gradient';\nimport { Group } from '../shapes/Group';\nimport { FabricImage } from '../shapes/Image';\nimport { classRegistry } from '../ClassRegistry';\nimport {\n invertTransform,\n multiplyTransformMatrices,\n qrDecompose,\n} from '../util/misc/matrix';\nimport { removeTransformMatrixForSvgParsing } from '../util/transform_matrix_removal';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport { Point } from '../Point';\nimport { CENTER, FILL, STROKE } from '../constants';\nimport { getGradientDefs } from './getGradientDefs';\nimport { getCSSRules } from './getCSSRules';\nimport type { LoadImageOptions } from '../util';\nimport type { CSSRules, TSvgReviverCallback } from './typedefs';\nimport type { ParsedViewboxTransform } from './applyViewboxTransform';\nimport type { SVGOptions } from '../gradient';\nimport { getTagName } from './getTagName';\nimport { parseTransformAttribute } from './parseTransformAttribute';\n\nconst findTag = (el: Element) =>\n classRegistry.getSVGClass(getTagName(el).toLowerCase());\n\ntype StorageType = {\n fill: SVGGradientElement;\n stroke: SVGGradientElement;\n clipPath: Element[];\n};\n\ntype NotParsedFabricObject = FabricObject & {\n fill: string;\n stroke: string;\n clipPath?: string;\n clipRule?: CanvasFillRule;\n};\n\nexport class ElementsParser {\n declare elements: Element[];\n declare options: LoadImageOptions & ParsedViewboxTransform;\n declare reviver?: TSvgReviverCallback;\n declare regexUrl: RegExp;\n declare doc: Document;\n declare clipPaths: Record<string, Element[]>;\n declare gradientDefs: Record<string, SVGGradientElement>;\n declare cssRules: CSSRules;\n\n constructor(\n elements: Element[],\n options: LoadImageOptions & ParsedViewboxTransform,\n reviver: TSvgReviverCallback | undefined,\n doc: Document,\n clipPaths: Record<string, Element[]>\n ) {\n this.elements = elements;\n this.options = options;\n this.reviver = reviver;\n this.regexUrl = /^url\\(['\"]?#([^'\"]+)['\"]?\\)/g;\n this.doc = doc;\n this.clipPaths = clipPaths;\n this.gradientDefs = getGradientDefs(doc);\n this.cssRules = getCSSRules(doc);\n }\n\n parse(): Promise<Array<FabricObject | null>> {\n return Promise.all(\n this.elements.map((element) => this.createObject(element))\n );\n }\n\n async createObject(el: Element): Promise<FabricObject | null> {\n const klass = findTag(el);\n if (klass) {\n const obj: NotParsedFabricObject = await klass.fromElement(\n el,\n this.options,\n this.cssRules\n );\n this.resolveGradient(obj, el, FILL);\n this.resolveGradient(obj, el, STROKE);\n if (obj instanceof FabricImage && obj._originalElement) {\n removeTransformMatrixForSvgParsing(\n obj,\n obj.parsePreserveAspectRatioAttribute()\n );\n } else {\n removeTransformMatrixForSvgParsing(obj);\n }\n await this.resolveClipPath(obj, el);\n this.reviver && this.reviver(el, obj);\n return obj;\n }\n return null;\n }\n\n extractPropertyDefinition(\n obj: NotParsedFabricObject,\n property: 'fill' | 'stroke' | 'clipPath',\n storage: Record<string, StorageType[typeof property]>\n ): StorageType[typeof property] | undefined {\n const value = obj[property]!,\n regex = this.regexUrl;\n if (!regex.test(value)) {\n return undefined;\n }\n // verify: can we remove the 'g' flag? and remove lastIndex changes?\n regex.lastIndex = 0;\n // we passed the regex test, so we know is not null;\n const id = regex.exec(value)![1];\n regex.lastIndex = 0;\n // @todo fix this\n return storage[id];\n }\n\n resolveGradient(\n obj: NotParsedFabricObject,\n el: Element,\n property: 'fill' | 'stroke'\n ) {\n const gradientDef = this.extractPropertyDefinition(\n obj,\n property,\n this.gradientDefs\n ) as SVGGradientElement;\n if (gradientDef) {\n const opacityAttr = el.getAttribute(property + '-opacity');\n const gradient = Gradient.fromElement(gradientDef, obj, {\n ...this.options,\n opacity: opacityAttr,\n } as SVGOptions);\n obj.set(property, gradient);\n }\n }\n\n // TODO: resolveClipPath could be run once per clippath with minor work per object.\n // is a refactor that i m not sure is worth on this code\n async resolveClipPath(obj: NotParsedFabricObject, usingElement: Element) {\n const clipPathElements = this.extractPropertyDefinition(\n obj,\n 'clipPath',\n this.clipPaths\n ) as Element[];\n if (clipPathElements) {\n const objTransformInv = invertTransform(obj.calcTransformMatrix());\n const clipPathTag = clipPathElements[0].parentElement!;\n let clipPathOwner = usingElement;\n while (\n clipPathOwner.parentElement &&\n clipPathOwner.getAttribute('clip-path') !== obj.clipPath\n ) {\n clipPathOwner = clipPathOwner.parentElement;\n }\n // move the clipPath tag as sibling to the real element that is using it\n clipPathOwner.parentElement!.appendChild(clipPathTag!);\n\n // this multiplication order could be opposite.\n // but i don't have an svg to test it\n // at the first SVG that has a transform on both places and is misplaced\n // try to invert this multiplication order\n const finalTransform = parseTransformAttribute(\n `${clipPathOwner.getAttribute('transform') || ''} ${\n clipPathTag.getAttribute('originalTransform') || ''\n }`\n );\n\n clipPathTag.setAttribute(\n 'transform',\n `matrix(${finalTransform.join(',')})`\n );\n\n const container = await Promise.all(\n clipPathElements.map((clipPathElement) => {\n return findTag(clipPathElement)\n .fromElement(clipPathElement, this.options, this.cssRules)\n .then((enlivedClippath: NotParsedFabricObject) => {\n removeTransformMatrixForSvgParsing(enlivedClippath);\n enlivedClippath.fillRule = enlivedClippath.clipRule!;\n delete enlivedClippath.clipRule;\n return enlivedClippath;\n });\n })\n );\n const clipPath =\n container.length === 1 ? container[0] : new Group(container);\n const gTransform = multiplyTransformMatrices(\n objTransformInv,\n clipPath.calcTransformMatrix()\n );\n if (clipPath.clipPath) {\n await this.resolveClipPath(clipPath, clipPathOwner);\n }\n const { scaleX, scaleY, angle, skewX, translateX, translateY } =\n qrDecompose(gTransform);\n clipPath.set({\n flipX: false,\n flipY: false,\n });\n clipPath.set({\n scaleX,\n scaleY,\n angle,\n skewX,\n skewY: 0,\n });\n clipPath.setPositionByOrigin(\n new Point(translateX, translateY),\n CENTER,\n CENTER\n );\n obj.clipPath = clipPath;\n } else {\n // if clip-path does not resolve to any element, delete the property.\n delete obj.clipPath;\n return;\n }\n }\n}\n"],"names":["findTag","el","classRegistry","getSVGClass","getTagName","toLowerCase","ElementsParser","constructor","elements","options","reviver","doc","clipPaths","regexUrl","gradientDefs","getGradientDefs","cssRules","getCSSRules","parse","Promise","all","map","element","createObject","klass","obj","fromElement","resolveGradient","FILL","STROKE","FabricImage","_originalElement","removeTransformMatrixForSvgParsing","parsePreserveAspectRatioAttribute","resolveClipPath","extractPropertyDefinition","property","storage","value","regex","test","undefined","lastIndex","id","exec","gradientDef","opacityAttr","getAttribute","gradient","Gradient","_objectSpread","opacity","set","usingElement","clipPathElements","objTransformInv","invertTransform","calcTransformMatrix","clipPathTag","parentElement","clipPathOwner","clipPath","appendChild","finalTransform","parseTransformAttribute","concat","setAttribute","join","container","clipPathElement","then","enlivedClippath","fillRule","clipRule","length","Group","gTransform","multiplyTransformMatrices","scaleX","scaleY","angle","skewX","translateX","translateY","qrDecompose","flipX","flipY","skewY","setPositionByOrigin","Point","CENTER"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{multiplyTransformMatrices as i}from"../util/misc/matrix.min.mjs";import{parseUnit as r}from"../util/misc/svgParsing.min.mjs";import{parseTransformAttribute as t}from"./parseTransformAttribute.min.mjs";import{
|
|
1
|
+
import{multiplyTransformMatrices as i}from"../util/misc/matrix.min.mjs";import{parseUnit as r}from"../util/misc/svgParsing.min.mjs";import{parseTransformAttribute as t}from"./parseTransformAttribute.min.mjs";import{FILL as e,STROKE as s,NONE as n,LEFT as a,RIGHT as o,CENTER as m}from"../constants.min.mjs";function f(f,l,p,c){const u=Array.isArray(l);let x,g=l;if(f!==e&&f!==s||l!==n){if("strokeUniform"===f)return"non-scaling-stroke"===l;if("strokeDashArray"===f)g=l===n?null:l.replace(/,/g," ").split(/\s+/).map(parseFloat);else if("transformMatrix"===f)g=p&&p.transformMatrix?i(p.transformMatrix,t(l)):t(l);else if("visible"===f)g=l!==n&&"hidden"!==l,p&&!1===p.visible&&(g=!1);else if("opacity"===f)g=parseFloat(l),p&&void 0!==p.opacity&&(g*=p.opacity);else if("textAnchor"===f)g="start"===l?a:"end"===l?o:m;else if("charSpacing"===f)x=r(l,c)/c*1e3;else if("paintFirst"===f){const i=l.indexOf(e),r=l.indexOf(s);g=e,(i>-1&&r>-1&&r<i||-1===i&&r>-1)&&(g=s)}else{if("href"===f||"xlink:href"===f||"font"===f)return l;if("imageSmoothing"===f)return"optimizeQuality"===l;x=u?l.map(r):r(l,c)}}else g="";return!u&&isNaN(x)?g:x}export{f as normalizeValue};
|
|
2
2
|
//# sourceMappingURL=normalizeValue.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalizeValue.min.mjs","sources":["../../../src/parser/normalizeValue.ts"],"sourcesContent":["import { multiplyTransformMatrices } from '../util/misc/matrix';\nimport { parseUnit } from '../util/misc/svgParsing';\nimport { parseTransformAttribute } from './parseTransformAttribute';\nimport { CENTER, LEFT, RIGHT, NONE } from '../constants';\n\nexport function normalizeValue(\n attr: string,\n value: any,\n parentAttributes: Record<string, any>,\n fontSize: number\n): string | null | boolean | number[] | number {\n const isArray = Array.isArray(value);\n let parsed: number | number[];\n let ouputValue: string | null | boolean | number[] | number = value;\n if ((attr ===
|
|
1
|
+
{"version":3,"file":"normalizeValue.min.mjs","sources":["../../../src/parser/normalizeValue.ts"],"sourcesContent":["import { multiplyTransformMatrices } from '../util/misc/matrix';\nimport { parseUnit } from '../util/misc/svgParsing';\nimport { parseTransformAttribute } from './parseTransformAttribute';\nimport { CENTER, LEFT, RIGHT, NONE, FILL, STROKE } from '../constants';\n\nexport function normalizeValue(\n attr: string,\n value: any,\n parentAttributes: Record<string, any>,\n fontSize: number\n): string | null | boolean | number[] | number {\n const isArray = Array.isArray(value);\n let parsed: number | number[];\n let ouputValue: string | null | boolean | number[] | number = value;\n if ((attr === FILL || attr === STROKE) && value === NONE) {\n ouputValue = '';\n } else if (attr === 'strokeUniform') {\n return value === 'non-scaling-stroke';\n } else if (attr === 'strokeDashArray') {\n if (value === NONE) {\n ouputValue = null;\n } else {\n ouputValue = value.replace(/,/g, ' ').split(/\\s+/).map(parseFloat);\n }\n } else if (attr === 'transformMatrix') {\n if (parentAttributes && parentAttributes.transformMatrix) {\n ouputValue = multiplyTransformMatrices(\n parentAttributes.transformMatrix,\n parseTransformAttribute(value)\n );\n } else {\n ouputValue = parseTransformAttribute(value);\n }\n } else if (attr === 'visible') {\n ouputValue = value !== NONE && value !== 'hidden';\n // display=none on parent element always takes precedence over child element\n if (parentAttributes && parentAttributes.visible === false) {\n ouputValue = false;\n }\n } else if (attr === 'opacity') {\n ouputValue = parseFloat(value);\n if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {\n ouputValue *= parentAttributes.opacity as number;\n }\n } else if (attr === 'textAnchor' /* text-anchor */) {\n ouputValue = value === 'start' ? LEFT : value === 'end' ? RIGHT : CENTER;\n } else if (attr === 'charSpacing') {\n // parseUnit returns px and we convert it to em\n parsed = (parseUnit(value, fontSize) / fontSize) * 1000;\n } else if (attr === 'paintFirst') {\n const fillIndex = value.indexOf(FILL);\n const strokeIndex = value.indexOf(STROKE);\n ouputValue = FILL;\n if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {\n ouputValue = STROKE;\n } else if (fillIndex === -1 && strokeIndex > -1) {\n ouputValue = STROKE;\n }\n } else if (attr === 'href' || attr === 'xlink:href' || attr === 'font') {\n return value;\n } else if (attr === 'imageSmoothing') {\n return value === 'optimizeQuality';\n } else {\n parsed = isArray\n ? (value as string[]).map(parseUnit)\n : parseUnit(value, fontSize);\n }\n\n return !isArray && isNaN(parsed! as number) ? ouputValue : parsed!;\n}\n"],"names":["normalizeValue","attr","value","parentAttributes","fontSize","isArray","Array","parsed","ouputValue","FILL","STROKE","NONE","replace","split","map","parseFloat","transformMatrix","multiplyTransformMatrices","parseTransformAttribute","visible","opacity","LEFT","RIGHT","CENTER","parseUnit","fillIndex","indexOf","strokeIndex","isNaN"],"mappings":"mTAKO,SAASA,EACdC,EACAC,EACAC,EACAC,GAEA,MAAMC,EAAUC,MAAMD,QAAQH,GAC9B,IAAIK,EACAC,EAA0DN,EAC9D,GAAKD,IAASQ,GAAQR,IAASS,GAAWR,IAAUS,EAE7C,IAAa,kBAATV,EACT,MAAiB,uBAAVC,EACF,GAAa,oBAATD,EAEPO,EADEN,IAAUS,EACC,KAEAT,EAAMU,QAAQ,KAAM,KAAKC,MAAM,OAAOC,IAAIC,iBAEpD,GAAa,oBAATd,EAEPO,EADEL,GAAoBA,EAAiBa,gBAC1BC,EACXd,EAAiBa,gBACjBE,EAAwBhB,IAGbgB,EAAwBhB,QAElC,GAAa,YAATD,EACTO,EAAaN,IAAUS,GAAkB,WAAVT,EAE3BC,IAAiD,IAA7BA,EAAiBgB,UACvCX,GAAa,QAEV,GAAa,YAATP,EACTO,EAAaO,WAAWb,GACpBC,QAAwD,IAA7BA,EAAiBiB,UAC9CZ,GAAcL,EAAiBiB,cAE5B,GAAa,eAATnB,EACTO,EAAuB,UAAVN,EAAoBmB,EAAiB,QAAVnB,EAAkBoB,EAAQC,OAC7D,GAAa,gBAATtB,EAETM,EAAUiB,EAAUtB,EAAOE,GAAYA,EAAY,SAC9C,GAAa,eAATH,EAAuB,CAChC,MAAMwB,EAAYvB,EAAMwB,QAAQjB,GAC1BkB,EAAczB,EAAMwB,QAAQhB,GAClCF,EAAaC,GACTgB,GAAa,GAAKE,GAAe,GAAKA,EAAcF,IAE9B,IAAfA,GAAoBE,GAAe,KAD5CnB,EAAaE,EAIjB,KAAO,IAAa,SAATT,GAA4B,eAATA,GAAkC,SAATA,EACrD,OAAOC,EACF,GAAa,mBAATD,EACT,MAAiB,oBAAVC,EAEPK,EAASF,EACJH,EAAmBY,IAAIU,GACxBA,EAAUtB,EAAOE,EACvB,OAnDEI,EAAa,GAqDf,OAAQH,GAAWuB,MAAMrB,GAAqBC,EAAaD,CAC7D"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { multiplyTransformMatrices } from '../util/misc/matrix.mjs';
|
|
2
2
|
import { parseUnit } from '../util/misc/svgParsing.mjs';
|
|
3
3
|
import { parseTransformAttribute } from './parseTransformAttribute.mjs';
|
|
4
|
-
import { NONE, LEFT, RIGHT, CENTER } from '../constants.mjs';
|
|
4
|
+
import { FILL, STROKE, NONE, LEFT, RIGHT, CENTER } from '../constants.mjs';
|
|
5
5
|
|
|
6
6
|
function normalizeValue(attr, value, parentAttributes, fontSize) {
|
|
7
7
|
const isArray = Array.isArray(value);
|
|
8
8
|
let parsed;
|
|
9
9
|
let ouputValue = value;
|
|
10
|
-
if ((attr ===
|
|
10
|
+
if ((attr === FILL || attr === STROKE) && value === NONE) {
|
|
11
11
|
ouputValue = '';
|
|
12
12
|
} else if (attr === 'strokeUniform') {
|
|
13
13
|
return value === 'non-scaling-stroke';
|
|
@@ -40,13 +40,13 @@ function normalizeValue(attr, value, parentAttributes, fontSize) {
|
|
|
40
40
|
// parseUnit returns px and we convert it to em
|
|
41
41
|
parsed = parseUnit(value, fontSize) / fontSize * 1000;
|
|
42
42
|
} else if (attr === 'paintFirst') {
|
|
43
|
-
const fillIndex = value.indexOf(
|
|
44
|
-
const strokeIndex = value.indexOf(
|
|
45
|
-
ouputValue =
|
|
43
|
+
const fillIndex = value.indexOf(FILL);
|
|
44
|
+
const strokeIndex = value.indexOf(STROKE);
|
|
45
|
+
ouputValue = FILL;
|
|
46
46
|
if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {
|
|
47
|
-
ouputValue =
|
|
47
|
+
ouputValue = STROKE;
|
|
48
48
|
} else if (fillIndex === -1 && strokeIndex > -1) {
|
|
49
|
-
ouputValue =
|
|
49
|
+
ouputValue = STROKE;
|
|
50
50
|
}
|
|
51
51
|
} else if (attr === 'href' || attr === 'xlink:href' || attr === 'font') {
|
|
52
52
|
return value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalizeValue.mjs","sources":["../../../src/parser/normalizeValue.ts"],"sourcesContent":["import { multiplyTransformMatrices } from '../util/misc/matrix';\nimport { parseUnit } from '../util/misc/svgParsing';\nimport { parseTransformAttribute } from './parseTransformAttribute';\nimport { CENTER, LEFT, RIGHT, NONE } from '../constants';\n\nexport function normalizeValue(\n attr: string,\n value: any,\n parentAttributes: Record<string, any>,\n fontSize: number\n): string | null | boolean | number[] | number {\n const isArray = Array.isArray(value);\n let parsed: number | number[];\n let ouputValue: string | null | boolean | number[] | number = value;\n if ((attr ===
|
|
1
|
+
{"version":3,"file":"normalizeValue.mjs","sources":["../../../src/parser/normalizeValue.ts"],"sourcesContent":["import { multiplyTransformMatrices } from '../util/misc/matrix';\nimport { parseUnit } from '../util/misc/svgParsing';\nimport { parseTransformAttribute } from './parseTransformAttribute';\nimport { CENTER, LEFT, RIGHT, NONE, FILL, STROKE } from '../constants';\n\nexport function normalizeValue(\n attr: string,\n value: any,\n parentAttributes: Record<string, any>,\n fontSize: number\n): string | null | boolean | number[] | number {\n const isArray = Array.isArray(value);\n let parsed: number | number[];\n let ouputValue: string | null | boolean | number[] | number = value;\n if ((attr === FILL || attr === STROKE) && value === NONE) {\n ouputValue = '';\n } else if (attr === 'strokeUniform') {\n return value === 'non-scaling-stroke';\n } else if (attr === 'strokeDashArray') {\n if (value === NONE) {\n ouputValue = null;\n } else {\n ouputValue = value.replace(/,/g, ' ').split(/\\s+/).map(parseFloat);\n }\n } else if (attr === 'transformMatrix') {\n if (parentAttributes && parentAttributes.transformMatrix) {\n ouputValue = multiplyTransformMatrices(\n parentAttributes.transformMatrix,\n parseTransformAttribute(value)\n );\n } else {\n ouputValue = parseTransformAttribute(value);\n }\n } else if (attr === 'visible') {\n ouputValue = value !== NONE && value !== 'hidden';\n // display=none on parent element always takes precedence over child element\n if (parentAttributes && parentAttributes.visible === false) {\n ouputValue = false;\n }\n } else if (attr === 'opacity') {\n ouputValue = parseFloat(value);\n if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {\n ouputValue *= parentAttributes.opacity as number;\n }\n } else if (attr === 'textAnchor' /* text-anchor */) {\n ouputValue = value === 'start' ? LEFT : value === 'end' ? RIGHT : CENTER;\n } else if (attr === 'charSpacing') {\n // parseUnit returns px and we convert it to em\n parsed = (parseUnit(value, fontSize) / fontSize) * 1000;\n } else if (attr === 'paintFirst') {\n const fillIndex = value.indexOf(FILL);\n const strokeIndex = value.indexOf(STROKE);\n ouputValue = FILL;\n if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {\n ouputValue = STROKE;\n } else if (fillIndex === -1 && strokeIndex > -1) {\n ouputValue = STROKE;\n }\n } else if (attr === 'href' || attr === 'xlink:href' || attr === 'font') {\n return value;\n } else if (attr === 'imageSmoothing') {\n return value === 'optimizeQuality';\n } else {\n parsed = isArray\n ? (value as string[]).map(parseUnit)\n : parseUnit(value, fontSize);\n }\n\n return !isArray && isNaN(parsed! as number) ? ouputValue : parsed!;\n}\n"],"names":["normalizeValue","attr","value","parentAttributes","fontSize","isArray","Array","parsed","ouputValue","FILL","STROKE","NONE","replace","split","map","parseFloat","transformMatrix","multiplyTransformMatrices","parseTransformAttribute","visible","opacity","LEFT","RIGHT","CENTER","parseUnit","fillIndex","indexOf","strokeIndex","isNaN"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{taggedTemplateLiteral as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{iMatrix as a}from"../constants.min.mjs";import{reNum as
|
|
1
|
+
import{taggedTemplateLiteral as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{iMatrix as a,ROTATE as r,SKEW_Y as e,SKEW_X as n,SCALE as s}from"../constants.min.mjs";import{reNum as c}from"./constants.min.mjs";import{cleanupSvgAttribute as i}from"../util/internals/cleanupSvgAttribute.min.mjs";import{createRotateMatrix as o,multiplyTransformMatrixArray as m,createSkewYMatrix as l,createSkewXMatrix as g,createScaleMatrix as p,createTranslateMatrix as w}from"../util/misc/matrix.min.mjs";var u,f,x,k,S,b,j;const h="(".concat(c,")"),v=String.raw(u||(u=t(["(skewX)(",")"],["(skewX)\\(","\\)"])),h),E=String.raw(f||(f=t(["(skewY)(",")"],["(skewY)\\(","\\)"])),h),R=String.raw(x||(x=t(["(rotate)(","(?: "," ",")?)"],["(rotate)\\(","(?: "," ",")?\\)"])),h,h,h),$=String.raw(k||(k=t(["(scale)(","(?: ",")?)"],["(scale)\\(","(?: ",")?\\)"])),h,h),A=String.raw(S||(S=t(["(translate)(","(?: ",")?)"],["(translate)\\(","(?: ",")?\\)"])),h,h),X=String.raw(b||(b=t(["(matrix)("," "," "," "," "," ",")"],["(matrix)\\("," "," "," "," "," ","\\)"])),h,h,h,h,h,h),Y="(?:".concat(X,"|").concat(A,"|").concat(R,"|").concat($,"|").concat(v,"|").concat(E,")"),_="(?:".concat(Y,"*)"),d=String.raw(j||(j=t(["^s*(?:","?)s*$"],["^\\s*(?:","?)\\s*$"])),_),y=new RegExp(d),B=new RegExp(Y),F=new RegExp(Y,"g");function H(t){const c=[];if(!(t=i(t).replace(/\s*([()])\s*/gi,"$1"))||t&&!y.test(t))return[...a];for(const i of t.matchAll(F)){const t=B.exec(i[0]);if(!t)continue;let m=a;const u=t.filter((t=>!!t)),[,f,...x]=u,[k,S,b,j,h,v]=x.map((t=>parseFloat(t)));switch(f){case"translate":m=w(k,S);break;case r:m=o({angle:k},{x:S,y:b});break;case s:m=p(k,S);break;case n:m=g(k);break;case e:m=l(k);break;case"matrix":m=[k,S,b,j,h,v]}c.push(m)}return m(c)}export{H as parseTransformAttribute};
|
|
2
2
|
//# sourceMappingURL=parseTransformAttribute.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseTransformAttribute.min.mjs","sources":["../../../src/parser/parseTransformAttribute.ts"],"sourcesContent":["import { iMatrix } from '../constants';\nimport { reNum } from './constants';\nimport type { TMat2D } from '../typedefs';\nimport { cleanupSvgAttribute } from '../util/internals/cleanupSvgAttribute';\nimport {\n createRotateMatrix,\n createScaleMatrix,\n createSkewXMatrix,\n createSkewYMatrix,\n createTranslateMatrix,\n multiplyTransformMatrixArray,\n} from '../util/misc/matrix';\n\n// == begin transform regexp\nconst p = `(${reNum})`;\nconst skewX = String.raw`(skewX)\\(${p}\\)`;\nconst skewY = String.raw`(skewY)\\(${p}\\)`;\nconst rotate = String.raw`(rotate)\\(${p}(?: ${p} ${p})?\\)`;\nconst scale = String.raw`(scale)\\(${p}(?: ${p})?\\)`;\nconst translate = String.raw`(translate)\\(${p}(?: ${p})?\\)`;\nconst matrix = String.raw`(matrix)\\(${p} ${p} ${p} ${p} ${p} ${p}\\)`;\nconst transform = `(?:${matrix}|${translate}|${rotate}|${scale}|${skewX}|${skewY})`;\nconst transforms = `(?:${transform}*)`;\nconst transformList = String.raw`^\\s*(?:${transforms}?)\\s*$`;\n// http://www.w3.org/TR/SVG/coords.html#TransformAttribute\nconst reTransformList = new RegExp(transformList);\nconst reTransform = new RegExp(transform);\nconst reTransformAll = new RegExp(transform, 'g');\n// == end transform regexp\n\n/**\n * Parses \"transform\" attribute, returning an array of values\n * @static\n * @function\n * @memberOf fabric\n * @param {String} attributeValue String containing attribute value\n * @return {TTransformMatrix} Array of 6 elements representing transformation matrix\n */\nexport function parseTransformAttribute(attributeValue: string): TMat2D {\n // first we clean the string\n attributeValue = cleanupSvgAttribute(attributeValue)\n // remove spaces around front parentheses\n .replace(/\\s*([()])\\s*/gi, '$1');\n\n // start with identity matrix\n const matrices: TMat2D[] = [];\n\n // return if no argument was given or\n // an argument does not match transform attribute regexp\n if (\n !attributeValue ||\n (attributeValue && !reTransformList.test(attributeValue))\n ) {\n return [...iMatrix];\n }\n\n for (const match of attributeValue.matchAll(reTransformAll)) {\n const transformMatch = reTransform.exec(match[0]);\n if (!transformMatch) {\n continue;\n }\n let matrix: TMat2D = iMatrix;\n const matchedParams = transformMatch.filter((m) => !!m);\n const [, operation, ...rawArgs] = matchedParams;\n const [arg0, arg1, arg2, arg3, arg4, arg5] = rawArgs.map((arg) =>\n parseFloat(arg)\n );\n\n switch (operation) {\n case 'translate':\n matrix = createTranslateMatrix(arg0, arg1);\n break;\n case
|
|
1
|
+
{"version":3,"file":"parseTransformAttribute.min.mjs","sources":["../../../src/parser/parseTransformAttribute.ts"],"sourcesContent":["import { ROTATE, SCALE, SKEW_X, SKEW_Y, iMatrix } from '../constants';\nimport { reNum } from './constants';\nimport type { TMat2D } from '../typedefs';\nimport { cleanupSvgAttribute } from '../util/internals/cleanupSvgAttribute';\nimport {\n createRotateMatrix,\n createScaleMatrix,\n createSkewXMatrix,\n createSkewYMatrix,\n createTranslateMatrix,\n multiplyTransformMatrixArray,\n} from '../util/misc/matrix';\n\n// == begin transform regexp\nconst p = `(${reNum})`;\nconst skewX = String.raw`(skewX)\\(${p}\\)`;\nconst skewY = String.raw`(skewY)\\(${p}\\)`;\nconst rotate = String.raw`(rotate)\\(${p}(?: ${p} ${p})?\\)`;\nconst scale = String.raw`(scale)\\(${p}(?: ${p})?\\)`;\nconst translate = String.raw`(translate)\\(${p}(?: ${p})?\\)`;\nconst matrix = String.raw`(matrix)\\(${p} ${p} ${p} ${p} ${p} ${p}\\)`;\nconst transform = `(?:${matrix}|${translate}|${rotate}|${scale}|${skewX}|${skewY})`;\nconst transforms = `(?:${transform}*)`;\nconst transformList = String.raw`^\\s*(?:${transforms}?)\\s*$`;\n// http://www.w3.org/TR/SVG/coords.html#TransformAttribute\nconst reTransformList = new RegExp(transformList);\nconst reTransform = new RegExp(transform);\nconst reTransformAll = new RegExp(transform, 'g');\n// == end transform regexp\n\n/**\n * Parses \"transform\" attribute, returning an array of values\n * @static\n * @function\n * @memberOf fabric\n * @param {String} attributeValue String containing attribute value\n * @return {TTransformMatrix} Array of 6 elements representing transformation matrix\n */\nexport function parseTransformAttribute(attributeValue: string): TMat2D {\n // first we clean the string\n attributeValue = cleanupSvgAttribute(attributeValue)\n // remove spaces around front parentheses\n .replace(/\\s*([()])\\s*/gi, '$1');\n\n // start with identity matrix\n const matrices: TMat2D[] = [];\n\n // return if no argument was given or\n // an argument does not match transform attribute regexp\n if (\n !attributeValue ||\n (attributeValue && !reTransformList.test(attributeValue))\n ) {\n return [...iMatrix];\n }\n\n for (const match of attributeValue.matchAll(reTransformAll)) {\n const transformMatch = reTransform.exec(match[0]);\n if (!transformMatch) {\n continue;\n }\n let matrix: TMat2D = iMatrix;\n const matchedParams = transformMatch.filter((m) => !!m);\n const [, operation, ...rawArgs] = matchedParams;\n const [arg0, arg1, arg2, arg3, arg4, arg5] = rawArgs.map((arg) =>\n parseFloat(arg)\n );\n\n switch (operation) {\n case 'translate':\n matrix = createTranslateMatrix(arg0, arg1);\n break;\n case ROTATE:\n matrix = createRotateMatrix({ angle: arg0 }, { x: arg1, y: arg2 });\n break;\n case SCALE:\n matrix = createScaleMatrix(arg0, arg1);\n break;\n case SKEW_X:\n matrix = createSkewXMatrix(arg0);\n break;\n case SKEW_Y:\n matrix = createSkewYMatrix(arg0);\n break;\n case 'matrix':\n matrix = [arg0, arg1, arg2, arg3, arg4, arg5];\n break;\n }\n\n // snapshot current matrix into matrices array\n matrices.push(matrix);\n }\n\n return multiplyTransformMatrixArray(matrices);\n}\n"],"names":["p","concat","reNum","skewX","String","raw","_templateObject","_taggedTemplateLiteral","skewY","_templateObject2","rotate","_templateObject3","scale","_templateObject4","translate","_templateObject5","matrix","_templateObject6","transform","transforms","transformList","_templateObject7","reTransformList","RegExp","reTransform","reTransformAll","parseTransformAttribute","attributeValue","matrices","cleanupSvgAttribute","replace","test","iMatrix","match","matchAll","transformMatch","exec","matchedParams","filter","m","operation","rawArgs","arg0","arg1","arg2","arg3","arg4","arg5","map","arg","parseFloat","createTranslateMatrix","ROTATE","createRotateMatrix","angle","x","y","SCALE","createScaleMatrix","SKEW_X","createSkewXMatrix","SKEW_Y","createSkewYMatrix","push","multiplyTransformMatrixArray"],"mappings":"4gBAcA,MAAMA,EAAC,IAAAC,OAAOC,EAAQ,KAChBC,EAAQC,OAAOC,IAAGC,IAAAA,EAAAC,EAAA,CAAA,WAAA,KAAA,CAAA,aAAA,SAAYP,GAC9BQ,EAAQJ,OAAOC,IAAGI,IAAAA,EAAAF,EAAA,CAAA,WAAA,KAAA,CAAA,aAAA,SAAYP,GAC9BU,EAASN,OAAOC,IAAGM,IAAAA,EAAAJ,EAAaP,CAAAA,YAAAA,OAAAA,IAAAA,OAAAA,CAAAA,cAAAA,OAAAA,IAAAA,WAAAA,EAAQA,EAAKA,GAC7CY,EAAQR,OAAOC,IAAGQ,IAAAA,EAAAN,EAAA,CAAA,WAAA,OAAA,OAAA,CAAA,aAAA,OAAA,WAAYP,EAAQA,GACtCc,EAAYV,OAAOC,IAAGU,IAAAA,EAAAR,EAAA,CAAA,eAAA,OAAA,OAAA,CAAA,iBAAA,OAAA,WAAgBP,EAAQA,GAC9CgB,EAASZ,OAAOC,IAAGY,IAAAA,EAAAV,oFAAaP,EAAKA,EAAKA,EAAKA,EAAKA,EAAKA,GACzDkB,EAASjB,MAAAA,OAASe,OAAMf,OAAIa,EAAS,KAAAb,OAAIS,EAAMT,KAAAA,OAAIW,EAAKX,KAAAA,OAAIE,EAAKF,KAAAA,OAAIO,EAAQ,KAC7EW,EAAU,MAAAlB,OAASiB,EAAa,MAChCE,EAAgBhB,OAAOC,IAAGgB,IAAAA,EAAAd,EAAA,CAAA,SAAA,SAAA,CAAA,WAAA,aAAUY,GAEpCG,EAAkB,IAAIC,OAAOH,GAC7BI,EAAc,IAAID,OAAOL,GACzBO,EAAiB,IAAIF,OAAOL,EAAW,KAWtC,SAASQ,EAAwBC,GAOtC,MAAMC,EAAqB,GAI3B,KATAD,EAAiBE,EAAoBF,GAElCG,QAAQ,iBAAkB,QAS1BH,IAAmBL,EAAgBS,KAAKJ,GAEzC,MAAO,IAAIK,GAGb,IAAK,MAAMC,KAASN,EAAeO,SAAST,GAAiB,CAC3D,MAAMU,EAAiBX,EAAYY,KAAKH,EAAM,IAC9C,IAAKE,EACH,SAEF,IAAInB,EAAiBgB,EACrB,MAAMK,EAAgBF,EAAeG,QAAQC,KAAQA,MAC5CC,KAAcC,GAAWJ,GAC3BK,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,GAAQN,EAAQO,KAAKC,GACxDC,WAAWD,KAGb,OAAQT,GACN,IAAK,YACHxB,EAASmC,EAAsBT,EAAMC,GACrC,MACF,KAAKS,EACHpC,EAASqC,EAAmB,CAAEC,MAAOZ,GAAQ,CAAEa,EAAGZ,EAAMa,EAAGZ,IAC3D,MACF,KAAKa,EACHzC,EAAS0C,EAAkBhB,EAAMC,GACjC,MACF,KAAKgB,EACH3C,EAAS4C,EAAkBlB,GAC3B,MACF,KAAKmB,EACH7C,EAAS8C,EAAkBpB,GAC3B,MACF,IAAK,SACH1B,EAAS,CAAC0B,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,GAK5CnB,EAASmC,KAAK/C,EAChB,CAEA,OAAOgD,EAA6BpC,EACtC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { taggedTemplateLiteral as _taggedTemplateLiteral } from '../../_virtual/_rollupPluginBabelHelpers.mjs';
|
|
2
|
-
import { iMatrix } from '../constants.mjs';
|
|
2
|
+
import { iMatrix, ROTATE, SKEW_Y, SKEW_X, SCALE } from '../constants.mjs';
|
|
3
3
|
import { reNum } from './constants.mjs';
|
|
4
4
|
import { cleanupSvgAttribute } from '../util/internals/cleanupSvgAttribute.mjs';
|
|
5
5
|
import { createRotateMatrix, multiplyTransformMatrixArray, createSkewYMatrix, createSkewXMatrix, createScaleMatrix, createTranslateMatrix } from '../util/misc/matrix.mjs';
|
|
@@ -58,7 +58,7 @@ function parseTransformAttribute(attributeValue) {
|
|
|
58
58
|
case 'translate':
|
|
59
59
|
matrix = createTranslateMatrix(arg0, arg1);
|
|
60
60
|
break;
|
|
61
|
-
case
|
|
61
|
+
case ROTATE:
|
|
62
62
|
matrix = createRotateMatrix({
|
|
63
63
|
angle: arg0
|
|
64
64
|
}, {
|
|
@@ -66,13 +66,13 @@ function parseTransformAttribute(attributeValue) {
|
|
|
66
66
|
y: arg2
|
|
67
67
|
});
|
|
68
68
|
break;
|
|
69
|
-
case
|
|
69
|
+
case SCALE:
|
|
70
70
|
matrix = createScaleMatrix(arg0, arg1);
|
|
71
71
|
break;
|
|
72
|
-
case
|
|
72
|
+
case SKEW_X:
|
|
73
73
|
matrix = createSkewXMatrix(arg0);
|
|
74
74
|
break;
|
|
75
|
-
case
|
|
75
|
+
case SKEW_Y:
|
|
76
76
|
matrix = createSkewYMatrix(arg0);
|
|
77
77
|
break;
|
|
78
78
|
case 'matrix':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseTransformAttribute.mjs","sources":["../../../src/parser/parseTransformAttribute.ts"],"sourcesContent":["import { iMatrix } from '../constants';\nimport { reNum } from './constants';\nimport type { TMat2D } from '../typedefs';\nimport { cleanupSvgAttribute } from '../util/internals/cleanupSvgAttribute';\nimport {\n createRotateMatrix,\n createScaleMatrix,\n createSkewXMatrix,\n createSkewYMatrix,\n createTranslateMatrix,\n multiplyTransformMatrixArray,\n} from '../util/misc/matrix';\n\n// == begin transform regexp\nconst p = `(${reNum})`;\nconst skewX = String.raw`(skewX)\\(${p}\\)`;\nconst skewY = String.raw`(skewY)\\(${p}\\)`;\nconst rotate = String.raw`(rotate)\\(${p}(?: ${p} ${p})?\\)`;\nconst scale = String.raw`(scale)\\(${p}(?: ${p})?\\)`;\nconst translate = String.raw`(translate)\\(${p}(?: ${p})?\\)`;\nconst matrix = String.raw`(matrix)\\(${p} ${p} ${p} ${p} ${p} ${p}\\)`;\nconst transform = `(?:${matrix}|${translate}|${rotate}|${scale}|${skewX}|${skewY})`;\nconst transforms = `(?:${transform}*)`;\nconst transformList = String.raw`^\\s*(?:${transforms}?)\\s*$`;\n// http://www.w3.org/TR/SVG/coords.html#TransformAttribute\nconst reTransformList = new RegExp(transformList);\nconst reTransform = new RegExp(transform);\nconst reTransformAll = new RegExp(transform, 'g');\n// == end transform regexp\n\n/**\n * Parses \"transform\" attribute, returning an array of values\n * @static\n * @function\n * @memberOf fabric\n * @param {String} attributeValue String containing attribute value\n * @return {TTransformMatrix} Array of 6 elements representing transformation matrix\n */\nexport function parseTransformAttribute(attributeValue: string): TMat2D {\n // first we clean the string\n attributeValue = cleanupSvgAttribute(attributeValue)\n // remove spaces around front parentheses\n .replace(/\\s*([()])\\s*/gi, '$1');\n\n // start with identity matrix\n const matrices: TMat2D[] = [];\n\n // return if no argument was given or\n // an argument does not match transform attribute regexp\n if (\n !attributeValue ||\n (attributeValue && !reTransformList.test(attributeValue))\n ) {\n return [...iMatrix];\n }\n\n for (const match of attributeValue.matchAll(reTransformAll)) {\n const transformMatch = reTransform.exec(match[0]);\n if (!transformMatch) {\n continue;\n }\n let matrix: TMat2D = iMatrix;\n const matchedParams = transformMatch.filter((m) => !!m);\n const [, operation, ...rawArgs] = matchedParams;\n const [arg0, arg1, arg2, arg3, arg4, arg5] = rawArgs.map((arg) =>\n parseFloat(arg)\n );\n\n switch (operation) {\n case 'translate':\n matrix = createTranslateMatrix(arg0, arg1);\n break;\n case
|
|
1
|
+
{"version":3,"file":"parseTransformAttribute.mjs","sources":["../../../src/parser/parseTransformAttribute.ts"],"sourcesContent":["import { ROTATE, SCALE, SKEW_X, SKEW_Y, iMatrix } from '../constants';\nimport { reNum } from './constants';\nimport type { TMat2D } from '../typedefs';\nimport { cleanupSvgAttribute } from '../util/internals/cleanupSvgAttribute';\nimport {\n createRotateMatrix,\n createScaleMatrix,\n createSkewXMatrix,\n createSkewYMatrix,\n createTranslateMatrix,\n multiplyTransformMatrixArray,\n} from '../util/misc/matrix';\n\n// == begin transform regexp\nconst p = `(${reNum})`;\nconst skewX = String.raw`(skewX)\\(${p}\\)`;\nconst skewY = String.raw`(skewY)\\(${p}\\)`;\nconst rotate = String.raw`(rotate)\\(${p}(?: ${p} ${p})?\\)`;\nconst scale = String.raw`(scale)\\(${p}(?: ${p})?\\)`;\nconst translate = String.raw`(translate)\\(${p}(?: ${p})?\\)`;\nconst matrix = String.raw`(matrix)\\(${p} ${p} ${p} ${p} ${p} ${p}\\)`;\nconst transform = `(?:${matrix}|${translate}|${rotate}|${scale}|${skewX}|${skewY})`;\nconst transforms = `(?:${transform}*)`;\nconst transformList = String.raw`^\\s*(?:${transforms}?)\\s*$`;\n// http://www.w3.org/TR/SVG/coords.html#TransformAttribute\nconst reTransformList = new RegExp(transformList);\nconst reTransform = new RegExp(transform);\nconst reTransformAll = new RegExp(transform, 'g');\n// == end transform regexp\n\n/**\n * Parses \"transform\" attribute, returning an array of values\n * @static\n * @function\n * @memberOf fabric\n * @param {String} attributeValue String containing attribute value\n * @return {TTransformMatrix} Array of 6 elements representing transformation matrix\n */\nexport function parseTransformAttribute(attributeValue: string): TMat2D {\n // first we clean the string\n attributeValue = cleanupSvgAttribute(attributeValue)\n // remove spaces around front parentheses\n .replace(/\\s*([()])\\s*/gi, '$1');\n\n // start with identity matrix\n const matrices: TMat2D[] = [];\n\n // return if no argument was given or\n // an argument does not match transform attribute regexp\n if (\n !attributeValue ||\n (attributeValue && !reTransformList.test(attributeValue))\n ) {\n return [...iMatrix];\n }\n\n for (const match of attributeValue.matchAll(reTransformAll)) {\n const transformMatch = reTransform.exec(match[0]);\n if (!transformMatch) {\n continue;\n }\n let matrix: TMat2D = iMatrix;\n const matchedParams = transformMatch.filter((m) => !!m);\n const [, operation, ...rawArgs] = matchedParams;\n const [arg0, arg1, arg2, arg3, arg4, arg5] = rawArgs.map((arg) =>\n parseFloat(arg)\n );\n\n switch (operation) {\n case 'translate':\n matrix = createTranslateMatrix(arg0, arg1);\n break;\n case ROTATE:\n matrix = createRotateMatrix({ angle: arg0 }, { x: arg1, y: arg2 });\n break;\n case SCALE:\n matrix = createScaleMatrix(arg0, arg1);\n break;\n case SKEW_X:\n matrix = createSkewXMatrix(arg0);\n break;\n case SKEW_Y:\n matrix = createSkewYMatrix(arg0);\n break;\n case 'matrix':\n matrix = [arg0, arg1, arg2, arg3, arg4, arg5];\n break;\n }\n\n // snapshot current matrix into matrices array\n matrices.push(matrix);\n }\n\n return multiplyTransformMatrixArray(matrices);\n}\n"],"names":["p","concat","reNum","skewX","String","raw","_templateObject","_taggedTemplateLiteral","skewY","_templateObject2","rotate","_templateObject3","scale","_templateObject4","translate","_templateObject5","matrix","_templateObject6","transform","transforms","transformList","_templateObject7","reTransformList","RegExp","reTransform","reTransformAll","parseTransformAttribute","attributeValue","cleanupSvgAttribute","replace","matrices","test","iMatrix","match","matchAll","transformMatch","exec","matchedParams","filter","m","operation","rawArgs","arg0","arg1","arg2","arg3","arg4","arg5","map","arg","parseFloat","createTranslateMatrix","ROTATE","createRotateMatrix","angle","x","y","SCALE","createScaleMatrix","SKEW_X","createSkewXMatrix","SKEW_Y","createSkewYMatrix","push","multiplyTransformMatrixArray"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Circle.d.ts","sourceRoot":"","sources":["../../../src/shapes/Circle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOrD,OAAO,EAAE,YAAY,EAAmB,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Circle.d.ts","sourceRoot":"","sources":["../../../src/shapes/Circle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOrD,OAAO,EAAE,YAAY,EAAmB,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,UAAU,iBAAiB;IACzB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,qBACf,SAAQ,qBAAqB,EAC3B,iBAAiB;CAAG;AAExB,MAAM,WAAW,WAAY,SAAQ,iBAAiB,EAAE,iBAAiB;CAAG;AAS5E,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAKjE,CAAC;AAEF,qBAAa,MAAM,CACf,KAAK,SAAS,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,EAC1D,MAAM,SAAS,qBAAqB,GAAG,qBAAqB,EAC5D,SAAS,SAAS,YAAY,GAAG,YAAY,CAE/C,SAAQ,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAC7C,YAAW,iBAAiB;IAEpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAElC,MAAM,CAAC,IAAI,SAAY;IAEvB,MAAM,CAAC,eAAe,WAAyC;IAE/D,MAAM,CAAC,WAAW,+FAAuB;IAEzC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAOzC;;;OAGG;gBACS,OAAO,CAAC,EAAE,KAAK;IAM3B;;;;OAIG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;IAU5B;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,wBAAwB;IAarC;;;OAGG;IACH,UAAU,IAAI,MAAM;IAIpB;;;OAGG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM;IAKvB;;;;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;IAMrD;;;;OAIG;IACH,MAAM,IAAI,MAAM,EAAE;IAgClB;;;;;OAKG;IACH,MAAM,CAAC,eAAe,WAA2C;IAEjE;;;;;;;OAOG;WACU,WAAW,CACtB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,SAAS,EAClB,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,MAAM,CAAC;IAwBlB;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAGvE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t,objectSpread2 as s,objectWithoutProperties as e}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{SHARED_ATTRIBUTES as r}from"../parser/attributes.min.mjs";import{parseAttributes as i}from"../parser/parseAttributes.min.mjs";import{cos as n}from"../util/misc/cos.min.mjs";import{degreesToRadians as
|
|
1
|
+
import{defineProperty as t,objectSpread2 as s,objectWithoutProperties as e}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{SHARED_ATTRIBUTES as r}from"../parser/attributes.min.mjs";import{parseAttributes as i}from"../parser/parseAttributes.min.mjs";import{cos as n}from"../util/misc/cos.min.mjs";import{degreesToRadians as o}from"../util/misc/radiansDegreesConversion.min.mjs";import{sin as a}from"../util/misc/sin.min.mjs";import{classRegistry as c}from"../ClassRegistry.min.mjs";import{FabricObject as u}from"./Object/FabricObject.min.mjs";import{SCALE_X as m,SCALE_Y as l}from"../constants.min.mjs";import{cacheProperties as d}from"./Object/defaultValues.min.mjs";const h=["left","top","radius"],p=["radius","startAngle","endAngle","counterClockwise"],g={radius:0,startAngle:0,endAngle:360,counterClockwise:!1};class f extends u{static getDefaults(){return s(s({},super.getDefaults()),f.ownDefaults)}constructor(t){super(),Object.assign(this,f.ownDefaults),this.setOptions(t)}_set(t,s){return super._set(t,s),"radius"===t&&this.setRadius(s),this}_render(t){t.beginPath(),t.arc(0,0,this.radius,o(this.startAngle),o(this.endAngle),this.counterClockwise),this._renderPaintInOrder(t)}getRadiusX(){return this.get("radius")*this.get(m)}getRadiusY(){return this.get("radius")*this.get(l)}setRadius(t){this.radius=t,this.set({width:2*t,height:2*t})}toObject(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return super.toObject([...p,...t])}_toSVG(){const t=(this.endAngle-this.startAngle)%360;if(0===t)return["<circle ","COMMON_PARTS",'cx="0" cy="0" ','r="',"".concat(this.radius),'" />\n'];{const{radius:s}=this,e=o(this.startAngle),r=o(this.endAngle),i=n(e)*s,c=a(e)*s,u=n(r)*s,m=a(r)*s,l=t>180?1:0,d=this.counterClockwise?0:1;return['<path d="M '.concat(i," ").concat(c," A ").concat(s," ").concat(s," 0 ").concat(l," ").concat(d," ").concat(u," ").concat(m,'" '),"COMMON_PARTS"," />\n"]}}static async fromElement(t,r,n){const o=i(t,this.ATTRIBUTE_NAMES,n),{left:a=0,top:c=0,radius:u=0}=o,m=e(o,h);return new this(s(s({},m),{},{radius:u,left:a-u,top:c-u}))}static fromObject(t){return super._fromObject(t)}}t(f,"type","Circle"),t(f,"cacheProperties",[...d,...p]),t(f,"ownDefaults",g),t(f,"ATTRIBUTE_NAMES",["cx","cy","r",...r]),c.setClass(f),c.setSVGClass(f);export{f as Circle,g as circleDefaultValues};
|
|
2
2
|
//# sourceMappingURL=Circle.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Circle.min.mjs","sources":["../../../src/shapes/Circle.ts"],"sourcesContent":["import type { ObjectEvents } from '../EventTypeDefs';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { cos } from '../util/misc/cos';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { sin } from '../util/misc/sin';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { CSSRules } from '../parser/typedefs';\n\ninterface UniqueCircleProps {\n /**\n * Radius of this circle\n * @type Number\n * @default 0\n */\n radius: number;\n\n /**\n * Angle for the start of the circle, in degrees.\n * @type TDegree 0 - 359\n * @default 0\n */\n startAngle: number;\n\n /**\n * Angle for the end of the circle, in degrees\n * @type TDegree 1 - 360\n * @default 360\n */\n endAngle: number;\n\n /**\n * Orientation for the direction of the circle.\n * Setting to true will switch the arc of the circle to traverse from startAngle to endAngle in a counter-clockwise direction.\n * Note: this will only change how the circle is drawn, and does not affect rotational transformation.\n * @default false\n */\n counterClockwise: boolean;\n}\n\nexport interface SerializedCircleProps\n extends SerializedObjectProps,\n UniqueCircleProps {}\n\nexport interface CircleProps extends FabricObjectProps, UniqueCircleProps {}\n\nconst CIRCLE_PROPS = [\n 'radius',\n 'startAngle',\n 'endAngle',\n 'counterClockwise',\n] as const;\n\nexport const circleDefaultValues: Partial<TClassProperties<Circle>> = {\n radius: 0,\n startAngle: 0,\n endAngle: 360,\n counterClockwise: false,\n};\n\nexport class Circle<\n Props extends TOptions<CircleProps> = Partial<CircleProps>,\n SProps extends SerializedCircleProps = SerializedCircleProps,\n EventSpec extends ObjectEvents = ObjectEvents\n >\n extends FabricObject<Props, SProps, EventSpec>\n implements UniqueCircleProps\n{\n declare radius: number;\n declare startAngle: number;\n declare endAngle: number;\n declare counterClockwise: boolean;\n\n static type = 'Circle';\n\n static cacheProperties = [...cacheProperties, ...CIRCLE_PROPS];\n\n static ownDefaults = circleDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Circle.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Circle.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n super._set(key, value);\n\n if (key === 'radius') {\n this.setRadius(value);\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n ctx.arc(\n 0,\n 0,\n this.radius,\n degreesToRadians(this.startAngle),\n degreesToRadians(this.endAngle),\n this.counterClockwise\n );\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusX(): number {\n return this.get('radius') * this.get('scaleX');\n }\n\n /**\n * Returns vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusY(): number {\n return this.get('radius') * this.get('scaleY');\n }\n\n /**\n * Sets radius of an object (and updates width accordingly)\n */\n setRadius(value: number) {\n this.radius = value;\n this.set({ width: value * 2, height: value * 2 });\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([...CIRCLE_PROPS, ...propertiesToInclude]);\n }\n\n /* _TO_SVG_START_ */\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(): string[] {\n const angle = (this.endAngle - this.startAngle) % 360;\n\n if (angle === 0) {\n return [\n '<circle ',\n 'COMMON_PARTS',\n 'cx=\"0\" cy=\"0\" ',\n 'r=\"',\n `${this.radius}`,\n '\" />\\n',\n ];\n } else {\n const { radius } = this;\n const start = degreesToRadians(this.startAngle),\n end = degreesToRadians(this.endAngle),\n startX = cos(start) * radius,\n startY = sin(start) * radius,\n endX = cos(end) * radius,\n endY = sin(end) * radius,\n largeFlag = angle > 180 ? 1 : 0,\n sweepFlag = this.counterClockwise ? 0 : 1;\n return [\n `<path d=\"M ${startX} ${startY} A ${radius} ${radius} 0 ${largeFlag} ${sweepFlag} ${endX} ${endY}\" `,\n 'COMMON_PARTS',\n ' />\\n',\n ];\n }\n }\n /* _TO_SVG_END_ */\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Circle.fromElement})\n * @static\n * @memberOf Circle\n * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement\n */\n static ATTRIBUTE_NAMES = ['cx', 'cy', 'r', ...SHARED_ATTRIBUTES];\n\n /**\n * Returns {@link Circle} instance from an SVG element\n * @static\n * @memberOf Circle\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Partial Circle object to default missing properties on the element.\n * @throws {Error} If value of `r` attribute is missing or invalid\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules\n ): Promise<Circle> {\n const {\n left = 0,\n top = 0,\n radius = 0,\n ...otherParsedAttributes\n } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules\n ) as Partial<CircleProps>;\n\n // this probably requires to be fixed for default origins not being top/left.\n\n return new this({\n ...otherParsedAttributes,\n radius,\n left: left - radius,\n top: top - radius,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * @todo how do we declare this??\n */\n static fromObject<T extends TOptions<SerializedCircleProps>>(object: T) {\n return super._fromObject<Circle>(object);\n }\n}\n\nclassRegistry.setClass(Circle);\nclassRegistry.setSVGClass(Circle);\n"],"names":["CIRCLE_PROPS","circleDefaultValues","radius","startAngle","endAngle","counterClockwise","Circle","FabricObject","getDefaults","_objectSpread","super","ownDefaults","constructor","options","Object","assign","this","setOptions","_set","key","value","setRadius","_render","ctx","beginPath","arc","degreesToRadians","_renderPaintInOrder","getRadiusX","get","getRadiusY","set","width","height","toObject","propertiesToInclude","arguments","length","undefined","_toSVG","angle","concat","start","end","startX","cos","startY","sin","endX","endY","largeFlag","sweepFlag","fromElement","element","cssRules","_ref","parseAttributes","ATTRIBUTE_NAMES","left","top","otherParsedAttributes","_objectWithoutProperties","_excluded","fromObject","object","_fromObject","_defineProperty","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"6oBAiDMA,EAAe,CACnB,SACA,aACA,WACA,oBAGWC,EAAyD,CACpEC,OAAQ,EACRC,WAAY,EACZC,SAAU,IACVC,kBAAkB,GAGb,MAAMC,UAKHC,EAcR,kBAAOC,GACL,OAAAC,EAAAA,EAAA,GACKC,MAAMF,eACNF,EAAOK,YAEd,CAMAC,WAAAA,CAAYC,GACVH,QACAI,OAAOC,OAAOC,KAAMV,EAAOK,aAC3BK,KAAKC,WAAWJ,EAClB,CAOAK,IAAAA,CAAKC,EAAaC,GAOhB,OANAV,MAAMQ,KAAKC,EAAKC,GAEJ,WAARD,GACFH,KAAKK,UAAUD,GAGVJ,IACT,CAMAM,OAAAA,CAAQC,GACNA,EAAIC,YACJD,EAAIE,IACF,EACA,EACAT,KAAKd,OACLwB,EAAiBV,KAAKb,YACtBuB,EAAiBV,KAAKZ,UACtBY,KAAKX,kBAEPW,KAAKW,oBAAoBJ,EAC3B,CAMAK,UAAAA,GACE,OAAOZ,KAAKa,IAAI,UAAYb,KAAKa,IAAI,SACvC,CAMAC,UAAAA,GACE,OAAOd,KAAKa,IAAI,UAAYb,KAAKa,IAAI,SACvC,CAKAR,SAAAA,CAAUD,GACRJ,KAAKd,OAASkB,EACdJ,KAAKe,IAAI,CAAEC,MAAe,EAARZ,EAAWa,OAAgB,EAARb,GACvC,CAOAc,QAAAA,GAGsD,IAApDC,EAAwBC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAC3B,OAAO1B,MAAMwB,SAAS,IAAIlC,KAAiBmC,GAC7C,CASAI,MAAAA,GACE,MAAMC,GAASxB,KAAKZ,SAAWY,KAAKb,YAAc,IAElD,GAAc,IAAVqC,EACF,MAAO,CACL,WACA,eACA,iBACA,MAAKC,GAAAA,OACFzB,KAAKd,QACR,UAEG,CACL,MAAMA,OAAEA,GAAWc,KACb0B,EAAQhB,EAAiBV,KAAKb,YAClCwC,EAAMjB,EAAiBV,KAAKZ,UAC5BwC,EAASC,EAAIH,GAASxC,EACtB4C,EAASC,EAAIL,GAASxC,EACtB8C,EAAOH,EAAIF,GAAOzC,EAClB+C,EAAOF,EAAIJ,GAAOzC,EAClBgD,EAAYV,EAAQ,IAAM,EAAI,EAC9BW,EAAYnC,KAAKX,iBAAmB,EAAI,EAC1C,MAAO,eAAAoC,OACSG,EAAM,KAAAH,OAAIK,EAAML,OAAAA,OAAMvC,EAAM,KAAAuC,OAAIvC,EAAMuC,OAAAA,OAAMS,OAAST,OAAIU,EAAS,KAAAV,OAAIO,EAAIP,KAAAA,OAAIQ,EAAI,MAChG,eACA,QAEJ,CACF,CAoBA,wBAAaG,CACXC,EACAxC,EACAyC,GAEA,MAAAC,EAKIC,EACFH,EACArC,KAAKyC,gBACLH,IARII,KACJA,EAAO,EAACC,IACRA,EAAM,EAACzD,OACPA,EAAS,GAEVqD,EADIK,EAAqBC,EAAAN,EAAAO,GAS1B,OAAO,IAAI9C,KAAIP,EAAAA,KACVmD,GAAqB,GAAA,CACxB1D,SACAwD,KAAMA,EAAOxD,EACbyD,IAAKA,EAAMzD,IAEf,CAOA,iBAAO6D,CAAsDC,GAC3D,OAAOtD,MAAMuD,YAAoBD,EACnC,EACDE,EAjMY5D,EAAM,OAaH,UAAQ4D,EAbX5D,EAec,kBAAA,IAAI6D,KAAoBnE,IAAakE,EAfnD5D,EAAM,cAiBIL,GAAmBiE,EAjB7B5D,EAqJc,kBAAA,CAAC,KAAM,KAAM,OAAQ8D,IA8ChDC,EAAcC,SAAShE,GACvB+D,EAAcE,YAAYjE"}
|
|
1
|
+
{"version":3,"file":"Circle.min.mjs","sources":["../../../src/shapes/Circle.ts"],"sourcesContent":["import type { ObjectEvents } from '../EventTypeDefs';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { cos } from '../util/misc/cos';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { sin } from '../util/misc/sin';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { CSSRules } from '../parser/typedefs';\nimport { SCALE_X, SCALE_Y } from '../constants';\n\ninterface UniqueCircleProps {\n /**\n * Radius of this circle\n * @type Number\n * @default 0\n */\n radius: number;\n\n /**\n * Angle for the start of the circle, in degrees.\n * @type TDegree 0 - 359\n * @default 0\n */\n startAngle: number;\n\n /**\n * Angle for the end of the circle, in degrees\n * @type TDegree 1 - 360\n * @default 360\n */\n endAngle: number;\n\n /**\n * Orientation for the direction of the circle.\n * Setting to true will switch the arc of the circle to traverse from startAngle to endAngle in a counter-clockwise direction.\n * Note: this will only change how the circle is drawn, and does not affect rotational transformation.\n * @default false\n */\n counterClockwise: boolean;\n}\n\nexport interface SerializedCircleProps\n extends SerializedObjectProps,\n UniqueCircleProps {}\n\nexport interface CircleProps extends FabricObjectProps, UniqueCircleProps {}\n\nconst CIRCLE_PROPS = [\n 'radius',\n 'startAngle',\n 'endAngle',\n 'counterClockwise',\n] as const;\n\nexport const circleDefaultValues: Partial<TClassProperties<Circle>> = {\n radius: 0,\n startAngle: 0,\n endAngle: 360,\n counterClockwise: false,\n};\n\nexport class Circle<\n Props extends TOptions<CircleProps> = Partial<CircleProps>,\n SProps extends SerializedCircleProps = SerializedCircleProps,\n EventSpec extends ObjectEvents = ObjectEvents\n >\n extends FabricObject<Props, SProps, EventSpec>\n implements UniqueCircleProps\n{\n declare radius: number;\n declare startAngle: number;\n declare endAngle: number;\n declare counterClockwise: boolean;\n\n static type = 'Circle';\n\n static cacheProperties = [...cacheProperties, ...CIRCLE_PROPS];\n\n static ownDefaults = circleDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Circle.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Circle.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n super._set(key, value);\n\n if (key === 'radius') {\n this.setRadius(value);\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n ctx.arc(\n 0,\n 0,\n this.radius,\n degreesToRadians(this.startAngle),\n degreesToRadians(this.endAngle),\n this.counterClockwise\n );\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusX(): number {\n return this.get('radius') * this.get(SCALE_X);\n }\n\n /**\n * Returns vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusY(): number {\n return this.get('radius') * this.get(SCALE_Y);\n }\n\n /**\n * Sets radius of an object (and updates width accordingly)\n */\n setRadius(value: number) {\n this.radius = value;\n this.set({ width: value * 2, height: value * 2 });\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([...CIRCLE_PROPS, ...propertiesToInclude]);\n }\n\n /* _TO_SVG_START_ */\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(): string[] {\n const angle = (this.endAngle - this.startAngle) % 360;\n\n if (angle === 0) {\n return [\n '<circle ',\n 'COMMON_PARTS',\n 'cx=\"0\" cy=\"0\" ',\n 'r=\"',\n `${this.radius}`,\n '\" />\\n',\n ];\n } else {\n const { radius } = this;\n const start = degreesToRadians(this.startAngle),\n end = degreesToRadians(this.endAngle),\n startX = cos(start) * radius,\n startY = sin(start) * radius,\n endX = cos(end) * radius,\n endY = sin(end) * radius,\n largeFlag = angle > 180 ? 1 : 0,\n sweepFlag = this.counterClockwise ? 0 : 1;\n return [\n `<path d=\"M ${startX} ${startY} A ${radius} ${radius} 0 ${largeFlag} ${sweepFlag} ${endX} ${endY}\" `,\n 'COMMON_PARTS',\n ' />\\n',\n ];\n }\n }\n /* _TO_SVG_END_ */\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Circle.fromElement})\n * @static\n * @memberOf Circle\n * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement\n */\n static ATTRIBUTE_NAMES = ['cx', 'cy', 'r', ...SHARED_ATTRIBUTES];\n\n /**\n * Returns {@link Circle} instance from an SVG element\n * @static\n * @memberOf Circle\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Partial Circle object to default missing properties on the element.\n * @throws {Error} If value of `r` attribute is missing or invalid\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules\n ): Promise<Circle> {\n const {\n left = 0,\n top = 0,\n radius = 0,\n ...otherParsedAttributes\n } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules\n ) as Partial<CircleProps>;\n\n // this probably requires to be fixed for default origins not being top/left.\n\n return new this({\n ...otherParsedAttributes,\n radius,\n left: left - radius,\n top: top - radius,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * @todo how do we declare this??\n */\n static fromObject<T extends TOptions<SerializedCircleProps>>(object: T) {\n return super._fromObject<Circle>(object);\n }\n}\n\nclassRegistry.setClass(Circle);\nclassRegistry.setSVGClass(Circle);\n"],"names":["CIRCLE_PROPS","circleDefaultValues","radius","startAngle","endAngle","counterClockwise","Circle","FabricObject","getDefaults","_objectSpread","super","ownDefaults","constructor","options","Object","assign","this","setOptions","_set","key","value","setRadius","_render","ctx","beginPath","arc","degreesToRadians","_renderPaintInOrder","getRadiusX","get","SCALE_X","getRadiusY","SCALE_Y","set","width","height","toObject","propertiesToInclude","arguments","length","undefined","_toSVG","angle","concat","start","end","startX","cos","startY","sin","endX","endY","largeFlag","sweepFlag","fromElement","element","cssRules","_ref","parseAttributes","ATTRIBUTE_NAMES","left","top","otherParsedAttributes","_objectWithoutProperties","_excluded","fromObject","object","_fromObject","_defineProperty","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"ysBAkDMA,EAAe,CACnB,SACA,aACA,WACA,oBAGWC,EAAyD,CACpEC,OAAQ,EACRC,WAAY,EACZC,SAAU,IACVC,kBAAkB,GAGb,MAAMC,UAKHC,EAcR,kBAAOC,GACL,OAAAC,EAAAA,EAAA,GACKC,MAAMF,eACNF,EAAOK,YAEd,CAMAC,WAAAA,CAAYC,GACVH,QACAI,OAAOC,OAAOC,KAAMV,EAAOK,aAC3BK,KAAKC,WAAWJ,EAClB,CAOAK,IAAAA,CAAKC,EAAaC,GAOhB,OANAV,MAAMQ,KAAKC,EAAKC,GAEJ,WAARD,GACFH,KAAKK,UAAUD,GAGVJ,IACT,CAMAM,OAAAA,CAAQC,GACNA,EAAIC,YACJD,EAAIE,IACF,EACA,EACAT,KAAKd,OACLwB,EAAiBV,KAAKb,YACtBuB,EAAiBV,KAAKZ,UACtBY,KAAKX,kBAEPW,KAAKW,oBAAoBJ,EAC3B,CAMAK,UAAAA,GACE,OAAOZ,KAAKa,IAAI,UAAYb,KAAKa,IAAIC,EACvC,CAMAC,UAAAA,GACE,OAAOf,KAAKa,IAAI,UAAYb,KAAKa,IAAIG,EACvC,CAKAX,SAAAA,CAAUD,GACRJ,KAAKd,OAASkB,EACdJ,KAAKiB,IAAI,CAAEC,MAAe,EAARd,EAAWe,OAAgB,EAARf,GACvC,CAOAgB,QAAAA,GAGsD,IAApDC,EAAwBC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAC3B,OAAO5B,MAAM0B,SAAS,IAAIpC,KAAiBqC,GAC7C,CASAI,MAAAA,GACE,MAAMC,GAAS1B,KAAKZ,SAAWY,KAAKb,YAAc,IAElD,GAAc,IAAVuC,EACF,MAAO,CACL,WACA,eACA,iBACA,MAAKC,GAAAA,OACF3B,KAAKd,QACR,UAEG,CACL,MAAMA,OAAEA,GAAWc,KACb4B,EAAQlB,EAAiBV,KAAKb,YAClC0C,EAAMnB,EAAiBV,KAAKZ,UAC5B0C,EAASC,EAAIH,GAAS1C,EACtB8C,EAASC,EAAIL,GAAS1C,EACtBgD,EAAOH,EAAIF,GAAO3C,EAClBiD,EAAOF,EAAIJ,GAAO3C,EAClBkD,EAAYV,EAAQ,IAAM,EAAI,EAC9BW,EAAYrC,KAAKX,iBAAmB,EAAI,EAC1C,MAAO,eAAAsC,OACSG,EAAM,KAAAH,OAAIK,EAAML,OAAAA,OAAMzC,EAAM,KAAAyC,OAAIzC,EAAMyC,OAAAA,OAAMS,OAAST,OAAIU,EAAS,KAAAV,OAAIO,EAAIP,KAAAA,OAAIQ,EAAI,MAChG,eACA,QAEJ,CACF,CAoBA,wBAAaG,CACXC,EACA1C,EACA2C,GAEA,MAAAC,EAKIC,EACFH,EACAvC,KAAK2C,gBACLH,IARII,KACJA,EAAO,EAACC,IACRA,EAAM,EAAC3D,OACPA,EAAS,GAEVuD,EADIK,EAAqBC,EAAAN,EAAAO,GAS1B,OAAO,IAAIhD,KAAIP,EAAAA,KACVqD,GAAqB,GAAA,CACxB5D,SACA0D,KAAMA,EAAO1D,EACb2D,IAAKA,EAAM3D,IAEf,CAOA,iBAAO+D,CAAsDC,GAC3D,OAAOxD,MAAMyD,YAAoBD,EACnC,EACDE,EAjMY9D,EAAM,OAaH,UAAQ8D,EAbX9D,EAec,kBAAA,IAAI+D,KAAoBrE,IAAaoE,EAfnD9D,EAAM,cAiBIL,GAAmBmE,EAjB7B9D,EAqJc,kBAAA,CAAC,KAAM,KAAM,OAAQgE,IA8ChDC,EAAcC,SAASlE,GACvBiE,EAAcE,YAAYnE"}
|
|
@@ -6,6 +6,7 @@ import { degreesToRadians } from '../util/misc/radiansDegreesConversion.mjs';
|
|
|
6
6
|
import { sin } from '../util/misc/sin.mjs';
|
|
7
7
|
import { classRegistry } from '../ClassRegistry.mjs';
|
|
8
8
|
import { FabricObject } from './Object/FabricObject.mjs';
|
|
9
|
+
import { SCALE_X, SCALE_Y } from '../constants.mjs';
|
|
9
10
|
import { cacheProperties } from './Object/defaultValues.mjs';
|
|
10
11
|
|
|
11
12
|
const _excluded = ["left", "top", "radius"];
|
|
@@ -59,7 +60,7 @@ class Circle extends FabricObject {
|
|
|
59
60
|
* @return {Number}
|
|
60
61
|
*/
|
|
61
62
|
getRadiusX() {
|
|
62
|
-
return this.get('radius') * this.get(
|
|
63
|
+
return this.get('radius') * this.get(SCALE_X);
|
|
63
64
|
}
|
|
64
65
|
|
|
65
66
|
/**
|
|
@@ -67,7 +68,7 @@ class Circle extends FabricObject {
|
|
|
67
68
|
* @return {Number}
|
|
68
69
|
*/
|
|
69
70
|
getRadiusY() {
|
|
70
|
-
return this.get('radius') * this.get(
|
|
71
|
+
return this.get('radius') * this.get(SCALE_Y);
|
|
71
72
|
}
|
|
72
73
|
|
|
73
74
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Circle.mjs","sources":["../../../src/shapes/Circle.ts"],"sourcesContent":["import type { ObjectEvents } from '../EventTypeDefs';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { cos } from '../util/misc/cos';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { sin } from '../util/misc/sin';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { CSSRules } from '../parser/typedefs';\n\ninterface UniqueCircleProps {\n /**\n * Radius of this circle\n * @type Number\n * @default 0\n */\n radius: number;\n\n /**\n * Angle for the start of the circle, in degrees.\n * @type TDegree 0 - 359\n * @default 0\n */\n startAngle: number;\n\n /**\n * Angle for the end of the circle, in degrees\n * @type TDegree 1 - 360\n * @default 360\n */\n endAngle: number;\n\n /**\n * Orientation for the direction of the circle.\n * Setting to true will switch the arc of the circle to traverse from startAngle to endAngle in a counter-clockwise direction.\n * Note: this will only change how the circle is drawn, and does not affect rotational transformation.\n * @default false\n */\n counterClockwise: boolean;\n}\n\nexport interface SerializedCircleProps\n extends SerializedObjectProps,\n UniqueCircleProps {}\n\nexport interface CircleProps extends FabricObjectProps, UniqueCircleProps {}\n\nconst CIRCLE_PROPS = [\n 'radius',\n 'startAngle',\n 'endAngle',\n 'counterClockwise',\n] as const;\n\nexport const circleDefaultValues: Partial<TClassProperties<Circle>> = {\n radius: 0,\n startAngle: 0,\n endAngle: 360,\n counterClockwise: false,\n};\n\nexport class Circle<\n Props extends TOptions<CircleProps> = Partial<CircleProps>,\n SProps extends SerializedCircleProps = SerializedCircleProps,\n EventSpec extends ObjectEvents = ObjectEvents\n >\n extends FabricObject<Props, SProps, EventSpec>\n implements UniqueCircleProps\n{\n declare radius: number;\n declare startAngle: number;\n declare endAngle: number;\n declare counterClockwise: boolean;\n\n static type = 'Circle';\n\n static cacheProperties = [...cacheProperties, ...CIRCLE_PROPS];\n\n static ownDefaults = circleDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Circle.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Circle.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n super._set(key, value);\n\n if (key === 'radius') {\n this.setRadius(value);\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n ctx.arc(\n 0,\n 0,\n this.radius,\n degreesToRadians(this.startAngle),\n degreesToRadians(this.endAngle),\n this.counterClockwise\n );\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusX(): number {\n return this.get('radius') * this.get('scaleX');\n }\n\n /**\n * Returns vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusY(): number {\n return this.get('radius') * this.get('scaleY');\n }\n\n /**\n * Sets radius of an object (and updates width accordingly)\n */\n setRadius(value: number) {\n this.radius = value;\n this.set({ width: value * 2, height: value * 2 });\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([...CIRCLE_PROPS, ...propertiesToInclude]);\n }\n\n /* _TO_SVG_START_ */\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(): string[] {\n const angle = (this.endAngle - this.startAngle) % 360;\n\n if (angle === 0) {\n return [\n '<circle ',\n 'COMMON_PARTS',\n 'cx=\"0\" cy=\"0\" ',\n 'r=\"',\n `${this.radius}`,\n '\" />\\n',\n ];\n } else {\n const { radius } = this;\n const start = degreesToRadians(this.startAngle),\n end = degreesToRadians(this.endAngle),\n startX = cos(start) * radius,\n startY = sin(start) * radius,\n endX = cos(end) * radius,\n endY = sin(end) * radius,\n largeFlag = angle > 180 ? 1 : 0,\n sweepFlag = this.counterClockwise ? 0 : 1;\n return [\n `<path d=\"M ${startX} ${startY} A ${radius} ${radius} 0 ${largeFlag} ${sweepFlag} ${endX} ${endY}\" `,\n 'COMMON_PARTS',\n ' />\\n',\n ];\n }\n }\n /* _TO_SVG_END_ */\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Circle.fromElement})\n * @static\n * @memberOf Circle\n * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement\n */\n static ATTRIBUTE_NAMES = ['cx', 'cy', 'r', ...SHARED_ATTRIBUTES];\n\n /**\n * Returns {@link Circle} instance from an SVG element\n * @static\n * @memberOf Circle\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Partial Circle object to default missing properties on the element.\n * @throws {Error} If value of `r` attribute is missing or invalid\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules\n ): Promise<Circle> {\n const {\n left = 0,\n top = 0,\n radius = 0,\n ...otherParsedAttributes\n } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules\n ) as Partial<CircleProps>;\n\n // this probably requires to be fixed for default origins not being top/left.\n\n return new this({\n ...otherParsedAttributes,\n radius,\n left: left - radius,\n top: top - radius,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * @todo how do we declare this??\n */\n static fromObject<T extends TOptions<SerializedCircleProps>>(object: T) {\n return super._fromObject<Circle>(object);\n }\n}\n\nclassRegistry.setClass(Circle);\nclassRegistry.setSVGClass(Circle);\n"],"names":["CIRCLE_PROPS","circleDefaultValues","radius","startAngle","endAngle","counterClockwise","Circle","FabricObject","getDefaults","_objectSpread","ownDefaults","constructor","options","Object","assign","setOptions","_set","key","value","setRadius","_render","ctx","beginPath","arc","degreesToRadians","_renderPaintInOrder","getRadiusX","get","getRadiusY","set","width","height","toObject","propertiesToInclude","arguments","length","undefined","_toSVG","angle","concat","start","end","startX","cos","startY","sin","endX","endY","largeFlag","sweepFlag","fromElement","element","cssRules","_ref","parseAttributes","ATTRIBUTE_NAMES","left","top","otherParsedAttributes","_objectWithoutProperties","_excluded","fromObject","object","_fromObject","_defineProperty","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Circle.mjs","sources":["../../../src/shapes/Circle.ts"],"sourcesContent":["import type { ObjectEvents } from '../EventTypeDefs';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { cos } from '../util/misc/cos';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { sin } from '../util/misc/sin';\nimport { classRegistry } from '../ClassRegistry';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { CSSRules } from '../parser/typedefs';\nimport { SCALE_X, SCALE_Y } from '../constants';\n\ninterface UniqueCircleProps {\n /**\n * Radius of this circle\n * @type Number\n * @default 0\n */\n radius: number;\n\n /**\n * Angle for the start of the circle, in degrees.\n * @type TDegree 0 - 359\n * @default 0\n */\n startAngle: number;\n\n /**\n * Angle for the end of the circle, in degrees\n * @type TDegree 1 - 360\n * @default 360\n */\n endAngle: number;\n\n /**\n * Orientation for the direction of the circle.\n * Setting to true will switch the arc of the circle to traverse from startAngle to endAngle in a counter-clockwise direction.\n * Note: this will only change how the circle is drawn, and does not affect rotational transformation.\n * @default false\n */\n counterClockwise: boolean;\n}\n\nexport interface SerializedCircleProps\n extends SerializedObjectProps,\n UniqueCircleProps {}\n\nexport interface CircleProps extends FabricObjectProps, UniqueCircleProps {}\n\nconst CIRCLE_PROPS = [\n 'radius',\n 'startAngle',\n 'endAngle',\n 'counterClockwise',\n] as const;\n\nexport const circleDefaultValues: Partial<TClassProperties<Circle>> = {\n radius: 0,\n startAngle: 0,\n endAngle: 360,\n counterClockwise: false,\n};\n\nexport class Circle<\n Props extends TOptions<CircleProps> = Partial<CircleProps>,\n SProps extends SerializedCircleProps = SerializedCircleProps,\n EventSpec extends ObjectEvents = ObjectEvents\n >\n extends FabricObject<Props, SProps, EventSpec>\n implements UniqueCircleProps\n{\n declare radius: number;\n declare startAngle: number;\n declare endAngle: number;\n declare counterClockwise: boolean;\n\n static type = 'Circle';\n\n static cacheProperties = [...cacheProperties, ...CIRCLE_PROPS];\n\n static ownDefaults = circleDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Circle.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Circle.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set(key: string, value: any) {\n super._set(key, value);\n\n if (key === 'radius') {\n this.setRadius(value);\n }\n\n return this;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n ctx.arc(\n 0,\n 0,\n this.radius,\n degreesToRadians(this.startAngle),\n degreesToRadians(this.endAngle),\n this.counterClockwise\n );\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusX(): number {\n return this.get('radius') * this.get(SCALE_X);\n }\n\n /**\n * Returns vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusY(): number {\n return this.get('radius') * this.get(SCALE_Y);\n }\n\n /**\n * Sets radius of an object (and updates width accordingly)\n */\n setRadius(value: number) {\n this.radius = value;\n this.set({ width: value * 2, height: value * 2 });\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([...CIRCLE_PROPS, ...propertiesToInclude]);\n }\n\n /* _TO_SVG_START_ */\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(): string[] {\n const angle = (this.endAngle - this.startAngle) % 360;\n\n if (angle === 0) {\n return [\n '<circle ',\n 'COMMON_PARTS',\n 'cx=\"0\" cy=\"0\" ',\n 'r=\"',\n `${this.radius}`,\n '\" />\\n',\n ];\n } else {\n const { radius } = this;\n const start = degreesToRadians(this.startAngle),\n end = degreesToRadians(this.endAngle),\n startX = cos(start) * radius,\n startY = sin(start) * radius,\n endX = cos(end) * radius,\n endY = sin(end) * radius,\n largeFlag = angle > 180 ? 1 : 0,\n sweepFlag = this.counterClockwise ? 0 : 1;\n return [\n `<path d=\"M ${startX} ${startY} A ${radius} ${radius} 0 ${largeFlag} ${sweepFlag} ${endX} ${endY}\" `,\n 'COMMON_PARTS',\n ' />\\n',\n ];\n }\n }\n /* _TO_SVG_END_ */\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Circle.fromElement})\n * @static\n * @memberOf Circle\n * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement\n */\n static ATTRIBUTE_NAMES = ['cx', 'cy', 'r', ...SHARED_ATTRIBUTES];\n\n /**\n * Returns {@link Circle} instance from an SVG element\n * @static\n * @memberOf Circle\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Partial Circle object to default missing properties on the element.\n * @throws {Error} If value of `r` attribute is missing or invalid\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules\n ): Promise<Circle> {\n const {\n left = 0,\n top = 0,\n radius = 0,\n ...otherParsedAttributes\n } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules\n ) as Partial<CircleProps>;\n\n // this probably requires to be fixed for default origins not being top/left.\n\n return new this({\n ...otherParsedAttributes,\n radius,\n left: left - radius,\n top: top - radius,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * @todo how do we declare this??\n */\n static fromObject<T extends TOptions<SerializedCircleProps>>(object: T) {\n return super._fromObject<Circle>(object);\n }\n}\n\nclassRegistry.setClass(Circle);\nclassRegistry.setSVGClass(Circle);\n"],"names":["CIRCLE_PROPS","circleDefaultValues","radius","startAngle","endAngle","counterClockwise","Circle","FabricObject","getDefaults","_objectSpread","ownDefaults","constructor","options","Object","assign","setOptions","_set","key","value","setRadius","_render","ctx","beginPath","arc","degreesToRadians","_renderPaintInOrder","getRadiusX","get","SCALE_X","getRadiusY","SCALE_Y","set","width","height","toObject","propertiesToInclude","arguments","length","undefined","_toSVG","angle","concat","start","end","startX","cos","startY","sin","endX","endY","largeFlag","sweepFlag","fromElement","element","cssRules","_ref","parseAttributes","ATTRIBUTE_NAMES","left","top","otherParsedAttributes","_objectWithoutProperties","_excluded","fromObject","object","_fromObject","_defineProperty","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t,objectSpread2 as r}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{twoMathPi as
|
|
1
|
+
import{defineProperty as t,objectSpread2 as r}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{SCALE_X as e,SCALE_Y as s,twoMathPi as i}from"../constants.min.mjs";import{SHARED_ATTRIBUTES as n}from"../parser/attributes.min.mjs";import{parseAttributes as o}from"../parser/parseAttributes.min.mjs";import{classRegistry as a}from"../ClassRegistry.min.mjs";import{FabricObject as c}from"./Object/FabricObject.min.mjs";import{cacheProperties as m}from"./Object/defaultValues.min.mjs";const h={rx:0,ry:0},l=["rx","ry"];class p extends c{static getDefaults(){return r(r({},super.getDefaults()),p.ownDefaults)}constructor(t){super(),Object.assign(this,p.ownDefaults),this.setOptions(t)}_set(t,r){switch(super._set(t,r),t){case"rx":this.rx=r,this.set("width",2*r);break;case"ry":this.ry=r,this.set("height",2*r)}return this}getRx(){return this.get("rx")*this.get(e)}getRy(){return this.get("ry")*this.get(s)}toObject(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return super.toObject([...l,...t])}_toSVG(){return["<ellipse ","COMMON_PARTS",'cx="0" cy="0" rx="'.concat(this.rx,'" ry="').concat(this.ry,'" />\n')]}_render(t){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(0,0,this.rx,0,i,!1),t.restore(),this._renderPaintInOrder(t)}static async fromElement(t,r,e){const s=o(t,this.ATTRIBUTE_NAMES,e);return s.left=(s.left||0)-s.rx,s.top=(s.top||0)-s.ry,new this(s)}}t(p,"type","Ellipse"),t(p,"cacheProperties",[...m,...l]),t(p,"ownDefaults",h),t(p,"ATTRIBUTE_NAMES",[...n,"cx","cy","rx","ry"]),a.setClass(p),a.setSVGClass(p);export{p as Ellipse,h as ellipseDefaultValues};
|
|
2
2
|
//# sourceMappingURL=Ellipse.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ellipse.min.mjs","sources":["../../../src/shapes/Ellipse.ts"],"sourcesContent":["import { twoMathPi } 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 ellipseDefaultValues: Partial<TClassProperties<Ellipse>> = {\n rx: 0,\n ry: 0,\n};\n\ninterface UniqueEllipseProps {\n rx: number;\n ry: number;\n}\n\nexport interface SerializedEllipseProps\n extends SerializedObjectProps,\n UniqueEllipseProps {}\n\nexport interface EllipseProps extends FabricObjectProps, UniqueEllipseProps {}\n\nconst ELLIPSE_PROPS = ['rx', 'ry'] as const;\n\nexport class Ellipse<\n Props extends TOptions<EllipseProps> = Partial<EllipseProps>,\n SProps extends SerializedEllipseProps = SerializedEllipseProps,\n EventSpec extends ObjectEvents = ObjectEvents\n >\n extends FabricObject<Props, SProps, EventSpec>\n implements EllipseProps\n{\n /**\n * Horizontal radius\n * @type Number\n * @default\n */\n declare rx: number;\n\n /**\n * Vertical radius\n * @type Number\n * @default\n */\n declare ry: number;\n\n static type = 'Ellipse';\n\n static cacheProperties = [...cacheProperties, ...ELLIPSE_PROPS];\n\n static ownDefaults = ellipseDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Ellipse.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Ellipse.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {Ellipse} thisArg\n */\n _set(key: string, value: any) {\n super._set(key, value);\n switch (key) {\n case 'rx':\n this.rx = value;\n this.set('width', value * 2);\n break;\n\n case 'ry':\n this.ry = value;\n this.set('height', value * 2);\n break;\n }\n return this;\n }\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRx() {\n return this.get('rx') * this.get(
|
|
1
|
+
{"version":3,"file":"Ellipse.min.mjs","sources":["../../../src/shapes/Ellipse.ts"],"sourcesContent":["import { SCALE_X, SCALE_Y, twoMathPi } 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 ellipseDefaultValues: Partial<TClassProperties<Ellipse>> = {\n rx: 0,\n ry: 0,\n};\n\ninterface UniqueEllipseProps {\n rx: number;\n ry: number;\n}\n\nexport interface SerializedEllipseProps\n extends SerializedObjectProps,\n UniqueEllipseProps {}\n\nexport interface EllipseProps extends FabricObjectProps, UniqueEllipseProps {}\n\nconst ELLIPSE_PROPS = ['rx', 'ry'] as const;\n\nexport class Ellipse<\n Props extends TOptions<EllipseProps> = Partial<EllipseProps>,\n SProps extends SerializedEllipseProps = SerializedEllipseProps,\n EventSpec extends ObjectEvents = ObjectEvents\n >\n extends FabricObject<Props, SProps, EventSpec>\n implements EllipseProps\n{\n /**\n * Horizontal radius\n * @type Number\n * @default\n */\n declare rx: number;\n\n /**\n * Vertical radius\n * @type Number\n * @default\n */\n declare ry: number;\n\n static type = 'Ellipse';\n\n static cacheProperties = [...cacheProperties, ...ELLIPSE_PROPS];\n\n static ownDefaults = ellipseDefaultValues;\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Ellipse.ownDefaults,\n };\n }\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n constructor(options?: Props) {\n super();\n Object.assign(this, Ellipse.ownDefaults);\n this.setOptions(options);\n }\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {Ellipse} thisArg\n */\n _set(key: string, value: any) {\n super._set(key, value);\n switch (key) {\n case 'rx':\n this.rx = value;\n this.set('width', value * 2);\n break;\n\n case 'ry':\n this.ry = value;\n this.set('height', value * 2);\n break;\n }\n return this;\n }\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRx() {\n return this.get('rx') * this.get(SCALE_X);\n }\n\n /**\n * Returns Vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRy() {\n return this.get('ry') * this.get(SCALE_Y);\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([...ELLIPSE_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(): string[] {\n return [\n '<ellipse ',\n 'COMMON_PARTS',\n `cx=\"0\" cy=\"0\" rx=\"${this.rx}\" ry=\"${this.ry}\" />\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n ctx.beginPath();\n ctx.save();\n ctx.transform(1, 0, 0, this.ry / this.rx, 0, 0);\n ctx.arc(0, 0, this.rx, 0, twoMathPi, false);\n ctx.restore();\n this._renderPaintInOrder(ctx);\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Ellipse.fromElement})\n * @static\n * @memberOf Ellipse\n * @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES, 'cx', 'cy', 'rx', 'ry'];\n\n /**\n * Returns {@link Ellipse} instance from an SVG element\n * @static\n * @memberOf Ellipse\n * @param {HTMLElement} element Element to parse\n * @return {Ellipse}\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules\n ) {\n const parsedAttributes = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules\n );\n\n parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx;\n parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry;\n return new this(parsedAttributes);\n }\n\n /* _FROM_SVG_END_ */\n}\n\nclassRegistry.setClass(Ellipse);\nclassRegistry.setSVGClass(Ellipse);\n"],"names":["ellipseDefaultValues","rx","ry","ELLIPSE_PROPS","Ellipse","FabricObject","getDefaults","_objectSpread","super","ownDefaults","constructor","options","Object","assign","this","setOptions","_set","key","value","set","getRx","get","SCALE_X","getRy","SCALE_Y","toObject","propertiesToInclude","arguments","length","undefined","_toSVG","concat","_render","ctx","beginPath","save","transform","arc","twoMathPi","restore","_renderPaintInOrder","fromElement","element","cssRules","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","left","top","_defineProperty","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"4eAUO,MAAMA,EAA2D,CACtEC,GAAI,EACJC,GAAI,GAcAC,EAAgB,CAAC,KAAM,MAEtB,MAAMC,UAKHC,EAuBR,kBAAOC,GACL,OAAAC,EAAAA,EAAA,GACKC,MAAMF,eACNF,EAAQK,YAEf,CAMAC,WAAAA,CAAYC,GACVH,QACAI,OAAOC,OAAOC,KAAMV,EAAQK,aAC5BK,KAAKC,WAAWJ,EAClB,CAQAK,IAAAA,CAAKC,EAAaC,GAEhB,OADAV,MAAMQ,KAAKC,EAAKC,GACRD,GACN,IAAK,KACHH,KAAKb,GAAKiB,EACVJ,KAAKK,IAAI,QAAiB,EAARD,GAClB,MAEF,IAAK,KACHJ,KAAKZ,GAAKgB,EACVJ,KAAKK,IAAI,SAAkB,EAARD,GAGvB,OAAOJ,IACT,CAMAM,KAAAA,GACE,OAAON,KAAKO,IAAI,MAAQP,KAAKO,IAAIC,EACnC,CAMAC,KAAAA,GACE,OAAOT,KAAKO,IAAI,MAAQP,KAAKO,IAAIG,EACnC,CAOAC,QAAAA,GAGsD,IAApDC,EAAwBC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAC3B,OAAOnB,MAAMiB,SAAS,IAAItB,KAAkBuB,GAC9C,CAOAI,MAAAA,GACE,MAAO,CACL,YACA,eAAc,qBAAAC,OACOjB,KAAKb,aAAE8B,OAASjB,KAAKZ,GAC3C,UACH,CAMA8B,OAAAA,CAAQC,GACNA,EAAIC,YACJD,EAAIE,OACJF,EAAIG,UAAU,EAAG,EAAG,EAAGtB,KAAKZ,GAAKY,KAAKb,GAAI,EAAG,GAC7CgC,EAAII,IAAI,EAAG,EAAGvB,KAAKb,GAAI,EAAGqC,GAAW,GACrCL,EAAIM,UACJzB,KAAK0B,oBAAoBP,EAC3B,CAmBA,wBAAaQ,CACXC,EACA/B,EACAgC,GAEA,MAAMC,EAAmBC,EACvBH,EACA5B,KAAKgC,gBACLH,GAKF,OAFAC,EAAiBG,MAAQH,EAAiBG,MAAQ,GAAKH,EAAiB3C,GACxE2C,EAAiBI,KAAOJ,EAAiBI,KAAO,GAAKJ,EAAiB1C,GAC/D,IAAIY,KAAK8B,EAClB,EAzIAK,EAfW7C,EAAO,OAsBJ,WAAS6C,EAtBZ7C,EAwBc,kBAAA,IAAI8C,KAAoB/C,IAAc8C,EAxBpD7C,EAAO,cA0BGJ,GAAoBiD,EA1B9B7C,EAiIc,kBAAA,IAAI+C,EAAmB,KAAM,KAAM,KAAM,OA4BpEC,EAAcC,SAASjD,GACvBgD,EAAcE,YAAYlD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineProperty as _defineProperty, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.mjs';
|
|
2
|
-
import { twoMathPi } from '../constants.mjs';
|
|
2
|
+
import { SCALE_X, SCALE_Y, twoMathPi } from '../constants.mjs';
|
|
3
3
|
import { SHARED_ATTRIBUTES } from '../parser/attributes.mjs';
|
|
4
4
|
import { parseAttributes } from '../parser/parseAttributes.mjs';
|
|
5
5
|
import { classRegistry } from '../ClassRegistry.mjs';
|
|
@@ -52,7 +52,7 @@ class Ellipse extends FabricObject {
|
|
|
52
52
|
* @return {Number}
|
|
53
53
|
*/
|
|
54
54
|
getRx() {
|
|
55
|
-
return this.get('rx') * this.get(
|
|
55
|
+
return this.get('rx') * this.get(SCALE_X);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/**
|
|
@@ -60,7 +60,7 @@ class Ellipse extends FabricObject {
|
|
|
60
60
|
* @return {Number}
|
|
61
61
|
*/
|
|
62
62
|
getRy() {
|
|
63
|
-
return this.get('ry') * this.get(
|
|
63
|
+
return this.get('ry') * this.get(SCALE_Y);
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
/**
|