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.
Files changed (269) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +8 -18
  3. package/dist/fabric.d.ts +4 -0
  4. package/dist/fabric.d.ts.map +1 -1
  5. package/dist/fabric.min.mjs +1 -1
  6. package/dist/fabric.mjs +1 -0
  7. package/dist/fabric.mjs.map +1 -1
  8. package/dist/index.js +146 -107
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.min.js +1 -1
  11. package/dist/index.min.js.map +1 -1
  12. package/dist/index.min.mjs +1 -1
  13. package/dist/index.min.mjs.map +1 -1
  14. package/dist/index.mjs +146 -108
  15. package/dist/index.mjs.map +1 -1
  16. package/dist/index.node.cjs +146 -107
  17. package/dist/index.node.cjs.map +1 -1
  18. package/dist/index.node.mjs +146 -108
  19. package/dist/index.node.mjs.map +1 -1
  20. package/dist/package.json.min.mjs +1 -1
  21. package/dist/package.json.mjs +1 -1
  22. package/dist/src/EventTypeDefs.d.ts +2 -1
  23. package/dist/src/EventTypeDefs.d.ts.map +1 -1
  24. package/dist/src/LayoutManager/LayoutManager.d.ts.map +1 -1
  25. package/dist/src/LayoutManager/LayoutManager.min.mjs +1 -1
  26. package/dist/src/LayoutManager/LayoutManager.min.mjs.map +1 -1
  27. package/dist/src/LayoutManager/LayoutManager.mjs +13 -8
  28. package/dist/src/LayoutManager/LayoutManager.mjs.map +1 -1
  29. package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.min.mjs +1 -1
  30. package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.min.mjs.map +1 -1
  31. package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.mjs +3 -3
  32. package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.mjs.map +1 -1
  33. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts +1 -1
  34. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts.map +1 -1
  35. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.min.mjs +1 -1
  36. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.min.mjs.map +1 -1
  37. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.mjs +15 -9
  38. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.mjs.map +1 -1
  39. package/dist/src/Observable.d.ts +8 -0
  40. package/dist/src/Observable.d.ts.map +1 -1
  41. package/dist/src/Observable.min.mjs.map +1 -1
  42. package/dist/src/Observable.mjs +8 -0
  43. package/dist/src/Observable.mjs.map +1 -1
  44. package/dist/src/canvas/SelectableCanvas.d.ts.map +1 -1
  45. package/dist/src/canvas/SelectableCanvas.min.mjs +1 -1
  46. package/dist/src/canvas/SelectableCanvas.min.mjs.map +1 -1
  47. package/dist/src/canvas/SelectableCanvas.mjs +5 -5
  48. package/dist/src/canvas/SelectableCanvas.mjs.map +1 -1
  49. package/dist/src/canvas/StaticCanvas.d.ts +1 -1
  50. package/dist/src/constants.d.ts +16 -0
  51. package/dist/src/constants.d.ts.map +1 -1
  52. package/dist/src/constants.min.mjs +1 -1
  53. package/dist/src/constants.min.mjs.map +1 -1
  54. package/dist/src/constants.mjs +17 -1
  55. package/dist/src/constants.mjs.map +1 -1
  56. package/dist/src/controls/Control.d.ts.map +1 -1
  57. package/dist/src/controls/Control.min.mjs +1 -1
  58. package/dist/src/controls/Control.min.mjs.map +1 -1
  59. package/dist/src/controls/Control.mjs +2 -1
  60. package/dist/src/controls/Control.mjs.map +1 -1
  61. package/dist/src/controls/changeWidth.min.mjs +1 -1
  62. package/dist/src/controls/changeWidth.min.mjs.map +1 -1
  63. package/dist/src/controls/changeWidth.mjs +2 -2
  64. package/dist/src/controls/changeWidth.mjs.map +1 -1
  65. package/dist/src/controls/commonControls.d.ts.map +1 -1
  66. package/dist/src/controls/commonControls.min.mjs +1 -1
  67. package/dist/src/controls/commonControls.min.mjs.map +1 -1
  68. package/dist/src/controls/commonControls.mjs +4 -3
  69. package/dist/src/controls/commonControls.mjs.map +1 -1
  70. package/dist/src/controls/controlRendering.min.mjs +1 -1
  71. package/dist/src/controls/controlRendering.min.mjs.map +1 -1
  72. package/dist/src/controls/controlRendering.mjs +3 -3
  73. package/dist/src/controls/controlRendering.mjs.map +1 -1
  74. package/dist/src/controls/drag.min.mjs +1 -1
  75. package/dist/src/controls/drag.min.mjs.map +1 -1
  76. package/dist/src/controls/drag.mjs +2 -2
  77. package/dist/src/controls/drag.mjs.map +1 -1
  78. package/dist/src/controls/polyControl.d.ts.map +1 -1
  79. package/dist/src/controls/polyControl.min.mjs +1 -1
  80. package/dist/src/controls/polyControl.min.mjs.map +1 -1
  81. package/dist/src/controls/polyControl.mjs +2 -1
  82. package/dist/src/controls/polyControl.mjs.map +1 -1
  83. package/dist/src/controls/rotate.d.ts.map +1 -1
  84. package/dist/src/controls/rotate.min.mjs +1 -1
  85. package/dist/src/controls/rotate.min.mjs.map +1 -1
  86. package/dist/src/controls/rotate.mjs +2 -1
  87. package/dist/src/controls/rotate.mjs.map +1 -1
  88. package/dist/src/controls/scale.d.ts.map +1 -1
  89. package/dist/src/controls/scale.min.mjs +1 -1
  90. package/dist/src/controls/scale.min.mjs.map +1 -1
  91. package/dist/src/controls/scale.mjs +8 -7
  92. package/dist/src/controls/scale.mjs.map +1 -1
  93. package/dist/src/controls/scaleSkew.d.ts.map +1 -1
  94. package/dist/src/controls/scaleSkew.min.mjs +1 -1
  95. package/dist/src/controls/scaleSkew.min.mjs.map +1 -1
  96. package/dist/src/controls/scaleSkew.mjs +3 -2
  97. package/dist/src/controls/scaleSkew.mjs.map +1 -1
  98. package/dist/src/controls/skew.d.ts.map +1 -1
  99. package/dist/src/controls/skew.min.mjs +1 -1
  100. package/dist/src/controls/skew.min.mjs.map +1 -1
  101. package/dist/src/controls/skew.mjs +7 -7
  102. package/dist/src/controls/skew.mjs.map +1 -1
  103. package/dist/src/filters/Blur.min.mjs +1 -1
  104. package/dist/src/filters/Blur.min.mjs.map +1 -1
  105. package/dist/src/filters/Blur.mjs +1 -1
  106. package/dist/src/filters/Blur.mjs.map +1 -1
  107. package/dist/src/filters/Pixelate.min.mjs +1 -1
  108. package/dist/src/filters/Pixelate.min.mjs.map +1 -1
  109. package/dist/src/filters/Pixelate.mjs +1 -1
  110. package/dist/src/filters/Pixelate.mjs.map +1 -1
  111. package/dist/src/parser/attributes.d.ts.map +1 -1
  112. package/dist/src/parser/attributes.min.mjs +1 -1
  113. package/dist/src/parser/attributes.min.mjs.map +1 -1
  114. package/dist/src/parser/attributes.mjs +3 -1
  115. package/dist/src/parser/attributes.mjs.map +1 -1
  116. package/dist/src/parser/elements_parser.min.mjs +1 -1
  117. package/dist/src/parser/elements_parser.min.mjs.map +1 -1
  118. package/dist/src/parser/elements_parser.mjs +3 -3
  119. package/dist/src/parser/elements_parser.mjs.map +1 -1
  120. package/dist/src/parser/normalizeValue.min.mjs +1 -1
  121. package/dist/src/parser/normalizeValue.min.mjs.map +1 -1
  122. package/dist/src/parser/normalizeValue.mjs +7 -7
  123. package/dist/src/parser/normalizeValue.mjs.map +1 -1
  124. package/dist/src/parser/parseTransformAttribute.min.mjs +1 -1
  125. package/dist/src/parser/parseTransformAttribute.min.mjs.map +1 -1
  126. package/dist/src/parser/parseTransformAttribute.mjs +5 -5
  127. package/dist/src/parser/parseTransformAttribute.mjs.map +1 -1
  128. package/dist/src/shapes/Circle.d.ts.map +1 -1
  129. package/dist/src/shapes/Circle.min.mjs +1 -1
  130. package/dist/src/shapes/Circle.min.mjs.map +1 -1
  131. package/dist/src/shapes/Circle.mjs +3 -2
  132. package/dist/src/shapes/Circle.mjs.map +1 -1
  133. package/dist/src/shapes/Ellipse.min.mjs +1 -1
  134. package/dist/src/shapes/Ellipse.min.mjs.map +1 -1
  135. package/dist/src/shapes/Ellipse.mjs +3 -3
  136. package/dist/src/shapes/Ellipse.mjs.map +1 -1
  137. package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs +1 -1
  138. package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs.map +1 -1
  139. package/dist/src/shapes/IText/DraggableTextDelegate.mjs +3 -3
  140. package/dist/src/shapes/IText/DraggableTextDelegate.mjs.map +1 -1
  141. package/dist/src/shapes/IText/IText.min.mjs +1 -1
  142. package/dist/src/shapes/IText/IText.min.mjs.map +1 -1
  143. package/dist/src/shapes/IText/IText.mjs +3 -3
  144. package/dist/src/shapes/IText/IText.mjs.map +1 -1
  145. package/dist/src/shapes/IText/ITextBehavior.min.mjs +1 -1
  146. package/dist/src/shapes/IText/ITextBehavior.min.mjs.map +1 -1
  147. package/dist/src/shapes/IText/ITextBehavior.mjs +2 -2
  148. package/dist/src/shapes/IText/ITextBehavior.mjs.map +1 -1
  149. package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs +1 -1
  150. package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs.map +1 -1
  151. package/dist/src/shapes/IText/ITextKeyBehavior.mjs +2 -2
  152. package/dist/src/shapes/IText/ITextKeyBehavior.mjs.map +1 -1
  153. package/dist/src/shapes/Image.min.mjs +1 -1
  154. package/dist/src/shapes/Image.min.mjs.map +1 -1
  155. package/dist/src/shapes/Image.mjs +2 -2
  156. package/dist/src/shapes/Image.mjs.map +1 -1
  157. package/dist/src/shapes/Object/AnimatableObject.d.ts.map +1 -1
  158. package/dist/src/shapes/Object/AnimatableObject.min.mjs +1 -1
  159. package/dist/src/shapes/Object/AnimatableObject.min.mjs.map +1 -1
  160. package/dist/src/shapes/Object/AnimatableObject.mjs +2 -1
  161. package/dist/src/shapes/Object/AnimatableObject.mjs.map +1 -1
  162. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
  163. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs +1 -1
  164. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs.map +1 -1
  165. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs +4 -4
  166. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs.map +1 -1
  167. package/dist/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
  168. package/dist/src/shapes/Object/InteractiveObject.min.mjs +1 -1
  169. package/dist/src/shapes/Object/InteractiveObject.min.mjs.map +1 -1
  170. package/dist/src/shapes/Object/InteractiveObject.mjs +2 -1
  171. package/dist/src/shapes/Object/InteractiveObject.mjs.map +1 -1
  172. package/dist/src/shapes/Object/Object.d.ts +9 -7
  173. package/dist/src/shapes/Object/Object.d.ts.map +1 -1
  174. package/dist/src/shapes/Object/Object.min.mjs +1 -1
  175. package/dist/src/shapes/Object/Object.min.mjs.map +1 -1
  176. package/dist/src/shapes/Object/Object.mjs +14 -12
  177. package/dist/src/shapes/Object/Object.mjs.map +1 -1
  178. package/dist/src/shapes/Object/ObjectGeometry.min.mjs +1 -1
  179. package/dist/src/shapes/Object/ObjectGeometry.min.mjs.map +1 -1
  180. package/dist/src/shapes/Object/ObjectGeometry.mjs +3 -3
  181. package/dist/src/shapes/Object/ObjectGeometry.mjs.map +1 -1
  182. package/dist/src/shapes/Object/defaultValues.d.ts.map +1 -1
  183. package/dist/src/shapes/Object/defaultValues.min.mjs +1 -1
  184. package/dist/src/shapes/Object/defaultValues.min.mjs.map +1 -1
  185. package/dist/src/shapes/Object/defaultValues.mjs +4 -4
  186. package/dist/src/shapes/Object/defaultValues.mjs.map +1 -1
  187. package/dist/src/shapes/Object/types/ControlProps.d.ts +4 -3
  188. package/dist/src/shapes/Object/types/ControlProps.d.ts.map +1 -1
  189. package/dist/src/shapes/Polyline.d.ts.map +1 -1
  190. package/dist/src/shapes/Polyline.min.mjs +1 -1
  191. package/dist/src/shapes/Polyline.min.mjs.map +1 -1
  192. package/dist/src/shapes/Polyline.mjs +3 -3
  193. package/dist/src/shapes/Polyline.mjs.map +1 -1
  194. package/dist/src/shapes/Text/Text.d.ts +2 -2
  195. package/dist/src/shapes/Text/Text.d.ts.map +1 -1
  196. package/dist/src/shapes/Text/Text.min.mjs +1 -1
  197. package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
  198. package/dist/src/shapes/Text/Text.mjs +5 -5
  199. package/dist/src/shapes/Text/Text.mjs.map +1 -1
  200. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts.map +1 -1
  201. package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs +1 -1
  202. package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs.map +1 -1
  203. package/dist/src/shapes/Text/TextSVGExportMixin.mjs +2 -1
  204. package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +1 -1
  205. package/dist/src/shapes/Text/constants.min.mjs +1 -1
  206. package/dist/src/shapes/Text/constants.min.mjs.map +1 -1
  207. package/dist/src/shapes/Text/constants.mjs +2 -2
  208. package/dist/src/shapes/Text/constants.mjs.map +1 -1
  209. package/dist/src/util/misc/objectEnlive.d.ts +1 -0
  210. package/dist/src/util/misc/objectEnlive.d.ts.map +1 -1
  211. package/dist/src/util/misc/objectEnlive.min.mjs.map +1 -1
  212. package/dist/src/util/misc/objectEnlive.mjs +1 -0
  213. package/dist/src/util/misc/objectEnlive.mjs.map +1 -1
  214. package/dist/src/util/misc/svgParsing.min.mjs +1 -1
  215. package/dist/src/util/misc/svgParsing.min.mjs.map +1 -1
  216. package/dist/src/util/misc/svgParsing.mjs +2 -2
  217. package/dist/src/util/misc/svgParsing.mjs.map +1 -1
  218. package/dist/src/util/transform_matrix_removal.min.mjs +1 -1
  219. package/dist/src/util/transform_matrix_removal.min.mjs.map +1 -1
  220. package/dist/src/util/transform_matrix_removal.mjs +3 -3
  221. package/dist/src/util/transform_matrix_removal.mjs.map +1 -1
  222. package/fabric.ts +4 -0
  223. package/package.json +1 -1
  224. package/src/EventTypeDefs.ts +14 -6
  225. package/src/LayoutManager/LayoutManager.ts +28 -19
  226. package/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts +2 -2
  227. package/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts +7 -7
  228. package/src/Observable.ts +8 -0
  229. package/src/canvas/SelectableCanvas.ts +25 -11
  230. package/src/canvas/canvas_gestures.mixin.ts +6 -5
  231. package/src/constants.ts +17 -0
  232. package/src/controls/Control.ts +2 -1
  233. package/src/controls/changeWidth.ts +2 -2
  234. package/src/controls/commonControls.ts +4 -3
  235. package/src/controls/controlRendering.ts +3 -3
  236. package/src/controls/drag.ts +2 -2
  237. package/src/controls/polyControl.ts +2 -1
  238. package/src/controls/rotate.ts +2 -1
  239. package/src/controls/scale.ts +8 -7
  240. package/src/controls/scaleSkew.ts +3 -2
  241. package/src/controls/skew.ts +14 -7
  242. package/src/filters/Blur.ts +1 -1
  243. package/src/filters/Pixelate.ts +1 -1
  244. package/src/parser/attributes.ts +4 -2
  245. package/src/parser/elements_parser.ts +3 -3
  246. package/src/parser/normalizeValue.ts +7 -7
  247. package/src/parser/parseTransformAttribute.ts +5 -5
  248. package/src/shapes/Circle.ts +3 -2
  249. package/src/shapes/Ellipse.ts +3 -3
  250. package/src/shapes/IText/DraggableTextDelegate.ts +3 -3
  251. package/src/shapes/IText/IText.ts +3 -3
  252. package/src/shapes/IText/ITextBehavior.ts +2 -2
  253. package/src/shapes/IText/ITextKeyBehavior.ts +2 -2
  254. package/src/shapes/Image.ts +2 -2
  255. package/src/shapes/Object/AnimatableObject.ts +2 -1
  256. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +4 -6
  257. package/src/shapes/Object/InteractiveObject.ts +2 -1
  258. package/src/shapes/Object/Object.ts +16 -11
  259. package/src/shapes/Object/ObjectGeometry.ts +3 -3
  260. package/src/shapes/Object/defaultValues.ts +17 -8
  261. package/src/shapes/Object/types/ControlProps.ts +4 -3
  262. package/src/shapes/Polyline.spec.ts +0 -1
  263. package/src/shapes/Polyline.ts +12 -4
  264. package/src/shapes/Text/Text.ts +7 -7
  265. package/src/shapes/Text/TextSVGExportMixin.ts +3 -2
  266. package/src/shapes/Text/constants.ts +3 -3
  267. package/src/util/misc/objectEnlive.ts +1 -0
  268. package/src/util/misc/svgParsing.ts +2 -2
  269. package/src/util/transform_matrix_removal.ts +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"svgParsing.mjs","sources":["../../../../src/util/misc/svgParsing.ts"],"sourcesContent":["import { Color } from '../../color/Color';\nimport { config } from '../../config';\nimport { DEFAULT_SVG_FONT_SIZE, NONE } from '../../constants';\nimport type {\n TBBox,\n TMat2D,\n SVGElementName,\n SupportedSVGUnit,\n} from '../../typedefs';\nimport { toFixed } from './toFixed';\n\n/**\n * Returns array of attributes for given svg that fabric parses\n * @param {SVGElementName} type Type of svg element (eg. 'circle')\n * @return {Array} string names of supported attributes\n */\nexport const getSvgAttributes = (type: SVGElementName) => {\n const commonAttributes = ['instantiated_by_use', 'style', 'id', 'class'];\n switch (type) {\n case 'linearGradient':\n return commonAttributes.concat([\n 'x1',\n 'y1',\n 'x2',\n 'y2',\n 'gradientUnits',\n 'gradientTransform',\n ]);\n case 'radialGradient':\n return commonAttributes.concat([\n 'gradientUnits',\n 'gradientTransform',\n 'cx',\n 'cy',\n 'r',\n 'fx',\n 'fy',\n 'fr',\n ]);\n case 'stop':\n return commonAttributes.concat(['offset', 'stop-color', 'stop-opacity']);\n }\n return commonAttributes;\n};\n\n/**\n * Converts from attribute value to pixel value if applicable.\n * Returns converted pixels or original value not converted.\n * @param {string} value number to operate on\n * @param {number} fontSize\n * @return {number}\n */\nexport const parseUnit = (value: string, fontSize = DEFAULT_SVG_FONT_SIZE) => {\n const unit = /\\D{0,2}$/.exec(value),\n number = parseFloat(value);\n const dpi = config.DPI;\n switch (unit?.[0] as SupportedSVGUnit) {\n case 'mm':\n return (number * dpi) / 25.4;\n\n case 'cm':\n return (number * dpi) / 2.54;\n\n case 'in':\n return number * dpi;\n\n case 'pt':\n return (number * dpi) / 72; // or * 4 / 3\n\n case 'pc':\n return ((number * dpi) / 72) * 12; // or * 16\n\n case 'em':\n return number * fontSize;\n\n default:\n return number;\n }\n};\n\nexport type MeetOrSlice = 'meet' | 'slice';\n\nexport type MinMidMax = 'Min' | 'Mid' | 'Max' | 'none';\n\nexport type TPreserveArParsed = {\n meetOrSlice: MeetOrSlice;\n alignX: MinMidMax;\n alignY: MinMidMax;\n};\n\n// align can be either none or undefined or a combination of mid/max\nconst parseAlign = (align: string): MinMidMax[] => {\n //divide align in alignX and alignY\n if (align && align !== NONE) {\n return [align.slice(1, 4) as MinMidMax, align.slice(5, 8) as MinMidMax];\n } else if (align === NONE) {\n return [align, align];\n }\n return ['Mid', 'Mid'];\n};\n\n/**\n * Parse preserveAspectRatio attribute from element\n * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio\n * @param {string} attribute to be parsed\n * @return {Object} an object containing align and meetOrSlice attribute\n */\nexport const parsePreserveAspectRatioAttribute = (\n attribute: string\n): TPreserveArParsed => {\n const [firstPart, secondPart] = attribute.trim().split(' ') as [\n MinMidMax,\n MeetOrSlice | undefined\n ];\n const [alignX, alignY] = parseAlign(firstPart);\n return {\n meetOrSlice: secondPart || 'meet',\n alignX,\n alignY,\n };\n};\n\n/**\n * given an array of 6 number returns something like `\"matrix(...numbers)\"`\n * @param {TMat2D} transform an array with 6 numbers\n * @return {String} transform matrix for svg\n */\nexport const matrixToSVG = (transform: TMat2D) =>\n 'matrix(' +\n transform\n .map((value) => toFixed(value, config.NUM_FRACTION_DIGITS))\n .join(' ') +\n ')';\n\n/**\n * Adobe Illustrator (at least CS5) is unable to render rgba()-based fill values\n * we work around it by \"moving\" alpha channel into opacity attribute and setting fill's alpha to 1\n * @param prop\n * @param value\n * @param {boolean} inlineStyle The default is inline style, the separator used is \":\", The other is \"=\"\n * @returns\n */\nexport const colorPropToSVG = (\n prop: string,\n value?: any,\n inlineStyle = true\n) => {\n let colorValue;\n let opacityValue;\n if (!value) {\n colorValue = 'none';\n } else if (value.toLive) {\n colorValue = `url(#SVGID_${value.id})`;\n } else {\n const color = new Color(value),\n opacity = color.getAlpha();\n\n colorValue = color.toRgb();\n if (opacity !== 1) {\n opacityValue = opacity.toString();\n }\n }\n if (inlineStyle) {\n return `${prop}: ${colorValue}; ${\n opacityValue ? `${prop}-opacity: ${opacityValue}; ` : ''\n }`;\n } else {\n return `${prop}=\"${colorValue}\" ${\n opacityValue ? `${prop}-opacity=\"${opacityValue}\" ` : ''\n }`;\n }\n};\n\nexport const createSVGRect = (\n color: string,\n { left, top, width, height }: TBBox,\n precision = config.NUM_FRACTION_DIGITS\n) => {\n const svgColor = colorPropToSVG('fill', color, false);\n const [x, y, w, h] = [left, top, width, height].map((value) =>\n toFixed(value, precision)\n );\n return `<rect ${svgColor} x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"${h}\"></rect>`;\n};\n"],"names":["getSvgAttributes","type","commonAttributes","concat","parseUnit","value","fontSize","arguments","length","undefined","DEFAULT_SVG_FONT_SIZE","unit","exec","number","parseFloat","dpi","config","DPI","parseAlign","align","NONE","slice","parsePreserveAspectRatioAttribute","attribute","firstPart","secondPart","trim","split","alignX","alignY","meetOrSlice","matrixToSVG","transform","map","toFixed","NUM_FRACTION_DIGITS","join","colorPropToSVG","prop","inlineStyle","colorValue","opacityValue","toLive","id","color","Color","opacity","getAlpha","toRgb","toString","createSVGRect","_ref","left","top","width","height","precision","svgColor","x","y","w","h"],"mappings":"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"}
