fabric 7.1.0 → 7.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/.husky/pre-commit +1 -0
  2. package/CHANGELOG.md +13 -0
  3. package/dist/extensions/cropping_controls/croppingControls.d.ts +12 -8
  4. package/dist/extensions/cropping_controls/croppingControls.d.ts.map +1 -1
  5. package/dist/extensions/cropping_controls/croppingHandlers.d.ts +19 -1
  6. package/dist/extensions/cropping_controls/croppingHandlers.d.ts.map +1 -1
  7. package/dist/extensions/cropping_controls/enterCropMode.d.ts.map +1 -1
  8. package/dist/index.js +189 -160
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.min.js +1 -1
  11. package/dist/index.min.js.map +1 -1
  12. package/dist/index.min.mjs +1 -1
  13. package/dist/index.min.mjs.map +1 -1
  14. package/dist/index.mjs +189 -160
  15. package/dist/index.mjs.map +1 -1
  16. package/dist/index.node.cjs +189 -160
  17. package/dist/index.node.cjs.map +1 -1
  18. package/dist/index.node.mjs +189 -160
  19. package/dist/index.node.mjs.map +1 -1
  20. package/dist/package.json.min.mjs +1 -1
  21. package/dist/package.json.mjs +1 -1
  22. package/dist/src/EventTypeDefs.d.ts +3 -0
  23. package/dist/src/EventTypeDefs.d.ts.map +1 -1
  24. package/dist/src/Pattern/Pattern.d.ts.map +1 -1
  25. package/dist/src/Pattern/Pattern.min.mjs +1 -1
  26. package/dist/src/Pattern/Pattern.min.mjs.map +1 -1
  27. package/dist/src/Pattern/Pattern.mjs +2 -1
  28. package/dist/src/Pattern/Pattern.mjs.map +1 -1
  29. package/dist/src/Shadow.d.ts +1 -1
  30. package/dist/src/Shadow.d.ts.map +1 -1
  31. package/dist/src/Shadow.min.mjs +1 -1
  32. package/dist/src/Shadow.min.mjs.map +1 -1
  33. package/dist/src/Shadow.mjs +5 -4
  34. package/dist/src/Shadow.mjs.map +1 -1
  35. package/dist/src/canvas/CanvasOptions.d.ts.map +1 -1
  36. package/dist/src/canvas/CanvasOptions.min.mjs.map +1 -1
  37. package/dist/src/canvas/CanvasOptions.mjs.map +1 -1
  38. package/dist/src/canvas/SelectableCanvas.d.ts +2 -0
  39. package/dist/src/canvas/SelectableCanvas.d.ts.map +1 -1
  40. package/dist/src/canvas/SelectableCanvas.min.mjs +1 -1
  41. package/dist/src/canvas/SelectableCanvas.min.mjs.map +1 -1
  42. package/dist/src/canvas/SelectableCanvas.mjs +6 -1
  43. package/dist/src/canvas/SelectableCanvas.mjs.map +1 -1
  44. package/dist/src/canvas/StaticCanvas.d.ts.map +1 -1
  45. package/dist/src/canvas/StaticCanvas.min.mjs +1 -1
  46. package/dist/src/canvas/StaticCanvas.min.mjs.map +1 -1
  47. package/dist/src/canvas/StaticCanvas.mjs +3 -1
  48. package/dist/src/canvas/StaticCanvas.mjs.map +1 -1
  49. package/dist/src/canvas/StaticCanvasOptions.d.ts.map +1 -1
  50. package/dist/src/canvas/StaticCanvasOptions.min.mjs.map +1 -1
  51. package/dist/src/canvas/StaticCanvasOptions.mjs.map +1 -1
  52. package/dist/src/controls/Control.d.ts +9 -1
  53. package/dist/src/controls/Control.d.ts.map +1 -1
  54. package/dist/src/controls/Control.min.mjs +1 -1
  55. package/dist/src/controls/Control.min.mjs.map +1 -1
  56. package/dist/src/controls/Control.mjs +8 -0
  57. package/dist/src/controls/Control.mjs.map +1 -1
  58. package/dist/src/gradient/Gradient.d.ts.map +1 -1
  59. package/dist/src/gradient/Gradient.min.mjs +1 -1
  60. package/dist/src/gradient/Gradient.min.mjs.map +1 -1
  61. package/dist/src/gradient/Gradient.mjs +19 -6
  62. package/dist/src/gradient/Gradient.mjs.map +1 -1
  63. package/dist/src/shapes/Circle.d.ts.map +1 -1
  64. package/dist/src/shapes/Circle.min.mjs +1 -1
  65. package/dist/src/shapes/Circle.min.mjs.map +1 -1
  66. package/dist/src/shapes/Circle.mjs +10 -7
  67. package/dist/src/shapes/Circle.mjs.map +1 -1
  68. package/dist/src/shapes/Ellipse.d.ts.map +1 -1
  69. package/dist/src/shapes/Ellipse.min.mjs +1 -1
  70. package/dist/src/shapes/Ellipse.min.mjs.map +1 -1
  71. package/dist/src/shapes/Ellipse.mjs +2 -1
  72. package/dist/src/shapes/Ellipse.mjs.map +1 -1
  73. package/dist/src/shapes/Group.d.ts.map +1 -1
  74. package/dist/src/shapes/Group.min.mjs +1 -1
  75. package/dist/src/shapes/Group.min.mjs.map +1 -1
  76. package/dist/src/shapes/Group.mjs +2 -1
  77. package/dist/src/shapes/Group.mjs.map +1 -1
  78. package/dist/src/shapes/IText/IText.d.ts.map +1 -1
  79. package/dist/src/shapes/IText/IText.min.mjs.map +1 -1
  80. package/dist/src/shapes/IText/IText.mjs.map +1 -1
  81. package/dist/src/shapes/Image.d.ts +1 -1
  82. package/dist/src/shapes/Image.d.ts.map +1 -1
  83. package/dist/src/shapes/Image.min.mjs +1 -1
  84. package/dist/src/shapes/Image.min.mjs.map +1 -1
  85. package/dist/src/shapes/Image.mjs +4 -3
  86. package/dist/src/shapes/Image.mjs.map +1 -1
  87. package/dist/src/shapes/Line.d.ts.map +1 -1
  88. package/dist/src/shapes/Line.min.mjs +1 -1
  89. package/dist/src/shapes/Line.min.mjs.map +1 -1
  90. package/dist/src/shapes/Line.mjs +6 -10
  91. package/dist/src/shapes/Line.mjs.map +1 -1
  92. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
  93. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs +1 -1
  94. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs.map +1 -1
  95. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs +5 -4
  96. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs.map +1 -1
  97. package/dist/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
  98. package/dist/src/shapes/Object/InteractiveObject.min.mjs.map +1 -1
  99. package/dist/src/shapes/Object/InteractiveObject.mjs.map +1 -1
  100. package/dist/src/shapes/Object/Object.d.ts.map +1 -1
  101. package/dist/src/shapes/Object/Object.min.mjs +1 -1
  102. package/dist/src/shapes/Object/Object.min.mjs.map +1 -1
  103. package/dist/src/shapes/Object/Object.mjs +3 -0
  104. package/dist/src/shapes/Object/Object.mjs.map +1 -1
  105. package/dist/src/shapes/Object/types/FabricObjectProps.d.ts.map +1 -1
  106. package/dist/src/shapes/Object/types/ObjectProps.d.ts.map +1 -1
  107. package/dist/src/shapes/Path.d.ts.map +1 -1
  108. package/dist/src/shapes/Path.min.mjs.map +1 -1
  109. package/dist/src/shapes/Path.mjs +1 -2
  110. package/dist/src/shapes/Path.mjs.map +1 -1
  111. package/dist/src/shapes/Polyline.d.ts.map +1 -1
  112. package/dist/src/shapes/Polyline.min.mjs +1 -1
  113. package/dist/src/shapes/Polyline.min.mjs.map +1 -1
  114. package/dist/src/shapes/Polyline.mjs +10 -6
  115. package/dist/src/shapes/Polyline.mjs.map +1 -1
  116. package/dist/src/shapes/Rect.d.ts.map +1 -1
  117. package/dist/src/shapes/Rect.min.mjs +1 -1
  118. package/dist/src/shapes/Rect.min.mjs.map +1 -1
  119. package/dist/src/shapes/Rect.mjs +2 -1
  120. package/dist/src/shapes/Rect.mjs.map +1 -1
  121. package/dist/src/shapes/Text/Text.d.ts.map +1 -1
  122. package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
  123. package/dist/src/shapes/Text/Text.mjs.map +1 -1
  124. package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs +1 -1
  125. package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs.map +1 -1
  126. package/dist/src/shapes/Text/TextSVGExportMixin.mjs +5 -5
  127. package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +1 -1
  128. package/dist/src/shapes/Textbox.d.ts.map +1 -1
  129. package/dist/src/shapes/Textbox.min.mjs.map +1 -1
  130. package/dist/src/shapes/Textbox.mjs.map +1 -1
  131. package/dist/src/shapes/Triangle.d.ts.map +1 -1
  132. package/dist/src/shapes/Triangle.min.mjs.map +1 -1
  133. package/dist/src/shapes/Triangle.mjs.map +1 -1
  134. package/dist/src/util/lang_string.d.ts +1 -1
  135. package/dist/src/util/lang_string.d.ts.map +1 -1
  136. package/dist/src/util/lang_string.min.mjs +1 -1
  137. package/dist/src/util/lang_string.min.mjs.map +1 -1
  138. package/dist/src/util/lang_string.mjs +1 -1
  139. package/dist/src/util/lang_string.mjs.map +1 -1
  140. package/dist/src/util/misc/svgParsing.d.ts.map +1 -1
  141. package/dist/src/util/misc/svgParsing.min.mjs +1 -1
  142. package/dist/src/util/misc/svgParsing.min.mjs.map +1 -1
  143. package/dist/src/util/misc/svgParsing.mjs +2 -1
  144. package/dist/src/util/misc/svgParsing.mjs.map +1 -1
  145. package/dist-extensions/cropping_controls/croppingControls.mjs +39 -9
  146. package/dist-extensions/cropping_controls/croppingControls.mjs.map +1 -1
  147. package/dist-extensions/cropping_controls/croppingHandlers.mjs +84 -2
  148. package/dist-extensions/cropping_controls/croppingHandlers.mjs.map +1 -1
  149. package/dist-extensions/cropping_controls/enterCropMode.mjs +7 -2
  150. package/dist-extensions/cropping_controls/enterCropMode.mjs.map +1 -1
  151. package/dist-extensions/extensions/cropping_controls/croppingControls.d.ts +12 -8
  152. package/dist-extensions/extensions/cropping_controls/croppingControls.d.ts.map +1 -1
  153. package/dist-extensions/extensions/cropping_controls/croppingHandlers.d.ts +19 -1
  154. package/dist-extensions/extensions/cropping_controls/croppingHandlers.d.ts.map +1 -1
  155. package/dist-extensions/extensions/cropping_controls/enterCropMode.d.ts.map +1 -1
  156. package/dist-extensions/fabric-extensions.min.js +1 -1
  157. package/dist-extensions/fabric-extensions.min.js.map +1 -1
  158. package/dist-extensions/src/EventTypeDefs.d.ts +3 -0
  159. package/dist-extensions/src/EventTypeDefs.d.ts.map +1 -1
  160. package/dist-extensions/src/Pattern/Pattern.d.ts.map +1 -1
  161. package/dist-extensions/src/Shadow.d.ts +1 -1
  162. package/dist-extensions/src/Shadow.d.ts.map +1 -1
  163. package/dist-extensions/src/canvas/CanvasOptions.d.ts.map +1 -1
  164. package/dist-extensions/src/canvas/SelectableCanvas.d.ts +2 -0
  165. package/dist-extensions/src/canvas/SelectableCanvas.d.ts.map +1 -1
  166. package/dist-extensions/src/canvas/StaticCanvas.d.ts.map +1 -1
  167. package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts.map +1 -1
  168. package/dist-extensions/src/controls/Control.d.ts +9 -1
  169. package/dist-extensions/src/controls/Control.d.ts.map +1 -1
  170. package/dist-extensions/src/gradient/Gradient.d.ts.map +1 -1
  171. package/dist-extensions/src/shapes/Circle.d.ts.map +1 -1
  172. package/dist-extensions/src/shapes/Ellipse.d.ts.map +1 -1
  173. package/dist-extensions/src/shapes/Group.d.ts.map +1 -1
  174. package/dist-extensions/src/shapes/IText/IText.d.ts.map +1 -1
  175. package/dist-extensions/src/shapes/Image.d.ts.map +1 -1
  176. package/dist-extensions/src/shapes/Line.d.ts.map +1 -1
  177. package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +1 -1
  178. package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
  179. package/dist-extensions/src/shapes/Object/Object.d.ts.map +1 -1
  180. package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts.map +1 -1
  181. package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts.map +1 -1
  182. package/dist-extensions/src/shapes/Path.d.ts +1 -1
  183. package/dist-extensions/src/shapes/Path.d.ts.map +1 -1
  184. package/dist-extensions/src/shapes/Polyline.d.ts.map +1 -1
  185. package/dist-extensions/src/shapes/Rect.d.ts.map +1 -1
  186. package/dist-extensions/src/shapes/Text/Text.d.ts.map +1 -1
  187. package/dist-extensions/src/shapes/Textbox.d.ts.map +1 -1
  188. package/dist-extensions/src/shapes/Triangle.d.ts.map +1 -1
  189. package/dist-extensions/src/util/lang_string.d.ts +1 -1
  190. package/dist-extensions/src/util/lang_string.d.ts.map +1 -1
  191. package/dist-extensions/src/util/misc/svgParsing.d.ts.map +1 -1
  192. package/eslint.config.mjs +2 -0
  193. package/extensions/cropping_controls/croppingControls.spec.ts +65 -27
  194. package/extensions/cropping_controls/croppingControls.ts +40 -8
  195. package/extensions/cropping_controls/croppingHandlers.spec.ts +355 -46
  196. package/extensions/cropping_controls/croppingHandlers.ts +123 -0
  197. package/extensions/cropping_controls/enterCropMode.ts +6 -2
  198. package/package.json +17 -8
  199. package/src/ClassRegistry.spec.ts +18 -19
  200. package/src/EventTypeDefs.ts +13 -11
  201. package/src/Pattern/Pattern.spec.ts +12 -0
  202. package/src/Pattern/Pattern.ts +3 -2
  203. package/src/Shadow.ts +9 -8
  204. package/src/brushes/PencilBrush.spec.ts +11 -11
  205. package/src/canvas/Canvas-dispose.spec.ts +8 -7
  206. package/src/canvas/Canvas.spec.ts +27 -29
  207. package/src/canvas/CanvasOptions.ts +2 -1
  208. package/src/canvas/SelectableCanvas.ts +11 -4
  209. package/src/canvas/StaticCanvas.spec.ts +20 -0
  210. package/src/canvas/StaticCanvas.ts +7 -4
  211. package/src/canvas/StaticCanvasOptions.ts +1 -3
  212. package/src/controls/Control.ts +24 -1
  213. package/src/gradient/Gradient.spec.ts +101 -46
  214. package/src/gradient/Gradient.ts +27 -14
  215. package/src/shapes/Circle.spec.ts +10 -39
  216. package/src/shapes/Circle.ts +11 -11
  217. package/src/shapes/Ellipse.spec.ts +8 -37
  218. package/src/shapes/Ellipse.ts +7 -7
  219. package/src/shapes/Group.ts +3 -3
  220. package/src/shapes/IText/IText-click-behavior.spec.ts +36 -49
  221. package/src/shapes/IText/IText.ts +5 -6
  222. package/src/shapes/IText/__snapshots__/ITextBehavior.test.ts.snap +6 -6
  223. package/src/shapes/Image.spec.ts +17 -33
  224. package/src/shapes/Image.ts +15 -11
  225. package/src/shapes/Line.spec.ts +4 -30
  226. package/src/shapes/Line.ts +11 -16
  227. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +11 -4
  228. package/src/shapes/Object/InteractiveObject.ts +4 -4
  229. package/src/shapes/Object/Object.ts +6 -5
  230. package/src/shapes/Object/objectSvgExport.spec.ts +112 -0
  231. package/src/shapes/Object/types/FabricObjectProps.ts +1 -4
  232. package/src/shapes/Object/types/ObjectProps.ts +1 -3
  233. package/src/shapes/Path.spec.ts +4 -27
  234. package/src/shapes/Path.ts +2 -4
  235. package/src/shapes/Polygon.spec.ts +4 -31
  236. package/src/shapes/Polyline.spec.ts +4 -31
  237. package/src/shapes/Polyline.ts +11 -12
  238. package/src/shapes/Rect.spec.ts +25 -33
  239. package/src/shapes/Rect.ts +7 -7
  240. package/src/shapes/Text/Text.spec.ts +3 -32
  241. package/src/shapes/Text/Text.ts +5 -6
  242. package/src/shapes/Text/TextSVGExportMixin.ts +14 -14
  243. package/src/shapes/Text/__snapshots__/Text.spec.ts.snap +1 -1
  244. package/src/shapes/Textbox.spec.ts +5 -5
  245. package/src/shapes/Textbox.ts +6 -5
  246. package/src/shapes/Triangle.ts +4 -4
  247. package/src/shapes/__snapshots__/Image.spec.ts.snap +4 -4
  248. package/src/shapes/__snapshots__/Textbox.spec.ts.snap +5 -5
  249. package/src/util/lang_string.ts +3 -2
  250. package/src/util/misc/svgParsing.ts +2 -1
  251. package/tsconfig.spec.json +1 -0
  252. package/vitest.config.ts +12 -2
  253. package/vitest.extend.ts +6 -2
@@ -1,5 +1,5 @@
1
1
  import { createImageCroppingControls } from './croppingControls.mjs';
2
- import { cropPanMoveHandler } from './croppingHandlers.mjs';
2
+ import { cropPanMoveHandler, renderGhostImage } from './croppingHandlers.mjs';
3
3
 
