fabric 6.2.0 → 6.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1161) hide show
  1. package/.prettierignore +1 -0
  2. package/CHANGELOG.md +12 -4
  3. package/README.md +1 -1
  4. package/dist/extensions/aligning_guidelines/constant.d.ts +3 -0
  5. package/dist/extensions/aligning_guidelines/constant.d.ts.map +1 -0
  6. package/dist/extensions/aligning_guidelines/index.d.ts +5 -0
  7. package/dist/extensions/aligning_guidelines/index.d.ts.map +1 -0
  8. package/dist/extensions/aligning_guidelines/typedefs.d.ts +33 -0
  9. package/dist/extensions/aligning_guidelines/typedefs.d.ts.map +1 -0
  10. package/dist/extensions/aligning_guidelines/util/basic.d.ts +4 -0
  11. package/dist/extensions/aligning_guidelines/util/basic.d.ts.map +1 -0
  12. package/dist/extensions/aligning_guidelines/util/collect-line.d.ts +13 -0
  13. package/dist/extensions/aligning_guidelines/util/collect-line.d.ts.map +1 -0
  14. package/dist/extensions/aligning_guidelines/util/collect-point.d.ts +20 -0
  15. package/dist/extensions/aligning_guidelines/util/collect-point.d.ts.map +1 -0
  16. package/dist/extensions/aligning_guidelines/util/draw.d.ts +6 -0
  17. package/dist/extensions/aligning_guidelines/util/draw.d.ts.map +1 -0
  18. package/dist/extensions/aligning_guidelines/util/get-objects-by-target.d.ts +3 -0
  19. package/dist/extensions/aligning_guidelines/util/get-objects-by-target.d.ts.map +1 -0
  20. package/dist/extensions/index.d.ts +2 -0
  21. package/dist/extensions/index.d.ts.map +1 -0
  22. package/dist/index.js +140 -108
  23. package/dist/index.js.map +1 -1
  24. package/dist/index.min.js +1 -1
  25. package/dist/index.min.js.map +1 -1
  26. package/dist/index.min.mjs +1 -1
  27. package/dist/index.min.mjs.map +1 -1
  28. package/dist/index.mjs +140 -108
  29. package/dist/index.mjs.map +1 -1
  30. package/dist/index.node.cjs +140 -108
  31. package/dist/index.node.cjs.map +1 -1
  32. package/dist/index.node.mjs +140 -108
  33. package/dist/index.node.mjs.map +1 -1
  34. package/dist/package.json.min.mjs +1 -1
  35. package/dist/package.json.mjs +1 -1
  36. package/dist/src/ClassRegistry.min.mjs.map +1 -1
  37. package/dist/src/ClassRegistry.mjs.map +1 -1
  38. package/dist/src/Collection.min.mjs.map +1 -1
  39. package/dist/src/Collection.mjs.map +1 -1
  40. package/dist/src/Intersection.min.mjs.map +1 -1
  41. package/dist/src/Intersection.mjs.map +1 -1
  42. package/dist/src/LayoutManager/ActiveSelectionLayoutManager.min.mjs.map +1 -1
  43. package/dist/src/LayoutManager/ActiveSelectionLayoutManager.mjs.map +1 -1
  44. package/dist/src/LayoutManager/LayoutManager.d.ts +1 -1
  45. package/dist/src/LayoutManager/LayoutManager.d.ts.map +1 -1
  46. package/dist/src/LayoutManager/LayoutManager.min.mjs.map +1 -1
  47. package/dist/src/LayoutManager/LayoutManager.mjs +1 -1
  48. package/dist/src/LayoutManager/LayoutManager.mjs.map +1 -1
  49. package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.min.mjs.map +1 -1
  50. package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.mjs.map +1 -1
  51. package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.min.mjs.map +1 -1
  52. package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.mjs.map +1 -1
  53. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.min.mjs.map +1 -1
  54. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.mjs.map +1 -1
  55. package/dist/src/LayoutManager/LayoutStrategies/utils.min.mjs.map +1 -1
  56. package/dist/src/LayoutManager/LayoutStrategies/utils.mjs.map +1 -1
  57. package/dist/src/LayoutManager/types.d.ts.map +1 -1
  58. package/dist/src/Observable.min.mjs.map +1 -1
  59. package/dist/src/Observable.mjs.map +1 -1
  60. package/dist/src/Pattern/Pattern.d.ts +2 -2
  61. package/dist/src/Pattern/Pattern.d.ts.map +1 -1
  62. package/dist/src/Pattern/Pattern.min.mjs +1 -1
  63. package/dist/src/Pattern/Pattern.min.mjs.map +1 -1
  64. package/dist/src/Pattern/Pattern.mjs +14 -12
  65. package/dist/src/Pattern/Pattern.mjs.map +1 -1
  66. package/dist/src/Point.min.mjs.map +1 -1
  67. package/dist/src/Point.mjs.map +1 -1
  68. package/dist/src/Shadow.min.mjs.map +1 -1
  69. package/dist/src/Shadow.mjs.map +1 -1
  70. package/dist/src/brushes/CircleBrush.min.mjs.map +1 -1
  71. package/dist/src/brushes/CircleBrush.mjs.map +1 -1
  72. package/dist/src/brushes/PatternBrush.min.mjs.map +1 -1
  73. package/dist/src/brushes/PatternBrush.mjs.map +1 -1
  74. package/dist/src/brushes/PencilBrush.min.mjs.map +1 -1
  75. package/dist/src/brushes/PencilBrush.mjs.map +1 -1
  76. package/dist/src/brushes/SprayBrush.min.mjs.map +1 -1
  77. package/dist/src/brushes/SprayBrush.mjs.map +1 -1
  78. package/dist/src/canvas/Canvas.d.ts +1 -1
  79. package/dist/src/canvas/Canvas.d.ts.map +1 -1
  80. package/dist/src/canvas/Canvas.min.mjs.map +1 -1
  81. package/dist/src/canvas/Canvas.mjs +2 -1
  82. package/dist/src/canvas/Canvas.mjs.map +1 -1
  83. package/dist/src/canvas/DOMManagers/CanvasDOMManager.min.mjs.map +1 -1
  84. package/dist/src/canvas/DOMManagers/CanvasDOMManager.mjs.map +1 -1
  85. package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.min.mjs.map +1 -1
  86. package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.mjs.map +1 -1
  87. package/dist/src/canvas/DOMManagers/util.min.mjs.map +1 -1
  88. package/dist/src/canvas/DOMManagers/util.mjs.map +1 -1
  89. package/dist/src/canvas/SelectableCanvas.min.mjs.map +1 -1
  90. package/dist/src/canvas/SelectableCanvas.mjs.map +1 -1
  91. package/dist/src/canvas/StaticCanvas.d.ts +1 -1
  92. package/dist/src/canvas/StaticCanvas.d.ts.map +1 -1
  93. package/dist/src/canvas/StaticCanvas.min.mjs.map +1 -1
  94. package/dist/src/canvas/StaticCanvas.mjs +1 -1
  95. package/dist/src/canvas/StaticCanvas.mjs.map +1 -1
  96. package/dist/src/canvas/StaticCanvasOptions.d.ts.map +1 -1
  97. package/dist/src/canvas/StaticCanvasOptions.min.mjs.map +1 -1
  98. package/dist/src/canvas/StaticCanvasOptions.mjs.map +1 -1
  99. package/dist/src/canvas/TextEditingManager.min.mjs.map +1 -1
  100. package/dist/src/canvas/TextEditingManager.mjs.map +1 -1
  101. package/dist/src/color/Color.d.ts.map +1 -1
  102. package/dist/src/color/Color.min.mjs.map +1 -1
  103. package/dist/src/color/Color.mjs +1 -0
  104. package/dist/src/color/Color.mjs.map +1 -1
  105. package/dist/src/color/util.min.mjs.map +1 -1
  106. package/dist/src/color/util.mjs.map +1 -1
  107. package/dist/src/config.min.mjs.map +1 -1
  108. package/dist/src/config.mjs.map +1 -1
  109. package/dist/src/controls/Control.min.mjs.map +1 -1
  110. package/dist/src/controls/Control.mjs.map +1 -1
  111. package/dist/src/controls/changeWidth.min.mjs.map +1 -1
  112. package/dist/src/controls/changeWidth.mjs.map +1 -1
  113. package/dist/src/controls/controlRendering.min.mjs.map +1 -1
  114. package/dist/src/controls/controlRendering.mjs.map +1 -1
  115. package/dist/src/controls/drag.min.mjs.map +1 -1
  116. package/dist/src/controls/drag.mjs.map +1 -1
  117. package/dist/src/controls/fireEvent.min.mjs.map +1 -1
  118. package/dist/src/controls/fireEvent.mjs.map +1 -1
  119. package/dist/src/controls/pathControl.min.mjs.map +1 -1
  120. package/dist/src/controls/pathControl.mjs.map +1 -1
  121. package/dist/src/controls/polyControl.min.mjs.map +1 -1
  122. package/dist/src/controls/polyControl.mjs.map +1 -1
  123. package/dist/src/controls/rotate.min.mjs.map +1 -1
  124. package/dist/src/controls/rotate.mjs.map +1 -1
  125. package/dist/src/controls/scale.min.mjs.map +1 -1
  126. package/dist/src/controls/scale.mjs.map +1 -1
  127. package/dist/src/controls/scaleSkew.min.mjs.map +1 -1
  128. package/dist/src/controls/scaleSkew.mjs.map +1 -1
  129. package/dist/src/controls/skew.min.mjs.map +1 -1
  130. package/dist/src/controls/skew.mjs.map +1 -1
  131. package/dist/src/controls/util.min.mjs.map +1 -1
  132. package/dist/src/controls/util.mjs.map +1 -1
  133. package/dist/src/controls/wrapWithFireEvent.min.mjs.map +1 -1
  134. package/dist/src/controls/wrapWithFireEvent.mjs.map +1 -1
  135. package/dist/src/controls/wrapWithFixedAnchor.min.mjs.map +1 -1
  136. package/dist/src/controls/wrapWithFixedAnchor.mjs.map +1 -1
  137. package/dist/src/filters/BaseFilter.d.ts +5 -5
  138. package/dist/src/filters/BaseFilter.d.ts.map +1 -1
  139. package/dist/src/filters/BaseFilter.min.mjs.map +1 -1
  140. package/dist/src/filters/BaseFilter.mjs +5 -5
  141. package/dist/src/filters/BaseFilter.mjs.map +1 -1
  142. package/dist/src/filters/BlendColor.min.mjs.map +1 -1
  143. package/dist/src/filters/BlendColor.mjs.map +1 -1
  144. package/dist/src/filters/BlendImage.min.mjs.map +1 -1
  145. package/dist/src/filters/BlendImage.mjs.map +1 -1
  146. package/dist/src/filters/Blur.min.mjs.map +1 -1
  147. package/dist/src/filters/Blur.mjs.map +1 -1
  148. package/dist/src/filters/Brightness.min.mjs.map +1 -1
  149. package/dist/src/filters/Brightness.mjs.map +1 -1
  150. package/dist/src/filters/Canvas2dFilterBackend.min.mjs.map +1 -1
  151. package/dist/src/filters/Canvas2dFilterBackend.mjs.map +1 -1
  152. package/dist/src/filters/ColorMatrix.min.mjs.map +1 -1
  153. package/dist/src/filters/ColorMatrix.mjs.map +1 -1
  154. package/dist/src/filters/ColorMatrixFilters.min.mjs.map +1 -1
  155. package/dist/src/filters/ColorMatrixFilters.mjs.map +1 -1
  156. package/dist/src/filters/Composed.min.mjs.map +1 -1
  157. package/dist/src/filters/Composed.mjs.map +1 -1
  158. package/dist/src/filters/Contrast.min.mjs.map +1 -1
  159. package/dist/src/filters/Contrast.mjs.map +1 -1
  160. package/dist/src/filters/Convolute.min.mjs.map +1 -1
  161. package/dist/src/filters/Convolute.mjs.map +1 -1
  162. package/dist/src/filters/GLProbes/WebGLProbe.min.mjs.map +1 -1
  163. package/dist/src/filters/GLProbes/WebGLProbe.mjs.map +1 -1
  164. package/dist/src/filters/Gamma.min.mjs.map +1 -1
  165. package/dist/src/filters/Gamma.mjs.map +1 -1
  166. package/dist/src/filters/Grayscale.min.mjs.map +1 -1
  167. package/dist/src/filters/Grayscale.mjs.map +1 -1
  168. package/dist/src/filters/Invert.min.mjs.map +1 -1
  169. package/dist/src/filters/Invert.mjs.map +1 -1
  170. package/dist/src/filters/Noise.min.mjs.map +1 -1
  171. package/dist/src/filters/Noise.mjs.map +1 -1
  172. package/dist/src/filters/Pixelate.min.mjs.map +1 -1
  173. package/dist/src/filters/Pixelate.mjs.map +1 -1
  174. package/dist/src/filters/RemoveColor.min.mjs.map +1 -1
  175. package/dist/src/filters/RemoveColor.mjs.map +1 -1
  176. package/dist/src/filters/Resize.min.mjs.map +1 -1
  177. package/dist/src/filters/Resize.mjs.map +1 -1
  178. package/dist/src/filters/Saturation.min.mjs.map +1 -1
  179. package/dist/src/filters/Saturation.mjs.map +1 -1
  180. package/dist/src/filters/Vibrance.min.mjs.map +1 -1
  181. package/dist/src/filters/Vibrance.mjs.map +1 -1
  182. package/dist/src/filters/WebGLFilterBackend.min.mjs.map +1 -1
  183. package/dist/src/filters/WebGLFilterBackend.mjs.map +1 -1
  184. package/dist/src/filters/typedefs.d.ts +0 -1
  185. package/dist/src/filters/typedefs.d.ts.map +1 -1
  186. package/dist/src/filters/utils.min.mjs.map +1 -1
  187. package/dist/src/filters/utils.mjs.map +1 -1
  188. package/dist/src/gradient/Gradient.d.ts +7 -3
  189. package/dist/src/gradient/Gradient.d.ts.map +1 -1
  190. package/dist/src/gradient/Gradient.min.mjs +1 -1
  191. package/dist/src/gradient/Gradient.min.mjs.map +1 -1
  192. package/dist/src/gradient/Gradient.mjs +36 -24
  193. package/dist/src/gradient/Gradient.mjs.map +1 -1
  194. package/dist/src/gradient/parser/parseColorStops.min.mjs.map +1 -1
  195. package/dist/src/gradient/parser/parseColorStops.mjs.map +1 -1
  196. package/dist/src/gradient/parser/parseCoords.d.ts.map +1 -1
  197. package/dist/src/gradient/parser/parseCoords.min.mjs.map +1 -1
  198. package/dist/src/gradient/parser/parseCoords.mjs.map +1 -1
  199. package/dist/src/parser/applyViewboxTransform.min.mjs.map +1 -1
  200. package/dist/src/parser/applyViewboxTransform.mjs.map +1 -1
  201. package/dist/src/parser/constants.min.mjs.map +1 -1
  202. package/dist/src/parser/constants.mjs.map +1 -1
  203. package/dist/src/parser/elements_parser.min.mjs.map +1 -1
  204. package/dist/src/parser/elements_parser.mjs.map +1 -1
  205. package/dist/src/parser/getCSSRules.min.mjs.map +1 -1
  206. package/dist/src/parser/getCSSRules.mjs.map +1 -1
  207. package/dist/src/parser/getGlobalStylesForElement.min.mjs.map +1 -1
  208. package/dist/src/parser/getGlobalStylesForElement.mjs.map +1 -1
  209. package/dist/src/parser/getGradientDefs.min.mjs.map +1 -1
  210. package/dist/src/parser/getGradientDefs.mjs.map +1 -1
  211. package/dist/src/parser/getMultipleNodes.min.mjs.map +1 -1
  212. package/dist/src/parser/getMultipleNodes.mjs.map +1 -1
  213. package/dist/src/parser/loadSVGFromString.min.mjs.map +1 -1
  214. package/dist/src/parser/loadSVGFromString.mjs.map +1 -1
  215. package/dist/src/parser/loadSVGFromURL.min.mjs.map +1 -1
  216. package/dist/src/parser/loadSVGFromURL.mjs.map +1 -1
  217. package/dist/src/parser/normalizeAttr.min.mjs.map +1 -1
  218. package/dist/src/parser/normalizeAttr.mjs.map +1 -1
  219. package/dist/src/parser/normalizeValue.min.mjs.map +1 -1
  220. package/dist/src/parser/normalizeValue.mjs.map +1 -1
  221. package/dist/src/parser/parseAttributes.min.mjs.map +1 -1
  222. package/dist/src/parser/parseAttributes.mjs.map +1 -1
  223. package/dist/src/parser/parseFontDeclaration.min.mjs.map +1 -1
  224. package/dist/src/parser/parseFontDeclaration.mjs.map +1 -1
  225. package/dist/src/parser/parseSVGDocument.min.mjs.map +1 -1
  226. package/dist/src/parser/parseSVGDocument.mjs.map +1 -1
  227. package/dist/src/parser/parseStyleObject.min.mjs.map +1 -1
  228. package/dist/src/parser/parseStyleObject.mjs.map +1 -1
  229. package/dist/src/parser/parseStyleString.min.mjs.map +1 -1
  230. package/dist/src/parser/parseStyleString.mjs.map +1 -1
  231. package/dist/src/parser/parseTransformAttribute.min.mjs.map +1 -1
  232. package/dist/src/parser/parseTransformAttribute.mjs.map +1 -1
  233. package/dist/src/parser/parseUseDirectives.min.mjs.map +1 -1
  234. package/dist/src/parser/parseUseDirectives.mjs.map +1 -1
  235. package/dist/src/parser/percent.min.mjs.map +1 -1
  236. package/dist/src/parser/percent.mjs.map +1 -1
  237. package/dist/src/parser/recursivelyParseGradientsXlink.min.mjs.map +1 -1
  238. package/dist/src/parser/recursivelyParseGradientsXlink.mjs.map +1 -1
  239. package/dist/src/parser/setStrokeFillOpacity.min.mjs.map +1 -1
  240. package/dist/src/parser/setStrokeFillOpacity.mjs.map +1 -1
  241. package/dist/src/shapes/ActiveSelection.min.mjs.map +1 -1
  242. package/dist/src/shapes/ActiveSelection.mjs.map +1 -1
  243. package/dist/src/shapes/Circle.min.mjs.map +1 -1
  244. package/dist/src/shapes/Circle.mjs.map +1 -1
  245. package/dist/src/shapes/Ellipse.min.mjs.map +1 -1
  246. package/dist/src/shapes/Ellipse.mjs.map +1 -1
  247. package/dist/src/shapes/Group.d.ts +2 -2
  248. package/dist/src/shapes/Group.d.ts.map +1 -1
  249. package/dist/src/shapes/Group.min.mjs.map +1 -1
  250. package/dist/src/shapes/Group.mjs.map +1 -1
  251. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts.map +1 -1
  252. package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs +1 -1
  253. package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs.map +1 -1
  254. package/dist/src/shapes/IText/DraggableTextDelegate.mjs +2 -2
  255. package/dist/src/shapes/IText/DraggableTextDelegate.mjs.map +1 -1
  256. package/dist/src/shapes/IText/IText.min.mjs.map +1 -1
  257. package/dist/src/shapes/IText/IText.mjs.map +1 -1
  258. package/dist/src/shapes/IText/ITextBehavior.min.mjs.map +1 -1
  259. package/dist/src/shapes/IText/ITextBehavior.mjs.map +1 -1
  260. package/dist/src/shapes/IText/ITextClickBehavior.min.mjs.map +1 -1
  261. package/dist/src/shapes/IText/ITextClickBehavior.mjs.map +1 -1
  262. package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs.map +1 -1
  263. package/dist/src/shapes/IText/ITextKeyBehavior.mjs.map +1 -1
  264. package/dist/src/shapes/Image.min.mjs.map +1 -1
  265. package/dist/src/shapes/Image.mjs.map +1 -1
  266. package/dist/src/shapes/Line.min.mjs.map +1 -1
  267. package/dist/src/shapes/Line.mjs.map +1 -1
  268. package/dist/src/shapes/Object/AnimatableObject.d.ts.map +1 -1
  269. package/dist/src/shapes/Object/AnimatableObject.min.mjs.map +1 -1
  270. package/dist/src/shapes/Object/AnimatableObject.mjs.map +1 -1
  271. package/dist/src/shapes/Object/FabricObject.d.ts.map +1 -1
  272. package/dist/src/shapes/Object/FabricObject.min.mjs.map +1 -1
  273. package/dist/src/shapes/Object/FabricObject.mjs +2 -1
  274. package/dist/src/shapes/Object/FabricObject.mjs.map +1 -1
  275. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +1 -1
  276. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
  277. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs.map +1 -1
  278. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs +1 -1
  279. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs.map +1 -1
  280. package/dist/src/shapes/Object/InteractiveObject.d.ts +13 -13
  281. package/dist/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
  282. package/dist/src/shapes/Object/InteractiveObject.min.mjs.map +1 -1
  283. package/dist/src/shapes/Object/InteractiveObject.mjs +13 -13
  284. package/dist/src/shapes/Object/InteractiveObject.mjs.map +1 -1
  285. package/dist/src/shapes/Object/Object.d.ts +4 -4
  286. package/dist/src/shapes/Object/Object.d.ts.map +1 -1
  287. package/dist/src/shapes/Object/Object.min.mjs +1 -1
  288. package/dist/src/shapes/Object/Object.min.mjs.map +1 -1
  289. package/dist/src/shapes/Object/Object.mjs +10 -14
  290. package/dist/src/shapes/Object/Object.mjs.map +1 -1
  291. package/dist/src/shapes/Object/ObjectGeometry.d.ts +1 -1
  292. package/dist/src/shapes/Object/ObjectGeometry.min.mjs.map +1 -1
  293. package/dist/src/shapes/Object/ObjectGeometry.mjs +1 -1
  294. package/dist/src/shapes/Object/ObjectGeometry.mjs.map +1 -1
  295. package/dist/src/shapes/Object/ObjectOrigin.min.mjs.map +1 -1
  296. package/dist/src/shapes/Object/ObjectOrigin.mjs.map +1 -1
  297. package/dist/src/shapes/Object/StackedObject.d.ts.map +1 -1
  298. package/dist/src/shapes/Object/StackedObject.min.mjs.map +1 -1
  299. package/dist/src/shapes/Object/StackedObject.mjs.map +1 -1
  300. package/dist/src/shapes/Path.min.mjs.map +1 -1
  301. package/dist/src/shapes/Path.mjs.map +1 -1
  302. package/dist/src/shapes/Polyline.d.ts.map +1 -1
  303. package/dist/src/shapes/Polyline.min.mjs +1 -1
  304. package/dist/src/shapes/Polyline.min.mjs.map +1 -1
  305. package/dist/src/shapes/Polyline.mjs +10 -2
  306. package/dist/src/shapes/Polyline.mjs.map +1 -1
  307. package/dist/src/shapes/Rect.min.mjs.map +1 -1
  308. package/dist/src/shapes/Rect.mjs.map +1 -1
  309. package/dist/src/shapes/Text/StyledText.min.mjs.map +1 -1
  310. package/dist/src/shapes/Text/StyledText.mjs.map +1 -1
  311. package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
  312. package/dist/src/shapes/Text/Text.mjs +1 -1
  313. package/dist/src/shapes/Text/Text.mjs.map +1 -1
  314. package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs.map +1 -1
  315. package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +1 -1
  316. package/dist/src/shapes/Textbox.min.mjs.map +1 -1
  317. package/dist/src/shapes/Textbox.mjs.map +1 -1
  318. package/dist/src/shapes/Triangle.min.mjs.map +1 -1
  319. package/dist/src/shapes/Triangle.mjs.map +1 -1
  320. package/dist/src/util/animation/AnimationBase.min.mjs.map +1 -1
  321. package/dist/src/util/animation/AnimationBase.mjs.map +1 -1
  322. package/dist/src/util/animation/AnimationRegistry.min.mjs.map +1 -1
  323. package/dist/src/util/animation/AnimationRegistry.mjs.map +1 -1
  324. package/dist/src/util/animation/ArrayAnimation.min.mjs.map +1 -1
  325. package/dist/src/util/animation/ArrayAnimation.mjs.map +1 -1
  326. package/dist/src/util/animation/ColorAnimation.min.mjs.map +1 -1
  327. package/dist/src/util/animation/ColorAnimation.mjs.map +1 -1
  328. package/dist/src/util/animation/ValueAnimation.min.mjs.map +1 -1
  329. package/dist/src/util/animation/ValueAnimation.mjs.map +1 -1
  330. package/dist/src/util/animation/animate.d.ts.map +1 -1
  331. package/dist/src/util/animation/animate.min.mjs.map +1 -1
  332. package/dist/src/util/animation/animate.mjs.map +1 -1
  333. package/dist/src/util/animation/easing.min.mjs.map +1 -1
  334. package/dist/src/util/animation/easing.mjs.map +1 -1
  335. package/dist/src/util/animation/types.d.ts.map +1 -1
  336. package/dist/src/util/applyMixins.min.mjs.map +1 -1
  337. package/dist/src/util/applyMixins.mjs.map +1 -1
  338. package/dist/src/util/dom_style.min.mjs.map +1 -1
  339. package/dist/src/util/dom_style.mjs.map +1 -1
  340. package/dist/src/util/internals/cloneDeep.d.ts +6 -0
  341. package/dist/src/util/internals/cloneDeep.d.ts.map +1 -1
  342. package/dist/src/util/internals/cloneStyles.d.ts +3 -0
  343. package/dist/src/util/internals/cloneStyles.d.ts.map +1 -0
  344. package/dist/src/util/internals/cloneStyles.min.mjs +2 -0
  345. package/dist/src/util/internals/cloneStyles.min.mjs.map +1 -0
  346. package/dist/src/util/internals/cloneStyles.mjs +15 -0
  347. package/dist/src/util/internals/cloneStyles.mjs.map +1 -0
  348. package/dist/src/util/internals/findRight.min.mjs.map +1 -1
  349. package/dist/src/util/internals/findRight.mjs.map +1 -1
  350. package/dist/src/util/misc/boundingBoxFromPoints.min.mjs.map +1 -1
  351. package/dist/src/util/misc/boundingBoxFromPoints.mjs.map +1 -1
  352. package/dist/src/util/misc/dom.min.mjs.map +1 -1
  353. package/dist/src/util/misc/dom.mjs.map +1 -1
  354. package/dist/src/util/misc/findScaleTo.min.mjs.map +1 -1
  355. package/dist/src/util/misc/findScaleTo.mjs.map +1 -1
  356. package/dist/src/util/misc/groupSVGElements.min.mjs.map +1 -1
  357. package/dist/src/util/misc/groupSVGElements.mjs.map +1 -1
  358. package/dist/src/util/misc/isTransparent.min.mjs.map +1 -1
  359. package/dist/src/util/misc/isTransparent.mjs.map +1 -1
  360. package/dist/src/util/misc/matrix.min.mjs.map +1 -1
  361. package/dist/src/util/misc/matrix.mjs.map +1 -1
  362. package/dist/src/util/misc/objectEnlive.min.mjs.map +1 -1
  363. package/dist/src/util/misc/objectEnlive.mjs.map +1 -1
  364. package/dist/src/util/misc/objectTransforms.min.mjs.map +1 -1
  365. package/dist/src/util/misc/objectTransforms.mjs.map +1 -1
  366. package/dist/src/util/misc/pick.min.mjs.map +1 -1
  367. package/dist/src/util/misc/pick.mjs.map +1 -1
  368. package/dist/src/util/misc/planeChange.min.mjs.map +1 -1
  369. package/dist/src/util/misc/planeChange.mjs.map +1 -1
  370. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.min.mjs.map +1 -1
  371. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.mjs.map +1 -1
  372. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.min.mjs.map +1 -1
  373. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.mjs.map +1 -1
  374. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.min.mjs.map +1 -1
  375. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.mjs.map +1 -1
  376. package/dist/src/util/misc/projectStroke/index.min.mjs.map +1 -1
  377. package/dist/src/util/misc/projectStroke/index.mjs.map +1 -1
  378. package/dist/src/util/misc/resolveOrigin.min.mjs.map +1 -1
  379. package/dist/src/util/misc/resolveOrigin.mjs.map +1 -1
  380. package/dist/src/util/misc/rotatePoint.min.mjs.map +1 -1
  381. package/dist/src/util/misc/rotatePoint.mjs.map +1 -1
  382. package/dist/src/util/misc/svgParsing.min.mjs.map +1 -1
  383. package/dist/src/util/misc/svgParsing.mjs.map +1 -1
  384. package/dist/src/util/misc/textStyles.min.mjs +1 -1
  385. package/dist/src/util/misc/textStyles.min.mjs.map +1 -1
  386. package/dist/src/util/misc/textStyles.mjs +3 -3
  387. package/dist/src/util/misc/textStyles.mjs.map +1 -1
  388. package/dist/src/util/misc/vectors.min.mjs.map +1 -1
  389. package/dist/src/util/misc/vectors.mjs.map +1 -1
  390. package/dist/src/util/path/index.min.mjs.map +1 -1
  391. package/dist/src/util/path/index.mjs.map +1 -1
  392. package/dist/src/util/path/typedefs.d.ts.map +1 -1
  393. package/dist/src/util/transform_matrix_removal.min.mjs.map +1 -1
  394. package/dist/src/util/transform_matrix_removal.mjs.map +1 -1
  395. package/dist/src/util/typeAssertions.min.mjs.map +1 -1
  396. package/dist/src/util/typeAssertions.mjs.map +1 -1
  397. package/dist-extensions/aligning_guidelines/constant.mjs +11 -0
  398. package/dist-extensions/aligning_guidelines/constant.mjs.map +1 -0
  399. package/dist-extensions/aligning_guidelines/index.mjs +130 -0
  400. package/dist-extensions/aligning_guidelines/index.mjs.map +1 -0
  401. package/dist-extensions/aligning_guidelines/util/basic.mjs +11 -0
  402. package/dist-extensions/aligning_guidelines/util/basic.mjs.map +1 -0
  403. package/dist-extensions/aligning_guidelines/util/collect-line.mjs +193 -0
  404. package/dist-extensions/aligning_guidelines/util/collect-line.mjs.map +1 -0
  405. package/dist-extensions/aligning_guidelines/util/collect-point.mjs +102 -0
  406. package/dist-extensions/aligning_guidelines/util/collect-point.mjs.map +1 -0
  407. package/dist-extensions/aligning_guidelines/util/draw.mjs +75 -0
  408. package/dist-extensions/aligning_guidelines/util/draw.mjs.map +1 -0
  409. package/dist-extensions/aligning_guidelines/util/get-objects-by-target.mjs +42 -0
  410. package/dist-extensions/aligning_guidelines/util/get-objects-by-target.mjs.map +1 -0
  411. package/dist-extensions/extensions/aligning_guidelines/constant.d.ts +3 -0
  412. package/dist-extensions/extensions/aligning_guidelines/constant.d.ts.map +1 -0
  413. package/dist-extensions/extensions/aligning_guidelines/index.d.ts +5 -0
  414. package/dist-extensions/extensions/aligning_guidelines/index.d.ts.map +1 -0
  415. package/dist-extensions/extensions/aligning_guidelines/typedefs.d.ts +33 -0
  416. package/dist-extensions/extensions/aligning_guidelines/typedefs.d.ts.map +1 -0
  417. package/dist-extensions/extensions/aligning_guidelines/util/basic.d.ts +4 -0
  418. package/dist-extensions/extensions/aligning_guidelines/util/basic.d.ts.map +1 -0
  419. package/dist-extensions/extensions/aligning_guidelines/util/collect-line.d.ts +13 -0
  420. package/dist-extensions/extensions/aligning_guidelines/util/collect-line.d.ts.map +1 -0
  421. package/dist-extensions/extensions/aligning_guidelines/util/collect-point.d.ts +20 -0
  422. package/dist-extensions/extensions/aligning_guidelines/util/collect-point.d.ts.map +1 -0
  423. package/dist-extensions/extensions/aligning_guidelines/util/draw.d.ts +6 -0
  424. package/dist-extensions/extensions/aligning_guidelines/util/draw.d.ts.map +1 -0
  425. package/dist-extensions/extensions/aligning_guidelines/util/get-objects-by-target.d.ts +3 -0
  426. package/dist-extensions/extensions/aligning_guidelines/util/get-objects-by-target.d.ts.map +1 -0
  427. package/dist-extensions/extensions/index.d.ts +2 -0
  428. package/dist-extensions/extensions/index.d.ts.map +1 -0
  429. package/dist-extensions/fabric-extensions.min.js +2 -0
  430. package/dist-extensions/fabric-extensions.min.js.map +1 -0
  431. package/dist-extensions/fabric.d.ts +119 -0
  432. package/dist-extensions/fabric.d.ts.map +1 -0
  433. package/dist-extensions/index.d.ts +2 -0
  434. package/dist-extensions/index.d.ts.map +1 -0
  435. package/dist-extensions/index.mjs +2 -0
  436. package/dist-extensions/index.mjs.map +1 -0
  437. package/dist-extensions/src/ClassRegistry.d.ts +14 -0
  438. package/dist-extensions/src/ClassRegistry.d.ts.map +1 -0
  439. package/dist-extensions/src/Collection.d.ts +141 -0
  440. package/dist-extensions/src/Collection.d.ts.map +1 -0
  441. package/dist-extensions/src/CommonMethods.d.ts +32 -0
  442. package/dist-extensions/src/CommonMethods.d.ts.map +1 -0
  443. package/dist-extensions/src/EventTypeDefs.d.ts +286 -0
  444. package/dist-extensions/src/EventTypeDefs.d.ts.map +1 -0
  445. package/dist-extensions/src/Intersection.d.ts +120 -0
  446. package/dist-extensions/src/Intersection.d.ts.map +1 -0
  447. package/dist-extensions/src/LayoutManager/ActiveSelectionLayoutManager.d.ts +22 -0
  448. package/dist-extensions/src/LayoutManager/ActiveSelectionLayoutManager.d.ts.map +1 -0
  449. package/dist-extensions/src/LayoutManager/LayoutManager.d.ts +56 -0
  450. package/dist-extensions/src/LayoutManager/LayoutManager.d.ts.map +1 -0
  451. package/dist-extensions/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts +13 -0
  452. package/dist-extensions/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts.map +1 -0
  453. package/dist-extensions/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts +14 -0
  454. package/dist-extensions/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts.map +1 -0
  455. package/dist-extensions/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts +14 -0
  456. package/dist-extensions/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts.map +1 -0
  457. package/dist-extensions/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts +30 -0
  458. package/dist-extensions/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts.map +1 -0
  459. package/dist-extensions/src/LayoutManager/LayoutStrategies/utils.d.ts +10 -0
  460. package/dist-extensions/src/LayoutManager/LayoutStrategies/utils.d.ts.map +1 -0
  461. package/dist-extensions/src/LayoutManager/constants.d.ts +7 -0
  462. package/dist-extensions/src/LayoutManager/constants.d.ts.map +1 -0
  463. package/dist-extensions/src/LayoutManager/index.d.ts +7 -0
  464. package/dist-extensions/src/LayoutManager/index.d.ts.map +1 -0
  465. package/dist-extensions/src/LayoutManager/types.d.ts +106 -0
  466. package/dist-extensions/src/LayoutManager/types.d.ts.map +1 -0
  467. package/dist-extensions/src/Observable.d.ts +68 -0
  468. package/dist-extensions/src/Observable.d.ts.map +1 -0
  469. package/dist-extensions/src/Pattern/Pattern.d.ts +99 -0
  470. package/dist-extensions/src/Pattern/Pattern.d.ts.map +1 -0
  471. package/dist-extensions/src/Pattern/index.d.ts +3 -0
  472. package/dist-extensions/src/Pattern/index.d.ts.map +1 -0
  473. package/dist-extensions/src/Pattern/types.d.ts +12 -0
  474. package/dist-extensions/src/Pattern/types.d.ts.map +1 -0
  475. package/dist-extensions/src/Point.d.ts +233 -0
  476. package/dist-extensions/src/Point.d.ts.map +1 -0
  477. package/dist-extensions/src/Shadow.d.ts +95 -0
  478. package/dist-extensions/src/Shadow.d.ts.map +1 -0
  479. package/dist-extensions/src/brushes/BaseBrush.d.ts +101 -0
  480. package/dist-extensions/src/brushes/BaseBrush.d.ts.map +1 -0
  481. package/dist-extensions/src/brushes/CircleBrush.d.ts +44 -0
  482. package/dist-extensions/src/brushes/CircleBrush.d.ts.map +1 -0
  483. package/dist-extensions/src/brushes/PatternBrush.d.ts +23 -0
  484. package/dist-extensions/src/brushes/PatternBrush.d.ts.map +1 -0
  485. package/dist-extensions/src/brushes/PencilBrush.d.ts +92 -0
  486. package/dist-extensions/src/brushes/PencilBrush.d.ts.map +1 -0
  487. package/dist-extensions/src/brushes/SprayBrush.d.ts +74 -0
  488. package/dist-extensions/src/brushes/SprayBrush.d.ts.map +1 -0
  489. package/dist-extensions/src/brushes/typedefs.d.ts +18 -0
  490. package/dist-extensions/src/brushes/typedefs.d.ts.map +1 -0
  491. package/dist-extensions/src/cache.d.ts +47 -0
  492. package/dist-extensions/src/cache.d.ts.map +1 -0
  493. package/dist-extensions/src/canvas/Canvas.d.ts +339 -0
  494. package/dist-extensions/src/canvas/Canvas.d.ts.map +1 -0
  495. package/dist-extensions/src/canvas/CanvasOptions.d.ts +229 -0
  496. package/dist-extensions/src/canvas/CanvasOptions.d.ts.map +1 -0
  497. package/dist-extensions/src/canvas/DOMManagers/CanvasDOMManager.d.ts +29 -0
  498. package/dist-extensions/src/canvas/DOMManagers/CanvasDOMManager.d.ts.map +1 -0
  499. package/dist-extensions/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts +29 -0
  500. package/dist-extensions/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts.map +1 -0
  501. package/dist-extensions/src/canvas/DOMManagers/util.d.ts +24 -0
  502. package/dist-extensions/src/canvas/DOMManagers/util.d.ts.map +1 -0
  503. package/dist-extensions/src/canvas/SelectableCanvas.d.ts +534 -0
  504. package/dist-extensions/src/canvas/SelectableCanvas.d.ts.map +1 -0
  505. package/dist-extensions/src/canvas/StaticCanvas.d.ts +639 -0
  506. package/dist-extensions/src/canvas/StaticCanvas.d.ts.map +1 -0
  507. package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts +153 -0
  508. package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts.map +1 -0
  509. package/dist-extensions/src/canvas/TextEditingManager.d.ts +21 -0
  510. package/dist-extensions/src/canvas/TextEditingManager.d.ts.map +1 -0
  511. package/dist-extensions/src/color/Color.d.ts +162 -0
  512. package/dist-extensions/src/color/Color.d.ts.map +1 -0
  513. package/dist-extensions/src/color/color_map.d.ts +155 -0
  514. package/dist-extensions/src/color/color_map.d.ts.map +1 -0
  515. package/dist-extensions/src/color/constants.d.ts +111 -0
  516. package/dist-extensions/src/color/constants.d.ts.map +1 -0
  517. package/dist-extensions/src/color/typedefs.d.ts +16 -0
  518. package/dist-extensions/src/color/typedefs.d.ts.map +1 -0
  519. package/dist-extensions/src/color/util.d.ts +27 -0
  520. package/dist-extensions/src/color/util.d.ts.map +1 -0
  521. package/dist-extensions/src/config.d.ts +115 -0
  522. package/dist-extensions/src/config.d.ts.map +1 -0
  523. package/dist-extensions/src/constants.d.ts +35 -0
  524. package/dist-extensions/src/constants.d.ts.map +1 -0
  525. package/dist-extensions/src/controls/Control.d.ts +229 -0
  526. package/dist-extensions/src/controls/Control.d.ts.map +1 -0
  527. package/dist-extensions/src/controls/changeWidth.d.ts +13 -0
  528. package/dist-extensions/src/controls/changeWidth.d.ts.map +1 -0
  529. package/dist-extensions/src/controls/commonControls.d.ts +28 -0
  530. package/dist-extensions/src/controls/commonControls.d.ts.map +1 -0
  531. package/dist-extensions/src/controls/controlRendering.d.ts +29 -0
  532. package/dist-extensions/src/controls/controlRendering.d.ts.map +1 -0
  533. package/dist-extensions/src/controls/drag.d.ts +12 -0
  534. package/dist-extensions/src/controls/drag.d.ts.map +1 -0
  535. package/dist-extensions/src/controls/fireEvent.d.ts +3 -0
  536. package/dist-extensions/src/controls/fireEvent.d.ts.map +1 -0
  537. package/dist-extensions/src/controls/index.d.ts +14 -0
  538. package/dist-extensions/src/controls/index.d.ts.map +1 -0
  539. package/dist-extensions/src/controls/pathControl.d.ts +12 -0
  540. package/dist-extensions/src/controls/pathControl.d.ts.map +1 -0
  541. package/dist-extensions/src/controls/polyControl.d.ts +30 -0
  542. package/dist-extensions/src/controls/polyControl.d.ts.map +1 -0
  543. package/dist-extensions/src/controls/rotate.d.ts +12 -0
  544. package/dist-extensions/src/controls/rotate.d.ts.map +1 -0
  545. package/dist-extensions/src/controls/scale.d.ts +47 -0
  546. package/dist-extensions/src/controls/scale.d.ts.map +1 -0
  547. package/dist-extensions/src/controls/scaleSkew.d.ts +39 -0
  548. package/dist-extensions/src/controls/scaleSkew.d.ts.map +1 -0
  549. package/dist-extensions/src/controls/skew.d.ts +33 -0
  550. package/dist-extensions/src/controls/skew.d.ts.map +1 -0
  551. package/dist-extensions/src/controls/util.d.ts +41 -0
  552. package/dist-extensions/src/controls/util.d.ts.map +1 -0
  553. package/dist-extensions/src/controls/wrapWithFireEvent.d.ts +10 -0
  554. package/dist-extensions/src/controls/wrapWithFireEvent.d.ts.map +1 -0
  555. package/dist-extensions/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  556. package/dist-extensions/src/controls/wrapWithFixedAnchor.d.ts.map +1 -0
  557. package/dist-extensions/src/env/browser.d.ts +3 -0
  558. package/dist-extensions/src/env/browser.d.ts.map +1 -0
  559. package/dist-extensions/src/env/index.d.ts +34 -0
  560. package/dist-extensions/src/env/index.d.ts.map +1 -0
  561. package/dist-extensions/src/env/types.d.ts +16 -0
  562. package/dist-extensions/src/env/types.d.ts.map +1 -0
  563. package/dist-extensions/src/filters/BaseFilter.d.ts +153 -0
  564. package/dist-extensions/src/filters/BaseFilter.d.ts.map +1 -0
  565. package/dist-extensions/src/filters/BlendColor.d.ts +68 -0
  566. package/dist-extensions/src/filters/BlendColor.d.ts.map +1 -0
  567. package/dist-extensions/src/filters/BlendImage.d.ts +99 -0
  568. package/dist-extensions/src/filters/BlendImage.d.ts.map +1 -0
  569. package/dist-extensions/src/filters/Blur.d.ts +50 -0
  570. package/dist-extensions/src/filters/Blur.d.ts.map +1 -0
  571. package/dist-extensions/src/filters/Brightness.d.ts +46 -0
  572. package/dist-extensions/src/filters/Brightness.d.ts.map +1 -0
  573. package/dist-extensions/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  574. package/dist-extensions/src/filters/Canvas2dFilterBackend.d.ts.map +1 -0
  575. package/dist-extensions/src/filters/ColorMatrix.d.ts +66 -0
  576. package/dist-extensions/src/filters/ColorMatrix.d.ts.map +1 -0
  577. package/dist-extensions/src/filters/ColorMatrixFilters.d.ts +15 -0
  578. package/dist-extensions/src/filters/ColorMatrixFilters.d.ts.map +1 -0
  579. package/dist-extensions/src/filters/Composed.d.ts +47 -0
  580. package/dist-extensions/src/filters/Composed.d.ts.map +1 -0
  581. package/dist-extensions/src/filters/Contrast.d.ts +44 -0
  582. package/dist-extensions/src/filters/Contrast.d.ts.map +1 -0
  583. package/dist-extensions/src/filters/Convolute.d.ts +81 -0
  584. package/dist-extensions/src/filters/Convolute.d.ts.map +1 -0
  585. package/dist-extensions/src/filters/FilterBackend.d.ts +15 -0
  586. package/dist-extensions/src/filters/FilterBackend.d.ts.map +1 -0
  587. package/dist-extensions/src/filters/GLProbes/GLProbe.d.ts +7 -0
  588. package/dist-extensions/src/filters/GLProbes/GLProbe.d.ts.map +1 -0
  589. package/dist-extensions/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
  590. package/dist-extensions/src/filters/GLProbes/WebGLProbe.d.ts.map +1 -0
  591. package/dist-extensions/src/filters/Gamma.d.ts +58 -0
  592. package/dist-extensions/src/filters/Gamma.d.ts.map +1 -0
  593. package/dist-extensions/src/filters/Grayscale.d.ts +44 -0
  594. package/dist-extensions/src/filters/Grayscale.d.ts.map +1 -0
  595. package/dist-extensions/src/filters/HueRotation.d.ts +31 -0
  596. package/dist-extensions/src/filters/HueRotation.d.ts.map +1 -0
  597. package/dist-extensions/src/filters/Invert.d.ts +53 -0
  598. package/dist-extensions/src/filters/Invert.d.ts.map +1 -0
  599. package/dist-extensions/src/filters/Noise.d.ts +44 -0
  600. package/dist-extensions/src/filters/Noise.d.ts.map +1 -0
  601. package/dist-extensions/src/filters/Pixelate.d.ts +41 -0
  602. package/dist-extensions/src/filters/Pixelate.d.ts.map +1 -0
  603. package/dist-extensions/src/filters/RemoveColor.d.ts +53 -0
  604. package/dist-extensions/src/filters/RemoveColor.d.ts.map +1 -0
  605. package/dist-extensions/src/filters/Resize.d.ts +137 -0
  606. package/dist-extensions/src/filters/Resize.d.ts.map +1 -0
  607. package/dist-extensions/src/filters/Saturation.d.ts +46 -0
  608. package/dist-extensions/src/filters/Saturation.d.ts.map +1 -0
  609. package/dist-extensions/src/filters/Vibrance.d.ts +46 -0
  610. package/dist-extensions/src/filters/Vibrance.d.ts.map +1 -0
  611. package/dist-extensions/src/filters/WebGLFilterBackend.d.ts +131 -0
  612. package/dist-extensions/src/filters/WebGLFilterBackend.d.ts.map +1 -0
  613. package/dist-extensions/src/filters/filters.d.ts +23 -0
  614. package/dist-extensions/src/filters/filters.d.ts.map +1 -0
  615. package/dist-extensions/src/filters/index.d.ts +7 -0
  616. package/dist-extensions/src/filters/index.d.ts.map +1 -0
  617. package/dist-extensions/src/filters/shaders/baseFilter.d.ts +4 -0
  618. package/dist-extensions/src/filters/shaders/baseFilter.d.ts.map +1 -0
  619. package/dist-extensions/src/filters/shaders/blendColor.d.ts +13 -0
  620. package/dist-extensions/src/filters/shaders/blendColor.d.ts.map +1 -0
  621. package/dist-extensions/src/filters/shaders/blendImage.d.ts +4 -0
  622. package/dist-extensions/src/filters/shaders/blendImage.d.ts.map +1 -0
  623. package/dist-extensions/src/filters/shaders/blur.d.ts +2 -0
  624. package/dist-extensions/src/filters/shaders/blur.d.ts.map +1 -0
  625. package/dist-extensions/src/filters/shaders/brightness.d.ts +2 -0
  626. package/dist-extensions/src/filters/shaders/brightness.d.ts.map +1 -0
  627. package/dist-extensions/src/filters/shaders/colorMatrix.d.ts +2 -0
  628. package/dist-extensions/src/filters/shaders/colorMatrix.d.ts.map +1 -0
  629. package/dist-extensions/src/filters/shaders/constrast.d.ts +2 -0
  630. package/dist-extensions/src/filters/shaders/constrast.d.ts.map +1 -0
  631. package/dist-extensions/src/filters/shaders/convolute.d.ts +11 -0
  632. package/dist-extensions/src/filters/shaders/convolute.d.ts.map +1 -0
  633. package/dist-extensions/src/filters/shaders/gamma.d.ts +2 -0
  634. package/dist-extensions/src/filters/shaders/gamma.d.ts.map +1 -0
  635. package/dist-extensions/src/filters/shaders/grayscale.d.ts +3 -0
  636. package/dist-extensions/src/filters/shaders/grayscale.d.ts.map +1 -0
  637. package/dist-extensions/src/filters/shaders/invert.d.ts +2 -0
  638. package/dist-extensions/src/filters/shaders/invert.d.ts.map +1 -0
  639. package/dist-extensions/src/filters/shaders/noise.d.ts +2 -0
  640. package/dist-extensions/src/filters/shaders/noise.d.ts.map +1 -0
  641. package/dist-extensions/src/filters/shaders/pixelate.d.ts +2 -0
  642. package/dist-extensions/src/filters/shaders/pixelate.d.ts.map +1 -0
  643. package/dist-extensions/src/filters/shaders/removeColor.d.ts +2 -0
  644. package/dist-extensions/src/filters/shaders/removeColor.d.ts.map +1 -0
  645. package/dist-extensions/src/filters/shaders/saturation.d.ts +2 -0
  646. package/dist-extensions/src/filters/shaders/saturation.d.ts.map +1 -0
  647. package/dist-extensions/src/filters/shaders/vibrance.d.ts +2 -0
  648. package/dist-extensions/src/filters/shaders/vibrance.d.ts.map +1 -0
  649. package/dist-extensions/src/filters/typedefs.d.ts +70 -0
  650. package/dist-extensions/src/filters/typedefs.d.ts.map +1 -0
  651. package/dist-extensions/src/filters/utils.d.ts +10 -0
  652. package/dist-extensions/src/filters/utils.d.ts.map +1 -0
  653. package/dist-extensions/src/gradient/Gradient.d.ts +156 -0
  654. package/dist-extensions/src/gradient/Gradient.d.ts.map +1 -0
  655. package/dist-extensions/src/gradient/constants.d.ts +15 -0
  656. package/dist-extensions/src/gradient/constants.d.ts.map +1 -0
  657. package/dist-extensions/src/gradient/index.d.ts +3 -0
  658. package/dist-extensions/src/gradient/index.d.ts.map +1 -0
  659. package/dist-extensions/src/gradient/parser/misc.d.ts +4 -0
  660. package/dist-extensions/src/gradient/parser/misc.d.ts.map +1 -0
  661. package/dist-extensions/src/gradient/parser/parseColorStops.d.ts +3 -0
  662. package/dist-extensions/src/gradient/parser/parseColorStops.d.ts.map +1 -0
  663. package/dist-extensions/src/gradient/parser/parseCoords.d.ts +17 -0
  664. package/dist-extensions/src/gradient/parser/parseCoords.d.ts.map +1 -0
  665. package/dist-extensions/src/gradient/typedefs.d.ts +93 -0
  666. package/dist-extensions/src/gradient/typedefs.d.ts.map +1 -0
  667. package/dist-extensions/src/parser/applyViewboxTransform.d.ts +13 -0
  668. package/dist-extensions/src/parser/applyViewboxTransform.d.ts.map +1 -0
  669. package/dist-extensions/src/parser/attributes.d.ts +6 -0
  670. package/dist-extensions/src/parser/attributes.d.ts.map +1 -0
  671. package/dist-extensions/src/parser/constants.d.ts +41 -0
  672. package/dist-extensions/src/parser/constants.d.ts.map +1 -0
  673. package/dist-extensions/src/parser/doesSomeParentMatch.d.ts +2 -0
  674. package/dist-extensions/src/parser/doesSomeParentMatch.d.ts.map +1 -0
  675. package/dist-extensions/src/parser/elementMatchesRule.d.ts +5 -0
  676. package/dist-extensions/src/parser/elementMatchesRule.d.ts.map +1 -0
  677. package/dist-extensions/src/parser/elements_parser.d.ts +33 -0
  678. package/dist-extensions/src/parser/elements_parser.d.ts.map +1 -0
  679. package/dist-extensions/src/parser/getCSSRules.d.ts +8 -0
  680. package/dist-extensions/src/parser/getCSSRules.d.ts.map +1 -0
  681. package/dist-extensions/src/parser/getGlobalStylesForElement.d.ts +6 -0
  682. package/dist-extensions/src/parser/getGlobalStylesForElement.d.ts.map +1 -0
  683. package/dist-extensions/src/parser/getGradientDefs.d.ts +7 -0
  684. package/dist-extensions/src/parser/getGradientDefs.d.ts.map +1 -0
  685. package/dist-extensions/src/parser/getMultipleNodes.d.ts +2 -0
  686. package/dist-extensions/src/parser/getMultipleNodes.d.ts.map +1 -0
  687. package/dist-extensions/src/parser/getSvgRegex.d.ts +2 -0
  688. package/dist-extensions/src/parser/getSvgRegex.d.ts.map +1 -0
  689. package/dist-extensions/src/parser/getTagName.d.ts +2 -0
  690. package/dist-extensions/src/parser/getTagName.d.ts.map +1 -0
  691. package/dist-extensions/src/parser/hasInvalidAncestor.d.ts +2 -0
  692. package/dist-extensions/src/parser/hasInvalidAncestor.d.ts.map +1 -0
  693. package/dist-extensions/src/parser/loadSVGFromString.d.ts +18 -0
  694. package/dist-extensions/src/parser/loadSVGFromString.d.ts.map +1 -0
  695. package/dist-extensions/src/parser/loadSVGFromURL.d.ts +19 -0
  696. package/dist-extensions/src/parser/loadSVGFromURL.d.ts.map +1 -0
  697. package/dist-extensions/src/parser/normalizeAttr.d.ts +3 -0
  698. package/dist-extensions/src/parser/normalizeAttr.d.ts.map +1 -0
  699. package/dist-extensions/src/parser/normalizeValue.d.ts +2 -0
  700. package/dist-extensions/src/parser/normalizeValue.d.ts.map +1 -0
  701. package/dist-extensions/src/parser/parseAttributes.d.ts +10 -0
  702. package/dist-extensions/src/parser/parseAttributes.d.ts.map +1 -0
  703. package/dist-extensions/src/parser/parseFontDeclaration.d.ts +10 -0
  704. package/dist-extensions/src/parser/parseFontDeclaration.d.ts.map +1 -0
  705. package/dist-extensions/src/parser/parsePointsAttribute.d.ts +10 -0
  706. package/dist-extensions/src/parser/parsePointsAttribute.d.ts.map +1 -0
  707. package/dist-extensions/src/parser/parseSVGDocument.d.ts +22 -0
  708. package/dist-extensions/src/parser/parseSVGDocument.d.ts.map +1 -0
  709. package/dist-extensions/src/parser/parseStyleAttribute.d.ts +9 -0
  710. package/dist-extensions/src/parser/parseStyleAttribute.d.ts.map +1 -0
  711. package/dist-extensions/src/parser/parseStyleObject.d.ts +8 -0
  712. package/dist-extensions/src/parser/parseStyleObject.d.ts.map +1 -0
  713. package/dist-extensions/src/parser/parseStyleString.d.ts +8 -0
  714. package/dist-extensions/src/parser/parseStyleString.d.ts.map +1 -0
  715. package/dist-extensions/src/parser/parseTransformAttribute.d.ts +11 -0
  716. package/dist-extensions/src/parser/parseTransformAttribute.d.ts.map +1 -0
  717. package/dist-extensions/src/parser/parseUseDirectives.d.ts +2 -0
  718. package/dist-extensions/src/parser/parseUseDirectives.d.ts.map +1 -0
  719. package/dist-extensions/src/parser/percent.d.ts +9 -0
  720. package/dist-extensions/src/parser/percent.d.ts.map +1 -0
  721. package/dist-extensions/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  722. package/dist-extensions/src/parser/recursivelyParseGradientsXlink.d.ts.map +1 -0
  723. package/dist-extensions/src/parser/selectorMatches.d.ts +2 -0
  724. package/dist-extensions/src/parser/selectorMatches.d.ts.map +1 -0
  725. package/dist-extensions/src/parser/setStrokeFillOpacity.d.ts +6 -0
  726. package/dist-extensions/src/parser/setStrokeFillOpacity.d.ts.map +1 -0
  727. package/dist-extensions/src/parser/typedefs.d.ts +10 -0
  728. package/dist-extensions/src/parser/typedefs.d.ts.map +1 -0
  729. package/dist-extensions/src/shapes/ActiveSelection.d.ts +109 -0
  730. package/dist-extensions/src/shapes/ActiveSelection.d.ts.map +1 -0
  731. package/dist-extensions/src/shapes/Circle.d.ts +111 -0
  732. package/dist-extensions/src/shapes/Circle.d.ts.map +1 -0
  733. package/dist-extensions/src/shapes/Ellipse.d.ts +88 -0
  734. package/dist-extensions/src/shapes/Ellipse.d.ts.map +1 -0
  735. package/dist-extensions/src/shapes/Group.d.ts +303 -0
  736. package/dist-extensions/src/shapes/Group.d.ts.map +1 -0
  737. package/dist-extensions/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  738. package/dist-extensions/src/shapes/IText/DraggableTextDelegate.d.ts.map +1 -0
  739. package/dist-extensions/src/shapes/IText/IText.d.ts +314 -0
  740. package/dist-extensions/src/shapes/IText/IText.d.ts.map +1 -0
  741. package/dist-extensions/src/shapes/IText/ITextBehavior.d.ts +299 -0
  742. package/dist-extensions/src/shapes/IText/ITextBehavior.d.ts.map +1 -0
  743. package/dist-extensions/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
  744. package/dist-extensions/src/shapes/IText/ITextClickBehavior.d.ts.map +1 -0
  745. package/dist-extensions/src/shapes/IText/ITextKeyBehavior.d.ts +198 -0
  746. package/dist-extensions/src/shapes/IText/ITextKeyBehavior.d.ts.map +1 -0
  747. package/dist-extensions/src/shapes/IText/constants.d.ts +13 -0
  748. package/dist-extensions/src/shapes/IText/constants.d.ts.map +1 -0
  749. package/dist-extensions/src/shapes/Image.d.ts +312 -0
  750. package/dist-extensions/src/shapes/Image.d.ts.map +1 -0
  751. package/dist-extensions/src/shapes/Line.d.ts +122 -0
  752. package/dist-extensions/src/shapes/Line.d.ts.map +1 -0
  753. package/dist-extensions/src/shapes/Object/AnimatableObject.d.ts +33 -0
  754. package/dist-extensions/src/shapes/Object/AnimatableObject.d.ts.map +1 -0
  755. package/dist-extensions/src/shapes/Object/FabricObject.d.ts +11 -0
  756. package/dist-extensions/src/shapes/Object/FabricObject.d.ts.map +1 -0
  757. package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +72 -0
  758. package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -0
  759. package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts +317 -0
  760. package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts.map +1 -0
  761. package/dist-extensions/src/shapes/Object/Object.d.ts +614 -0
  762. package/dist-extensions/src/shapes/Object/Object.d.ts.map +1 -0
  763. package/dist-extensions/src/shapes/Object/ObjectGeometry.d.ts +237 -0
  764. package/dist-extensions/src/shapes/Object/ObjectGeometry.d.ts.map +1 -0
  765. package/dist-extensions/src/shapes/Object/ObjectOrigin.d.ts +96 -0
  766. package/dist-extensions/src/shapes/Object/ObjectOrigin.d.ts.map +1 -0
  767. package/dist-extensions/src/shapes/Object/StackedObject.d.ts +60 -0
  768. package/dist-extensions/src/shapes/Object/StackedObject.d.ts.map +1 -0
  769. package/dist-extensions/src/shapes/Object/defaultValues.d.ts +8 -0
  770. package/dist-extensions/src/shapes/Object/defaultValues.d.ts.map +1 -0
  771. package/dist-extensions/src/shapes/Object/types/BaseProps.d.ts +88 -0
  772. package/dist-extensions/src/shapes/Object/types/BaseProps.d.ts.map +1 -0
  773. package/dist-extensions/src/shapes/Object/types/BorderProps.d.ts +37 -0
  774. package/dist-extensions/src/shapes/Object/types/BorderProps.d.ts.map +1 -0
  775. package/dist-extensions/src/shapes/Object/types/ControlProps.d.ts +63 -0
  776. package/dist-extensions/src/shapes/Object/types/ControlProps.d.ts.map +1 -0
  777. package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts +66 -0
  778. package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts.map +1 -0
  779. package/dist-extensions/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
  780. package/dist-extensions/src/shapes/Object/types/FillStrokeProps.d.ts.map +1 -0
  781. package/dist-extensions/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
  782. package/dist-extensions/src/shapes/Object/types/LockInteractionProps.d.ts.map +1 -0
  783. package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts +43 -0
  784. package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts.map +1 -0
  785. package/dist-extensions/src/shapes/Object/types/ObjectTransformProps.d.ts +34 -0
  786. package/dist-extensions/src/shapes/Object/types/ObjectTransformProps.d.ts.map +1 -0
  787. package/dist-extensions/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
  788. package/dist-extensions/src/shapes/Object/types/SerializedObjectProps.d.ts.map +1 -0
  789. package/dist-extensions/src/shapes/Object/types/index.d.ts +6 -0
  790. package/dist-extensions/src/shapes/Object/types/index.d.ts.map +1 -0
  791. package/dist-extensions/src/shapes/Path.d.ts +215 -0
  792. package/dist-extensions/src/shapes/Path.d.ts.map +1 -0
  793. package/dist-extensions/src/shapes/Polygon.d.ts +7 -0
  794. package/dist-extensions/src/shapes/Polygon.d.ts.map +1 -0
  795. package/dist-extensions/src/shapes/Polyline.d.ts +156 -0
  796. package/dist-extensions/src/shapes/Polyline.d.ts.map +1 -0
  797. package/dist-extensions/src/shapes/Rect.d.ts +83 -0
  798. package/dist-extensions/src/shapes/Rect.d.ts.map +1 -0
  799. package/dist-extensions/src/shapes/Text/StyledText.d.ts +128 -0
  800. package/dist-extensions/src/shapes/Text/StyledText.d.ts.map +1 -0
  801. package/dist-extensions/src/shapes/Text/Text.d.ts +697 -0
  802. package/dist-extensions/src/shapes/Text/Text.d.ts.map +1 -0
  803. package/dist-extensions/src/shapes/Text/TextSVGExportMixin.d.ts +47 -0
  804. package/dist-extensions/src/shapes/Text/TextSVGExportMixin.d.ts.map +1 -0
  805. package/dist-extensions/src/shapes/Text/constants.d.ts +13 -0
  806. package/dist-extensions/src/shapes/Text/constants.d.ts.map +1 -0
  807. package/dist-extensions/src/shapes/Textbox.d.ts +226 -0
  808. package/dist-extensions/src/shapes/Textbox.d.ts.map +1 -0
  809. package/dist-extensions/src/shapes/Triangle.d.ts +27 -0
  810. package/dist-extensions/src/shapes/Triangle.d.ts.map +1 -0
  811. package/dist-extensions/src/typedefs.d.ts +97 -0
  812. package/dist-extensions/src/typedefs.d.ts.map +1 -0
  813. package/dist-extensions/src/util/animation/AnimationBase.d.ts +54 -0
  814. package/dist-extensions/src/util/animation/AnimationBase.d.ts.map +1 -0
  815. package/dist-extensions/src/util/animation/AnimationFrameProvider.d.ts +3 -0
  816. package/dist-extensions/src/util/animation/AnimationFrameProvider.d.ts.map +1 -0
  817. package/dist-extensions/src/util/animation/AnimationRegistry.d.ts +29 -0
  818. package/dist-extensions/src/util/animation/AnimationRegistry.d.ts.map +1 -0
  819. package/dist-extensions/src/util/animation/ArrayAnimation.d.ts +10 -0
  820. package/dist-extensions/src/util/animation/ArrayAnimation.d.ts.map +1 -0
  821. package/dist-extensions/src/util/animation/ColorAnimation.d.ts +11 -0
  822. package/dist-extensions/src/util/animation/ColorAnimation.d.ts.map +1 -0
  823. package/dist-extensions/src/util/animation/ValueAnimation.d.ts +10 -0
  824. package/dist-extensions/src/util/animation/ValueAnimation.d.ts.map +1 -0
  825. package/dist-extensions/src/util/animation/animate.d.ts +37 -0
  826. package/dist-extensions/src/util/animation/animate.d.ts.map +1 -0
  827. package/dist-extensions/src/util/animation/easing.d.ts +130 -0
  828. package/dist-extensions/src/util/animation/easing.d.ts.map +1 -0
  829. package/dist-extensions/src/util/animation/index.d.ts +3 -0
  830. package/dist-extensions/src/util/animation/index.d.ts.map +1 -0
  831. package/dist-extensions/src/util/animation/types.d.ts +87 -0
  832. package/dist-extensions/src/util/animation/types.d.ts.map +1 -0
  833. package/dist-extensions/src/util/applyMixins.d.ts +8 -0
  834. package/dist-extensions/src/util/applyMixins.d.ts.map +1 -0
  835. package/dist-extensions/src/util/dom_event.d.ts +6 -0
  836. package/dist-extensions/src/util/dom_event.d.ts.map +1 -0
  837. package/dist-extensions/src/util/dom_misc.d.ts +12 -0
  838. package/dist-extensions/src/util/dom_misc.d.ts.map +1 -0
  839. package/dist-extensions/src/util/dom_style.d.ts +7 -0
  840. package/dist-extensions/src/util/dom_style.d.ts.map +1 -0
  841. package/dist-extensions/src/util/index.d.ts +37 -0
  842. package/dist-extensions/src/util/index.d.ts.map +1 -0
  843. package/dist-extensions/src/util/internals/cleanupSvgAttribute.d.ts +2 -0
  844. package/dist-extensions/src/util/internals/cleanupSvgAttribute.d.ts.map +1 -0
  845. package/dist-extensions/src/util/internals/cloneStyles.d.ts +3 -0
  846. package/dist-extensions/src/util/internals/cloneStyles.d.ts.map +1 -0
  847. package/dist-extensions/src/util/internals/console.d.ts +8 -0
  848. package/dist-extensions/src/util/internals/console.d.ts.map +1 -0
  849. package/dist-extensions/src/util/internals/dom_request.d.ts +16 -0
  850. package/dist-extensions/src/util/internals/dom_request.d.ts.map +1 -0
  851. package/dist-extensions/src/util/internals/findRight.d.ts +2 -0
  852. package/dist-extensions/src/util/internals/findRight.d.ts.map +1 -0
  853. package/dist-extensions/src/util/internals/getRandomInt.d.ts +8 -0
  854. package/dist-extensions/src/util/internals/getRandomInt.d.ts.map +1 -0
  855. package/dist-extensions/src/util/internals/ifNaN.d.ts +8 -0
  856. package/dist-extensions/src/util/internals/ifNaN.d.ts.map +1 -0
  857. package/dist-extensions/src/util/internals/removeFromArray.d.ts +9 -0
  858. package/dist-extensions/src/util/internals/removeFromArray.d.ts.map +1 -0
  859. package/dist-extensions/src/util/internals/uid.d.ts +2 -0
  860. package/dist-extensions/src/util/internals/uid.d.ts.map +1 -0
  861. package/dist-extensions/src/util/lang_string.d.ts +22 -0
  862. package/dist-extensions/src/util/lang_string.d.ts.map +1 -0
  863. package/dist-extensions/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  864. package/dist-extensions/src/util/misc/boundingBoxFromPoints.d.ts.map +1 -0
  865. package/dist-extensions/src/util/misc/capValue.d.ts +2 -0
  866. package/dist-extensions/src/util/misc/capValue.d.ts.map +1 -0
  867. package/dist-extensions/src/util/misc/cos.d.ts +10 -0
  868. package/dist-extensions/src/util/misc/cos.d.ts.map +1 -0
  869. package/dist-extensions/src/util/misc/dom.d.ts +28 -0
  870. package/dist-extensions/src/util/misc/dom.d.ts.map +1 -0
  871. package/dist-extensions/src/util/misc/findScaleTo.d.ts +20 -0
  872. package/dist-extensions/src/util/misc/findScaleTo.d.ts.map +1 -0
  873. package/dist-extensions/src/util/misc/groupSVGElements.d.ts +11 -0
  874. package/dist-extensions/src/util/misc/groupSVGElements.d.ts.map +1 -0
  875. package/dist-extensions/src/util/misc/isTransparent.d.ts +11 -0
  876. package/dist-extensions/src/util/misc/isTransparent.d.ts.map +1 -0
  877. package/dist-extensions/src/util/misc/matrix.d.ts +170 -0
  878. package/dist-extensions/src/util/misc/matrix.d.ts.map +1 -0
  879. package/dist-extensions/src/util/misc/mergeClipPaths.d.ts +23 -0
  880. package/dist-extensions/src/util/misc/mergeClipPaths.d.ts.map +1 -0
  881. package/dist-extensions/src/util/misc/objectEnlive.d.ts +45 -0
  882. package/dist-extensions/src/util/misc/objectEnlive.d.ts.map +1 -0
  883. package/dist-extensions/src/util/misc/objectTransforms.d.ts +62 -0
  884. package/dist-extensions/src/util/misc/objectTransforms.d.ts.map +1 -0
  885. package/dist-extensions/src/util/misc/pick.d.ts +9 -0
  886. package/dist-extensions/src/util/misc/pick.d.ts.map +1 -0
  887. package/dist-extensions/src/util/misc/planeChange.d.ts +64 -0
  888. package/dist-extensions/src/util/misc/planeChange.d.ts.map +1 -0
  889. package/dist-extensions/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +52 -0
  890. package/dist-extensions/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts.map +1 -0
  891. package/dist-extensions/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +90 -0
  892. package/dist-extensions/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts.map +1 -0
  893. package/dist-extensions/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +27 -0
  894. package/dist-extensions/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts.map +1 -0
  895. package/dist-extensions/src/util/misc/projectStroke/index.d.ts +12 -0
  896. package/dist-extensions/src/util/misc/projectStroke/index.d.ts.map +1 -0
  897. package/dist-extensions/src/util/misc/projectStroke/types.d.ts +23 -0
  898. package/dist-extensions/src/util/misc/projectStroke/types.d.ts.map +1 -0
  899. package/dist-extensions/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  900. package/dist-extensions/src/util/misc/radiansDegreesConversion.d.ts.map +1 -0
  901. package/dist-extensions/src/util/misc/resolveOrigin.d.ts +9 -0
  902. package/dist-extensions/src/util/misc/resolveOrigin.d.ts.map +1 -0
  903. package/dist-extensions/src/util/misc/rotatePoint.d.ts +12 -0
  904. package/dist-extensions/src/util/misc/rotatePoint.d.ts.map +1 -0
  905. package/dist-extensions/src/util/misc/sin.d.ts +10 -0
  906. package/dist-extensions/src/util/misc/sin.d.ts.map +1 -0
  907. package/dist-extensions/src/util/misc/svgParsing.d.ts +46 -0
  908. package/dist-extensions/src/util/misc/svgParsing.d.ts.map +1 -0
  909. package/dist-extensions/src/util/misc/textStyles.d.ts +32 -0
  910. package/dist-extensions/src/util/misc/textStyles.d.ts.map +1 -0
  911. package/dist-extensions/src/util/misc/toFixed.d.ts +8 -0
  912. package/dist-extensions/src/util/misc/toFixed.d.ts.map +1 -0
  913. package/dist-extensions/src/util/misc/vectors.d.ts +72 -0
  914. package/dist-extensions/src/util/misc/vectors.d.ts.map +1 -0
  915. package/dist-extensions/src/util/path/index.d.ts +95 -0
  916. package/dist-extensions/src/util/path/index.d.ts.map +1 -0
  917. package/dist-extensions/src/util/path/regex.d.ts +2 -0
  918. package/dist-extensions/src/util/path/regex.d.ts.map +1 -0
  919. package/dist-extensions/src/util/path/typedefs.d.ts +221 -0
  920. package/dist-extensions/src/util/path/typedefs.d.ts.map +1 -0
  921. package/dist-extensions/src/util/transform_matrix_removal.d.ts +14 -0
  922. package/dist-extensions/src/util/transform_matrix_removal.d.ts.map +1 -0
  923. package/dist-extensions/src/util/typeAssertions.d.ts +13 -0
  924. package/dist-extensions/src/util/typeAssertions.d.ts.map +1 -0
  925. package/eslint.config.mjs +108 -0
  926. package/extensions/README.MD +27 -0
  927. package/extensions/aligning_guidelines/README.MD +22 -0
  928. package/extensions/aligning_guidelines/constant.ts +10 -0
  929. package/extensions/aligning_guidelines/index.ts +166 -0
  930. package/extensions/aligning_guidelines/typedefs.ts +36 -0
  931. package/extensions/aligning_guidelines/util/basic.spec.ts +31 -0
  932. package/extensions/aligning_guidelines/util/basic.ts +20 -0
  933. package/extensions/aligning_guidelines/util/collect-line.ts +172 -0
  934. package/extensions/aligning_guidelines/util/collect-point.ts +83 -0
  935. package/extensions/aligning_guidelines/util/draw.ts +74 -0
  936. package/extensions/aligning_guidelines/util/get-objects-by-target.ts +45 -0
  937. package/extensions/index.ts +4 -0
  938. package/jest.config.js +1 -1
  939. package/jest.extend.ts +14 -15
  940. package/package.json +17 -12
  941. package/playwright.setup.ts +5 -5
  942. package/rollup.config.mjs +46 -4
  943. package/scripts/build.mjs +1 -1
  944. package/scripts/buildLock.mjs +5 -5
  945. package/scripts/buildStats.mjs +2 -2
  946. package/scripts/git.mjs +1 -1
  947. package/scripts/index.mjs +34 -32
  948. package/scripts/sandbox.mjs +15 -15
  949. package/src/ClassRegistry.spec.ts +1 -1
  950. package/src/ClassRegistry.ts +1 -1
  951. package/src/Collection.ts +9 -9
  952. package/src/EventTypeDefs.ts +2 -2
  953. package/src/Intersection.spec.ts +2 -2
  954. package/src/Intersection.ts +11 -11
  955. package/src/LayoutManager/ActiveSelectionLayoutManager.spec.ts +3 -3
  956. package/src/LayoutManager/ActiveSelectionLayoutManager.ts +2 -2
  957. package/src/LayoutManager/LayoutManager.spec.ts +17 -17
  958. package/src/LayoutManager/LayoutManager.ts +15 -15
  959. package/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts +3 -3
  960. package/src/LayoutManager/LayoutStrategies/FixedLayout.ts +1 -1
  961. package/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts +4 -4
  962. package/src/LayoutManager/LayoutStrategies/utils.ts +4 -4
  963. package/src/LayoutManager/types.ts +12 -13
  964. package/src/Observable.ts +7 -7
  965. package/src/Pattern/Pattern.ts +20 -10
  966. package/src/Point.ts +3 -3
  967. package/src/Shadow.ts +7 -7
  968. package/src/brushes/CircleBrush.ts +1 -1
  969. package/src/brushes/PatternBrush.ts +1 -1
  970. package/src/brushes/PencilBrush.ts +1 -1
  971. package/src/brushes/SprayBrush.ts +3 -3
  972. package/src/canvas/Canvas.ts +38 -35
  973. package/src/canvas/DOMManagers/CanvasDOMManager.ts +2 -2
  974. package/src/canvas/DOMManagers/StaticCanvasDOMManager.ts +1 -1
  975. package/src/canvas/DOMManagers/util.ts +2 -2
  976. package/src/canvas/SelectableCanvas.spec.ts +8 -8
  977. package/src/canvas/SelectableCanvas.ts +20 -20
  978. package/src/canvas/StaticCanvas.ts +44 -43
  979. package/src/canvas/StaticCanvasOptions.ts +0 -1
  980. package/src/canvas/TextEditingManager.ts +1 -1
  981. package/src/canvas/__tests__/eventData.test.ts +17 -17
  982. package/src/color/Color.ts +3 -2
  983. package/src/color/color.test.ts +2 -2
  984. package/src/color/typedefs.ts +1 -1
  985. package/src/color/util.ts +1 -1
  986. package/src/config.ts +1 -1
  987. package/src/controls/Control.spec.ts +8 -8
  988. package/src/controls/Control.ts +14 -14
  989. package/src/controls/changeWidth.test.ts +2 -2
  990. package/src/controls/changeWidth.ts +4 -4
  991. package/src/controls/controlRendering.ts +4 -4
  992. package/src/controls/drag.ts +1 -1
  993. package/src/controls/fireEvent.ts +1 -1
  994. package/src/controls/pathControl.spec.ts +9 -9
  995. package/src/controls/pathControl.ts +20 -20
  996. package/src/controls/polyControl.spec.ts +6 -6
  997. package/src/controls/polyControl.ts +11 -11
  998. package/src/controls/rotate.ts +4 -4
  999. package/src/controls/scale.test.ts +9 -9
  1000. package/src/controls/scale.ts +13 -13
  1001. package/src/controls/scaleSkew.ts +3 -3
  1002. package/src/controls/skew.ts +8 -8
  1003. package/src/controls/util.ts +6 -6
  1004. package/src/controls/wrapWithFireEvent.ts +2 -2
  1005. package/src/controls/wrapWithFixedAnchor.spec.ts +5 -5
  1006. package/src/controls/wrapWithFixedAnchor.ts +2 -2
  1007. package/src/env/node.ts +2 -2
  1008. package/src/filters/BaseFilter.ts +27 -25
  1009. package/src/filters/BlendColor.ts +1 -1
  1010. package/src/filters/BlendImage.ts +4 -4
  1011. package/src/filters/Blur.ts +1 -1
  1012. package/src/filters/Boilerplate.ts +1 -1
  1013. package/src/filters/Brightness.ts +1 -1
  1014. package/src/filters/Canvas2dFilterBackend.ts +1 -1
  1015. package/src/filters/ColorMatrix.ts +2 -2
  1016. package/src/filters/ColorMatrixFilters.ts +7 -7
  1017. package/src/filters/Composed.ts +5 -5
  1018. package/src/filters/Contrast.ts +1 -1
  1019. package/src/filters/Convolute.ts +1 -1
  1020. package/src/filters/GLProbes/WebGLProbe.ts +2 -2
  1021. package/src/filters/Gamma.ts +1 -1
  1022. package/src/filters/Grayscale.ts +1 -1
  1023. package/src/filters/Invert.ts +1 -1
  1024. package/src/filters/Noise.ts +1 -1
  1025. package/src/filters/Pixelate.ts +1 -1
  1026. package/src/filters/RemoveColor.ts +1 -1
  1027. package/src/filters/Resize.ts +9 -9
  1028. package/src/filters/Saturation.ts +1 -1
  1029. package/src/filters/Vibrance.ts +1 -1
  1030. package/src/filters/WebGLFilterBackend.ts +10 -10
  1031. package/src/filters/typedefs.ts +1 -3
  1032. package/src/filters/utils.ts +3 -3
  1033. package/src/gradient/Gradient.spec.ts +19 -19
  1034. package/src/gradient/Gradient.ts +51 -50
  1035. package/src/gradient/parser/parseColorStops.ts +3 -3
  1036. package/src/gradient/parser/parseCoords.ts +28 -25
  1037. package/src/mixins/eraser_brush.mixin.ts +21 -21
  1038. package/src/parkinglot/straighten.ts +1 -1
  1039. package/src/parser/applyViewboxTransform.ts +2 -2
  1040. package/src/parser/constants.ts +2 -2
  1041. package/src/parser/elements_parser.ts +13 -13
  1042. package/src/parser/getCSSRules.ts +1 -1
  1043. package/src/parser/getGlobalStylesForElement.ts +1 -1
  1044. package/src/parser/getGradientDefs.ts +1 -1
  1045. package/src/parser/getMultipleNodes.ts +2 -2
  1046. package/src/parser/loadSVGFromString.test.ts +1 -4
  1047. package/src/parser/loadSVGFromString.ts +1 -1
  1048. package/src/parser/loadSVGFromURL.ts +1 -1
  1049. package/src/parser/normalizeAttr.ts +1 -1
  1050. package/src/parser/normalizeValue.ts +2 -2
  1051. package/src/parser/parseAttributes.ts +3 -3
  1052. package/src/parser/parseFontDeclaration.ts +1 -1
  1053. package/src/parser/parseSVGDocument.ts +3 -3
  1054. package/src/parser/parseStyleObject.ts +1 -1
  1055. package/src/parser/parseStyleString.ts +1 -1
  1056. package/src/parser/parseTransformAttribute.ts +1 -1
  1057. package/src/parser/parseUseDirectives.ts +1 -1
  1058. package/src/parser/percent.ts +4 -4
  1059. package/src/parser/recursivelyParseGradientsXlink.ts +1 -1
  1060. package/src/parser/setStrokeFillOpacity.ts +1 -1
  1061. package/src/parser/typedefs.ts +1 -1
  1062. package/src/shapes/ActiveSelection.spec.ts +1 -1
  1063. package/src/shapes/ActiveSelection.ts +4 -4
  1064. package/src/shapes/Circle.ts +5 -5
  1065. package/src/shapes/Ellipse.ts +4 -4
  1066. package/src/shapes/Group.spec.ts +5 -5
  1067. package/src/shapes/Group.ts +19 -17
  1068. package/src/shapes/IText/DraggableTextDelegate.ts +9 -10
  1069. package/src/shapes/IText/IText.test.ts +1 -1
  1070. package/src/shapes/IText/IText.ts +12 -12
  1071. package/src/shapes/IText/ITextBehavior.test.ts +2 -2
  1072. package/src/shapes/IText/ITextBehavior.ts +21 -21
  1073. package/src/shapes/IText/ITextClickBehavior.ts +2 -2
  1074. package/src/shapes/IText/ITextKeyBehavior.test.ts +2 -2
  1075. package/src/shapes/IText/ITextKeyBehavior.ts +13 -13
  1076. package/src/shapes/Image.ts +16 -16
  1077. package/src/shapes/Line.ts +4 -4
  1078. package/src/shapes/Object/AnimatableObject.ts +13 -10
  1079. package/src/shapes/Object/FabricObject.ts +7 -3
  1080. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +9 -9
  1081. package/src/shapes/Object/InteractiveObject.spec.ts +3 -3
  1082. package/src/shapes/Object/InteractiveObject.ts +32 -32
  1083. package/src/shapes/Object/Object.ts +33 -31
  1084. package/src/shapes/Object/ObjectGeometry.ts +9 -9
  1085. package/src/shapes/Object/ObjectOrigin.ts +11 -11
  1086. package/src/shapes/Object/StackedObject.ts +3 -4
  1087. package/src/shapes/Path.ts +14 -14
  1088. package/src/shapes/Polyline.spec.ts +1 -1
  1089. package/src/shapes/Polyline.ts +15 -16
  1090. package/src/shapes/Rect.ts +6 -6
  1091. package/src/shapes/Text/StyledText.spec.ts +2 -2
  1092. package/src/shapes/Text/StyledText.ts +7 -7
  1093. package/src/shapes/Text/Text.spec.ts +1 -1
  1094. package/src/shapes/Text/Text.ts +33 -33
  1095. package/src/shapes/Text/TextSVGExportMixin.spec.ts +1 -1
  1096. package/src/shapes/Text/TextSVGExportMixin.ts +23 -23
  1097. package/src/shapes/Textbox.ts +7 -7
  1098. package/src/shapes/Triangle.ts +1 -1
  1099. package/src/typedefs.ts +3 -3
  1100. package/src/util/animation/AnimationBase.ts +2 -2
  1101. package/src/util/animation/AnimationRegistry.ts +1 -1
  1102. package/src/util/animation/ArrayAnimation.ts +2 -2
  1103. package/src/util/animation/ColorAnimation.ts +5 -5
  1104. package/src/util/animation/ValueAnimation.ts +1 -1
  1105. package/src/util/animation/animate.ts +6 -6
  1106. package/src/util/animation/animations.spec.ts +7 -7
  1107. package/src/util/animation/easing.ts +1 -1
  1108. package/src/util/animation/types.ts +5 -6
  1109. package/src/util/applyMixins.ts +2 -2
  1110. package/src/util/dom_style.ts +2 -2
  1111. package/src/util/internals/cloneDeep.ts +6 -0
  1112. package/src/util/internals/cloneStyles.spec.ts +46 -0
  1113. package/src/util/internals/cloneStyles.ts +12 -0
  1114. package/src/util/internals/findRight.ts +1 -1
  1115. package/src/util/internals/getRandomInt.test.ts +1 -1
  1116. package/src/util/misc/boundingBoxFromPoints.ts +1 -1
  1117. package/src/util/misc/dom.ts +3 -3
  1118. package/src/util/misc/findScaleTo.ts +2 -2
  1119. package/src/util/misc/groupSVGElements.ts +1 -1
  1120. package/src/util/misc/isTransparent.ts +1 -1
  1121. package/src/util/misc/matrix.ts +6 -6
  1122. package/src/util/misc/objectEnlive.ts +9 -9
  1123. package/src/util/misc/objectTransforms.ts +5 -5
  1124. package/src/util/misc/pick.ts +2 -2
  1125. package/src/util/misc/planeChange.spec.ts +9 -9
  1126. package/src/util/misc/planeChange.ts +5 -5
  1127. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +7 -7
  1128. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +16 -16
  1129. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +2 -2
  1130. package/src/util/misc/projectStroke/index.ts +7 -7
  1131. package/src/util/misc/resolveOrigin.ts +1 -1
  1132. package/src/util/misc/rotatePoint.ts +1 -1
  1133. package/src/util/misc/svgParsing.ts +5 -5
  1134. package/src/util/misc/textStyles.ts +6 -6
  1135. package/src/util/misc/vectors.ts +1 -1
  1136. package/src/util/path/index.spec.ts +3 -3
  1137. package/src/util/path/index.ts +30 -30
  1138. package/src/util/path/typechecks.ts +22 -22
  1139. package/src/util/path/typedefs.ts +14 -17
  1140. package/src/util/transform_matrix_removal.ts +3 -3
  1141. package/src/util/typeAssertions.ts +4 -4
  1142. package/tsconfig-extensions.json +108 -0
  1143. package/tsconfig.json +4 -3
  1144. package/.eslintignore +0 -3
  1145. package/.eslintrc.js +0 -60
  1146. package/.eslintrc.json +0 -143
  1147. package/.eslintrc_tests +0 -58
  1148. package/dist/src/util/internals/cloneDeep.min.mjs +0 -2
  1149. package/dist/src/util/internals/cloneDeep.min.mjs.map +0 -1
  1150. package/dist/src/util/internals/cloneDeep.mjs +0 -4
  1151. package/dist/src/util/internals/cloneDeep.mjs.map +0 -1
  1152. package/dist/src/util/internals/index.d.ts +0 -5
  1153. package/dist/src/util/internals/index.d.ts.map +0 -1
  1154. package/src/benchmarks/README.md +0 -7
  1155. package/src/benchmarks/calcCornerCoords.mjs +0 -117
  1156. package/src/benchmarks/calcTransformMatrix.mjs +0 -104
  1157. package/src/benchmarks/pathCloning.mjs +0 -111
  1158. package/src/benchmarks/pathData.mjs +0 -5
  1159. package/src/benchmarks/raycasting.mjs +0 -152
  1160. package/src/benchmarks/transformMatrixKey.mjs +0 -97
  1161. package/src/util/internals/index.ts +0 -4