1
+ {"version":3,"file":"svgParsing.mjs","sources":["../../../../src/util/misc/svgParsing.ts"],"sourcesContent":["import { Color } from '../../color/Color';\nimport { config } from '../../config';\nimport { DEFAULT_SVG_FONT_SIZE, FILL, NONE } from '../../constants';\nimport type {\n TBBox,\n TMat2D,\n SVGElementName,\n SupportedSVGUnit,\n} from '../../typedefs';\nimport { toFixed } from './toFixed';\n\n/**\n * Returns array of attributes for given svg that fabric parses\n * @param {SVGElementName} type Type of svg element (eg. 'circle')\n * @return {Array} string names of supported attributes\n */\nexport const getSvgAttributes = (type: SVGElementName) => {\n const commonAttributes = ['instantiated_by_use', 'style', 'id', 'class'];\n switch (type) {\n case 'linearGradient':\n return commonAttributes.concat([\n 'x1',\n 'y1',\n 'x2',\n 'y2',\n 'gradientUnits',\n 'gradientTransform',\n ]);\n case 'radialGradient':\n return commonAttributes.concat([\n 'gradientUnits',\n 'gradientTransform',\n 'cx',\n 'cy',\n 'r',\n 'fx',\n 'fy',\n 'fr',\n ]);\n case 'stop':\n return commonAttributes.concat(['offset', 'stop-color', 'stop-opacity']);\n }\n return commonAttributes;\n};\n\n/**\n * Converts from attribute value to pixel value if applicable.\n * Returns converted pixels or original value not converted.\n * @param {string} value number to operate on\n * @param {number} fontSize\n * @return {number}\n */\nexport const parseUnit = (value: string, fontSize = DEFAULT_SVG_FONT_SIZE) => {\n const unit = /\\D{0,2}$/.exec(value),\n number = parseFloat(value);\n const dpi = config.DPI;\n switch (unit?.[0] as SupportedSVGUnit) {\n case 'mm':\n return (number * dpi) / 25.4;\n\n case 'cm':\n return (number * dpi) / 2.54;\n\n case 'in':\n return number * dpi;\n\n case 'pt':\n return (number * dpi) / 72; // or * 4 / 3\n\n case 'pc':\n return ((number * dpi) / 72) * 12; // or * 16\n\n case 'em':\n return number * fontSize;\n\n default:\n return number;\n }\n};\n\nexport type MeetOrSlice = 'meet' | 'slice';\n\nexport type MinMidMax = 'Min' | 'Mid' | 'Max' | 'none';\n\nexport type TPreserveArParsed = {\n meetOrSlice: MeetOrSlice;\n alignX: MinMidMax;\n alignY: MinMidMax;\n};\n\n// align can be either none or undefined or a combination of mid/max\nconst parseAlign = (align: string): MinMidMax[] => {\n //divide align in alignX and alignY\n if (align && align !== NONE) {\n return [align.slice(1, 4) as MinMidMax, align.slice(5, 8) as MinMidMax];\n } else if (align === NONE) {\n return [align, align];\n }\n return ['Mid', 'Mid'];\n};\n\n/**\n * Parse preserveAspectRatio attribute from element\n * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio\n * @param {string} attribute to be parsed\n * @return {Object} an object containing align and meetOrSlice attribute\n */\nexport const parsePreserveAspectRatioAttribute = (\n attribute: string\n): TPreserveArParsed => {\n const [firstPart, secondPart] = attribute.trim().split(' ') as [\n MinMidMax,\n MeetOrSlice | undefined\n ];\n const [alignX, alignY] = parseAlign(firstPart);\n return {\n meetOrSlice: secondPart || 'meet',\n alignX,\n alignY,\n };\n};\n\n/**\n * given an array of 6 number returns something like `\"matrix(...numbers)\"`\n * @param {TMat2D} transform an array with 6 numbers\n * @return {String} transform matrix for svg\n */\nexport const matrixToSVG = (transform: TMat2D) =>\n 'matrix(' +\n transform\n .map((value) => toFixed(value, config.NUM_FRACTION_DIGITS))\n .join(' ') +\n ')';\n\n/**\n * Adobe Illustrator (at least CS5) is unable to render rgba()-based fill values\n * we work around it by \"moving\" alpha channel into opacity attribute and setting fill's alpha to 1\n * @param prop\n * @param value\n * @param {boolean} inlineStyle The default is inline style, the separator used is \":\", The other is \"=\"\n * @returns\n */\nexport const colorPropToSVG = (\n prop: string,\n value?: any,\n inlineStyle = true\n) => {\n let colorValue;\n let opacityValue;\n if (!value) {\n colorValue = 'none';\n } else if (value.toLive) {\n colorValue = `url(#SVGID_${value.id})`;\n } else {\n const color = new Color(value),\n opacity = color.getAlpha();\n\n colorValue = color.toRgb();\n if (opacity !== 1) {\n opacityValue = opacity.toString();\n }\n }\n if (inlineStyle) {\n return `${prop}: ${colorValue}; ${\n opacityValue ? `${prop}-opacity: ${opacityValue}; ` : ''\n }`;\n } else {\n return `${prop}=\"${colorValue}\" ${\n opacityValue ? `${prop}-opacity=\"${opacityValue}\" ` : ''\n }`;\n }\n};\n\nexport const createSVGRect = (\n color: string,\n { left, top, width, height }: TBBox,\n precision = config.NUM_FRACTION_DIGITS\n) => {\n const svgColor = colorPropToSVG(FILL, color, false);\n const [x, y, w, h] = [left, top, width, height].map((value) =>\n toFixed(value, precision)\n );\n return `<rect ${svgColor} x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"${h}\"></rect>`;\n};\n"],"names":["getSvgAttributes","type","commonAttributes","concat","parseUnit","value","fontSize","arguments","length","undefined","DEFAULT_SVG_FONT_SIZE","unit","exec","number","parseFloat","dpi","config","DPI","parseAlign","align","NONE","slice","parsePreserveAspectRatioAttribute","attribute","firstPart","secondPart","trim","split","alignX","alignY","meetOrSlice","matrixToSVG","transform","map","toFixed","NUM_FRACTION_DIGITS","join","colorPropToSVG","prop","inlineStyle","colorValue","opacityValue","toLive","id","color","Color","opacity","getAlpha","toRgb","toString","createSVGRect","_ref","left","top","width","height","precision","svgColor","FILL","x","y","w","h"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{CENTER as t}from"../constants.min.mjs";import{qrDecompose as e}from"./misc/matrix.min.mjs";const r=(r,s)=>{let o=r._findCenterFromElement();r.transformMatrix&&((t=>{if(t.transformMatrix){const{scaleX:r,scaleY:s,angle:o,skewX:a}=e(t.transformMatrix);t.flipX=!1,t.flipY=!1,t.set("scaleX",r),t.set("scaleY",s),t.angle=o,t.skewX=a,t.skewY=0}})(r),o=o.transform(r.transformMatrix)),delete r.transformMatrix,s&&(r.scaleX*=s.scaleX,r.scaleY*=s.scaleY,r.cropX=s.cropX,r.cropY=s.cropY,o.x+=s.offsetLeft,o.y+=s.offsetTop,r.width=s.width,r.height=s.height),r.setPositionByOrigin(o,t,t)};export{r as removeTransformMatrixForSvgParsing};
1
+ import{CENTER as t,SCALE_X as r,SCALE_Y as e}from"../constants.min.mjs";import{qrDecompose as s}from"./misc/matrix.min.mjs";const o=(o,i)=>{let a=o._findCenterFromElement();o.transformMatrix&&((t=>{if(t.transformMatrix){const{scaleX:o,scaleY:i,angle:a,skewX:n}=s(t.transformMatrix);t.flipX=!1,t.flipY=!1,t.set(r,o),t.set(e,i),t.angle=a,t.skewX=n,t.skewY=0}})(o),a=a.transform(o.transformMatrix)),delete o.transformMatrix,i&&(o.scaleX*=i.scaleX,o.scaleY*=i.scaleY,o.cropX=i.cropX,o.cropY=i.cropY,a.x+=i.offsetLeft,a.y+=i.offsetTop,o.width=i.width,o.height=i.height),o.setPositionByOrigin(a,t,t)};export{o as removeTransformMatrixForSvgParsing};
2
2
  //# sourceMappingURL=transform_matrix_removal.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"transform_matrix_removal.min.mjs","sources":["../../../src/util/transform_matrix_removal.ts"],"sourcesContent":["import { CENTER } from '../constants';\nimport type { FabricImage } from '../shapes/Image';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { qrDecompose } from './misc/matrix';\n\ntype FabricObjectWithTransformMatrix = FabricObject & {\n transformMatrix?: TMat2D;\n};\n\n/**\n * This function is an helper for svg import. it decompose the transformMatrix\n * and assign properties to object.\n * untransformed coordinates\n * @private\n */\nconst _assignTransformMatrixProps = (\n object: FabricObjectWithTransformMatrix\n) => {\n if (object.transformMatrix) {\n const { scaleX, scaleY, angle, skewX } = qrDecompose(\n object.transformMatrix\n );\n object.flipX = false;\n object.flipY = false;\n object.set('scaleX', scaleX);\n object.set('scaleY', scaleY);\n object.angle = angle;\n object.skewX = skewX;\n object.skewY = 0;\n }\n};\n\n/**\n * This function is an helper for svg import. it removes the transform matrix\n * and set to object properties that fabricjs can handle\n * @private\n * @param {Object} preserveAspectRatioOptions\n */\nexport const removeTransformMatrixForSvgParsing = (\n object: FabricObjectWithTransformMatrix,\n preserveAspectRatioOptions?: any\n) => {\n let center = object._findCenterFromElement();\n if (object.transformMatrix) {\n _assignTransformMatrixProps(object);\n center = center.transform(object.transformMatrix);\n }\n delete object.transformMatrix;\n if (preserveAspectRatioOptions) {\n object.scaleX *= preserveAspectRatioOptions.scaleX;\n object.scaleY *= preserveAspectRatioOptions.scaleY;\n (object as FabricImage).cropX = preserveAspectRatioOptions.cropX;\n (object as FabricImage).cropY = preserveAspectRatioOptions.cropY;\n center.x += preserveAspectRatioOptions.offsetLeft;\n center.y += preserveAspectRatioOptions.offsetTop;\n object.width = preserveAspectRatioOptions.width;\n object.height = preserveAspectRatioOptions.height;\n }\n object.setPositionByOrigin(center, CENTER, CENTER);\n};\n"],"names":["removeTransformMatrixForSvgParsing","object","preserveAspectRatioOptions","center","_findCenterFromElement","transformMatrix","scaleX","scaleY","angle","skewX","qrDecompose","flipX","flipY","set","skewY","_assignTransformMatrixProps","transform","cropX","cropY","x","offsetLeft","y","offsetTop","width","height","setPositionByOrigin","CENTER"],"mappings":"kGAgBA,MAuBaA,EAAqCA,CAChDC,EACAC,KAEA,IAAIC,EAASF,EAAOG,yBAChBH,EAAOI,kBA3BXJ,KAEA,GAAIA,EAAOI,gBAAiB,CAC1B,MAAMC,OAAEA,EAAMC,OAAEA,EAAMC,MAAEA,EAAKC,MAAEA,GAAUC,EACvCT,EAAOI,iBAETJ,EAAOU,OAAQ,EACfV,EAAOW,OAAQ,EACfX,EAAOY,IAAI,SAAUP,GACrBL,EAAOY,IAAI,SAAUN,GACrBN,EAAOO,MAAQA,EACfP,EAAOQ,MAAQA,EACfR,EAAOa,MAAQ,CACjB,GAeEC,CAA4Bd,GAC5BE,EAASA,EAAOa,UAAUf,EAAOI,yBAE5BJ,EAAOI,gBACVH,IACFD,EAAOK,QAAUJ,EAA2BI,OAC5CL,EAAOM,QAAUL,EAA2BK,OAC3CN,EAAuBgB,MAAQf,EAA2Be,MAC1DhB,EAAuBiB,MAAQhB,EAA2BgB,MAC3Df,EAAOgB,GAAKjB,EAA2BkB,WACvCjB,EAAOkB,GAAKnB,EAA2BoB,UACvCrB,EAAOsB,MAAQrB,EAA2BqB,MAC1CtB,EAAOuB,OAAStB,EAA2BsB,QAE7CvB,EAAOwB,oBAAoBtB,EAAQuB,EAAQA,EAAO"}
1
+ {"version":3,"file":"transform_matrix_removal.min.mjs","sources":["../../../src/util/transform_matrix_removal.ts"],"sourcesContent":["import { CENTER, SCALE_X, SCALE_Y } from '../constants';\nimport type { FabricImage } from '../shapes/Image';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { qrDecompose } from './misc/matrix';\n\ntype FabricObjectWithTransformMatrix = FabricObject & {\n transformMatrix?: TMat2D;\n};\n\n/**\n * This function is an helper for svg import. it decompose the transformMatrix\n * and assign properties to object.\n * untransformed coordinates\n * @private\n */\nconst _assignTransformMatrixProps = (\n object: FabricObjectWithTransformMatrix\n) => {\n if (object.transformMatrix) {\n const { scaleX, scaleY, angle, skewX } = qrDecompose(\n object.transformMatrix\n );\n object.flipX = false;\n object.flipY = false;\n object.set(SCALE_X, scaleX);\n object.set(SCALE_Y, scaleY);\n object.angle = angle;\n object.skewX = skewX;\n object.skewY = 0;\n }\n};\n\n/**\n * This function is an helper for svg import. it removes the transform matrix\n * and set to object properties that fabricjs can handle\n * @private\n * @param {Object} preserveAspectRatioOptions\n */\nexport const removeTransformMatrixForSvgParsing = (\n object: FabricObjectWithTransformMatrix,\n preserveAspectRatioOptions?: any\n) => {\n let center = object._findCenterFromElement();\n if (object.transformMatrix) {\n _assignTransformMatrixProps(object);\n center = center.transform(object.transformMatrix);\n }\n delete object.transformMatrix;\n if (preserveAspectRatioOptions) {\n object.scaleX *= preserveAspectRatioOptions.scaleX;\n object.scaleY *= preserveAspectRatioOptions.scaleY;\n (object as FabricImage).cropX = preserveAspectRatioOptions.cropX;\n (object as FabricImage).cropY = preserveAspectRatioOptions.cropY;\n center.x += preserveAspectRatioOptions.offsetLeft;\n center.y += preserveAspectRatioOptions.offsetTop;\n object.width = preserveAspectRatioOptions.width;\n object.height = preserveAspectRatioOptions.height;\n }\n object.setPositionByOrigin(center, CENTER, CENTER);\n};\n"],"names":["removeTransformMatrixForSvgParsing","object","preserveAspectRatioOptions","center","_findCenterFromElement","transformMatrix","scaleX","scaleY","angle","skewX","qrDecompose","flipX","flipY","set","SCALE_X","SCALE_Y","skewY","_assignTransformMatrixProps","transform","cropX","cropY","x","offsetLeft","y","offsetTop","width","height","setPositionByOrigin","CENTER"],"mappings":"4HAgBA,MAuBaA,EAAqCA,CAChDC,EACAC,KAEA,IAAIC,EAASF,EAAOG,yBAChBH,EAAOI,kBA3BXJ,KAEA,GAAIA,EAAOI,gBAAiB,CAC1B,MAAMC,OAAEA,EAAMC,OAAEA,EAAMC,MAAEA,EAAKC,MAAEA,GAAUC,EACvCT,EAAOI,iBAETJ,EAAOU,OAAQ,EACfV,EAAOW,OAAQ,EACfX,EAAOY,IAAIC,EAASR,GACpBL,EAAOY,IAAIE,EAASR,GACpBN,EAAOO,MAAQA,EACfP,EAAOQ,MAAQA,EACfR,EAAOe,MAAQ,CACjB,GAeEC,CAA4BhB,GAC5BE,EAASA,EAAOe,UAAUjB,EAAOI,yBAE5BJ,EAAOI,gBACVH,IACFD,EAAOK,QAAUJ,EAA2BI,OAC5CL,EAAOM,QAAUL,EAA2BK,OAC3CN,EAAuBkB,MAAQjB,EAA2BiB,MAC1DlB,EAAuBmB,MAAQlB,EAA2BkB,MAC3DjB,EAAOkB,GAAKnB,EAA2BoB,WACvCnB,EAAOoB,GAAKrB,EAA2BsB,UACvCvB,EAAOwB,MAAQvB,EAA2BuB,MAC1CxB,EAAOyB,OAASxB,EAA2BwB,QAE7CzB,EAAO0B,oBAAoBxB,EAAQyB,EAAQA,EAAO"}
@@ -1,4 +1,4 @@
1
- import { CENTER } from '../constants.mjs';
1
+ import { CENTER, SCALE_X, SCALE_Y } from '../constants.mjs';
2
2
  import { qrDecompose } from './misc/matrix.mjs';
3
3
 
4
4
  /**
@@ -17,8 +17,8 @@ const _assignTransformMatrixProps = object => {
17
17
  } = qrDecompose(object.transformMatrix);
18
18
  object.flipX = false;
19
19
  object.flipY = false;
20
- object.set('scaleX', scaleX);
21
- object.set('scaleY', scaleY);
20
+ object.set(SCALE_X, scaleX);
21
+ object.set(SCALE_Y, scaleY);
22
22
  object.angle = angle;
23
23
  object.skewX = skewX;
24
24
  object.skewY = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"transform_matrix_removal.mjs","sources":["../../../src/util/transform_matrix_removal.ts"],"sourcesContent":["import { CENTER } from '../constants';\nimport type { FabricImage } from '../shapes/Image';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { qrDecompose } from './misc/matrix';\n\ntype FabricObjectWithTransformMatrix = FabricObject & {\n transformMatrix?: TMat2D;\n};\n\n/**\n * This function is an helper for svg import. it decompose the transformMatrix\n * and assign properties to object.\n * untransformed coordinates\n * @private\n */\nconst _assignTransformMatrixProps = (\n object: FabricObjectWithTransformMatrix\n) => {\n if (object.transformMatrix) {\n const { scaleX, scaleY, angle, skewX } = qrDecompose(\n object.transformMatrix\n );\n object.flipX = false;\n object.flipY = false;\n object.set('scaleX', scaleX);\n object.set('scaleY', scaleY);\n object.angle = angle;\n object.skewX = skewX;\n object.skewY = 0;\n }\n};\n\n/**\n * This function is an helper for svg import. it removes the transform matrix\n * and set to object properties that fabricjs can handle\n * @private\n * @param {Object} preserveAspectRatioOptions\n */\nexport const removeTransformMatrixForSvgParsing = (\n object: FabricObjectWithTransformMatrix,\n preserveAspectRatioOptions?: any\n) => {\n let center = object._findCenterFromElement();\n if (object.transformMatrix) {\n _assignTransformMatrixProps(object);\n center = center.transform(object.transformMatrix);\n }\n delete object.transformMatrix;\n if (preserveAspectRatioOptions) {\n object.scaleX *= preserveAspectRatioOptions.scaleX;\n object.scaleY *= preserveAspectRatioOptions.scaleY;\n (object as FabricImage).cropX = preserveAspectRatioOptions.cropX;\n (object as FabricImage).cropY = preserveAspectRatioOptions.cropY;\n center.x += preserveAspectRatioOptions.offsetLeft;\n center.y += preserveAspectRatioOptions.offsetTop;\n object.width = preserveAspectRatioOptions.width;\n object.height = preserveAspectRatioOptions.height;\n }\n object.setPositionByOrigin(center, CENTER, CENTER);\n};\n"],"names":["_assignTransformMatrixProps","object","transformMatrix","scaleX","scaleY","angle","skewX","qrDecompose","flipX","flipY","set","skewY","removeTransformMatrixForSvgParsing","preserveAspectRatioOptions","center","_findCenterFromElement","transform","cropX","cropY","x","offsetLeft","y","offsetTop","width","height","setPositionByOrigin","CENTER"],"mappings":";;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,2BAA2B,GAC/BC,MAAuC,IACpC;EACH,IAAIA,MAAM,CAACC,eAAe,EAAE;IAC1B,MAAM;MAAEC,MAAM;MAAEC,MAAM;MAAEC,KAAK;AAAEC,MAAAA,KAAAA;AAAM,KAAC,GAAGC,WAAW,CAClDN,MAAM,CAACC,eACT,CAAC,CAAA;IACDD,MAAM,CAACO,KAAK,GAAG,KAAK,CAAA;IACpBP,MAAM,CAACQ,KAAK,GAAG,KAAK,CAAA;AACpBR,IAAAA,MAAM,CAACS,GAAG,CAAC,QAAQ,EAAEP,MAAM,CAAC,CAAA;AAC5BF,IAAAA,MAAM,CAACS,GAAG,CAAC,QAAQ,EAAEN,MAAM,CAAC,CAAA;IAC5BH,MAAM,CAACI,KAAK,GAAGA,KAAK,CAAA;IACpBJ,MAAM,CAACK,KAAK,GAAGA,KAAK,CAAA;IACpBL,MAAM,CAACU,KAAK,GAAG,CAAC,CAAA;AAClB,GAAA;AACF,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;MACaC,kCAAkC,GAAGA,CAChDX,MAAuC,EACvCY,0BAAgC,KAC7B;AACH,EAAA,IAAIC,MAAM,GAAGb,MAAM,CAACc,sBAAsB,EAAE,CAAA;EAC5C,IAAId,MAAM,CAACC,eAAe,EAAE;IAC1BF,2BAA2B,CAACC,MAAM,CAAC,CAAA;IACnCa,MAAM,GAAGA,MAAM,CAACE,SAAS,CAACf,MAAM,CAACC,eAAe,CAAC,CAAA;AACnD,GAAA;EACA,OAAOD,MAAM,CAACC,eAAe,CAAA;AAC7B,EAAA,IAAIW,0BAA0B,EAAE;AAC9BZ,IAAAA,MAAM,CAACE,MAAM,IAAIU,0BAA0B,CAACV,MAAM,CAAA;AAClDF,IAAAA,MAAM,CAACG,MAAM,IAAIS,0BAA0B,CAACT,MAAM,CAAA;AACjDH,IAAAA,MAAM,CAAiBgB,KAAK,GAAGJ,0BAA0B,CAACI,KAAK,CAAA;AAC/DhB,IAAAA,MAAM,CAAiBiB,KAAK,GAAGL,0BAA0B,CAACK,KAAK,CAAA;AAChEJ,IAAAA,MAAM,CAACK,CAAC,IAAIN,0BAA0B,CAACO,UAAU,CAAA;AACjDN,IAAAA,MAAM,CAACO,CAAC,IAAIR,0BAA0B,CAACS,SAAS,CAAA;AAChDrB,IAAAA,MAAM,CAACsB,KAAK,GAAGV,0BAA0B,CAACU,KAAK,CAAA;AAC/CtB,IAAAA,MAAM,CAACuB,MAAM,GAAGX,0BAA0B,CAACW,MAAM,CAAA;AACnD,GAAA;EACAvB,MAAM,CAACwB,mBAAmB,CAACX,MAAM,EAAEY,MAAM,EAAEA,MAAM,CAAC,CAAA;AACpD;;;;"}
1
+ {"version":3,"file":"transform_matrix_removal.mjs","sources":["../../../src/util/transform_matrix_removal.ts"],"sourcesContent":["import { CENTER, SCALE_X, SCALE_Y } from '../constants';\nimport type { FabricImage } from '../shapes/Image';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { qrDecompose } from './misc/matrix';\n\ntype FabricObjectWithTransformMatrix = FabricObject & {\n transformMatrix?: TMat2D;\n};\n\n/**\n * This function is an helper for svg import. it decompose the transformMatrix\n * and assign properties to object.\n * untransformed coordinates\n * @private\n */\nconst _assignTransformMatrixProps = (\n object: FabricObjectWithTransformMatrix\n) => {\n if (object.transformMatrix) {\n const { scaleX, scaleY, angle, skewX } = qrDecompose(\n object.transformMatrix\n );\n object.flipX = false;\n object.flipY = false;\n object.set(SCALE_X, scaleX);\n object.set(SCALE_Y, scaleY);\n object.angle = angle;\n object.skewX = skewX;\n object.skewY = 0;\n }\n};\n\n/**\n * This function is an helper for svg import. it removes the transform matrix\n * and set to object properties that fabricjs can handle\n * @private\n * @param {Object} preserveAspectRatioOptions\n */\nexport const removeTransformMatrixForSvgParsing = (\n object: FabricObjectWithTransformMatrix,\n preserveAspectRatioOptions?: any\n) => {\n let center = object._findCenterFromElement();\n if (object.transformMatrix) {\n _assignTransformMatrixProps(object);\n center = center.transform(object.transformMatrix);\n }\n delete object.transformMatrix;\n if (preserveAspectRatioOptions) {\n object.scaleX *= preserveAspectRatioOptions.scaleX;\n object.scaleY *= preserveAspectRatioOptions.scaleY;\n (object as FabricImage).cropX = preserveAspectRatioOptions.cropX;\n (object as FabricImage).cropY = preserveAspectRatioOptions.cropY;\n center.x += preserveAspectRatioOptions.offsetLeft;\n center.y += preserveAspectRatioOptions.offsetTop;\n object.width = preserveAspectRatioOptions.width;\n object.height = preserveAspectRatioOptions.height;\n }\n object.setPositionByOrigin(center, CENTER, CENTER);\n};\n"],"names":["_assignTransformMatrixProps","object","transformMatrix","scaleX","scaleY","angle","skewX","qrDecompose","flipX","flipY","set","SCALE_X","SCALE_Y","skewY","removeTransformMatrixForSvgParsing","preserveAspectRatioOptions","center","_findCenterFromElement","transform","cropX","cropY","x","offsetLeft","y","offsetTop","width","height","setPositionByOrigin","CENTER"],"mappings":";;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,2BAA2B,GAC/BC,MAAuC,IACpC;EACH,IAAIA,MAAM,CAACC,eAAe,EAAE;IAC1B,MAAM;MAAEC,MAAM;MAAEC,MAAM;MAAEC,KAAK;AAAEC,MAAAA,KAAAA;AAAM,KAAC,GAAGC,WAAW,CAClDN,MAAM,CAACC,eACT,CAAC,CAAA;IACDD,MAAM,CAACO,KAAK,GAAG,KAAK,CAAA;IACpBP,MAAM,CAACQ,KAAK,GAAG,KAAK,CAAA;AACpBR,IAAAA,MAAM,CAACS,GAAG,CAACC,OAAO,EAAER,MAAM,CAAC,CAAA;AAC3BF,IAAAA,MAAM,CAACS,GAAG,CAACE,OAAO,EAAER,MAAM,CAAC,CAAA;IAC3BH,MAAM,CAACI,KAAK,GAAGA,KAAK,CAAA;IACpBJ,MAAM,CAACK,KAAK,GAAGA,KAAK,CAAA;IACpBL,MAAM,CAACY,KAAK,GAAG,CAAC,CAAA;AAClB,GAAA;AACF,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;MACaC,kCAAkC,GAAGA,CAChDb,MAAuC,EACvCc,0BAAgC,KAC7B;AACH,EAAA,IAAIC,MAAM,GAAGf,MAAM,CAACgB,sBAAsB,EAAE,CAAA;EAC5C,IAAIhB,MAAM,CAACC,eAAe,EAAE;IAC1BF,2BAA2B,CAACC,MAAM,CAAC,CAAA;IACnCe,MAAM,GAAGA,MAAM,CAACE,SAAS,CAACjB,MAAM,CAACC,eAAe,CAAC,CAAA;AACnD,GAAA;EACA,OAAOD,MAAM,CAACC,eAAe,CAAA;AAC7B,EAAA,IAAIa,0BAA0B,EAAE;AAC9Bd,IAAAA,MAAM,CAACE,MAAM,IAAIY,0BAA0B,CAACZ,MAAM,CAAA;AAClDF,IAAAA,MAAM,CAACG,MAAM,IAAIW,0BAA0B,CAACX,MAAM,CAAA;AACjDH,IAAAA,MAAM,CAAiBkB,KAAK,GAAGJ,0BAA0B,CAACI,KAAK,CAAA;AAC/DlB,IAAAA,MAAM,CAAiBmB,KAAK,GAAGL,0BAA0B,CAACK,KAAK,CAAA;AAChEJ,IAAAA,MAAM,CAACK,CAAC,IAAIN,0BAA0B,CAACO,UAAU,CAAA;AACjDN,IAAAA,MAAM,CAACO,CAAC,IAAIR,0BAA0B,CAACS,SAAS,CAAA;AAChDvB,IAAAA,MAAM,CAACwB,KAAK,GAAGV,0BAA0B,CAACU,KAAK,CAAA;AAC/CxB,IAAAA,MAAM,CAACyB,MAAM,GAAGX,0BAA0B,CAACW,MAAM,CAAA;AACnD,GAAA;EACAzB,MAAM,CAAC0B,mBAAmB,CAACX,MAAM,EAAEY,MAAM,EAAEA,MAAM,CAAC,CAAA;AACpD;;;;"}
package/fabric.ts CHANGED
@@ -60,6 +60,10 @@ export {
60
60
  * Exported so we can tweak default values
61
61
  */
62
62
  export { FabricObject as BaseFabricObject } from './src/shapes/Object/Object';
63
+ /**
64
+ * Exported so we can tweak default values
65
+ */
66
+ export { InteractiveFabricObject } from './src/shapes/Object/InteractiveObject';
63
67
 
64
68
  export type {
65
69
  TFabricObjectProps,
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "fabric",
3
3
  "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.",
4
4
  "homepage": "http://fabricjs.com/",
5
- "version": "6.0.0",
5
+ "version": "6.0.2",
6
6
  "author": "Juriy Zaytsev <kangax@gmail.com>",
7
7
  "contributors": [
8
8
  {
@@ -11,6 +11,14 @@ import type {
11
11
  LayoutBeforeEvent,
12
12
  LayoutAfterEvent,
13
13
  } from './LayoutManager/types';
14
+ import type {
15
+ MODIFY_POLY,
16
+ MOVING,
17
+ RESIZING,
18
+ ROTATING,
19
+ SCALING,
20
+ SKEWING,
21
+ } from './constants';
14
22
 
15
23
  export type ModifierKey = keyof Pick<
16
24
  MouseEvent | PointerEvent | TouchEvent,
@@ -97,12 +105,12 @@ export interface BasicTransformEvent<E extends Event = TPointerEvent>
97
105
  }
98
106
 
99
107
  export type TModificationEvents =
100
- | 'moving'
101
- | 'scaling'
102
- | 'rotating'
103
- | 'skewing'
104
- | 'resizing'
105
- | 'modifyPoly';
108
+ | typeof MOVING
109
+ | typeof SCALING
110
+ | typeof ROTATING
111
+ | typeof SKEWING
112
+ | typeof RESIZING
113
+ | typeof MODIFY_POLY;
106
114
 
107
115
  export interface ModifiedEvent<E extends Event = TPointerEvent> {
108
116
  e?: E;
@@ -1,5 +1,16 @@
1
1
  import { Point } from '../Point';
2
- import { CENTER, iMatrix } from '../constants';
2
+ import {
3
+ CENTER,
4
+ CHANGED,
5
+ MODIFIED,
6
+ MODIFY_POLY,
7
+ MOVING,
8
+ RESIZING,
9
+ ROTATING,
10
+ SCALING,
11
+ SKEWING,
12
+ iMatrix,
13
+ } from '../constants';
3
14
  import type { Group } from '../shapes/Group';
4
15
  import type { FabricObject } from '../shapes/Object/FabricObject';
5
16
  import { invertTransform } from '../util/misc/matrix';
@@ -78,19 +89,19 @@ export class LayoutManager {
78
89
  const { target } = context;
79
90
  return (
80
91
  [
81
- 'modified',
82
- 'moving',
83
- 'resizing',
84
- 'rotating',
85
- 'scaling',
86
- 'skewing',
87
- 'changed',
88
- 'modifyPoly',
92
+ MODIFIED,
93
+ MOVING,
94
+ RESIZING,
95
+ ROTATING,
96
+ SCALING,
97
+ SKEWING,
98
+ CHANGED,
99
+ MODIFY_POLY,
89
100
  ] as (TModificationEvents & 'modified')[]
90
101
  ).map((key) =>
91
102
  object.on(key, (e) =>
92
103
  this.performLayout(
93
- key === 'modified'
104
+ key === MODIFIED
94
105
  ? {
95
106
  type: LAYOUT_TYPE_OBJECT_MODIFIED,
96
107
  trigger: key,
@@ -184,19 +195,16 @@ export class LayoutManager {
184
195
  protected getLayoutResult(
185
196
  context: StrictLayoutContext
186
197
  ): Required<LayoutResult> | undefined {
187
- const { target } = context;
198
+ const { target, strategy, type } = context;
188
199
 
189
- const result = context.strategy.calcLayoutResult(
190
- context,
191
- target.getObjects()
192
- );
200
+ const result = strategy.calcLayoutResult(context, target.getObjects());
193
201
 
194
202
  if (!result) {
195
203
  return;
196
204
  }
197
205
 
198
206
  const prevCenter =
199
- context.type === LAYOUT_TYPE_INITIALIZATION
207
+ type === LAYOUT_TYPE_INITIALIZATION
200
208
  ? new Point()
201
209
  : target.getRelativeCenterPoint();
202
210
 
@@ -210,7 +218,7 @@ export class LayoutManager {
210
218
  .add(correction)
211
219
  .transform(
212
220
  // in `initialization` we do not account for target's transformation matrix
213
- context.type === LAYOUT_TYPE_INITIALIZATION
221
+ type === LAYOUT_TYPE_INITIALIZATION
214
222
  ? iMatrix
215
223
  : invertTransform(target.calcOwnMatrix()),
216
224
  true
@@ -328,8 +336,9 @@ export class LayoutManager {
328
336
  }
329
337
 
330
338
  dispose() {
331
- this._subscriptions.forEach((disposers) => disposers.forEach((d) => d()));
332
- this._subscriptions.clear();
339
+ const { _subscriptions } = this;
340
+ _subscriptions.forEach((disposers) => disposers.forEach((d) => d()));
341
+ _subscriptions.clear();
333
342
  }
334
343
 
335
344
  toObject() {
@@ -26,7 +26,7 @@ export class ClipPathLayout extends LayoutStrategy {
26
26
  objects: FabricObject[]
27
27
  ): LayoutStrategyResult | undefined {
28
28
  const { target } = context;
29
- const { clipPath } = target;
29
+ const { clipPath, group } = target;
30
30
  if (!clipPath || !this.shouldPerformLayout(context)) {
31
31
  return;
32
32
  }
@@ -40,7 +40,7 @@ export class ClipPathLayout extends LayoutStrategy {
40
40
  const clipPathCenter = sendPointToPlane(
41
41
  clipPath.getRelativeCenterPoint(),
42
42
  undefined,
43
- target.group?.calcTransformMatrix()
43
+ group ? group.calcTransformMatrix() : undefined
44
44
  );
45
45
  return {
46
46
  center: clipPathCenter,
@@ -39,11 +39,11 @@ export abstract class LayoutStrategy {
39
39
  }
40
40
  }
41
41
 
42
- shouldPerformLayout(context: StrictLayoutContext) {
42
+ shouldPerformLayout({ type, prevStrategy, strategy }: StrictLayoutContext) {
43
43
  return (
44
- context.type === LAYOUT_TYPE_INITIALIZATION ||
45
- context.type === LAYOUT_TYPE_IMPERATIVE ||
46
- (!!context.prevStrategy && context.strategy !== context.prevStrategy)
44
+ type === LAYOUT_TYPE_INITIALIZATION ||
45
+ type === LAYOUT_TYPE_IMPERATIVE ||
46
+ (!!prevStrategy && strategy !== prevStrategy)
47
47
  );
48
48
  }
49
49
 
@@ -69,13 +69,13 @@ export abstract class LayoutStrategy {
69
69
  objects: FabricObject[],
70
70
  context: StrictLayoutContext
71
71
  ): LayoutStrategyResult | undefined {
72
- if (context.type === LAYOUT_TYPE_IMPERATIVE && context.overrides) {
72
+ const { type, target } = context;
73
+ if (type === LAYOUT_TYPE_IMPERATIVE && context.overrides) {
73
74
  return context.overrides;
74
75
  }
75
76
  if (objects.length === 0) {
76
77
  return;
77
78
  }
78
- const { target } = context;
79
79
  const { left, top, width, height } = makeBoundingBoxFromPoints(
80
80
  objects
81
81
  .map((object) => getObjectBounds(target, object))
@@ -85,7 +85,7 @@ export abstract class LayoutStrategy {
85
85
  const bboxLeftTop = new Point(left, top);
86
86
  const bboxCenter = bboxLeftTop.add(bboxSize.scalarDivide(2));
87
87
 
88
- if (context.type === LAYOUT_TYPE_INITIALIZATION) {
88
+ if (type === LAYOUT_TYPE_INITIALIZATION) {
89
89
  const actualSize = this.getInitialSize(context, {
90
90
  size: bboxSize,
91
91
  center: bboxCenter,
package/src/Observable.ts CHANGED
@@ -112,6 +112,14 @@ export class Observable<EventSpec> {
112
112
  }
113
113
  }
114
114
 
115
+ /**
116
+ * Unsubscribe all event listeners for eventname.
117
+ * Do not use this pattern. You could kill internal fabricJS events.
118
+ * We know we should have protected events for internal flows, but we don't have yet
119
+ * @deprecated
120
+ * @param {string} eventName event name (eg. 'after:render')
121
+ */
122
+ off<K extends keyof EventSpec>(eventName: K): void;
115
123
  /**
116
124
  * unsubscribe an event listener
117
125
  * @param {string} eventName event name (eg. 'after:render')
@@ -32,7 +32,21 @@ import { pick } from '../util/misc/pick';
32
32
  import { sendPointToPlane } from '../util/misc/planeChange';
33
33
  import { cos, createCanvasElement, sin } from '../util';
34
34
  import { CanvasDOMManager } from './DOMManagers/CanvasDOMManager';
35
- import { BOTTOM, CENTER, LEFT, RIGHT, TOP } from '../constants';
35
+ import {
36
+ BOTTOM,
37
+ CENTER,
38
+ LEFT,
39
+ MODIFIED,
40
+ RESIZING,
41
+ RIGHT,
42
+ ROTATE,
43
+ SCALE,
44
+ SCALE_X,
45
+ SCALE_Y,
46
+ SKEW_X,
47
+ SKEW_Y,
48
+ TOP,
49
+ } from '../constants';
36
50
  import type { CanvasOptions } from './CanvasOptions';
37
51
  import { canvasDefaults } from './CanvasOptions';
38
52
  import { Intersection } from '../Intersection';
@@ -517,13 +531,13 @@ export class SelectableCanvas<EventSpec extends CanvasEvents = CanvasEvents>
517
531
  let centerTransform;
518
532
 
519
533
  if (
520
- action === 'scale' ||
521
- action === 'scaleX' ||
522
- action === 'scaleY' ||
523
- action === 'resizing'
534
+ action === SCALE ||
535
+ action === SCALE_X ||
536
+ action === SCALE_Y ||
537
+ action === RESIZING
524
538
  ) {
525
539
  centerTransform = this.centeredScaling || target.centeredScaling;
526
- } else if (action === 'rotate') {
540
+ } else if (action === ROTATE) {
527
541
  centerTransform = this.centeredRotation || target.centeredRotation;
528
542
  }
529
543
 
@@ -1241,7 +1255,7 @@ export class SelectableCanvas<EventSpec extends CanvasEvents = CanvasEvents>
1241
1255
 
1242
1256
  if (transform.actionPerformed) {
1243
1257
  this.fire('object:modified', options);
1244
- target.fire('modified', options);
1258
+ target.fire(MODIFIED, options);
1245
1259
  }
1246
1260
  }
1247
1261
 
@@ -1340,10 +1354,10 @@ export class SelectableCanvas<EventSpec extends CanvasEvents = CanvasEvents>
1340
1354
  'flipX',
1341
1355
  'flipY',
1342
1356
  LEFT,
1343
- 'scaleX',
1344
- 'scaleY',
1345
- 'skewX',
1346
- 'skewY',
1357
+ SCALE_X,
1358
+ SCALE_Y,
1359
+ SKEW_X,
1360
+ SKEW_Y,
1347
1361
  TOP,
1348
1362
  ] as (keyof typeof instance)[];
1349
1363
  const originalValues = pick<typeof instance>(instance, layoutProps);
@@ -1,4 +1,4 @@
1
- //@ts-nocheck
1
+ // @ts-nocheck
2
2
 
3
3
  import { scalingEqually } from '../controls/scale';
4
4
  import { fireEvent } from '../controls/fireEvent';
@@ -7,7 +7,8 @@ import {
7
7
  radiansToDegrees,
8
8
  } from '../util/misc/radiansDegreesConversion';
9
9
  import { Canvas } from './Canvas';
10
- import { CENTER } from '../constants';
10
+ import { CENTER, ROTATING, ROTATE, SCALE } from '../constants';
11
+
11
12
  /**
12
13
  * Adds support for multi-touch gestures using the Event.js library.
13
14
  * Fires the following custom events:
@@ -61,13 +62,13 @@ Object.assign(Canvas.prototype, {
61
62
  const t = this._currentTransform;
62
63
  const e = this.__gesturesParams.e;
63
64
 
64
- t.action = 'scale';
65
+ t.action = SCALE;
65
66
  t.originX = t.originY = CENTER;
66
67
 
67
68
  this._scaleObjectBy(self.scale, e);
68
69
 
69
70
  if (self.rotation !== 0) {
70
- t.action = 'rotate';
71
+ t.action = ROTATE;
71
72
  this._rotateObjectByAngle(self.rotation, e);
72
73
  }
73
74
 
@@ -171,7 +172,7 @@ Object.assign(Canvas.prototype, {
171
172
  return;
172
173
  }
173
174
  t.target.rotate(radiansToDegrees(degreesToRadians(curAngle) + t.theta));
174
- fireEvent('rotating', {
175
+ fireEvent(ROTATING, {
175
176
  target: t.target,
176
177
  e: e,
177
178
  transform: t,
package/src/constants.ts CHANGED
@@ -25,3 +25,20 @@ export const RIGHT = 'right';
25
25
  export const NONE = 'none';
26
26
 
27
27
  export const reNewline = /\r?\n/;
28
+
29
+ export const MOVING = 'moving';
30
+ export const SCALING = 'scaling';
31
+ export const ROTATING = 'rotating';
32
+ export const ROTATE = 'rotate';
33
+ export const SKEWING = 'skewing';
34
+ export const RESIZING = 'resizing';
35
+ export const MODIFY_POLY = 'modifyPoly';
36
+ export const CHANGED = 'changed';
37
+ export const SCALE = 'scale';
38
+ export const SCALE_X = 'scaleX';
39
+ export const SCALE_Y = 'scaleY';
40
+ export const SKEW_X = 'skewX';
41
+ export const SKEW_Y = 'skewY';
42
+ export const FILL = 'fill';
43
+ export const STROKE = 'stroke';
44
+ export const MODIFIED = 'modified';
@@ -6,6 +6,7 @@ import type {
6
6
  } from '../EventTypeDefs';
7
7
  import { Intersection } from '../Intersection';
8
8
  import { Point } from '../Point';
9
+ import { SCALE } from '../constants';
9
10
  import type { InteractiveFabricObject } from '../shapes/Object/InteractiveObject';
10
11
  import type { TCornerPoint, TDegree, TMat2D } from '../typedefs';
11
12
  import {
@@ -39,7 +40,7 @@ export class Control {
39
40
  * @type {String}
40
41
  * @default 'scale'
41
42
  */
42
- actionName = 'scale';
43
+ actionName = SCALE;
43
44
 
44
45
  /**
45
46
  * Drawing angle of the control.
@@ -1,5 +1,5 @@
1
1
  import type { TransformActionHandler } from '../EventTypeDefs';
2
- import { CENTER, LEFT, RIGHT } from '../constants';
2
+ import { CENTER, LEFT, RESIZING, RIGHT } from '../constants';
3
3
  import { resolveOrigin } from '../util/misc/resolveOrigin';
4
4
  import { getLocalPoint, isTransformCentered } from './util';
5
5
  import { wrapWithFireEvent } from './wrapWithFireEvent';
@@ -51,6 +51,6 @@ export const changeObjectWidth: TransformActionHandler = (
51
51
  };
52
52
 
53
53
  export const changeWidth = wrapWithFireEvent(
54
- 'resizing',
54
+ RESIZING,
55
55
  wrapWithFixedAnchor(changeObjectWidth)
56
56
  );
@@ -1,3 +1,4 @@
1
+ import { RESIZING, ROTATE } from '../constants';
1
2
  import { changeWidth } from './changeWidth';
2
3
  import { Control } from './Control';
3
4
  import { rotationStyleHandler, rotationWithSnapping } from './rotate';
@@ -78,7 +79,7 @@ export const createObjectDefaultControls = () => ({
78
79
  cursorStyleHandler: rotationStyleHandler,
79
80
  offsetY: -40,
80
81
  withConnection: true,
81
- actionName: 'rotate',
82
+ actionName: ROTATE,
82
83
  }),
83
84
  });
84
85
 
@@ -88,14 +89,14 @@ export const createResizeControls = () => ({
88
89
  y: 0,
89
90
  actionHandler: changeWidth,
90
91
  cursorStyleHandler: scaleSkewCursorStyleHandler,
91
- actionName: 'resizing',
92
+ actionName: RESIZING,
92
93
  }),
93
94
  ml: new Control({
94
95
  x: -0.5,
95
96
  y: 0,
96
97
  actionHandler: changeWidth,
97
98
  cursorStyleHandler: scaleSkewCursorStyleHandler,
98
- actionName: 'resizing',
99
+ actionName: RESIZING,
99
100
  }),
100
101
  });
101
102
 
@@ -1,4 +1,4 @@
1
- import { twoMathPi } from '../constants';
1
+ import { FILL, STROKE, twoMathPi } from '../constants';
2
2
  import type { InteractiveFabricObject } from '../shapes/Object/InteractiveObject';
3
3
  import { degreesToRadians } from '../util/misc/radiansDegreesConversion';
4
4
  import type { Control } from './Control';
@@ -50,7 +50,7 @@ export function renderCircleControl(
50
50
  typeof styleOverride.transparentCorners !== 'undefined'
51
51
  ? styleOverride.transparentCorners
52
52
  : fabricObject.transparentCorners,
53
- methodName = transparentCorners ? 'stroke' : 'fill',
53
+ methodName = transparentCorners ? STROKE : FILL,
54
54
  stroke =
55
55
  !transparentCorners &&
56
56
  (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor);
@@ -111,7 +111,7 @@ export function renderSquareControl(
111
111
  typeof styleOverride.transparentCorners !== 'undefined'
112
112
  ? styleOverride.transparentCorners
113
113
  : fabricObject.transparentCorners,
114
- methodName = transparentCorners ? 'stroke' : 'fill',
114
+ methodName = transparentCorners ? STROKE : FILL,
115
115
  stroke =
116
116
  !transparentCorners &&
117
117
  (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor),
@@ -1,5 +1,5 @@
1
1
  import type { TransformActionHandler } from '../EventTypeDefs';
2
- import { LEFT, TOP } from '../constants';
2
+ import { LEFT, TOP, MOVING } from '../constants';
3
3
  import { fireEvent } from './fireEvent';
4
4
  import { commonEventInfo, isLocked } from './util';
5
5
 
@@ -26,7 +26,7 @@ export const dragHandler: TransformActionHandler = (
26
26
  moveX && target.set(LEFT, newLeft);
27
27
  moveY && target.set(TOP, newTop);
28
28
  if (moveX || moveY) {
29
- fireEvent('moving', commonEventInfo(eventData, transform, x, y));
29
+ fireEvent(MOVING, commonEventInfo(eventData, transform, x, y));
30
30
  }
31
31
  return moveX || moveY;
32
32
  };
@@ -11,8 +11,9 @@ import type {
11
11
  } from '../EventTypeDefs';
12
12
  import { wrapWithFireEvent } from './wrapWithFireEvent';
13
13
  import { sendPointToPlane } from '../util';
14
+ import { MODIFY_POLY } from '../constants';
14
15
 
15
- const ACTION_NAME: TModificationEvents = 'modifyPoly';
16
+ const ACTION_NAME: TModificationEvents = MODIFY_POLY;
16
17
 
17
18
  type TTransformAnchor = Transform & { pointIndex: number };
18
19
 
@@ -2,6 +2,7 @@ import type {
2
2
  ControlCursorCallback,
3
3
  TransformActionHandler,
4
4
  } from '../EventTypeDefs';
5
+ import { ROTATING } from '../constants';
5
6
  import { radiansToDegrees } from '../util/misc/radiansDegreesConversion';
6
7
  import { isLocked, NOT_ALLOWED_CURSOR } from './util';
7
8
  import { wrapWithFireEvent } from './wrapWithFireEvent';
@@ -82,6 +83,6 @@ const rotateObjectWithSnapping: TransformActionHandler = (
82
83
  };
83
84
 
84
85
  export const rotationWithSnapping = wrapWithFireEvent(
85
- 'rotating',
86
+ ROTATING,
86
87
  wrapWithFixedAnchor(rotateObjectWithSnapping)
87
88
  );