4
4
  /**
5
5
  * Coordinates the change to image to enter crop mode and returns
@@ -12,14 +12,19 @@ const enterCropMode = function enterCropMode(_ref) {
12
12
  } = _ref;
13
13
  const fabricImage = target;
14
14
  const {
15
- controls
15
+ controls,
16
+ padding
16
17
  } = fabricImage;
18
+ fabricImage.padding = 0;
17
19
  fabricImage.controls = createImageCroppingControls();
18
20
  fabricImage.on('moving', cropPanMoveHandler);
21
+ fabricImage.on('before:render', renderGhostImage);
19
22
  fabricImage.setCoords();
20
23
  const exitCropMode = () => {
21
24
  var _fabricImage$canvas;
25
+ fabricImage.padding = padding;
22
26
  fabricImage.off('moving', cropPanMoveHandler);
27
+ fabricImage.off('before:render', renderGhostImage);
23
28
  fabricImage.controls = controls;
24
29
  fabricImage.setCoords();
25
30
  fabricImage.once('mousedblclick', enterCropMode);
@@ -1 +1 @@
1
- {"version":3,"file":"enterCropMode.mjs","sources":["../../extensions/cropping_controls/enterCropMode.ts"],"sourcesContent":["import { type FabricImage, type TPointerEventInfo } from 'fabric';\nimport { createImageCroppingControls } from './croppingControls';\nimport { cropPanMoveHandler } from './croppingHandlers';\n/**\n * Coordinates the change to image to enter crop mode and returns\n * a function to exit crop mode\n */\nexport const enterCropMode = function enterCropMode(\n this: (args: TPointerEventInfo) => void,\n { target }: TPointerEventInfo,\n) {\n const fabricImage = target as FabricImage;\n const { controls } = fabricImage;\n fabricImage.controls = createImageCroppingControls();\n fabricImage.on('moving', cropPanMoveHandler);\n fabricImage.setCoords();\n const exitCropMode = () => {\n fabricImage.off('moving', cropPanMoveHandler);\n fabricImage.controls = controls;\n fabricImage.setCoords();\n fabricImage.once('mousedblclick', enterCropMode);\n fabricImage.canvas?.requestRenderAll();\n };\n fabricImage.once('mousedblclick', exitCropMode);\n fabricImage.canvas?.requestRenderAll();\n};\n"],"names":["enterCropMode","_ref","_fabricImage$canvas2","target","fabricImage","controls","createImageCroppingControls","on","cropPanMoveHandler","setCoords","exitCropMode","_fabricImage$canvas","off","once","canvas","requestRenderAll"],"mappings":";;;AAGA;AACA;AACA;AACA;MACaA,aAAa,GAAG,SAASA,aAAaA,CAAAC,IAAA,EAGjD;AAAA,EAAA,IAAAC,oBAAA;EAAA,IADA;AAAEC,IAAAA;AAA0B,GAAC,GAAAF,IAAA;EAE7B,MAAMG,WAAW,GAAGD,MAAqB;EACzC,MAAM;AAAEE,IAAAA;AAAS,GAAC,GAAGD,WAAW;AAChCA,EAAAA,WAAW,CAACC,QAAQ,GAAGC,2BAA2B,EAAE;AACpDF,EAAAA,WAAW,CAACG,EAAE,CAAC,QAAQ,EAAEC,kBAAkB,CAAC;EAC5CJ,WAAW,CAACK,SAAS,EAAE;EACvB,MAAMC,YAAY,GAAGA,MAAM;AAAA,IAAA,IAAAC,mBAAA;AACzBP,IAAAA,WAAW,CAACQ,GAAG,CAAC,QAAQ,EAAEJ,kBAAkB,CAAC;IAC7CJ,WAAW,CAACC,QAAQ,GAAGA,QAAQ;IAC/BD,WAAW,CAACK,SAAS,EAAE;AACvBL,IAAAA,WAAW,CAACS,IAAI,CAAC,eAAe,EAAEb,aAAa,CAAC;AAChD,IAAA,CAAAW,mBAAA,GAAAP,WAAW,CAACU,MAAM,MAAA,IAAA,IAAAH,mBAAA,KAAA,MAAA,IAAlBA,mBAAA,CAAoBI,gBAAgB,EAAE;EACxC,CAAC;AACDX,EAAAA,WAAW,CAACS,IAAI,CAAC,eAAe,EAAEH,YAAY,CAAC;AAC/C,EAAA,CAAAR,oBAAA,GAAAE,WAAW,CAACU,MAAM,MAAA,IAAA,IAAAZ,oBAAA,KAAA,MAAA,IAAlBA,oBAAA,CAAoBa,gBAAgB,EAAE;AACxC;;;;"}
1
+ {"version":3,"file":"enterCropMode.mjs","sources":["../../extensions/cropping_controls/enterCropMode.ts"],"sourcesContent":["import { type FabricImage, type TPointerEventInfo } from 'fabric';\nimport { createImageCroppingControls } from './croppingControls';\nimport { cropPanMoveHandler, renderGhostImage } from './croppingHandlers';\n/**\n * Coordinates the change to image to enter crop mode and returns\n * a function to exit crop mode\n */\nexport const enterCropMode = function enterCropMode(\n this: (args: TPointerEventInfo) => void,\n { target }: TPointerEventInfo,\n) {\n const fabricImage = target as FabricImage;\n const { controls, padding } = fabricImage;\n fabricImage.padding = 0;\n fabricImage.controls = createImageCroppingControls();\n fabricImage.on('moving', cropPanMoveHandler);\n fabricImage.on('before:render', renderGhostImage);\n fabricImage.setCoords();\n const exitCropMode = () => {\n fabricImage.padding = padding;\n fabricImage.off('moving', cropPanMoveHandler);\n fabricImage.off('before:render', renderGhostImage);\n fabricImage.controls = controls;\n fabricImage.setCoords();\n fabricImage.once('mousedblclick', enterCropMode);\n fabricImage.canvas?.requestRenderAll();\n };\n fabricImage.once('mousedblclick', exitCropMode);\n fabricImage.canvas?.requestRenderAll();\n};\n"],"names":["enterCropMode","_ref","_fabricImage$canvas2","target","fabricImage","controls","padding","createImageCroppingControls","on","cropPanMoveHandler","renderGhostImage","setCoords","exitCropMode","_fabricImage$canvas","off","once","canvas","requestRenderAll"],"mappings":";;;AAGA;AACA;AACA;AACA;MACaA,aAAa,GAAG,SAASA,aAAaA,CAAAC,IAAA,EAGjD;AAAA,EAAA,IAAAC,oBAAA;EAAA,IADA;AAAEC,IAAAA;AAA0B,GAAC,GAAAF,IAAA;EAE7B,MAAMG,WAAW,GAAGD,MAAqB;EACzC,MAAM;IAAEE,QAAQ;AAAEC,IAAAA;AAAQ,GAAC,GAAGF,WAAW;EACzCA,WAAW,CAACE,OAAO,GAAG,CAAC;AACvBF,EAAAA,WAAW,CAACC,QAAQ,GAAGE,2BAA2B,EAAE;AACpDH,EAAAA,WAAW,CAACI,EAAE,CAAC,QAAQ,EAAEC,kBAAkB,CAAC;AAC5CL,EAAAA,WAAW,CAACI,EAAE,CAAC,eAAe,EAAEE,gBAAgB,CAAC;EACjDN,WAAW,CAACO,SAAS,EAAE;EACvB,MAAMC,YAAY,GAAGA,MAAM;AAAA,IAAA,IAAAC,mBAAA;IACzBT,WAAW,CAACE,OAAO,GAAGA,OAAO;AAC7BF,IAAAA,WAAW,CAACU,GAAG,CAAC,QAAQ,EAAEL,kBAAkB,CAAC;AAC7CL,IAAAA,WAAW,CAACU,GAAG,CAAC,eAAe,EAAEJ,gBAAgB,CAAC;IAClDN,WAAW,CAACC,QAAQ,GAAGA,QAAQ;IAC/BD,WAAW,CAACO,SAAS,EAAE;AACvBP,IAAAA,WAAW,CAACW,IAAI,CAAC,eAAe,EAAEf,aAAa,CAAC;AAChD,IAAA,CAAAa,mBAAA,GAAAT,WAAW,CAACY,MAAM,MAAA,IAAA,IAAAH,mBAAA,KAAA,MAAA,IAAlBA,mBAAA,CAAoBI,gBAAgB,EAAE;EACxC,CAAC;AACDb,EAAAA,WAAW,CAACW,IAAI,CAAC,eAAe,EAAEH,YAAY,CAAC;AAC/C,EAAA,CAAAV,oBAAA,GAAAE,WAAW,CAACY,MAAM,MAAA,IAAA,IAAAd,oBAAA,KAAA,MAAA,IAAlBA,oBAAA,CAAoBe,gBAAgB,EAAE;AACxC;;;;"}
@@ -1,12 +1,16 @@
1
1
  import { Control } from 'fabric';
2
2
  export declare const createImageCroppingControls: () => {
3
- ml: Control;
4
- mr: Control;
5
- mb: Control;
6
- mt: Control;
7
- tl: Control;
8
- tr: Control;
9
- bl: Control;
10
- br: Control;
3
+ tls: Control;
4
+ brs: Control;
5
+ trs: Control;
6
+ bls: Control;
7
+ mlc: Control;
8
+ mrc: Control;
9
+ mbc: Control;
10
+ mtc: Control;
11
+ tlc: Control;
12
+ trc: Control;
13
+ blc: Control;
14
+ brc: Control;
11
15
  };
12
16
  //# sourceMappingURL=croppingControls.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"croppingControls.d.ts","sourceRoot":"","sources":["../../../extensions/cropping_controls/croppingControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,QAAQ,CAAC;AAahD,eAAO,MAAM,2BAA2B;;;;;;;;;CAwGtC,CAAC"}