@@ -1 +1 @@
1
- {"version":3,"file":"Text.mjs","sources":["../../../../src/shapes/Text/Text.ts"],"sourcesContent":["import { cache } from '../../cache';\nimport { DEFAULT_SVG_FONT_SIZE, FILL, STROKE } from '../../constants';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport type {\n CompleteTextStyleDeclaration,\n TextStyle,\n TextStyleDeclaration,\n} from './StyledText';\nimport { StyledText } from './StyledText';\nimport { SHARED_ATTRIBUTES } from '../../parser/attributes';\nimport { parseAttributes } from '../../parser/parseAttributes';\nimport type {\n Abortable,\n TCacheCanvasDimensions,\n TClassProperties,\n TFiller,\n TOptions,\n} from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { graphemeSplit } from '../../util/lang_string';\nimport { createCanvasElement } from '../../util/misc/dom';\nimport type { TextStyleArray } from '../../util/misc/textStyles';\nimport {\n hasStyleChanged,\n stylesFromArray,\n stylesToArray,\n} from '../../util/misc/textStyles';\nimport { getPathSegmentsInfo, getPointOnPath } from '../../util/path';\nimport { cacheProperties } from '../Object/FabricObject';\nimport type { Path } from '../Path';\nimport { TextSVGExportMixin } from './TextSVGExportMixin';\nimport { applyMixins } from '../../util/applyMixins';\nimport type { FabricObjectProps, SerializedObjectProps } from '../Object/types';\nimport type { StylePropertiesType } from './constants';\nimport {\n additionalProps,\n textDefaultValues,\n textLayoutProperties,\n JUSTIFY,\n JUSTIFY_CENTER,\n JUSTIFY_LEFT,\n JUSTIFY_RIGHT,\n} from './constants';\nimport { CENTER, LEFT, RIGHT, TOP, BOTTOM } from '../../constants';\nimport { isFiller } from '../../util/typeAssertions';\nimport type { Gradient } from '../../gradient/Gradient';\nimport type { Pattern } from '../../Pattern';\nimport type { CSSRules } from '../../parser/typedefs';\n\nlet measuringContext: CanvasRenderingContext2D | null;\n\n/**\n * Return a context for measurement of text string.\n * if created it gets stored for reuse\n */\nfunction getMeasuringContext() {\n if (!measuringContext) {\n const canvas = createCanvasElement();\n canvas.width = canvas.height = 0;\n measuringContext = canvas.getContext('2d');\n }\n return measuringContext;\n}\n\nexport type TPathSide = 'left' | 'right';\n\nexport type TPathAlign = 'baseline' | 'center' | 'ascender' | 'descender';\n\nexport type TextLinesInfo = {\n lines: string[];\n graphemeLines: string[][];\n graphemeText: string[];\n _unwrappedLines: string[][];\n};\n\n/**\n * Measure and return the info of a single grapheme.\n * needs the the info of previous graphemes already filled\n * Override to customize measuring\n */\nexport type GraphemeBBox = {\n width: number;\n height: number;\n kernedWidth: number;\n left: number;\n deltaY: number;\n renderLeft?: number;\n renderTop?: number;\n angle?: number;\n};\n\n// @TODO this is not complete\ninterface UniqueTextProps {\n charSpacing: number;\n lineHeight: number;\n fontSize: number;\n fontWeight: string | number;\n fontFamily: string;\n fontStyle: string;\n pathSide: TPathSide;\n pathAlign: TPathAlign;\n underline: boolean;\n overline: boolean;\n linethrough: boolean;\n textAlign: string;\n direction: CanvasDirection;\n path?: Path;\n}\n\nexport interface SerializedTextProps\n extends SerializedObjectProps,\n UniqueTextProps {\n styles: TextStyleArray | TextStyle;\n}\n\nexport interface TextProps extends FabricObjectProps, UniqueTextProps {\n styles: TextStyle;\n}\n\n/**\n * Text class\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#text}\n */\nexport class FabricText<\n Props extends TOptions<TextProps> = Partial<TextProps>,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ObjectEvents = ObjectEvents\n >\n extends StyledText<Props, SProps, EventSpec>\n implements UniqueTextProps\n{\n /**\n * Properties that requires a text layout recalculation when changed\n * @type string[]\n * @protected\n */\n static textLayoutProperties: string[] = textLayoutProperties;\n\n /**\n * @private\n */\n declare _reNewline: RegExp;\n\n /**\n * Use this regular expression to filter for whitespaces that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reSpacesAndTabs: RegExp;\n\n /**\n * Use this regular expression to filter for whitespace that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reSpaceAndTab: RegExp;\n\n /**\n * Use this regular expression to filter consecutive groups of non spaces.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reWords: RegExp;\n\n declare text: string;\n\n /**\n * Font size (in pixels)\n * @type Number\n * @default\n */\n declare fontSize: number;\n\n /**\n * Font weight (e.g. bold, normal, 400, 600, 800)\n * @type {(Number|String)}\n * @default\n */\n declare fontWeight: string | number;\n\n /**\n * Font family\n * @type String\n * @default\n */\n declare fontFamily: string;\n\n /**\n * Text decoration underline.\n * @type Boolean\n * @default\n */\n declare underline: boolean;\n\n /**\n * Text decoration overline.\n * @type Boolean\n * @default\n */\n declare overline: boolean;\n\n /**\n * Text decoration linethrough.\n * @type Boolean\n * @default\n */\n declare linethrough: boolean;\n\n /**\n * Text alignment. Possible values: \"left\", \"center\", \"right\", \"justify\",\n * \"justify-left\", \"justify-center\" or \"justify-right\".\n * @type String\n * @default\n */\n declare textAlign: string;\n\n /**\n * Font style . Possible values: \"\", \"normal\", \"italic\" or \"oblique\".\n * @type String\n * @default\n */\n declare fontStyle: string;\n\n /**\n * Line height\n * @type Number\n * @default\n */\n declare lineHeight: number;\n\n /**\n * Superscript schema object (minimum overlap)\n */\n declare superscript: {\n /**\n * fontSize factor\n * @default 0.6\n */\n size: number;\n /**\n * baseline-shift factor (upwards)\n * @default -0.35\n */\n baseline: number;\n };\n\n /**\n * Subscript schema object (minimum overlap)\n */\n declare subscript: {\n /**\n * fontSize factor\n * @default 0.6\n */\n size: number;\n /**\n * baseline-shift factor (downwards)\n * @default 0.11\n */\n baseline: number;\n };\n\n /**\n * Background color of text lines\n * @type String\n * @default\n */\n declare textBackgroundColor: string;\n\n declare styles: TextStyle;\n\n /**\n * Path that the text should follow.\n * since 4.6.0 the path will be drawn automatically.\n * if you want to make the path visible, give it a stroke and strokeWidth or fill value\n * if you want it to be hidden, assign visible = false to the path.\n * This feature is in BETA, and SVG import/export is not yet supported.\n * @type Path\n * @example\n * const textPath = new Text('Text on a path', {\n * top: 150,\n * left: 150,\n * textAlign: 'center',\n * charSpacing: -50,\n * path: new Path('M 0 0 C 50 -100 150 -100 200 0', {\n * strokeWidth: 1,\n * visible: false\n * }),\n * pathSide: 'left',\n * pathStartOffset: 0\n * });\n * @default\n */\n declare path?: Path;\n\n /**\n * Offset amount for text path starting position\n * Only used when text has a path\n * @type Number\n * @default\n */\n declare pathStartOffset: number;\n\n /**\n * Which side of the path the text should be drawn on.\n * Only used when text has a path\n * @type {TPathSide} 'left|right'\n * @default\n */\n declare pathSide: TPathSide;\n\n /**\n * How text is aligned to the path. This property determines\n * the perpendicular position of each character relative to the path.\n * (one of \"baseline\", \"center\", \"ascender\", \"descender\")\n * This feature is in BETA, and its behavior may change\n * @type TPathAlign\n * @default\n */\n declare pathAlign: TPathAlign;\n\n /**\n * @private\n */\n declare _fontSizeFraction: number;\n\n /**\n * @private\n */\n declare offsets: { underline: number; linethrough: number; overline: number };\n\n /**\n * Text Line proportion to font Size (in pixels)\n * @type Number\n * @default\n */\n declare _fontSizeMult: number;\n\n /**\n * additional space between characters\n * expressed in thousands of em unit\n * @type Number\n * @default\n */\n declare charSpacing: number;\n\n /**\n * Baseline shift, styles only, keep at 0 for the main text object\n * @type {Number}\n * @default\n */\n declare deltaY: number;\n\n /**\n * WARNING: EXPERIMENTAL. NOT SUPPORTED YET\n * determine the direction of the text.\n * This has to be set manually together with textAlign and originX for proper\n * experience.\n * some interesting link for the future\n * https://www.w3.org/International/questions/qa-bidi-unicode-controls\n * @since 4.5.0\n * @type {CanvasDirection} 'ltr|rtl'\n * @default\n */\n declare direction: CanvasDirection;\n\n /**\n * contains characters bounding boxes\n * This variable is considered to be protected.\n * But for how mixins are implemented right now, we can't leave it private\n * @protected\n */\n __charBounds: GraphemeBBox[][] = [];\n\n /**\n * use this size when measuring text. To avoid IE11 rounding errors\n * @type {Number}\n * @default\n * @readonly\n * @private\n */\n declare CACHE_FONT_SIZE: number;\n\n /**\n * contains the min text width to avoid getting 0\n * @type {Number}\n * @default\n */\n declare MIN_TEXT_WIDTH: number;\n\n /**\n * contains the the text of the object, divided in lines as they are displayed\n * on screen. Wrapping will divide the text independently of line breaks\n * @type {string[]}\n * @default\n */\n declare textLines: string[];\n\n /**\n * same as textlines, but each line is an array of graphemes as split by splitByGrapheme\n * @type {string[]}\n * @default\n */\n declare _textLines: string[][];\n\n declare _unwrappedTextLines: string[][];\n declare _text: string[];\n declare cursorWidth: number;\n declare __lineHeights: number[];\n declare __lineWidths: number[];\n declare initialized?: true;\n\n static cacheProperties = [...cacheProperties, ...additionalProps];\n\n static ownDefaults = textDefaultValues;\n\n static type = 'Text';\n\n static getDefaults(): Record<string, any> {\n return { ...super.getDefaults(), ...FabricText.ownDefaults };\n }\n\n constructor(text: string, options?: Props) {\n super();\n Object.assign(this, FabricText.ownDefaults);\n this.setOptions(options);\n if (!this.styles) {\n this.styles = {};\n }\n this.text = text;\n this.initialized = true;\n if (this.path) {\n this.setPathInfo();\n }\n this.initDimensions();\n this.setCoords();\n }\n\n /**\n * If text has a path, it will add the extra information needed\n * for path and text calculations\n */\n setPathInfo() {\n const path = this.path;\n if (path) {\n path.segmentsInfo = getPathSegmentsInfo(path.path);\n }\n }\n\n /**\n * @private\n * Divides text into lines of text and lines of graphemes.\n */\n _splitText(): TextLinesInfo {\n const newLines = this._splitTextIntoLines(this.text);\n this.textLines = newLines.lines;\n this._textLines = newLines.graphemeLines;\n this._unwrappedTextLines = newLines._unwrappedLines;\n this._text = newLines.graphemeText;\n return newLines;\n }\n\n /**\n * Initialize or update text dimensions.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n */\n initDimensions() {\n this._splitText();\n this._clearCache();\n this.dirty = true;\n if (this.path) {\n this.width = this.path.width;\n this.height = this.path.height;\n } else {\n this.width =\n this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH;\n this.height = this.calcTextHeight();\n }\n if (this.textAlign.includes(JUSTIFY)) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n }\n\n /**\n * Enlarge space boxes and shift the others\n */\n enlargeSpaces() {\n let diffSpace,\n currentLineWidth,\n numberOfSpaces,\n accumulatedSpace,\n line,\n charBound,\n spaces;\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n if (\n this.textAlign !== JUSTIFY &&\n (i === len - 1 || this.isEndOfWrapping(i))\n ) {\n continue;\n }\n accumulatedSpace = 0;\n line = this._textLines[i];\n currentLineWidth = this.getLineWidth(i);\n if (\n currentLineWidth < this.width &&\n (spaces = this.textLines[i].match(this._reSpacesAndTabs))\n ) {\n numberOfSpaces = spaces.length;\n diffSpace = (this.width - currentLineWidth) / numberOfSpaces;\n for (let j = 0; j <= line.length; j++) {\n charBound = this.__charBounds[i][j];\n if (this._reSpaceAndTab.test(line[j])) {\n charBound.width += diffSpace;\n charBound.kernedWidth += diffSpace;\n charBound.left += accumulatedSpace;\n accumulatedSpace += diffSpace;\n } else {\n charBound.left += accumulatedSpace;\n }\n }\n }\n }\n }\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @return {Boolean}\n */\n isEndOfWrapping(lineIndex: number): boolean {\n return lineIndex === this._textLines.length - 1;\n }\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * It return always 1 for text and Itext. Textbox has its own implementation\n * @return Number\n */\n missingNewlineOffset(lineIndex: number, skipWrapping?: boolean): 0 | 1;\n missingNewlineOffset(lineIndex: number): 1 {\n return 1;\n }\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor\n * @param {Number} selectionStart\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.\n */\n get2DCursorLocation(selectionStart: number, skipWrapping?: boolean) {\n const lines = skipWrapping ? this._unwrappedTextLines : this._textLines;\n let i: number;\n for (i = 0; i < lines.length; i++) {\n if (selectionStart <= lines[i].length) {\n return {\n lineIndex: i,\n charIndex: selectionStart,\n };\n }\n selectionStart -=\n lines[i].length + this.missingNewlineOffset(i, skipWrapping);\n }\n return {\n lineIndex: i - 1,\n charIndex:\n lines[i - 1].length < selectionStart\n ? lines[i - 1].length\n : selectionStart,\n };\n }\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of text object\n */\n toString(): string {\n return `#<Text (${this.complexity()}): { \"text\": \"${\n this.text\n }\", \"fontFamily\": \"${this.fontFamily}\" }>`;\n }\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @param {Object} dim.x width of object to be cached\n * @param {Object} dim.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions(): TCacheCanvasDimensions {\n const dims = super._getCacheCanvasDimensions();\n const fontSize = this.fontSize;\n dims.width += fontSize * dims.zoomX;\n dims.height += fontSize * dims.zoomY;\n return dims;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const path = this.path;\n path && !path.isNotVisible() && path._render(ctx);\n this._setTextStyles(ctx);\n this._renderTextLinesBackground(ctx);\n this._renderTextDecoration(ctx, 'underline');\n this._renderText(ctx);\n this._renderTextDecoration(ctx, 'overline');\n this._renderTextDecoration(ctx, 'linethrough');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderText(ctx: CanvasRenderingContext2D) {\n if (this.paintFirst === STROKE) {\n this._renderTextStroke(ctx);\n this._renderTextFill(ctx);\n } else {\n this._renderTextFill(ctx);\n this._renderTextStroke(ctx);\n }\n }\n\n /**\n * Set the font parameter of the context with the object properties or with charStyle\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [charStyle] object with font style properties\n * @param {String} [charStyle.fontFamily] Font Family\n * @param {Number} [charStyle.fontSize] Font size in pixels. ( without px suffix )\n * @param {String} [charStyle.fontWeight] Font weight\n * @param {String} [charStyle.fontStyle] Font style (italic|normal)\n */\n _setTextStyles(\n ctx: CanvasRenderingContext2D,\n charStyle?: any,\n forMeasuring?: boolean\n ) {\n ctx.textBaseline = 'alphabetic';\n if (this.path) {\n switch (this.pathAlign) {\n case CENTER:\n ctx.textBaseline = 'middle';\n break;\n case 'ascender':\n ctx.textBaseline = TOP;\n break;\n case 'descender':\n ctx.textBaseline = BOTTOM;\n break;\n }\n }\n ctx.font = this._getFontDeclaration(charStyle, forMeasuring);\n }\n\n /**\n * calculate and return the text Width measuring each line.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {Number} Maximum width of Text object\n */\n calcTextWidth(): number {\n let maxWidth = this.getLineWidth(0);\n\n for (let i = 1, len = this._textLines.length; i < len; i++) {\n const currentLineWidth = this.getLineWidth(i);\n if (currentLineWidth > maxWidth) {\n maxWidth = currentLineWidth;\n }\n }\n return maxWidth;\n }\n\n /**\n * @private\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} line Text to render\n * @param {Number} left Left position of text\n * @param {Number} top Top position of text\n * @param {Number} lineIndex Index of a line in a text\n */\n _renderTextLine(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n line: string[],\n left: number,\n top: number,\n lineIndex: number\n ) {\n this._renderChars(method, ctx, line, left, top, lineIndex);\n }\n\n /**\n * Renders the text background for lines, taking care of style\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextLinesBackground(ctx: CanvasRenderingContext2D) {\n if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor')) {\n return;\n }\n const originalFill = ctx.fillStyle,\n leftOffset = this._getLeftOffset();\n let lineTopOffset = this._getTopOffset();\n\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i);\n if (\n !this.textBackgroundColor &&\n !this.styleHas('textBackgroundColor', i)\n ) {\n lineTopOffset += heightOfLine;\n continue;\n }\n const jlen = this._textLines[i].length;\n const lineLeftOffset = this._getLineLeftOffset(i);\n let boxWidth = 0;\n let boxStart = 0;\n let drawStart;\n let currentColor;\n let lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (let j = 0; j < jlen; j++) {\n // at this point charbox are either standard or full with pathInfo if there is a path.\n const charBox = this.__charBounds[i][j] as Required<GraphemeBBox>;\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (this.path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillStyle = currentColor;\n currentColor &&\n ctx.fillRect(\n -charBox.width / 2,\n (-heightOfLine / this.lineHeight) * (1 - this._fontSizeFraction),\n charBox.width,\n heightOfLine / this.lineHeight\n );\n ctx.restore();\n } else if (currentColor !== lastColor) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = lastColor;\n lastColor &&\n ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight\n );\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastColor = currentColor;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n }\n if (currentColor && !this.path) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentColor;\n ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight\n );\n }\n lineTopOffset += heightOfLine;\n }\n ctx.fillStyle = originalFill;\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * measure and return the width of a single character.\n * possibly overridden to accommodate different measure logic or\n * to hook some external lib for character measurement\n * @private\n * @param {String} _char, char to be measured\n * @param {Object} charStyle style of char to be measured\n * @param {String} [previousChar] previous char\n * @param {Object} [prevCharStyle] style of previous char\n */\n _measureChar(\n _char: string,\n charStyle: CompleteTextStyleDeclaration,\n previousChar: string | undefined,\n prevCharStyle: CompleteTextStyleDeclaration | Record<string, never>\n ) {\n const fontCache = cache.getFontCache(charStyle),\n fontDeclaration = this._getFontDeclaration(charStyle),\n couple = previousChar + _char,\n stylesAreEqual =\n previousChar &&\n fontDeclaration === this._getFontDeclaration(prevCharStyle),\n fontMultiplier = charStyle.fontSize / this.CACHE_FONT_SIZE;\n let width: number | undefined,\n coupleWidth: number | undefined,\n previousWidth: number | undefined,\n kernedWidth: number | undefined;\n\n if (previousChar && fontCache[previousChar] !== undefined) {\n previousWidth = fontCache[previousChar];\n }\n if (fontCache[_char] !== undefined) {\n kernedWidth = width = fontCache[_char];\n }\n if (stylesAreEqual && fontCache[couple] !== undefined) {\n coupleWidth = fontCache[couple];\n kernedWidth = coupleWidth - previousWidth!;\n }\n if (\n width === undefined ||\n previousWidth === undefined ||\n coupleWidth === undefined\n ) {\n const ctx = getMeasuringContext()!;\n // send a TRUE to specify measuring font size CACHE_FONT_SIZE\n this._setTextStyles(ctx, charStyle, true);\n if (width === undefined) {\n kernedWidth = width = ctx.measureText(_char).width;\n fontCache[_char] = width;\n }\n if (previousWidth === undefined && stylesAreEqual && previousChar) {\n previousWidth = ctx.measureText(previousChar).width;\n fontCache[previousChar] = previousWidth;\n }\n if (stylesAreEqual && coupleWidth === undefined) {\n // we can measure the kerning couple and subtract the width of the previous character\n coupleWidth = ctx.measureText(couple).width;\n fontCache[couple] = coupleWidth;\n // safe to use the non-null since if undefined we defined it before.\n kernedWidth = coupleWidth - previousWidth!;\n }\n }\n return {\n width: width * fontMultiplier,\n kernedWidth: kernedWidth! * fontMultiplier,\n };\n }\n\n /**\n * Computes height of character at given position\n * @param {Number} line the line index number\n * @param {Number} _char the character index number\n * @return {Number} fontSize of the character\n */\n getHeightOfChar(line: number, _char: number): number {\n return this.getValueOfPropertyAt(line, _char, 'fontSize');\n }\n\n /**\n * measure a text line measuring all characters.\n * @param {Number} lineIndex line number\n */\n measureLine(lineIndex: number) {\n const lineInfo = this._measureLine(lineIndex);\n if (this.charSpacing !== 0) {\n lineInfo.width -= this._getWidthOfCharSpacing();\n }\n if (lineInfo.width < 0) {\n lineInfo.width = 0;\n }\n return lineInfo;\n }\n\n /**\n * measure every grapheme of a line, populating __charBounds\n * @param {Number} lineIndex\n * @return {Object} object.width total width of characters\n * @return {Object} object.numOfSpaces length of chars that match this._reSpacesAndTabs\n */\n _measureLine(lineIndex: number) {\n let width = 0,\n prevGrapheme: string | undefined,\n graphemeInfo: GraphemeBBox | undefined;\n\n const reverse = this.pathSide === RIGHT,\n path = this.path,\n line = this._textLines[lineIndex],\n llength = line.length,\n lineBounds = new Array<GraphemeBBox>(llength);\n\n this.__charBounds[lineIndex] = lineBounds;\n for (let i = 0; i < llength; i++) {\n const grapheme = line[i];\n graphemeInfo = this._getGraphemeBox(grapheme, lineIndex, i, prevGrapheme);\n lineBounds[i] = graphemeInfo;\n width += graphemeInfo.kernedWidth;\n prevGrapheme = grapheme;\n }\n // this latest bound box represent the last character of the line\n // to simplify cursor handling in interactive mode.\n lineBounds[llength] = {\n left: graphemeInfo ? graphemeInfo.left + graphemeInfo.width : 0,\n width: 0,\n kernedWidth: 0,\n height: this.fontSize,\n deltaY: 0,\n } as GraphemeBBox;\n if (path && path.segmentsInfo) {\n let positionInPath = 0;\n const totalPathLength =\n path.segmentsInfo[path.segmentsInfo.length - 1].length;\n switch (this.textAlign) {\n case LEFT:\n positionInPath = reverse ? totalPathLength - width : 0;\n break;\n case CENTER:\n positionInPath = (totalPathLength - width) / 2;\n break;\n case RIGHT:\n positionInPath = reverse ? 0 : totalPathLength - width;\n break;\n //todo - add support for justify\n }\n positionInPath += this.pathStartOffset * (reverse ? -1 : 1);\n for (\n let i = reverse ? llength - 1 : 0;\n reverse ? i >= 0 : i < llength;\n reverse ? i-- : i++\n ) {\n graphemeInfo = lineBounds[i];\n if (positionInPath > totalPathLength) {\n positionInPath %= totalPathLength;\n } else if (positionInPath < 0) {\n positionInPath += totalPathLength;\n }\n // it would probably much faster to send all the grapheme position for a line\n // and calculate path position/angle at once.\n this._setGraphemeOnPath(positionInPath, graphemeInfo);\n positionInPath += graphemeInfo.kernedWidth;\n }\n }\n return { width: width, numOfSpaces: 0 };\n }\n\n /**\n * Calculate the angle and the left,top position of the char that follow a path.\n * It appends it to graphemeInfo to be reused later at rendering\n * @private\n * @param {Number} positionInPath to be measured\n * @param {GraphemeBBox} graphemeInfo current grapheme box information\n * @param {Object} startingPoint position of the point\n */\n _setGraphemeOnPath(positionInPath: number, graphemeInfo: GraphemeBBox) {\n const centerPosition = positionInPath + graphemeInfo.kernedWidth / 2,\n path = this.path!;\n\n // we are at currentPositionOnPath. we want to know what point on the path is.\n const info = getPointOnPath(path.path, centerPosition, path.segmentsInfo)!;\n graphemeInfo.renderLeft = info.x - path.pathOffset.x;\n graphemeInfo.renderTop = info.y - path.pathOffset.y;\n graphemeInfo.angle = info.angle + (this.pathSide === RIGHT ? Math.PI : 0);\n }\n\n /**\n *\n * @param {String} grapheme to be measured\n * @param {Number} lineIndex index of the line where the char is\n * @param {Number} charIndex position in the line\n * @param {String} [prevGrapheme] character preceding the one to be measured\n * @returns {GraphemeBBox} grapheme bbox\n */\n _getGraphemeBox(\n grapheme: string,\n lineIndex: number,\n charIndex: number,\n prevGrapheme?: string,\n skipLeft?: boolean\n ): GraphemeBBox {\n const style = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n prevStyle = prevGrapheme\n ? this.getCompleteStyleDeclaration(lineIndex, charIndex - 1)\n : {},\n info = this._measureChar(grapheme, style, prevGrapheme, prevStyle);\n let kernedWidth = info.kernedWidth,\n width = info.width,\n charSpacing;\n\n if (this.charSpacing !== 0) {\n charSpacing = this._getWidthOfCharSpacing();\n width += charSpacing;\n kernedWidth += charSpacing;\n }\n\n const box: GraphemeBBox = {\n width,\n left: 0,\n height: style.fontSize,\n kernedWidth,\n deltaY: style.deltaY,\n };\n if (charIndex > 0 && !skipLeft) {\n const previousBox = this.__charBounds[lineIndex][charIndex - 1];\n box.left =\n previousBox.left + previousBox.width + info.kernedWidth - info.width;\n }\n return box;\n }\n\n /**\n * Calculate height of line at 'lineIndex'\n * @param {Number} lineIndex index of line to calculate\n * @return {Number}\n */\n getHeightOfLine(lineIndex: number): number {\n if (this.__lineHeights[lineIndex]) {\n return this.__lineHeights[lineIndex];\n }\n\n // char 0 is measured before the line cycle because it needs to char\n // emptylines\n let maxHeight = this.getHeightOfChar(lineIndex, 0);\n for (let i = 1, len = this._textLines[lineIndex].length; i < len; i++) {\n maxHeight = Math.max(this.getHeightOfChar(lineIndex, i), maxHeight);\n }\n\n return (this.__lineHeights[lineIndex] =\n maxHeight * this.lineHeight * this._fontSizeMult);\n }\n\n /**\n * Calculate text box height\n */\n calcTextHeight() {\n let lineHeight,\n height = 0;\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n lineHeight = this.getHeightOfLine(i);\n height += i === len - 1 ? lineHeight / this.lineHeight : lineHeight;\n }\n return height;\n }\n\n /**\n * @private\n * @return {Number} Left offset\n */\n _getLeftOffset(): number {\n return this.direction === 'ltr' ? -this.width / 2 : this.width / 2;\n }\n\n /**\n * @private\n * @return {Number} Top offset\n */\n _getTopOffset(): number {\n return -this.height / 2;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n */\n _renderTextCommon(\n ctx: CanvasRenderingContext2D,\n method: 'fillText' | 'strokeText'\n ) {\n ctx.save();\n let lineHeights = 0;\n const left = this._getLeftOffset(),\n top = this._getTopOffset();\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i),\n maxHeight = heightOfLine / this.lineHeight,\n leftOffset = this._getLineLeftOffset(i);\n this._renderTextLine(\n method,\n ctx,\n this._textLines[i],\n left + leftOffset,\n top + lineHeights + maxHeight,\n i\n );\n lineHeights += heightOfLine;\n }\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextFill(ctx: CanvasRenderingContext2D) {\n if (!this.fill && !this.styleHas(FILL)) {\n return;\n }\n\n this._renderTextCommon(ctx, 'fillText');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextStroke(ctx: CanvasRenderingContext2D) {\n if ((!this.stroke || this.strokeWidth === 0) && this.isEmptyStyles()) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n this._setLineDash(ctx, this.strokeDashArray);\n ctx.beginPath();\n this._renderTextCommon(ctx, 'strokeText');\n ctx.closePath();\n ctx.restore();\n }\n\n /**\n * @private\n * @param {String} method fillText or strokeText.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Array} line Content of the line, splitted in an array by grapheme\n * @param {Number} left\n * @param {Number} top\n * @param {Number} lineIndex\n */\n _renderChars(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n line: Array<any>,\n left: number,\n top: number,\n lineIndex: number\n ) {\n const lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.includes(JUSTIFY),\n path = this.path,\n shortCut =\n !isJustify &&\n this.charSpacing === 0 &&\n this.isEmptyStyles(lineIndex) &&\n !path,\n isLtr = this.direction === 'ltr',\n sign = this.direction === 'ltr' ? 1 : -1,\n // this was changed in the PR #7674\n // currentDirection = ctx.canvas.getAttribute('dir');\n currentDirection = ctx.direction;\n\n let actualStyle,\n nextStyle,\n charsToRender = '',\n charBox,\n boxWidth = 0,\n timeToRender,\n drawingLeft;\n\n ctx.save();\n if (currentDirection !== this.direction) {\n ctx.canvas.setAttribute('dir', isLtr ? 'ltr' : 'rtl');\n ctx.direction = isLtr ? 'ltr' : 'rtl';\n ctx.textAlign = isLtr ? LEFT : RIGHT;\n }\n top -= (lineHeight * this._fontSizeFraction) / this.lineHeight;\n if (shortCut) {\n // render all the line in one pass without checking\n // drawingLeft = isLtr ? left : left - this.getLineWidth(lineIndex);\n this._renderChar(method, ctx, lineIndex, 0, line.join(''), left, top);\n ctx.restore();\n return;\n }\n for (let i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing || path;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i] as Required<GraphemeBBox>;\n if (boxWidth === 0) {\n left += sign * (charBox.kernedWidth - charBox.width);\n boxWidth += charBox.width;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle =\n actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = hasStyleChanged(actualStyle, nextStyle, false);\n }\n if (timeToRender) {\n if (path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n this._renderChar(\n method,\n ctx,\n lineIndex,\n i,\n charsToRender,\n -boxWidth / 2,\n 0\n );\n ctx.restore();\n } else {\n drawingLeft = left;\n this._renderChar(\n method,\n ctx,\n lineIndex,\n i,\n charsToRender,\n drawingLeft,\n top\n );\n }\n charsToRender = '';\n actualStyle = nextStyle;\n left += sign * boxWidth;\n boxWidth = 0;\n }\n }\n ctx.restore();\n }\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {TFiller} filler a fabric gradient instance\n * @return {CanvasPattern} a pattern to use as fill/stroke style\n */\n _applyPatternGradientTransformText(filler: TFiller) {\n const pCanvas = createCanvasElement(),\n // TODO: verify compatibility with strokeUniform\n width = this.width + this.strokeWidth,\n height = this.height + this.strokeWidth,\n pCtx = pCanvas.getContext('2d')!;\n pCanvas.width = width;\n pCanvas.height = height;\n pCtx.beginPath();\n pCtx.moveTo(0, 0);\n pCtx.lineTo(width, 0);\n pCtx.lineTo(width, height);\n pCtx.lineTo(0, height);\n pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.fillStyle = filler.toLive(pCtx)!;\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fill();\n return pCtx.createPattern(pCanvas, 'no-repeat')!;\n }\n\n handleFiller<T extends 'fill' | 'stroke'>(\n ctx: CanvasRenderingContext2D,\n property: `${T}Style`,\n filler: TFiller | string\n ): { offsetX: number; offsetY: number } {\n let offsetX: number, offsetY: number;\n if (isFiller(filler)) {\n if (\n (filler as Gradient<'linear'>).gradientUnits === 'percentage' ||\n (filler as Gradient<'linear'>).gradientTransform ||\n (filler as Pattern).patternTransform\n ) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n offsetX = -this.width / 2;\n offsetY = -this.height / 2;\n ctx.translate(offsetX, offsetY);\n ctx[property] = this._applyPatternGradientTransformText(filler);\n return { offsetX, offsetY };\n } else {\n // is a simple gradient or pattern\n ctx[property] = filler.toLive(ctx)!;\n return this._applyPatternGradientTransform(ctx, filler);\n }\n } else {\n // is a color\n ctx[property] = filler;\n }\n return { offsetX: 0, offsetY: 0 };\n }\n\n /**\n * This function prepare the canvas for a stroke style, and stroke and strokeWidth\n * need to be sent in as defined\n * @param {CanvasRenderingContext2D} ctx\n * @param {CompleteTextStyleDeclaration} style with stroke and strokeWidth defined\n * @returns\n */\n _setStrokeStyles(\n ctx: CanvasRenderingContext2D,\n {\n stroke,\n strokeWidth,\n }: Pick<CompleteTextStyleDeclaration, 'stroke' | 'strokeWidth'>\n ) {\n ctx.lineWidth = strokeWidth;\n ctx.lineCap = this.strokeLineCap;\n ctx.lineDashOffset = this.strokeDashOffset;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.miterLimit = this.strokeMiterLimit;\n return this.handleFiller(ctx, 'strokeStyle', stroke!);\n }\n\n /**\n * This function prepare the canvas for a ill style, and fill\n * need to be sent in as defined\n * @param {CanvasRenderingContext2D} ctx\n * @param {CompleteTextStyleDeclaration} style with ill defined\n * @returns\n */\n _setFillStyles(ctx: CanvasRenderingContext2D, { fill }: Pick<this, 'fill'>) {\n return this.handleFiller(ctx, 'fillStyle', fill!);\n }\n\n /**\n * @private\n * @param {String} method\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {String} _char\n * @param {Number} left Left coordinate\n * @param {Number} top Top coordinate\n * @param {Number} lineHeight Height of the line\n */\n _renderChar(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n lineIndex: number,\n charIndex: number,\n _char: string,\n left: number,\n top: number\n ) {\n const decl = this._getStyleDeclaration(lineIndex, charIndex),\n fullDecl = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n shouldFill = method === 'fillText' && fullDecl.fill,\n shouldStroke =\n method === 'strokeText' && fullDecl.stroke && fullDecl.strokeWidth;\n\n if (!shouldStroke && !shouldFill) {\n return;\n }\n ctx.save();\n\n ctx.font = this._getFontDeclaration(fullDecl);\n\n if (decl.textBackgroundColor) {\n this._removeShadow(ctx);\n }\n if (decl.deltaY) {\n top += decl.deltaY;\n }\n\n if (shouldFill) {\n const fillOffsets = this._setFillStyles(ctx, fullDecl);\n ctx.fillText(\n _char,\n left - fillOffsets.offsetX,\n top - fillOffsets.offsetY\n );\n }\n\n if (shouldStroke) {\n const strokeOffsets = this._setStrokeStyles(ctx, fullDecl);\n ctx.strokeText(\n _char,\n left - strokeOffsets.offsetX,\n top - strokeOffsets.offsetY\n );\n }\n\n ctx.restore();\n }\n\n /**\n * Turns the character into a 'superior figure' (i.e. 'superscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n */\n setSuperscript(start: number, end: number) {\n this._setScript(start, end, this.superscript);\n }\n\n /**\n * Turns the character into an 'inferior figure' (i.e. 'subscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n */\n setSubscript(start: number, end: number) {\n this._setScript(start, end, this.subscript);\n }\n\n /**\n * Applies 'schema' at given position\n * @private\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @param {Number} schema\n */\n protected _setScript(\n start: number,\n end: number,\n schema: {\n size: number;\n baseline: number;\n }\n ) {\n const loc = this.get2DCursorLocation(start, true),\n fontSize = this.getValueOfPropertyAt(\n loc.lineIndex,\n loc.charIndex,\n 'fontSize'\n ),\n dy = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'deltaY'),\n style = {\n fontSize: fontSize * schema.size,\n deltaY: dy + fontSize * schema.baseline,\n };\n this.setSelectionStyles(style, start, end);\n }\n\n /**\n * @private\n * @param {Number} lineIndex index text line\n * @return {Number} Line left offset\n */\n _getLineLeftOffset(lineIndex: number): number {\n const lineWidth = this.getLineWidth(lineIndex),\n lineDiff = this.width - lineWidth,\n textAlign = this.textAlign,\n direction = this.direction,\n isEndOfWrapping = this.isEndOfWrapping(lineIndex);\n let leftOffset = 0;\n if (\n textAlign === JUSTIFY ||\n (textAlign === JUSTIFY_CENTER && !isEndOfWrapping) ||\n (textAlign === JUSTIFY_RIGHT && !isEndOfWrapping) ||\n (textAlign === JUSTIFY_LEFT && !isEndOfWrapping)\n ) {\n return 0;\n }\n if (textAlign === CENTER) {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === RIGHT) {\n leftOffset = lineDiff;\n }\n if (textAlign === JUSTIFY_CENTER) {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === JUSTIFY_RIGHT) {\n leftOffset = lineDiff;\n }\n if (direction === 'rtl') {\n if (\n textAlign === RIGHT ||\n textAlign === JUSTIFY ||\n textAlign === JUSTIFY_RIGHT\n ) {\n leftOffset = 0;\n } else if (textAlign === LEFT || textAlign === JUSTIFY_LEFT) {\n leftOffset = -lineDiff;\n } else if (textAlign === CENTER || textAlign === JUSTIFY_CENTER) {\n leftOffset = -lineDiff / 2;\n }\n }\n return leftOffset;\n }\n\n /**\n * @private\n */\n _clearCache() {\n this._forceClearCache = false;\n this.__lineWidths = [];\n this.__lineHeights = [];\n this.__charBounds = [];\n }\n\n /**\n * Measure a single line given its index. Used to calculate the initial\n * text bounding box. The values are calculated and stored in __lineWidths cache.\n * @private\n * @param {Number} lineIndex line number\n * @return {Number} Line width\n */\n getLineWidth(lineIndex: number): number {\n if (this.__lineWidths[lineIndex] !== undefined) {\n return this.__lineWidths[lineIndex];\n }\n\n const { width } = this.measureLine(lineIndex);\n this.__lineWidths[lineIndex] = width;\n return width;\n }\n\n _getWidthOfCharSpacing() {\n if (this.charSpacing !== 0) {\n return (this.fontSize * this.charSpacing) / 1000;\n }\n return 0;\n }\n\n /**\n * Retrieves the value of property at given character position\n * @param {Number} lineIndex the line number\n * @param {Number} charIndex the character number\n * @param {String} property the property name\n * @returns the value of 'property'\n */\n getValueOfPropertyAt<T extends StylePropertiesType>(\n lineIndex: number,\n charIndex: number,\n property: T\n ): this[T] {\n const charStyle = this._getStyleDeclaration(lineIndex, charIndex);\n return (charStyle[property] ?? this[property]) as this[T];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextDecoration(\n ctx: CanvasRenderingContext2D,\n type: 'underline' | 'linethrough' | 'overline'\n ) {\n if (!this[type] && !this.styleHas(type)) {\n return;\n }\n let topOffset = this._getTopOffset();\n const leftOffset = this._getLeftOffset(),\n path = this.path,\n charSpacing = this._getWidthOfCharSpacing(),\n offsetY = this.offsets[type];\n\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i);\n if (!this[type] && !this.styleHas(type, i)) {\n topOffset += heightOfLine;\n continue;\n }\n const line = this._textLines[i];\n const maxHeight = heightOfLine / this.lineHeight;\n const lineLeftOffset = this._getLineLeftOffset(i);\n let boxStart = 0;\n let boxWidth = 0;\n let lastDecoration = this.getValueOfPropertyAt(i, 0, type);\n let lastFill = this.getValueOfPropertyAt(i, 0, FILL);\n let currentDecoration;\n let currentFill;\n const top = topOffset + maxHeight * (1 - this._fontSizeFraction);\n let size = this.getHeightOfChar(i, 0);\n let dy = this.getValueOfPropertyAt(i, 0, 'deltaY');\n for (let j = 0, jlen = line.length; j < jlen; j++) {\n const charBox = this.__charBounds[i][j] as Required<GraphemeBBox>;\n currentDecoration = this.getValueOfPropertyAt(i, j, type);\n currentFill = this.getValueOfPropertyAt(i, j, FILL);\n const currentSize = this.getHeightOfChar(i, j);\n const currentDy = this.getValueOfPropertyAt(i, j, 'deltaY');\n if (path && currentDecoration && currentFill) {\n ctx.save();\n // bug? verify lastFill is a valid fill here.\n ctx.fillStyle = lastFill as string;\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillRect(\n -charBox.kernedWidth / 2,\n offsetY * currentSize + currentDy,\n charBox.kernedWidth,\n this.fontSize / 15\n );\n ctx.restore();\n } else if (\n (currentDecoration !== lastDecoration ||\n currentFill !== lastFill ||\n currentSize !== size ||\n currentDy !== dy) &&\n boxWidth > 0\n ) {\n let drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n if (lastDecoration && lastFill) {\n // bug? verify lastFill is a valid fill here.\n ctx.fillStyle = lastFill as string;\n ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth,\n this.fontSize / 15\n );\n }\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastDecoration = currentDecoration;\n lastFill = currentFill;\n size = currentSize;\n dy = currentDy;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n }\n let drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentFill as string;\n currentDecoration &&\n currentFill &&\n ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth - charSpacing,\n this.fontSize / 15\n );\n topOffset += heightOfLine;\n }\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * return font declaration string for canvas context\n * @param {Object} [styleObject] object\n * @returns {String} font declaration formatted for canvas context.\n */\n _getFontDeclaration(\n {\n fontFamily = this.fontFamily,\n fontStyle = this.fontStyle,\n fontWeight = this.fontWeight,\n fontSize = this.fontSize,\n }: Partial<\n Pick<\n TextStyleDeclaration,\n 'fontFamily' | 'fontStyle' | 'fontWeight' | 'fontSize'\n >\n > = {},\n forMeasuring?: boolean\n ): string {\n const parsedFontFamily =\n fontFamily.includes(\"'\") ||\n fontFamily.includes('\"') ||\n fontFamily.includes(',') ||\n FabricText.genericFonts.includes(fontFamily.toLowerCase())\n ? fontFamily\n : `\"${fontFamily}\"`;\n return [\n fontStyle,\n fontWeight,\n `${forMeasuring ? this.CACHE_FONT_SIZE : fontSize}px`,\n parsedFontFamily,\n ].join(' ');\n }\n\n /**\n * Renders text instance on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n if (!this.visible) {\n return;\n }\n if (\n this.canvas &&\n this.canvas.skipOffscreen &&\n !this.group &&\n !this.isOnScreen()\n ) {\n return;\n }\n if (this._forceClearCache) {\n this.initDimensions();\n }\n super.render(ctx);\n }\n\n /**\n * Override this method to customize grapheme splitting\n * @todo the util `graphemeSplit` needs to be injectable in some way.\n * is more comfortable to inject the correct util rather than having to override text\n * in the middle of the prototype chain\n * @param {string} value\n * @returns {string[]} array of graphemes\n */\n graphemeSplit(value: string): string[] {\n return graphemeSplit(value);\n }\n\n /**\n * Returns the text as an array of lines.\n * @param {String} text text to split\n * @returns Lines in the text\n */\n _splitTextIntoLines(text: string): TextLinesInfo {\n const lines = text.split(this._reNewline),\n newLines = new Array<string[]>(lines.length),\n newLine = ['\\n'];\n let newText: string[] = [];\n for (let i = 0; i < lines.length; i++) {\n newLines[i] = this.graphemeSplit(lines[i]);\n newText = newText.concat(newLines[i], newLine);\n }\n newText.pop();\n return {\n _unwrappedLines: newLines,\n lines: lines,\n graphemeText: newText,\n graphemeLines: newLines,\n };\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject([...additionalProps, ...propertiesToInclude] as K[]),\n styles: stylesToArray(this.styles, this.text),\n ...(this.path ? { path: this.path.toObject() } : {}),\n };\n }\n\n set(key: string | any, value?: any) {\n const { textLayoutProperties } = this.constructor as typeof FabricText;\n super.set(key, value);\n let needsDims = false;\n let isAddingPath = false;\n if (typeof key === 'object') {\n for (const _key in key) {\n if (_key === 'path') {\n this.setPathInfo();\n }\n needsDims = needsDims || textLayoutProperties.includes(_key);\n isAddingPath = isAddingPath || _key === 'path';\n }\n } else {\n needsDims = textLayoutProperties.includes(key);\n isAddingPath = key === 'path';\n }\n if (isAddingPath) {\n this.setPathInfo();\n }\n if (needsDims && this.initialized) {\n this.initDimensions();\n this.setCoords();\n }\n return this;\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity\n */\n complexity(): number {\n return 1;\n }\n\n static genericFonts = [\n 'sans-serif',\n 'serif',\n 'cursive',\n 'fantasy',\n 'monospace',\n ];\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link FabricText.fromElement})\n * @static\n * @memberOf Text\n * @see: http://www.w3.org/TR/SVG/text.html#TextElement\n */\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(\n 'x',\n 'y',\n 'dx',\n 'dy',\n 'font-family',\n 'font-style',\n 'font-weight',\n 'font-size',\n 'letter-spacing',\n 'text-decoration',\n 'text-anchor'\n );\n\n /**\n * Returns FabricText instance from an SVG element (<b>not yet implemented</b>)\n * @static\n * @memberOf Text\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules\n ) {\n const parsedAttributes = parseAttributes(\n element,\n FabricText.ATTRIBUTE_NAMES,\n cssRules\n );\n\n const {\n textAnchor = LEFT as typeof LEFT | typeof CENTER | typeof RIGHT,\n textDecoration = '',\n dx = 0,\n dy = 0,\n top = 0,\n left = 0,\n fontSize = DEFAULT_SVG_FONT_SIZE,\n strokeWidth = 1,\n ...restOfOptions\n } = { ...options, ...parsedAttributes };\n\n const textContent = (element.textContent || '')\n .replace(/^\\s+|\\s+$|\\n+/g, '')\n .replace(/\\s+/g, ' ');\n\n // this code here is probably the usual issue for SVG center find\n // this can later looked at again and probably removed.\n\n const text = new this(textContent, {\n left: left + dx,\n top: top + dy,\n underline: textDecoration.includes('underline'),\n overline: textDecoration.includes('overline'),\n linethrough: textDecoration.includes('line-through'),\n // we initialize this as 0\n strokeWidth: 0,\n fontSize,\n ...restOfOptions,\n }),\n textHeightScaleFactor = text.getScaledHeight() / text.height,\n lineHeightDiff =\n (text.height + text.strokeWidth) * text.lineHeight - text.height,\n scaledDiff = lineHeightDiff * textHeightScaleFactor,\n textHeight = text.getScaledHeight() + scaledDiff;\n\n let offX = 0;\n /*\n Adjust positioning:\n x/y attributes in SVG correspond to the bottom-left corner of text bounding box\n fabric output by default at top, left.\n */\n if (textAnchor === CENTER) {\n offX = text.getScaledWidth() / 2;\n }\n if (textAnchor === RIGHT) {\n offX = text.getScaledWidth();\n }\n text.set({\n left: text.left - offX,\n top:\n text.top -\n (textHeight - text.fontSize * (0.07 + text._fontSizeFraction)) /\n text.lineHeight,\n strokeWidth,\n });\n return text;\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns FabricText instance from an object representation\n * @param {Object} object plain js Object to create an instance from\n * @returns {Promise<FabricText>}\n */\n static fromObject<\n T extends TOptions<SerializedTextProps>,\n S extends FabricText\n >(object: T) {\n return this._fromObject<S>(\n {\n ...object,\n styles: stylesFromArray(object.styles || {}, object.text),\n },\n {\n extraParam: 'text',\n }\n );\n }\n}\n\napplyMixins(FabricText, [TextSVGExportMixin]);\nclassRegistry.setClass(FabricText);\nclassRegistry.setSVGClass(FabricText);\n"],"names":["measuringContext","getMeasuringContext","canvas","createCanvasElement","width","height","getContext","FabricText","StyledText","getDefaults","_objectSpread","ownDefaults","constructor","text","options","_defineProperty","Object","assign","setOptions","styles","initialized","path","setPathInfo","initDimensions","setCoords","segmentsInfo","getPathSegmentsInfo","_splitText","newLines","_splitTextIntoLines","textLines","lines","_textLines","graphemeLines","_unwrappedTextLines","_unwrappedLines","_text","graphemeText","_clearCache","dirty","calcTextWidth","cursorWidth","MIN_TEXT_WIDTH","calcTextHeight","textAlign","includes","JUSTIFY","enlargeSpaces","diffSpace","currentLineWidth","numberOfSpaces","accumulatedSpace","line","charBound","spaces","i","len","length","isEndOfWrapping","getLineWidth","match","_reSpacesAndTabs","j","__charBounds","_reSpaceAndTab","test","kernedWidth","left","lineIndex","missingNewlineOffset","get2DCursorLocation","selectionStart","skipWrapping","charIndex","toString","concat","complexity","fontFamily","_getCacheCanvasDimensions","dims","fontSize","zoomX","zoomY","_render","ctx","isNotVisible","_setTextStyles","_renderTextLinesBackground","_renderTextDecoration","_renderText","paintFirst","STROKE","_renderTextStroke","_renderTextFill","charStyle","forMeasuring","textBaseline","pathAlign","CENTER","TOP","BOTTOM","font","_getFontDeclaration","maxWidth","_renderTextLine","method","top","_renderChars","textBackgroundColor","styleHas","originalFill","fillStyle","leftOffset","_getLeftOffset","lineTopOffset","_getTopOffset","heightOfLine","getHeightOfLine","jlen","lineLeftOffset","_getLineLeftOffset","boxWidth","boxStart","drawStart","currentColor","lastColor","getValueOfPropertyAt","charBox","save","translate","renderLeft","renderTop","rotate","angle","fillRect","lineHeight","_fontSizeFraction","restore","direction","_removeShadow","_measureChar","_char","previousChar","prevCharStyle","fontCache","cache","getFontCache","fontDeclaration","couple","stylesAreEqual","fontMultiplier","CACHE_FONT_SIZE","coupleWidth","previousWidth","undefined","measureText","getHeightOfChar","measureLine","lineInfo","_measureLine","charSpacing","_getWidthOfCharSpacing","prevGrapheme","graphemeInfo","reverse","pathSide","RIGHT","llength","lineBounds","Array","grapheme","_getGraphemeBox","deltaY","positionInPath","totalPathLength","LEFT","pathStartOffset","_setGraphemeOnPath","numOfSpaces","centerPosition","info","getPointOnPath","x","pathOffset","y","Math","PI","skipLeft","style","getCompleteStyleDeclaration","prevStyle","box","previousBox","__lineHeights","maxHeight","max","_fontSizeMult","_renderTextCommon","lineHeights","fill","FILL","stroke","strokeWidth","isEmptyStyles","shadow","affectStroke","_setLineDash","strokeDashArray","beginPath","closePath","isJustify","shortCut","isLtr","sign","currentDirection","actualStyle","nextStyle","charsToRender","timeToRender","drawingLeft","setAttribute","_renderChar","join","hasStyleChanged","_applyPatternGradientTransformText","filler","pCanvas","pCtx","moveTo","lineTo","toLive","_applyPatternGradientTransform","createPattern","handleFiller","property","offsetX","offsetY","isFiller","gradientUnits","gradientTransform","patternTransform","_setStrokeStyles","_ref","lineWidth","lineCap","strokeLineCap","lineDashOffset","strokeDashOffset","lineJoin","strokeLineJoin","miterLimit","strokeMiterLimit","_setFillStyles","_ref2","decl","_getStyleDeclaration","fullDecl","shouldFill","shouldStroke","fillOffsets","fillText","strokeOffsets","strokeText","setSuperscript","start","end","_setScript","superscript","setSubscript","subscript","schema","loc","dy","size","baseline","setSelectionStyles","lineDiff","JUSTIFY_CENTER","JUSTIFY_RIGHT","JUSTIFY_LEFT","_forceClearCache","__lineWidths","_charStyle$property","type","topOffset","offsets","lastDecoration","lastFill","currentDecoration","currentFill","currentSize","currentDy","fontStyle","fontWeight","arguments","parsedFontFamily","genericFonts","toLowerCase","render","visible","skipOffscreen","group","isOnScreen","graphemeSplit","value","split","_reNewline","newLine","newText","pop","toObject","propertiesToInclude","additionalProps","stylesToArray","set","key","textLayoutProperties","needsDims","isAddingPath","_key","fromElement","element","cssRules","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","_options$parsedAttrib","textAnchor","textDecoration","dx","DEFAULT_SVG_FONT_SIZE","restOfOptions","_objectWithoutProperties","_excluded","textContent","replace","underline","overline","linethrough","textHeightScaleFactor","getScaledHeight","lineHeightDiff","scaledDiff","textHeight","offX","getScaledWidth","fromObject","object","_fromObject","stylesFromArray","extraParam","cacheProperties","textDefaultValues","SHARED_ATTRIBUTES","applyMixins","TextSVGExportMixin","classRegistry","setClass","setSVGClass"],"mappings":";;;;;;;;;;;;;;;;;;;AAiDA,IAAIA,gBAAiD,CAAA;;AAErD;AACA;AACA;AACA;AACA,SAASC,mBAAmBA,GAAG;EAC7B,IAAI,CAACD,gBAAgB,EAAE;AACrB,IAAA,MAAME,MAAM,GAAGC,mBAAmB,EAAE,CAAA;AACpCD,IAAAA,MAAM,CAACE,KAAK,GAAGF,MAAM,CAACG,MAAM,GAAG,CAAC,CAAA;AAChCL,IAAAA,gBAAgB,GAAGE,MAAM,CAACI,UAAU,CAAC,IAAI,CAAC,CAAA;AAC5C,GAAA;AACA,EAAA,OAAON,gBAAgB,CAAA;AACzB,CAAA;;AAaA;AACA;AACA;AACA;AACA;;AAYA;;AA4BA;AACA;AACA;AACA;AACO,MAAMO,UAAU,SAKbC,UAAU,CAEpB;EAgSE,OAAOC,WAAWA,GAAwB;AACxC,IAAA,OAAAC,cAAA,CAAAA,cAAA,CAAA,EAAA,EAAY,KAAK,CAACD,WAAW,EAAE,CAAA,EAAKF,UAAU,CAACI,WAAW,CAAA,CAAA;AAC5D,GAAA;AAEAC,EAAAA,WAAWA,CAACC,IAAY,EAAEC,OAAe,EAAE;AACzC,IAAA,KAAK,EAAE,CAAA;AAzDT;AACF;AACA;AACA;AACA;AACA;AALEC,IAAAA,eAAA,uBAMiC,EAAE,CAAA,CAAA;IAoDjCC,MAAM,CAACC,MAAM,CAAC,IAAI,EAAEV,UAAU,CAACI,WAAW,CAAC,CAAA;AAC3C,IAAA,IAAI,CAACO,UAAU,CAACJ,OAAO,CAAC,CAAA;AACxB,IAAA,IAAI,CAAC,IAAI,CAACK,MAAM,EAAE;AAChB,MAAA,IAAI,CAACA,MAAM,GAAG,EAAE,CAAA;AAClB,KAAA;IACA,IAAI,CAACN,IAAI,GAAGA,IAAI,CAAA;IAChB,IAAI,CAACO,WAAW,GAAG,IAAI,CAAA;IACvB,IAAI,IAAI,CAACC,IAAI,EAAE;MACb,IAAI,CAACC,WAAW,EAAE,CAAA;AACpB,KAAA;IACA,IAAI,CAACC,cAAc,EAAE,CAAA;IACrB,IAAI,CAACC,SAAS,EAAE,CAAA;AAClB,GAAA;;AAEA;AACF;AACA;AACA;AACEF,EAAAA,WAAWA,GAAG;AACZ,IAAA,MAAMD,IAAI,GAAG,IAAI,CAACA,IAAI,CAAA;AACtB,IAAA,IAAIA,IAAI,EAAE;MACRA,IAAI,CAACI,YAAY,GAAGC,mBAAmB,CAACL,IAAI,CAACA,IAAI,CAAC,CAAA;AACpD,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACEM,EAAAA,UAAUA,GAAkB;IAC1B,MAAMC,QAAQ,GAAG,IAAI,CAACC,mBAAmB,CAAC,IAAI,CAAChB,IAAI,CAAC,CAAA;AACpD,IAAA,IAAI,CAACiB,SAAS,GAAGF,QAAQ,CAACG,KAAK,CAAA;AAC/B,IAAA,IAAI,CAACC,UAAU,GAAGJ,QAAQ,CAACK,aAAa,CAAA;AACxC,IAAA,IAAI,CAACC,mBAAmB,GAAGN,QAAQ,CAACO,eAAe,CAAA;AACnD,IAAA,IAAI,CAACC,KAAK,GAAGR,QAAQ,CAACS,YAAY,CAAA;AAClC,IAAA,OAAOT,QAAQ,CAAA;AACjB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACEL,EAAAA,cAAcA,GAAG;IACf,IAAI,CAACI,UAAU,EAAE,CAAA;IACjB,IAAI,CAACW,WAAW,EAAE,CAAA;IAClB,IAAI,CAACC,KAAK,GAAG,IAAI,CAAA;IACjB,IAAI,IAAI,CAAClB,IAAI,EAAE;AACb,MAAA,IAAI,CAACjB,KAAK,GAAG,IAAI,CAACiB,IAAI,CAACjB,KAAK,CAAA;AAC5B,MAAA,IAAI,CAACC,MAAM,GAAG,IAAI,CAACgB,IAAI,CAAChB,MAAM,CAAA;AAChC,KAAC,MAAM;AACL,MAAA,IAAI,CAACD,KAAK,GACR,IAAI,CAACoC,aAAa,EAAE,IAAI,IAAI,CAACC,WAAW,IAAI,IAAI,CAACC,cAAc,CAAA;AACjE,MAAA,IAAI,CAACrC,MAAM,GAAG,IAAI,CAACsC,cAAc,EAAE,CAAA;AACrC,KAAA;IACA,IAAI,IAAI,CAACC,SAAS,CAACC,QAAQ,CAACC,OAAO,CAAC,EAAE;AACpC;MACA,IAAI,CAACC,aAAa,EAAE,CAAA;AACtB,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACEA,EAAAA,aAAaA,GAAG;AACd,IAAA,IAAIC,SAAS,EACXC,gBAAgB,EAChBC,cAAc,EACdC,gBAAgB,EAChBC,IAAI,EACJC,SAAS,EACTC,MAAM,CAAA;AACR,IAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAG,IAAI,CAACxB,UAAU,CAACyB,MAAM,EAAEF,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;AAC1D,MAAA,IACE,IAAI,CAACX,SAAS,KAAKE,OAAO,KACzBS,CAAC,KAAKC,GAAG,GAAG,CAAC,IAAI,IAAI,CAACE,eAAe,CAACH,CAAC,CAAC,CAAC,EAC1C;AACA,QAAA,SAAA;AACF,OAAA;AACAJ,MAAAA,gBAAgB,GAAG,CAAC,CAAA;AACpBC,MAAAA,IAAI,GAAG,IAAI,CAACpB,UAAU,CAACuB,CAAC,CAAC,CAAA;AACzBN,MAAAA,gBAAgB,GAAG,IAAI,CAACU,YAAY,CAACJ,CAAC,CAAC,CAAA;MACvC,IACEN,gBAAgB,GAAG,IAAI,CAAC7C,KAAK,KAC5BkD,MAAM,GAAG,IAAI,CAACxB,SAAS,CAACyB,CAAC,CAAC,CAACK,KAAK,CAAC,IAAI,CAACC,gBAAgB,CAAC,CAAC,EACzD;QACAX,cAAc,GAAGI,MAAM,CAACG,MAAM,CAAA;QAC9BT,SAAS,GAAG,CAAC,IAAI,CAAC5C,KAAK,GAAG6C,gBAAgB,IAAIC,cAAc,CAAA;AAC5D,QAAA,KAAK,IAAIY,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIV,IAAI,CAACK,MAAM,EAAEK,CAAC,EAAE,EAAE;UACrCT,SAAS,GAAG,IAAI,CAACU,YAAY,CAACR,CAAC,CAAC,CAACO,CAAC,CAAC,CAAA;UACnC,IAAI,IAAI,CAACE,cAAc,CAACC,IAAI,CAACb,IAAI,CAACU,CAAC,CAAC,CAAC,EAAE;YACrCT,SAAS,CAACjD,KAAK,IAAI4C,SAAS,CAAA;YAC5BK,SAAS,CAACa,WAAW,IAAIlB,SAAS,CAAA;YAClCK,SAAS,CAACc,IAAI,IAAIhB,gBAAgB,CAAA;AAClCA,YAAAA,gBAAgB,IAAIH,SAAS,CAAA;AAC/B,WAAC,MAAM;YACLK,SAAS,CAACc,IAAI,IAAIhB,gBAAgB,CAAA;AACpC,WAAA;AACF,SAAA;AACF,OAAA;AACF,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEO,eAAeA,CAACU,SAAiB,EAAW;IAC1C,OAAOA,SAAS,KAAK,IAAI,CAACpC,UAAU,CAACyB,MAAM,GAAG,CAAC,CAAA;AACjD,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;;EAEEY,oBAAoBA,CAACD,SAAiB,EAAK;AACzC,IAAA,OAAO,CAAC,CAAA;AACV,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACEE,EAAAA,mBAAmBA,CAACC,cAAsB,EAAEC,YAAsB,EAAE;IAClE,MAAMzC,KAAK,GAAGyC,YAAY,GAAG,IAAI,CAACtC,mBAAmB,GAAG,IAAI,CAACF,UAAU,CAAA;AACvE,IAAA,IAAIuB,CAAS,CAAA;AACb,IAAA,KAAKA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxB,KAAK,CAAC0B,MAAM,EAAEF,CAAC,EAAE,EAAE;MACjC,IAAIgB,cAAc,IAAIxC,KAAK,CAACwB,CAAC,CAAC,CAACE,MAAM,EAAE;QACrC,OAAO;AACLW,UAAAA,SAAS,EAAEb,CAAC;AACZkB,UAAAA,SAAS,EAAEF,cAAAA;SACZ,CAAA;AACH,OAAA;AACAA,MAAAA,cAAc,IACZxC,KAAK,CAACwB,CAAC,CAAC,CAACE,MAAM,GAAG,IAAI,CAACY,oBAAoB,CAACd,CAAC,EAAEiB,YAAY,CAAC,CAAA;AAChE,KAAA;IACA,OAAO;MACLJ,SAAS,EAAEb,CAAC,GAAG,CAAC;MAChBkB,SAAS,EACP1C,KAAK,CAACwB,CAAC,GAAG,CAAC,CAAC,CAACE,MAAM,GAAGc,cAAc,GAChCxC,KAAK,CAACwB,CAAC,GAAG,CAAC,CAAC,CAACE,MAAM,GACnBc,cAAAA;KACP,CAAA;AACH,GAAA;;AAEA;AACF;AACA;AACA;AACEG,EAAAA,QAAQA,GAAW;AACjB,IAAA,OAAA,UAAA,CAAAC,MAAA,CAAkB,IAAI,CAACC,UAAU,EAAE,EAAAD,mBAAAA,CAAAA,CAAAA,MAAA,CACjC,IAAI,CAAC9D,IAAI,EAAA,wBAAA,CAAA,CAAA8D,MAAA,CACU,IAAI,CAACE,UAAU,EAAA,OAAA,CAAA,CAAA;AACtC,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,yBAAyBA,GAA2B;AAClD,IAAA,MAAMC,IAAI,GAAG,KAAK,CAACD,yBAAyB,EAAE,CAAA;AAC9C,IAAA,MAAME,QAAQ,GAAG,IAAI,CAACA,QAAQ,CAAA;AAC9BD,IAAAA,IAAI,CAAC3E,KAAK,IAAI4E,QAAQ,GAAGD,IAAI,CAACE,KAAK,CAAA;AACnCF,IAAAA,IAAI,CAAC1E,MAAM,IAAI2E,QAAQ,GAAGD,IAAI,CAACG,KAAK,CAAA;AACpC,IAAA,OAAOH,IAAI,CAAA;AACb,GAAA;;AAEA;AACF;AACA;AACA;EACEI,OAAOA,CAACC,GAA6B,EAAE;AACrC,IAAA,MAAM/D,IAAI,GAAG,IAAI,CAACA,IAAI,CAAA;AACtBA,IAAAA,IAAI,IAAI,CAACA,IAAI,CAACgE,YAAY,EAAE,IAAIhE,IAAI,CAAC8D,OAAO,CAACC,GAAG,CAAC,CAAA;AACjD,IAAA,IAAI,CAACE,cAAc,CAACF,GAAG,CAAC,CAAA;AACxB,IAAA,IAAI,CAACG,0BAA0B,CAACH,GAAG,CAAC,CAAA;AACpC,IAAA,IAAI,CAACI,qBAAqB,CAACJ,GAAG,EAAE,WAAW,CAAC,CAAA;AAC5C,IAAA,IAAI,CAACK,WAAW,CAACL,GAAG,CAAC,CAAA;AACrB,IAAA,IAAI,CAACI,qBAAqB,CAACJ,GAAG,EAAE,UAAU,CAAC,CAAA;AAC3C,IAAA,IAAI,CAACI,qBAAqB,CAACJ,GAAG,EAAE,aAAa,CAAC,CAAA;AAChD,GAAA;;AAEA;AACF;AACA;AACA;EACEK,WAAWA,CAACL,GAA6B,EAAE;AACzC,IAAA,IAAI,IAAI,CAACM,UAAU,KAAKC,MAAM,EAAE;AAC9B,MAAA,IAAI,CAACC,iBAAiB,CAACR,GAAG,CAAC,CAAA;AAC3B,MAAA,IAAI,CAACS,eAAe,CAACT,GAAG,CAAC,CAAA;AAC3B,KAAC,MAAM;AACL,MAAA,IAAI,CAACS,eAAe,CAACT,GAAG,CAAC,CAAA;AACzB,MAAA,IAAI,CAACQ,iBAAiB,CAACR,GAAG,CAAC,CAAA;AAC7B,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEE,EAAAA,cAAcA,CACZF,GAA6B,EAC7BU,SAAe,EACfC,YAAsB,EACtB;IACAX,GAAG,CAACY,YAAY,GAAG,YAAY,CAAA;IAC/B,IAAI,IAAI,CAAC3E,IAAI,EAAE;MACb,QAAQ,IAAI,CAAC4E,SAAS;AACpB,QAAA,KAAKC,MAAM;UACTd,GAAG,CAACY,YAAY,GAAG,QAAQ,CAAA;AAC3B,UAAA,MAAA;AACF,QAAA,KAAK,UAAU;UACbZ,GAAG,CAACY,YAAY,GAAGG,GAAG,CAAA;AACtB,UAAA,MAAA;AACF,QAAA,KAAK,WAAW;UACdf,GAAG,CAACY,YAAY,GAAGI,MAAM,CAAA;AACzB,UAAA,MAAA;AACJ,OAAA;AACF,KAAA;IACAhB,GAAG,CAACiB,IAAI,GAAG,IAAI,CAACC,mBAAmB,CAACR,SAAS,EAAEC,YAAY,CAAC,CAAA;AAC9D,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEvD,EAAAA,aAAaA,GAAW;AACtB,IAAA,IAAI+D,QAAQ,GAAG,IAAI,CAAC5C,YAAY,CAAC,CAAC,CAAC,CAAA;AAEnC,IAAA,KAAK,IAAIJ,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAG,IAAI,CAACxB,UAAU,CAACyB,MAAM,EAAEF,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;AAC1D,MAAA,MAAMN,gBAAgB,GAAG,IAAI,CAACU,YAAY,CAACJ,CAAC,CAAC,CAAA;MAC7C,IAAIN,gBAAgB,GAAGsD,QAAQ,EAAE;AAC/BA,QAAAA,QAAQ,GAAGtD,gBAAgB,CAAA;AAC7B,OAAA;AACF,KAAA;AACA,IAAA,OAAOsD,QAAQ,CAAA;AACjB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,eAAeA,CACbC,MAAiC,EACjCrB,GAA6B,EAC7BhC,IAAc,EACde,IAAY,EACZuC,GAAW,EACXtC,SAAiB,EACjB;AACA,IAAA,IAAI,CAACuC,YAAY,CAACF,MAAM,EAAErB,GAAG,EAAEhC,IAAI,EAAEe,IAAI,EAAEuC,GAAG,EAAEtC,SAAS,CAAC,CAAA;AAC5D,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEmB,0BAA0BA,CAACH,GAA6B,EAAE;AACxD,IAAA,IAAI,CAAC,IAAI,CAACwB,mBAAmB,IAAI,CAAC,IAAI,CAACC,QAAQ,CAAC,qBAAqB,CAAC,EAAE;AACtE,MAAA,OAAA;AACF,KAAA;AACA,IAAA,MAAMC,YAAY,GAAG1B,GAAG,CAAC2B,SAAS;AAChCC,MAAAA,UAAU,GAAG,IAAI,CAACC,cAAc,EAAE,CAAA;AACpC,IAAA,IAAIC,aAAa,GAAG,IAAI,CAACC,aAAa,EAAE,CAAA;AAExC,IAAA,KAAK,IAAI5D,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAG,IAAI,CAACxB,UAAU,CAACyB,MAAM,EAAEF,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;AAC1D,MAAA,MAAM6D,YAAY,GAAG,IAAI,CAACC,eAAe,CAAC9D,CAAC,CAAC,CAAA;AAC5C,MAAA,IACE,CAAC,IAAI,CAACqD,mBAAmB,IACzB,CAAC,IAAI,CAACC,QAAQ,CAAC,qBAAqB,EAAEtD,CAAC,CAAC,EACxC;AACA2D,QAAAA,aAAa,IAAIE,YAAY,CAAA;AAC7B,QAAA,SAAA;AACF,OAAA;MACA,MAAME,IAAI,GAAG,IAAI,CAACtF,UAAU,CAACuB,CAAC,CAAC,CAACE,MAAM,CAAA;AACtC,MAAA,MAAM8D,cAAc,GAAG,IAAI,CAACC,kBAAkB,CAACjE,CAAC,CAAC,CAAA;MACjD,IAAIkE,QAAQ,GAAG,CAAC,CAAA;MAChB,IAAIC,QAAQ,GAAG,CAAC,CAAA;AAChB,MAAA,IAAIC,SAAS,CAAA;AACb,MAAA,IAAIC,YAAY,CAAA;MAChB,IAAIC,SAAS,GAAG,IAAI,CAACC,oBAAoB,CAACvE,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAA;MACtE,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwD,IAAI,EAAExD,CAAC,EAAE,EAAE;AAC7B;QACA,MAAMiE,OAAO,GAAG,IAAI,CAAChE,YAAY,CAACR,CAAC,CAAC,CAACO,CAAC,CAA2B,CAAA;QACjE8D,YAAY,GAAG,IAAI,CAACE,oBAAoB,CAACvE,CAAC,EAAEO,CAAC,EAAE,qBAAqB,CAAC,CAAA;QACrE,IAAI,IAAI,CAACzC,IAAI,EAAE;UACb+D,GAAG,CAAC4C,IAAI,EAAE,CAAA;UACV5C,GAAG,CAAC6C,SAAS,CAACF,OAAO,CAACG,UAAU,EAAEH,OAAO,CAACI,SAAS,CAAC,CAAA;AACpD/C,UAAAA,GAAG,CAACgD,MAAM,CAACL,OAAO,CAACM,KAAK,CAAC,CAAA;UACzBjD,GAAG,CAAC2B,SAAS,GAAGa,YAAY,CAAA;AAC5BA,UAAAA,YAAY,IACVxC,GAAG,CAACkD,QAAQ,CACV,CAACP,OAAO,CAAC3H,KAAK,GAAG,CAAC,EACjB,CAACgH,YAAY,GAAG,IAAI,CAACmB,UAAU,IAAK,CAAC,GAAG,IAAI,CAACC,iBAAiB,CAAC,EAChET,OAAO,CAAC3H,KAAK,EACbgH,YAAY,GAAG,IAAI,CAACmB,UACtB,CAAC,CAAA;UACHnD,GAAG,CAACqD,OAAO,EAAE,CAAA;AACf,SAAC,MAAM,IAAIb,YAAY,KAAKC,SAAS,EAAE;AACrCF,UAAAA,SAAS,GAAGX,UAAU,GAAGO,cAAc,GAAGG,QAAQ,CAAA;AAClD,UAAA,IAAI,IAAI,CAACgB,SAAS,KAAK,KAAK,EAAE;AAC5Bf,YAAAA,SAAS,GAAG,IAAI,CAACvH,KAAK,GAAGuH,SAAS,GAAGF,QAAQ,CAAA;AAC/C,WAAA;UACArC,GAAG,CAAC2B,SAAS,GAAGc,SAAS,CAAA;AACzBA,UAAAA,SAAS,IACPzC,GAAG,CAACkD,QAAQ,CACVX,SAAS,EACTT,aAAa,EACbO,QAAQ,EACRL,YAAY,GAAG,IAAI,CAACmB,UACtB,CAAC,CAAA;UACHb,QAAQ,GAAGK,OAAO,CAAC5D,IAAI,CAAA;UACvBsD,QAAQ,GAAGM,OAAO,CAAC3H,KAAK,CAAA;AACxByH,UAAAA,SAAS,GAAGD,YAAY,CAAA;AAC1B,SAAC,MAAM;UACLH,QAAQ,IAAIM,OAAO,CAAC7D,WAAW,CAAA;AACjC,SAAA;AACF,OAAA;AACA,MAAA,IAAI0D,YAAY,IAAI,CAAC,IAAI,CAACvG,IAAI,EAAE;AAC9BsG,QAAAA,SAAS,GAAGX,UAAU,GAAGO,cAAc,GAAGG,QAAQ,CAAA;AAClD,QAAA,IAAI,IAAI,CAACgB,SAAS,KAAK,KAAK,EAAE;AAC5Bf,UAAAA,SAAS,GAAG,IAAI,CAACvH,KAAK,GAAGuH,SAAS,GAAGF,QAAQ,CAAA;AAC/C,SAAA;QACArC,GAAG,CAAC2B,SAAS,GAAGa,YAAY,CAAA;AAC5BxC,QAAAA,GAAG,CAACkD,QAAQ,CACVX,SAAS,EACTT,aAAa,EACbO,QAAQ,EACRL,YAAY,GAAG,IAAI,CAACmB,UACtB,CAAC,CAAA;AACH,OAAA;AACArB,MAAAA,aAAa,IAAIE,YAAY,CAAA;AAC/B,KAAA;IACAhC,GAAG,CAAC2B,SAAS,GAAGD,YAAY,CAAA;AAC5B;AACA;AACA,IAAA,IAAI,CAAC6B,aAAa,CAACvD,GAAG,CAAC,CAAA;AACzB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEwD,YAAYA,CACVC,KAAa,EACb/C,SAAuC,EACvCgD,YAAgC,EAChCC,aAAmE,EACnE;AACA,IAAA,MAAMC,SAAS,GAAGC,KAAK,CAACC,YAAY,CAACpD,SAAS,CAAC;AAC7CqD,MAAAA,eAAe,GAAG,IAAI,CAAC7C,mBAAmB,CAACR,SAAS,CAAC;MACrDsD,MAAM,GAAGN,YAAY,GAAGD,KAAK;MAC7BQ,cAAc,GACZP,YAAY,IACZK,eAAe,KAAK,IAAI,CAAC7C,mBAAmB,CAACyC,aAAa,CAAC;AAC7DO,MAAAA,cAAc,GAAGxD,SAAS,CAACd,QAAQ,GAAG,IAAI,CAACuE,eAAe,CAAA;AAC5D,IAAA,IAAInJ,KAAyB,EAC3BoJ,WAA+B,EAC/BC,aAAiC,EACjCvF,WAA+B,CAAA;IAEjC,IAAI4E,YAAY,IAAIE,SAAS,CAACF,YAAY,CAAC,KAAKY,SAAS,EAAE;AACzDD,MAAAA,aAAa,GAAGT,SAAS,CAACF,YAAY,CAAC,CAAA;AACzC,KAAA;AACA,IAAA,IAAIE,SAAS,CAACH,KAAK,CAAC,KAAKa,SAAS,EAAE;AAClCxF,MAAAA,WAAW,GAAG9D,KAAK,GAAG4I,SAAS,CAACH,KAAK,CAAC,CAAA;AACxC,KAAA;IACA,IAAIQ,cAAc,IAAIL,SAAS,CAACI,MAAM,CAAC,KAAKM,SAAS,EAAE;AACrDF,MAAAA,WAAW,GAAGR,SAAS,CAACI,MAAM,CAAC,CAAA;MAC/BlF,WAAW,GAAGsF,WAAW,GAAGC,aAAc,CAAA;AAC5C,KAAA;IACA,IACErJ,KAAK,KAAKsJ,SAAS,IACnBD,aAAa,KAAKC,SAAS,IAC3BF,WAAW,KAAKE,SAAS,EACzB;AACA,MAAA,MAAMtE,GAAG,GAAGnF,mBAAmB,EAAG,CAAA;AAClC;MACA,IAAI,CAACqF,cAAc,CAACF,GAAG,EAAEU,SAAS,EAAE,IAAI,CAAC,CAAA;MACzC,IAAI1F,KAAK,KAAKsJ,SAAS,EAAE;QACvBxF,WAAW,GAAG9D,KAAK,GAAGgF,GAAG,CAACuE,WAAW,CAACd,KAAK,CAAC,CAACzI,KAAK,CAAA;AAClD4I,QAAAA,SAAS,CAACH,KAAK,CAAC,GAAGzI,KAAK,CAAA;AAC1B,OAAA;AACA,MAAA,IAAIqJ,aAAa,KAAKC,SAAS,IAAIL,cAAc,IAAIP,YAAY,EAAE;QACjEW,aAAa,GAAGrE,GAAG,CAACuE,WAAW,CAACb,YAAY,CAAC,CAAC1I,KAAK,CAAA;AACnD4I,QAAAA,SAAS,CAACF,YAAY,CAAC,GAAGW,aAAa,CAAA;AACzC,OAAA;AACA,MAAA,IAAIJ,cAAc,IAAIG,WAAW,KAAKE,SAAS,EAAE;AAC/C;QACAF,WAAW,GAAGpE,GAAG,CAACuE,WAAW,CAACP,MAAM,CAAC,CAAChJ,KAAK,CAAA;AAC3C4I,QAAAA,SAAS,CAACI,MAAM,CAAC,GAAGI,WAAW,CAAA;AAC/B;QACAtF,WAAW,GAAGsF,WAAW,GAAGC,aAAc,CAAA;AAC5C,OAAA;AACF,KAAA;IACA,OAAO;MACLrJ,KAAK,EAAEA,KAAK,GAAGkJ,cAAc;MAC7BpF,WAAW,EAAEA,WAAW,GAAIoF,cAAAA;KAC7B,CAAA;AACH,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEM,EAAAA,eAAeA,CAACxG,IAAY,EAAEyF,KAAa,EAAU;IACnD,OAAO,IAAI,CAACf,oBAAoB,CAAC1E,IAAI,EAAEyF,KAAK,EAAE,UAAU,CAAC,CAAA;AAC3D,GAAA;;AAEA;AACF;AACA;AACA;EACEgB,WAAWA,CAACzF,SAAiB,EAAE;AAC7B,IAAA,MAAM0F,QAAQ,GAAG,IAAI,CAACC,YAAY,CAAC3F,SAAS,CAAC,CAAA;AAC7C,IAAA,IAAI,IAAI,CAAC4F,WAAW,KAAK,CAAC,EAAE;AAC1BF,MAAAA,QAAQ,CAAC1J,KAAK,IAAI,IAAI,CAAC6J,sBAAsB,EAAE,CAAA;AACjD,KAAA;AACA,IAAA,IAAIH,QAAQ,CAAC1J,KAAK,GAAG,CAAC,EAAE;MACtB0J,QAAQ,CAAC1J,KAAK,GAAG,CAAC,CAAA;AACpB,KAAA;AACA,IAAA,OAAO0J,QAAQ,CAAA;AACjB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEC,YAAYA,CAAC3F,SAAiB,EAAE;IAC9B,IAAIhE,KAAK,GAAG,CAAC;MACX8J,YAAgC;MAChCC,YAAsC,CAAA;AAExC,IAAA,MAAMC,OAAO,GAAG,IAAI,CAACC,QAAQ,KAAKC,KAAK;MACrCjJ,IAAI,GAAG,IAAI,CAACA,IAAI;AAChB+B,MAAAA,IAAI,GAAG,IAAI,CAACpB,UAAU,CAACoC,SAAS,CAAC;MACjCmG,OAAO,GAAGnH,IAAI,CAACK,MAAM;AACrB+G,MAAAA,UAAU,GAAG,IAAIC,KAAK,CAAeF,OAAO,CAAC,CAAA;AAE/C,IAAA,IAAI,CAACxG,YAAY,CAACK,SAAS,CAAC,GAAGoG,UAAU,CAAA;IACzC,KAAK,IAAIjH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgH,OAAO,EAAEhH,CAAC,EAAE,EAAE;AAChC,MAAA,MAAMmH,QAAQ,GAAGtH,IAAI,CAACG,CAAC,CAAC,CAAA;AACxB4G,MAAAA,YAAY,GAAG,IAAI,CAACQ,eAAe,CAACD,QAAQ,EAAEtG,SAAS,EAAEb,CAAC,EAAE2G,YAAY,CAAC,CAAA;AACzEM,MAAAA,UAAU,CAACjH,CAAC,CAAC,GAAG4G,YAAY,CAAA;MAC5B/J,KAAK,IAAI+J,YAAY,CAACjG,WAAW,CAAA;AACjCgG,MAAAA,YAAY,GAAGQ,QAAQ,CAAA;AACzB,KAAA;AACA;AACA;IACAF,UAAU,CAACD,OAAO,CAAC,GAAG;MACpBpG,IAAI,EAAEgG,YAAY,GAAGA,YAAY,CAAChG,IAAI,GAAGgG,YAAY,CAAC/J,KAAK,GAAG,CAAC;AAC/DA,MAAAA,KAAK,EAAE,CAAC;AACR8D,MAAAA,WAAW,EAAE,CAAC;MACd7D,MAAM,EAAE,IAAI,CAAC2E,QAAQ;AACrB4F,MAAAA,MAAM,EAAE,CAAA;KACO,CAAA;AACjB,IAAA,IAAIvJ,IAAI,IAAIA,IAAI,CAACI,YAAY,EAAE;MAC7B,IAAIoJ,cAAc,GAAG,CAAC,CAAA;AACtB,MAAA,MAAMC,eAAe,GACnBzJ,IAAI,CAACI,YAAY,CAACJ,IAAI,CAACI,YAAY,CAACgC,MAAM,GAAG,CAAC,CAAC,CAACA,MAAM,CAAA;MACxD,QAAQ,IAAI,CAACb,SAAS;AACpB,QAAA,KAAKmI,IAAI;AACPF,UAAAA,cAAc,GAAGT,OAAO,GAAGU,eAAe,GAAG1K,KAAK,GAAG,CAAC,CAAA;AACtD,UAAA,MAAA;AACF,QAAA,KAAK8F,MAAM;AACT2E,UAAAA,cAAc,GAAG,CAACC,eAAe,GAAG1K,KAAK,IAAI,CAAC,CAAA;AAC9C,UAAA,MAAA;AACF,QAAA,KAAKkK,KAAK;AACRO,UAAAA,cAAc,GAAGT,OAAO,GAAG,CAAC,GAAGU,eAAe,GAAG1K,KAAK,CAAA;AACtD,UAAA,MAAA;AACF;AACF,OAAA;MACAyK,cAAc,IAAI,IAAI,CAACG,eAAe,IAAIZ,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AAC3D,MAAA,KACE,IAAI7G,CAAC,GAAG6G,OAAO,GAAGG,OAAO,GAAG,CAAC,GAAG,CAAC,EACjCH,OAAO,GAAG7G,CAAC,IAAI,CAAC,GAAGA,CAAC,GAAGgH,OAAO,EAC9BH,OAAO,GAAG7G,CAAC,EAAE,GAAGA,CAAC,EAAE,EACnB;AACA4G,QAAAA,YAAY,GAAGK,UAAU,CAACjH,CAAC,CAAC,CAAA;QAC5B,IAAIsH,cAAc,GAAGC,eAAe,EAAE;AACpCD,UAAAA,cAAc,IAAIC,eAAe,CAAA;AACnC,SAAC,MAAM,IAAID,cAAc,GAAG,CAAC,EAAE;AAC7BA,UAAAA,cAAc,IAAIC,eAAe,CAAA;AACnC,SAAA;AACA;AACA;AACA,QAAA,IAAI,CAACG,kBAAkB,CAACJ,cAAc,EAAEV,YAAY,CAAC,CAAA;QACrDU,cAAc,IAAIV,YAAY,CAACjG,WAAW,CAAA;AAC5C,OAAA;AACF,KAAA;IACA,OAAO;AAAE9D,MAAAA,KAAK,EAAEA,KAAK;AAAE8K,MAAAA,WAAW,EAAE,CAAA;KAAG,CAAA;AACzC,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACED,EAAAA,kBAAkBA,CAACJ,cAAsB,EAAEV,YAA0B,EAAE;IACrE,MAAMgB,cAAc,GAAGN,cAAc,GAAGV,YAAY,CAACjG,WAAW,GAAG,CAAC;MAClE7C,IAAI,GAAG,IAAI,CAACA,IAAK,CAAA;;AAEnB;AACA,IAAA,MAAM+J,IAAI,GAAGC,cAAc,CAAChK,IAAI,CAACA,IAAI,EAAE8J,cAAc,EAAE9J,IAAI,CAACI,YAAY,CAAE,CAAA;IAC1E0I,YAAY,CAACjC,UAAU,GAAGkD,IAAI,CAACE,CAAC,GAAGjK,IAAI,CAACkK,UAAU,CAACD,CAAC,CAAA;IACpDnB,YAAY,CAAChC,SAAS,GAAGiD,IAAI,CAACI,CAAC,GAAGnK,IAAI,CAACkK,UAAU,CAACC,CAAC,CAAA;AACnDrB,IAAAA,YAAY,CAAC9B,KAAK,GAAG+C,IAAI,CAAC/C,KAAK,IAAI,IAAI,CAACgC,QAAQ,KAAKC,KAAK,GAAGmB,IAAI,CAACC,EAAE,GAAG,CAAC,CAAC,CAAA;AAC3E,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEf,eAAeA,CACbD,QAAgB,EAChBtG,SAAiB,EACjBK,SAAiB,EACjByF,YAAqB,EACrByB,QAAkB,EACJ;IACd,MAAMC,KAAK,GAAG,IAAI,CAACC,2BAA2B,CAACzH,SAAS,EAAEK,SAAS,CAAC;AAClEqH,MAAAA,SAAS,GAAG5B,YAAY,GACpB,IAAI,CAAC2B,2BAA2B,CAACzH,SAAS,EAAEK,SAAS,GAAG,CAAC,CAAC,GAC1D,EAAE;AACN2G,MAAAA,IAAI,GAAG,IAAI,CAACxC,YAAY,CAAC8B,QAAQ,EAAEkB,KAAK,EAAE1B,YAAY,EAAE4B,SAAS,CAAC,CAAA;AACpE,IAAA,IAAI5H,WAAW,GAAGkH,IAAI,CAAClH,WAAW;MAChC9D,KAAK,GAAGgL,IAAI,CAAChL,KAAK;MAClB4J,WAAW,CAAA;AAEb,IAAA,IAAI,IAAI,CAACA,WAAW,KAAK,CAAC,EAAE;AAC1BA,MAAAA,WAAW,GAAG,IAAI,CAACC,sBAAsB,EAAE,CAAA;AAC3C7J,MAAAA,KAAK,IAAI4J,WAAW,CAAA;AACpB9F,MAAAA,WAAW,IAAI8F,WAAW,CAAA;AAC5B,KAAA;AAEA,IAAA,MAAM+B,GAAiB,GAAG;MACxB3L,KAAK;AACL+D,MAAAA,IAAI,EAAE,CAAC;MACP9D,MAAM,EAAEuL,KAAK,CAAC5G,QAAQ;MACtBd,WAAW;MACX0G,MAAM,EAAEgB,KAAK,CAAChB,MAAAA;KACf,CAAA;AACD,IAAA,IAAInG,SAAS,GAAG,CAAC,IAAI,CAACkH,QAAQ,EAAE;AAC9B,MAAA,MAAMK,WAAW,GAAG,IAAI,CAACjI,YAAY,CAACK,SAAS,CAAC,CAACK,SAAS,GAAG,CAAC,CAAC,CAAA;AAC/DsH,MAAAA,GAAG,CAAC5H,IAAI,GACN6H,WAAW,CAAC7H,IAAI,GAAG6H,WAAW,CAAC5L,KAAK,GAAGgL,IAAI,CAAClH,WAAW,GAAGkH,IAAI,CAAChL,KAAK,CAAA;AACxE,KAAA;AACA,IAAA,OAAO2L,GAAG,CAAA;AACZ,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACE1E,eAAeA,CAACjD,SAAiB,EAAU;AACzC,IAAA,IAAI,IAAI,CAAC6H,aAAa,CAAC7H,SAAS,CAAC,EAAE;AACjC,MAAA,OAAO,IAAI,CAAC6H,aAAa,CAAC7H,SAAS,CAAC,CAAA;AACtC,KAAA;;AAEA;AACA;IACA,IAAI8H,SAAS,GAAG,IAAI,CAACtC,eAAe,CAACxF,SAAS,EAAE,CAAC,CAAC,CAAA;IAClD,KAAK,IAAIb,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAG,IAAI,CAACxB,UAAU,CAACoC,SAAS,CAAC,CAACX,MAAM,EAAEF,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;AACrE2I,MAAAA,SAAS,GAAGT,IAAI,CAACU,GAAG,CAAC,IAAI,CAACvC,eAAe,CAACxF,SAAS,EAAEb,CAAC,CAAC,EAAE2I,SAAS,CAAC,CAAA;AACrE,KAAA;AAEA,IAAA,OAAQ,IAAI,CAACD,aAAa,CAAC7H,SAAS,CAAC,GACnC8H,SAAS,GAAG,IAAI,CAAC3D,UAAU,GAAG,IAAI,CAAC6D,aAAa,CAAA;AACpD,GAAA;;AAEA;AACF;AACA;AACEzJ,EAAAA,cAAcA,GAAG;AACf,IAAA,IAAI4F,UAAU;AACZlI,MAAAA,MAAM,GAAG,CAAC,CAAA;AACZ,IAAA,KAAK,IAAIkD,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAG,IAAI,CAACxB,UAAU,CAACyB,MAAM,EAAEF,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;AAC1DgF,MAAAA,UAAU,GAAG,IAAI,CAAClB,eAAe,CAAC9D,CAAC,CAAC,CAAA;AACpClD,MAAAA,MAAM,IAAIkD,CAAC,KAAKC,GAAG,GAAG,CAAC,GAAG+E,UAAU,GAAG,IAAI,CAACA,UAAU,GAAGA,UAAU,CAAA;AACrE,KAAA;AACA,IAAA,OAAOlI,MAAM,CAAA;AACf,GAAA;;AAEA;AACF;AACA;AACA;AACE4G,EAAAA,cAAcA,GAAW;AACvB,IAAA,OAAO,IAAI,CAACyB,SAAS,KAAK,KAAK,GAAG,CAAC,IAAI,CAACtI,KAAK,GAAG,CAAC,GAAG,IAAI,CAACA,KAAK,GAAG,CAAC,CAAA;AACpE,GAAA;;AAEA;AACF;AACA;AACA;AACE+G,EAAAA,aAAaA,GAAW;AACtB,IAAA,OAAO,CAAC,IAAI,CAAC9G,MAAM,GAAG,CAAC,CAAA;AACzB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACEgM,EAAAA,iBAAiBA,CACfjH,GAA6B,EAC7BqB,MAAiC,EACjC;IACArB,GAAG,CAAC4C,IAAI,EAAE,CAAA;IACV,IAAIsE,WAAW,GAAG,CAAC,CAAA;AACnB,IAAA,MAAMnI,IAAI,GAAG,IAAI,CAAC8C,cAAc,EAAE;AAChCP,MAAAA,GAAG,GAAG,IAAI,CAACS,aAAa,EAAE,CAAA;AAC5B,IAAA,KAAK,IAAI5D,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAG,IAAI,CAACxB,UAAU,CAACyB,MAAM,EAAEF,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;AAC1D,MAAA,MAAM6D,YAAY,GAAG,IAAI,CAACC,eAAe,CAAC9D,CAAC,CAAC;AAC1C2I,QAAAA,SAAS,GAAG9E,YAAY,GAAG,IAAI,CAACmB,UAAU;AAC1CvB,QAAAA,UAAU,GAAG,IAAI,CAACQ,kBAAkB,CAACjE,CAAC,CAAC,CAAA;MACzC,IAAI,CAACiD,eAAe,CAClBC,MAAM,EACNrB,GAAG,EACH,IAAI,CAACpD,UAAU,CAACuB,CAAC,CAAC,EAClBY,IAAI,GAAG6C,UAAU,EACjBN,GAAG,GAAG4F,WAAW,GAAGJ,SAAS,EAC7B3I,CACF,CAAC,CAAA;AACD+I,MAAAA,WAAW,IAAIlF,YAAY,CAAA;AAC7B,KAAA;IACAhC,GAAG,CAACqD,OAAO,EAAE,CAAA;AACf,GAAA;;AAEA;AACF;AACA;AACA;EACE5C,eAAeA,CAACT,GAA6B,EAAE;AAC7C,IAAA,IAAI,CAAC,IAAI,CAACmH,IAAI,IAAI,CAAC,IAAI,CAAC1F,QAAQ,CAAC2F,IAAI,CAAC,EAAE;AACtC,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,CAACH,iBAAiB,CAACjH,GAAG,EAAE,UAAU,CAAC,CAAA;AACzC,GAAA;;AAEA;AACF;AACA;AACA;EACEQ,iBAAiBA,CAACR,GAA6B,EAAE;AAC/C,IAAA,IAAI,CAAC,CAAC,IAAI,CAACqH,MAAM,IAAI,IAAI,CAACC,WAAW,KAAK,CAAC,KAAK,IAAI,CAACC,aAAa,EAAE,EAAE;AACpE,MAAA,OAAA;AACF,KAAA;IAEA,IAAI,IAAI,CAACC,MAAM,IAAI,CAAC,IAAI,CAACA,MAAM,CAACC,YAAY,EAAE;AAC5C,MAAA,IAAI,CAAClE,aAAa,CAACvD,GAAG,CAAC,CAAA;AACzB,KAAA;IAEAA,GAAG,CAAC4C,IAAI,EAAE,CAAA;IACV,IAAI,CAAC8E,YAAY,CAAC1H,GAAG,EAAE,IAAI,CAAC2H,eAAe,CAAC,CAAA;IAC5C3H,GAAG,CAAC4H,SAAS,EAAE,CAAA;AACf,IAAA,IAAI,CAACX,iBAAiB,CAACjH,GAAG,EAAE,YAAY,CAAC,CAAA;IACzCA,GAAG,CAAC6H,SAAS,EAAE,CAAA;IACf7H,GAAG,CAACqD,OAAO,EAAE,CAAA;AACf,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACE9B,EAAAA,YAAYA,CACVF,MAAiC,EACjCrB,GAA6B,EAC7BhC,IAAgB,EAChBe,IAAY,EACZuC,GAAW,EACXtC,SAAiB,EACjB;AACA,IAAA,MAAMmE,UAAU,GAAG,IAAI,CAAClB,eAAe,CAACjD,SAAS,CAAC;MAChD8I,SAAS,GAAG,IAAI,CAACtK,SAAS,CAACC,QAAQ,CAACC,OAAO,CAAC;MAC5CzB,IAAI,GAAG,IAAI,CAACA,IAAI;AAChB8L,MAAAA,QAAQ,GACN,CAACD,SAAS,IACV,IAAI,CAAClD,WAAW,KAAK,CAAC,IACtB,IAAI,CAAC2C,aAAa,CAACvI,SAAS,CAAC,IAC7B,CAAC/C,IAAI;AACP+L,MAAAA,KAAK,GAAG,IAAI,CAAC1E,SAAS,KAAK,KAAK;MAChC2E,IAAI,GAAG,IAAI,CAAC3E,SAAS,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AACxC;AACA;MACA4E,gBAAgB,GAAGlI,GAAG,CAACsD,SAAS,CAAA;AAElC,IAAA,IAAI6E,WAAW;MACbC,SAAS;AACTC,MAAAA,aAAa,GAAG,EAAE;MAClB1F,OAAO;AACPN,MAAAA,QAAQ,GAAG,CAAC;MACZiG,YAAY;MACZC,WAAW,CAAA;IAEbvI,GAAG,CAAC4C,IAAI,EAAE,CAAA;AACV,IAAA,IAAIsF,gBAAgB,KAAK,IAAI,CAAC5E,SAAS,EAAE;AACvCtD,MAAAA,GAAG,CAAClF,MAAM,CAAC0N,YAAY,CAAC,KAAK,EAAER,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAA;AACrDhI,MAAAA,GAAG,CAACsD,SAAS,GAAG0E,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;AACrChI,MAAAA,GAAG,CAACxC,SAAS,GAAGwK,KAAK,GAAGrC,IAAI,GAAGT,KAAK,CAAA;AACtC,KAAA;IACA5D,GAAG,IAAK6B,UAAU,GAAG,IAAI,CAACC,iBAAiB,GAAI,IAAI,CAACD,UAAU,CAAA;AAC9D,IAAA,IAAI4E,QAAQ,EAAE;AACZ;AACA;MACA,IAAI,CAACU,WAAW,CAACpH,MAAM,EAAErB,GAAG,EAAEhB,SAAS,EAAE,CAAC,EAAEhB,IAAI,CAAC0K,IAAI,CAAC,EAAE,CAAC,EAAE3J,IAAI,EAAEuC,GAAG,CAAC,CAAA;MACrEtB,GAAG,CAACqD,OAAO,EAAE,CAAA;AACb,MAAA,OAAA;AACF,KAAA;AACA,IAAA,KAAK,IAAIlF,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAGJ,IAAI,CAACK,MAAM,GAAG,CAAC,EAAEF,CAAC,IAAIC,GAAG,EAAED,CAAC,EAAE,EAAE;MACpDmK,YAAY,GAAGnK,CAAC,KAAKC,GAAG,IAAI,IAAI,CAACwG,WAAW,IAAI3I,IAAI,CAAA;AACpDoM,MAAAA,aAAa,IAAIrK,IAAI,CAACG,CAAC,CAAC,CAAA;MACxBwE,OAAO,GAAG,IAAI,CAAChE,YAAY,CAACK,SAAS,CAAC,CAACb,CAAC,CAA2B,CAAA;MACnE,IAAIkE,QAAQ,KAAK,CAAC,EAAE;QAClBtD,IAAI,IAAIkJ,IAAI,IAAItF,OAAO,CAAC7D,WAAW,GAAG6D,OAAO,CAAC3H,KAAK,CAAC,CAAA;QACpDqH,QAAQ,IAAIM,OAAO,CAAC3H,KAAK,CAAA;AAC3B,OAAC,MAAM;QACLqH,QAAQ,IAAIM,OAAO,CAAC7D,WAAW,CAAA;AACjC,OAAA;AACA,MAAA,IAAIgJ,SAAS,IAAI,CAACQ,YAAY,EAAE;QAC9B,IAAI,IAAI,CAAC1J,cAAc,CAACC,IAAI,CAACb,IAAI,CAACG,CAAC,CAAC,CAAC,EAAE;AACrCmK,UAAAA,YAAY,GAAG,IAAI,CAAA;AACrB,SAAA;AACF,OAAA;MACA,IAAI,CAACA,YAAY,EAAE;AACjB;QACAH,WAAW,GACTA,WAAW,IAAI,IAAI,CAAC1B,2BAA2B,CAACzH,SAAS,EAAEb,CAAC,CAAC,CAAA;QAC/DiK,SAAS,GAAG,IAAI,CAAC3B,2BAA2B,CAACzH,SAAS,EAAEb,CAAC,GAAG,CAAC,CAAC,CAAA;QAC9DmK,YAAY,GAAGK,eAAe,CAACR,WAAW,EAAEC,SAAS,EAAE,KAAK,CAAC,CAAA;AAC/D,OAAA;AACA,MAAA,IAAIE,YAAY,EAAE;AAChB,QAAA,IAAIrM,IAAI,EAAE;UACR+D,GAAG,CAAC4C,IAAI,EAAE,CAAA;UACV5C,GAAG,CAAC6C,SAAS,CAACF,OAAO,CAACG,UAAU,EAAEH,OAAO,CAACI,SAAS,CAAC,CAAA;AACpD/C,UAAAA,GAAG,CAACgD,MAAM,CAACL,OAAO,CAACM,KAAK,CAAC,CAAA;AACzB,UAAA,IAAI,CAACwF,WAAW,CACdpH,MAAM,EACNrB,GAAG,EACHhB,SAAS,EACTb,CAAC,EACDkK,aAAa,EACb,CAAChG,QAAQ,GAAG,CAAC,EACb,CACF,CAAC,CAAA;UACDrC,GAAG,CAACqD,OAAO,EAAE,CAAA;AACf,SAAC,MAAM;AACLkF,UAAAA,WAAW,GAAGxJ,IAAI,CAAA;AAClB,UAAA,IAAI,CAAC0J,WAAW,CACdpH,MAAM,EACNrB,GAAG,EACHhB,SAAS,EACTb,CAAC,EACDkK,aAAa,EACbE,WAAW,EACXjH,GACF,CAAC,CAAA;AACH,SAAA;AACA+G,QAAAA,aAAa,GAAG,EAAE,CAAA;AAClBF,QAAAA,WAAW,GAAGC,SAAS,CAAA;QACvBrJ,IAAI,IAAIkJ,IAAI,GAAG5F,QAAQ,CAAA;AACvBA,QAAAA,QAAQ,GAAG,CAAC,CAAA;AACd,OAAA;AACF,KAAA;IACArC,GAAG,CAACqD,OAAO,EAAE,CAAA;AACf,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEuF,kCAAkCA,CAACC,MAAe,EAAE;AAClD,IAAA,MAAMC,OAAO,GAAG/N,mBAAmB,EAAE;AACnC;AACAC,MAAAA,KAAK,GAAG,IAAI,CAACA,KAAK,GAAG,IAAI,CAACsM,WAAW;AACrCrM,MAAAA,MAAM,GAAG,IAAI,CAACA,MAAM,GAAG,IAAI,CAACqM,WAAW;AACvCyB,MAAAA,IAAI,GAAGD,OAAO,CAAC5N,UAAU,CAAC,IAAI,CAAE,CAAA;IAClC4N,OAAO,CAAC9N,KAAK,GAAGA,KAAK,CAAA;IACrB8N,OAAO,CAAC7N,MAAM,GAAGA,MAAM,CAAA;IACvB8N,IAAI,CAACnB,SAAS,EAAE,CAAA;AAChBmB,IAAAA,IAAI,CAACC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACjBD,IAAAA,IAAI,CAACE,MAAM,CAACjO,KAAK,EAAE,CAAC,CAAC,CAAA;AACrB+N,IAAAA,IAAI,CAACE,MAAM,CAACjO,KAAK,EAAEC,MAAM,CAAC,CAAA;AAC1B8N,IAAAA,IAAI,CAACE,MAAM,CAAC,CAAC,EAAEhO,MAAM,CAAC,CAAA;IACtB8N,IAAI,CAAClB,SAAS,EAAE,CAAA;IAChBkB,IAAI,CAAClG,SAAS,CAAC7H,KAAK,GAAG,CAAC,EAAEC,MAAM,GAAG,CAAC,CAAC,CAAA;IACrC8N,IAAI,CAACpH,SAAS,GAAGkH,MAAM,CAACK,MAAM,CAACH,IAAI,CAAE,CAAA;AACrC,IAAA,IAAI,CAACI,8BAA8B,CAACJ,IAAI,EAAEF,MAAM,CAAC,CAAA;IACjDE,IAAI,CAAC5B,IAAI,EAAE,CAAA;AACX,IAAA,OAAO4B,IAAI,CAACK,aAAa,CAACN,OAAO,EAAE,WAAW,CAAC,CAAA;AACjD,GAAA;AAEAO,EAAAA,YAAYA,CACVrJ,GAA6B,EAC7BsJ,QAAqB,EACrBT,MAAwB,EACc;IACtC,IAAIU,OAAe,EAAEC,OAAe,CAAA;AACpC,IAAA,IAAIC,QAAQ,CAACZ,MAAM,CAAC,EAAE;AACpB,MAAA,IACGA,MAAM,CAAwBa,aAAa,KAAK,YAAY,IAC5Db,MAAM,CAAwBc,iBAAiB,IAC/Cd,MAAM,CAAae,gBAAgB,EACpC;AACA;AACA;AACA;AACA;AACAL,QAAAA,OAAO,GAAG,CAAC,IAAI,CAACvO,KAAK,GAAG,CAAC,CAAA;AACzBwO,QAAAA,OAAO,GAAG,CAAC,IAAI,CAACvO,MAAM,GAAG,CAAC,CAAA;AAC1B+E,QAAAA,GAAG,CAAC6C,SAAS,CAAC0G,OAAO,EAAEC,OAAO,CAAC,CAAA;QAC/BxJ,GAAG,CAACsJ,QAAQ,CAAC,GAAG,IAAI,CAACV,kCAAkC,CAACC,MAAM,CAAC,CAAA;QAC/D,OAAO;UAAEU,OAAO;AAAEC,UAAAA,OAAAA;SAAS,CAAA;AAC7B,OAAC,MAAM;AACL;QACAxJ,GAAG,CAACsJ,QAAQ,CAAC,GAAGT,MAAM,CAACK,MAAM,CAAClJ,GAAG,CAAE,CAAA;AACnC,QAAA,OAAO,IAAI,CAACmJ,8BAA8B,CAACnJ,GAAG,EAAE6I,MAAM,CAAC,CAAA;AACzD,OAAA;AACF,KAAC,MAAM;AACL;AACA7I,MAAAA,GAAG,CAACsJ,QAAQ,CAAC,GAAGT,MAAM,CAAA;AACxB,KAAA;IACA,OAAO;AAAEU,MAAAA,OAAO,EAAE,CAAC;AAAEC,MAAAA,OAAO,EAAE,CAAA;KAAG,CAAA;AACnC,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACEK,EAAAA,gBAAgBA,CACd7J,GAA6B,EAAA8J,IAAA,EAK7B;IAAA,IAJA;MACEzC,MAAM;AACNC,MAAAA,WAAAA;AAC4D,KAAC,GAAAwC,IAAA,CAAA;IAE/D9J,GAAG,CAAC+J,SAAS,GAAGzC,WAAW,CAAA;AAC3BtH,IAAAA,GAAG,CAACgK,OAAO,GAAG,IAAI,CAACC,aAAa,CAAA;AAChCjK,IAAAA,GAAG,CAACkK,cAAc,GAAG,IAAI,CAACC,gBAAgB,CAAA;AAC1CnK,IAAAA,GAAG,CAACoK,QAAQ,GAAG,IAAI,CAACC,cAAc,CAAA;AAClCrK,IAAAA,GAAG,CAACsK,UAAU,GAAG,IAAI,CAACC,gBAAgB,CAAA;IACtC,OAAO,IAAI,CAAClB,YAAY,CAACrJ,GAAG,EAAE,aAAa,EAAEqH,MAAO,CAAC,CAAA;AACvD,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACEmD,EAAAA,cAAcA,CAACxK,GAA6B,EAAAyK,KAAA,EAAgC;IAAA,IAA9B;AAAEtD,MAAAA,IAAAA;AAAyB,KAAC,GAAAsD,KAAA,CAAA;IACxE,OAAO,IAAI,CAACpB,YAAY,CAACrJ,GAAG,EAAE,WAAW,EAAEmH,IAAK,CAAC,CAAA;AACnD,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEsB,EAAAA,WAAWA,CACTpH,MAAiC,EACjCrB,GAA6B,EAC7BhB,SAAiB,EACjBK,SAAiB,EACjBoE,KAAa,EACb1E,IAAY,EACZuC,GAAW,EACX;IACA,MAAMoJ,IAAI,GAAG,IAAI,CAACC,oBAAoB,CAAC3L,SAAS,EAAEK,SAAS,CAAC;MAC1DuL,QAAQ,GAAG,IAAI,CAACnE,2BAA2B,CAACzH,SAAS,EAAEK,SAAS,CAAC;AACjEwL,MAAAA,UAAU,GAAGxJ,MAAM,KAAK,UAAU,IAAIuJ,QAAQ,CAACzD,IAAI;MACnD2D,YAAY,GACVzJ,MAAM,KAAK,YAAY,IAAIuJ,QAAQ,CAACvD,MAAM,IAAIuD,QAAQ,CAACtD,WAAW,CAAA;AAEtE,IAAA,IAAI,CAACwD,YAAY,IAAI,CAACD,UAAU,EAAE;AAChC,MAAA,OAAA;AACF,KAAA;IACA7K,GAAG,CAAC4C,IAAI,EAAE,CAAA;IAEV5C,GAAG,CAACiB,IAAI,GAAG,IAAI,CAACC,mBAAmB,CAAC0J,QAAQ,CAAC,CAAA;IAE7C,IAAIF,IAAI,CAAClJ,mBAAmB,EAAE;AAC5B,MAAA,IAAI,CAAC+B,aAAa,CAACvD,GAAG,CAAC,CAAA;AACzB,KAAA;IACA,IAAI0K,IAAI,CAAClF,MAAM,EAAE;MACflE,GAAG,IAAIoJ,IAAI,CAAClF,MAAM,CAAA;AACpB,KAAA;AAEA,IAAA,IAAIqF,UAAU,EAAE;MACd,MAAME,WAAW,GAAG,IAAI,CAACP,cAAc,CAACxK,GAAG,EAAE4K,QAAQ,CAAC,CAAA;AACtD5K,MAAAA,GAAG,CAACgL,QAAQ,CACVvH,KAAK,EACL1E,IAAI,GAAGgM,WAAW,CAACxB,OAAO,EAC1BjI,GAAG,GAAGyJ,WAAW,CAACvB,OACpB,CAAC,CAAA;AACH,KAAA;AAEA,IAAA,IAAIsB,YAAY,EAAE;MAChB,MAAMG,aAAa,GAAG,IAAI,CAACpB,gBAAgB,CAAC7J,GAAG,EAAE4K,QAAQ,CAAC,CAAA;AAC1D5K,MAAAA,GAAG,CAACkL,UAAU,CACZzH,KAAK,EACL1E,IAAI,GAAGkM,aAAa,CAAC1B,OAAO,EAC5BjI,GAAG,GAAG2J,aAAa,CAACzB,OACtB,CAAC,CAAA;AACH,KAAA;IAEAxJ,GAAG,CAACqD,OAAO,EAAE,CAAA;AACf,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACE8H,EAAAA,cAAcA,CAACC,KAAa,EAAEC,GAAW,EAAE;IACzC,IAAI,CAACC,UAAU,CAACF,KAAK,EAAEC,GAAG,EAAE,IAAI,CAACE,WAAW,CAAC,CAAA;AAC/C,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACEC,EAAAA,YAAYA,CAACJ,KAAa,EAAEC,GAAW,EAAE;IACvC,IAAI,CAACC,UAAU,CAACF,KAAK,EAAEC,GAAG,EAAE,IAAI,CAACI,SAAS,CAAC,CAAA;AAC7C,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACYH,EAAAA,UAAUA,CAClBF,KAAa,EACbC,GAAW,EACXK,MAGC,EACD;IACA,MAAMC,GAAG,GAAG,IAAI,CAACzM,mBAAmB,CAACkM,KAAK,EAAE,IAAI,CAAC;AAC/CxL,MAAAA,QAAQ,GAAG,IAAI,CAAC8C,oBAAoB,CAClCiJ,GAAG,CAAC3M,SAAS,EACb2M,GAAG,CAACtM,SAAS,EACb,UACF,CAAC;AACDuM,MAAAA,EAAE,GAAG,IAAI,CAAClJ,oBAAoB,CAACiJ,GAAG,CAAC3M,SAAS,EAAE2M,GAAG,CAACtM,SAAS,EAAE,QAAQ,CAAC;AACtEmH,MAAAA,KAAK,GAAG;AACN5G,QAAAA,QAAQ,EAAEA,QAAQ,GAAG8L,MAAM,CAACG,IAAI;AAChCrG,QAAAA,MAAM,EAAEoG,EAAE,GAAGhM,QAAQ,GAAG8L,MAAM,CAACI,QAAAA;OAChC,CAAA;IACH,IAAI,CAACC,kBAAkB,CAACvF,KAAK,EAAE4E,KAAK,EAAEC,GAAG,CAAC,CAAA;AAC5C,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEjJ,kBAAkBA,CAACpD,SAAiB,EAAU;AAC5C,IAAA,MAAM+K,SAAS,GAAG,IAAI,CAACxL,YAAY,CAACS,SAAS,CAAC;AAC5CgN,MAAAA,QAAQ,GAAG,IAAI,CAAChR,KAAK,GAAG+O,SAAS;MACjCvM,SAAS,GAAG,IAAI,CAACA,SAAS;MAC1B8F,SAAS,GAAG,IAAI,CAACA,SAAS;AAC1BhF,MAAAA,eAAe,GAAG,IAAI,CAACA,eAAe,CAACU,SAAS,CAAC,CAAA;IACnD,IAAI4C,UAAU,GAAG,CAAC,CAAA;IAClB,IACEpE,SAAS,KAAKE,OAAO,IACpBF,SAAS,KAAKyO,cAAc,IAAI,CAAC3N,eAAgB,IACjDd,SAAS,KAAK0O,aAAa,IAAI,CAAC5N,eAAgB,IAChDd,SAAS,KAAK2O,YAAY,IAAI,CAAC7N,eAAgB,EAChD;AACA,MAAA,OAAO,CAAC,CAAA;AACV,KAAA;IACA,IAAId,SAAS,KAAKsD,MAAM,EAAE;MACxBc,UAAU,GAAGoK,QAAQ,GAAG,CAAC,CAAA;AAC3B,KAAA;IACA,IAAIxO,SAAS,KAAK0H,KAAK,EAAE;AACvBtD,MAAAA,UAAU,GAAGoK,QAAQ,CAAA;AACvB,KAAA;IACA,IAAIxO,SAAS,KAAKyO,cAAc,EAAE;MAChCrK,UAAU,GAAGoK,QAAQ,GAAG,CAAC,CAAA;AAC3B,KAAA;IACA,IAAIxO,SAAS,KAAK0O,aAAa,EAAE;AAC/BtK,MAAAA,UAAU,GAAGoK,QAAQ,CAAA;AACvB,KAAA;IACA,IAAI1I,SAAS,KAAK,KAAK,EAAE;MACvB,IACE9F,SAAS,KAAK0H,KAAK,IACnB1H,SAAS,KAAKE,OAAO,IACrBF,SAAS,KAAK0O,aAAa,EAC3B;AACAtK,QAAAA,UAAU,GAAG,CAAC,CAAA;OACf,MAAM,IAAIpE,SAAS,KAAKmI,IAAI,IAAInI,SAAS,KAAK2O,YAAY,EAAE;QAC3DvK,UAAU,GAAG,CAACoK,QAAQ,CAAA;OACvB,MAAM,IAAIxO,SAAS,KAAKsD,MAAM,IAAItD,SAAS,KAAKyO,cAAc,EAAE;AAC/DrK,QAAAA,UAAU,GAAG,CAACoK,QAAQ,GAAG,CAAC,CAAA;AAC5B,OAAA;AACF,KAAA;AACA,IAAA,OAAOpK,UAAU,CAAA;AACnB,GAAA;;AAEA;AACF;AACA;AACE1E,EAAAA,WAAWA,GAAG;IACZ,IAAI,CAACkP,gBAAgB,GAAG,KAAK,CAAA;IAC7B,IAAI,CAACC,YAAY,GAAG,EAAE,CAAA;IACtB,IAAI,CAACxF,aAAa,GAAG,EAAE,CAAA;IACvB,IAAI,CAAClI,YAAY,GAAG,EAAE,CAAA;AACxB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEJ,YAAYA,CAACS,SAAiB,EAAU;IACtC,IAAI,IAAI,CAACqN,YAAY,CAACrN,SAAS,CAAC,KAAKsF,SAAS,EAAE;AAC9C,MAAA,OAAO,IAAI,CAAC+H,YAAY,CAACrN,SAAS,CAAC,CAAA;AACrC,KAAA;IAEA,MAAM;AAAEhE,MAAAA,KAAAA;AAAM,KAAC,GAAG,IAAI,CAACyJ,WAAW,CAACzF,SAAS,CAAC,CAAA;AAC7C,IAAA,IAAI,CAACqN,YAAY,CAACrN,SAAS,CAAC,GAAGhE,KAAK,CAAA;AACpC,IAAA,OAAOA,KAAK,CAAA;AACd,GAAA;AAEA6J,EAAAA,sBAAsBA,GAAG;AACvB,IAAA,IAAI,IAAI,CAACD,WAAW,KAAK,CAAC,EAAE;MAC1B,OAAQ,IAAI,CAAChF,QAAQ,GAAG,IAAI,CAACgF,WAAW,GAAI,IAAI,CAAA;AAClD,KAAA;AACA,IAAA,OAAO,CAAC,CAAA;AACV,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACElC,EAAAA,oBAAoBA,CAClB1D,SAAiB,EACjBK,SAAiB,EACjBiK,QAAW,EACF;AAAA,IAAA,IAAAgD,mBAAA,CAAA;IACT,MAAM5L,SAAS,GAAG,IAAI,CAACiK,oBAAoB,CAAC3L,SAAS,EAAEK,SAAS,CAAC,CAAA;AACjE,IAAA,OAAA,CAAAiN,mBAAA,GAAQ5L,SAAS,CAAC4I,QAAQ,CAAC,MAAA,IAAA,IAAAgD,mBAAA,KAAA,KAAA,CAAA,GAAAA,mBAAA,GAAI,IAAI,CAAChD,QAAQ,CAAC,CAAA;AAC/C,GAAA;;AAEA;AACF;AACA;AACA;AACElJ,EAAAA,qBAAqBA,CACnBJ,GAA6B,EAC7BuM,IAA8C,EAC9C;AACA,IAAA,IAAI,CAAC,IAAI,CAACA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC9K,QAAQ,CAAC8K,IAAI,CAAC,EAAE;AACvC,MAAA,OAAA;AACF,KAAA;AACA,IAAA,IAAIC,SAAS,GAAG,IAAI,CAACzK,aAAa,EAAE,CAAA;AACpC,IAAA,MAAMH,UAAU,GAAG,IAAI,CAACC,cAAc,EAAE;MACtC5F,IAAI,GAAG,IAAI,CAACA,IAAI;AAChB2I,MAAAA,WAAW,GAAG,IAAI,CAACC,sBAAsB,EAAE;AAC3C2E,MAAAA,OAAO,GAAG,IAAI,CAACiD,OAAO,CAACF,IAAI,CAAC,CAAA;AAE9B,IAAA,KAAK,IAAIpO,CAAC,GAAG,CAAC,EAAEC,GAAG,GAAG,IAAI,CAACxB,UAAU,CAACyB,MAAM,EAAEF,CAAC,GAAGC,GAAG,EAAED,CAAC,EAAE,EAAE;AAC1D,MAAA,MAAM6D,YAAY,GAAG,IAAI,CAACC,eAAe,CAAC9D,CAAC,CAAC,CAAA;AAC5C,MAAA,IAAI,CAAC,IAAI,CAACoO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC9K,QAAQ,CAAC8K,IAAI,EAAEpO,CAAC,CAAC,EAAE;AAC1CqO,QAAAA,SAAS,IAAIxK,YAAY,CAAA;AACzB,QAAA,SAAA;AACF,OAAA;AACA,MAAA,MAAMhE,IAAI,GAAG,IAAI,CAACpB,UAAU,CAACuB,CAAC,CAAC,CAAA;AAC/B,MAAA,MAAM2I,SAAS,GAAG9E,YAAY,GAAG,IAAI,CAACmB,UAAU,CAAA;AAChD,MAAA,MAAMhB,cAAc,GAAG,IAAI,CAACC,kBAAkB,CAACjE,CAAC,CAAC,CAAA;MACjD,IAAImE,QAAQ,GAAG,CAAC,CAAA;MAChB,IAAID,QAAQ,GAAG,CAAC,CAAA;MAChB,IAAIqK,cAAc,GAAG,IAAI,CAAChK,oBAAoB,CAACvE,CAAC,EAAE,CAAC,EAAEoO,IAAI,CAAC,CAAA;MAC1D,IAAII,QAAQ,GAAG,IAAI,CAACjK,oBAAoB,CAACvE,CAAC,EAAE,CAAC,EAAEiJ,IAAI,CAAC,CAAA;AACpD,MAAA,IAAIwF,iBAAiB,CAAA;AACrB,MAAA,IAAIC,WAAW,CAAA;MACf,MAAMvL,GAAG,GAAGkL,SAAS,GAAG1F,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC1D,iBAAiB,CAAC,CAAA;MAChE,IAAIyI,IAAI,GAAG,IAAI,CAACrH,eAAe,CAACrG,CAAC,EAAE,CAAC,CAAC,CAAA;MACrC,IAAIyN,EAAE,GAAG,IAAI,CAAClJ,oBAAoB,CAACvE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAA;AAClD,MAAA,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEwD,IAAI,GAAGlE,IAAI,CAACK,MAAM,EAAEK,CAAC,GAAGwD,IAAI,EAAExD,CAAC,EAAE,EAAE;QACjD,MAAMiE,OAAO,GAAG,IAAI,CAAChE,YAAY,CAACR,CAAC,CAAC,CAACO,CAAC,CAA2B,CAAA;QACjEkO,iBAAiB,GAAG,IAAI,CAAClK,oBAAoB,CAACvE,CAAC,EAAEO,CAAC,EAAE6N,IAAI,CAAC,CAAA;QACzDM,WAAW,GAAG,IAAI,CAACnK,oBAAoB,CAACvE,CAAC,EAAEO,CAAC,EAAE0I,IAAI,CAAC,CAAA;QACnD,MAAM0F,WAAW,GAAG,IAAI,CAACtI,eAAe,CAACrG,CAAC,EAAEO,CAAC,CAAC,CAAA;QAC9C,MAAMqO,SAAS,GAAG,IAAI,CAACrK,oBAAoB,CAACvE,CAAC,EAAEO,CAAC,EAAE,QAAQ,CAAC,CAAA;AAC3D,QAAA,IAAIzC,IAAI,IAAI2Q,iBAAiB,IAAIC,WAAW,EAAE;UAC5C7M,GAAG,CAAC4C,IAAI,EAAE,CAAA;AACV;UACA5C,GAAG,CAAC2B,SAAS,GAAGgL,QAAkB,CAAA;UAClC3M,GAAG,CAAC6C,SAAS,CAACF,OAAO,CAACG,UAAU,EAAEH,OAAO,CAACI,SAAS,CAAC,CAAA;AACpD/C,UAAAA,GAAG,CAACgD,MAAM,CAACL,OAAO,CAACM,KAAK,CAAC,CAAA;UACzBjD,GAAG,CAACkD,QAAQ,CACV,CAACP,OAAO,CAAC7D,WAAW,GAAG,CAAC,EACxB0K,OAAO,GAAGsD,WAAW,GAAGC,SAAS,EACjCpK,OAAO,CAAC7D,WAAW,EACnB,IAAI,CAACc,QAAQ,GAAG,EAClB,CAAC,CAAA;UACDI,GAAG,CAACqD,OAAO,EAAE,CAAA;SACd,MAAM,IACL,CAACuJ,iBAAiB,KAAKF,cAAc,IACnCG,WAAW,KAAKF,QAAQ,IACxBG,WAAW,KAAKjB,IAAI,IACpBkB,SAAS,KAAKnB,EAAE,KAClBvJ,QAAQ,GAAG,CAAC,EACZ;AACA,UAAA,IAAIE,SAAS,GAAGX,UAAU,GAAGO,cAAc,GAAGG,QAAQ,CAAA;AACtD,UAAA,IAAI,IAAI,CAACgB,SAAS,KAAK,KAAK,EAAE;AAC5Bf,YAAAA,SAAS,GAAG,IAAI,CAACvH,KAAK,GAAGuH,SAAS,GAAGF,QAAQ,CAAA;AAC/C,WAAA;UACA,IAAIqK,cAAc,IAAIC,QAAQ,EAAE;AAC9B;YACA3M,GAAG,CAAC2B,SAAS,GAAGgL,QAAkB,CAAA;YAClC3M,GAAG,CAACkD,QAAQ,CACVX,SAAS,EACTjB,GAAG,GAAGkI,OAAO,GAAGqC,IAAI,GAAGD,EAAE,EACzBvJ,QAAQ,EACR,IAAI,CAACzC,QAAQ,GAAG,EAClB,CAAC,CAAA;AACH,WAAA;UACA0C,QAAQ,GAAGK,OAAO,CAAC5D,IAAI,CAAA;UACvBsD,QAAQ,GAAGM,OAAO,CAAC3H,KAAK,CAAA;AACxB0R,UAAAA,cAAc,GAAGE,iBAAiB,CAAA;AAClCD,UAAAA,QAAQ,GAAGE,WAAW,CAAA;AACtBhB,UAAAA,IAAI,GAAGiB,WAAW,CAAA;AAClBlB,UAAAA,EAAE,GAAGmB,SAAS,CAAA;AAChB,SAAC,MAAM;UACL1K,QAAQ,IAAIM,OAAO,CAAC7D,WAAW,CAAA;AACjC,SAAA;AACF,OAAA;AACA,MAAA,IAAIyD,SAAS,GAAGX,UAAU,GAAGO,cAAc,GAAGG,QAAQ,CAAA;AACtD,MAAA,IAAI,IAAI,CAACgB,SAAS,KAAK,KAAK,EAAE;AAC5Bf,QAAAA,SAAS,GAAG,IAAI,CAACvH,KAAK,GAAGuH,SAAS,GAAGF,QAAQ,CAAA;AAC/C,OAAA;MACArC,GAAG,CAAC2B,SAAS,GAAGkL,WAAqB,CAAA;MACrCD,iBAAiB,IACfC,WAAW,IACX7M,GAAG,CAACkD,QAAQ,CACVX,SAAS,EACTjB,GAAG,GAAGkI,OAAO,GAAGqC,IAAI,GAAGD,EAAE,EACzBvJ,QAAQ,GAAGuC,WAAW,EACtB,IAAI,CAAChF,QAAQ,GAAG,EAClB,CAAC,CAAA;AACH4M,MAAAA,SAAS,IAAIxK,YAAY,CAAA;AAC3B,KAAA;AACA;AACA;AACA,IAAA,IAAI,CAACuB,aAAa,CAACvD,GAAG,CAAC,CAAA;AACzB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACEkB,EAAAA,mBAAmBA,GAaT;IAAA,IAZR;MACEzB,UAAU,GAAG,IAAI,CAACA,UAAU;MAC5BuN,SAAS,GAAG,IAAI,CAACA,SAAS;MAC1BC,UAAU,GAAG,IAAI,CAACA,UAAU;MAC5BrN,QAAQ,GAAG,IAAI,CAACA,QAAAA;AAMlB,KAAC,GAAAsN,SAAA,CAAA7O,MAAA,GAAA6O,CAAAA,IAAAA,SAAA,CAAA5I,CAAAA,CAAAA,KAAAA,SAAA,GAAA4I,SAAA,CAAG,CAAA,CAAA,GAAA,EAAE,CAAA;IAAA,IACNvM,YAAsB,GAAAuM,SAAA,CAAA7O,MAAA,GAAA6O,CAAAA,GAAAA,SAAA,MAAA5I,SAAA,CAAA;AAEtB,IAAA,MAAM6I,gBAAgB,GACpB1N,UAAU,CAAChC,QAAQ,CAAC,GAAG,CAAC,IACxBgC,UAAU,CAAChC,QAAQ,CAAC,GAAG,CAAC,IACxBgC,UAAU,CAAChC,QAAQ,CAAC,GAAG,CAAC,IACxBtC,UAAU,CAACiS,YAAY,CAAC3P,QAAQ,CAACgC,UAAU,CAAC4N,WAAW,EAAE,CAAC,GACtD5N,UAAU,QAAAF,MAAA,CACNE,UAAU,EAAG,IAAA,CAAA,CAAA;IACvB,OAAO,CACLuN,SAAS,EACTC,UAAU,KAAA1N,MAAA,CACPoB,YAAY,GAAG,IAAI,CAACwD,eAAe,GAAGvE,QAAQ,EACjDuN,IAAAA,CAAAA,EAAAA,gBAAgB,CACjB,CAACzE,IAAI,CAAC,GAAG,CAAC,CAAA;AACb,GAAA;;AAEA;AACF;AACA;AACA;EACE4E,MAAMA,CAACtN,GAA6B,EAAE;AACpC,IAAA,IAAI,CAAC,IAAI,CAACuN,OAAO,EAAE;AACjB,MAAA,OAAA;AACF,KAAA;IACA,IACE,IAAI,CAACzS,MAAM,IACX,IAAI,CAACA,MAAM,CAAC0S,aAAa,IACzB,CAAC,IAAI,CAACC,KAAK,IACX,CAAC,IAAI,CAACC,UAAU,EAAE,EAClB;AACA,MAAA,OAAA;AACF,KAAA;IACA,IAAI,IAAI,CAACtB,gBAAgB,EAAE;MACzB,IAAI,CAACjQ,cAAc,EAAE,CAAA;AACvB,KAAA;AACA,IAAA,KAAK,CAACmR,MAAM,CAACtN,GAAG,CAAC,CAAA;AACnB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE2N,aAAaA,CAACC,KAAa,EAAY;IACrC,OAAOD,aAAa,CAACC,KAAK,CAAC,CAAA;AAC7B,GAAA;;AAEA;AACF;AACA;AACA;AACA;EACEnR,mBAAmBA,CAAChB,IAAY,EAAiB;IAC/C,MAAMkB,KAAK,GAAGlB,IAAI,CAACoS,KAAK,CAAC,IAAI,CAACC,UAAU,CAAC;AACvCtR,MAAAA,QAAQ,GAAG,IAAI6I,KAAK,CAAW1I,KAAK,CAAC0B,MAAM,CAAC;MAC5C0P,OAAO,GAAG,CAAC,IAAI,CAAC,CAAA;IAClB,IAAIC,OAAiB,GAAG,EAAE,CAAA;AAC1B,IAAA,KAAK,IAAI7P,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxB,KAAK,CAAC0B,MAAM,EAAEF,CAAC,EAAE,EAAE;AACrC3B,MAAAA,QAAQ,CAAC2B,CAAC,CAAC,GAAG,IAAI,CAACwP,aAAa,CAAChR,KAAK,CAACwB,CAAC,CAAC,CAAC,CAAA;MAC1C6P,OAAO,GAAGA,OAAO,CAACzO,MAAM,CAAC/C,QAAQ,CAAC2B,CAAC,CAAC,EAAE4P,OAAO,CAAC,CAAA;AAChD,KAAA;IACAC,OAAO,CAACC,GAAG,EAAE,CAAA;IACb,OAAO;AACLlR,MAAAA,eAAe,EAAEP,QAAQ;AACzBG,MAAAA,KAAK,EAAEA,KAAK;AACZM,MAAAA,YAAY,EAAE+Q,OAAO;AACrBnR,MAAAA,aAAa,EAAEL,QAAAA;KAChB,CAAA;AACH,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACE0R,EAAAA,QAAQA,GAG8C;AAAA,IAAA,IAApDC,mBAAwB,GAAAjB,SAAA,CAAA7O,MAAA,GAAA,CAAA,IAAA6O,SAAA,CAAA,CAAA,CAAA,KAAA5I,SAAA,GAAA4I,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;AAC7B,IAAA,OAAA5R,cAAA,CAAAA,cAAA,CAAA,EAAA,EACK,KAAK,CAAC4S,QAAQ,CAAC,CAAC,GAAGE,eAAe,EAAE,GAAGD,mBAAmB,CAAQ,CAAC,CAAA,EAAA,EAAA,EAAA;MACtEpS,MAAM,EAAEsS,aAAa,CAAC,IAAI,CAACtS,MAAM,EAAE,IAAI,CAACN,IAAI,CAAA;KACxC,EAAA,IAAI,CAACQ,IAAI,GAAG;AAAEA,MAAAA,IAAI,EAAE,IAAI,CAACA,IAAI,CAACiS,QAAQ,EAAC;KAAG,GAAG,EAAE,CAAA,CAAA;AAEvD,GAAA;AAEAI,EAAAA,GAAGA,CAACC,GAAiB,EAAEX,KAAW,EAAE;IAClC,MAAM;AAAEY,MAAAA,oBAAAA;KAAsB,GAAG,IAAI,CAAChT,WAAgC,CAAA;AACtE,IAAA,KAAK,CAAC8S,GAAG,CAACC,GAAG,EAAEX,KAAK,CAAC,CAAA;IACrB,IAAIa,SAAS,GAAG,KAAK,CAAA;IACrB,IAAIC,YAAY,GAAG,KAAK,CAAA;AACxB,IAAA,IAAI,OAAOH,GAAG,KAAK,QAAQ,EAAE;AAC3B,MAAA,KAAK,MAAMI,IAAI,IAAIJ,GAAG,EAAE;QACtB,IAAII,IAAI,KAAK,MAAM,EAAE;UACnB,IAAI,CAACzS,WAAW,EAAE,CAAA;AACpB,SAAA;QACAuS,SAAS,GAAGA,SAAS,IAAID,oBAAoB,CAAC/Q,QAAQ,CAACkR,IAAI,CAAC,CAAA;AAC5DD,QAAAA,YAAY,GAAGA,YAAY,IAAIC,IAAI,KAAK,MAAM,CAAA;AAChD,OAAA;AACF,KAAC,MAAM;AACLF,MAAAA,SAAS,GAAGD,oBAAoB,CAAC/Q,QAAQ,CAAC8Q,GAAG,CAAC,CAAA;MAC9CG,YAAY,GAAGH,GAAG,KAAK,MAAM,CAAA;AAC/B,KAAA;AACA,IAAA,IAAIG,YAAY,EAAE;MAChB,IAAI,CAACxS,WAAW,EAAE,CAAA;AACpB,KAAA;AACA,IAAA,IAAIuS,SAAS,IAAI,IAAI,CAACzS,WAAW,EAAE;MACjC,IAAI,CAACG,cAAc,EAAE,CAAA;MACrB,IAAI,CAACC,SAAS,EAAE,CAAA;AAClB,KAAA;AACA,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;;AAEA;AACF;AACA;AACA;AACEoD,EAAAA,UAAUA,GAAW;AACnB,IAAA,OAAO,CAAC,CAAA;AACV,GAAA;AAgCA;AACF;AACA;AACA;AACA;AACA;AACA;AACE,EAAA,aAAaoP,WAAWA,CACtBC,OAAoB,EACpBnT,OAAkB,EAClBoT,QAAmB,EACnB;IACA,MAAMC,gBAAgB,GAAGC,eAAe,CACtCH,OAAO,EACP1T,UAAU,CAAC8T,eAAe,EAC1BH,QACF,CAAC,CAAA;IAED,MAAAI,qBAAA,GAAA5T,cAAA,CAAAA,cAAA,CAUSI,EAAAA,EAAAA,OAAO,GAAKqT,gBAAgB,CAAA;AAV/B,MAAA;AACJI,QAAAA,UAAU,GAAGxJ,IAAkD;AAC/DyJ,QAAAA,cAAc,GAAG,EAAE;AACnBC,QAAAA,EAAE,GAAG,CAAC;AACNzD,QAAAA,EAAE,GAAG,CAAC;AACNtK,QAAAA,GAAG,GAAG,CAAC;AACPvC,QAAAA,IAAI,GAAG,CAAC;AACRa,QAAAA,QAAQ,GAAG0P,qBAAqB;AAChChI,QAAAA,WAAW,GAAG,CAAA;AAEhB,OAAC,GAAA4H,qBAAA;AADIK,MAAAA,aAAa,GAAAC,wBAAA,CAAAN,qBAAA,EAAAO,SAAA,CAAA,CAAA;IAGlB,MAAMC,WAAW,GAAG,CAACb,OAAO,CAACa,WAAW,IAAI,EAAE,EAC3CC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAC7BA,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;;AAEvB;AACA;;AAEA,IAAA,MAAMlU,IAAI,GAAG,IAAI,IAAI,CAACiU,WAAW,EAAApU,cAAA,CAAA;QAC7ByD,IAAI,EAAEA,IAAI,GAAGsQ,EAAE;QACf/N,GAAG,EAAEA,GAAG,GAAGsK,EAAE;AACbgE,QAAAA,SAAS,EAAER,cAAc,CAAC3R,QAAQ,CAAC,WAAW,CAAC;AAC/CoS,QAAAA,QAAQ,EAAET,cAAc,CAAC3R,QAAQ,CAAC,UAAU,CAAC;AAC7CqS,QAAAA,WAAW,EAAEV,cAAc,CAAC3R,QAAQ,CAAC,cAAc,CAAC;AACpD;AACA6J,QAAAA,WAAW,EAAE,CAAC;AACd1H,QAAAA,QAAAA;OACG2P,EAAAA,aAAa,CACjB,CAAC;MACFQ,qBAAqB,GAAGtU,IAAI,CAACuU,eAAe,EAAE,GAAGvU,IAAI,CAACR,MAAM;AAC5DgV,MAAAA,cAAc,GACZ,CAACxU,IAAI,CAACR,MAAM,GAAGQ,IAAI,CAAC6L,WAAW,IAAI7L,IAAI,CAAC0H,UAAU,GAAG1H,IAAI,CAACR,MAAM;MAClEiV,UAAU,GAAGD,cAAc,GAAGF,qBAAqB;AACnDI,MAAAA,UAAU,GAAG1U,IAAI,CAACuU,eAAe,EAAE,GAAGE,UAAU,CAAA;IAElD,IAAIE,IAAI,GAAG,CAAC,CAAA;AACZ;AACJ;AACA;AACA;AACA;IACI,IAAIjB,UAAU,KAAKrO,MAAM,EAAE;AACzBsP,MAAAA,IAAI,GAAG3U,IAAI,CAAC4U,cAAc,EAAE,GAAG,CAAC,CAAA;AAClC,KAAA;IACA,IAAIlB,UAAU,KAAKjK,KAAK,EAAE;AACxBkL,MAAAA,IAAI,GAAG3U,IAAI,CAAC4U,cAAc,EAAE,CAAA;AAC9B,KAAA;IACA5U,IAAI,CAAC6S,GAAG,CAAC;AACPvP,MAAAA,IAAI,EAAEtD,IAAI,CAACsD,IAAI,GAAGqR,IAAI;MACtB9O,GAAG,EACD7F,IAAI,CAAC6F,GAAG,GACR,CAAC6O,UAAU,GAAG1U,IAAI,CAACmE,QAAQ,IAAI,IAAI,GAAGnE,IAAI,CAAC2H,iBAAiB,CAAC,IAC3D3H,IAAI,CAAC0H,UAAU;AACnBmE,MAAAA,WAAAA;AACF,KAAC,CAAC,CAAA;AACF,IAAA,OAAO7L,IAAI,CAAA;AACb,GAAA;;AAEA;;AAEA;AACF;AACA;AACA;AACA;EACE,OAAO6U,UAAUA,CAGfC,MAAS,EAAE;IACX,OAAO,IAAI,CAACC,WAAW,CAAAlV,cAAA,CAAAA,cAAA,KAEhBiV,MAAM,CAAA,EAAA,EAAA,EAAA;AACTxU,MAAAA,MAAM,EAAE0U,eAAe,CAACF,MAAM,CAACxU,MAAM,IAAI,EAAE,EAAEwU,MAAM,CAAC9U,IAAI,CAAA;KAE1D,CAAA,EAAA;AACEiV,MAAAA,UAAU,EAAE,MAAA;AACd,KACF,CAAC,CAAA;AACH,GAAA;AACF,CAAA;AA7vDE;AACF;AACA;AACA;AACA;AAJE/U,eAAA,CARWR,UAAU,EAAA,sBAAA,EAamBqT,oBAAoB,CAAA,CAAA;AAAA7S,eAAA,CAbjDR,UAAU,EAiSI,iBAAA,EAAA,CAAC,GAAGwV,eAAe,EAAE,GAAGvC,eAAe,CAAC,CAAA,CAAA;AAAAzS,eAAA,CAjStDR,UAAU,EAAA,aAAA,EAmSAyV,iBAAiB,CAAA,CAAA;AAAAjV,eAAA,CAnS3BR,UAAU,EAAA,MAAA,EAqSP,MAAM,CAAA,CAAA;AAAAQ,eAAA,CArSTR,UAAU,EAqoDC,cAAA,EAAA,CACpB,YAAY,EACZ,OAAO,EACP,SAAS,EACT,SAAS,EACT,WAAW,CACZ,CAAA,CAAA;AAED;AAEA;AACF;AACA;AACA;AACA;AACA;AALEQ,eAAA,CA/oDWR,UAAU,EAqpDI0V,iBAAAA,EAAAA,iBAAiB,CAACtR,MAAM,CAC/C,GAAG,EACH,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,aAAa,EACb,YAAY,EACZ,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,aACF,CAAC,CAAA,CAAA;AAsGHuR,WAAW,CAAC3V,UAAU,EAAE,CAAC4V,kBAAkB,CAAC,CAAC,CAAA;AAC7CC,aAAa,CAACC,QAAQ,CAAC9V,UAAU,CAAC,CAAA;AAClC6V,aAAa,CAACE,WAAW,CAAC/V,UAAU,CAAC;;;;"}
1
+ {"version":3,"file":"Text.mjs","sources":["../../../../src/shapes/Text/Text.ts"],"sourcesContent":["import { cache } from '../../cache';\nimport { DEFAULT_SVG_FONT_SIZE, FILL, STROKE } from '../../constants';\nimport type { ObjectEvents } from '../../EventTypeDefs';\nimport type {\n CompleteTextStyleDeclaration,\n TextStyle,\n TextStyleDeclaration,\n} from './StyledText';\nimport { StyledText } from './StyledText';\nimport { SHARED_ATTRIBUTES } from '../../parser/attributes';\nimport { parseAttributes } from '../../parser/parseAttributes';\nimport type {\n Abortable,\n TCacheCanvasDimensions,\n TClassProperties,\n TFiller,\n TOptions,\n} from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { graphemeSplit } from '../../util/lang_string';\nimport { createCanvasElement } from '../../util/misc/dom';\nimport type { TextStyleArray } from '../../util/misc/textStyles';\nimport {\n hasStyleChanged,\n stylesFromArray,\n stylesToArray,\n} from '../../util/misc/textStyles';\nimport { getPathSegmentsInfo, getPointOnPath } from '../../util/path';\nimport { cacheProperties } from '../Object/FabricObject';\nimport type { Path } from '../Path';\nimport { TextSVGExportMixin } from './TextSVGExportMixin';\nimport { applyMixins } from '../../util/applyMixins';\nimport type { FabricObjectProps, SerializedObjectProps } from '../Object/types';\nimport type { StylePropertiesType } from './constants';\nimport {\n additionalProps,\n textDefaultValues,\n textLayoutProperties,\n JUSTIFY,\n JUSTIFY_CENTER,\n JUSTIFY_LEFT,\n JUSTIFY_RIGHT,\n} from './constants';\nimport { CENTER, LEFT, RIGHT, TOP, BOTTOM } from '../../constants';\nimport { isFiller } from '../../util/typeAssertions';\nimport type { Gradient } from '../../gradient/Gradient';\nimport type { Pattern } from '../../Pattern';\nimport type { CSSRules } from '../../parser/typedefs';\n\nlet measuringContext: CanvasRenderingContext2D | null;\n\n/**\n * Return a context for measurement of text string.\n * if created it gets stored for reuse\n */\nfunction getMeasuringContext() {\n if (!measuringContext) {\n const canvas = createCanvasElement();\n canvas.width = canvas.height = 0;\n measuringContext = canvas.getContext('2d');\n }\n return measuringContext;\n}\n\nexport type TPathSide = 'left' | 'right';\n\nexport type TPathAlign = 'baseline' | 'center' | 'ascender' | 'descender';\n\nexport type TextLinesInfo = {\n lines: string[];\n graphemeLines: string[][];\n graphemeText: string[];\n _unwrappedLines: string[][];\n};\n\n/**\n * Measure and return the info of a single grapheme.\n * needs the the info of previous graphemes already filled\n * Override to customize measuring\n */\nexport type GraphemeBBox = {\n width: number;\n height: number;\n kernedWidth: number;\n left: number;\n deltaY: number;\n renderLeft?: number;\n renderTop?: number;\n angle?: number;\n};\n\n// @TODO this is not complete\ninterface UniqueTextProps {\n charSpacing: number;\n lineHeight: number;\n fontSize: number;\n fontWeight: string | number;\n fontFamily: string;\n fontStyle: string;\n pathSide: TPathSide;\n pathAlign: TPathAlign;\n underline: boolean;\n overline: boolean;\n linethrough: boolean;\n textAlign: string;\n direction: CanvasDirection;\n path?: Path;\n}\n\nexport interface SerializedTextProps\n extends SerializedObjectProps,\n UniqueTextProps {\n styles: TextStyleArray | TextStyle;\n}\n\nexport interface TextProps extends FabricObjectProps, UniqueTextProps {\n styles: TextStyle;\n}\n\n/**\n * Text class\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#text}\n */\nexport class FabricText<\n Props extends TOptions<TextProps> = Partial<TextProps>,\n SProps extends SerializedTextProps = SerializedTextProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n >\n extends StyledText<Props, SProps, EventSpec>\n implements UniqueTextProps\n{\n /**\n * Properties that requires a text layout recalculation when changed\n * @type string[]\n * @protected\n */\n static textLayoutProperties: string[] = textLayoutProperties;\n\n /**\n * @private\n */\n declare _reNewline: RegExp;\n\n /**\n * Use this regular expression to filter for whitespaces that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reSpacesAndTabs: RegExp;\n\n /**\n * Use this regular expression to filter for whitespace that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reSpaceAndTab: RegExp;\n\n /**\n * Use this regular expression to filter consecutive groups of non spaces.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n declare _reWords: RegExp;\n\n declare text: string;\n\n /**\n * Font size (in pixels)\n * @type Number\n * @default\n */\n declare fontSize: number;\n\n /**\n * Font weight (e.g. bold, normal, 400, 600, 800)\n * @type {(Number|String)}\n * @default\n */\n declare fontWeight: string | number;\n\n /**\n * Font family\n * @type String\n * @default\n */\n declare fontFamily: string;\n\n /**\n * Text decoration underline.\n * @type Boolean\n * @default\n */\n declare underline: boolean;\n\n /**\n * Text decoration overline.\n * @type Boolean\n * @default\n */\n declare overline: boolean;\n\n /**\n * Text decoration linethrough.\n * @type Boolean\n * @default\n */\n declare linethrough: boolean;\n\n /**\n * Text alignment. Possible values: \"left\", \"center\", \"right\", \"justify\",\n * \"justify-left\", \"justify-center\" or \"justify-right\".\n * @type String\n * @default\n */\n declare textAlign: string;\n\n /**\n * Font style . Possible values: \"\", \"normal\", \"italic\" or \"oblique\".\n * @type String\n * @default\n */\n declare fontStyle: string;\n\n /**\n * Line height\n * @type Number\n * @default\n */\n declare lineHeight: number;\n\n /**\n * Superscript schema object (minimum overlap)\n */\n declare superscript: {\n /**\n * fontSize factor\n * @default 0.6\n */\n size: number;\n /**\n * baseline-shift factor (upwards)\n * @default -0.35\n */\n baseline: number;\n };\n\n /**\n * Subscript schema object (minimum overlap)\n */\n declare subscript: {\n /**\n * fontSize factor\n * @default 0.6\n */\n size: number;\n /**\n * baseline-shift factor (downwards)\n * @default 0.11\n */\n baseline: number;\n };\n\n /**\n * Background color of text lines\n * @type String\n * @default\n */\n declare textBackgroundColor: string;\n\n declare styles: TextStyle;\n\n /**\n * Path that the text should follow.\n * since 4.6.0 the path will be drawn automatically.\n * if you want to make the path visible, give it a stroke and strokeWidth or fill value\n * if you want it to be hidden, assign visible = false to the path.\n * This feature is in BETA, and SVG import/export is not yet supported.\n * @type Path\n * @example\n * const textPath = new Text('Text on a path', {\n * top: 150,\n * left: 150,\n * textAlign: 'center',\n * charSpacing: -50,\n * path: new Path('M 0 0 C 50 -100 150 -100 200 0', {\n * strokeWidth: 1,\n * visible: false\n * }),\n * pathSide: 'left',\n * pathStartOffset: 0\n * });\n * @default\n */\n declare path?: Path;\n\n /**\n * Offset amount for text path starting position\n * Only used when text has a path\n * @type Number\n * @default\n */\n declare pathStartOffset: number;\n\n /**\n * Which side of the path the text should be drawn on.\n * Only used when text has a path\n * @type {TPathSide} 'left|right'\n * @default\n */\n declare pathSide: TPathSide;\n\n /**\n * How text is aligned to the path. This property determines\n * the perpendicular position of each character relative to the path.\n * (one of \"baseline\", \"center\", \"ascender\", \"descender\")\n * This feature is in BETA, and its behavior may change\n * @type TPathAlign\n * @default\n */\n declare pathAlign: TPathAlign;\n\n /**\n * @private\n */\n declare _fontSizeFraction: number;\n\n /**\n * @private\n */\n declare offsets: { underline: number; linethrough: number; overline: number };\n\n /**\n * Text Line proportion to font Size (in pixels)\n * @type Number\n * @default\n */\n declare _fontSizeMult: number;\n\n /**\n * additional space between characters\n * expressed in thousands of em unit\n * @type Number\n * @default\n */\n declare charSpacing: number;\n\n /**\n * Baseline shift, styles only, keep at 0 for the main text object\n * @type {Number}\n * @default\n */\n declare deltaY: number;\n\n /**\n * WARNING: EXPERIMENTAL. NOT SUPPORTED YET\n * determine the direction of the text.\n * This has to be set manually together with textAlign and originX for proper\n * experience.\n * some interesting link for the future\n * https://www.w3.org/International/questions/qa-bidi-unicode-controls\n * @since 4.5.0\n * @type {CanvasDirection} 'ltr|rtl'\n * @default\n */\n declare direction: CanvasDirection;\n\n /**\n * contains characters bounding boxes\n * This variable is considered to be protected.\n * But for how mixins are implemented right now, we can't leave it private\n * @protected\n */\n __charBounds: GraphemeBBox[][] = [];\n\n /**\n * use this size when measuring text. To avoid IE11 rounding errors\n * @type {Number}\n * @default\n * @readonly\n * @private\n */\n declare CACHE_FONT_SIZE: number;\n\n /**\n * contains the min text width to avoid getting 0\n * @type {Number}\n * @default\n */\n declare MIN_TEXT_WIDTH: number;\n\n /**\n * contains the the text of the object, divided in lines as they are displayed\n * on screen. Wrapping will divide the text independently of line breaks\n * @type {string[]}\n * @default\n */\n declare textLines: string[];\n\n /**\n * same as textlines, but each line is an array of graphemes as split by splitByGrapheme\n * @type {string[]}\n * @default\n */\n declare _textLines: string[][];\n\n declare _unwrappedTextLines: string[][];\n declare _text: string[];\n declare cursorWidth: number;\n declare __lineHeights: number[];\n declare __lineWidths: number[];\n declare initialized?: true;\n\n static cacheProperties = [...cacheProperties, ...additionalProps];\n\n static ownDefaults = textDefaultValues;\n\n static type = 'Text';\n\n static getDefaults(): Record<string, any> {\n return { ...super.getDefaults(), ...FabricText.ownDefaults };\n }\n\n constructor(text: string, options?: Props) {\n super();\n Object.assign(this, FabricText.ownDefaults);\n this.setOptions(options);\n if (!this.styles) {\n this.styles = {};\n }\n this.text = text;\n this.initialized = true;\n if (this.path) {\n this.setPathInfo();\n }\n this.initDimensions();\n this.setCoords();\n }\n\n /**\n * If text has a path, it will add the extra information needed\n * for path and text calculations\n */\n setPathInfo() {\n const path = this.path;\n if (path) {\n path.segmentsInfo = getPathSegmentsInfo(path.path);\n }\n }\n\n /**\n * @private\n * Divides text into lines of text and lines of graphemes.\n */\n _splitText(): TextLinesInfo {\n const newLines = this._splitTextIntoLines(this.text);\n this.textLines = newLines.lines;\n this._textLines = newLines.graphemeLines;\n this._unwrappedTextLines = newLines._unwrappedLines;\n this._text = newLines.graphemeText;\n return newLines;\n }\n\n /**\n * Initialize or update text dimensions.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n */\n initDimensions() {\n this._splitText();\n this._clearCache();\n this.dirty = true;\n if (this.path) {\n this.width = this.path.width;\n this.height = this.path.height;\n } else {\n this.width =\n this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH;\n this.height = this.calcTextHeight();\n }\n if (this.textAlign.includes(JUSTIFY)) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n }\n\n /**\n * Enlarge space boxes and shift the others\n */\n enlargeSpaces() {\n let diffSpace,\n currentLineWidth,\n numberOfSpaces,\n accumulatedSpace,\n line,\n charBound,\n spaces;\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n if (\n this.textAlign !== JUSTIFY &&\n (i === len - 1 || this.isEndOfWrapping(i))\n ) {\n continue;\n }\n accumulatedSpace = 0;\n line = this._textLines[i];\n currentLineWidth = this.getLineWidth(i);\n if (\n currentLineWidth < this.width &&\n (spaces = this.textLines[i].match(this._reSpacesAndTabs))\n ) {\n numberOfSpaces = spaces.length;\n diffSpace = (this.width - currentLineWidth) / numberOfSpaces;\n for (let j = 0; j <= line.length; j++) {\n charBound = this.__charBounds[i][j];\n if (this._reSpaceAndTab.test(line[j])) {\n charBound.width += diffSpace;\n charBound.kernedWidth += diffSpace;\n charBound.left += accumulatedSpace;\n accumulatedSpace += diffSpace;\n } else {\n charBound.left += accumulatedSpace;\n }\n }\n }\n }\n }\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @return {Boolean}\n */\n isEndOfWrapping(lineIndex: number): boolean {\n return lineIndex === this._textLines.length - 1;\n }\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * It return always 1 for text and Itext. Textbox has its own implementation\n * @return Number\n */\n missingNewlineOffset(lineIndex: number, skipWrapping?: boolean): 0 | 1;\n missingNewlineOffset(_lineIndex: number): 1 {\n return 1;\n }\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor\n * @param {Number} selectionStart\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.\n */\n get2DCursorLocation(selectionStart: number, skipWrapping?: boolean) {\n const lines = skipWrapping ? this._unwrappedTextLines : this._textLines;\n let i: number;\n for (i = 0; i < lines.length; i++) {\n if (selectionStart <= lines[i].length) {\n return {\n lineIndex: i,\n charIndex: selectionStart,\n };\n }\n selectionStart -=\n lines[i].length + this.missingNewlineOffset(i, skipWrapping);\n }\n return {\n lineIndex: i - 1,\n charIndex:\n lines[i - 1].length < selectionStart\n ? lines[i - 1].length\n : selectionStart,\n };\n }\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of text object\n */\n toString(): string {\n return `#<Text (${this.complexity()}): { \"text\": \"${\n this.text\n }\", \"fontFamily\": \"${this.fontFamily}\" }>`;\n }\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @param {Object} dim.x width of object to be cached\n * @param {Object} dim.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions(): TCacheCanvasDimensions {\n const dims = super._getCacheCanvasDimensions();\n const fontSize = this.fontSize;\n dims.width += fontSize * dims.zoomX;\n dims.height += fontSize * dims.zoomY;\n return dims;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const path = this.path;\n path && !path.isNotVisible() && path._render(ctx);\n this._setTextStyles(ctx);\n this._renderTextLinesBackground(ctx);\n this._renderTextDecoration(ctx, 'underline');\n this._renderText(ctx);\n this._renderTextDecoration(ctx, 'overline');\n this._renderTextDecoration(ctx, 'linethrough');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderText(ctx: CanvasRenderingContext2D) {\n if (this.paintFirst === STROKE) {\n this._renderTextStroke(ctx);\n this._renderTextFill(ctx);\n } else {\n this._renderTextFill(ctx);\n this._renderTextStroke(ctx);\n }\n }\n\n /**\n * Set the font parameter of the context with the object properties or with charStyle\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [charStyle] object with font style properties\n * @param {String} [charStyle.fontFamily] Font Family\n * @param {Number} [charStyle.fontSize] Font size in pixels. ( without px suffix )\n * @param {String} [charStyle.fontWeight] Font weight\n * @param {String} [charStyle.fontStyle] Font style (italic|normal)\n */\n _setTextStyles(\n ctx: CanvasRenderingContext2D,\n charStyle?: any,\n forMeasuring?: boolean,\n ) {\n ctx.textBaseline = 'alphabetic';\n if (this.path) {\n switch (this.pathAlign) {\n case CENTER:\n ctx.textBaseline = 'middle';\n break;\n case 'ascender':\n ctx.textBaseline = TOP;\n break;\n case 'descender':\n ctx.textBaseline = BOTTOM;\n break;\n }\n }\n ctx.font = this._getFontDeclaration(charStyle, forMeasuring);\n }\n\n /**\n * calculate and return the text Width measuring each line.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {Number} Maximum width of Text object\n */\n calcTextWidth(): number {\n let maxWidth = this.getLineWidth(0);\n\n for (let i = 1, len = this._textLines.length; i < len; i++) {\n const currentLineWidth = this.getLineWidth(i);\n if (currentLineWidth > maxWidth) {\n maxWidth = currentLineWidth;\n }\n }\n return maxWidth;\n }\n\n /**\n * @private\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} line Text to render\n * @param {Number} left Left position of text\n * @param {Number} top Top position of text\n * @param {Number} lineIndex Index of a line in a text\n */\n _renderTextLine(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n line: string[],\n left: number,\n top: number,\n lineIndex: number,\n ) {\n this._renderChars(method, ctx, line, left, top, lineIndex);\n }\n\n /**\n * Renders the text background for lines, taking care of style\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextLinesBackground(ctx: CanvasRenderingContext2D) {\n if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor')) {\n return;\n }\n const originalFill = ctx.fillStyle,\n leftOffset = this._getLeftOffset();\n let lineTopOffset = this._getTopOffset();\n\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i);\n if (\n !this.textBackgroundColor &&\n !this.styleHas('textBackgroundColor', i)\n ) {\n lineTopOffset += heightOfLine;\n continue;\n }\n const jlen = this._textLines[i].length;\n const lineLeftOffset = this._getLineLeftOffset(i);\n let boxWidth = 0;\n let boxStart = 0;\n let drawStart;\n let currentColor;\n let lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (let j = 0; j < jlen; j++) {\n // at this point charbox are either standard or full with pathInfo if there is a path.\n const charBox = this.__charBounds[i][j] as Required<GraphemeBBox>;\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (this.path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillStyle = currentColor;\n currentColor &&\n ctx.fillRect(\n -charBox.width / 2,\n (-heightOfLine / this.lineHeight) * (1 - this._fontSizeFraction),\n charBox.width,\n heightOfLine / this.lineHeight,\n );\n ctx.restore();\n } else if (currentColor !== lastColor) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = lastColor;\n lastColor &&\n ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight,\n );\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastColor = currentColor;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n }\n if (currentColor && !this.path) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentColor;\n ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight,\n );\n }\n lineTopOffset += heightOfLine;\n }\n ctx.fillStyle = originalFill;\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * measure and return the width of a single character.\n * possibly overridden to accommodate different measure logic or\n * to hook some external lib for character measurement\n * @private\n * @param {String} _char, char to be measured\n * @param {Object} charStyle style of char to be measured\n * @param {String} [previousChar] previous char\n * @param {Object} [prevCharStyle] style of previous char\n */\n _measureChar(\n _char: string,\n charStyle: CompleteTextStyleDeclaration,\n previousChar: string | undefined,\n prevCharStyle: CompleteTextStyleDeclaration | Record<string, never>,\n ) {\n const fontCache = cache.getFontCache(charStyle),\n fontDeclaration = this._getFontDeclaration(charStyle),\n couple = previousChar + _char,\n stylesAreEqual =\n previousChar &&\n fontDeclaration === this._getFontDeclaration(prevCharStyle),\n fontMultiplier = charStyle.fontSize / this.CACHE_FONT_SIZE;\n let width: number | undefined,\n coupleWidth: number | undefined,\n previousWidth: number | undefined,\n kernedWidth: number | undefined;\n\n if (previousChar && fontCache[previousChar] !== undefined) {\n previousWidth = fontCache[previousChar];\n }\n if (fontCache[_char] !== undefined) {\n kernedWidth = width = fontCache[_char];\n }\n if (stylesAreEqual && fontCache[couple] !== undefined) {\n coupleWidth = fontCache[couple];\n kernedWidth = coupleWidth - previousWidth!;\n }\n if (\n width === undefined ||\n previousWidth === undefined ||\n coupleWidth === undefined\n ) {\n const ctx = getMeasuringContext()!;\n // send a TRUE to specify measuring font size CACHE_FONT_SIZE\n this._setTextStyles(ctx, charStyle, true);\n if (width === undefined) {\n kernedWidth = width = ctx.measureText(_char).width;\n fontCache[_char] = width;\n }\n if (previousWidth === undefined && stylesAreEqual && previousChar) {\n previousWidth = ctx.measureText(previousChar).width;\n fontCache[previousChar] = previousWidth;\n }\n if (stylesAreEqual && coupleWidth === undefined) {\n // we can measure the kerning couple and subtract the width of the previous character\n coupleWidth = ctx.measureText(couple).width;\n fontCache[couple] = coupleWidth;\n // safe to use the non-null since if undefined we defined it before.\n kernedWidth = coupleWidth - previousWidth!;\n }\n }\n return {\n width: width * fontMultiplier,\n kernedWidth: kernedWidth! * fontMultiplier,\n };\n }\n\n /**\n * Computes height of character at given position\n * @param {Number} line the line index number\n * @param {Number} _char the character index number\n * @return {Number} fontSize of the character\n */\n getHeightOfChar(line: number, _char: number): number {\n return this.getValueOfPropertyAt(line, _char, 'fontSize');\n }\n\n /**\n * measure a text line measuring all characters.\n * @param {Number} lineIndex line number\n */\n measureLine(lineIndex: number) {\n const lineInfo = this._measureLine(lineIndex);\n if (this.charSpacing !== 0) {\n lineInfo.width -= this._getWidthOfCharSpacing();\n }\n if (lineInfo.width < 0) {\n lineInfo.width = 0;\n }\n return lineInfo;\n }\n\n /**\n * measure every grapheme of a line, populating __charBounds\n * @param {Number} lineIndex\n * @return {Object} object.width total width of characters\n * @return {Object} object.numOfSpaces length of chars that match this._reSpacesAndTabs\n */\n _measureLine(lineIndex: number) {\n let width = 0,\n prevGrapheme: string | undefined,\n graphemeInfo: GraphemeBBox | undefined;\n\n const reverse = this.pathSide === RIGHT,\n path = this.path,\n line = this._textLines[lineIndex],\n llength = line.length,\n lineBounds = new Array<GraphemeBBox>(llength);\n\n this.__charBounds[lineIndex] = lineBounds;\n for (let i = 0; i < llength; i++) {\n const grapheme = line[i];\n graphemeInfo = this._getGraphemeBox(grapheme, lineIndex, i, prevGrapheme);\n lineBounds[i] = graphemeInfo;\n width += graphemeInfo.kernedWidth;\n prevGrapheme = grapheme;\n }\n // this latest bound box represent the last character of the line\n // to simplify cursor handling in interactive mode.\n lineBounds[llength] = {\n left: graphemeInfo ? graphemeInfo.left + graphemeInfo.width : 0,\n width: 0,\n kernedWidth: 0,\n height: this.fontSize,\n deltaY: 0,\n } as GraphemeBBox;\n if (path && path.segmentsInfo) {\n let positionInPath = 0;\n const totalPathLength =\n path.segmentsInfo[path.segmentsInfo.length - 1].length;\n switch (this.textAlign) {\n case LEFT:\n positionInPath = reverse ? totalPathLength - width : 0;\n break;\n case CENTER:\n positionInPath = (totalPathLength - width) / 2;\n break;\n case RIGHT:\n positionInPath = reverse ? 0 : totalPathLength - width;\n break;\n //todo - add support for justify\n }\n positionInPath += this.pathStartOffset * (reverse ? -1 : 1);\n for (\n let i = reverse ? llength - 1 : 0;\n reverse ? i >= 0 : i < llength;\n reverse ? i-- : i++\n ) {\n graphemeInfo = lineBounds[i];\n if (positionInPath > totalPathLength) {\n positionInPath %= totalPathLength;\n } else if (positionInPath < 0) {\n positionInPath += totalPathLength;\n }\n // it would probably much faster to send all the grapheme position for a line\n // and calculate path position/angle at once.\n this._setGraphemeOnPath(positionInPath, graphemeInfo);\n positionInPath += graphemeInfo.kernedWidth;\n }\n }\n return { width: width, numOfSpaces: 0 };\n }\n\n /**\n * Calculate the angle and the left,top position of the char that follow a path.\n * It appends it to graphemeInfo to be reused later at rendering\n * @private\n * @param {Number} positionInPath to be measured\n * @param {GraphemeBBox} graphemeInfo current grapheme box information\n * @param {Object} startingPoint position of the point\n */\n _setGraphemeOnPath(positionInPath: number, graphemeInfo: GraphemeBBox) {\n const centerPosition = positionInPath + graphemeInfo.kernedWidth / 2,\n path = this.path!;\n\n // we are at currentPositionOnPath. we want to know what point on the path is.\n const info = getPointOnPath(path.path, centerPosition, path.segmentsInfo)!;\n graphemeInfo.renderLeft = info.x - path.pathOffset.x;\n graphemeInfo.renderTop = info.y - path.pathOffset.y;\n graphemeInfo.angle = info.angle + (this.pathSide === RIGHT ? Math.PI : 0);\n }\n\n /**\n *\n * @param {String} grapheme to be measured\n * @param {Number} lineIndex index of the line where the char is\n * @param {Number} charIndex position in the line\n * @param {String} [prevGrapheme] character preceding the one to be measured\n * @returns {GraphemeBBox} grapheme bbox\n */\n _getGraphemeBox(\n grapheme: string,\n lineIndex: number,\n charIndex: number,\n prevGrapheme?: string,\n skipLeft?: boolean,\n ): GraphemeBBox {\n const style = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n prevStyle = prevGrapheme\n ? this.getCompleteStyleDeclaration(lineIndex, charIndex - 1)\n : {},\n info = this._measureChar(grapheme, style, prevGrapheme, prevStyle);\n let kernedWidth = info.kernedWidth,\n width = info.width,\n charSpacing;\n\n if (this.charSpacing !== 0) {\n charSpacing = this._getWidthOfCharSpacing();\n width += charSpacing;\n kernedWidth += charSpacing;\n }\n\n const box: GraphemeBBox = {\n width,\n left: 0,\n height: style.fontSize,\n kernedWidth,\n deltaY: style.deltaY,\n };\n if (charIndex > 0 && !skipLeft) {\n const previousBox = this.__charBounds[lineIndex][charIndex - 1];\n box.left =\n previousBox.left + previousBox.width + info.kernedWidth - info.width;\n }\n return box;\n }\n\n /**\n * Calculate height of line at 'lineIndex'\n * @param {Number} lineIndex index of line to calculate\n * @return {Number}\n */\n getHeightOfLine(lineIndex: number): number {\n if (this.__lineHeights[lineIndex]) {\n return this.__lineHeights[lineIndex];\n }\n\n // char 0 is measured before the line cycle because it needs to char\n // emptylines\n let maxHeight = this.getHeightOfChar(lineIndex, 0);\n for (let i = 1, len = this._textLines[lineIndex].length; i < len; i++) {\n maxHeight = Math.max(this.getHeightOfChar(lineIndex, i), maxHeight);\n }\n\n return (this.__lineHeights[lineIndex] =\n maxHeight * this.lineHeight * this._fontSizeMult);\n }\n\n /**\n * Calculate text box height\n */\n calcTextHeight() {\n let lineHeight,\n height = 0;\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n lineHeight = this.getHeightOfLine(i);\n height += i === len - 1 ? lineHeight / this.lineHeight : lineHeight;\n }\n return height;\n }\n\n /**\n * @private\n * @return {Number} Left offset\n */\n _getLeftOffset(): number {\n return this.direction === 'ltr' ? -this.width / 2 : this.width / 2;\n }\n\n /**\n * @private\n * @return {Number} Top offset\n */\n _getTopOffset(): number {\n return -this.height / 2;\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n */\n _renderTextCommon(\n ctx: CanvasRenderingContext2D,\n method: 'fillText' | 'strokeText',\n ) {\n ctx.save();\n let lineHeights = 0;\n const left = this._getLeftOffset(),\n top = this._getTopOffset();\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i),\n maxHeight = heightOfLine / this.lineHeight,\n leftOffset = this._getLineLeftOffset(i);\n this._renderTextLine(\n method,\n ctx,\n this._textLines[i],\n left + leftOffset,\n top + lineHeights + maxHeight,\n i,\n );\n lineHeights += heightOfLine;\n }\n ctx.restore();\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextFill(ctx: CanvasRenderingContext2D) {\n if (!this.fill && !this.styleHas(FILL)) {\n return;\n }\n\n this._renderTextCommon(ctx, 'fillText');\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextStroke(ctx: CanvasRenderingContext2D) {\n if ((!this.stroke || this.strokeWidth === 0) && this.isEmptyStyles()) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n this._setLineDash(ctx, this.strokeDashArray);\n ctx.beginPath();\n this._renderTextCommon(ctx, 'strokeText');\n ctx.closePath();\n ctx.restore();\n }\n\n /**\n * @private\n * @param {String} method fillText or strokeText.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Array} line Content of the line, splitted in an array by grapheme\n * @param {Number} left\n * @param {Number} top\n * @param {Number} lineIndex\n */\n _renderChars(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n line: Array<any>,\n left: number,\n top: number,\n lineIndex: number,\n ) {\n const lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.includes(JUSTIFY),\n path = this.path,\n shortCut =\n !isJustify &&\n this.charSpacing === 0 &&\n this.isEmptyStyles(lineIndex) &&\n !path,\n isLtr = this.direction === 'ltr',\n sign = this.direction === 'ltr' ? 1 : -1,\n // this was changed in the PR #7674\n // currentDirection = ctx.canvas.getAttribute('dir');\n currentDirection = ctx.direction;\n\n let actualStyle,\n nextStyle,\n charsToRender = '',\n charBox,\n boxWidth = 0,\n timeToRender,\n drawingLeft;\n\n ctx.save();\n if (currentDirection !== this.direction) {\n ctx.canvas.setAttribute('dir', isLtr ? 'ltr' : 'rtl');\n ctx.direction = isLtr ? 'ltr' : 'rtl';\n ctx.textAlign = isLtr ? LEFT : RIGHT;\n }\n top -= (lineHeight * this._fontSizeFraction) / this.lineHeight;\n if (shortCut) {\n // render all the line in one pass without checking\n // drawingLeft = isLtr ? left : left - this.getLineWidth(lineIndex);\n this._renderChar(method, ctx, lineIndex, 0, line.join(''), left, top);\n ctx.restore();\n return;\n }\n for (let i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing || path;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i] as Required<GraphemeBBox>;\n if (boxWidth === 0) {\n left += sign * (charBox.kernedWidth - charBox.width);\n boxWidth += charBox.width;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle =\n actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = hasStyleChanged(actualStyle, nextStyle, false);\n }\n if (timeToRender) {\n if (path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n this._renderChar(\n method,\n ctx,\n lineIndex,\n i,\n charsToRender,\n -boxWidth / 2,\n 0,\n );\n ctx.restore();\n } else {\n drawingLeft = left;\n this._renderChar(\n method,\n ctx,\n lineIndex,\n i,\n charsToRender,\n drawingLeft,\n top,\n );\n }\n charsToRender = '';\n actualStyle = nextStyle;\n left += sign * boxWidth;\n boxWidth = 0;\n }\n }\n ctx.restore();\n }\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {TFiller} filler a fabric gradient instance\n * @return {CanvasPattern} a pattern to use as fill/stroke style\n */\n _applyPatternGradientTransformText(filler: TFiller) {\n const pCanvas = createCanvasElement(),\n // TODO: verify compatibility with strokeUniform\n width = this.width + this.strokeWidth,\n height = this.height + this.strokeWidth,\n pCtx = pCanvas.getContext('2d')!;\n pCanvas.width = width;\n pCanvas.height = height;\n pCtx.beginPath();\n pCtx.moveTo(0, 0);\n pCtx.lineTo(width, 0);\n pCtx.lineTo(width, height);\n pCtx.lineTo(0, height);\n pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.fillStyle = filler.toLive(pCtx)!;\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fill();\n return pCtx.createPattern(pCanvas, 'no-repeat')!;\n }\n\n handleFiller<T extends 'fill' | 'stroke'>(\n ctx: CanvasRenderingContext2D,\n property: `${T}Style`,\n filler: TFiller | string,\n ): { offsetX: number; offsetY: number } {\n let offsetX: number, offsetY: number;\n if (isFiller(filler)) {\n if (\n (filler as Gradient<'linear'>).gradientUnits === 'percentage' ||\n (filler as Gradient<'linear'>).gradientTransform ||\n (filler as Pattern).patternTransform\n ) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n offsetX = -this.width / 2;\n offsetY = -this.height / 2;\n ctx.translate(offsetX, offsetY);\n ctx[property] = this._applyPatternGradientTransformText(filler);\n return { offsetX, offsetY };\n } else {\n // is a simple gradient or pattern\n ctx[property] = filler.toLive(ctx)!;\n return this._applyPatternGradientTransform(ctx, filler);\n }\n } else {\n // is a color\n ctx[property] = filler;\n }\n return { offsetX: 0, offsetY: 0 };\n }\n\n /**\n * This function prepare the canvas for a stroke style, and stroke and strokeWidth\n * need to be sent in as defined\n * @param {CanvasRenderingContext2D} ctx\n * @param {CompleteTextStyleDeclaration} style with stroke and strokeWidth defined\n * @returns\n */\n _setStrokeStyles(\n ctx: CanvasRenderingContext2D,\n {\n stroke,\n strokeWidth,\n }: Pick<CompleteTextStyleDeclaration, 'stroke' | 'strokeWidth'>,\n ) {\n ctx.lineWidth = strokeWidth;\n ctx.lineCap = this.strokeLineCap;\n ctx.lineDashOffset = this.strokeDashOffset;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.miterLimit = this.strokeMiterLimit;\n return this.handleFiller(ctx, 'strokeStyle', stroke!);\n }\n\n /**\n * This function prepare the canvas for a ill style, and fill\n * need to be sent in as defined\n * @param {CanvasRenderingContext2D} ctx\n * @param {CompleteTextStyleDeclaration} style with ill defined\n * @returns\n */\n _setFillStyles(ctx: CanvasRenderingContext2D, { fill }: Pick<this, 'fill'>) {\n return this.handleFiller(ctx, 'fillStyle', fill!);\n }\n\n /**\n * @private\n * @param {String} method\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {String} _char\n * @param {Number} left Left coordinate\n * @param {Number} top Top coordinate\n * @param {Number} lineHeight Height of the line\n */\n _renderChar(\n method: 'fillText' | 'strokeText',\n ctx: CanvasRenderingContext2D,\n lineIndex: number,\n charIndex: number,\n _char: string,\n left: number,\n top: number,\n ) {\n const decl = this._getStyleDeclaration(lineIndex, charIndex),\n fullDecl = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n shouldFill = method === 'fillText' && fullDecl.fill,\n shouldStroke =\n method === 'strokeText' && fullDecl.stroke && fullDecl.strokeWidth;\n\n if (!shouldStroke && !shouldFill) {\n return;\n }\n ctx.save();\n\n ctx.font = this._getFontDeclaration(fullDecl);\n\n if (decl.textBackgroundColor) {\n this._removeShadow(ctx);\n }\n if (decl.deltaY) {\n top += decl.deltaY;\n }\n\n if (shouldFill) {\n const fillOffsets = this._setFillStyles(ctx, fullDecl);\n ctx.fillText(\n _char,\n left - fillOffsets.offsetX,\n top - fillOffsets.offsetY,\n );\n }\n\n if (shouldStroke) {\n const strokeOffsets = this._setStrokeStyles(ctx, fullDecl);\n ctx.strokeText(\n _char,\n left - strokeOffsets.offsetX,\n top - strokeOffsets.offsetY,\n );\n }\n\n ctx.restore();\n }\n\n /**\n * Turns the character into a 'superior figure' (i.e. 'superscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n */\n setSuperscript(start: number, end: number) {\n this._setScript(start, end, this.superscript);\n }\n\n /**\n * Turns the character into an 'inferior figure' (i.e. 'subscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n */\n setSubscript(start: number, end: number) {\n this._setScript(start, end, this.subscript);\n }\n\n /**\n * Applies 'schema' at given position\n * @private\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @param {Number} schema\n */\n protected _setScript(\n start: number,\n end: number,\n schema: {\n size: number;\n baseline: number;\n },\n ) {\n const loc = this.get2DCursorLocation(start, true),\n fontSize = this.getValueOfPropertyAt(\n loc.lineIndex,\n loc.charIndex,\n 'fontSize',\n ),\n dy = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'deltaY'),\n style = {\n fontSize: fontSize * schema.size,\n deltaY: dy + fontSize * schema.baseline,\n };\n this.setSelectionStyles(style, start, end);\n }\n\n /**\n * @private\n * @param {Number} lineIndex index text line\n * @return {Number} Line left offset\n */\n _getLineLeftOffset(lineIndex: number): number {\n const lineWidth = this.getLineWidth(lineIndex),\n lineDiff = this.width - lineWidth,\n textAlign = this.textAlign,\n direction = this.direction,\n isEndOfWrapping = this.isEndOfWrapping(lineIndex);\n let leftOffset = 0;\n if (\n textAlign === JUSTIFY ||\n (textAlign === JUSTIFY_CENTER && !isEndOfWrapping) ||\n (textAlign === JUSTIFY_RIGHT && !isEndOfWrapping) ||\n (textAlign === JUSTIFY_LEFT && !isEndOfWrapping)\n ) {\n return 0;\n }\n if (textAlign === CENTER) {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === RIGHT) {\n leftOffset = lineDiff;\n }\n if (textAlign === JUSTIFY_CENTER) {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === JUSTIFY_RIGHT) {\n leftOffset = lineDiff;\n }\n if (direction === 'rtl') {\n if (\n textAlign === RIGHT ||\n textAlign === JUSTIFY ||\n textAlign === JUSTIFY_RIGHT\n ) {\n leftOffset = 0;\n } else if (textAlign === LEFT || textAlign === JUSTIFY_LEFT) {\n leftOffset = -lineDiff;\n } else if (textAlign === CENTER || textAlign === JUSTIFY_CENTER) {\n leftOffset = -lineDiff / 2;\n }\n }\n return leftOffset;\n }\n\n /**\n * @private\n */\n _clearCache() {\n this._forceClearCache = false;\n this.__lineWidths = [];\n this.__lineHeights = [];\n this.__charBounds = [];\n }\n\n /**\n * Measure a single line given its index. Used to calculate the initial\n * text bounding box. The values are calculated and stored in __lineWidths cache.\n * @private\n * @param {Number} lineIndex line number\n * @return {Number} Line width\n */\n getLineWidth(lineIndex: number): number {\n if (this.__lineWidths[lineIndex] !== undefined) {\n return this.__lineWidths[lineIndex];\n }\n\n const { width } = this.measureLine(lineIndex);\n this.__lineWidths[lineIndex] = width;\n return width;\n }\n\n _getWidthOfCharSpacing() {\n if (this.charSpacing !== 0) {\n return (this.fontSize * this.charSpacing) / 1000;\n }\n return 0;\n }\n\n /**\n * Retrieves the value of property at given character position\n * @param {Number} lineIndex the line number\n * @param {Number} charIndex the character number\n * @param {String} property the property name\n * @returns the value of 'property'\n */\n getValueOfPropertyAt<T extends StylePropertiesType>(\n lineIndex: number,\n charIndex: number,\n property: T,\n ): this[T] {\n const charStyle = this._getStyleDeclaration(lineIndex, charIndex);\n return (charStyle[property] ?? this[property]) as this[T];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextDecoration(\n ctx: CanvasRenderingContext2D,\n type: 'underline' | 'linethrough' | 'overline',\n ) {\n if (!this[type] && !this.styleHas(type)) {\n return;\n }\n let topOffset = this._getTopOffset();\n const leftOffset = this._getLeftOffset(),\n path = this.path,\n charSpacing = this._getWidthOfCharSpacing(),\n offsetY = this.offsets[type];\n\n for (let i = 0, len = this._textLines.length; i < len; i++) {\n const heightOfLine = this.getHeightOfLine(i);\n if (!this[type] && !this.styleHas(type, i)) {\n topOffset += heightOfLine;\n continue;\n }\n const line = this._textLines[i];\n const maxHeight = heightOfLine / this.lineHeight;\n const lineLeftOffset = this._getLineLeftOffset(i);\n let boxStart = 0;\n let boxWidth = 0;\n let lastDecoration = this.getValueOfPropertyAt(i, 0, type);\n let lastFill = this.getValueOfPropertyAt(i, 0, FILL);\n let currentDecoration;\n let currentFill;\n const top = topOffset + maxHeight * (1 - this._fontSizeFraction);\n let size = this.getHeightOfChar(i, 0);\n let dy = this.getValueOfPropertyAt(i, 0, 'deltaY');\n for (let j = 0, jlen = line.length; j < jlen; j++) {\n const charBox = this.__charBounds[i][j] as Required<GraphemeBBox>;\n currentDecoration = this.getValueOfPropertyAt(i, j, type);\n currentFill = this.getValueOfPropertyAt(i, j, FILL);\n const currentSize = this.getHeightOfChar(i, j);\n const currentDy = this.getValueOfPropertyAt(i, j, 'deltaY');\n if (path && currentDecoration && currentFill) {\n ctx.save();\n // bug? verify lastFill is a valid fill here.\n ctx.fillStyle = lastFill as string;\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillRect(\n -charBox.kernedWidth / 2,\n offsetY * currentSize + currentDy,\n charBox.kernedWidth,\n this.fontSize / 15,\n );\n ctx.restore();\n } else if (\n (currentDecoration !== lastDecoration ||\n currentFill !== lastFill ||\n currentSize !== size ||\n currentDy !== dy) &&\n boxWidth > 0\n ) {\n let drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n if (lastDecoration && lastFill) {\n // bug? verify lastFill is a valid fill here.\n ctx.fillStyle = lastFill as string;\n ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth,\n this.fontSize / 15,\n );\n }\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastDecoration = currentDecoration;\n lastFill = currentFill;\n size = currentSize;\n dy = currentDy;\n } else {\n boxWidth += charBox.kernedWidth;\n }\n }\n let drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentFill as string;\n currentDecoration &&\n currentFill &&\n ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth - charSpacing,\n this.fontSize / 15,\n );\n topOffset += heightOfLine;\n }\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n }\n\n /**\n * return font declaration string for canvas context\n * @param {Object} [styleObject] object\n * @returns {String} font declaration formatted for canvas context.\n */\n _getFontDeclaration(\n {\n fontFamily = this.fontFamily,\n fontStyle = this.fontStyle,\n fontWeight = this.fontWeight,\n fontSize = this.fontSize,\n }: Partial<\n Pick<\n TextStyleDeclaration,\n 'fontFamily' | 'fontStyle' | 'fontWeight' | 'fontSize'\n >\n > = {},\n forMeasuring?: boolean,\n ): string {\n const parsedFontFamily =\n fontFamily.includes(\"'\") ||\n fontFamily.includes('\"') ||\n fontFamily.includes(',') ||\n FabricText.genericFonts.includes(fontFamily.toLowerCase())\n ? fontFamily\n : `\"${fontFamily}\"`;\n return [\n fontStyle,\n fontWeight,\n `${forMeasuring ? this.CACHE_FONT_SIZE : fontSize}px`,\n parsedFontFamily,\n ].join(' ');\n }\n\n /**\n * Renders text instance on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render(ctx: CanvasRenderingContext2D) {\n if (!this.visible) {\n return;\n }\n if (\n this.canvas &&\n this.canvas.skipOffscreen &&\n !this.group &&\n !this.isOnScreen()\n ) {\n return;\n }\n if (this._forceClearCache) {\n this.initDimensions();\n }\n super.render(ctx);\n }\n\n /**\n * Override this method to customize grapheme splitting\n * @todo the util `graphemeSplit` needs to be injectable in some way.\n * is more comfortable to inject the correct util rather than having to override text\n * in the middle of the prototype chain\n * @param {string} value\n * @returns {string[]} array of graphemes\n */\n graphemeSplit(value: string): string[] {\n return graphemeSplit(value);\n }\n\n /**\n * Returns the text as an array of lines.\n * @param {String} text text to split\n * @returns Lines in the text\n */\n _splitTextIntoLines(text: string): TextLinesInfo {\n const lines = text.split(this._reNewline),\n newLines = new Array<string[]>(lines.length),\n newLine = ['\\n'];\n let newText: string[] = [];\n for (let i = 0; i < lines.length; i++) {\n newLines[i] = this.graphemeSplit(lines[i]);\n newText = newText.concat(newLines[i], newLine);\n }\n newText.pop();\n return {\n _unwrappedLines: newLines,\n lines: lines,\n graphemeText: newText,\n graphemeLines: newLines,\n };\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject([...additionalProps, ...propertiesToInclude] as K[]),\n styles: stylesToArray(this.styles, this.text),\n ...(this.path ? { path: this.path.toObject() } : {}),\n };\n }\n\n set(key: string | any, value?: any) {\n const { textLayoutProperties } = this.constructor as typeof FabricText;\n super.set(key, value);\n let needsDims = false;\n let isAddingPath = false;\n if (typeof key === 'object') {\n for (const _key in key) {\n if (_key === 'path') {\n this.setPathInfo();\n }\n needsDims = needsDims || textLayoutProperties.includes(_key);\n isAddingPath = isAddingPath || _key === 'path';\n }\n } else {\n needsDims = textLayoutProperties.includes(key);\n isAddingPath = key === 'path';\n }\n if (isAddingPath) {\n this.setPathInfo();\n }\n if (needsDims && this.initialized) {\n this.initDimensions();\n this.setCoords();\n }\n return this;\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity\n */\n complexity(): number {\n return 1;\n }\n\n static genericFonts = [\n 'sans-serif',\n 'serif',\n 'cursive',\n 'fantasy',\n 'monospace',\n ];\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link FabricText.fromElement})\n * @static\n * @memberOf Text\n * @see: http://www.w3.org/TR/SVG/text.html#TextElement\n */\n static ATTRIBUTE_NAMES = SHARED_ATTRIBUTES.concat(\n 'x',\n 'y',\n 'dx',\n 'dy',\n 'font-family',\n 'font-style',\n 'font-weight',\n 'font-size',\n 'letter-spacing',\n 'text-decoration',\n 'text-anchor',\n );\n\n /**\n * Returns FabricText instance from an SVG element (<b>not yet implemented</b>)\n * @static\n * @memberOf Text\n * @param {HTMLElement} element Element to parse\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const parsedAttributes = parseAttributes(\n element,\n FabricText.ATTRIBUTE_NAMES,\n cssRules,\n );\n\n const {\n textAnchor = LEFT as typeof LEFT | typeof CENTER | typeof RIGHT,\n textDecoration = '',\n dx = 0,\n dy = 0,\n top = 0,\n left = 0,\n fontSize = DEFAULT_SVG_FONT_SIZE,\n strokeWidth = 1,\n ...restOfOptions\n } = { ...options, ...parsedAttributes };\n\n const textContent = (element.textContent || '')\n .replace(/^\\s+|\\s+$|\\n+/g, '')\n .replace(/\\s+/g, ' ');\n\n // this code here is probably the usual issue for SVG center find\n // this can later looked at again and probably removed.\n\n const text = new this(textContent, {\n left: left + dx,\n top: top + dy,\n underline: textDecoration.includes('underline'),\n overline: textDecoration.includes('overline'),\n linethrough: textDecoration.includes('line-through'),\n // we initialize this as 0\n strokeWidth: 0,\n fontSize,\n ...restOfOptions,\n }),\n textHeightScaleFactor = text.getScaledHeight() / text.height,\n lineHeightDiff =\n (text.height + text.strokeWidth) * text.lineHeight - text.height,\n scaledDiff = lineHeightDiff * textHeightScaleFactor,\n textHeight = text.getScaledHeight() + scaledDiff;\n\n let offX = 0;\n /*\n Adjust positioning:\n x/y attributes in SVG correspond to the bottom-left corner of text bounding box\n fabric output by default at top, left.\n */\n if (textAnchor === CENTER) {\n offX = text.getScaledWidth() / 2;\n }\n if (textAnchor === RIGHT) {\n offX = text.getScaledWidth();\n }\n text.set({\n left: text.left - offX,\n top:\n text.top -\n (textHeight - text.fontSize * (0.07 + text._fontSizeFraction)) /\n text.lineHeight,\n strokeWidth,\n });\n return text;\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns FabricText instance from an object representation\n * @param {Object} object plain js Object to create an instance from\n * @returns {Promise<FabricText>}\n */\n static fromObject<\n T extends TOptions<SerializedTextProps>,\n S extends FabricText,\n >(object: T) {\n return this._fromObject<S>(\n {\n ...object,\n styles: stylesFromArray(object.styles || {}, object.text),\n },\n {\n extraParam: 'text',\n },\n );\n }\n}\n\napplyMixins(FabricText, [TextSVGExportMixin]);\nclassRegistry.setClass(FabricText);\nclassRegistry.setSVGClass(FabricText);\n"],"names":["measuringContext","getMeasuringContext","canvas","createCanvasElement","width","height","getContext","FabricText","StyledText","getDefaults","_objectSpread","ownDefaults","constructor","text","options","_defineProperty","Object","assign","setOptions","styles","initialized","path","setPathInfo","initDimensions","setCoords","segmentsInfo","getPathSegmentsInfo","_splitText","newLines","_splitTextIntoLines","textLines","lines","_textLines","graphemeLines","_unwrappedTextLines","_unwrappedLines","_text","graphemeText","_clearCache","dirty","calcTextWidth","cursorWidth","MIN_TEXT_WIDTH","calcTextHeight","textAlign","includes","JUSTIFY","enlargeSpaces","diffSpace","currentLineWidth","numberOfSpaces","accumulatedSpace","line","charBound","spaces","i","len","length","isEndOfWrapping","getLineWidth","match","_reSpacesAndTabs","j","__charBounds","_reSpaceAndTab","test","kernedWidth","left","lineIndex","missingNewlineOffset","_lineIndex","get2DCursorLocation","selectionStart","skipWrapping","charIndex","toString","concat","complexity","fontFamily","_getCacheCanvasDimensions","dims","fontSize","zoomX","zoomY","_render","ctx","isNotVisible","_setTextStyles","_renderTextLinesBackground","_renderTextDecoration","_renderText","paintFirst","STROKE","_renderTextStroke","_renderTextFill","charStyle","forMeasuring","textBaseline","pathAlign","CENTER","TOP","BOTTOM","font","_getFontDeclaration","maxWidth","_renderTextLine","method","top","_renderChars","textBackgroundColor","styleHas","originalFill","fillStyle","leftOffset","_getLeftOffset","lineTopOffset","_getTopOffset","heightOfLine","getHeightOfLine","jlen","lineLeftOffset","_getLineLeftOffset","boxWidth","boxStart","drawStart","currentColor","lastColor","getValueOfPropertyAt","charBox","save","translate","renderLeft","renderTop","rotate","angle","fillRect","lineHeight","_fontSizeFraction","restore","direction","_removeShadow","_measureChar","_char","previousChar","prevCharStyle","fontCache","cache","getFontCache","fontDeclaration","couple","stylesAreEqual","fontMultiplier","CACHE_FONT_SIZE","coupleWidth","previousWidth","undefined","measureText","getHeightOfChar","measureLine","lineInfo","_measureLine","charSpacing","_getWidthOfCharSpacing","prevGrapheme","graphemeInfo","reverse","pathSide","RIGHT","llength","lineBounds","Array","grapheme","_getGraphemeBox","deltaY","positionInPath","totalPathLength","LEFT","pathStartOffset","_setGraphemeOnPath","numOfSpaces","centerPosition","info","getPointOnPath","x","pathOffset","y","Math","PI","skipLeft","style","getCompleteStyleDeclaration","prevStyle","box","previousBox","__lineHeights","maxHeight","max","_fontSizeMult","_renderTextCommon","lineHeights","fill","FILL","stroke","strokeWidth","isEmptyStyles","shadow","affectStroke","_setLineDash","strokeDashArray","beginPath","closePath","isJustify","shortCut","isLtr","sign","currentDirection","actualStyle","nextStyle","charsToRender","timeToRender","drawingLeft","setAttribute","_renderChar","join","hasStyleChanged","_applyPatternGradientTransformText","filler","pCanvas","pCtx","moveTo","lineTo","toLive","_applyPatternGradientTransform","createPattern","handleFiller","property","offsetX","offsetY","isFiller","gradientUnits","gradientTransform","patternTransform","_setStrokeStyles","_ref","lineWidth","lineCap","strokeLineCap","lineDashOffset","strokeDashOffset","lineJoin","strokeLineJoin","miterLimit","strokeMiterLimit","_setFillStyles","_ref2","decl","_getStyleDeclaration","fullDecl","shouldFill","shouldStroke","fillOffsets","fillText","strokeOffsets","strokeText","setSuperscript","start","end","_setScript","superscript","setSubscript","subscript","schema","loc","dy","size","baseline","setSelectionStyles","lineDiff","JUSTIFY_CENTER","JUSTIFY_RIGHT","JUSTIFY_LEFT","_forceClearCache","__lineWidths","_charStyle$property","type","topOffset","offsets","lastDecoration","lastFill","currentDecoration","currentFill","currentSize","currentDy","fontStyle","fontWeight","arguments","parsedFontFamily","genericFonts","toLowerCase","render","visible","skipOffscreen","group","isOnScreen","graphemeSplit","value","split","_reNewline","newLine","newText","pop","toObject","propertiesToInclude","additionalProps","stylesToArray","set","key","textLayoutProperties","needsDims","isAddingPath","_key","fromElement","element","cssRules","parsedAttributes","parseAttributes","ATTRIBUTE_NAMES","_options$parsedAttrib","textAnchor","textDecoration","dx","DEFAULT_SVG_FONT_SIZE","restOfOptions","_objectWithoutProperties","_excluded","textContent","replace","underline","overline","linethrough","textHeightScaleFactor","getScaledHeight","lineHeightDiff","scaledDiff","textHeight","offX","getScaledWidth","fromObject","object","_fromObject","stylesFromArray","extraParam","cacheProperties","textDefaultValues","SHARED_ATTRIBUTES","applyMixins","TextSVGExportMixin","classRegistry","setClass","setSVGClass"],"mappings":"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"}