1
+ {"version":3,"file":"croppingControls.d.ts","sourceRoot":"","sources":["../../../extensions/cropping_controls/croppingControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,QAAQ,CAAC;AAehD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;CAsItC,CAAC"}
@@ -1,4 +1,5 @@
1
- import type { Transform, TransformActionHandler, ObjectEvents } from 'fabric';
1
+ import type { Transform, TransformActionHandler, FabricImage, ObjectEvents, Control, TMat2D } from 'fabric';
2
+ import { Point } from 'fabric';
2
3
  /**
3
4
  * Wrap controlsUtils.changeObjectWidth with image constrains
4
5
  */
@@ -18,4 +19,21 @@ export declare const changeCropY: TransformActionHandler<Transform>;
18
19
  * Keep the image steady, but moves it inside its own cropping rectangle
19
20
  */
20
21
  export declare const cropPanMoveHandler: ({ transform }: ObjectEvents["moving"]) => void;
22
+ /**
23
+ * This position handler works only for this specific use case.
24
+ * It does not support padding nor offset, and it reduces all possible positions
25
+ * to the main 4 corners only.
26
+ * Any position that is < 0 is the extreme left/top, the rest are right/bottom
27
+ */
28
+ export declare function ghostScalePositionHandler(this: Control, dim: Point, // currentDimension
29
+ finalMatrix: TMat2D, fabricObject: FabricImage): Point;
30
+ /**
31
+ * Action handler generator that handles scaling of an image in crop mode.
32
+ * The goal is to keep the current bounding box steady.
33
+ * So this action handler has its own calculations for a dynamic anchor point
34
+ */
35
+ export declare const scaleEquallyCropGenerator: (cx: number, cy: number) => TransformActionHandler;
36
+ export declare function renderGhostImage(this: FabricImage, { ctx }: {
37
+ ctx: CanvasRenderingContext2D;
38
+ }): void;
21
39
  //# sourceMappingURL=croppingHandlers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"croppingHandlers.d.ts","sourceRoot":"","sources":["../../../extensions/cropping_controls/croppingHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EACT,sBAAsB,EAEtB,YAAY,EACb,MAAM,QAAQ,CAAC;AAKhB;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,sBAoB9B,CAAC;AAEF,eAAO,MAAM,eAAe,mCAG3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,sBAoB/B,CAAC;AAEF,eAAO,MAAM,gBAAgB,mCAG5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,sBAqB9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,sBAoB9B,CAAC;AAEF,eAAO,MAAM,WAAW,mCAGvB,CAAC;AAEF,eAAO,MAAM,WAAW,mCAGvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,eAAe,YAAY,CAAC,QAAQ,CAAC,SA+BvE,CAAC"}
1
+ {"version":3,"file":"croppingHandlers.d.ts","sourceRoot":"","sources":["../../../extensions/cropping_controls/croppingHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EACT,sBAAsB,EACtB,WAAW,EACX,YAAY,EACZ,OAAO,EACP,MAAM,EACP,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAiB,KAAK,EAAQ,MAAM,QAAQ,CAAC;AAIpD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,sBAoB9B,CAAC;AAEF,eAAO,MAAM,eAAe,mCAG3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,sBAoB/B,CAAC;AAEF,eAAO,MAAM,gBAAgB,mCAG5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,sBAqB9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,sBAoB9B,CAAC;AAEF,eAAO,MAAM,WAAW,mCAGvB,CAAC;AAEF,eAAO,MAAM,WAAW,mCAGvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,eAAe,YAAY,CAAC,QAAQ,CAAC,SA+BvE,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,KAAK,EAAE,mBAAmB;AAC/B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,WAAW,SA2B1B;AAKD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GACnC,IAAI,MAAM,EAAE,IAAI,MAAM,KAAG,sBAyDzB,CAAC;AAEJ,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,WAAW,EACjB,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,EAAE,wBAAwB,CAAA;CAAE,QAU3C"}
@@ -1 +1 @@
1
- {"version":3,"file":"enterCropMode.d.ts","sourceRoot":"","sources":["../../../extensions/cropping_controls/enterCropMode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAGlE;;;GAGG;AACH,eAAO,MAAM,aAAa,GACxB,MAAM,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,EACvC,YAAY,iBAAiB,SAgB9B,CAAC"}
1
+ {"version":3,"file":"enterCropMode.d.ts","sourceRoot":"","sources":["../../../extensions/cropping_controls/enterCropMode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAGlE;;;GAGG;AACH,eAAO,MAAM,aAAa,GACxB,MAAM,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,EACvC,YAAY,iBAAiB,SAoB9B,CAAC"}
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("fabric"),require("westures")):"function"==typeof define&&define.amd?define(["exports","fabric","westures"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).fabricExtensions={},t.fabric,t.westures)}(this,function(t,e,i){"use strict";function n(t,e,i){return(e=function(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var n=i.call(t,e);if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function r(t,e){return Math.abs(t-e)}function o(t,e,i){let n=1/0,o=[];for(const s of e){const e=r(t[i],s[i]);n>e&&(o=[],n=e),n==e&&o.push(s)}return{dis:n,arr:o}}function s(t){const{target:e,isScale:i,isUniform:n,corner:r,point:s,diagonalPoint:a,list:c,isCenter:l}=t,{dis:h,arr:d}=o(s,c,"x");if(h>this.margin/this.canvas.getZoom())return[];let g=d[d.length-1].x-s.x;g*=r.includes("l")?-1:1;const{width:f,height:u,scaleX:p,scaleY:v}=e,m=p*f+(e.strokeUniform?0:e.strokeWidth),b=(g+m)/m;if(0==b)return[];if(i?(e.set("scaleX",p*b),n&&e.set("scaleY",v*b)):(e.set("width",f*b),n&&e.set("height",u*b)),l)e.setRelativeXY(a,"center","center");else{const t=this.contraryOriginMap;e.setRelativeXY(a,...t[r])}return e.setCoords(),d.map(t=>({origin:s,target:t}))}function a(t){const{target:e,isScale:i,isUniform:n,corner:r,point:s,diagonalPoint:a,list:c,isCenter:l}=t,{dis:h,arr:d}=o(s,c,"y");if(h>this.margin/this.canvas.getZoom())return[];let g=d[d.length-1].y-s.y;g*=r.includes("t")?-1:1;const{width:f,height:u,scaleX:p,scaleY:v}=e,m=v*u+(e.strokeUniform?0:e.strokeWidth),b=(g+m)/m;if(0==b)return[];if(i?(e.set("scaleY",v*b),n&&e.set("scaleX",p*b)):(e.set("height",u*b),n&&e.set("width",f*b)),l)e.setRelativeXY(a,"center","center");else{const t=this.contraryOriginMap;e.setRelativeXY(a,...t[r])}return e.setCoords(),d.map(t=>({origin:s,target:t}))}function c(t,e){const i=this.canvas.getTopContext(),n=this.canvas.viewportTransform,r=this.canvas.getZoom();i.save(),i.transform(...n),i.lineWidth=this.width/r,this.lineDash&&i.setLineDash(this.lineDash),i.strokeStyle=this.color,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),this.lineDash&&i.setLineDash([]),this.drawX(t,-1),this.drawX(e,1),i.restore()}function l(t,e){const i=this.canvas.getTopContext(),n=this.canvas.getZoom(),r=this.xSize/n;i.save(),i.translate(t.x,t.y),i.beginPath(),i.moveTo(-r,-r),i.lineTo(r,r),i.moveTo(r,-r),i.lineTo(-r,r),i.stroke(),i.restore()}function h(t){const e=this.canvas.getTopContext(),i=this.canvas.viewportTransform,n=this.canvas.getZoom();e.save(),e.transform(...i),e.lineWidth=this.width/n,e.strokeStyle=this.color;for(const e of t)this.drawX(e,0);e.restore()}function d(){const t=[];if(!this.closeVLine)for(const e of this.verticalLines)t.push(JSON.parse(e));if(!this.closeHLine)for(const e of this.horizontalLines)t.push(JSON.parse(e));const e=t.map(t=>t.target);h.call(this,e)}function g(){if(!this.closeVLine)for(const t of this.verticalLines){const{origin:i,target:n}=JSON.parse(t),r=new e.Point(n.x,i.y);this.drawLine(r,n)}}function f(){if(!this.closeHLine)for(const t of this.horizontalLines){const{origin:i,target:n}=JSON.parse(t),r=new e.Point(i.x,n.y);this.drawLine(r,n)}}function u(t,e){const i=t.getCoords();i.push(t.getCenterPoint());const n={target:t,list:i,points:e,margin:this.margin/this.canvas.getZoom()};return{vLines:v({...n,type:"x"}),hLines:v({...n,type:"y"})}}const p=[["left","top"],["right","top"],["right","bottom"],["left","bottom"],["center","center"]];function v(t){const{target:e,list:i,points:n,margin:r,type:s}=t,a=[],c=[];let l=1/0;for(const t of i){const e=o(t,n,s);c.push(e),l>e.dis&&(l=e.dis)}if(l>r)return a;let h=!1;for(let t=0;t<i.length;t++){if(c[t].dis!=l)continue;for(const e of c[t].arr)a.push({origin:i[t],target:e});if(h)continue;h=!0;const n=c[t].arr[0][s]-i[t][s];i.forEach(t=>{t[s]+=n}),e.setXY(i[t],...p[t]),e.setCoords()}return a}function m(t){const i=new Set,n=t.canvas;if(!n)return i;const r=t instanceof e.ActiveSelection?t.getObjects():[t];return n.forEachObject(t=>{t.isOnScreen()&&t.visible&&(t.constructor!=e.Group?i.add(t):w(i,t))}),b(i,r),i}function b(t,i){for(const n of i)n.constructor==e.Group?b(t,n.getObjects()):t.delete(n)}function w(t,i){const n=i.getObjects();for(const i of n)i.visible&&(i.constructor!=e.Group?t.add(i):w(t,i))}const y=function(t){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"left",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"top";return async function(r){const{originX:o=i,originY:s=n}=r;delete r.originX,delete r.originY;for(var a=arguments.length,c=new Array(a>1?a-1:0),l=1;l<a;l++)c[l-1]=arguments[l];const h=await t.call(this,r,...c),d=new e.Point(h.left,h.top);return h.setPositionByOrigin(d,o,s),h}},C=t=>async function(i){const{colorStops:n}=i,r=null==n?void 0:n.map(t=>{let{color:i,opacity:n,offset:r}=t;if(void 0===n||1===n)return{color:i,offset:r};return{color:new e.Color(i).setAlpha(n).toRgba(),offset:r}});return await t.call(this,{...i,colorStops:r})};const{wrapWithFixedAnchor:O,wrapWithFireEvent:P}=e.controlsUtils,S=P("CROPPING",O((t,i,n,r)=>{const{target:o}=i,{width:s}=o,a=o,c=e.controlsUtils.changeObjectWidth(t,i,n,r),l=a._element.width-a.cropX;return c&&(a.width>l&&(a.width=l),a.width<1&&(a.width=1)),s!==a.width})),z=P("CROPPING",O((t,i,n,r)=>{const{target:o}=i,{height:s}=o,a=o,c=e.controlsUtils.changeObjectHeight(t,i,n,r),l=a._element.height-a.cropY;return c&&(a.height>l&&(a.height=l),a.height<1&&(a.height=1)),s!==a.height})),R=P("CROPPING",O((t,i,n,r)=>{const{target:o}=i,s=o,{width:a,cropX:c}=s,l=e.controlsUtils.changeObjectWidth(t,i,n,r);let h=c+a-s.width;return s.width=a,l&&(h<0&&(h=0),s.cropX=h,s.width+=c-h),h!==c})),T=P("CROPPING",O((t,i,n,r)=>{const{target:o}=i,s=o,{height:a,cropY:c}=s,l=e.controlsUtils.changeObjectHeight(t,i,n,r);let h=c+a-s.height;return s.height=a,l&&(h<0&&(h=0),s.cropY=h,s.height+=c-h),h!==c})),x=t=>{let{transform:i}=t;const{target:n,original:r}=i,o=n,s=new e.Point(n.left-r.left,n.top-r.top).transform(e.util.invertTransform(e.util.createRotateMatrix({angle:o.getTotalAngle()})));let a=r.cropX-s.x/o.scaleX,c=r.cropY-s.y/o.scaleY;const{width:l,height:h,_element:d}=o;a<0&&(a=0),c<0&&(c=0),a+l>d.width&&(a=d.width-l),c+h>d.height&&(c=d.height-h),o.cropX=a,o.cropY=c,o.left=r.left,o.top=r.top},{degreesToRadians:j}=e.util;function L(t,e,i,n,r){t.save();const{stroke:o,xSize:s,ySize:a,opName:c}=this.commonRenderProps(t,e,i,r,n),l=s/2,h=a/2;t.rotate(j(this.angle)),t.beginPath(),t.moveTo(-h,0),t.lineTo(-h,l),t.lineTo(h,l),t.lineTo(h,h),t.lineTo(l,h),t.lineTo(l,-h),t.lineTo(-h,-h),t.closePath(),t[c](),o&&t.stroke(),t.restore()}const{scaleCursorStyleHandler:X}=e.controlsUtils,Y=()=>"crop",D=()=>({ml:new e.Control({x:-.5,y:0,sizeX:4,sizeY:20,cursorStyleHandler:X,actionHandler:R,getActionName:Y}),mr:new e.Control({x:.5,y:0,sizeX:4,sizeY:20,cursorStyleHandler:X,actionHandler:S,getActionName:Y}),mb:new e.Control({x:0,y:.5,sizeX:20,sizeY:4,cursorStyleHandler:X,actionHandler:z,getActionName:Y}),mt:new e.Control({x:0,y:-.5,sizeX:20,sizeY:4,cursorStyleHandler:X,actionHandler:T,getActionName:Y}),tl:new e.Control({angle:0,x:-.5,y:-.5,sizeX:20,sizeY:4,render:L,cursorStyleHandler:X,actionHandler:function(){const t=R(...arguments),e=T(...arguments);return t||e},getActionName:Y}),tr:new e.Control({angle:90,x:.5,y:-.5,sizeX:20,sizeY:4,render:L,cursorStyleHandler:X,actionHandler:function(){const t=S(...arguments),e=T(...arguments);return t||e},getActionName:Y}),bl:new e.Control({angle:270,x:-.5,y:.5,sizeX:20,sizeY:4,render:L,cursorStyleHandler:X,actionHandler:function(){const t=z(...arguments),e=R(...arguments);return t||e},getActionName:Y}),br:new e.Control({angle:180,x:.5,y:.5,sizeX:20,sizeY:4,render:L,cursorStyleHandler:X,actionHandler:function(){const t=z(...arguments),e=S(...arguments);return t||e},getActionName:Y})});t.AligningGuidelines=class{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};n(this,"canvas",void 0),n(this,"horizontalLines",new Set),n(this,"verticalLines",new Set),n(this,"cacheMap",new Map),n(this,"onlyDrawPoint",!1),n(this,"contraryOriginMap",{tl:["right","bottom"],tr:["left","bottom"],br:["left","top"],bl:["right","top"],mt:["center","bottom"],mr:["left","center"],mb:["center","top"],ml:["right","center"]}),n(this,"xSize",2.4),n(this,"lineDash",void 0),n(this,"margin",4),n(this,"width",1),n(this,"color","rgba(255,0,0,0.9)"),n(this,"closeVLine",!1),n(this,"closeHLine",!1),this.canvas=t,Object.assign(this,e),this.mouseUp=this.mouseUp.bind(this),this.scalingOrResizing=this.scalingOrResizing.bind(this),this.moving=this.moving.bind(this),this.beforeRender=this.beforeRender.bind(this),this.afterRender=this.afterRender.bind(this),this.initBehavior()}initBehavior(){this.canvas.on("mouse:up",this.mouseUp),this.canvas.on("object:resizing",this.scalingOrResizing),this.canvas.on("object:scaling",this.scalingOrResizing),this.canvas.on("object:moving",this.moving),this.canvas.on("before:render",this.beforeRender),this.canvas.on("after:render",this.afterRender)}getObjectsByTarget(t){return m(t)}getPointMap(t){return function(t){const e=t.getCoords();return{tl:e[0],tr:e[1],br:e[2],bl:e[3],mt:e[0].add(e[1]).scalarDivide(2),mr:e[1].add(e[2]).scalarDivide(2),mb:e[2].add(e[3]).scalarDivide(2),ml:e[3].add(e[0]).scalarDivide(2)}}(t)}getContraryMap(t){return function(t){var e;const i=null!==(e=t.aCoords)&&void 0!==e?e:t.calcACoords();return{tl:i.br,tr:i.bl,br:i.tl,bl:i.tr,mt:i.br.add(i.bl).scalarDivide(2),mr:i.bl.add(i.tl).scalarDivide(2),mb:i.tl.add(i.tr).scalarDivide(2),ml:i.tr.add(i.br).scalarDivide(2)}}(t)}getCaCheMapValue(t){const e=[t.calcTransformMatrix().toString(),t.width,t.height].join(),i=this.cacheMap.get(e);if(i)return i;const n=t.getCoords();return n.push(t.getCenterPoint()),this.cacheMap.set(e,n),n}drawLine(t,e){c.call(this,t,e)}drawX(t,e){l.call(this,t,e)}mouseUp(){this.verticalLines.clear(),this.horizontalLines.clear(),this.cacheMap.clear(),this.canvas.requestRenderAll()}scalingOrResizing(t){const i=t.target;i.setCoords();const n=String(t.transform.action).startsWith("scale");this.verticalLines.clear(),this.horizontalLines.clear();const r=this.getObjectsByTarget(i);let o=t.transform.corner;i.flipX&&(o.includes("l")?o=o.replace("l","r"):o.includes("r")&&(o=o.replace("r","l"))),i.flipY&&(o.includes("t")?o=o.replace("t","b"):o.includes("b")&&(o=o.replace("b","t")));const c=this.getPointMap(i);if(!(o in c))return;if(this.onlyDrawPoint=o.includes("m"),this.onlyDrawPoint){if(i.getTotalAngle()%90!=0)return}const l=this.getContraryMap(i),h=c[o];let d=l[o];const g="center"==t.transform.original.originX&&"center"==t.transform.original.originY;if(g){const t=i.group?h.transform(e.util.invertTransform(i.group.calcTransformMatrix())):h;d=d.add(t).scalarDivide(2)}const f=t.e[this.canvas.uniScaleKey];let u=this.canvas.uniformScaling&&!f||!this.canvas.uniformScaling&&f;this.onlyDrawPoint&&(u=!1);const p=[];for(const t of r){const e=this.getCaCheMapValue(t);p.push(...e)}const v={target:i,point:h,diagonalPoint:d,corner:o,list:p,isScale:n,isUniform:u,isCenter:g},m=this.onlyDrawPoint&&(o.includes("t")||o.includes("b")),b=this.onlyDrawPoint&&(o.includes("l")||o.includes("r")),w=m?[]:s.call(this,v),y=b?[]:a.call(this,v);w.forEach(t=>{this.verticalLines.add(JSON.stringify(t))}),y.forEach(t=>{this.horizontalLines.add(JSON.stringify(t))})}moving(t){const e=t.target;e.setCoords(),this.onlyDrawPoint=!1,this.verticalLines.clear(),this.horizontalLines.clear();const i=this.getObjectsByTarget(e),n=[];for(const t of i)n.push(...this.getCaCheMapValue(t));const{vLines:r,hLines:o}=u.call(this,e,n);r.forEach(t=>{this.verticalLines.add(JSON.stringify(t))}),o.forEach(t=>{this.horizontalLines.add(JSON.stringify(t))})}beforeRender(){this.canvas.clearContext(this.canvas.contextTop)}afterRender(){this.onlyDrawPoint?d.call(this):(g.call(this),f.call(this))}dispose(){this.canvas.off("mouse:up",this.mouseUp),this.canvas.off("object:resizing",this.scalingOrResizing),this.canvas.off("object:scaling",this.scalingOrResizing),this.canvas.off("object:moving",this.moving),this.canvas.off("before:render",this.beforeRender),this.canvas.off("after:render",this.afterRender)}},t.addGestures=t=>{const e=new i.Region(t.upperCanvasEl);t.addOrRemove(function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),n=1;n<e;n++)i[n-1]=arguments[n];return t.removeEventListener(...i)}),e.addGesture((t=>new i.Rotate(t.upperCanvasEl,e=>{let{rotation:i,event:n}=e;t.fireEventFromPointerEvent(n,"rotate","rotate",{rotation:i})}))(t)),e.addGesture((t=>new i.Pinch(t.upperCanvasEl,e=>{let{scale:i,event:n}=e;t.fireEventFromPointerEvent(n,"pinch","pinch",{scale:i})}))(t)),e.addGesture((t=>new i.Tap(t.upperCanvasEl,e=>{let{event:i}=e;t.fireEventFromPointerEvent(i,"mouse:tripleclick","mousetripleclick",void 0),i.preventDefault()},{numTaps:3,maxRetain:400}))(t)),e.addGesture((t=>new i.Tap(t.upperCanvasEl,e=>{let{event:i}=e;t.fireEventFromPointerEvent(i,"mouse:dblclick","mousedblclick",void 0),i.preventDefault()},{numTaps:2,maxRetain:300}))(t)),t.addOrRemove(function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),n=1;n<e;n++)i[n-1]=arguments[n];return t.addEventListener(...i)},!0)},t.changeCropHeight=z,t.changeCropWidth=S,t.changeCropX=R,t.changeCropY=T,t.createImageCroppingControls=D,t.enterCropMode=function t(e){var i;let{target:n}=e;const r=n,{controls:o}=r;r.controls=D(),r.on("moving",x),r.setCoords();r.once("mousedblclick",()=>{var e;r.off("moving",x),r.controls=o,r.setCoords(),r.once("mousedblclick",t),null===(e=r.canvas)||void 0===e||e.requestRenderAll()}),null===(i=r.canvas)||void 0===i||i.requestRenderAll()},t.gradientUpdaterWrapper=C,t.installGradientUpdater=()=>{e.Gradient.fromObject=C(e.Gradient.fromObject)},t.installOriginWrapperUpdater=(t,i)=>{e.BaseFabricObject._fromObject=y(e.BaseFabricObject._fromObject,t,i),e.FabricImage.fromObject=y(e.FabricImage.fromObject,t,i),e.Group.fromObject=y(e.Group.fromObject,t,i)},t.originUpdaterWrapper=y,t.pinchEventHandler=function(t){let{scale:e,target:i,scenePoint:n}=t;i&&this.getActiveObject()===i?(i.scaleX*=e,i.scaleY*=e):this.zoomToPoint(n,this.getZoom()*e)},t.rotateEventHandler=function(t){let{rotation:i,target:n}=t;n&&this.getActiveObject()===n&&n.rotate(n.angle+e.util.radiansToDegrees(i))}});
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("fabric"),require("westures")):"function"==typeof define&&define.amd?define(["exports","fabric","westures"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).fabricExtensions={},t.fabric,t.westures)}(this,function(t,e,n){"use strict";function i(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=typeof t||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var i=n.call(t,e);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function r(t,e){return Math.abs(t-e)}function o(t,e,n){let i=1/0,o=[];for(const s of e){const e=r(t[n],s[n]);i>e&&(o=[],i=e),i==e&&o.push(s)}return{dis:i,arr:o}}function s(t){const{target:e,isScale:n,isUniform:i,corner:r,point:s,diagonalPoint:a,list:c,isCenter:l}=t,{dis:h,arr:d}=o(s,c,"x");if(h>this.margin/this.canvas.getZoom())return[];let g=d[d.length-1].x-s.x;g*=r.includes("l")?-1:1;const{width:f,height:u,scaleX:p,scaleY:m}=e,v=p*f+(e.strokeUniform?0:e.strokeWidth),b=(g+v)/v;if(0==b)return[];if(n?(e.set("scaleX",p*b),i&&e.set("scaleY",m*b)):(e.set("width",f*b),i&&e.set("height",u*b)),l)e.setRelativeXY(a,"center","center");else{const t=this.contraryOriginMap;e.setRelativeXY(a,...t[r])}return e.setCoords(),d.map(t=>({origin:s,target:t}))}function a(t){const{target:e,isScale:n,isUniform:i,corner:r,point:s,diagonalPoint:a,list:c,isCenter:l}=t,{dis:h,arr:d}=o(s,c,"y");if(h>this.margin/this.canvas.getZoom())return[];let g=d[d.length-1].y-s.y;g*=r.includes("t")?-1:1;const{width:f,height:u,scaleX:p,scaleY:m}=e,v=m*u+(e.strokeUniform?0:e.strokeWidth),b=(g+v)/v;if(0==b)return[];if(n?(e.set("scaleY",m*b),i&&e.set("scaleX",p*b)):(e.set("height",u*b),i&&e.set("width",f*b)),l)e.setRelativeXY(a,"center","center");else{const t=this.contraryOriginMap;e.setRelativeXY(a,...t[r])}return e.setCoords(),d.map(t=>({origin:s,target:t}))}function c(t,e){const n=this.canvas.getTopContext(),i=this.canvas.viewportTransform,r=this.canvas.getZoom();n.save(),n.transform(...i),n.lineWidth=this.width/r,this.lineDash&&n.setLineDash(this.lineDash),n.strokeStyle=this.color,n.beginPath(),n.moveTo(t.x,t.y),n.lineTo(e.x,e.y),n.stroke(),this.lineDash&&n.setLineDash([]),this.drawX(t,-1),this.drawX(e,1),n.restore()}function l(t,e){const n=this.canvas.getTopContext(),i=this.canvas.getZoom(),r=this.xSize/i;n.save(),n.translate(t.x,t.y),n.beginPath(),n.moveTo(-r,-r),n.lineTo(r,r),n.moveTo(r,-r),n.lineTo(-r,r),n.stroke(),n.restore()}function h(t){const e=this.canvas.getTopContext(),n=this.canvas.viewportTransform,i=this.canvas.getZoom();e.save(),e.transform(...n),e.lineWidth=this.width/i,e.strokeStyle=this.color;for(const e of t)this.drawX(e,0);e.restore()}function d(){const t=[];if(!this.closeVLine)for(const e of this.verticalLines)t.push(JSON.parse(e));if(!this.closeHLine)for(const e of this.horizontalLines)t.push(JSON.parse(e));const e=t.map(t=>t.target);h.call(this,e)}function g(){if(!this.closeVLine)for(const t of this.verticalLines){const{origin:n,target:i}=JSON.parse(t),r=new e.Point(i.x,n.y);this.drawLine(r,i)}}function f(){if(!this.closeHLine)for(const t of this.horizontalLines){const{origin:n,target:i}=JSON.parse(t),r=new e.Point(n.x,i.y);this.drawLine(r,i)}}function u(t,e){const n=t.getCoords();n.push(t.getCenterPoint());const i={target:t,list:n,points:e,margin:this.margin/this.canvas.getZoom()};return{vLines:m({...i,type:"x"}),hLines:m({...i,type:"y"})}}const p=[["left","top"],["right","top"],["right","bottom"],["left","bottom"],["center","center"]];function m(t){const{target:e,list:n,points:i,margin:r,type:s}=t,a=[],c=[];let l=1/0;for(const t of n){const e=o(t,i,s);c.push(e),l>e.dis&&(l=e.dis)}if(l>r)return a;let h=!1;for(let t=0;t<n.length;t++){if(c[t].dis!=l)continue;for(const e of c[t].arr)a.push({origin:n[t],target:e});if(h)continue;h=!0;const i=c[t].arr[0][s]-n[t][s];n.forEach(t=>{t[s]+=i}),e.setXY(n[t],...p[t]),e.setCoords()}return a}function v(t){const n=new Set,i=t.canvas;if(!i)return n;const r=t instanceof e.ActiveSelection?t.getObjects():[t];return i.forEachObject(t=>{t.isOnScreen()&&t.visible&&(t.constructor!=e.Group?n.add(t):w(n,t))}),b(n,r),n}function b(t,n){for(const i of n)i.constructor==e.Group?b(t,i.getObjects()):t.delete(i)}function w(t,n){const i=n.getObjects();for(const n of i)n.visible&&(n.constructor!=e.Group?t.add(n):w(t,n))}const y=function(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"left",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"top";return async function(r){const{originX:o=n,originY:s=i}=r;delete r.originX,delete r.originY;for(var a=arguments.length,c=new Array(a>1?a-1:0),l=1;l<a;l++)c[l-1]=arguments[l];const h=await t.call(this,r,...c),d=new e.Point(h.left,h.top);return h.setPositionByOrigin(d,o,s),h}},C=t=>async function(n){const{colorStops:i}=n,r=null==i?void 0:i.map(t=>{let{color:n,opacity:i,offset:r}=t;if(void 0===i||1===i)return{color:n,offset:r};return{color:new e.Color(n).setAlpha(i).toRgba(),offset:r}});return await t.call(this,{...n,colorStops:r})};const{wrapWithFixedAnchor:O,wrapWithFireEvent:P}=e.controlsUtils,x=P("CROPPING",O((t,n,i,r)=>{const{target:o}=n,{width:s}=o,a=o,c=e.controlsUtils.changeObjectWidth(t,n,i,r),l=a._element.width-a.cropX;return c&&(a.width>l&&(a.width=l),a.width<1&&(a.width=1)),s!==a.width})),S=P("CROPPING",O((t,n,i,r)=>{const{target:o}=n,{height:s}=o,a=o,c=e.controlsUtils.changeObjectHeight(t,n,i,r),l=a._element.height-a.cropY;return c&&(a.height>l&&(a.height=l),a.height<1&&(a.height=1)),s!==a.height})),T=P("CROPPING",O((t,n,i,r)=>{const{target:o}=n,s=o,{width:a,cropX:c}=s,l=e.controlsUtils.changeObjectWidth(t,n,i,r);let h=c+a-s.width;return s.width=a,l&&(h<0&&(h=0),s.cropX=h,s.width+=c-h),h!==c})),X=P("CROPPING",O((t,n,i,r)=>{const{target:o}=n,s=o,{height:a,cropY:c}=s,l=e.controlsUtils.changeObjectHeight(t,n,i,r);let h=c+a-s.height;return s.height=a,l&&(h<0&&(h=0),s.cropY=h,s.height+=c-h),h!==c})),z=t=>{let{transform:n}=t;const{target:i,original:r}=n,o=i,s=new e.Point(i.left-r.left,i.top-r.top).transform(e.util.invertTransform(e.util.createRotateMatrix({angle:o.getTotalAngle()})));let a=r.cropX-s.x/o.scaleX,c=r.cropY-s.y/o.scaleY;const{width:l,height:h,_element:d}=o;a<0&&(a=0),c<0&&(c=0),a+l>d.width&&(a=d.width-l),c+h>d.height&&(c=d.height-h),o.cropX=a,o.cropY=c,o.left=r.left,o.top=r.top};function R(t,n,i){const r=i.calcTransformMatrix(),o=i.getViewportTransform(),s=e.util.multiplyTransformMatrices(o,r);let a=0,c=0;return a=this.x<0?-i.width/2-i.cropX:i.getElement().width-i.width/2-i.cropX,c=this.y<0?-i.height/2-i.cropY:i.getElement().height-i.height/2-i.cropY,new e.Point(a,c).transform(s)}const Y=(t,n)=>(i,r,o,s)=>{const{target:a}=r,{width:c,height:l}=a.getElement(),h=c-a.width-a.cropX,d=l-a.height-a.cropY,g=t<0?1+h/a.width:-a.cropX/a.width,f=n<0?1+d/a.height:-a.cropY/a.height,u=a.translateToOriginPoint(a.getCenterPoint(),g,f),p=e.controlsUtils.getLocalPoint(r,g,f,o,s),m=(v=p,b=l,w=c,Math.min(Math.abs(v.x/w),Math.abs(v.y/b)));var v,b,w;const y=m/a.scaleX,C=m/a.scaleY,O=h/y,P=d/C,x=a.width/y,S=a.height/C,T=t<0?c-x-O:a.cropX/y,X=n<0?l-S-P:a.cropY/C;if((t<0?O:T)+x>c||(n<0?P:X)+S>l)return!1;a.scaleX=m,a.scaleY=m,a.width=x,a.height=S,a.cropX=T,a.cropY=X;const z=t<0?1+O/x:-T/x,R=n<0?1+P/S:-X/S;return a.setPositionByOrigin(u,z,R),!0};function H(t){let{ctx:e}=t;const n=e.globalAlpha;e.globalAlpha*=.5,e.drawImage(this._element,-this.width/2-this.cropX,-this.height/2-this.cropY),e.globalAlpha=n}const{degreesToRadians:j}=e.util;function L(t,e,n,i,r){t.save();const{stroke:o,xSize:s,ySize:a,opName:c}=this.commonRenderProps(t,e,n,r,i),l=s/2,h=a/2;t.rotate(j(this.angle)),t.beginPath(),t.moveTo(-h,0),t.lineTo(-h,l),t.lineTo(h,l),t.lineTo(h,h),t.lineTo(l,h),t.lineTo(l,-h),t.lineTo(-h,-h),t.closePath(),t[c](),o&&t.stroke(),t.restore()}const{scaleCursorStyleHandler:E}=e.controlsUtils,A=()=>"crop",D=()=>({tls:new e.Control({x:-.5,y:-.5,cursorStyleHandler:E,positionHandler:R,actionHandler:Y(-.5,-.5)}),brs:new e.Control({x:.5,y:.5,cursorStyleHandler:E,positionHandler:R,actionHandler:Y(.5,.5)}),trs:new e.Control({x:.5,y:-.5,cursorStyleHandler:E,positionHandler:R,actionHandler:Y(.5,-.5)}),bls:new e.Control({x:-.5,y:.5,cursorStyleHandler:E,positionHandler:R,actionHandler:Y(-.5,.5)}),mlc:new e.Control({x:-.5,y:0,sizeX:4,sizeY:20,cursorStyleHandler:E,actionHandler:T,getActionName:A}),mrc:new e.Control({x:.5,y:0,sizeX:4,sizeY:20,cursorStyleHandler:E,actionHandler:x,getActionName:A}),mbc:new e.Control({x:0,y:.5,sizeX:20,sizeY:4,cursorStyleHandler:E,actionHandler:S,getActionName:A}),mtc:new e.Control({x:0,y:-.5,sizeX:20,sizeY:4,cursorStyleHandler:E,actionHandler:X,getActionName:A}),tlc:new e.Control({angle:0,x:-.5,y:-.5,sizeX:20,sizeY:4,render:L,cursorStyleHandler:E,actionHandler:function(){const t=T(...arguments),e=X(...arguments);return t||e},getActionName:A}),trc:new e.Control({angle:90,x:.5,y:-.5,sizeX:20,sizeY:4,render:L,cursorStyleHandler:E,actionHandler:function(){const t=x(...arguments),e=X(...arguments);return t||e},getActionName:A}),blc:new e.Control({angle:270,x:-.5,y:.5,sizeX:20,sizeY:4,render:L,cursorStyleHandler:E,actionHandler:function(){const t=S(...arguments),e=T(...arguments);return t||e},getActionName:A}),brc:new e.Control({angle:180,x:.5,y:.5,sizeX:20,sizeY:4,render:L,cursorStyleHandler:E,actionHandler:function(){const t=S(...arguments),e=x(...arguments);return t||e},getActionName:A})});t.AligningGuidelines=class{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this,"canvas",void 0),i(this,"horizontalLines",new Set),i(this,"verticalLines",new Set),i(this,"cacheMap",new Map),i(this,"onlyDrawPoint",!1),i(this,"contraryOriginMap",{tl:["right","bottom"],tr:["left","bottom"],br:["left","top"],bl:["right","top"],mt:["center","bottom"],mr:["left","center"],mb:["center","top"],ml:["right","center"]}),i(this,"xSize",2.4),i(this,"lineDash",void 0),i(this,"margin",4),i(this,"width",1),i(this,"color","rgba(255,0,0,0.9)"),i(this,"closeVLine",!1),i(this,"closeHLine",!1),this.canvas=t,Object.assign(this,e),this.mouseUp=this.mouseUp.bind(this),this.scalingOrResizing=this.scalingOrResizing.bind(this),this.moving=this.moving.bind(this),this.beforeRender=this.beforeRender.bind(this),this.afterRender=this.afterRender.bind(this),this.initBehavior()}initBehavior(){this.canvas.on("mouse:up",this.mouseUp),this.canvas.on("object:resizing",this.scalingOrResizing),this.canvas.on("object:scaling",this.scalingOrResizing),this.canvas.on("object:moving",this.moving),this.canvas.on("before:render",this.beforeRender),this.canvas.on("after:render",this.afterRender)}getObjectsByTarget(t){return v(t)}getPointMap(t){return function(t){const e=t.getCoords();return{tl:e[0],tr:e[1],br:e[2],bl:e[3],mt:e[0].add(e[1]).scalarDivide(2),mr:e[1].add(e[2]).scalarDivide(2),mb:e[2].add(e[3]).scalarDivide(2),ml:e[3].add(e[0]).scalarDivide(2)}}(t)}getContraryMap(t){return function(t){var e;const n=null!==(e=t.aCoords)&&void 0!==e?e:t.calcACoords();return{tl:n.br,tr:n.bl,br:n.tl,bl:n.tr,mt:n.br.add(n.bl).scalarDivide(2),mr:n.bl.add(n.tl).scalarDivide(2),mb:n.tl.add(n.tr).scalarDivide(2),ml:n.tr.add(n.br).scalarDivide(2)}}(t)}getCaCheMapValue(t){const e=[t.calcTransformMatrix().toString(),t.width,t.height].join(),n=this.cacheMap.get(e);if(n)return n;const i=t.getCoords();return i.push(t.getCenterPoint()),this.cacheMap.set(e,i),i}drawLine(t,e){c.call(this,t,e)}drawX(t,e){l.call(this,t,e)}mouseUp(){this.verticalLines.clear(),this.horizontalLines.clear(),this.cacheMap.clear(),this.canvas.requestRenderAll()}scalingOrResizing(t){const n=t.target;n.setCoords();const i=String(t.transform.action).startsWith("scale");this.verticalLines.clear(),this.horizontalLines.clear();const r=this.getObjectsByTarget(n);let o=t.transform.corner;n.flipX&&(o.includes("l")?o=o.replace("l","r"):o.includes("r")&&(o=o.replace("r","l"))),n.flipY&&(o.includes("t")?o=o.replace("t","b"):o.includes("b")&&(o=o.replace("b","t")));const c=this.getPointMap(n);if(!(o in c))return;if(this.onlyDrawPoint=o.includes("m"),this.onlyDrawPoint){if(n.getTotalAngle()%90!=0)return}const l=this.getContraryMap(n),h=c[o];let d=l[o];const g="center"==t.transform.original.originX&&"center"==t.transform.original.originY;if(g){const t=n.group?h.transform(e.util.invertTransform(n.group.calcTransformMatrix())):h;d=d.add(t).scalarDivide(2)}const f=t.e[this.canvas.uniScaleKey];let u=this.canvas.uniformScaling&&!f||!this.canvas.uniformScaling&&f;this.onlyDrawPoint&&(u=!1);const p=[];for(const t of r){const e=this.getCaCheMapValue(t);p.push(...e)}const m={target:n,point:h,diagonalPoint:d,corner:o,list:p,isScale:i,isUniform:u,isCenter:g},v=this.onlyDrawPoint&&(o.includes("t")||o.includes("b")),b=this.onlyDrawPoint&&(o.includes("l")||o.includes("r")),w=v?[]:s.call(this,m),y=b?[]:a.call(this,m);w.forEach(t=>{this.verticalLines.add(JSON.stringify(t))}),y.forEach(t=>{this.horizontalLines.add(JSON.stringify(t))})}moving(t){const e=t.target;e.setCoords(),this.onlyDrawPoint=!1,this.verticalLines.clear(),this.horizontalLines.clear();const n=this.getObjectsByTarget(e),i=[];for(const t of n)i.push(...this.getCaCheMapValue(t));const{vLines:r,hLines:o}=u.call(this,e,i);r.forEach(t=>{this.verticalLines.add(JSON.stringify(t))}),o.forEach(t=>{this.horizontalLines.add(JSON.stringify(t))})}beforeRender(){this.canvas.clearContext(this.canvas.contextTop)}afterRender(){this.onlyDrawPoint?d.call(this):(g.call(this),f.call(this))}dispose(){this.canvas.off("mouse:up",this.mouseUp),this.canvas.off("object:resizing",this.scalingOrResizing),this.canvas.off("object:scaling",this.scalingOrResizing),this.canvas.off("object:moving",this.moving),this.canvas.off("before:render",this.beforeRender),this.canvas.off("after:render",this.afterRender)}},t.addGestures=t=>{const e=new n.Region(t.upperCanvasEl);t.addOrRemove(function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),i=1;i<e;i++)n[i-1]=arguments[i];return t.removeEventListener(...n)}),e.addGesture((t=>new n.Rotate(t.upperCanvasEl,e=>{let{rotation:n,event:i}=e;t.fireEventFromPointerEvent(i,"rotate","rotate",{rotation:n})}))(t)),e.addGesture((t=>new n.Pinch(t.upperCanvasEl,e=>{let{scale:n,event:i}=e;t.fireEventFromPointerEvent(i,"pinch","pinch",{scale:n})}))(t)),e.addGesture((t=>new n.Tap(t.upperCanvasEl,e=>{let{event:n}=e;t.fireEventFromPointerEvent(n,"mouse:tripleclick","mousetripleclick",void 0),n.preventDefault()},{numTaps:3,maxRetain:400}))(t)),e.addGesture((t=>new n.Tap(t.upperCanvasEl,e=>{let{event:n}=e;t.fireEventFromPointerEvent(n,"mouse:dblclick","mousedblclick",void 0),n.preventDefault()},{numTaps:2,maxRetain:300}))(t)),t.addOrRemove(function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),i=1;i<e;i++)n[i-1]=arguments[i];return t.addEventListener(...n)},!0)},t.changeCropHeight=S,t.changeCropWidth=x,t.changeCropX=T,t.changeCropY=X,t.createImageCroppingControls=D,t.enterCropMode=function t(e){var n;let{target:i}=e;const r=i,{controls:o,padding:s}=r;r.padding=0,r.controls=D(),r.on("moving",z),r.on("before:render",H),r.setCoords();r.once("mousedblclick",()=>{var e;r.padding=s,r.off("moving",z),r.off("before:render",H),r.controls=o,r.setCoords(),r.once("mousedblclick",t),null===(e=r.canvas)||void 0===e||e.requestRenderAll()}),null===(n=r.canvas)||void 0===n||n.requestRenderAll()},t.gradientUpdaterWrapper=C,t.installGradientUpdater=()=>{e.Gradient.fromObject=C(e.Gradient.fromObject)},t.installOriginWrapperUpdater=(t,n)=>{e.BaseFabricObject._fromObject=y(e.BaseFabricObject._fromObject,t,n),e.FabricImage.fromObject=y(e.FabricImage.fromObject,t,n),e.Group.fromObject=y(e.Group.fromObject,t,n)},t.originUpdaterWrapper=y,t.pinchEventHandler=function(t){let{scale:e,target:n,scenePoint:i}=t;n&&this.getActiveObject()===n?(n.scaleX*=e,n.scaleY*=e):this.zoomToPoint(i,this.getZoom()*e)},t.rotateEventHandler=function(t){let{rotation:n,target:i}=t;i&&this.getActiveObject()===i&&i.rotate(i.angle+e.util.radiansToDegrees(n))}});
2
2
  //# sourceMappingURL=fabric-extensions.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fabric-extensions.min.js","sources":["../extensions/aligning_guidelines/util/basic.ts","../extensions/aligning_guidelines/util/collect-point.ts","../extensions/aligning_guidelines/util/draw.ts","../extensions/aligning_guidelines/util/collect-line.ts","../extensions/aligning_guidelines/util/get-objects-by-target.ts","../extensions/data_updaters/origins/index.ts","../extensions/data_updaters/gradient/index.ts","../extensions/westures_integration/index.ts","../extensions/cropping_controls/croppingHandlers.ts","../extensions/cropping_controls/renderCornerControl.ts","../extensions/cropping_controls/croppingControls.ts","../extensions/aligning_guidelines/index.ts","../extensions/cropping_controls/enterCropMode.ts"],"sourcesContent":["import type { FabricObject, Point } from 'fabric';\nimport type { PointMap } from '../typedefs';\n\nexport function getDistance(a: number, b: number) {\n return Math.abs(a - b);\n}\n\nexport function getDistanceList(point: Point, list: Point[], type: 'x' | 'y') {\n let dis = Infinity;\n let arr: Point[] = [];\n for (const item of list) {\n const v = getDistance(point[type], item[type]);\n if (dis > v) {\n arr = [];\n dis = v;\n }\n if (dis == v) {\n arr.push(item);\n }\n }\n return { dis, arr };\n}\n\nexport function getPointMap(target: FabricObject): PointMap {\n const coords = target.getCoords();\n return {\n tl: coords[0],\n tr: coords[1],\n br: coords[2],\n bl: coords[3],\n mt: coords[0].add(coords[1]).scalarDivide(2),\n mr: coords[1].add(coords[2]).scalarDivide(2),\n mb: coords[2].add(coords[3]).scalarDivide(2),\n ml: coords[3].add(coords[0]).scalarDivide(2),\n };\n}\n\nexport function getContraryMap(target: FabricObject): PointMap {\n const aCoords = target.aCoords ?? target.calcACoords();\n return {\n tl: aCoords.br,\n tr: aCoords.bl,\n br: aCoords.tl,\n bl: aCoords.tr,\n mt: aCoords.br.add(aCoords.bl).scalarDivide(2),\n mr: aCoords.bl.add(aCoords.tl).scalarDivide(2),\n mb: aCoords.tl.add(aCoords.tr).scalarDivide(2),\n ml: aCoords.tr.add(aCoords.br).scalarDivide(2),\n };\n}\n","import type { FabricObject, Point } from 'fabric';\nimport type { AligningGuidelines } from '..';\nimport type { LineProps } from '../typedefs';\nimport { getDistanceList } from './basic';\n\ntype CollectPointProps = {\n target: FabricObject;\n /** Operation points of the target element: top-left, bottom-left, top-right, bottom-right */\n point: Point;\n /** Position using diagonal points when resizing/scaling. */\n diagonalPoint: Point;\n /** Set of points to consider for alignment: [tl, tr, br, bl, center] */\n list: Point[];\n /** Change the zoom or change the size, determine by whether e.transform.action starts with the string \"scale\" */\n isScale: boolean;\n /** Whether to change uniformly is determined by canvas.uniformScaling and canvas.uniScaleKey. */\n isUniform: boolean;\n /** When holding the centerKey (default is altKey), the shape will scale based on the center point, with the reference point being the center. */\n isCenter: boolean;\n /** tl、tr、br、bl、mt、mr、mb、ml */\n corner: string;\n};\n\nexport function collectVerticalPoint(\n this: AligningGuidelines,\n props: CollectPointProps,\n): LineProps[] {\n const {\n target,\n isScale,\n isUniform,\n corner,\n point,\n diagonalPoint,\n list,\n isCenter,\n } = props;\n const { dis, arr } = getDistanceList(point, list, 'x');\n const margin = this.margin / this.canvas.getZoom();\n if (dis > margin) return [];\n let v = arr[arr.length - 1].x - point.x;\n // tl bl ml\n // If modifying on the left side, the size decreases; conversely, it increases.\n const dirX = corner.includes('l') ? -1 : 1;\n v *= dirX;\n\n const { width, height, scaleX, scaleY } = target;\n // Because when modifying through the center point, isUniform is always false, so skew does not need to be considered.\n const dStrokeWidth = target.strokeUniform ? 0 : target.strokeWidth;\n const scaleWidth = scaleX * width + dStrokeWidth;\n const sx = (v + scaleWidth) / scaleWidth;\n // When v equals -scaleWidth, sx equals 0.\n if (sx == 0) return [];\n if (isScale) {\n target.set('scaleX', scaleX * sx);\n if (isUniform) target.set('scaleY', scaleY * sx);\n } else {\n target.set('width', width * sx);\n if (isUniform) target.set('height', height * sx);\n }\n if (isCenter) {\n target.setRelativeXY(diagonalPoint, 'center', 'center');\n } else {\n const originArr = this.contraryOriginMap;\n target.setRelativeXY(diagonalPoint, ...originArr[corner]);\n }\n target.setCoords();\n return arr.map((target) => ({ origin: point, target }));\n}\n\nexport function collectHorizontalPoint(\n this: AligningGuidelines,\n props: CollectPointProps,\n): LineProps[] {\n const {\n target,\n isScale,\n isUniform,\n corner,\n point,\n diagonalPoint,\n list,\n isCenter,\n } = props;\n const { dis, arr } = getDistanceList(point, list, 'y');\n const margin = this.margin / this.canvas.getZoom();\n if (dis > margin) return [];\n let v = arr[arr.length - 1].y - point.y;\n // tl mt tr\n // If modifying on the top side, the size decreases; conversely, it increases.\n const dirY = corner.includes('t') ? -1 : 1;\n v *= dirY;\n\n const { width, height, scaleX, scaleY } = target;\n // Because when modifying through the center point, isUniform is always false, so skew does not need to be considered.\n const dStrokeWidth = target.strokeUniform ? 0 : target.strokeWidth;\n const scaleHeight = scaleY * height + dStrokeWidth;\n const sy = (v + scaleHeight) / scaleHeight;\n // When v equals -scaleHeight, sy equals 0.\n if (sy == 0) return [];\n if (isScale) {\n target.set('scaleY', scaleY * sy);\n if (isUniform) target.set('scaleX', scaleX * sy);\n } else {\n target.set('height', height * sy);\n if (isUniform) target.set('width', width * sy);\n }\n if (isCenter) {\n target.setRelativeXY(diagonalPoint, 'center', 'center');\n } else {\n const originArr = this.contraryOriginMap;\n target.setRelativeXY(diagonalPoint, ...originArr[corner]);\n }\n target.setCoords();\n return arr.map((target) => ({ origin: point, target }));\n}\n","import { Point } from 'fabric';\nimport type { AligningGuidelines } from '..';\n\nexport function drawLine(\n this: AligningGuidelines,\n origin: Point,\n target: Point,\n) {\n const ctx = this.canvas.getTopContext();\n const viewportTransform = this.canvas.viewportTransform;\n const zoom = this.canvas.getZoom();\n ctx.save();\n ctx.transform(...viewportTransform);\n ctx.lineWidth = this.width / zoom;\n if (this.lineDash) ctx.setLineDash(this.lineDash);\n ctx.strokeStyle = this.color;\n ctx.beginPath();\n ctx.moveTo(origin.x, origin.y);\n ctx.lineTo(target.x, target.y);\n ctx.stroke();\n if (this.lineDash) ctx.setLineDash([]);\n\n this.drawX(origin, -1);\n this.drawX(target, 1);\n ctx.restore();\n}\n\nexport function drawX(this: AligningGuidelines, point: Point, _: number) {\n const ctx = this.canvas.getTopContext();\n const zoom = this.canvas.getZoom();\n const size = this.xSize / zoom;\n ctx.save();\n ctx.translate(point.x, point.y);\n ctx.beginPath();\n ctx.moveTo(-size, -size);\n ctx.lineTo(size, size);\n ctx.moveTo(size, -size);\n ctx.lineTo(-size, size);\n ctx.stroke();\n ctx.restore();\n}\nfunction drawPoint(this: AligningGuidelines, arr: Point[]) {\n const ctx = this.canvas.getTopContext();\n const viewportTransform = this.canvas.viewportTransform;\n const zoom = this.canvas.getZoom();\n ctx.save();\n ctx.transform(...viewportTransform);\n ctx.lineWidth = this.width / zoom;\n ctx.strokeStyle = this.color;\n for (const item of arr) this.drawX(item, 0);\n ctx.restore();\n}\n\nexport function drawPointList(this: AligningGuidelines) {\n const list = [];\n if (!this.closeVLine) {\n for (const v of this.verticalLines) list.push(JSON.parse(v));\n }\n if (!this.closeHLine) {\n for (const h of this.horizontalLines) list.push(JSON.parse(h));\n }\n const arr = list.map((item) => item.target);\n drawPoint.call(this, arr);\n}\n\nexport function drawVerticalLine(this: AligningGuidelines) {\n if (this.closeVLine) return;\n\n for (const v of this.verticalLines) {\n const { origin, target } = JSON.parse(v);\n const o = new Point(target.x, origin.y);\n this.drawLine(o, target);\n }\n}\n\nexport function drawHorizontalLine(this: AligningGuidelines) {\n if (this.closeHLine) return;\n\n for (const v of this.horizontalLines) {\n const { origin, target } = JSON.parse(v);\n const o = new Point(origin.x, target.y);\n this.drawLine(o, target);\n }\n}\n","import type { FabricObject, Point, TOriginX, TOriginY } from 'fabric';\nimport type { AligningGuidelines } from '..';\nimport type { LineProps } from '../typedefs';\nimport { getDistanceList } from './basic';\n\nexport function collectLine(\n this: AligningGuidelines,\n target: FabricObject,\n points: Point[],\n) {\n const list = target.getCoords();\n list.push(target.getCenterPoint());\n const margin = this.margin / this.canvas.getZoom();\n const opts = { target, list, points, margin };\n const vLines = collectPoints({ ...opts, type: 'x' });\n const hLines = collectPoints({ ...opts, type: 'y' });\n\n return { vLines, hLines };\n}\n\ntype CollectItemLineProps = {\n target: FabricObject;\n list: Point[];\n points: Point[];\n margin: number;\n type: 'x' | 'y';\n};\nconst originArr: [TOriginX, TOriginY][] = [\n ['left', 'top'],\n ['right', 'top'],\n ['right', 'bottom'],\n ['left', 'bottom'],\n ['center', 'center'],\n];\nfunction collectPoints(props: CollectItemLineProps) {\n const { target, list, points, margin, type } = props;\n const res: LineProps[] = [];\n const arr: ReturnType<typeof getDistanceList>[] = [];\n let min = Infinity;\n for (const item of list) {\n const o = getDistanceList(item, points, type);\n arr.push(o);\n if (min > o.dis) min = o.dis;\n }\n if (min > margin) return res;\n let b = false;\n for (let i = 0; i < list.length; i++) {\n if (arr[i].dis != min) continue;\n for (const item of arr[i].arr) {\n res.push({ origin: list[i], target: item });\n }\n\n if (b) continue;\n b = true;\n const d = arr[i].arr[0][type] - list[i][type];\n // It will change the original data, and the next time we collect y, use the modified data.\n list.forEach((item) => {\n item[type] += d;\n });\n target.setXY(list[i], ...originArr[i]);\n target.setCoords();\n }\n\n return res;\n}\n","import type { FabricObject } from 'fabric';\nimport { ActiveSelection, Group } from 'fabric';\n\nexport function getObjectsByTarget(target: FabricObject) {\n const objects = new Set<FabricObject>();\n const canvas = target.canvas;\n if (!canvas) return objects;\n const children =\n target instanceof ActiveSelection ? target.getObjects() : [target];\n\n canvas.forEachObject((o) => {\n if (!o.isOnScreen()) return;\n if (!o.visible) return;\n if (o.constructor == Group) {\n collectObjectsByGroup(objects, o);\n return;\n }\n objects.add(o);\n });\n\n deleteObjectsByList(objects, children);\n return objects;\n}\n\nfunction deleteObjectsByList(objects: Set<FabricObject>, list: FabricObject[]) {\n for (const target of list) {\n if (target.constructor == Group) {\n deleteObjectsByList(objects, (target as Group).getObjects());\n } else {\n objects.delete(target);\n }\n }\n}\n\nfunction collectObjectsByGroup(objects: Set<FabricObject>, g: Group) {\n const children = g.getObjects();\n for (const child of children) {\n if (!child.visible) continue;\n if (child.constructor == Group) {\n collectObjectsByGroup(objects, child);\n continue;\n }\n objects.add(child);\n }\n}\n","import {\n Point,\n FabricImage,\n Group,\n BaseFabricObject,\n type FabricObject,\n type TOriginX,\n type TOriginY,\n} from 'fabric';\n\n/**\n * Updates the fromObject function of a class to return a version that can restore old data\n * with values of originX and originY that are different from 'center', 'center'\n * Used to upgrade from fabric 6 to fabric 7\n * @param originalFn the original fromObject function of an object,\n * @param defaultOriginX optional default value for non exported originX,\n * @param defaultOriginY optional default value for non exported originY,\n * @returns a wrapped fromObject function for the object\n */\nexport const originUpdaterWrapper = <T extends FabricObject = FabricObject>(\n originalFn: (...args: any[]) => Promise<T>,\n defaultOriginX: TOriginX = 'left',\n defaultOriginY: TOriginY = 'top',\n): ((...args: any[]) => Promise<T>) =>\n async function (this: T, serializedObject, ...args) {\n // we default to left and top because those are defaults before deprecation\n const { originX = defaultOriginX, originY = defaultOriginY } =\n serializedObject;\n // and we do not want to pass those properties on the object anymore\n delete serializedObject.originX;\n delete serializedObject.originY;\n const originalObject = await originalFn.call(\n this,\n serializedObject,\n ...args,\n );\n const actualPosition = new Point(originalObject.left, originalObject.top);\n originalObject.setPositionByOrigin(actualPosition, originX, originY);\n return originalObject;\n };\n\n/**\n * Wraps and override the current fabricJS fromObject static functions\n * Used to upgrade from fabric 7 to fabric 8\n * If you used to export with includeDefaultValues = false, you have to specify\n * which were yours default origins values\n * @param originX optional default value for non exported originX,\n * @param originY optional default value for non exported originY,\n */\nexport const installOriginWrapperUpdater = (\n originX?: TOriginX,\n originY?: TOriginY,\n) => {\n // @ts-expect-error the _fromObject parameter could be instantiated differently\n BaseFabricObject._fromObject = originUpdaterWrapper(\n BaseFabricObject._fromObject,\n originX,\n originY,\n );\n // FabricImage and Group do not use _fromObject\n FabricImage.fromObject = originUpdaterWrapper<FabricImage>(\n FabricImage.fromObject,\n originX,\n originY,\n );\n Group.fromObject = originUpdaterWrapper<Group>(\n Group.fromObject,\n originX,\n originY,\n );\n};\n","import type { GradientOptions, ColorStop } from 'fabric';\nimport { Color, Gradient } from 'fabric';\n\n/**\n * Updates the fromObject function of a Gradient to return a version that can restore old data\n * with opactiy in color Stops\n * Used to upgrade from fabric 6 to fabric 7\n * @param originalFn the original fromObject function of an object,\n * @returns a wrapped fromObject function for the object\n */\n\ntype OldColorStop = ColorStop & {\n opacity?: number;\n};\n\nexport const gradientUpdaterWrapper = <S, T extends Gradient<S> = Gradient<S>>(\n originalFn: (\n options: GradientOptions<'linear'> | GradientOptions<'radial'>,\n ) => Promise<T>,\n): ((\n options: GradientOptions<'linear'> | GradientOptions<'radial'>,\n) => Promise<T>) =>\n async function (this: T, serializedGradient) {\n // we default to left and top because those are defaults before deprecation\n const { colorStops } = serializedGradient;\n // and we do not want to pass those properties on the object anymore\n const newColorStops: ColorStop[] = (\n colorStops as OldColorStop[]\n )?.map<ColorStop>(({ color, opacity, offset }) => {\n if (opacity === undefined || opacity === 1) {\n return {\n color,\n offset,\n };\n }\n const col = new Color(color).setAlpha(opacity).toRgba();\n return {\n color: col,\n offset,\n };\n });\n const gradient = await originalFn.call(this, {\n ...serializedGradient,\n colorStops: newColorStops,\n });\n return gradient;\n };\n\n/**\n * Wraps and override the current fabricJS fromObject static functions\n * Used to upgrade from fabric 7 to fabric 8\n * If you used to export with includeDefaultValues = false, you have to specify\n * which were yours default origins values\n */\nexport const installGradientUpdater = () => {\n // @ts-expect-error untypable\n Gradient.fromObject = gradientUpdaterWrapper(Gradient.fromObject);\n};\n","import wes from 'westures';\nimport { type Canvas, type CanvasEvents, type XY, util } from 'fabric';\n\ntype PinchEventData = {\n centroid: XY;\n event: PointerEvent;\n phase: string;\n type: 'pinch';\n scale: number;\n target: HTMLElement;\n};\n\ntype RotateEventData = {\n centroid: XY;\n event: PointerEvent;\n phase: string;\n type: 'rotate';\n rotation: number;\n target: HTMLElement;\n};\n\ntype TapEventData = {\n centroid: XY;\n event: PointerEvent;\n phase: string;\n type: 'tap';\n target: HTMLElement;\n};\n\n/**\n * Register this handler on canvas.on('pinch', pinchEventHandler);\n * To get an out of the box functionality for the pinch to zoom\n */\nexport function pinchEventHandler(\n this: Canvas,\n { scale, target, scenePoint }: CanvasEvents['pinch'],\n) {\n if (target && this.getActiveObject() === target) {\n // if we are pinching on the active object, let's scale it\n target.scaleX *= scale;\n target.scaleY *= scale;\n } else {\n this.zoomToPoint(scenePoint, this.getZoom() * scale);\n }\n}\n\nexport function rotateEventHandler(\n this: Canvas,\n { rotation, target }: CanvasEvents['rotate'],\n) {\n if (target && this.getActiveObject() === target) {\n target.rotate(target.angle + util.radiansToDegrees(rotation));\n }\n}\n\nexport const tripleTapGesture = (canvas: Canvas) => {\n return new wes.Tap(\n canvas.upperCanvasEl,\n ({ event }: TapEventData) => {\n canvas.fireEventFromPointerEvent(\n event,\n 'mouse:tripleclick',\n 'mousetripleclick',\n undefined,\n );\n event.preventDefault();\n },\n {\n numTaps: 3,\n maxRetain: 400,\n },\n );\n};\n\nexport const doubleTapGesture = (canvas: Canvas) => {\n return new wes.Tap(\n canvas.upperCanvasEl,\n ({ event }: TapEventData) => {\n canvas.fireEventFromPointerEvent(\n event,\n 'mouse:dblclick',\n 'mousedblclick',\n undefined,\n );\n event.preventDefault();\n },\n {\n numTaps: 2,\n maxRetain: 300,\n },\n );\n};\n\nexport const pinchGesture = (canvas: Canvas) => {\n return new wes.Pinch(\n canvas.upperCanvasEl,\n ({ scale, event }: PinchEventData) => {\n canvas.fireEventFromPointerEvent(event, 'pinch', 'pinch', { scale });\n },\n );\n};\n\nexport const rotateGesture = (canvas: Canvas) => {\n return new wes.Rotate(\n canvas.upperCanvasEl,\n ({ rotation, event }: RotateEventData) => {\n canvas.fireEventFromPointerEvent(event, 'rotate', 'rotate', { rotation });\n },\n );\n};\n\n/**\n * Add a serie of gestures recognition on the canvas\n */\nexport const addGestures = (canvas: Canvas) => {\n const canvasRegion = new wes.Region(canvas.upperCanvasEl);\n canvas.addOrRemove(\n (\n el: HTMLElement,\n ...args: Parameters<HTMLElement['removeEventListener']>\n ) => el.removeEventListener(...args),\n );\n canvasRegion.addGesture(rotateGesture(canvas));\n canvasRegion.addGesture(pinchGesture(canvas));\n canvasRegion.addGesture(tripleTapGesture(canvas));\n canvasRegion.addGesture(doubleTapGesture(canvas));\n // add back events, excluding the click one\n canvas.addOrRemove(\n (el: HTMLElement, ...args: Parameters<HTMLElement['addEventListener']>) =>\n el.addEventListener(...args),\n true,\n );\n};\n","import type {\n TModificationEvents,\n Transform,\n TransformActionHandler,\n FabricImage,\n ObjectEvents,\n} from 'fabric';\nimport { controlsUtils, Point, util } from 'fabric';\n\nconst { wrapWithFixedAnchor, wrapWithFireEvent } = controlsUtils;\n\n/**\n * Wrap controlsUtils.changeObjectWidth with image constrains\n */\nexport const changeImageWidth: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target } = transform;\n const { width } = target;\n const image = target as FabricImage;\n const modified = controlsUtils.changeObjectWidth(eventData, transform, x, y);\n const availableWidth = image._element.width - image.cropX;\n if (modified) {\n if (image.width > availableWidth) {\n image.width = availableWidth;\n }\n if (image.width < 1) {\n image.width = 1;\n }\n }\n return width !== image.width;\n};\n\nexport const changeCropWidth = wrapWithFireEvent(\n 'CROPPING' as TModificationEvents,\n wrapWithFixedAnchor(changeImageWidth),\n);\n\n/**\n * Wrap controlsUtils.changeObjectHeight with image constrains\n */\nexport const changeImageHeight: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target } = transform;\n const { height } = target;\n const image = target as FabricImage;\n const modified = controlsUtils.changeObjectHeight(eventData, transform, x, y);\n const availableHeight = image._element.height - image.cropY;\n if (modified) {\n if (image.height > availableHeight) {\n image.height = availableHeight;\n }\n if (image.height < 1) {\n image.height = 1;\n }\n }\n return height !== image.height;\n};\n\nexport const changeCropHeight = wrapWithFireEvent(\n 'CROPPING' as TModificationEvents,\n wrapWithFixedAnchor(changeImageHeight),\n);\n\nexport const changeImageCropX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target } = transform;\n const image = target as FabricImage;\n const { width, cropX } = image;\n const modified = controlsUtils.changeObjectWidth(eventData, transform, x, y);\n let newCropX = cropX + width - image.width;\n image.width = width;\n if (modified) {\n if (newCropX < 0) {\n newCropX = 0;\n }\n image.cropX = newCropX;\n // calculate new width on the base of how much crop we have now\n image.width += cropX - newCropX;\n }\n return newCropX !== cropX;\n};\n\nexport const changeImageCropY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target } = transform;\n const image = target as FabricImage;\n const { height, cropY } = image;\n const modified = controlsUtils.changeObjectHeight(eventData, transform, x, y);\n let newCropY = cropY + height - image.height;\n image.height = height;\n if (modified) {\n if (newCropY < 0) {\n newCropY = 0;\n }\n image.cropY = newCropY;\n image.height += cropY - newCropY;\n }\n return newCropY !== cropY;\n};\n\nexport const changeCropX = wrapWithFireEvent(\n 'CROPPING' as TModificationEvents,\n wrapWithFixedAnchor(changeImageCropX),\n);\n\nexport const changeCropY = wrapWithFireEvent(\n 'CROPPING' as TModificationEvents,\n wrapWithFixedAnchor(changeImageCropY),\n);\n\n/**\n * A function to counter the move action and change cropX/cropY of an image\n * Keep the image steady, but moves it inside its own cropping rectangle\n */\nexport const cropPanMoveHandler = ({ transform }: ObjectEvents['moving']) => {\n // this makes the image pan too fast.\n const { target, original } = transform as Transform;\n const fabricImage = target as FabricImage;\n const p = new Point(\n target.left - original.left,\n target.top - original.top,\n ).transform(\n util.invertTransform(\n util.createRotateMatrix({ angle: fabricImage.getTotalAngle() }),\n ),\n );\n let cropX = original.cropX! - p.x / fabricImage.scaleX;\n let cropY = original.cropY! - p.y / fabricImage.scaleY;\n const { width, height, _element } = fabricImage;\n if (cropX < 0) {\n cropX = 0;\n }\n if (cropY < 0) {\n cropY = 0;\n }\n if (cropX + width > _element.width) {\n cropX = _element.width - width;\n }\n if (cropY + height > _element.height) {\n cropY = _element.height - height;\n }\n fabricImage.cropX = cropX;\n fabricImage.cropY = cropY;\n fabricImage.left = original.left;\n fabricImage.top = original.top;\n};\n","import {\n type ControlRenderingStyleOverride,\n type InteractiveFabricObject,\n util,\n type Control,\n} from 'fabric';\n\nconst { degreesToRadians } = util;\n\n/**\n * Render a control for the main corners of a cropping image\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for FabricObject controls style\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n */\nexport function renderCornerControl(\n this: Control,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: InteractiveFabricObject,\n) {\n ctx.save();\n const { stroke, xSize, ySize, opName } = this.commonRenderProps(\n ctx,\n left,\n top,\n fabricObject,\n styleOverride,\n ),\n xSizeBy2 = xSize / 2,\n ySizeBy2 = ySize / 2;\n // angle is relative to canvas plane\n ctx.rotate(degreesToRadians(this.angle));\n ctx.beginPath();\n ctx.moveTo(-ySizeBy2, 0);\n ctx.lineTo(-ySizeBy2, xSizeBy2);\n ctx.lineTo(ySizeBy2, xSizeBy2);\n ctx.lineTo(ySizeBy2, ySizeBy2);\n ctx.lineTo(xSizeBy2, ySizeBy2);\n ctx.lineTo(xSizeBy2, -ySizeBy2);\n ctx.lineTo(-ySizeBy2, -ySizeBy2);\n ctx.closePath();\n ctx[opName]();\n stroke && ctx.stroke();\n ctx.restore();\n}\n","import { Control, controlsUtils } from 'fabric';\nimport {\n changeCropHeight,\n changeCropWidth,\n changeCropX,\n changeCropY,\n} from './croppingHandlers';\nimport { renderCornerControl } from './renderCornerControl';\n\nconst { scaleCursorStyleHandler } = controlsUtils;\n\nconst cropActionName = () => 'crop';\n// use this function if you want to generate new controls for every instance\nexport const createImageCroppingControls = () => ({\n ml: new Control({\n x: -0.5,\n y: 0,\n sizeX: 4,\n sizeY: 20,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: changeCropX,\n getActionName: cropActionName,\n }),\n\n mr: new Control({\n x: 0.5,\n y: 0,\n sizeX: 4,\n sizeY: 20,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: changeCropWidth,\n getActionName: cropActionName,\n }),\n\n mb: new Control({\n x: 0,\n y: 0.5,\n sizeX: 20,\n sizeY: 4,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: changeCropHeight,\n getActionName: cropActionName,\n }),\n\n mt: new Control({\n x: 0,\n y: -0.5,\n sizeX: 20,\n sizeY: 4,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: changeCropY,\n getActionName: cropActionName,\n }),\n\n tl: new Control({\n angle: 0,\n x: -0.5,\n y: -0.5,\n sizeX: 20,\n sizeY: 4,\n render: renderCornerControl,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: (...args) => {\n const cropX = changeCropX(...args);\n const cropY = changeCropY(...args);\n return cropX || cropY;\n },\n getActionName: cropActionName,\n }),\n\n tr: new Control({\n angle: 90,\n x: 0.5,\n y: -0.5,\n sizeX: 20,\n sizeY: 4,\n render: renderCornerControl,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: (...args) => {\n const width = changeCropWidth(...args);\n const cropY = changeCropY(...args);\n return width || cropY;\n },\n getActionName: cropActionName,\n }),\n\n bl: new Control({\n angle: 270,\n x: -0.5,\n y: 0.5,\n sizeX: 20,\n sizeY: 4,\n render: renderCornerControl,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: (...args) => {\n const height = changeCropHeight(...args);\n const cropX = changeCropX(...args);\n return height || cropX;\n },\n getActionName: cropActionName,\n }),\n\n br: new Control({\n angle: 180,\n x: 0.5,\n y: 0.5,\n sizeX: 20,\n sizeY: 4,\n render: renderCornerControl,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: (...args) => {\n const height = changeCropHeight(...args);\n const width = changeCropWidth(...args);\n return height || width;\n },\n getActionName: cropActionName,\n }),\n});\n","import {\n type BasicTransformEvent,\n type Canvas,\n type FabricObject,\n type TPointerEvent,\n type Point,\n util,\n} from 'fabric';\nimport {\n collectHorizontalPoint,\n collectVerticalPoint,\n} from './util/collect-point';\nimport {\n drawHorizontalLine,\n drawLine,\n drawPointList,\n drawVerticalLine,\n drawX,\n} from './util/draw';\nimport { collectLine } from './util/collect-line';\nimport type { AligningLineConfig, OriginMap } from './typedefs';\nimport { getObjectsByTarget } from './util/get-objects-by-target';\nimport { getContraryMap, getPointMap } from './util/basic';\n\ntype TransformEvent = BasicTransformEvent<TPointerEvent> & {\n target: FabricObject;\n};\n\nexport class AligningGuidelines {\n canvas: Canvas;\n horizontalLines = new Set<string>();\n verticalLines = new Set<string>();\n cacheMap = new Map<string, Point[]>();\n /**\n * When we drag to resize using center points like mt, ml, mb, and mr,\n * we do not need to draw line segments; we only need to draw the target points.\n */\n onlyDrawPoint = false;\n /** Alignment method is required when customizing. */\n contraryOriginMap: OriginMap = {\n tl: ['right', 'bottom'],\n tr: ['left', 'bottom'],\n br: ['left', 'top'],\n bl: ['right', 'top'],\n mt: ['center', 'bottom'],\n mr: ['left', 'center'],\n mb: ['center', 'top'],\n ml: ['right', 'center'],\n };\n xSize = 2.4;\n lineDash: number[] | undefined;\n /** At what distance from the shape does alignment begin? */\n margin = 4;\n /** Aligning line dimensions */\n width = 1;\n /** Aligning line color */\n color = 'rgba(255,0,0,0.9)';\n /** Close Vertical line, default false. */\n closeVLine = false;\n /** Close horizontal line, default false. */\n closeHLine = false;\n\n constructor(canvas: Canvas, options: Partial<AligningLineConfig> = {}) {\n this.canvas = canvas;\n Object.assign(this, options);\n\n this.mouseUp = this.mouseUp.bind(this);\n this.scalingOrResizing = this.scalingOrResizing.bind(this);\n this.moving = this.moving.bind(this);\n this.beforeRender = this.beforeRender.bind(this);\n this.afterRender = this.afterRender.bind(this);\n\n this.initBehavior();\n }\n initBehavior() {\n this.canvas.on('mouse:up', this.mouseUp);\n this.canvas.on('object:resizing', this.scalingOrResizing);\n this.canvas.on('object:scaling', this.scalingOrResizing);\n this.canvas.on('object:moving', this.moving);\n this.canvas.on('before:render', this.beforeRender);\n this.canvas.on('after:render', this.afterRender);\n }\n /** Returns shapes that can draw aligning lines, default returns all shapes on the canvas excluding groups. */\n getObjectsByTarget(target: FabricObject) {\n return getObjectsByTarget(target);\n }\n /** When the user customizes the controller, this property is set to enable or disable automatic alignment through point scaling/resizing. */\n getPointMap(target: FabricObject) {\n return getPointMap(target);\n }\n /** When the user customizes the controller, this property is used to enable or disable alignment positioning through points. */\n getContraryMap(target: FabricObject) {\n return getContraryMap(target);\n }\n /** Users can customize. */\n getCaCheMapValue(object: FabricObject) {\n const cacheKey = [\n object.calcTransformMatrix().toString(),\n object.width,\n object.height,\n ].join();\n const cacheValue = this.cacheMap.get(cacheKey);\n if (cacheValue) return cacheValue;\n const value = object.getCoords();\n value.push(object.getCenterPoint());\n this.cacheMap.set(cacheKey, value);\n return value;\n }\n drawLine(origin: Point, target: Point) {\n drawLine.call(this, origin, target);\n }\n drawX(point: Point, dir: number) {\n drawX.call(this, point, dir);\n }\n mouseUp() {\n this.verticalLines.clear();\n this.horizontalLines.clear();\n this.cacheMap.clear();\n this.canvas.requestRenderAll();\n }\n\n scalingOrResizing(e: TransformEvent) {\n const target = e.target;\n // We need to obtain the real-time coordinates of the current object, so we need to update them in real-time\n target.setCoords();\n // The value of action can be scaleX, scaleY, scale, resize, etc.\n // If it does not start with \"scale,\" it is considered a modification of size.\n const isScale = String(e.transform.action).startsWith('scale');\n this.verticalLines.clear();\n this.horizontalLines.clear();\n\n const objects = this.getObjectsByTarget(target);\n // When the shape is flipped, the tl obtained through getCoords is actually tr,\n // and tl is actually tr. We need to make correction adjustments.\n // tr <-> tl、 bl <-> br、 mb <-> mt、 ml <-> mr\n let corner = e.transform.corner;\n if (target.flipX) {\n if (corner.includes('l')) corner = corner.replace('l', 'r');\n else if (corner.includes('r')) corner = corner.replace('r', 'l');\n }\n if (target.flipY) {\n if (corner.includes('t')) corner = corner.replace('t', 'b');\n else if (corner.includes('b')) corner = corner.replace('b', 't');\n }\n\n // Obtain the coordinates of the current operation point through the value of corner.\n // users can be allowed to customize and pass in custom corners.\n const pointMap = this.getPointMap(target);\n if (!(corner in pointMap)) return;\n this.onlyDrawPoint = corner.includes('m');\n if (this.onlyDrawPoint) {\n const angle = target.getTotalAngle();\n // When the shape is rotated, it is meaningless to draw points using the center point.\n if (angle % 90 != 0) return;\n }\n // If manipulating tl, then when the shape changes size, it should be positioned by br,\n // and the same applies to others.\n // users can be allowed to customize and pass in custom corners.\n const contraryMap = this.getContraryMap(target);\n const point = pointMap[corner];\n let diagonalPoint = contraryMap[corner];\n // When holding the centerKey (default is altKey), the shape will scale based on the center point, with the reference point being the center.\n const isCenter =\n e.transform.original.originX == 'center' &&\n e.transform.original.originY == 'center';\n if (isCenter) {\n const p = target.group\n ? point.transform(\n util.invertTransform(target.group.calcTransformMatrix()),\n )\n : point;\n diagonalPoint = diagonalPoint.add(p).scalarDivide(2);\n }\n const uniformIsToggled = e.e[this.canvas.uniScaleKey!];\n let isUniform =\n (this.canvas.uniformScaling && !uniformIsToggled) ||\n (!this.canvas.uniformScaling && uniformIsToggled);\n // When controlling through the center point,\n // if isUniform is true, it actually changes the skew, so it is meaningless.\n if (this.onlyDrawPoint) isUniform = false;\n\n const list: Point[] = [];\n for (const object of objects) {\n const d = this.getCaCheMapValue(object);\n list.push(...d);\n }\n\n const props = {\n target,\n point,\n diagonalPoint,\n corner,\n list,\n isScale,\n isUniform,\n isCenter,\n };\n\n // Obtain horizontal and vertical reference lines.\n const noNeedToCollectV =\n this.onlyDrawPoint && (corner.includes('t') || corner.includes('b'));\n const noNeedToCollectH =\n this.onlyDrawPoint && (corner.includes('l') || corner.includes('r'));\n const vList = noNeedToCollectV\n ? []\n : collectVerticalPoint.call(this, props);\n const hList = noNeedToCollectH\n ? []\n : collectHorizontalPoint.call(this, props);\n vList.forEach((o) => {\n // Objects cannot be deduplicated; convert them to strings for deduplication.\n this.verticalLines.add(JSON.stringify(o));\n });\n hList.forEach((o) => {\n // Objects cannot be deduplicated; convert them to strings for deduplication.\n this.horizontalLines.add(JSON.stringify(o));\n });\n }\n moving(e: TransformEvent) {\n const target = e.target;\n // We need to obtain the real-time coordinates of the current object, so we need to update them in real-time\n target.setCoords();\n this.onlyDrawPoint = false;\n this.verticalLines.clear();\n this.horizontalLines.clear();\n\n // Find the shapes associated with the current graphic to draw reference lines for it.\n const objects = this.getObjectsByTarget(target);\n const points: Point[] = [];\n // Collect all the points to draw reference lines.\n for (const object of objects) points.push(...this.getCaCheMapValue(object));\n\n // Obtain horizontal and vertical reference lines.\n const { vLines, hLines } = collectLine.call(this, target, points);\n vLines.forEach((o) => {\n // Objects cannot be deduplicated; convert them to strings for deduplication.\n this.verticalLines.add(JSON.stringify(o));\n });\n hLines.forEach((o) => {\n // Objects cannot be deduplicated; convert them to strings for deduplication.\n this.horizontalLines.add(JSON.stringify(o));\n });\n }\n beforeRender() {\n this.canvas.clearContext(this.canvas.contextTop);\n }\n afterRender() {\n if (this.onlyDrawPoint) {\n drawPointList.call(this);\n } else {\n drawVerticalLine.call(this);\n drawHorizontalLine.call(this);\n }\n }\n\n dispose() {\n this.canvas.off('mouse:up', this.mouseUp);\n this.canvas.off('object:resizing', this.scalingOrResizing);\n this.canvas.off('object:scaling', this.scalingOrResizing);\n this.canvas.off('object:moving', this.moving);\n this.canvas.off('before:render', this.beforeRender);\n this.canvas.off('after:render', this.afterRender);\n }\n}\n","import { type FabricImage, type TPointerEventInfo } from 'fabric';\nimport { createImageCroppingControls } from './croppingControls';\nimport { cropPanMoveHandler } from './croppingHandlers';\n/**\n * Coordinates the change to image to enter crop mode and returns\n * a function to exit crop mode\n */\nexport const enterCropMode = function enterCropMode(\n this: (args: TPointerEventInfo) => void,\n { target }: TPointerEventInfo,\n) {\n const fabricImage = target as FabricImage;\n const { controls } = fabricImage;\n fabricImage.controls = createImageCroppingControls();\n fabricImage.on('moving', cropPanMoveHandler);\n fabricImage.setCoords();\n const exitCropMode = () => {\n fabricImage.off('moving', cropPanMoveHandler);\n fabricImage.controls = controls;\n fabricImage.setCoords();\n fabricImage.once('mousedblclick', enterCropMode);\n fabricImage.canvas?.requestRenderAll();\n };\n fabricImage.once('mousedblclick', exitCropMode);\n fabricImage.canvas?.requestRenderAll();\n};\n"],"names":["getDistance","a","b","Math","abs","getDistanceList","point","list","type","dis","Infinity","arr","item","v","push","collectVerticalPoint","props","target","isScale","isUniform","corner","diagonalPoint","isCenter","this","margin","canvas","getZoom","length","x","includes","width","height","scaleX","scaleY","scaleWidth","strokeUniform","strokeWidth","sx","set","setRelativeXY","originArr","contraryOriginMap","setCoords","map","origin","collectHorizontalPoint","y","scaleHeight","sy","drawLine","ctx","getTopContext","viewportTransform","zoom","save","transform","lineWidth","lineDash","setLineDash","strokeStyle","color","beginPath","moveTo","lineTo","stroke","drawX","restore","_","size","xSize","translate","drawPoint","drawPointList","closeVLine","verticalLines","JSON","parse","closeHLine","h","horizontalLines","call","drawVerticalLine","o","Point","drawHorizontalLine","collectLine","points","getCoords","getCenterPoint","opts","vLines","collectPoints","hLines","res","min","i","d","forEach","setXY","getObjectsByTarget","objects","Set","children","ActiveSelection","getObjects","forEachObject","isOnScreen","visible","constructor","Group","add","collectObjectsByGroup","deleteObjectsByList","delete","g","child","originUpdaterWrapper","originalFn","defaultOriginX","arguments","undefined","defaultOriginY","async","serializedObject","originX","originY","_len","args","Array","_key","originalObject","actualPosition","left","top","setPositionByOrigin","gradientUpdaterWrapper","serializedGradient","colorStops","newColorStops","_ref","opacity","offset","Color","setAlpha","toRgba","wrapWithFixedAnchor","wrapWithFireEvent","controlsUtils","changeCropWidth","changeImageWidth","eventData","image","modified","changeObjectWidth","availableWidth","_element","cropX","changeCropHeight","changeImageHeight","changeObjectHeight","availableHeight","cropY","changeCropX","changeImageCropX","newCropX","changeCropY","changeImageCropY","newCropY","cropPanMoveHandler","original","fabricImage","p","util","invertTransform","createRotateMatrix","angle","getTotalAngle","degreesToRadians","renderCornerControl","styleOverride","fabricObject","ySize","opName","commonRenderProps","xSizeBy2","ySizeBy2","rotate","closePath","scaleCursorStyleHandler","cropActionName","createImageCroppingControls","ml","Control","sizeX","sizeY","cursorStyleHandler","actionHandler","getActionName","mr","mb","mt","tl","render","tr","bl","br","options","_defineProperty","Map","Object","assign","mouseUp","bind","scalingOrResizing","moving","beforeRender","afterRender","initBehavior","on","getPointMap","coords","scalarDivide","getContraryMap","_target$aCoords","aCoords","calcACoords","getCaCheMapValue","object","cacheKey","calcTransformMatrix","toString","join","cacheValue","cacheMap","get","value","dir","clear","requestRenderAll","e","String","action","startsWith","flipX","replace","flipY","pointMap","onlyDrawPoint","contraryMap","group","uniformIsToggled","uniScaleKey","uniformScaling","noNeedToCollectV","noNeedToCollectH","vList","hList","stringify","clearContext","contextTop","dispose","off","canvasRegion","wes","Region","upperCanvasEl","addOrRemove","el","removeEventListener","addGesture","Rotate","_ref6","rotation","event","fireEventFromPointerEvent","rotateGesture","Pinch","_ref5","scale","pinchGesture","Tap","_ref3","preventDefault","numTaps","maxRetain","tripleTapGesture","_ref4","doubleTapGesture","_len2","_key2","addEventListener","enterCropMode","_fabricImage$canvas2","controls","once","exitCropMode","_fabricImage$canvas","installGradientUpdater","Gradient","fromObject","installOriginWrapperUpdater","BaseFabricObject","_fromObject","FabricImage","scenePoint","getActiveObject","zoomToPoint","_ref2","radiansToDegrees"],"mappings":"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"}
1
+ {"version":3,"file":"fabric-extensions.min.js","sources":["../extensions/aligning_guidelines/util/basic.ts","../extensions/aligning_guidelines/util/collect-point.ts","../extensions/aligning_guidelines/util/draw.ts","../extensions/aligning_guidelines/util/collect-line.ts","../extensions/aligning_guidelines/util/get-objects-by-target.ts","../extensions/data_updaters/origins/index.ts","../extensions/data_updaters/gradient/index.ts","../extensions/westures_integration/index.ts","../extensions/cropping_controls/croppingHandlers.ts","../extensions/cropping_controls/renderCornerControl.ts","../extensions/cropping_controls/croppingControls.ts","../extensions/aligning_guidelines/index.ts","../extensions/cropping_controls/enterCropMode.ts"],"sourcesContent":["import type { FabricObject, Point } from 'fabric';\nimport type { PointMap } from '../typedefs';\n\nexport function getDistance(a: number, b: number) {\n return Math.abs(a - b);\n}\n\nexport function getDistanceList(point: Point, list: Point[], type: 'x' | 'y') {\n let dis = Infinity;\n let arr: Point[] = [];\n for (const item of list) {\n const v = getDistance(point[type], item[type]);\n if (dis > v) {\n arr = [];\n dis = v;\n }\n if (dis == v) {\n arr.push(item);\n }\n }\n return { dis, arr };\n}\n\nexport function getPointMap(target: FabricObject): PointMap {\n const coords = target.getCoords();\n return {\n tl: coords[0],\n tr: coords[1],\n br: coords[2],\n bl: coords[3],\n mt: coords[0].add(coords[1]).scalarDivide(2),\n mr: coords[1].add(coords[2]).scalarDivide(2),\n mb: coords[2].add(coords[3]).scalarDivide(2),\n ml: coords[3].add(coords[0]).scalarDivide(2),\n };\n}\n\nexport function getContraryMap(target: FabricObject): PointMap {\n const aCoords = target.aCoords ?? target.calcACoords();\n return {\n tl: aCoords.br,\n tr: aCoords.bl,\n br: aCoords.tl,\n bl: aCoords.tr,\n mt: aCoords.br.add(aCoords.bl).scalarDivide(2),\n mr: aCoords.bl.add(aCoords.tl).scalarDivide(2),\n mb: aCoords.tl.add(aCoords.tr).scalarDivide(2),\n ml: aCoords.tr.add(aCoords.br).scalarDivide(2),\n };\n}\n","import type { FabricObject, Point } from 'fabric';\nimport type { AligningGuidelines } from '..';\nimport type { LineProps } from '../typedefs';\nimport { getDistanceList } from './basic';\n\ntype CollectPointProps = {\n target: FabricObject;\n /** Operation points of the target element: top-left, bottom-left, top-right, bottom-right */\n point: Point;\n /** Position using diagonal points when resizing/scaling. */\n diagonalPoint: Point;\n /** Set of points to consider for alignment: [tl, tr, br, bl, center] */\n list: Point[];\n /** Change the zoom or change the size, determine by whether e.transform.action starts with the string \"scale\" */\n isScale: boolean;\n /** Whether to change uniformly is determined by canvas.uniformScaling and canvas.uniScaleKey. */\n isUniform: boolean;\n /** When holding the centerKey (default is altKey), the shape will scale based on the center point, with the reference point being the center. */\n isCenter: boolean;\n /** tl、tr、br、bl、mt、mr、mb、ml */\n corner: string;\n};\n\nexport function collectVerticalPoint(\n this: AligningGuidelines,\n props: CollectPointProps,\n): LineProps[] {\n const {\n target,\n isScale,\n isUniform,\n corner,\n point,\n diagonalPoint,\n list,\n isCenter,\n } = props;\n const { dis, arr } = getDistanceList(point, list, 'x');\n const margin = this.margin / this.canvas.getZoom();\n if (dis > margin) return [];\n let v = arr[arr.length - 1].x - point.x;\n // tl bl ml\n // If modifying on the left side, the size decreases; conversely, it increases.\n const dirX = corner.includes('l') ? -1 : 1;\n v *= dirX;\n\n const { width, height, scaleX, scaleY } = target;\n // Because when modifying through the center point, isUniform is always false, so skew does not need to be considered.\n const dStrokeWidth = target.strokeUniform ? 0 : target.strokeWidth;\n const scaleWidth = scaleX * width + dStrokeWidth;\n const sx = (v + scaleWidth) / scaleWidth;\n // When v equals -scaleWidth, sx equals 0.\n if (sx == 0) return [];\n if (isScale) {\n target.set('scaleX', scaleX * sx);\n if (isUniform) target.set('scaleY', scaleY * sx);\n } else {\n target.set('width', width * sx);\n if (isUniform) target.set('height', height * sx);\n }\n if (isCenter) {\n target.setRelativeXY(diagonalPoint, 'center', 'center');\n } else {\n const originArr = this.contraryOriginMap;\n target.setRelativeXY(diagonalPoint, ...originArr[corner]);\n }\n target.setCoords();\n return arr.map((target) => ({ origin: point, target }));\n}\n\nexport function collectHorizontalPoint(\n this: AligningGuidelines,\n props: CollectPointProps,\n): LineProps[] {\n const {\n target,\n isScale,\n isUniform,\n corner,\n point,\n diagonalPoint,\n list,\n isCenter,\n } = props;\n const { dis, arr } = getDistanceList(point, list, 'y');\n const margin = this.margin / this.canvas.getZoom();\n if (dis > margin) return [];\n let v = arr[arr.length - 1].y - point.y;\n // tl mt tr\n // If modifying on the top side, the size decreases; conversely, it increases.\n const dirY = corner.includes('t') ? -1 : 1;\n v *= dirY;\n\n const { width, height, scaleX, scaleY } = target;\n // Because when modifying through the center point, isUniform is always false, so skew does not need to be considered.\n const dStrokeWidth = target.strokeUniform ? 0 : target.strokeWidth;\n const scaleHeight = scaleY * height + dStrokeWidth;\n const sy = (v + scaleHeight) / scaleHeight;\n // When v equals -scaleHeight, sy equals 0.\n if (sy == 0) return [];\n if (isScale) {\n target.set('scaleY', scaleY * sy);\n if (isUniform) target.set('scaleX', scaleX * sy);\n } else {\n target.set('height', height * sy);\n if (isUniform) target.set('width', width * sy);\n }\n if (isCenter) {\n target.setRelativeXY(diagonalPoint, 'center', 'center');\n } else {\n const originArr = this.contraryOriginMap;\n target.setRelativeXY(diagonalPoint, ...originArr[corner]);\n }\n target.setCoords();\n return arr.map((target) => ({ origin: point, target }));\n}\n","import { Point } from 'fabric';\nimport type { AligningGuidelines } from '..';\n\nexport function drawLine(\n this: AligningGuidelines,\n origin: Point,\n target: Point,\n) {\n const ctx = this.canvas.getTopContext();\n const viewportTransform = this.canvas.viewportTransform;\n const zoom = this.canvas.getZoom();\n ctx.save();\n ctx.transform(...viewportTransform);\n ctx.lineWidth = this.width / zoom;\n if (this.lineDash) ctx.setLineDash(this.lineDash);\n ctx.strokeStyle = this.color;\n ctx.beginPath();\n ctx.moveTo(origin.x, origin.y);\n ctx.lineTo(target.x, target.y);\n ctx.stroke();\n if (this.lineDash) ctx.setLineDash([]);\n\n this.drawX(origin, -1);\n this.drawX(target, 1);\n ctx.restore();\n}\n\nexport function drawX(this: AligningGuidelines, point: Point, _: number) {\n const ctx = this.canvas.getTopContext();\n const zoom = this.canvas.getZoom();\n const size = this.xSize / zoom;\n ctx.save();\n ctx.translate(point.x, point.y);\n ctx.beginPath();\n ctx.moveTo(-size, -size);\n ctx.lineTo(size, size);\n ctx.moveTo(size, -size);\n ctx.lineTo(-size, size);\n ctx.stroke();\n ctx.restore();\n}\nfunction drawPoint(this: AligningGuidelines, arr: Point[]) {\n const ctx = this.canvas.getTopContext();\n const viewportTransform = this.canvas.viewportTransform;\n const zoom = this.canvas.getZoom();\n ctx.save();\n ctx.transform(...viewportTransform);\n ctx.lineWidth = this.width / zoom;\n ctx.strokeStyle = this.color;\n for (const item of arr) this.drawX(item, 0);\n ctx.restore();\n}\n\nexport function drawPointList(this: AligningGuidelines) {\n const list = [];\n if (!this.closeVLine) {\n for (const v of this.verticalLines) list.push(JSON.parse(v));\n }\n if (!this.closeHLine) {\n for (const h of this.horizontalLines) list.push(JSON.parse(h));\n }\n const arr = list.map((item) => item.target);\n drawPoint.call(this, arr);\n}\n\nexport function drawVerticalLine(this: AligningGuidelines) {\n if (this.closeVLine) return;\n\n for (const v of this.verticalLines) {\n const { origin, target } = JSON.parse(v);\n const o = new Point(target.x, origin.y);\n this.drawLine(o, target);\n }\n}\n\nexport function drawHorizontalLine(this: AligningGuidelines) {\n if (this.closeHLine) return;\n\n for (const v of this.horizontalLines) {\n const { origin, target } = JSON.parse(v);\n const o = new Point(origin.x, target.y);\n this.drawLine(o, target);\n }\n}\n","import type { FabricObject, Point, TOriginX, TOriginY } from 'fabric';\nimport type { AligningGuidelines } from '..';\nimport type { LineProps } from '../typedefs';\nimport { getDistanceList } from './basic';\n\nexport function collectLine(\n this: AligningGuidelines,\n target: FabricObject,\n points: Point[],\n) {\n const list = target.getCoords();\n list.push(target.getCenterPoint());\n const margin = this.margin / this.canvas.getZoom();\n const opts = { target, list, points, margin };\n const vLines = collectPoints({ ...opts, type: 'x' });\n const hLines = collectPoints({ ...opts, type: 'y' });\n\n return { vLines, hLines };\n}\n\ntype CollectItemLineProps = {\n target: FabricObject;\n list: Point[];\n points: Point[];\n margin: number;\n type: 'x' | 'y';\n};\nconst originArr: [TOriginX, TOriginY][] = [\n ['left', 'top'],\n ['right', 'top'],\n ['right', 'bottom'],\n ['left', 'bottom'],\n ['center', 'center'],\n];\nfunction collectPoints(props: CollectItemLineProps) {\n const { target, list, points, margin, type } = props;\n const res: LineProps[] = [];\n const arr: ReturnType<typeof getDistanceList>[] = [];\n let min = Infinity;\n for (const item of list) {\n const o = getDistanceList(item, points, type);\n arr.push(o);\n if (min > o.dis) min = o.dis;\n }\n if (min > margin) return res;\n let b = false;\n for (let i = 0; i < list.length; i++) {\n if (arr[i].dis != min) continue;\n for (const item of arr[i].arr) {\n res.push({ origin: list[i], target: item });\n }\n\n if (b) continue;\n b = true;\n const d = arr[i].arr[0][type] - list[i][type];\n // It will change the original data, and the next time we collect y, use the modified data.\n list.forEach((item) => {\n item[type] += d;\n });\n target.setXY(list[i], ...originArr[i]);\n target.setCoords();\n }\n\n return res;\n}\n","import type { FabricObject } from 'fabric';\nimport { ActiveSelection, Group } from 'fabric';\n\nexport function getObjectsByTarget(target: FabricObject) {\n const objects = new Set<FabricObject>();\n const canvas = target.canvas;\n if (!canvas) return objects;\n const children =\n target instanceof ActiveSelection ? target.getObjects() : [target];\n\n canvas.forEachObject((o) => {\n if (!o.isOnScreen()) return;\n if (!o.visible) return;\n if (o.constructor == Group) {\n collectObjectsByGroup(objects, o);\n return;\n }\n objects.add(o);\n });\n\n deleteObjectsByList(objects, children);\n return objects;\n}\n\nfunction deleteObjectsByList(objects: Set<FabricObject>, list: FabricObject[]) {\n for (const target of list) {\n if (target.constructor == Group) {\n deleteObjectsByList(objects, (target as Group).getObjects());\n } else {\n objects.delete(target);\n }\n }\n}\n\nfunction collectObjectsByGroup(objects: Set<FabricObject>, g: Group) {\n const children = g.getObjects();\n for (const child of children) {\n if (!child.visible) continue;\n if (child.constructor == Group) {\n collectObjectsByGroup(objects, child);\n continue;\n }\n objects.add(child);\n }\n}\n","import {\n Point,\n FabricImage,\n Group,\n BaseFabricObject,\n type FabricObject,\n type TOriginX,\n type TOriginY,\n} from 'fabric';\n\n/**\n * Updates the fromObject function of a class to return a version that can restore old data\n * with values of originX and originY that are different from 'center', 'center'\n * Used to upgrade from fabric 6 to fabric 7\n * @param originalFn the original fromObject function of an object,\n * @param defaultOriginX optional default value for non exported originX,\n * @param defaultOriginY optional default value for non exported originY,\n * @returns a wrapped fromObject function for the object\n */\nexport const originUpdaterWrapper = <T extends FabricObject = FabricObject>(\n originalFn: (...args: any[]) => Promise<T>,\n defaultOriginX: TOriginX = 'left',\n defaultOriginY: TOriginY = 'top',\n): ((...args: any[]) => Promise<T>) =>\n async function (this: T, serializedObject, ...args) {\n // we default to left and top because those are defaults before deprecation\n const { originX = defaultOriginX, originY = defaultOriginY } =\n serializedObject;\n // and we do not want to pass those properties on the object anymore\n delete serializedObject.originX;\n delete serializedObject.originY;\n const originalObject = await originalFn.call(\n this,\n serializedObject,\n ...args,\n );\n const actualPosition = new Point(originalObject.left, originalObject.top);\n originalObject.setPositionByOrigin(actualPosition, originX, originY);\n return originalObject;\n };\n\n/**\n * Wraps and override the current fabricJS fromObject static functions\n * Used to upgrade from fabric 7 to fabric 8\n * If you used to export with includeDefaultValues = false, you have to specify\n * which were yours default origins values\n * @param originX optional default value for non exported originX,\n * @param originY optional default value for non exported originY,\n */\nexport const installOriginWrapperUpdater = (\n originX?: TOriginX,\n originY?: TOriginY,\n) => {\n // @ts-expect-error the _fromObject parameter could be instantiated differently\n BaseFabricObject._fromObject = originUpdaterWrapper(\n BaseFabricObject._fromObject,\n originX,\n originY,\n );\n // FabricImage and Group do not use _fromObject\n FabricImage.fromObject = originUpdaterWrapper<FabricImage>(\n FabricImage.fromObject,\n originX,\n originY,\n );\n Group.fromObject = originUpdaterWrapper<Group>(\n Group.fromObject,\n originX,\n originY,\n );\n};\n","import type { GradientOptions, ColorStop } from 'fabric';\nimport { Color, Gradient } from 'fabric';\n\n/**\n * Updates the fromObject function of a Gradient to return a version that can restore old data\n * with opactiy in color Stops\n * Used to upgrade from fabric 6 to fabric 7\n * @param originalFn the original fromObject function of an object,\n * @returns a wrapped fromObject function for the object\n */\n\ntype OldColorStop = ColorStop & {\n opacity?: number;\n};\n\nexport const gradientUpdaterWrapper = <S, T extends Gradient<S> = Gradient<S>>(\n originalFn: (\n options: GradientOptions<'linear'> | GradientOptions<'radial'>,\n ) => Promise<T>,\n): ((\n options: GradientOptions<'linear'> | GradientOptions<'radial'>,\n) => Promise<T>) =>\n async function (this: T, serializedGradient) {\n // we default to left and top because those are defaults before deprecation\n const { colorStops } = serializedGradient;\n // and we do not want to pass those properties on the object anymore\n const newColorStops: ColorStop[] = (\n colorStops as OldColorStop[]\n )?.map<ColorStop>(({ color, opacity, offset }) => {\n if (opacity === undefined || opacity === 1) {\n return {\n color,\n offset,\n };\n }\n const col = new Color(color).setAlpha(opacity).toRgba();\n return {\n color: col,\n offset,\n };\n });\n const gradient = await originalFn.call(this, {\n ...serializedGradient,\n colorStops: newColorStops,\n });\n return gradient;\n };\n\n/**\n * Wraps and override the current fabricJS fromObject static functions\n * Used to upgrade from fabric 7 to fabric 8\n * If you used to export with includeDefaultValues = false, you have to specify\n * which were yours default origins values\n */\nexport const installGradientUpdater = () => {\n // @ts-expect-error untypable\n Gradient.fromObject = gradientUpdaterWrapper(Gradient.fromObject);\n};\n","import wes from 'westures';\nimport { type Canvas, type CanvasEvents, type XY, util } from 'fabric';\n\ntype PinchEventData = {\n centroid: XY;\n event: PointerEvent;\n phase: string;\n type: 'pinch';\n scale: number;\n target: HTMLElement;\n};\n\ntype RotateEventData = {\n centroid: XY;\n event: PointerEvent;\n phase: string;\n type: 'rotate';\n rotation: number;\n target: HTMLElement;\n};\n\ntype TapEventData = {\n centroid: XY;\n event: PointerEvent;\n phase: string;\n type: 'tap';\n target: HTMLElement;\n};\n\n/**\n * Register this handler on canvas.on('pinch', pinchEventHandler);\n * To get an out of the box functionality for the pinch to zoom\n */\nexport function pinchEventHandler(\n this: Canvas,\n { scale, target, scenePoint }: CanvasEvents['pinch'],\n) {\n if (target && this.getActiveObject() === target) {\n // if we are pinching on the active object, let's scale it\n target.scaleX *= scale;\n target.scaleY *= scale;\n } else {\n this.zoomToPoint(scenePoint, this.getZoom() * scale);\n }\n}\n\nexport function rotateEventHandler(\n this: Canvas,\n { rotation, target }: CanvasEvents['rotate'],\n) {\n if (target && this.getActiveObject() === target) {\n target.rotate(target.angle + util.radiansToDegrees(rotation));\n }\n}\n\nexport const tripleTapGesture = (canvas: Canvas) => {\n return new wes.Tap(\n canvas.upperCanvasEl,\n ({ event }: TapEventData) => {\n canvas.fireEventFromPointerEvent(\n event,\n 'mouse:tripleclick',\n 'mousetripleclick',\n undefined,\n );\n event.preventDefault();\n },\n {\n numTaps: 3,\n maxRetain: 400,\n },\n );\n};\n\nexport const doubleTapGesture = (canvas: Canvas) => {\n return new wes.Tap(\n canvas.upperCanvasEl,\n ({ event }: TapEventData) => {\n canvas.fireEventFromPointerEvent(\n event,\n 'mouse:dblclick',\n 'mousedblclick',\n undefined,\n );\n event.preventDefault();\n },\n {\n numTaps: 2,\n maxRetain: 300,\n },\n );\n};\n\nexport const pinchGesture = (canvas: Canvas) => {\n return new wes.Pinch(\n canvas.upperCanvasEl,\n ({ scale, event }: PinchEventData) => {\n canvas.fireEventFromPointerEvent(event, 'pinch', 'pinch', { scale });\n },\n );\n};\n\nexport const rotateGesture = (canvas: Canvas) => {\n return new wes.Rotate(\n canvas.upperCanvasEl,\n ({ rotation, event }: RotateEventData) => {\n canvas.fireEventFromPointerEvent(event, 'rotate', 'rotate', { rotation });\n },\n );\n};\n\n/**\n * Add a serie of gestures recognition on the canvas\n */\nexport const addGestures = (canvas: Canvas) => {\n const canvasRegion = new wes.Region(canvas.upperCanvasEl);\n canvas.addOrRemove(\n (\n el: HTMLElement,\n ...args: Parameters<HTMLElement['removeEventListener']>\n ) => el.removeEventListener(...args),\n );\n canvasRegion.addGesture(rotateGesture(canvas));\n canvasRegion.addGesture(pinchGesture(canvas));\n canvasRegion.addGesture(tripleTapGesture(canvas));\n canvasRegion.addGesture(doubleTapGesture(canvas));\n // add back events, excluding the click one\n canvas.addOrRemove(\n (el: HTMLElement, ...args: Parameters<HTMLElement['addEventListener']>) =>\n el.addEventListener(...args),\n true,\n );\n};\n","import type {\n TModificationEvents,\n Transform,\n TransformActionHandler,\n FabricImage,\n ObjectEvents,\n Control,\n TMat2D,\n} from 'fabric';\nimport { controlsUtils, Point, util } from 'fabric';\n\nconst { wrapWithFixedAnchor, wrapWithFireEvent } = controlsUtils;\n\n/**\n * Wrap controlsUtils.changeObjectWidth with image constrains\n */\nexport const changeImageWidth: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target } = transform;\n const { width } = target;\n const image = target as FabricImage;\n const modified = controlsUtils.changeObjectWidth(eventData, transform, x, y);\n const availableWidth = image._element.width - image.cropX;\n if (modified) {\n if (image.width > availableWidth) {\n image.width = availableWidth;\n }\n if (image.width < 1) {\n image.width = 1;\n }\n }\n return width !== image.width;\n};\n\nexport const changeCropWidth = wrapWithFireEvent(\n 'CROPPING' as TModificationEvents,\n wrapWithFixedAnchor(changeImageWidth),\n);\n\n/**\n * Wrap controlsUtils.changeObjectHeight with image constrains\n */\nexport const changeImageHeight: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target } = transform;\n const { height } = target;\n const image = target as FabricImage;\n const modified = controlsUtils.changeObjectHeight(eventData, transform, x, y);\n const availableHeight = image._element.height - image.cropY;\n if (modified) {\n if (image.height > availableHeight) {\n image.height = availableHeight;\n }\n if (image.height < 1) {\n image.height = 1;\n }\n }\n return height !== image.height;\n};\n\nexport const changeCropHeight = wrapWithFireEvent(\n 'CROPPING' as TModificationEvents,\n wrapWithFixedAnchor(changeImageHeight),\n);\n\nexport const changeImageCropX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target } = transform;\n const image = target as FabricImage;\n const { width, cropX } = image;\n const modified = controlsUtils.changeObjectWidth(eventData, transform, x, y);\n let newCropX = cropX + width - image.width;\n image.width = width;\n if (modified) {\n if (newCropX < 0) {\n newCropX = 0;\n }\n image.cropX = newCropX;\n // calculate new width on the base of how much crop we have now\n image.width += cropX - newCropX;\n }\n return newCropX !== cropX;\n};\n\nexport const changeImageCropY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target } = transform;\n const image = target as FabricImage;\n const { height, cropY } = image;\n const modified = controlsUtils.changeObjectHeight(eventData, transform, x, y);\n let newCropY = cropY + height - image.height;\n image.height = height;\n if (modified) {\n if (newCropY < 0) {\n newCropY = 0;\n }\n image.cropY = newCropY;\n image.height += cropY - newCropY;\n }\n return newCropY !== cropY;\n};\n\nexport const changeCropX = wrapWithFireEvent(\n 'CROPPING' as TModificationEvents,\n wrapWithFixedAnchor(changeImageCropX),\n);\n\nexport const changeCropY = wrapWithFireEvent(\n 'CROPPING' as TModificationEvents,\n wrapWithFixedAnchor(changeImageCropY),\n);\n\n/**\n * A function to counter the move action and change cropX/cropY of an image\n * Keep the image steady, but moves it inside its own cropping rectangle\n */\nexport const cropPanMoveHandler = ({ transform }: ObjectEvents['moving']) => {\n // this makes the image pan too fast.\n const { target, original } = transform as Transform;\n const fabricImage = target as FabricImage;\n const p = new Point(\n target.left - original.left,\n target.top - original.top,\n ).transform(\n util.invertTransform(\n util.createRotateMatrix({ angle: fabricImage.getTotalAngle() }),\n ),\n );\n let cropX = original.cropX! - p.x / fabricImage.scaleX;\n let cropY = original.cropY! - p.y / fabricImage.scaleY;\n const { width, height, _element } = fabricImage;\n if (cropX < 0) {\n cropX = 0;\n }\n if (cropY < 0) {\n cropY = 0;\n }\n if (cropX + width > _element.width) {\n cropX = _element.width - width;\n }\n if (cropY + height > _element.height) {\n cropY = _element.height - height;\n }\n fabricImage.cropX = cropX;\n fabricImage.cropY = cropY;\n fabricImage.left = original.left;\n fabricImage.top = original.top;\n};\n\n/**\n * This position handler works only for this specific use case.\n * It does not support padding nor offset, and it reduces all possible positions\n * to the main 4 corners only.\n * Any position that is < 0 is the extreme left/top, the rest are right/bottom\n */\nexport function ghostScalePositionHandler(\n this: Control,\n dim: Point, // currentDimension\n finalMatrix: TMat2D,\n fabricObject: FabricImage,\n // currentControl: Control,\n) {\n const matrix = fabricObject.calcTransformMatrix();\n const vpt = fabricObject.getViewportTransform();\n const _finalMatrix = util.multiplyTransformMatrices(vpt, matrix);\n\n let x = 0;\n let y = 0;\n if (this.x < 0) {\n x = -fabricObject.width / 2 - fabricObject.cropX;\n } else {\n x =\n fabricObject.getElement().width -\n fabricObject.width / 2 -\n fabricObject.cropX;\n }\n\n if (this.y < 0) {\n y = -fabricObject.height / 2 - fabricObject.cropY;\n } else {\n y =\n fabricObject.getElement().height -\n fabricObject.height / 2 -\n fabricObject.cropY;\n }\n return new Point(x, y).transform(_finalMatrix);\n}\n\nconst calcScale = (currentPoint: Point, height: number, width: number) =>\n Math.min(Math.abs(currentPoint.x / width), Math.abs(currentPoint.y / height));\n\n/**\n * Action handler generator that handles scaling of an image in crop mode.\n * The goal is to keep the current bounding box steady.\n * So this action handler has its own calculations for a dynamic anchor point\n */\nexport const scaleEquallyCropGenerator =\n (cx: number, cy: number): TransformActionHandler =>\n (eventData, transform, x, y) => {\n const { target } = transform as unknown as { target: FabricImage };\n const { width: fullWidth, height: fullHeight } = target.getElement();\n const remainderX = fullWidth - target.width - target.cropX;\n const remainderY = fullHeight - target.height - target.cropY;\n const anchorOriginX =\n cx < 0 ? 1 + remainderX / target.width : -target.cropX / target.width;\n const anchorOriginY =\n cy < 0 ? 1 + remainderY / target.height : -target.cropY / target.height;\n const constraint = target.translateToOriginPoint(\n target.getCenterPoint(),\n anchorOriginX,\n anchorOriginY,\n );\n const newPoint = controlsUtils.getLocalPoint(\n transform,\n anchorOriginX,\n anchorOriginY,\n x,\n y,\n );\n const scale = calcScale(newPoint, fullHeight, fullWidth);\n const scaleChangeX = scale / target.scaleX;\n const scaleChangeY = scale / target.scaleY;\n const scaledRemainderX = remainderX / scaleChangeX;\n const scaledRemainderY = remainderY / scaleChangeY;\n const newWidth = target.width / scaleChangeX;\n const newHeight = target.height / scaleChangeY;\n const newCropX =\n cx < 0\n ? fullWidth - newWidth - scaledRemainderX\n : target.cropX / scaleChangeX;\n const newCropY =\n cy < 0\n ? fullHeight - newHeight - scaledRemainderY\n : target.cropY / scaleChangeY;\n\n if (\n (cx < 0 ? scaledRemainderX : newCropX) + newWidth > fullWidth ||\n (cy < 0 ? scaledRemainderY : newCropY) + newHeight > fullHeight\n ) {\n return false;\n }\n\n target.scaleX = scale;\n target.scaleY = scale;\n target.width = newWidth;\n target.height = newHeight;\n target.cropX = newCropX;\n target.cropY = newCropY;\n const newAnchorOriginX =\n cx < 0 ? 1 + scaledRemainderX / newWidth : -newCropX / newWidth;\n const newAnchorOriginY =\n cy < 0 ? 1 + scaledRemainderY / newHeight : -newCropY / newHeight;\n target.setPositionByOrigin(constraint, newAnchorOriginX, newAnchorOriginY);\n return true;\n };\n\nexport function renderGhostImage(\n this: FabricImage,\n { ctx }: { ctx: CanvasRenderingContext2D },\n) {\n const alpha = ctx.globalAlpha;\n ctx.globalAlpha *= 0.5;\n ctx.drawImage(\n this._element,\n -this.width / 2 - this.cropX,\n -this.height / 2 - this.cropY,\n );\n ctx.globalAlpha = alpha;\n}\n","import {\n type ControlRenderingStyleOverride,\n type InteractiveFabricObject,\n util,\n type Control,\n} from 'fabric';\n\nconst { degreesToRadians } = util;\n\n/**\n * Render a control for the main corners of a cropping image\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for FabricObject controls style\n * @param {FabricObject} fabricObject the fabric object for which we are rendering controls\n */\nexport function renderCornerControl(\n this: Control,\n ctx: CanvasRenderingContext2D,\n left: number,\n top: number,\n styleOverride: ControlRenderingStyleOverride,\n fabricObject: InteractiveFabricObject,\n) {\n ctx.save();\n const { stroke, xSize, ySize, opName } = this.commonRenderProps(\n ctx,\n left,\n top,\n fabricObject,\n styleOverride,\n ),\n xSizeBy2 = xSize / 2,\n ySizeBy2 = ySize / 2;\n // angle is relative to canvas plane\n ctx.rotate(degreesToRadians(this.angle));\n ctx.beginPath();\n ctx.moveTo(-ySizeBy2, 0);\n ctx.lineTo(-ySizeBy2, xSizeBy2);\n ctx.lineTo(ySizeBy2, xSizeBy2);\n ctx.lineTo(ySizeBy2, ySizeBy2);\n ctx.lineTo(xSizeBy2, ySizeBy2);\n ctx.lineTo(xSizeBy2, -ySizeBy2);\n ctx.lineTo(-ySizeBy2, -ySizeBy2);\n ctx.closePath();\n ctx[opName]();\n stroke && ctx.stroke();\n ctx.restore();\n}\n","import { Control, controlsUtils } from 'fabric';\nimport {\n changeCropHeight,\n changeCropWidth,\n changeCropX,\n changeCropY,\n ghostScalePositionHandler,\n scaleEquallyCropGenerator,\n} from './croppingHandlers';\nimport { renderCornerControl } from './renderCornerControl';\n\nconst { scaleCursorStyleHandler } = controlsUtils;\n\nconst cropActionName = () => 'crop';\n// use this function if you want to generate new controls for every instance\nexport const createImageCroppingControls = () => ({\n // scaling image\n tls: new Control({\n x: -0.5,\n y: -0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n positionHandler: ghostScalePositionHandler,\n actionHandler: scaleEquallyCropGenerator(-0.5, -0.5),\n }),\n brs: new Control({\n x: 0.5,\n y: 0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n positionHandler: ghostScalePositionHandler,\n actionHandler: scaleEquallyCropGenerator(0.5, 0.5),\n }),\n trs: new Control({\n x: 0.5,\n y: -0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n positionHandler: ghostScalePositionHandler,\n actionHandler: scaleEquallyCropGenerator(0.5, -0.5),\n }),\n bls: new Control({\n x: -0.5,\n y: 0.5,\n cursorStyleHandler: scaleCursorStyleHandler,\n positionHandler: ghostScalePositionHandler,\n actionHandler: scaleEquallyCropGenerator(-0.5, 0.5),\n }),\n // cropping image\n mlc: new Control({\n x: -0.5,\n y: 0,\n sizeX: 4,\n sizeY: 20,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: changeCropX,\n getActionName: cropActionName,\n }),\n\n mrc: new Control({\n x: 0.5,\n y: 0,\n sizeX: 4,\n sizeY: 20,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: changeCropWidth,\n getActionName: cropActionName,\n }),\n\n mbc: new Control({\n x: 0,\n y: 0.5,\n sizeX: 20,\n sizeY: 4,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: changeCropHeight,\n getActionName: cropActionName,\n }),\n\n mtc: new Control({\n x: 0,\n y: -0.5,\n sizeX: 20,\n sizeY: 4,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: changeCropY,\n getActionName: cropActionName,\n }),\n\n tlc: new Control({\n angle: 0,\n x: -0.5,\n y: -0.5,\n sizeX: 20,\n sizeY: 4,\n render: renderCornerControl,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: (...args) => {\n const cropX = changeCropX(...args);\n const cropY = changeCropY(...args);\n return cropX || cropY;\n },\n getActionName: cropActionName,\n }),\n\n trc: new Control({\n angle: 90,\n x: 0.5,\n y: -0.5,\n sizeX: 20,\n sizeY: 4,\n render: renderCornerControl,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: (...args) => {\n const width = changeCropWidth(...args);\n const cropY = changeCropY(...args);\n return width || cropY;\n },\n getActionName: cropActionName,\n }),\n\n blc: new Control({\n angle: 270,\n x: -0.5,\n y: 0.5,\n sizeX: 20,\n sizeY: 4,\n render: renderCornerControl,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: (...args) => {\n const height = changeCropHeight(...args);\n const cropX = changeCropX(...args);\n return height || cropX;\n },\n getActionName: cropActionName,\n }),\n\n brc: new Control({\n angle: 180,\n x: 0.5,\n y: 0.5,\n sizeX: 20,\n sizeY: 4,\n render: renderCornerControl,\n cursorStyleHandler: scaleCursorStyleHandler,\n actionHandler: (...args) => {\n const height = changeCropHeight(...args);\n const width = changeCropWidth(...args);\n return height || width;\n },\n getActionName: cropActionName,\n }),\n});\n","import {\n type BasicTransformEvent,\n type Canvas,\n type FabricObject,\n type TPointerEvent,\n type Point,\n util,\n} from 'fabric';\nimport {\n collectHorizontalPoint,\n collectVerticalPoint,\n} from './util/collect-point';\nimport {\n drawHorizontalLine,\n drawLine,\n drawPointList,\n drawVerticalLine,\n drawX,\n} from './util/draw';\nimport { collectLine } from './util/collect-line';\nimport type { AligningLineConfig, OriginMap } from './typedefs';\nimport { getObjectsByTarget } from './util/get-objects-by-target';\nimport { getContraryMap, getPointMap } from './util/basic';\n\ntype TransformEvent = BasicTransformEvent<TPointerEvent> & {\n target: FabricObject;\n};\n\nexport class AligningGuidelines {\n canvas: Canvas;\n horizontalLines = new Set<string>();\n verticalLines = new Set<string>();\n cacheMap = new Map<string, Point[]>();\n /**\n * When we drag to resize using center points like mt, ml, mb, and mr,\n * we do not need to draw line segments; we only need to draw the target points.\n */\n onlyDrawPoint = false;\n /** Alignment method is required when customizing. */\n contraryOriginMap: OriginMap = {\n tl: ['right', 'bottom'],\n tr: ['left', 'bottom'],\n br: ['left', 'top'],\n bl: ['right', 'top'],\n mt: ['center', 'bottom'],\n mr: ['left', 'center'],\n mb: ['center', 'top'],\n ml: ['right', 'center'],\n };\n xSize = 2.4;\n lineDash: number[] | undefined;\n /** At what distance from the shape does alignment begin? */\n margin = 4;\n /** Aligning line dimensions */\n width = 1;\n /** Aligning line color */\n color = 'rgba(255,0,0,0.9)';\n /** Close Vertical line, default false. */\n closeVLine = false;\n /** Close horizontal line, default false. */\n closeHLine = false;\n\n constructor(canvas: Canvas, options: Partial<AligningLineConfig> = {}) {\n this.canvas = canvas;\n Object.assign(this, options);\n\n this.mouseUp = this.mouseUp.bind(this);\n this.scalingOrResizing = this.scalingOrResizing.bind(this);\n this.moving = this.moving.bind(this);\n this.beforeRender = this.beforeRender.bind(this);\n this.afterRender = this.afterRender.bind(this);\n\n this.initBehavior();\n }\n initBehavior() {\n this.canvas.on('mouse:up', this.mouseUp);\n this.canvas.on('object:resizing', this.scalingOrResizing);\n this.canvas.on('object:scaling', this.scalingOrResizing);\n this.canvas.on('object:moving', this.moving);\n this.canvas.on('before:render', this.beforeRender);\n this.canvas.on('after:render', this.afterRender);\n }\n /** Returns shapes that can draw aligning lines, default returns all shapes on the canvas excluding groups. */\n getObjectsByTarget(target: FabricObject) {\n return getObjectsByTarget(target);\n }\n /** When the user customizes the controller, this property is set to enable or disable automatic alignment through point scaling/resizing. */\n getPointMap(target: FabricObject) {\n return getPointMap(target);\n }\n /** When the user customizes the controller, this property is used to enable or disable alignment positioning through points. */\n getContraryMap(target: FabricObject) {\n return getContraryMap(target);\n }\n /** Users can customize. */\n getCaCheMapValue(object: FabricObject) {\n const cacheKey = [\n object.calcTransformMatrix().toString(),\n object.width,\n object.height,\n ].join();\n const cacheValue = this.cacheMap.get(cacheKey);\n if (cacheValue) return cacheValue;\n const value = object.getCoords();\n value.push(object.getCenterPoint());\n this.cacheMap.set(cacheKey, value);\n return value;\n }\n drawLine(origin: Point, target: Point) {\n drawLine.call(this, origin, target);\n }\n drawX(point: Point, dir: number) {\n drawX.call(this, point, dir);\n }\n mouseUp() {\n this.verticalLines.clear();\n this.horizontalLines.clear();\n this.cacheMap.clear();\n this.canvas.requestRenderAll();\n }\n\n scalingOrResizing(e: TransformEvent) {\n const target = e.target;\n // We need to obtain the real-time coordinates of the current object, so we need to update them in real-time\n target.setCoords();\n // The value of action can be scaleX, scaleY, scale, resize, etc.\n // If it does not start with \"scale,\" it is considered a modification of size.\n const isScale = String(e.transform.action).startsWith('scale');\n this.verticalLines.clear();\n this.horizontalLines.clear();\n\n const objects = this.getObjectsByTarget(target);\n // When the shape is flipped, the tl obtained through getCoords is actually tr,\n // and tl is actually tr. We need to make correction adjustments.\n // tr <-> tl、 bl <-> br、 mb <-> mt、 ml <-> mr\n let corner = e.transform.corner;\n if (target.flipX) {\n if (corner.includes('l')) corner = corner.replace('l', 'r');\n else if (corner.includes('r')) corner = corner.replace('r', 'l');\n }\n if (target.flipY) {\n if (corner.includes('t')) corner = corner.replace('t', 'b');\n else if (corner.includes('b')) corner = corner.replace('b', 't');\n }\n\n // Obtain the coordinates of the current operation point through the value of corner.\n // users can be allowed to customize and pass in custom corners.\n const pointMap = this.getPointMap(target);\n if (!(corner in pointMap)) return;\n this.onlyDrawPoint = corner.includes('m');\n if (this.onlyDrawPoint) {\n const angle = target.getTotalAngle();\n // When the shape is rotated, it is meaningless to draw points using the center point.\n if (angle % 90 != 0) return;\n }\n // If manipulating tl, then when the shape changes size, it should be positioned by br,\n // and the same applies to others.\n // users can be allowed to customize and pass in custom corners.\n const contraryMap = this.getContraryMap(target);\n const point = pointMap[corner];\n let diagonalPoint = contraryMap[corner];\n // When holding the centerKey (default is altKey), the shape will scale based on the center point, with the reference point being the center.\n const isCenter =\n e.transform.original.originX == 'center' &&\n e.transform.original.originY == 'center';\n if (isCenter) {\n const p = target.group\n ? point.transform(\n util.invertTransform(target.group.calcTransformMatrix()),\n )\n : point;\n diagonalPoint = diagonalPoint.add(p).scalarDivide(2);\n }\n const uniformIsToggled = e.e[this.canvas.uniScaleKey!];\n let isUniform =\n (this.canvas.uniformScaling && !uniformIsToggled) ||\n (!this.canvas.uniformScaling && uniformIsToggled);\n // When controlling through the center point,\n // if isUniform is true, it actually changes the skew, so it is meaningless.\n if (this.onlyDrawPoint) isUniform = false;\n\n const list: Point[] = [];\n for (const object of objects) {\n const d = this.getCaCheMapValue(object);\n list.push(...d);\n }\n\n const props = {\n target,\n point,\n diagonalPoint,\n corner,\n list,\n isScale,\n isUniform,\n isCenter,\n };\n\n // Obtain horizontal and vertical reference lines.\n const noNeedToCollectV =\n this.onlyDrawPoint && (corner.includes('t') || corner.includes('b'));\n const noNeedToCollectH =\n this.onlyDrawPoint && (corner.includes('l') || corner.includes('r'));\n const vList = noNeedToCollectV\n ? []\n : collectVerticalPoint.call(this, props);\n const hList = noNeedToCollectH\n ? []\n : collectHorizontalPoint.call(this, props);\n vList.forEach((o) => {\n // Objects cannot be deduplicated; convert them to strings for deduplication.\n this.verticalLines.add(JSON.stringify(o));\n });\n hList.forEach((o) => {\n // Objects cannot be deduplicated; convert them to strings for deduplication.\n this.horizontalLines.add(JSON.stringify(o));\n });\n }\n moving(e: TransformEvent) {\n const target = e.target;\n // We need to obtain the real-time coordinates of the current object, so we need to update them in real-time\n target.setCoords();\n this.onlyDrawPoint = false;\n this.verticalLines.clear();\n this.horizontalLines.clear();\n\n // Find the shapes associated with the current graphic to draw reference lines for it.\n const objects = this.getObjectsByTarget(target);\n const points: Point[] = [];\n // Collect all the points to draw reference lines.\n for (const object of objects) points.push(...this.getCaCheMapValue(object));\n\n // Obtain horizontal and vertical reference lines.\n const { vLines, hLines } = collectLine.call(this, target, points);\n vLines.forEach((o) => {\n // Objects cannot be deduplicated; convert them to strings for deduplication.\n this.verticalLines.add(JSON.stringify(o));\n });\n hLines.forEach((o) => {\n // Objects cannot be deduplicated; convert them to strings for deduplication.\n this.horizontalLines.add(JSON.stringify(o));\n });\n }\n beforeRender() {\n this.canvas.clearContext(this.canvas.contextTop);\n }\n afterRender() {\n if (this.onlyDrawPoint) {\n drawPointList.call(this);\n } else {\n drawVerticalLine.call(this);\n drawHorizontalLine.call(this);\n }\n }\n\n dispose() {\n this.canvas.off('mouse:up', this.mouseUp);\n this.canvas.off('object:resizing', this.scalingOrResizing);\n this.canvas.off('object:scaling', this.scalingOrResizing);\n this.canvas.off('object:moving', this.moving);\n this.canvas.off('before:render', this.beforeRender);\n this.canvas.off('after:render', this.afterRender);\n }\n}\n","import { type FabricImage, type TPointerEventInfo } from 'fabric';\nimport { createImageCroppingControls } from './croppingControls';\nimport { cropPanMoveHandler, renderGhostImage } from './croppingHandlers';\n/**\n * Coordinates the change to image to enter crop mode and returns\n * a function to exit crop mode\n */\nexport const enterCropMode = function enterCropMode(\n this: (args: TPointerEventInfo) => void,\n { target }: TPointerEventInfo,\n) {\n const fabricImage = target as FabricImage;\n const { controls, padding } = fabricImage;\n fabricImage.padding = 0;\n fabricImage.controls = createImageCroppingControls();\n fabricImage.on('moving', cropPanMoveHandler);\n fabricImage.on('before:render', renderGhostImage);\n fabricImage.setCoords();\n const exitCropMode = () => {\n fabricImage.padding = padding;\n fabricImage.off('moving', cropPanMoveHandler);\n fabricImage.off('before:render', renderGhostImage);\n fabricImage.controls = controls;\n fabricImage.setCoords();\n fabricImage.once('mousedblclick', enterCropMode);\n fabricImage.canvas?.requestRenderAll();\n };\n fabricImage.once('mousedblclick', exitCropMode);\n fabricImage.canvas?.requestRenderAll();\n};\n"],"names":["getDistance","a","b","Math","abs","getDistanceList","point","list","type","dis","Infinity","arr","item","v","push","collectVerticalPoint","props","target","isScale","isUniform","corner","diagonalPoint","isCenter","this","margin","canvas","getZoom","length","x","includes","width","height","scaleX","scaleY","scaleWidth","strokeUniform","strokeWidth","sx","set","setRelativeXY","originArr","contraryOriginMap","setCoords","map","origin","collectHorizontalPoint","y","scaleHeight","sy","drawLine","ctx","getTopContext","viewportTransform","zoom","save","transform","lineWidth","lineDash","setLineDash","strokeStyle","color","beginPath","moveTo","lineTo","stroke","drawX","restore","_","size","xSize","translate","drawPoint","drawPointList","closeVLine","verticalLines","JSON","parse","closeHLine","h","horizontalLines","call","drawVerticalLine","o","Point","drawHorizontalLine","collectLine","points","getCoords","getCenterPoint","opts","vLines","collectPoints","hLines","res","min","i","d","forEach","setXY","getObjectsByTarget","objects","Set","children","ActiveSelection","getObjects","forEachObject","isOnScreen","visible","constructor","Group","add","collectObjectsByGroup","deleteObjectsByList","delete","g","child","originUpdaterWrapper","originalFn","defaultOriginX","arguments","undefined","defaultOriginY","async","serializedObject","originX","originY","_len","args","Array","_key","originalObject","actualPosition","left","top","setPositionByOrigin","gradientUpdaterWrapper","serializedGradient","colorStops","newColorStops","_ref","opacity","offset","Color","setAlpha","toRgba","wrapWithFixedAnchor","wrapWithFireEvent","controlsUtils","changeCropWidth","changeImageWidth","eventData","image","modified","changeObjectWidth","availableWidth","_element","cropX","changeCropHeight","changeImageHeight","changeObjectHeight","availableHeight","cropY","changeCropX","changeImageCropX","newCropX","changeCropY","changeImageCropY","newCropY","cropPanMoveHandler","original","fabricImage","p","util","invertTransform","createRotateMatrix","angle","getTotalAngle","ghostScalePositionHandler","dim","finalMatrix","fabricObject","matrix","calcTransformMatrix","vpt","getViewportTransform","_finalMatrix","multiplyTransformMatrices","getElement","scaleEquallyCropGenerator","cx","cy","fullWidth","fullHeight","remainderX","remainderY","anchorOriginX","anchorOriginY","constraint","translateToOriginPoint","newPoint","getLocalPoint","scale","currentPoint","calcScale","scaleChangeX","scaleChangeY","scaledRemainderX","scaledRemainderY","newWidth","newHeight","newAnchorOriginX","newAnchorOriginY","renderGhostImage","_ref2","alpha","globalAlpha","drawImage","degreesToRadians","renderCornerControl","styleOverride","ySize","opName","commonRenderProps","xSizeBy2","ySizeBy2","rotate","closePath","scaleCursorStyleHandler","cropActionName","createImageCroppingControls","tls","Control","cursorStyleHandler","positionHandler","actionHandler","brs","trs","bls","mlc","sizeX","sizeY","getActionName","mrc","mbc","mtc","tlc","render","trc","blc","brc","options","_defineProperty","Map","tl","tr","br","bl","mt","mr","mb","ml","Object","assign","mouseUp","bind","scalingOrResizing","moving","beforeRender","afterRender","initBehavior","on","getPointMap","coords","scalarDivide","getContraryMap","_target$aCoords","aCoords","calcACoords","getCaCheMapValue","object","cacheKey","toString","join","cacheValue","cacheMap","get","value","dir","clear","requestRenderAll","e","String","action","startsWith","flipX","replace","flipY","pointMap","onlyDrawPoint","contraryMap","group","uniformIsToggled","uniScaleKey","uniformScaling","noNeedToCollectV","noNeedToCollectH","vList","hList","stringify","clearContext","contextTop","dispose","off","canvasRegion","wes","Region","upperCanvasEl","addOrRemove","el","removeEventListener","addGesture","Rotate","_ref6","rotation","event","fireEventFromPointerEvent","rotateGesture","Pinch","_ref5","pinchGesture","Tap","_ref3","preventDefault","numTaps","maxRetain","tripleTapGesture","_ref4","doubleTapGesture","_len2","_key2","addEventListener","enterCropMode","_fabricImage$canvas2","controls","padding","once","exitCropMode","_fabricImage$canvas","installGradientUpdater","Gradient","fromObject","installOriginWrapperUpdater","BaseFabricObject","_fromObject","FabricImage","scenePoint","getActiveObject","zoomToPoint","radiansToDegrees"],"mappings":"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"}
@@ -223,6 +223,9 @@ export interface ObjectEvents extends ObjectPointerEvents, DnDEvents, MiscEvents
223
223
  'erasing:end': {
224
224
  path: FabricObject;
225
225
  };
226
+ 'before:render': {
227
+ ctx: CanvasRenderingContext2D;
228
+ };
226
229
  }
227
230
  export interface StaticCanvasEvents extends CollectionEvents {
228
231
  'canvas:cleared': never;
@@ -1 +1 @@
1
- {"version":3,"file":"EventTypeDefs.d.ts","sourceRoot":"","sources":["../../src/EventTypeDefs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EventTypeDefs.d.ts","sourceRoot":"","sources":["../../src/EventTypeDefs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Pattern.d.ts","sourceRoot":"","sources":["../../../src/Pattern/Pattern.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAO1E,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAGjB;;;GAGG;AACH,qBAAa,OAAO;IAClB,MAAM,CAAC,IAAI,SAAa;IAExB;;;;;;;OAOG;IACH,IAAI,IAAI,WAEP;IAED,IAAI,IAAI,CAAC,KAAK,QAAA,EAEb;IAED;;;OAGG;IACH,MAAM,EAAE,aAAa,CAAY;IAEjC;;;OAGG;IACH,OAAO,SAAK;IAEZ;;;OAGG;IACH,OAAO,SAAK;IAEZ;;OAEG;IACH,WAAW,EAAE,YAAY,CAAM;IAE/B;;;;OAIG;IACK,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACK,MAAM,EAAE,iBAAiB,CAAC;IAElC;;;OAGG;IACK,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;OAGG;IACH,SAAiB,EAAE,EAAE,MAAM,CAAC;IAE5B;;;;OAIG;gBACS,OAAO,EAAE,cAAc;IAKnC;;OAEG;IACH,aAAa,IAAI,IAAI,IAAI;QAAE,MAAM,EAAE,gBAAgB,CAAA;KAAE;IAMrD;;OAEG;IACH,cAAc,IAAI,IAAI,IAAI;QAAE,MAAM,EAAE,iBAAiB,CAAA;KAAE;IAIvD,cAAc,IAAI,MAAM;IAQxB;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,wBAAwB,GAAG,aAAa,GAAG,IAAI;IAgB3D;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,GAAE,MAAM,EAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAiBjE;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,GAAG,MAAM;WA0B1B,UAAU,CACrB,EACE,IAAI,EACJ,MAAM,EACN,gBAAgB,EAChB,GAAG,YAAY,EAChB,EAAE,wBAAwB,EAC3B,OAAO,CAAC,EAAE,SAAS,GAClB,OAAO,CAAC,OAAO,CAAC;CAYpB"}
1
+ {"version":3,"file":"Pattern.d.ts","sourceRoot":"","sources":["../../../src/Pattern/Pattern.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAO1E,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAIjB;;;GAGG;AACH,qBAAa,OAAO;IAClB,MAAM,CAAC,IAAI,SAAa;IAExB;;;;;;;OAOG;IACH,IAAI,IAAI,WAEP;IAED,IAAI,IAAI,CAAC,KAAK,QAAA,EAEb;IAED;;;OAGG;IACH,MAAM,EAAE,aAAa,CAAY;IAEjC;;;OAGG;IACH,OAAO,SAAK;IAEZ;;;OAGG;IACH,OAAO,SAAK;IAEZ;;OAEG;IACH,WAAW,EAAE,YAAY,CAAM;IAE/B;;;;OAIG;IACK,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACK,MAAM,EAAE,iBAAiB,CAAC;IAElC;;;OAGG;IACK,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;OAGG;IACH,SAAiB,EAAE,EAAE,MAAM,CAAC;IAE5B;;;;OAIG;gBACS,OAAO,EAAE,cAAc;IAKnC;;OAEG;IACH,aAAa,IAAI,IAAI,IAAI;QAAE,MAAM,EAAE,gBAAgB,CAAA;KAAE;IAMrD;;OAEG;IACH,cAAc,IAAI,IAAI,IAAI;QAAE,MAAM,EAAE,iBAAiB,CAAA;KAAE;IAIvD,cAAc,IAAI,MAAM;IAQxB;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,wBAAwB,GAAG,aAAa,GAAG,IAAI;IAgB3D;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,GAAE,MAAM,EAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAiBjE;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,GAAG,MAAM;WA0B1B,UAAU,CACrB,EACE,IAAI,EACJ,MAAM,EACN,gBAAgB,EAChB,GAAG,YAAY,EAChB,EAAE,wBAAwB,EAC3B,OAAO,CAAC,EAAE,SAAS,GAClB,OAAO,CAAC,OAAO,CAAC;CAYpB"}