@nasser-sw/fabric 7.0.1-beta10 → 7.0.1-beta11

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 (2537) hide show
  1. package/.babelrc +0 -0
  2. package/.babelrcAlt +0 -0
  3. package/.browserslistrc +0 -0
  4. package/.editorconfig +0 -0
  5. package/.gitattributes +0 -0
  6. package/.gitpod.yml +0 -0
  7. package/.prettierignore +0 -0
  8. package/.prettierrc +0 -0
  9. package/0 +0 -0
  10. package/CHANGELOG.md +0 -0
  11. package/CODE_OF_CONDUCT.md +0 -0
  12. package/CONTRIBUTING.md +0 -0
  13. package/LICENSE +0 -0
  14. package/OVERLAY_EDITOR_MIGRATION.md +0 -0
  15. package/README.md +0 -0
  16. package/SECURITY.md +0 -0
  17. package/debug/{konva-master → konva}/CHANGELOG.md +1 -2
  18. package/debug/{konva-master → konva}/LICENSE +0 -0
  19. package/debug/{konva-master → konva}/README.md +3 -7
  20. package/debug/{konva-master → konva}/gulpfile.mjs +0 -0
  21. package/debug/{konva-master → konva}/package.json +1 -1
  22. package/debug/{konva-master → konva}/release.sh +4 -1
  23. package/debug/{konva-master → konva}/resources/doc-includes/ContainerParams.txt +0 -0
  24. package/debug/{konva-master → konva}/resources/doc-includes/NodeParams.txt +0 -0
  25. package/debug/{konva-master → konva}/resources/doc-includes/ShapeParams.txt +0 -0
  26. package/debug/{konva-master → konva}/resources/jsdoc.conf.json +0 -0
  27. package/debug/{konva-master → konva}/rollup.config.mjs +0 -0
  28. package/debug/{konva-master → konva}/src/Animation.ts +0 -0
  29. package/debug/{konva-master → konva}/src/BezierFunctions.ts +0 -0
  30. package/debug/{konva-master → konva}/src/Canvas.ts +0 -37
  31. package/debug/{konva-master → konva}/src/Container.ts +0 -0
  32. package/debug/{konva-master → konva}/src/Context.ts +0 -0
  33. package/debug/{konva-master → konva}/src/Core.ts +0 -0
  34. package/debug/{konva-master → konva}/src/DragAndDrop.ts +0 -0
  35. package/debug/{konva-master → konva}/src/Factory.ts +0 -0
  36. package/debug/{konva-master → konva}/src/FastLayer.ts +0 -0
  37. package/debug/{konva-master → konva}/src/Global.ts +0 -0
  38. package/debug/{konva-master → konva}/src/Group.ts +0 -0
  39. package/debug/{konva-master → konva}/src/Layer.ts +0 -0
  40. package/debug/{konva-master → konva}/src/Node.ts +0 -0
  41. package/debug/{konva-master → konva}/src/PointerEvents.ts +0 -0
  42. package/debug/{konva-master → konva}/src/Shape.ts +0 -0
  43. package/debug/{konva-master → konva}/src/Stage.ts +0 -0
  44. package/debug/{konva-master → konva}/src/Tween.ts +0 -0
  45. package/debug/{konva-master → konva}/src/Util.ts +0 -0
  46. package/debug/{konva-master → konva}/src/Validators.ts +0 -0
  47. package/debug/{konva-master → konva}/src/_CoreInternals.ts +0 -0
  48. package/debug/{konva-master → konva}/src/_FullInternals.ts +0 -0
  49. package/debug/{konva-master → konva}/src/canvas-backend.ts +0 -0
  50. package/debug/{konva-master → konva}/src/filters/Blur.ts +0 -0
  51. package/debug/{konva-master → konva}/src/filters/Brighten.ts +0 -0
  52. package/debug/{konva-master → konva}/src/filters/Brightness.ts +0 -0
  53. package/debug/{konva-master → konva}/src/filters/Contrast.ts +0 -0
  54. package/debug/{konva-master → konva}/src/filters/Emboss.ts +0 -0
  55. package/debug/{konva-master → konva}/src/filters/Enhance.ts +0 -0
  56. package/debug/{konva-master → konva}/src/filters/Grayscale.ts +0 -0
  57. package/debug/{konva-master → konva}/src/filters/HSL.ts +0 -0
  58. package/debug/{konva-master → konva}/src/filters/HSV.ts +0 -0
  59. package/debug/{konva-master → konva}/src/filters/Invert.ts +0 -0
  60. package/debug/{konva-master → konva}/src/filters/Kaleidoscope.ts +0 -0
  61. package/debug/{konva-master → konva}/src/filters/Mask.ts +0 -0
  62. package/debug/{konva-master → konva}/src/filters/Noise.ts +0 -0
  63. package/debug/{konva-master → konva}/src/filters/Pixelate.ts +0 -0
  64. package/debug/{konva-master → konva}/src/filters/Posterize.ts +0 -0
  65. package/debug/{konva-master → konva}/src/filters/RGB.ts +0 -0
  66. package/debug/{konva-master → konva}/src/filters/RGBA.ts +0 -0
  67. package/debug/{konva-master → konva}/src/filters/Sepia.ts +0 -0
  68. package/debug/{konva-master → konva}/src/filters/Solarize.ts +0 -0
  69. package/debug/{konva-master → konva}/src/filters/Threshold.ts +0 -0
  70. package/debug/{konva-master → konva}/src/index.ts +0 -0
  71. package/debug/{konva-master → konva}/src/shapes/Arc.ts +0 -0
  72. package/debug/{konva-master → konva}/src/shapes/Arrow.ts +0 -0
  73. package/debug/{konva-master → konva}/src/shapes/Circle.ts +0 -0
  74. package/debug/{konva-master → konva}/src/shapes/Ellipse.ts +0 -0
  75. package/debug/{konva-master → konva}/src/shapes/Image.ts +0 -0
  76. package/debug/{konva-master → konva}/src/shapes/Label.ts +0 -0
  77. package/debug/{konva-master → konva}/src/shapes/Line.ts +0 -0
  78. package/debug/{konva-master → konva}/src/shapes/Path.ts +0 -0
  79. package/debug/{konva-master → konva}/src/shapes/Rect.ts +0 -0
  80. package/debug/{konva-master → konva}/src/shapes/RegularPolygon.ts +0 -0
  81. package/debug/{konva-master → konva}/src/shapes/Ring.ts +0 -0
  82. package/debug/{konva-master → konva}/src/shapes/Sprite.ts +0 -0
  83. package/debug/{konva-master → konva}/src/shapes/Star.ts +0 -0
  84. package/debug/{konva-master → konva}/src/shapes/Text.ts +2 -2
  85. package/debug/{konva-master → konva}/src/shapes/TextPath.ts +0 -0
  86. package/debug/{konva-master → konva}/src/shapes/Transformer.ts +0 -0
  87. package/debug/{konva-master → konva}/src/shapes/Wedge.ts +0 -0
  88. package/debug/{konva-master → konva}/src/skia-backend.ts +0 -0
  89. package/debug/{konva-master → konva}/src/types.ts +0 -0
  90. package/debug/{konva-master → konva}/tsconfig.json +0 -0
  91. package/debug/{konva-master → konva}/tsconfig.test.json +0 -0
  92. package/dist/_virtual/_rollupPluginBabelHelpers.min.mjs +0 -0
  93. package/dist/_virtual/_rollupPluginBabelHelpers.min.mjs.map +0 -0
  94. package/dist/_virtual/_rollupPluginBabelHelpers.mjs +0 -0
  95. package/dist/_virtual/_rollupPluginBabelHelpers.mjs.map +0 -0
  96. package/dist/extensions/aligning_guidelines/constant.d.ts +0 -0
  97. package/dist/extensions/aligning_guidelines/constant.d.ts.map +0 -0
  98. package/dist/extensions/aligning_guidelines/index.d.ts +0 -0
  99. package/dist/extensions/aligning_guidelines/index.d.ts.map +0 -0
  100. package/dist/extensions/aligning_guidelines/typedefs.d.ts +0 -0
  101. package/dist/extensions/aligning_guidelines/typedefs.d.ts.map +0 -0
  102. package/dist/extensions/aligning_guidelines/util/basic.d.ts +0 -0
  103. package/dist/extensions/aligning_guidelines/util/basic.d.ts.map +0 -0
  104. package/dist/extensions/aligning_guidelines/util/collect-line.d.ts +0 -0
  105. package/dist/extensions/aligning_guidelines/util/collect-line.d.ts.map +0 -0
  106. package/dist/extensions/aligning_guidelines/util/collect-point.d.ts +0 -0
  107. package/dist/extensions/aligning_guidelines/util/collect-point.d.ts.map +0 -0
  108. package/dist/extensions/aligning_guidelines/util/draw.d.ts +0 -0
  109. package/dist/extensions/aligning_guidelines/util/draw.d.ts.map +0 -0
  110. package/dist/extensions/aligning_guidelines/util/get-objects-by-target.d.ts +0 -0
  111. package/dist/extensions/aligning_guidelines/util/get-objects-by-target.d.ts.map +0 -0
  112. package/dist/extensions/data_updaters/gradient/index.d.ts +0 -0
  113. package/dist/extensions/data_updaters/gradient/index.d.ts.map +0 -0
  114. package/dist/extensions/data_updaters/origins/index.d.ts +0 -0
  115. package/dist/extensions/data_updaters/origins/index.d.ts.map +0 -0
  116. package/dist/extensions/index.d.ts +0 -0
  117. package/dist/extensions/index.d.ts.map +0 -0
  118. package/dist/fabric.d.ts +0 -0
  119. package/dist/fabric.d.ts.map +0 -0
  120. package/dist/fabric.min.mjs +0 -0
  121. package/dist/fabric.min.mjs.map +0 -0
  122. package/dist/fabric.mjs +0 -0
  123. package/dist/fabric.mjs.map +0 -0
  124. package/dist/index.d.ts +0 -0
  125. package/dist/index.d.ts.map +0 -0
  126. package/dist/index.js +1069 -1013
  127. package/dist/index.js.map +1 -1
  128. package/dist/index.min.js +1 -1
  129. package/dist/index.min.js.map +1 -1
  130. package/dist/index.min.mjs +1 -1
  131. package/dist/index.min.mjs.map +1 -1
  132. package/dist/index.mjs +1069 -1013
  133. package/dist/index.mjs.map +1 -1
  134. package/dist/index.node.cjs +1069 -1013
  135. package/dist/index.node.cjs.map +1 -1
  136. package/dist/index.node.d.ts +0 -0
  137. package/dist/index.node.d.ts.map +0 -0
  138. package/dist/index.node.mjs +1069 -1013
  139. package/dist/index.node.mjs.map +1 -1
  140. package/dist/package.json.min.mjs +1 -1
  141. package/dist/package.json.min.mjs.map +0 -0
  142. package/dist/package.json.mjs +1 -1
  143. package/dist/package.json.mjs.map +0 -0
  144. package/dist/src/ClassRegistry.d.ts +0 -0
  145. package/dist/src/ClassRegistry.d.ts.map +0 -0
  146. package/dist/src/ClassRegistry.min.mjs +0 -0
  147. package/dist/src/ClassRegistry.min.mjs.map +0 -0
  148. package/dist/src/ClassRegistry.mjs +0 -0
  149. package/dist/src/ClassRegistry.mjs.map +0 -0
  150. package/dist/src/Collection.d.ts +0 -0
  151. package/dist/src/Collection.d.ts.map +0 -0
  152. package/dist/src/Collection.min.mjs +0 -0
  153. package/dist/src/Collection.min.mjs.map +0 -0
  154. package/dist/src/Collection.mjs +0 -0
  155. package/dist/src/Collection.mjs.map +0 -0
  156. package/dist/src/CommonMethods.d.ts +0 -0
  157. package/dist/src/CommonMethods.d.ts.map +0 -0
  158. package/dist/src/CommonMethods.min.mjs +0 -0
  159. package/dist/src/CommonMethods.min.mjs.map +0 -0
  160. package/dist/src/CommonMethods.mjs +0 -0
  161. package/dist/src/CommonMethods.mjs.map +0 -0
  162. package/dist/src/EventTypeDefs.d.ts +0 -0
  163. package/dist/src/EventTypeDefs.d.ts.map +0 -0
  164. package/dist/src/Intersection.d.ts +0 -0
  165. package/dist/src/Intersection.d.ts.map +0 -0
  166. package/dist/src/Intersection.min.mjs +0 -0
  167. package/dist/src/Intersection.min.mjs.map +0 -0
  168. package/dist/src/Intersection.mjs +0 -0
  169. package/dist/src/Intersection.mjs.map +0 -0
  170. package/dist/src/LayoutManager/ActiveSelectionLayoutManager.d.ts +0 -0
  171. package/dist/src/LayoutManager/ActiveSelectionLayoutManager.d.ts.map +0 -0
  172. package/dist/src/LayoutManager/ActiveSelectionLayoutManager.min.mjs +0 -0
  173. package/dist/src/LayoutManager/ActiveSelectionLayoutManager.min.mjs.map +0 -0
  174. package/dist/src/LayoutManager/ActiveSelectionLayoutManager.mjs +0 -0
  175. package/dist/src/LayoutManager/ActiveSelectionLayoutManager.mjs.map +0 -0
  176. package/dist/src/LayoutManager/LayoutManager.d.ts +0 -0
  177. package/dist/src/LayoutManager/LayoutManager.d.ts.map +0 -0
  178. package/dist/src/LayoutManager/LayoutManager.min.mjs +0 -0
  179. package/dist/src/LayoutManager/LayoutManager.min.mjs.map +0 -0
  180. package/dist/src/LayoutManager/LayoutManager.mjs +0 -0
  181. package/dist/src/LayoutManager/LayoutManager.mjs.map +0 -0
  182. package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts +0 -0
  183. package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts.map +0 -0
  184. package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.min.mjs +0 -0
  185. package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.min.mjs.map +0 -0
  186. package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.mjs +0 -0
  187. package/dist/src/LayoutManager/LayoutStrategies/ClipPathLayout.mjs.map +0 -0
  188. package/dist/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts +0 -0
  189. package/dist/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts.map +0 -0
  190. package/dist/src/LayoutManager/LayoutStrategies/FitContentLayout.min.mjs +0 -0
  191. package/dist/src/LayoutManager/LayoutStrategies/FitContentLayout.min.mjs.map +0 -0
  192. package/dist/src/LayoutManager/LayoutStrategies/FitContentLayout.mjs +0 -0
  193. package/dist/src/LayoutManager/LayoutStrategies/FitContentLayout.mjs.map +0 -0
  194. package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts +0 -0
  195. package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts.map +0 -0
  196. package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.min.mjs +0 -0
  197. package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.min.mjs.map +0 -0
  198. package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.mjs +0 -0
  199. package/dist/src/LayoutManager/LayoutStrategies/FixedLayout.mjs.map +0 -0
  200. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts +0 -0
  201. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts.map +0 -0
  202. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.min.mjs +0 -0
  203. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.min.mjs.map +0 -0
  204. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.mjs +0 -0
  205. package/dist/src/LayoutManager/LayoutStrategies/LayoutStrategy.mjs.map +0 -0
  206. package/dist/src/LayoutManager/LayoutStrategies/utils.d.ts +0 -0
  207. package/dist/src/LayoutManager/LayoutStrategies/utils.d.ts.map +0 -0
  208. package/dist/src/LayoutManager/LayoutStrategies/utils.min.mjs +0 -0
  209. package/dist/src/LayoutManager/LayoutStrategies/utils.min.mjs.map +0 -0
  210. package/dist/src/LayoutManager/LayoutStrategies/utils.mjs +0 -0
  211. package/dist/src/LayoutManager/LayoutStrategies/utils.mjs.map +0 -0
  212. package/dist/src/LayoutManager/constants.d.ts +0 -0
  213. package/dist/src/LayoutManager/constants.d.ts.map +0 -0
  214. package/dist/src/LayoutManager/constants.min.mjs +0 -0
  215. package/dist/src/LayoutManager/constants.min.mjs.map +0 -0
  216. package/dist/src/LayoutManager/constants.mjs +0 -0
  217. package/dist/src/LayoutManager/constants.mjs.map +0 -0
  218. package/dist/src/LayoutManager/index.d.ts +0 -0
  219. package/dist/src/LayoutManager/index.d.ts.map +0 -0
  220. package/dist/src/LayoutManager/types.d.ts +0 -0
  221. package/dist/src/LayoutManager/types.d.ts.map +0 -0
  222. package/dist/src/Observable.d.ts +0 -0
  223. package/dist/src/Observable.d.ts.map +0 -0
  224. package/dist/src/Observable.min.mjs +0 -0
  225. package/dist/src/Observable.min.mjs.map +0 -0
  226. package/dist/src/Observable.mjs +0 -0
  227. package/dist/src/Observable.mjs.map +0 -0
  228. package/dist/src/Pattern/Pattern.d.ts +0 -0
  229. package/dist/src/Pattern/Pattern.d.ts.map +0 -0
  230. package/dist/src/Pattern/Pattern.min.mjs +0 -0
  231. package/dist/src/Pattern/Pattern.min.mjs.map +0 -0
  232. package/dist/src/Pattern/Pattern.mjs +0 -0
  233. package/dist/src/Pattern/Pattern.mjs.map +0 -0
  234. package/dist/src/Pattern/index.d.ts +0 -0
  235. package/dist/src/Pattern/index.d.ts.map +0 -0
  236. package/dist/src/Pattern/types.d.ts +0 -0
  237. package/dist/src/Pattern/types.d.ts.map +0 -0
  238. package/dist/src/Point.d.ts +0 -0
  239. package/dist/src/Point.d.ts.map +0 -0
  240. package/dist/src/Point.min.mjs +0 -0
  241. package/dist/src/Point.min.mjs.map +0 -0
  242. package/dist/src/Point.mjs +0 -0
  243. package/dist/src/Point.mjs.map +0 -0
  244. package/dist/src/Shadow.d.ts +0 -0
  245. package/dist/src/Shadow.d.ts.map +0 -0
  246. package/dist/src/Shadow.min.mjs +0 -0
  247. package/dist/src/Shadow.min.mjs.map +0 -0
  248. package/dist/src/Shadow.mjs +0 -0
  249. package/dist/src/Shadow.mjs.map +0 -0
  250. package/dist/src/brushes/BaseBrush.d.ts +0 -0
  251. package/dist/src/brushes/BaseBrush.d.ts.map +0 -0
  252. package/dist/src/brushes/BaseBrush.min.mjs +0 -0
  253. package/dist/src/brushes/BaseBrush.min.mjs.map +0 -0
  254. package/dist/src/brushes/BaseBrush.mjs +0 -0
  255. package/dist/src/brushes/BaseBrush.mjs.map +0 -0
  256. package/dist/src/brushes/CircleBrush.d.ts +0 -0
  257. package/dist/src/brushes/CircleBrush.d.ts.map +0 -0
  258. package/dist/src/brushes/CircleBrush.min.mjs +0 -0
  259. package/dist/src/brushes/CircleBrush.min.mjs.map +0 -0
  260. package/dist/src/brushes/CircleBrush.mjs +0 -0
  261. package/dist/src/brushes/CircleBrush.mjs.map +0 -0
  262. package/dist/src/brushes/PatternBrush.d.ts +0 -0
  263. package/dist/src/brushes/PatternBrush.d.ts.map +0 -0
  264. package/dist/src/brushes/PatternBrush.min.mjs +0 -0
  265. package/dist/src/brushes/PatternBrush.min.mjs.map +0 -0
  266. package/dist/src/brushes/PatternBrush.mjs +0 -0
  267. package/dist/src/brushes/PatternBrush.mjs.map +0 -0
  268. package/dist/src/brushes/PencilBrush.d.ts +0 -0
  269. package/dist/src/brushes/PencilBrush.d.ts.map +0 -0
  270. package/dist/src/brushes/PencilBrush.min.mjs +0 -0
  271. package/dist/src/brushes/PencilBrush.min.mjs.map +0 -0
  272. package/dist/src/brushes/PencilBrush.mjs +0 -0
  273. package/dist/src/brushes/PencilBrush.mjs.map +0 -0
  274. package/dist/src/brushes/SprayBrush.d.ts +0 -0
  275. package/dist/src/brushes/SprayBrush.d.ts.map +0 -0
  276. package/dist/src/brushes/SprayBrush.min.mjs +0 -0
  277. package/dist/src/brushes/SprayBrush.min.mjs.map +0 -0
  278. package/dist/src/brushes/SprayBrush.mjs +0 -0
  279. package/dist/src/brushes/SprayBrush.mjs.map +0 -0
  280. package/dist/src/brushes/typedefs.d.ts +0 -0
  281. package/dist/src/brushes/typedefs.d.ts.map +0 -0
  282. package/dist/src/cache.d.ts +0 -0
  283. package/dist/src/cache.d.ts.map +0 -0
  284. package/dist/src/cache.min.mjs +0 -0
  285. package/dist/src/cache.min.mjs.map +0 -0
  286. package/dist/src/cache.mjs +0 -0
  287. package/dist/src/cache.mjs.map +0 -0
  288. package/dist/src/canvas/Canvas.d.ts +0 -0
  289. package/dist/src/canvas/Canvas.d.ts.map +0 -0
  290. package/dist/src/canvas/Canvas.min.mjs +0 -0
  291. package/dist/src/canvas/Canvas.min.mjs.map +0 -0
  292. package/dist/src/canvas/Canvas.mjs +0 -0
  293. package/dist/src/canvas/Canvas.mjs.map +0 -0
  294. package/dist/src/canvas/CanvasOptions.d.ts +0 -0
  295. package/dist/src/canvas/CanvasOptions.d.ts.map +0 -0
  296. package/dist/src/canvas/CanvasOptions.min.mjs +0 -0
  297. package/dist/src/canvas/CanvasOptions.min.mjs.map +0 -0
  298. package/dist/src/canvas/CanvasOptions.mjs +0 -0
  299. package/dist/src/canvas/CanvasOptions.mjs.map +0 -0
  300. package/dist/src/canvas/DOMManagers/CanvasDOMManager.d.ts +0 -0
  301. package/dist/src/canvas/DOMManagers/CanvasDOMManager.d.ts.map +0 -0
  302. package/dist/src/canvas/DOMManagers/CanvasDOMManager.min.mjs +0 -0
  303. package/dist/src/canvas/DOMManagers/CanvasDOMManager.min.mjs.map +0 -0
  304. package/dist/src/canvas/DOMManagers/CanvasDOMManager.mjs +0 -0
  305. package/dist/src/canvas/DOMManagers/CanvasDOMManager.mjs.map +0 -0
  306. package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts +0 -0
  307. package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts.map +0 -0
  308. package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.min.mjs +0 -0
  309. package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.min.mjs.map +0 -0
  310. package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.mjs +0 -0
  311. package/dist/src/canvas/DOMManagers/StaticCanvasDOMManager.mjs.map +0 -0
  312. package/dist/src/canvas/DOMManagers/util.d.ts +0 -0
  313. package/dist/src/canvas/DOMManagers/util.d.ts.map +0 -0
  314. package/dist/src/canvas/DOMManagers/util.min.mjs +0 -0
  315. package/dist/src/canvas/DOMManagers/util.min.mjs.map +0 -0
  316. package/dist/src/canvas/DOMManagers/util.mjs +0 -0
  317. package/dist/src/canvas/DOMManagers/util.mjs.map +0 -0
  318. package/dist/src/canvas/SelectableCanvas.d.ts +0 -0
  319. package/dist/src/canvas/SelectableCanvas.d.ts.map +0 -0
  320. package/dist/src/canvas/SelectableCanvas.min.mjs +0 -0
  321. package/dist/src/canvas/SelectableCanvas.min.mjs.map +0 -0
  322. package/dist/src/canvas/SelectableCanvas.mjs +0 -0
  323. package/dist/src/canvas/SelectableCanvas.mjs.map +0 -0
  324. package/dist/src/canvas/StaticCanvas.d.ts +0 -0
  325. package/dist/src/canvas/StaticCanvas.d.ts.map +0 -0
  326. package/dist/src/canvas/StaticCanvas.min.mjs +0 -0
  327. package/dist/src/canvas/StaticCanvas.min.mjs.map +0 -0
  328. package/dist/src/canvas/StaticCanvas.mjs +0 -0
  329. package/dist/src/canvas/StaticCanvas.mjs.map +0 -0
  330. package/dist/src/canvas/StaticCanvasOptions.d.ts +0 -0
  331. package/dist/src/canvas/StaticCanvasOptions.d.ts.map +0 -0
  332. package/dist/src/canvas/StaticCanvasOptions.min.mjs +0 -0
  333. package/dist/src/canvas/StaticCanvasOptions.min.mjs.map +0 -0
  334. package/dist/src/canvas/StaticCanvasOptions.mjs +0 -0
  335. package/dist/src/canvas/StaticCanvasOptions.mjs.map +0 -0
  336. package/dist/src/canvas/TextEditingManager.d.ts +0 -0
  337. package/dist/src/canvas/TextEditingManager.d.ts.map +0 -0
  338. package/dist/src/canvas/TextEditingManager.min.mjs +0 -0
  339. package/dist/src/canvas/TextEditingManager.min.mjs.map +0 -0
  340. package/dist/src/canvas/TextEditingManager.mjs +0 -0
  341. package/dist/src/canvas/TextEditingManager.mjs.map +0 -0
  342. package/dist/src/canvas/canvas_gestures.mixin.d.ts +0 -0
  343. package/dist/src/canvas/canvas_gestures.mixin.d.ts.map +0 -0
  344. package/dist/src/color/Color.d.ts +0 -0
  345. package/dist/src/color/Color.d.ts.map +0 -0
  346. package/dist/src/color/Color.min.mjs +0 -0
  347. package/dist/src/color/Color.min.mjs.map +0 -0
  348. package/dist/src/color/Color.mjs +0 -0
  349. package/dist/src/color/Color.mjs.map +0 -0
  350. package/dist/src/color/color_map.d.ts +0 -0
  351. package/dist/src/color/color_map.d.ts.map +0 -0
  352. package/dist/src/color/color_map.min.mjs +0 -0
  353. package/dist/src/color/color_map.min.mjs.map +0 -0
  354. package/dist/src/color/color_map.mjs +0 -0
  355. package/dist/src/color/color_map.mjs.map +0 -0
  356. package/dist/src/color/constants.d.ts +0 -0
  357. package/dist/src/color/constants.d.ts.map +0 -0
  358. package/dist/src/color/constants.min.mjs +0 -0
  359. package/dist/src/color/constants.min.mjs.map +0 -0
  360. package/dist/src/color/constants.mjs +0 -0
  361. package/dist/src/color/constants.mjs.map +0 -0
  362. package/dist/src/color/typedefs.d.ts +0 -0
  363. package/dist/src/color/typedefs.d.ts.map +0 -0
  364. package/dist/src/color/util.d.ts +0 -0
  365. package/dist/src/color/util.d.ts.map +0 -0
  366. package/dist/src/color/util.min.mjs +0 -0
  367. package/dist/src/color/util.min.mjs.map +0 -0
  368. package/dist/src/color/util.mjs +0 -0
  369. package/dist/src/color/util.mjs.map +0 -0
  370. package/dist/src/config.d.ts +0 -0
  371. package/dist/src/config.d.ts.map +0 -0
  372. package/dist/src/config.min.mjs +0 -0
  373. package/dist/src/config.min.mjs.map +0 -0
  374. package/dist/src/config.mjs +0 -0
  375. package/dist/src/config.mjs.map +0 -0
  376. package/dist/src/constants.d.ts +0 -0
  377. package/dist/src/constants.d.ts.map +0 -0
  378. package/dist/src/constants.min.mjs +0 -0
  379. package/dist/src/constants.min.mjs.map +0 -0
  380. package/dist/src/constants.mjs +0 -0
  381. package/dist/src/constants.mjs.map +0 -0
  382. package/dist/src/controls/Control.d.ts +0 -0
  383. package/dist/src/controls/Control.d.ts.map +0 -0
  384. package/dist/src/controls/Control.min.mjs +0 -0
  385. package/dist/src/controls/Control.min.mjs.map +0 -0
  386. package/dist/src/controls/Control.mjs +0 -0
  387. package/dist/src/controls/Control.mjs.map +0 -0
  388. package/dist/src/controls/changeHeight.d.ts +0 -0
  389. package/dist/src/controls/changeHeight.d.ts.map +0 -0
  390. package/dist/src/controls/changeHeight.min.mjs +2 -0
  391. package/dist/src/controls/changeHeight.min.mjs.map +1 -0
  392. package/dist/src/controls/changeHeight.mjs +36 -0
  393. package/dist/src/controls/changeHeight.mjs.map +1 -0
  394. package/dist/src/controls/changeWidth.d.ts +0 -0
  395. package/dist/src/controls/changeWidth.d.ts.map +0 -0
  396. package/dist/src/controls/changeWidth.min.mjs +0 -0
  397. package/dist/src/controls/changeWidth.min.mjs.map +0 -0
  398. package/dist/src/controls/changeWidth.mjs +0 -0
  399. package/dist/src/controls/changeWidth.mjs.map +0 -0
  400. package/dist/src/controls/commonControls.d.ts +0 -0
  401. package/dist/src/controls/commonControls.d.ts.map +0 -0
  402. package/dist/src/controls/commonControls.min.mjs +0 -0
  403. package/dist/src/controls/commonControls.min.mjs.map +0 -0
  404. package/dist/src/controls/commonControls.mjs +0 -0
  405. package/dist/src/controls/commonControls.mjs.map +0 -0
  406. package/dist/src/controls/controlRendering.d.ts +0 -0
  407. package/dist/src/controls/controlRendering.d.ts.map +0 -0
  408. package/dist/src/controls/controlRendering.min.mjs +0 -0
  409. package/dist/src/controls/controlRendering.min.mjs.map +0 -0
  410. package/dist/src/controls/controlRendering.mjs +0 -0
  411. package/dist/src/controls/controlRendering.mjs.map +0 -0
  412. package/dist/src/controls/drag.d.ts +0 -0
  413. package/dist/src/controls/drag.d.ts.map +0 -0
  414. package/dist/src/controls/drag.min.mjs +0 -0
  415. package/dist/src/controls/drag.min.mjs.map +0 -0
  416. package/dist/src/controls/drag.mjs +0 -0
  417. package/dist/src/controls/drag.mjs.map +0 -0
  418. package/dist/src/controls/fireEvent.d.ts +0 -0
  419. package/dist/src/controls/fireEvent.d.ts.map +0 -0
  420. package/dist/src/controls/fireEvent.min.mjs +0 -0
  421. package/dist/src/controls/fireEvent.min.mjs.map +0 -0
  422. package/dist/src/controls/fireEvent.mjs +0 -0
  423. package/dist/src/controls/fireEvent.mjs.map +0 -0
  424. package/dist/src/controls/index.d.ts +0 -0
  425. package/dist/src/controls/index.d.ts.map +0 -0
  426. package/dist/src/controls/index.min.mjs +0 -0
  427. package/dist/src/controls/index.min.mjs.map +0 -0
  428. package/dist/src/controls/index.mjs +0 -0
  429. package/dist/src/controls/index.mjs.map +0 -0
  430. package/dist/src/controls/pathControl.d.ts +0 -0
  431. package/dist/src/controls/pathControl.d.ts.map +0 -0
  432. package/dist/src/controls/pathControl.min.mjs +0 -0
  433. package/dist/src/controls/pathControl.min.mjs.map +0 -0
  434. package/dist/src/controls/pathControl.mjs +0 -0
  435. package/dist/src/controls/pathControl.mjs.map +0 -0
  436. package/dist/src/controls/polyControl.d.ts +0 -0
  437. package/dist/src/controls/polyControl.d.ts.map +0 -0
  438. package/dist/src/controls/polyControl.min.mjs +0 -0
  439. package/dist/src/controls/polyControl.min.mjs.map +0 -0
  440. package/dist/src/controls/polyControl.mjs +0 -0
  441. package/dist/src/controls/polyControl.mjs.map +0 -0
  442. package/dist/src/controls/rotate.d.ts +0 -0
  443. package/dist/src/controls/rotate.d.ts.map +0 -0
  444. package/dist/src/controls/rotate.min.mjs +0 -0
  445. package/dist/src/controls/rotate.min.mjs.map +0 -0
  446. package/dist/src/controls/rotate.mjs +0 -0
  447. package/dist/src/controls/rotate.mjs.map +0 -0
  448. package/dist/src/controls/scale.d.ts +0 -0
  449. package/dist/src/controls/scale.d.ts.map +0 -0
  450. package/dist/src/controls/scale.min.mjs +0 -0
  451. package/dist/src/controls/scale.min.mjs.map +0 -0
  452. package/dist/src/controls/scale.mjs +0 -0
  453. package/dist/src/controls/scale.mjs.map +0 -0
  454. package/dist/src/controls/scaleSkew.d.ts +0 -0
  455. package/dist/src/controls/scaleSkew.d.ts.map +0 -0
  456. package/dist/src/controls/scaleSkew.min.mjs +0 -0
  457. package/dist/src/controls/scaleSkew.min.mjs.map +0 -0
  458. package/dist/src/controls/scaleSkew.mjs +0 -0
  459. package/dist/src/controls/scaleSkew.mjs.map +0 -0
  460. package/dist/src/controls/skew.d.ts +0 -0
  461. package/dist/src/controls/skew.d.ts.map +0 -0
  462. package/dist/src/controls/skew.min.mjs +0 -0
  463. package/dist/src/controls/skew.min.mjs.map +0 -0
  464. package/dist/src/controls/skew.mjs +0 -0
  465. package/dist/src/controls/skew.mjs.map +0 -0
  466. package/dist/src/controls/util.d.ts +0 -0
  467. package/dist/src/controls/util.d.ts.map +0 -0
  468. package/dist/src/controls/util.min.mjs +0 -0
  469. package/dist/src/controls/util.min.mjs.map +0 -0
  470. package/dist/src/controls/util.mjs +0 -0
  471. package/dist/src/controls/util.mjs.map +0 -0
  472. package/dist/src/controls/wrapWithFireEvent.d.ts +0 -0
  473. package/dist/src/controls/wrapWithFireEvent.d.ts.map +0 -0
  474. package/dist/src/controls/wrapWithFireEvent.min.mjs +0 -0
  475. package/dist/src/controls/wrapWithFireEvent.min.mjs.map +0 -0
  476. package/dist/src/controls/wrapWithFireEvent.mjs +0 -0
  477. package/dist/src/controls/wrapWithFireEvent.mjs.map +0 -0
  478. package/dist/src/controls/wrapWithFixedAnchor.d.ts +0 -0
  479. package/dist/src/controls/wrapWithFixedAnchor.d.ts.map +0 -0
  480. package/dist/src/controls/wrapWithFixedAnchor.min.mjs +0 -0
  481. package/dist/src/controls/wrapWithFixedAnchor.min.mjs.map +0 -0
  482. package/dist/src/controls/wrapWithFixedAnchor.mjs +0 -0
  483. package/dist/src/controls/wrapWithFixedAnchor.mjs.map +0 -0
  484. package/dist/src/env/browser.d.ts +0 -0
  485. package/dist/src/env/browser.d.ts.map +0 -0
  486. package/dist/src/env/browser.min.mjs +0 -0
  487. package/dist/src/env/browser.min.mjs.map +0 -0
  488. package/dist/src/env/browser.mjs +0 -0
  489. package/dist/src/env/browser.mjs.map +0 -0
  490. package/dist/src/env/index.d.ts +0 -0
  491. package/dist/src/env/index.d.ts.map +0 -0
  492. package/dist/src/env/index.min.mjs +0 -0
  493. package/dist/src/env/index.min.mjs.map +0 -0
  494. package/dist/src/env/index.mjs +0 -0
  495. package/dist/src/env/index.mjs.map +0 -0
  496. package/dist/src/env/node.d.ts +0 -0
  497. package/dist/src/env/node.d.ts.map +0 -0
  498. package/dist/src/env/types.d.ts +0 -0
  499. package/dist/src/env/types.d.ts.map +0 -0
  500. package/dist/src/filters/BaseFilter.d.ts +0 -0
  501. package/dist/src/filters/BaseFilter.d.ts.map +0 -0
  502. package/dist/src/filters/BaseFilter.min.mjs +0 -0
  503. package/dist/src/filters/BaseFilter.min.mjs.map +0 -0
  504. package/dist/src/filters/BaseFilter.mjs +0 -0
  505. package/dist/src/filters/BaseFilter.mjs.map +0 -0
  506. package/dist/src/filters/BlendColor.d.ts +0 -0
  507. package/dist/src/filters/BlendColor.d.ts.map +0 -0
  508. package/dist/src/filters/BlendColor.min.mjs +0 -0
  509. package/dist/src/filters/BlendColor.min.mjs.map +0 -0
  510. package/dist/src/filters/BlendColor.mjs +0 -0
  511. package/dist/src/filters/BlendColor.mjs.map +0 -0
  512. package/dist/src/filters/BlendImage.d.ts +0 -0
  513. package/dist/src/filters/BlendImage.d.ts.map +0 -0
  514. package/dist/src/filters/BlendImage.min.mjs +0 -0
  515. package/dist/src/filters/BlendImage.min.mjs.map +0 -0
  516. package/dist/src/filters/BlendImage.mjs +0 -0
  517. package/dist/src/filters/BlendImage.mjs.map +0 -0
  518. package/dist/src/filters/Blur.d.ts +0 -0
  519. package/dist/src/filters/Blur.d.ts.map +0 -0
  520. package/dist/src/filters/Blur.min.mjs +0 -0
  521. package/dist/src/filters/Blur.min.mjs.map +0 -0
  522. package/dist/src/filters/Blur.mjs +0 -0
  523. package/dist/src/filters/Blur.mjs.map +0 -0
  524. package/dist/src/filters/Boilerplate.d.ts +0 -0
  525. package/dist/src/filters/Boilerplate.d.ts.map +0 -0
  526. package/dist/src/filters/Brightness.d.ts +0 -0
  527. package/dist/src/filters/Brightness.d.ts.map +0 -0
  528. package/dist/src/filters/Brightness.min.mjs +0 -0
  529. package/dist/src/filters/Brightness.min.mjs.map +0 -0
  530. package/dist/src/filters/Brightness.mjs +0 -0
  531. package/dist/src/filters/Brightness.mjs.map +0 -0
  532. package/dist/src/filters/Canvas2dFilterBackend.d.ts +0 -0
  533. package/dist/src/filters/Canvas2dFilterBackend.d.ts.map +0 -0
  534. package/dist/src/filters/Canvas2dFilterBackend.min.mjs +0 -0
  535. package/dist/src/filters/Canvas2dFilterBackend.min.mjs.map +0 -0
  536. package/dist/src/filters/Canvas2dFilterBackend.mjs +0 -0
  537. package/dist/src/filters/Canvas2dFilterBackend.mjs.map +0 -0
  538. package/dist/src/filters/ColorMatrix.d.ts +0 -0
  539. package/dist/src/filters/ColorMatrix.d.ts.map +0 -0
  540. package/dist/src/filters/ColorMatrix.min.mjs +0 -0
  541. package/dist/src/filters/ColorMatrix.min.mjs.map +0 -0
  542. package/dist/src/filters/ColorMatrix.mjs +0 -0
  543. package/dist/src/filters/ColorMatrix.mjs.map +0 -0
  544. package/dist/src/filters/ColorMatrixFilters.d.ts +0 -0
  545. package/dist/src/filters/ColorMatrixFilters.d.ts.map +0 -0
  546. package/dist/src/filters/ColorMatrixFilters.min.mjs +0 -0
  547. package/dist/src/filters/ColorMatrixFilters.min.mjs.map +0 -0
  548. package/dist/src/filters/ColorMatrixFilters.mjs +0 -0
  549. package/dist/src/filters/ColorMatrixFilters.mjs.map +0 -0
  550. package/dist/src/filters/Composed.d.ts +0 -0
  551. package/dist/src/filters/Composed.d.ts.map +0 -0
  552. package/dist/src/filters/Composed.min.mjs +0 -0
  553. package/dist/src/filters/Composed.min.mjs.map +0 -0
  554. package/dist/src/filters/Composed.mjs +0 -0
  555. package/dist/src/filters/Composed.mjs.map +0 -0
  556. package/dist/src/filters/Contrast.d.ts +0 -0
  557. package/dist/src/filters/Contrast.d.ts.map +0 -0
  558. package/dist/src/filters/Contrast.min.mjs +0 -0
  559. package/dist/src/filters/Contrast.min.mjs.map +0 -0
  560. package/dist/src/filters/Contrast.mjs +0 -0
  561. package/dist/src/filters/Contrast.mjs.map +0 -0
  562. package/dist/src/filters/Convolute.d.ts +0 -0
  563. package/dist/src/filters/Convolute.d.ts.map +0 -0
  564. package/dist/src/filters/Convolute.min.mjs +0 -0
  565. package/dist/src/filters/Convolute.min.mjs.map +0 -0
  566. package/dist/src/filters/Convolute.mjs +0 -0
  567. package/dist/src/filters/Convolute.mjs.map +0 -0
  568. package/dist/src/filters/FilterBackend.d.ts +0 -0
  569. package/dist/src/filters/FilterBackend.d.ts.map +0 -0
  570. package/dist/src/filters/FilterBackend.min.mjs +0 -0
  571. package/dist/src/filters/FilterBackend.min.mjs.map +0 -0
  572. package/dist/src/filters/FilterBackend.mjs +0 -0
  573. package/dist/src/filters/FilterBackend.mjs.map +0 -0
  574. package/dist/src/filters/GLProbes/GLProbe.d.ts +0 -0
  575. package/dist/src/filters/GLProbes/GLProbe.d.ts.map +0 -0
  576. package/dist/src/filters/GLProbes/GLProbe.min.mjs +0 -0
  577. package/dist/src/filters/GLProbes/GLProbe.min.mjs.map +0 -0
  578. package/dist/src/filters/GLProbes/GLProbe.mjs +0 -0
  579. package/dist/src/filters/GLProbes/GLProbe.mjs.map +0 -0
  580. package/dist/src/filters/GLProbes/NodeGLProbe.d.ts +0 -0
  581. package/dist/src/filters/GLProbes/NodeGLProbe.d.ts.map +0 -0
  582. package/dist/src/filters/GLProbes/WebGLProbe.d.ts +0 -0
  583. package/dist/src/filters/GLProbes/WebGLProbe.d.ts.map +0 -0
  584. package/dist/src/filters/GLProbes/WebGLProbe.min.mjs +0 -0
  585. package/dist/src/filters/GLProbes/WebGLProbe.min.mjs.map +0 -0
  586. package/dist/src/filters/GLProbes/WebGLProbe.mjs +0 -0
  587. package/dist/src/filters/GLProbes/WebGLProbe.mjs.map +0 -0
  588. package/dist/src/filters/Gamma.d.ts +0 -0
  589. package/dist/src/filters/Gamma.d.ts.map +0 -0
  590. package/dist/src/filters/Gamma.min.mjs +0 -0
  591. package/dist/src/filters/Gamma.min.mjs.map +0 -0
  592. package/dist/src/filters/Gamma.mjs +0 -0
  593. package/dist/src/filters/Gamma.mjs.map +0 -0
  594. package/dist/src/filters/Grayscale.d.ts +0 -0
  595. package/dist/src/filters/Grayscale.d.ts.map +0 -0
  596. package/dist/src/filters/Grayscale.min.mjs +0 -0
  597. package/dist/src/filters/Grayscale.min.mjs.map +0 -0
  598. package/dist/src/filters/Grayscale.mjs +0 -0
  599. package/dist/src/filters/Grayscale.mjs.map +0 -0
  600. package/dist/src/filters/HueRotation.d.ts +0 -0
  601. package/dist/src/filters/HueRotation.d.ts.map +0 -0
  602. package/dist/src/filters/HueRotation.min.mjs +0 -0
  603. package/dist/src/filters/HueRotation.min.mjs.map +0 -0
  604. package/dist/src/filters/HueRotation.mjs +0 -0
  605. package/dist/src/filters/HueRotation.mjs.map +0 -0
  606. package/dist/src/filters/Invert.d.ts +0 -0
  607. package/dist/src/filters/Invert.d.ts.map +0 -0
  608. package/dist/src/filters/Invert.min.mjs +0 -0
  609. package/dist/src/filters/Invert.min.mjs.map +0 -0
  610. package/dist/src/filters/Invert.mjs +0 -0
  611. package/dist/src/filters/Invert.mjs.map +0 -0
  612. package/dist/src/filters/Noise.d.ts +0 -0
  613. package/dist/src/filters/Noise.d.ts.map +0 -0
  614. package/dist/src/filters/Noise.min.mjs +0 -0
  615. package/dist/src/filters/Noise.min.mjs.map +0 -0
  616. package/dist/src/filters/Noise.mjs +0 -0
  617. package/dist/src/filters/Noise.mjs.map +0 -0
  618. package/dist/src/filters/Pixelate.d.ts +0 -0
  619. package/dist/src/filters/Pixelate.d.ts.map +0 -0
  620. package/dist/src/filters/Pixelate.min.mjs +0 -0
  621. package/dist/src/filters/Pixelate.min.mjs.map +0 -0
  622. package/dist/src/filters/Pixelate.mjs +0 -0
  623. package/dist/src/filters/Pixelate.mjs.map +0 -0
  624. package/dist/src/filters/RemoveColor.d.ts +0 -0
  625. package/dist/src/filters/RemoveColor.d.ts.map +0 -0
  626. package/dist/src/filters/RemoveColor.min.mjs +0 -0
  627. package/dist/src/filters/RemoveColor.min.mjs.map +0 -0
  628. package/dist/src/filters/RemoveColor.mjs +0 -0
  629. package/dist/src/filters/RemoveColor.mjs.map +0 -0
  630. package/dist/src/filters/Resize.d.ts +0 -0
  631. package/dist/src/filters/Resize.d.ts.map +0 -0
  632. package/dist/src/filters/Resize.min.mjs +0 -0
  633. package/dist/src/filters/Resize.min.mjs.map +0 -0
  634. package/dist/src/filters/Resize.mjs +0 -0
  635. package/dist/src/filters/Resize.mjs.map +0 -0
  636. package/dist/src/filters/Saturation.d.ts +0 -0
  637. package/dist/src/filters/Saturation.d.ts.map +0 -0
  638. package/dist/src/filters/Saturation.min.mjs +0 -0
  639. package/dist/src/filters/Saturation.min.mjs.map +0 -0
  640. package/dist/src/filters/Saturation.mjs +0 -0
  641. package/dist/src/filters/Saturation.mjs.map +0 -0
  642. package/dist/src/filters/Vibrance.d.ts +0 -0
  643. package/dist/src/filters/Vibrance.d.ts.map +0 -0
  644. package/dist/src/filters/Vibrance.min.mjs +0 -0
  645. package/dist/src/filters/Vibrance.min.mjs.map +0 -0
  646. package/dist/src/filters/Vibrance.mjs +0 -0
  647. package/dist/src/filters/Vibrance.mjs.map +0 -0
  648. package/dist/src/filters/WebGLFilterBackend.d.ts +0 -0
  649. package/dist/src/filters/WebGLFilterBackend.d.ts.map +0 -0
  650. package/dist/src/filters/WebGLFilterBackend.min.mjs +0 -0
  651. package/dist/src/filters/WebGLFilterBackend.min.mjs.map +0 -0
  652. package/dist/src/filters/WebGLFilterBackend.mjs +0 -0
  653. package/dist/src/filters/WebGLFilterBackend.mjs.map +0 -0
  654. package/dist/src/filters/filters.d.ts +0 -0
  655. package/dist/src/filters/filters.d.ts.map +0 -0
  656. package/dist/src/filters/filters.min.mjs +0 -0
  657. package/dist/src/filters/filters.min.mjs.map +0 -0
  658. package/dist/src/filters/filters.mjs +0 -0
  659. package/dist/src/filters/filters.mjs.map +0 -0
  660. package/dist/src/filters/index.d.ts +0 -0
  661. package/dist/src/filters/index.d.ts.map +0 -0
  662. package/dist/src/filters/shaders/baseFilter.d.ts +0 -0
  663. package/dist/src/filters/shaders/baseFilter.d.ts.map +0 -0
  664. package/dist/src/filters/shaders/baseFilter.min.mjs +0 -0
  665. package/dist/src/filters/shaders/baseFilter.min.mjs.map +0 -0
  666. package/dist/src/filters/shaders/baseFilter.mjs +0 -0
  667. package/dist/src/filters/shaders/baseFilter.mjs.map +0 -0
  668. package/dist/src/filters/shaders/blendColor.d.ts +0 -0
  669. package/dist/src/filters/shaders/blendColor.d.ts.map +0 -0
  670. package/dist/src/filters/shaders/blendColor.min.mjs +0 -0
  671. package/dist/src/filters/shaders/blendColor.min.mjs.map +0 -0
  672. package/dist/src/filters/shaders/blendColor.mjs +0 -0
  673. package/dist/src/filters/shaders/blendColor.mjs.map +0 -0
  674. package/dist/src/filters/shaders/blendImage.d.ts +0 -0
  675. package/dist/src/filters/shaders/blendImage.d.ts.map +0 -0
  676. package/dist/src/filters/shaders/blendImage.min.mjs +0 -0
  677. package/dist/src/filters/shaders/blendImage.min.mjs.map +0 -0
  678. package/dist/src/filters/shaders/blendImage.mjs +0 -0
  679. package/dist/src/filters/shaders/blendImage.mjs.map +0 -0
  680. package/dist/src/filters/shaders/blur.d.ts +0 -0
  681. package/dist/src/filters/shaders/blur.d.ts.map +0 -0
  682. package/dist/src/filters/shaders/blur.min.mjs +0 -0
  683. package/dist/src/filters/shaders/blur.min.mjs.map +0 -0
  684. package/dist/src/filters/shaders/blur.mjs +0 -0
  685. package/dist/src/filters/shaders/blur.mjs.map +0 -0
  686. package/dist/src/filters/shaders/brightness.d.ts +0 -0
  687. package/dist/src/filters/shaders/brightness.d.ts.map +0 -0
  688. package/dist/src/filters/shaders/brightness.min.mjs +0 -0
  689. package/dist/src/filters/shaders/brightness.min.mjs.map +0 -0
  690. package/dist/src/filters/shaders/brightness.mjs +0 -0
  691. package/dist/src/filters/shaders/brightness.mjs.map +0 -0
  692. package/dist/src/filters/shaders/colorMatrix.d.ts +0 -0
  693. package/dist/src/filters/shaders/colorMatrix.d.ts.map +0 -0
  694. package/dist/src/filters/shaders/colorMatrix.min.mjs +0 -0
  695. package/dist/src/filters/shaders/colorMatrix.min.mjs.map +0 -0
  696. package/dist/src/filters/shaders/colorMatrix.mjs +0 -0
  697. package/dist/src/filters/shaders/colorMatrix.mjs.map +0 -0
  698. package/dist/src/filters/shaders/constrast.d.ts +0 -0
  699. package/dist/src/filters/shaders/constrast.d.ts.map +0 -0
  700. package/dist/src/filters/shaders/constrast.min.mjs +0 -0
  701. package/dist/src/filters/shaders/constrast.min.mjs.map +0 -0
  702. package/dist/src/filters/shaders/constrast.mjs +0 -0
  703. package/dist/src/filters/shaders/constrast.mjs.map +0 -0
  704. package/dist/src/filters/shaders/convolute.d.ts +0 -0
  705. package/dist/src/filters/shaders/convolute.d.ts.map +0 -0
  706. package/dist/src/filters/shaders/convolute.min.mjs +0 -0
  707. package/dist/src/filters/shaders/convolute.min.mjs.map +0 -0
  708. package/dist/src/filters/shaders/convolute.mjs +0 -0
  709. package/dist/src/filters/shaders/convolute.mjs.map +0 -0
  710. package/dist/src/filters/shaders/gamma.d.ts +0 -0
  711. package/dist/src/filters/shaders/gamma.d.ts.map +0 -0
  712. package/dist/src/filters/shaders/gamma.min.mjs +0 -0
  713. package/dist/src/filters/shaders/gamma.min.mjs.map +0 -0
  714. package/dist/src/filters/shaders/gamma.mjs +0 -0
  715. package/dist/src/filters/shaders/gamma.mjs.map +0 -0
  716. package/dist/src/filters/shaders/grayscale.d.ts +0 -0
  717. package/dist/src/filters/shaders/grayscale.d.ts.map +0 -0
  718. package/dist/src/filters/shaders/grayscale.min.mjs +0 -0
  719. package/dist/src/filters/shaders/grayscale.min.mjs.map +0 -0
  720. package/dist/src/filters/shaders/grayscale.mjs +0 -0
  721. package/dist/src/filters/shaders/grayscale.mjs.map +0 -0
  722. package/dist/src/filters/shaders/invert.d.ts +0 -0
  723. package/dist/src/filters/shaders/invert.d.ts.map +0 -0
  724. package/dist/src/filters/shaders/invert.min.mjs +0 -0
  725. package/dist/src/filters/shaders/invert.min.mjs.map +0 -0
  726. package/dist/src/filters/shaders/invert.mjs +0 -0
  727. package/dist/src/filters/shaders/invert.mjs.map +0 -0
  728. package/dist/src/filters/shaders/noise.d.ts +0 -0
  729. package/dist/src/filters/shaders/noise.d.ts.map +0 -0
  730. package/dist/src/filters/shaders/noise.min.mjs +0 -0
  731. package/dist/src/filters/shaders/noise.min.mjs.map +0 -0
  732. package/dist/src/filters/shaders/noise.mjs +0 -0
  733. package/dist/src/filters/shaders/noise.mjs.map +0 -0
  734. package/dist/src/filters/shaders/pixelate.d.ts +0 -0
  735. package/dist/src/filters/shaders/pixelate.d.ts.map +0 -0
  736. package/dist/src/filters/shaders/pixelate.min.mjs +0 -0
  737. package/dist/src/filters/shaders/pixelate.min.mjs.map +0 -0
  738. package/dist/src/filters/shaders/pixelate.mjs +0 -0
  739. package/dist/src/filters/shaders/pixelate.mjs.map +0 -0
  740. package/dist/src/filters/shaders/removeColor.d.ts +0 -0
  741. package/dist/src/filters/shaders/removeColor.d.ts.map +0 -0
  742. package/dist/src/filters/shaders/removeColor.min.mjs +0 -0
  743. package/dist/src/filters/shaders/removeColor.min.mjs.map +0 -0
  744. package/dist/src/filters/shaders/removeColor.mjs +0 -0
  745. package/dist/src/filters/shaders/removeColor.mjs.map +0 -0
  746. package/dist/src/filters/shaders/saturation.d.ts +0 -0
  747. package/dist/src/filters/shaders/saturation.d.ts.map +0 -0
  748. package/dist/src/filters/shaders/saturation.min.mjs +0 -0
  749. package/dist/src/filters/shaders/saturation.min.mjs.map +0 -0
  750. package/dist/src/filters/shaders/saturation.mjs +0 -0
  751. package/dist/src/filters/shaders/saturation.mjs.map +0 -0
  752. package/dist/src/filters/shaders/vibrance.d.ts +0 -0
  753. package/dist/src/filters/shaders/vibrance.d.ts.map +0 -0
  754. package/dist/src/filters/shaders/vibrance.min.mjs +0 -0
  755. package/dist/src/filters/shaders/vibrance.min.mjs.map +0 -0
  756. package/dist/src/filters/shaders/vibrance.mjs +0 -0
  757. package/dist/src/filters/shaders/vibrance.mjs.map +0 -0
  758. package/dist/src/filters/typedefs.d.ts +0 -0
  759. package/dist/src/filters/typedefs.d.ts.map +0 -0
  760. package/dist/src/filters/utils.d.ts +0 -0
  761. package/dist/src/filters/utils.d.ts.map +0 -0
  762. package/dist/src/filters/utils.min.mjs +0 -0
  763. package/dist/src/filters/utils.min.mjs.map +0 -0
  764. package/dist/src/filters/utils.mjs +0 -0
  765. package/dist/src/filters/utils.mjs.map +0 -0
  766. package/dist/src/gradient/Gradient.d.ts +0 -0
  767. package/dist/src/gradient/Gradient.d.ts.map +0 -0
  768. package/dist/src/gradient/Gradient.min.mjs +0 -0
  769. package/dist/src/gradient/Gradient.min.mjs.map +0 -0
  770. package/dist/src/gradient/Gradient.mjs +0 -0
  771. package/dist/src/gradient/Gradient.mjs.map +0 -0
  772. package/dist/src/gradient/constants.d.ts +0 -0
  773. package/dist/src/gradient/constants.d.ts.map +0 -0
  774. package/dist/src/gradient/constants.min.mjs +0 -0
  775. package/dist/src/gradient/constants.min.mjs.map +0 -0
  776. package/dist/src/gradient/constants.mjs +0 -0
  777. package/dist/src/gradient/constants.mjs.map +0 -0
  778. package/dist/src/gradient/index.d.ts +0 -0
  779. package/dist/src/gradient/index.d.ts.map +0 -0
  780. package/dist/src/gradient/parser/misc.d.ts +0 -0
  781. package/dist/src/gradient/parser/misc.d.ts.map +0 -0
  782. package/dist/src/gradient/parser/misc.min.mjs +0 -0
  783. package/dist/src/gradient/parser/misc.min.mjs.map +0 -0
  784. package/dist/src/gradient/parser/misc.mjs +0 -0
  785. package/dist/src/gradient/parser/misc.mjs.map +0 -0
  786. package/dist/src/gradient/parser/parseColorStops.d.ts +0 -0
  787. package/dist/src/gradient/parser/parseColorStops.d.ts.map +0 -0
  788. package/dist/src/gradient/parser/parseColorStops.min.mjs +0 -0
  789. package/dist/src/gradient/parser/parseColorStops.min.mjs.map +0 -0
  790. package/dist/src/gradient/parser/parseColorStops.mjs +0 -0
  791. package/dist/src/gradient/parser/parseColorStops.mjs.map +0 -0
  792. package/dist/src/gradient/parser/parseCoords.d.ts +0 -0
  793. package/dist/src/gradient/parser/parseCoords.d.ts.map +0 -0
  794. package/dist/src/gradient/parser/parseCoords.min.mjs +0 -0
  795. package/dist/src/gradient/parser/parseCoords.min.mjs.map +0 -0
  796. package/dist/src/gradient/parser/parseCoords.mjs +0 -0
  797. package/dist/src/gradient/parser/parseCoords.mjs.map +0 -0
  798. package/dist/src/gradient/typedefs.d.ts +0 -0
  799. package/dist/src/gradient/typedefs.d.ts.map +0 -0
  800. package/dist/src/mixins/eraser_brush.mixin.d.ts +0 -0
  801. package/dist/src/mixins/eraser_brush.mixin.d.ts.map +0 -0
  802. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +0 -0
  803. package/dist/src/parkinglot/canvas_animation.mixin.d.ts.map +0 -0
  804. package/dist/src/parkinglot/straighten.d.ts +0 -0
  805. package/dist/src/parkinglot/straighten.d.ts.map +0 -0
  806. package/dist/src/parser/applyViewboxTransform.d.ts +0 -0
  807. package/dist/src/parser/applyViewboxTransform.d.ts.map +0 -0
  808. package/dist/src/parser/applyViewboxTransform.min.mjs +0 -0
  809. package/dist/src/parser/applyViewboxTransform.min.mjs.map +0 -0
  810. package/dist/src/parser/applyViewboxTransform.mjs +0 -0
  811. package/dist/src/parser/applyViewboxTransform.mjs.map +0 -0
  812. package/dist/src/parser/attributes.d.ts +0 -0
  813. package/dist/src/parser/attributes.d.ts.map +0 -0
  814. package/dist/src/parser/attributes.min.mjs +0 -0
  815. package/dist/src/parser/attributes.min.mjs.map +0 -0
  816. package/dist/src/parser/attributes.mjs +0 -0
  817. package/dist/src/parser/attributes.mjs.map +0 -0
  818. package/dist/src/parser/constants.d.ts +0 -0
  819. package/dist/src/parser/constants.d.ts.map +0 -0
  820. package/dist/src/parser/constants.min.mjs +0 -0
  821. package/dist/src/parser/constants.min.mjs.map +0 -0
  822. package/dist/src/parser/constants.mjs +0 -0
  823. package/dist/src/parser/constants.mjs.map +0 -0
  824. package/dist/src/parser/doesSomeParentMatch.d.ts +0 -0
  825. package/dist/src/parser/doesSomeParentMatch.d.ts.map +0 -0
  826. package/dist/src/parser/doesSomeParentMatch.min.mjs +0 -0
  827. package/dist/src/parser/doesSomeParentMatch.min.mjs.map +0 -0
  828. package/dist/src/parser/doesSomeParentMatch.mjs +0 -0
  829. package/dist/src/parser/doesSomeParentMatch.mjs.map +0 -0
  830. package/dist/src/parser/elementMatchesRule.d.ts +0 -0
  831. package/dist/src/parser/elementMatchesRule.d.ts.map +0 -0
  832. package/dist/src/parser/elementMatchesRule.min.mjs +0 -0
  833. package/dist/src/parser/elementMatchesRule.min.mjs.map +0 -0
  834. package/dist/src/parser/elementMatchesRule.mjs +0 -0
  835. package/dist/src/parser/elementMatchesRule.mjs.map +0 -0
  836. package/dist/src/parser/elements_parser.d.ts +0 -0
  837. package/dist/src/parser/elements_parser.d.ts.map +0 -0
  838. package/dist/src/parser/elements_parser.min.mjs +0 -0
  839. package/dist/src/parser/elements_parser.min.mjs.map +0 -0
  840. package/dist/src/parser/elements_parser.mjs +0 -0
  841. package/dist/src/parser/elements_parser.mjs.map +0 -0
  842. package/dist/src/parser/getCSSRules.d.ts +0 -0
  843. package/dist/src/parser/getCSSRules.d.ts.map +0 -0
  844. package/dist/src/parser/getCSSRules.min.mjs +0 -0
  845. package/dist/src/parser/getCSSRules.min.mjs.map +0 -0
  846. package/dist/src/parser/getCSSRules.mjs +0 -0
  847. package/dist/src/parser/getCSSRules.mjs.map +0 -0
  848. package/dist/src/parser/getGlobalStylesForElement.d.ts +0 -0
  849. package/dist/src/parser/getGlobalStylesForElement.d.ts.map +0 -0
  850. package/dist/src/parser/getGlobalStylesForElement.min.mjs +0 -0
  851. package/dist/src/parser/getGlobalStylesForElement.min.mjs.map +0 -0
  852. package/dist/src/parser/getGlobalStylesForElement.mjs +0 -0
  853. package/dist/src/parser/getGlobalStylesForElement.mjs.map +0 -0
  854. package/dist/src/parser/getGradientDefs.d.ts +0 -0
  855. package/dist/src/parser/getGradientDefs.d.ts.map +0 -0
  856. package/dist/src/parser/getGradientDefs.min.mjs +0 -0
  857. package/dist/src/parser/getGradientDefs.min.mjs.map +0 -0
  858. package/dist/src/parser/getGradientDefs.mjs +0 -0
  859. package/dist/src/parser/getGradientDefs.mjs.map +0 -0
  860. package/dist/src/parser/getMultipleNodes.d.ts +0 -0
  861. package/dist/src/parser/getMultipleNodes.d.ts.map +0 -0
  862. package/dist/src/parser/getMultipleNodes.min.mjs +0 -0
  863. package/dist/src/parser/getMultipleNodes.min.mjs.map +0 -0
  864. package/dist/src/parser/getMultipleNodes.mjs +0 -0
  865. package/dist/src/parser/getMultipleNodes.mjs.map +0 -0
  866. package/dist/src/parser/getSvgRegex.d.ts +0 -0
  867. package/dist/src/parser/getSvgRegex.d.ts.map +0 -0
  868. package/dist/src/parser/getSvgRegex.min.mjs +0 -0
  869. package/dist/src/parser/getSvgRegex.min.mjs.map +0 -0
  870. package/dist/src/parser/getSvgRegex.mjs +0 -0
  871. package/dist/src/parser/getSvgRegex.mjs.map +0 -0
  872. package/dist/src/parser/getTagName.d.ts +0 -0
  873. package/dist/src/parser/getTagName.d.ts.map +0 -0
  874. package/dist/src/parser/getTagName.min.mjs +0 -0
  875. package/dist/src/parser/getTagName.min.mjs.map +0 -0
  876. package/dist/src/parser/getTagName.mjs +0 -0
  877. package/dist/src/parser/getTagName.mjs.map +0 -0
  878. package/dist/src/parser/hasInvalidAncestor.d.ts +0 -0
  879. package/dist/src/parser/hasInvalidAncestor.d.ts.map +0 -0
  880. package/dist/src/parser/hasInvalidAncestor.min.mjs +0 -0
  881. package/dist/src/parser/hasInvalidAncestor.min.mjs.map +0 -0
  882. package/dist/src/parser/hasInvalidAncestor.mjs +0 -0
  883. package/dist/src/parser/hasInvalidAncestor.mjs.map +0 -0
  884. package/dist/src/parser/loadSVGFromString.d.ts +0 -0
  885. package/dist/src/parser/loadSVGFromString.d.ts.map +0 -0
  886. package/dist/src/parser/loadSVGFromString.min.mjs +0 -0
  887. package/dist/src/parser/loadSVGFromString.min.mjs.map +0 -0
  888. package/dist/src/parser/loadSVGFromString.mjs +0 -0
  889. package/dist/src/parser/loadSVGFromString.mjs.map +0 -0
  890. package/dist/src/parser/loadSVGFromURL.d.ts +0 -0
  891. package/dist/src/parser/loadSVGFromURL.d.ts.map +0 -0
  892. package/dist/src/parser/loadSVGFromURL.min.mjs +0 -0
  893. package/dist/src/parser/loadSVGFromURL.min.mjs.map +0 -0
  894. package/dist/src/parser/loadSVGFromURL.mjs +0 -0
  895. package/dist/src/parser/loadSVGFromURL.mjs.map +0 -0
  896. package/dist/src/parser/normalizeAttr.d.ts +0 -0
  897. package/dist/src/parser/normalizeAttr.d.ts.map +0 -0
  898. package/dist/src/parser/normalizeAttr.min.mjs +0 -0
  899. package/dist/src/parser/normalizeAttr.min.mjs.map +0 -0
  900. package/dist/src/parser/normalizeAttr.mjs +0 -0
  901. package/dist/src/parser/normalizeAttr.mjs.map +0 -0
  902. package/dist/src/parser/normalizeValue.d.ts +0 -0
  903. package/dist/src/parser/normalizeValue.d.ts.map +0 -0
  904. package/dist/src/parser/normalizeValue.min.mjs +0 -0
  905. package/dist/src/parser/normalizeValue.min.mjs.map +0 -0
  906. package/dist/src/parser/normalizeValue.mjs +0 -0
  907. package/dist/src/parser/normalizeValue.mjs.map +0 -0
  908. package/dist/src/parser/parseAttributes.d.ts +0 -0
  909. package/dist/src/parser/parseAttributes.d.ts.map +0 -0
  910. package/dist/src/parser/parseAttributes.min.mjs +0 -0
  911. package/dist/src/parser/parseAttributes.min.mjs.map +0 -0
  912. package/dist/src/parser/parseAttributes.mjs +0 -0
  913. package/dist/src/parser/parseAttributes.mjs.map +0 -0
  914. package/dist/src/parser/parseFontDeclaration.d.ts +0 -0
  915. package/dist/src/parser/parseFontDeclaration.d.ts.map +0 -0
  916. package/dist/src/parser/parseFontDeclaration.min.mjs +0 -0
  917. package/dist/src/parser/parseFontDeclaration.min.mjs.map +0 -0
  918. package/dist/src/parser/parseFontDeclaration.mjs +0 -0
  919. package/dist/src/parser/parseFontDeclaration.mjs.map +0 -0
  920. package/dist/src/parser/parsePointsAttribute.d.ts +0 -0
  921. package/dist/src/parser/parsePointsAttribute.d.ts.map +0 -0
  922. package/dist/src/parser/parsePointsAttribute.min.mjs +0 -0
  923. package/dist/src/parser/parsePointsAttribute.min.mjs.map +0 -0
  924. package/dist/src/parser/parsePointsAttribute.mjs +0 -0
  925. package/dist/src/parser/parsePointsAttribute.mjs.map +0 -0
  926. package/dist/src/parser/parseSVGDocument.d.ts +0 -0
  927. package/dist/src/parser/parseSVGDocument.d.ts.map +0 -0
  928. package/dist/src/parser/parseSVGDocument.min.mjs +0 -0
  929. package/dist/src/parser/parseSVGDocument.min.mjs.map +0 -0
  930. package/dist/src/parser/parseSVGDocument.mjs +0 -0
  931. package/dist/src/parser/parseSVGDocument.mjs.map +0 -0
  932. package/dist/src/parser/parseStyleAttribute.d.ts +0 -0
  933. package/dist/src/parser/parseStyleAttribute.d.ts.map +0 -0
  934. package/dist/src/parser/parseStyleAttribute.min.mjs +0 -0
  935. package/dist/src/parser/parseStyleAttribute.min.mjs.map +0 -0
  936. package/dist/src/parser/parseStyleAttribute.mjs +0 -0
  937. package/dist/src/parser/parseStyleAttribute.mjs.map +0 -0
  938. package/dist/src/parser/parseStyleObject.d.ts +0 -0
  939. package/dist/src/parser/parseStyleObject.d.ts.map +0 -0
  940. package/dist/src/parser/parseStyleObject.min.mjs +0 -0
  941. package/dist/src/parser/parseStyleObject.min.mjs.map +0 -0
  942. package/dist/src/parser/parseStyleObject.mjs +0 -0
  943. package/dist/src/parser/parseStyleObject.mjs.map +0 -0
  944. package/dist/src/parser/parseStyleString.d.ts +0 -0
  945. package/dist/src/parser/parseStyleString.d.ts.map +0 -0
  946. package/dist/src/parser/parseStyleString.min.mjs +0 -0
  947. package/dist/src/parser/parseStyleString.min.mjs.map +0 -0
  948. package/dist/src/parser/parseStyleString.mjs +0 -0
  949. package/dist/src/parser/parseStyleString.mjs.map +0 -0
  950. package/dist/src/parser/parseTransformAttribute.d.ts +0 -0
  951. package/dist/src/parser/parseTransformAttribute.d.ts.map +0 -0
  952. package/dist/src/parser/parseTransformAttribute.min.mjs +0 -0
  953. package/dist/src/parser/parseTransformAttribute.min.mjs.map +0 -0
  954. package/dist/src/parser/parseTransformAttribute.mjs +0 -0
  955. package/dist/src/parser/parseTransformAttribute.mjs.map +0 -0
  956. package/dist/src/parser/parseUseDirectives.d.ts +0 -0
  957. package/dist/src/parser/parseUseDirectives.d.ts.map +0 -0
  958. package/dist/src/parser/parseUseDirectives.min.mjs +0 -0
  959. package/dist/src/parser/parseUseDirectives.min.mjs.map +0 -0
  960. package/dist/src/parser/parseUseDirectives.mjs +0 -0
  961. package/dist/src/parser/parseUseDirectives.mjs.map +0 -0
  962. package/dist/src/parser/percent.d.ts +0 -0
  963. package/dist/src/parser/percent.d.ts.map +0 -0
  964. package/dist/src/parser/percent.min.mjs +0 -0
  965. package/dist/src/parser/percent.min.mjs.map +0 -0
  966. package/dist/src/parser/percent.mjs +0 -0
  967. package/dist/src/parser/percent.mjs.map +0 -0
  968. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +0 -0
  969. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts.map +0 -0
  970. package/dist/src/parser/recursivelyParseGradientsXlink.min.mjs +0 -0
  971. package/dist/src/parser/recursivelyParseGradientsXlink.min.mjs.map +0 -0
  972. package/dist/src/parser/recursivelyParseGradientsXlink.mjs +0 -0
  973. package/dist/src/parser/recursivelyParseGradientsXlink.mjs.map +0 -0
  974. package/dist/src/parser/selectorMatches.d.ts +0 -0
  975. package/dist/src/parser/selectorMatches.d.ts.map +0 -0
  976. package/dist/src/parser/selectorMatches.min.mjs +0 -0
  977. package/dist/src/parser/selectorMatches.min.mjs.map +0 -0
  978. package/dist/src/parser/selectorMatches.mjs +0 -0
  979. package/dist/src/parser/selectorMatches.mjs.map +0 -0
  980. package/dist/src/parser/setStrokeFillOpacity.d.ts +0 -0
  981. package/dist/src/parser/setStrokeFillOpacity.d.ts.map +0 -0
  982. package/dist/src/parser/setStrokeFillOpacity.min.mjs +0 -0
  983. package/dist/src/parser/setStrokeFillOpacity.min.mjs.map +0 -0
  984. package/dist/src/parser/setStrokeFillOpacity.mjs +0 -0
  985. package/dist/src/parser/setStrokeFillOpacity.mjs.map +0 -0
  986. package/dist/src/parser/typedefs.d.ts +0 -0
  987. package/dist/src/parser/typedefs.d.ts.map +0 -0
  988. package/dist/src/shapes/ActiveSelection.d.ts +0 -0
  989. package/dist/src/shapes/ActiveSelection.d.ts.map +0 -0
  990. package/dist/src/shapes/ActiveSelection.min.mjs +0 -0
  991. package/dist/src/shapes/ActiveSelection.min.mjs.map +0 -0
  992. package/dist/src/shapes/ActiveSelection.mjs +0 -0
  993. package/dist/src/shapes/ActiveSelection.mjs.map +0 -0
  994. package/dist/src/shapes/Circle.d.ts +0 -0
  995. package/dist/src/shapes/Circle.d.ts.map +0 -0
  996. package/dist/src/shapes/Circle.min.mjs +0 -0
  997. package/dist/src/shapes/Circle.min.mjs.map +0 -0
  998. package/dist/src/shapes/Circle.mjs +0 -0
  999. package/dist/src/shapes/Circle.mjs.map +0 -0
  1000. package/dist/src/shapes/Ellipse.d.ts +0 -0
  1001. package/dist/src/shapes/Ellipse.d.ts.map +0 -0
  1002. package/dist/src/shapes/Ellipse.min.mjs +0 -0
  1003. package/dist/src/shapes/Ellipse.min.mjs.map +0 -0
  1004. package/dist/src/shapes/Ellipse.mjs +0 -0
  1005. package/dist/src/shapes/Ellipse.mjs.map +0 -0
  1006. package/dist/src/shapes/Group.d.ts +0 -0
  1007. package/dist/src/shapes/Group.d.ts.map +0 -0
  1008. package/dist/src/shapes/Group.min.mjs +0 -0
  1009. package/dist/src/shapes/Group.min.mjs.map +0 -0
  1010. package/dist/src/shapes/Group.mjs +0 -0
  1011. package/dist/src/shapes/Group.mjs.map +0 -0
  1012. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +0 -0
  1013. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts.map +0 -0
  1014. package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs +0 -0
  1015. package/dist/src/shapes/IText/DraggableTextDelegate.min.mjs.map +0 -0
  1016. package/dist/src/shapes/IText/DraggableTextDelegate.mjs +0 -0
  1017. package/dist/src/shapes/IText/DraggableTextDelegate.mjs.map +0 -0
  1018. package/dist/src/shapes/IText/IText.d.ts +0 -0
  1019. package/dist/src/shapes/IText/IText.d.ts.map +0 -0
  1020. package/dist/src/shapes/IText/IText.min.mjs +0 -0
  1021. package/dist/src/shapes/IText/IText.min.mjs.map +1 -1
  1022. package/dist/src/shapes/IText/IText.mjs +206 -206
  1023. package/dist/src/shapes/IText/IText.mjs.map +1 -1
  1024. package/dist/src/shapes/IText/ITextBehavior.d.ts +0 -0
  1025. package/dist/src/shapes/IText/ITextBehavior.d.ts.map +1 -1
  1026. package/dist/src/shapes/IText/ITextBehavior.min.mjs +1 -1
  1027. package/dist/src/shapes/IText/ITextBehavior.min.mjs.map +1 -1
  1028. package/dist/src/shapes/IText/ITextBehavior.mjs +162 -152
  1029. package/dist/src/shapes/IText/ITextBehavior.mjs.map +1 -1
  1030. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +0 -0
  1031. package/dist/src/shapes/IText/ITextClickBehavior.d.ts.map +0 -0
  1032. package/dist/src/shapes/IText/ITextClickBehavior.min.mjs +0 -0
  1033. package/dist/src/shapes/IText/ITextClickBehavior.min.mjs.map +1 -1
  1034. package/dist/src/shapes/IText/ITextClickBehavior.mjs +36 -36
  1035. package/dist/src/shapes/IText/ITextClickBehavior.mjs.map +1 -1
  1036. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +0 -0
  1037. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts.map +1 -1
  1038. package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs +1 -1
  1039. package/dist/src/shapes/IText/ITextKeyBehavior.min.mjs.map +1 -1
  1040. package/dist/src/shapes/IText/ITextKeyBehavior.mjs +47 -1
  1041. package/dist/src/shapes/IText/ITextKeyBehavior.mjs.map +1 -1
  1042. package/dist/src/shapes/IText/constants.d.ts +0 -0
  1043. package/dist/src/shapes/IText/constants.d.ts.map +0 -0
  1044. package/dist/src/shapes/IText/constants.min.mjs +0 -0
  1045. package/dist/src/shapes/IText/constants.min.mjs.map +0 -0
  1046. package/dist/src/shapes/IText/constants.mjs +0 -0
  1047. package/dist/src/shapes/IText/constants.mjs.map +0 -0
  1048. package/dist/src/shapes/Image.d.ts +0 -0
  1049. package/dist/src/shapes/Image.d.ts.map +0 -0
  1050. package/dist/src/shapes/Image.min.mjs +0 -0
  1051. package/dist/src/shapes/Image.min.mjs.map +0 -0
  1052. package/dist/src/shapes/Image.mjs +0 -0
  1053. package/dist/src/shapes/Image.mjs.map +0 -0
  1054. package/dist/src/shapes/Line.d.ts +0 -0
  1055. package/dist/src/shapes/Line.d.ts.map +0 -0
  1056. package/dist/src/shapes/Line.min.mjs +0 -0
  1057. package/dist/src/shapes/Line.min.mjs.map +0 -0
  1058. package/dist/src/shapes/Line.mjs +0 -0
  1059. package/dist/src/shapes/Line.mjs.map +0 -0
  1060. package/dist/src/shapes/Object/FabricObject.d.ts +0 -0
  1061. package/dist/src/shapes/Object/FabricObject.d.ts.map +0 -0
  1062. package/dist/src/shapes/Object/FabricObject.min.mjs +0 -0
  1063. package/dist/src/shapes/Object/FabricObject.min.mjs.map +0 -0
  1064. package/dist/src/shapes/Object/FabricObject.mjs +0 -0
  1065. package/dist/src/shapes/Object/FabricObject.mjs.map +0 -0
  1066. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +0 -0
  1067. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +0 -0
  1068. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs +0 -0
  1069. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.min.mjs.map +0 -0
  1070. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs +0 -0
  1071. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.mjs.map +0 -0
  1072. package/dist/src/shapes/Object/InteractiveObject.d.ts +0 -0
  1073. package/dist/src/shapes/Object/InteractiveObject.d.ts.map +0 -0
  1074. package/dist/src/shapes/Object/InteractiveObject.min.mjs +0 -0
  1075. package/dist/src/shapes/Object/InteractiveObject.min.mjs.map +0 -0
  1076. package/dist/src/shapes/Object/InteractiveObject.mjs +0 -0
  1077. package/dist/src/shapes/Object/InteractiveObject.mjs.map +0 -0
  1078. package/dist/src/shapes/Object/Object.d.ts +0 -0
  1079. package/dist/src/shapes/Object/Object.d.ts.map +0 -0
  1080. package/dist/src/shapes/Object/Object.min.mjs +0 -0
  1081. package/dist/src/shapes/Object/Object.min.mjs.map +0 -0
  1082. package/dist/src/shapes/Object/Object.mjs +0 -0
  1083. package/dist/src/shapes/Object/Object.mjs.map +0 -0
  1084. package/dist/src/shapes/Object/ObjectGeometry.d.ts +0 -0
  1085. package/dist/src/shapes/Object/ObjectGeometry.d.ts.map +0 -0
  1086. package/dist/src/shapes/Object/ObjectGeometry.min.mjs +0 -0
  1087. package/dist/src/shapes/Object/ObjectGeometry.min.mjs.map +0 -0
  1088. package/dist/src/shapes/Object/ObjectGeometry.mjs +0 -0
  1089. package/dist/src/shapes/Object/ObjectGeometry.mjs.map +0 -0
  1090. package/dist/src/shapes/Object/defaultValues.d.ts +0 -0
  1091. package/dist/src/shapes/Object/defaultValues.d.ts.map +0 -0
  1092. package/dist/src/shapes/Object/defaultValues.min.mjs +0 -0
  1093. package/dist/src/shapes/Object/defaultValues.min.mjs.map +0 -0
  1094. package/dist/src/shapes/Object/defaultValues.mjs +0 -0
  1095. package/dist/src/shapes/Object/defaultValues.mjs.map +0 -0
  1096. package/dist/src/shapes/Object/types/BaseProps.d.ts +0 -0
  1097. package/dist/src/shapes/Object/types/BaseProps.d.ts.map +0 -0
  1098. package/dist/src/shapes/Object/types/BorderProps.d.ts +0 -0
  1099. package/dist/src/shapes/Object/types/BorderProps.d.ts.map +0 -0
  1100. package/dist/src/shapes/Object/types/ControlProps.d.ts +0 -0
  1101. package/dist/src/shapes/Object/types/ControlProps.d.ts.map +0 -0
  1102. package/dist/src/shapes/Object/types/FabricObjectProps.d.ts +0 -0
  1103. package/dist/src/shapes/Object/types/FabricObjectProps.d.ts.map +0 -0
  1104. package/dist/src/shapes/Object/types/FillStrokeProps.d.ts +0 -0
  1105. package/dist/src/shapes/Object/types/FillStrokeProps.d.ts.map +0 -0
  1106. package/dist/src/shapes/Object/types/LockInteractionProps.d.ts +0 -0
  1107. package/dist/src/shapes/Object/types/LockInteractionProps.d.ts.map +0 -0
  1108. package/dist/src/shapes/Object/types/ObjectProps.d.ts +0 -0
  1109. package/dist/src/shapes/Object/types/ObjectProps.d.ts.map +0 -0
  1110. package/dist/src/shapes/Object/types/ObjectTransformProps.d.ts +0 -0
  1111. package/dist/src/shapes/Object/types/ObjectTransformProps.d.ts.map +0 -0
  1112. package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts +0 -0
  1113. package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts.map +0 -0
  1114. package/dist/src/shapes/Object/types/index.d.ts +0 -0
  1115. package/dist/src/shapes/Object/types/index.d.ts.map +0 -0
  1116. package/dist/src/shapes/Path.d.ts +0 -0
  1117. package/dist/src/shapes/Path.d.ts.map +0 -0
  1118. package/dist/src/shapes/Path.min.mjs +0 -0
  1119. package/dist/src/shapes/Path.min.mjs.map +0 -0
  1120. package/dist/src/shapes/Path.mjs +0 -0
  1121. package/dist/src/shapes/Path.mjs.map +0 -0
  1122. package/dist/src/shapes/Polygon.d.ts +0 -0
  1123. package/dist/src/shapes/Polygon.d.ts.map +0 -0
  1124. package/dist/src/shapes/Polygon.min.mjs +0 -0
  1125. package/dist/src/shapes/Polygon.min.mjs.map +0 -0
  1126. package/dist/src/shapes/Polygon.mjs +0 -0
  1127. package/dist/src/shapes/Polygon.mjs.map +0 -0
  1128. package/dist/src/shapes/Polyline.d.ts +0 -0
  1129. package/dist/src/shapes/Polyline.d.ts.map +0 -0
  1130. package/dist/src/shapes/Polyline.min.mjs +0 -0
  1131. package/dist/src/shapes/Polyline.min.mjs.map +0 -0
  1132. package/dist/src/shapes/Polyline.mjs +0 -0
  1133. package/dist/src/shapes/Polyline.mjs.map +0 -0
  1134. package/dist/src/shapes/Rect.d.ts +0 -0
  1135. package/dist/src/shapes/Rect.d.ts.map +0 -0
  1136. package/dist/src/shapes/Rect.min.mjs +0 -0
  1137. package/dist/src/shapes/Rect.min.mjs.map +0 -0
  1138. package/dist/src/shapes/Rect.mjs +0 -0
  1139. package/dist/src/shapes/Rect.mjs.map +0 -0
  1140. package/dist/src/shapes/Text/StyledText.d.ts +0 -0
  1141. package/dist/src/shapes/Text/StyledText.d.ts.map +0 -0
  1142. package/dist/src/shapes/Text/StyledText.min.mjs +0 -0
  1143. package/dist/src/shapes/Text/StyledText.min.mjs.map +0 -0
  1144. package/dist/src/shapes/Text/StyledText.mjs +0 -0
  1145. package/dist/src/shapes/Text/StyledText.mjs.map +0 -0
  1146. package/dist/src/shapes/Text/Text.d.ts +0 -0
  1147. package/dist/src/shapes/Text/Text.d.ts.map +0 -0
  1148. package/dist/src/shapes/Text/Text.min.mjs +0 -0
  1149. package/dist/src/shapes/Text/Text.min.mjs.map +1 -1
  1150. package/dist/src/shapes/Text/Text.mjs +294 -294
  1151. package/dist/src/shapes/Text/Text.mjs.map +1 -1
  1152. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +0 -0
  1153. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts.map +0 -0
  1154. package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs +0 -0
  1155. package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs.map +0 -0
  1156. package/dist/src/shapes/Text/TextSVGExportMixin.mjs +0 -0
  1157. package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +0 -0
  1158. package/dist/src/shapes/Text/constants.d.ts +0 -0
  1159. package/dist/src/shapes/Text/constants.d.ts.map +0 -0
  1160. package/dist/src/shapes/Text/constants.min.mjs +0 -0
  1161. package/dist/src/shapes/Text/constants.min.mjs.map +1 -1
  1162. package/dist/src/shapes/Text/constants.mjs +0 -0
  1163. package/dist/src/shapes/Text/constants.mjs.map +1 -1
  1164. package/dist/src/shapes/Textbox.d.ts +0 -0
  1165. package/dist/src/shapes/Textbox.d.ts.map +0 -0
  1166. package/dist/src/shapes/Textbox.min.mjs +0 -0
  1167. package/dist/src/shapes/Textbox.min.mjs.map +1 -1
  1168. package/dist/src/shapes/Textbox.mjs +168 -168
  1169. package/dist/src/shapes/Textbox.mjs.map +1 -1
  1170. package/dist/src/shapes/Triangle.d.ts +0 -0
  1171. package/dist/src/shapes/Triangle.d.ts.map +0 -0
  1172. package/dist/src/shapes/Triangle.min.mjs +0 -0
  1173. package/dist/src/shapes/Triangle.min.mjs.map +0 -0
  1174. package/dist/src/shapes/Triangle.mjs +0 -0
  1175. package/dist/src/shapes/Triangle.mjs.map +0 -0
  1176. package/dist/src/text/browserLines.d.ts +0 -0
  1177. package/dist/src/text/browserLines.d.ts.map +0 -0
  1178. package/dist/src/text/browserLines.min.mjs +0 -0
  1179. package/dist/src/text/browserLines.min.mjs.map +1 -1
  1180. package/dist/src/text/browserLines.mjs +20 -20
  1181. package/dist/src/text/browserLines.mjs.map +1 -1
  1182. package/dist/src/text/ellipsis.d.ts +0 -0
  1183. package/dist/src/text/ellipsis.d.ts.map +0 -0
  1184. package/dist/src/text/ellipsis.min.mjs +0 -0
  1185. package/dist/src/text/ellipsis.min.mjs.map +1 -1
  1186. package/dist/src/text/ellipsis.mjs +11 -11
  1187. package/dist/src/text/ellipsis.mjs.map +1 -1
  1188. package/dist/src/text/hitTest.d.ts +0 -0
  1189. package/dist/src/text/hitTest.d.ts.map +0 -0
  1190. package/dist/src/text/hitTest.min.mjs +0 -0
  1191. package/dist/src/text/hitTest.min.mjs.map +1 -1
  1192. package/dist/src/text/hitTest.mjs +19 -19
  1193. package/dist/src/text/hitTest.mjs.map +1 -1
  1194. package/dist/src/text/layout.d.ts +0 -0
  1195. package/dist/src/text/layout.d.ts.map +0 -0
  1196. package/dist/src/text/layout.min.mjs +0 -0
  1197. package/dist/src/text/layout.min.mjs.map +1 -1
  1198. package/dist/src/text/layout.mjs +33 -33
  1199. package/dist/src/text/layout.mjs.map +1 -1
  1200. package/dist/src/text/measure.d.ts +0 -0
  1201. package/dist/src/text/measure.d.ts.map +0 -0
  1202. package/dist/src/text/measure.min.mjs +0 -0
  1203. package/dist/src/text/measure.min.mjs.map +1 -1
  1204. package/dist/src/text/measure.mjs +30 -30
  1205. package/dist/src/text/measure.mjs.map +1 -1
  1206. package/dist/src/text/overlayEditor.d.ts +0 -0
  1207. package/dist/src/text/overlayEditor.d.ts.map +0 -0
  1208. package/dist/src/text/overlayEditor.min.mjs +0 -0
  1209. package/dist/src/text/overlayEditor.min.mjs.map +1 -1
  1210. package/dist/src/text/overlayEditor.mjs +33 -33
  1211. package/dist/src/text/overlayEditor.mjs.map +1 -1
  1212. package/dist/src/text/unicode.d.ts +0 -0
  1213. package/dist/src/text/unicode.d.ts.map +0 -0
  1214. package/dist/src/text/unicode.min.mjs +0 -0
  1215. package/dist/src/text/unicode.min.mjs.map +1 -1
  1216. package/dist/src/text/unicode.mjs +8 -8
  1217. package/dist/src/text/unicode.mjs.map +1 -1
  1218. package/dist/src/typedefs.d.ts +0 -0
  1219. package/dist/src/typedefs.d.ts.map +0 -0
  1220. package/dist/src/util/animation/AnimationBase.d.ts +0 -0
  1221. package/dist/src/util/animation/AnimationBase.d.ts.map +0 -0
  1222. package/dist/src/util/animation/AnimationBase.min.mjs +0 -0
  1223. package/dist/src/util/animation/AnimationBase.min.mjs.map +0 -0
  1224. package/dist/src/util/animation/AnimationBase.mjs +0 -0
  1225. package/dist/src/util/animation/AnimationBase.mjs.map +0 -0
  1226. package/dist/src/util/animation/AnimationFrameProvider.d.ts +0 -0
  1227. package/dist/src/util/animation/AnimationFrameProvider.d.ts.map +0 -0
  1228. package/dist/src/util/animation/AnimationFrameProvider.min.mjs +0 -0
  1229. package/dist/src/util/animation/AnimationFrameProvider.min.mjs.map +0 -0
  1230. package/dist/src/util/animation/AnimationFrameProvider.mjs +0 -0
  1231. package/dist/src/util/animation/AnimationFrameProvider.mjs.map +0 -0
  1232. package/dist/src/util/animation/AnimationRegistry.d.ts +0 -0
  1233. package/dist/src/util/animation/AnimationRegistry.d.ts.map +0 -0
  1234. package/dist/src/util/animation/AnimationRegistry.min.mjs +0 -0
  1235. package/dist/src/util/animation/AnimationRegistry.min.mjs.map +0 -0
  1236. package/dist/src/util/animation/AnimationRegistry.mjs +0 -0
  1237. package/dist/src/util/animation/AnimationRegistry.mjs.map +0 -0
  1238. package/dist/src/util/animation/ArrayAnimation.d.ts +0 -0
  1239. package/dist/src/util/animation/ArrayAnimation.d.ts.map +0 -0
  1240. package/dist/src/util/animation/ArrayAnimation.min.mjs +0 -0
  1241. package/dist/src/util/animation/ArrayAnimation.min.mjs.map +0 -0
  1242. package/dist/src/util/animation/ArrayAnimation.mjs +0 -0
  1243. package/dist/src/util/animation/ArrayAnimation.mjs.map +0 -0
  1244. package/dist/src/util/animation/ColorAnimation.d.ts +0 -0
  1245. package/dist/src/util/animation/ColorAnimation.d.ts.map +0 -0
  1246. package/dist/src/util/animation/ColorAnimation.min.mjs +0 -0
  1247. package/dist/src/util/animation/ColorAnimation.min.mjs.map +0 -0
  1248. package/dist/src/util/animation/ColorAnimation.mjs +0 -0
  1249. package/dist/src/util/animation/ColorAnimation.mjs.map +0 -0
  1250. package/dist/src/util/animation/ValueAnimation.d.ts +0 -0
  1251. package/dist/src/util/animation/ValueAnimation.d.ts.map +0 -0
  1252. package/dist/src/util/animation/ValueAnimation.min.mjs +0 -0
  1253. package/dist/src/util/animation/ValueAnimation.min.mjs.map +0 -0
  1254. package/dist/src/util/animation/ValueAnimation.mjs +0 -0
  1255. package/dist/src/util/animation/ValueAnimation.mjs.map +0 -0
  1256. package/dist/src/util/animation/animate.d.ts +0 -0
  1257. package/dist/src/util/animation/animate.d.ts.map +0 -0
  1258. package/dist/src/util/animation/animate.min.mjs +0 -0
  1259. package/dist/src/util/animation/animate.min.mjs.map +0 -0
  1260. package/dist/src/util/animation/animate.mjs +0 -0
  1261. package/dist/src/util/animation/animate.mjs.map +0 -0
  1262. package/dist/src/util/animation/easing.d.ts +0 -0
  1263. package/dist/src/util/animation/easing.d.ts.map +0 -0
  1264. package/dist/src/util/animation/easing.min.mjs +0 -0
  1265. package/dist/src/util/animation/easing.min.mjs.map +0 -0
  1266. package/dist/src/util/animation/easing.mjs +0 -0
  1267. package/dist/src/util/animation/easing.mjs.map +0 -0
  1268. package/dist/src/util/animation/index.d.ts +0 -0
  1269. package/dist/src/util/animation/index.d.ts.map +0 -0
  1270. package/dist/src/util/animation/types.d.ts +0 -0
  1271. package/dist/src/util/animation/types.d.ts.map +0 -0
  1272. package/dist/src/util/applyMixins.d.ts +0 -0
  1273. package/dist/src/util/applyMixins.d.ts.map +0 -0
  1274. package/dist/src/util/applyMixins.min.mjs +0 -0
  1275. package/dist/src/util/applyMixins.min.mjs.map +0 -0
  1276. package/dist/src/util/applyMixins.mjs +0 -0
  1277. package/dist/src/util/applyMixins.mjs.map +0 -0
  1278. package/dist/src/util/dom_event.d.ts +0 -0
  1279. package/dist/src/util/dom_event.d.ts.map +0 -0
  1280. package/dist/src/util/dom_event.min.mjs +0 -0
  1281. package/dist/src/util/dom_event.min.mjs.map +0 -0
  1282. package/dist/src/util/dom_event.mjs +0 -0
  1283. package/dist/src/util/dom_event.mjs.map +0 -0
  1284. package/dist/src/util/dom_misc.d.ts +0 -0
  1285. package/dist/src/util/dom_misc.d.ts.map +0 -0
  1286. package/dist/src/util/dom_misc.min.mjs +0 -0
  1287. package/dist/src/util/dom_misc.min.mjs.map +0 -0
  1288. package/dist/src/util/dom_misc.mjs +0 -0
  1289. package/dist/src/util/dom_misc.mjs.map +0 -0
  1290. package/dist/src/util/index.d.ts +0 -0
  1291. package/dist/src/util/index.d.ts.map +0 -0
  1292. package/dist/src/util/index.min.mjs +0 -0
  1293. package/dist/src/util/index.min.mjs.map +0 -0
  1294. package/dist/src/util/index.mjs +0 -0
  1295. package/dist/src/util/index.mjs.map +0 -0
  1296. package/dist/src/util/internals/applyCanvasTransform.d.ts +0 -0
  1297. package/dist/src/util/internals/applyCanvasTransform.d.ts.map +0 -0
  1298. package/dist/src/util/internals/applyCanvasTransform.min.mjs +0 -0
  1299. package/dist/src/util/internals/applyCanvasTransform.min.mjs.map +0 -0
  1300. package/dist/src/util/internals/applyCanvasTransform.mjs +0 -0
  1301. package/dist/src/util/internals/applyCanvasTransform.mjs.map +0 -0
  1302. package/dist/src/util/internals/cleanupSvgAttribute.d.ts +0 -0
  1303. package/dist/src/util/internals/cleanupSvgAttribute.d.ts.map +0 -0
  1304. package/dist/src/util/internals/cleanupSvgAttribute.min.mjs +0 -0
  1305. package/dist/src/util/internals/cleanupSvgAttribute.min.mjs.map +0 -0
  1306. package/dist/src/util/internals/cleanupSvgAttribute.mjs +0 -0
  1307. package/dist/src/util/internals/cleanupSvgAttribute.mjs.map +0 -0
  1308. package/dist/src/util/internals/cloneStyles.d.ts +0 -0
  1309. package/dist/src/util/internals/cloneStyles.d.ts.map +0 -0
  1310. package/dist/src/util/internals/cloneStyles.min.mjs +0 -0
  1311. package/dist/src/util/internals/cloneStyles.min.mjs.map +0 -0
  1312. package/dist/src/util/internals/cloneStyles.mjs +0 -0
  1313. package/dist/src/util/internals/cloneStyles.mjs.map +0 -0
  1314. package/dist/src/util/internals/console.d.ts +0 -0
  1315. package/dist/src/util/internals/console.d.ts.map +0 -0
  1316. package/dist/src/util/internals/console.min.mjs +0 -0
  1317. package/dist/src/util/internals/console.min.mjs.map +0 -0
  1318. package/dist/src/util/internals/console.mjs +0 -0
  1319. package/dist/src/util/internals/console.mjs.map +0 -0
  1320. package/dist/src/util/internals/dom_style.d.ts +0 -0
  1321. package/dist/src/util/internals/dom_style.d.ts.map +0 -0
  1322. package/dist/src/util/internals/dom_style.min.mjs +0 -0
  1323. package/dist/src/util/internals/dom_style.min.mjs.map +0 -0
  1324. package/dist/src/util/internals/dom_style.mjs +0 -0
  1325. package/dist/src/util/internals/dom_style.mjs.map +0 -0
  1326. package/dist/src/util/internals/findRight.d.ts +0 -0
  1327. package/dist/src/util/internals/findRight.d.ts.map +0 -0
  1328. package/dist/src/util/internals/findRight.min.mjs +0 -0
  1329. package/dist/src/util/internals/findRight.min.mjs.map +0 -0
  1330. package/dist/src/util/internals/findRight.mjs +0 -0
  1331. package/dist/src/util/internals/findRight.mjs.map +0 -0
  1332. package/dist/src/util/internals/getRandomInt.d.ts +0 -0
  1333. package/dist/src/util/internals/getRandomInt.d.ts.map +0 -0
  1334. package/dist/src/util/internals/getRandomInt.min.mjs +0 -0
  1335. package/dist/src/util/internals/getRandomInt.min.mjs.map +0 -0
  1336. package/dist/src/util/internals/getRandomInt.mjs +0 -0
  1337. package/dist/src/util/internals/getRandomInt.mjs.map +0 -0
  1338. package/dist/src/util/internals/ifNaN.d.ts +0 -0
  1339. package/dist/src/util/internals/ifNaN.d.ts.map +0 -0
  1340. package/dist/src/util/internals/ifNaN.min.mjs +0 -0
  1341. package/dist/src/util/internals/ifNaN.min.mjs.map +0 -0
  1342. package/dist/src/util/internals/ifNaN.mjs +0 -0
  1343. package/dist/src/util/internals/ifNaN.mjs.map +0 -0
  1344. package/dist/src/util/internals/removeFromArray.d.ts +0 -0
  1345. package/dist/src/util/internals/removeFromArray.d.ts.map +0 -0
  1346. package/dist/src/util/internals/removeFromArray.min.mjs +0 -0
  1347. package/dist/src/util/internals/removeFromArray.min.mjs.map +0 -0
  1348. package/dist/src/util/internals/removeFromArray.mjs +0 -0
  1349. package/dist/src/util/internals/removeFromArray.mjs.map +0 -0
  1350. package/dist/src/util/internals/uid.d.ts +0 -0
  1351. package/dist/src/util/internals/uid.d.ts.map +0 -0
  1352. package/dist/src/util/internals/uid.min.mjs +0 -0
  1353. package/dist/src/util/internals/uid.min.mjs.map +0 -0
  1354. package/dist/src/util/internals/uid.mjs +0 -0
  1355. package/dist/src/util/internals/uid.mjs.map +0 -0
  1356. package/dist/src/util/lang_string.d.ts +0 -0
  1357. package/dist/src/util/lang_string.d.ts.map +0 -0
  1358. package/dist/src/util/lang_string.min.mjs +0 -0
  1359. package/dist/src/util/lang_string.min.mjs.map +0 -0
  1360. package/dist/src/util/lang_string.mjs +0 -0
  1361. package/dist/src/util/lang_string.mjs.map +0 -0
  1362. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +0 -0
  1363. package/dist/src/util/misc/boundingBoxFromPoints.d.ts.map +0 -0
  1364. package/dist/src/util/misc/boundingBoxFromPoints.min.mjs +0 -0
  1365. package/dist/src/util/misc/boundingBoxFromPoints.min.mjs.map +0 -0
  1366. package/dist/src/util/misc/boundingBoxFromPoints.mjs +0 -0
  1367. package/dist/src/util/misc/boundingBoxFromPoints.mjs.map +0 -0
  1368. package/dist/src/util/misc/capValue.d.ts +0 -0
  1369. package/dist/src/util/misc/capValue.d.ts.map +0 -0
  1370. package/dist/src/util/misc/capValue.min.mjs +0 -0
  1371. package/dist/src/util/misc/capValue.min.mjs.map +0 -0
  1372. package/dist/src/util/misc/capValue.mjs +0 -0
  1373. package/dist/src/util/misc/capValue.mjs.map +0 -0
  1374. package/dist/src/util/misc/cornerRadius.d.ts +0 -0
  1375. package/dist/src/util/misc/cornerRadius.d.ts.map +0 -0
  1376. package/dist/src/util/misc/cornerRadius.min.mjs +0 -0
  1377. package/dist/src/util/misc/cornerRadius.min.mjs.map +0 -0
  1378. package/dist/src/util/misc/cornerRadius.mjs +0 -0
  1379. package/dist/src/util/misc/cornerRadius.mjs.map +0 -0
  1380. package/dist/src/util/misc/cos.d.ts +0 -0
  1381. package/dist/src/util/misc/cos.d.ts.map +0 -0
  1382. package/dist/src/util/misc/cos.min.mjs +0 -0
  1383. package/dist/src/util/misc/cos.min.mjs.map +0 -0
  1384. package/dist/src/util/misc/cos.mjs +0 -0
  1385. package/dist/src/util/misc/cos.mjs.map +0 -0
  1386. package/dist/src/util/misc/dom.d.ts +0 -0
  1387. package/dist/src/util/misc/dom.d.ts.map +0 -0
  1388. package/dist/src/util/misc/dom.min.mjs +0 -0
  1389. package/dist/src/util/misc/dom.min.mjs.map +0 -0
  1390. package/dist/src/util/misc/dom.mjs +0 -0
  1391. package/dist/src/util/misc/dom.mjs.map +0 -0
  1392. package/dist/src/util/misc/findScaleTo.d.ts +0 -0
  1393. package/dist/src/util/misc/findScaleTo.d.ts.map +0 -0
  1394. package/dist/src/util/misc/findScaleTo.min.mjs +0 -0
  1395. package/dist/src/util/misc/findScaleTo.min.mjs.map +0 -0
  1396. package/dist/src/util/misc/findScaleTo.mjs +0 -0
  1397. package/dist/src/util/misc/findScaleTo.mjs.map +0 -0
  1398. package/dist/src/util/misc/groupSVGElements.d.ts +0 -0
  1399. package/dist/src/util/misc/groupSVGElements.d.ts.map +0 -0
  1400. package/dist/src/util/misc/groupSVGElements.min.mjs +0 -0
  1401. package/dist/src/util/misc/groupSVGElements.min.mjs.map +0 -0
  1402. package/dist/src/util/misc/groupSVGElements.mjs +0 -0
  1403. package/dist/src/util/misc/groupSVGElements.mjs.map +0 -0
  1404. package/dist/src/util/misc/isTransparent.d.ts +0 -0
  1405. package/dist/src/util/misc/isTransparent.d.ts.map +0 -0
  1406. package/dist/src/util/misc/isTransparent.min.mjs +0 -0
  1407. package/dist/src/util/misc/isTransparent.min.mjs.map +0 -0
  1408. package/dist/src/util/misc/isTransparent.mjs +0 -0
  1409. package/dist/src/util/misc/isTransparent.mjs.map +0 -0
  1410. package/dist/src/util/misc/matrix.d.ts +0 -0
  1411. package/dist/src/util/misc/matrix.d.ts.map +0 -0
  1412. package/dist/src/util/misc/matrix.min.mjs +0 -0
  1413. package/dist/src/util/misc/matrix.min.mjs.map +0 -0
  1414. package/dist/src/util/misc/matrix.mjs +0 -0
  1415. package/dist/src/util/misc/matrix.mjs.map +0 -0
  1416. package/dist/src/util/misc/mergeClipPaths.d.ts +0 -0
  1417. package/dist/src/util/misc/mergeClipPaths.d.ts.map +0 -0
  1418. package/dist/src/util/misc/mergeClipPaths.min.mjs +0 -0
  1419. package/dist/src/util/misc/mergeClipPaths.min.mjs.map +0 -0
  1420. package/dist/src/util/misc/mergeClipPaths.mjs +0 -0
  1421. package/dist/src/util/misc/mergeClipPaths.mjs.map +0 -0
  1422. package/dist/src/util/misc/objectEnlive.d.ts +0 -0
  1423. package/dist/src/util/misc/objectEnlive.d.ts.map +0 -0
  1424. package/dist/src/util/misc/objectEnlive.min.mjs +0 -0
  1425. package/dist/src/util/misc/objectEnlive.min.mjs.map +0 -0
  1426. package/dist/src/util/misc/objectEnlive.mjs +0 -0
  1427. package/dist/src/util/misc/objectEnlive.mjs.map +0 -0
  1428. package/dist/src/util/misc/objectTransforms.d.ts +0 -0
  1429. package/dist/src/util/misc/objectTransforms.d.ts.map +0 -0
  1430. package/dist/src/util/misc/objectTransforms.min.mjs +0 -0
  1431. package/dist/src/util/misc/objectTransforms.min.mjs.map +0 -0
  1432. package/dist/src/util/misc/objectTransforms.mjs +0 -0
  1433. package/dist/src/util/misc/objectTransforms.mjs.map +0 -0
  1434. package/dist/src/util/misc/pick.d.ts +0 -0
  1435. package/dist/src/util/misc/pick.d.ts.map +0 -0
  1436. package/dist/src/util/misc/pick.min.mjs +0 -0
  1437. package/dist/src/util/misc/pick.min.mjs.map +0 -0
  1438. package/dist/src/util/misc/pick.mjs +0 -0
  1439. package/dist/src/util/misc/pick.mjs.map +0 -0
  1440. package/dist/src/util/misc/planeChange.d.ts +0 -0
  1441. package/dist/src/util/misc/planeChange.d.ts.map +0 -0
  1442. package/dist/src/util/misc/planeChange.min.mjs +0 -0
  1443. package/dist/src/util/misc/planeChange.min.mjs.map +0 -0
  1444. package/dist/src/util/misc/planeChange.mjs +0 -0
  1445. package/dist/src/util/misc/planeChange.mjs.map +0 -0
  1446. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +0 -0
  1447. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts.map +0 -0
  1448. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.min.mjs +0 -0
  1449. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.min.mjs.map +0 -0
  1450. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.mjs +0 -0
  1451. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.mjs.map +0 -0
  1452. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +0 -0
  1453. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts.map +0 -0
  1454. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.min.mjs +0 -0
  1455. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.min.mjs.map +0 -0
  1456. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.mjs +0 -0
  1457. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.mjs.map +0 -0
  1458. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +0 -0
  1459. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts.map +0 -0
  1460. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.min.mjs +0 -0
  1461. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.min.mjs.map +0 -0
  1462. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.mjs +0 -0
  1463. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.mjs.map +0 -0
  1464. package/dist/src/util/misc/projectStroke/index.d.ts +0 -0
  1465. package/dist/src/util/misc/projectStroke/index.d.ts.map +0 -0
  1466. package/dist/src/util/misc/projectStroke/index.min.mjs +0 -0
  1467. package/dist/src/util/misc/projectStroke/index.min.mjs.map +0 -0
  1468. package/dist/src/util/misc/projectStroke/index.mjs +0 -0
  1469. package/dist/src/util/misc/projectStroke/index.mjs.map +0 -0
  1470. package/dist/src/util/misc/projectStroke/types.d.ts +0 -0
  1471. package/dist/src/util/misc/projectStroke/types.d.ts.map +0 -0
  1472. package/dist/src/util/misc/radiansDegreesConversion.d.ts +0 -0
  1473. package/dist/src/util/misc/radiansDegreesConversion.d.ts.map +0 -0
  1474. package/dist/src/util/misc/radiansDegreesConversion.min.mjs +0 -0
  1475. package/dist/src/util/misc/radiansDegreesConversion.min.mjs.map +0 -0
  1476. package/dist/src/util/misc/radiansDegreesConversion.mjs +0 -0
  1477. package/dist/src/util/misc/radiansDegreesConversion.mjs.map +0 -0
  1478. package/dist/src/util/misc/resolveOrigin.d.ts +0 -0
  1479. package/dist/src/util/misc/resolveOrigin.d.ts.map +0 -0
  1480. package/dist/src/util/misc/resolveOrigin.min.mjs +0 -0
  1481. package/dist/src/util/misc/resolveOrigin.min.mjs.map +0 -0
  1482. package/dist/src/util/misc/resolveOrigin.mjs +0 -0
  1483. package/dist/src/util/misc/resolveOrigin.mjs.map +0 -0
  1484. package/dist/src/util/misc/sin.d.ts +0 -0
  1485. package/dist/src/util/misc/sin.d.ts.map +0 -0
  1486. package/dist/src/util/misc/sin.min.mjs +0 -0
  1487. package/dist/src/util/misc/sin.min.mjs.map +0 -0
  1488. package/dist/src/util/misc/sin.mjs +0 -0
  1489. package/dist/src/util/misc/sin.mjs.map +0 -0
  1490. package/dist/src/util/misc/svgExport.d.ts +0 -0
  1491. package/dist/src/util/misc/svgExport.d.ts.map +0 -0
  1492. package/dist/src/util/misc/svgExport.min.mjs +0 -0
  1493. package/dist/src/util/misc/svgExport.min.mjs.map +0 -0
  1494. package/dist/src/util/misc/svgExport.mjs +0 -0
  1495. package/dist/src/util/misc/svgExport.mjs.map +0 -0
  1496. package/dist/src/util/misc/svgParsing.d.ts +0 -0
  1497. package/dist/src/util/misc/svgParsing.d.ts.map +0 -0
  1498. package/dist/src/util/misc/svgParsing.min.mjs +0 -0
  1499. package/dist/src/util/misc/svgParsing.min.mjs.map +0 -0
  1500. package/dist/src/util/misc/svgParsing.mjs +0 -0
  1501. package/dist/src/util/misc/svgParsing.mjs.map +0 -0
  1502. package/dist/src/util/misc/textStyles.d.ts +0 -0
  1503. package/dist/src/util/misc/textStyles.d.ts.map +0 -0
  1504. package/dist/src/util/misc/textStyles.min.mjs +0 -0
  1505. package/dist/src/util/misc/textStyles.min.mjs.map +0 -0
  1506. package/dist/src/util/misc/textStyles.mjs +0 -0
  1507. package/dist/src/util/misc/textStyles.mjs.map +0 -0
  1508. package/dist/src/util/misc/toFixed.d.ts +0 -0
  1509. package/dist/src/util/misc/toFixed.d.ts.map +0 -0
  1510. package/dist/src/util/misc/toFixed.min.mjs +0 -0
  1511. package/dist/src/util/misc/toFixed.min.mjs.map +0 -0
  1512. package/dist/src/util/misc/toFixed.mjs +0 -0
  1513. package/dist/src/util/misc/toFixed.mjs.map +0 -0
  1514. package/dist/src/util/misc/vectors.d.ts +0 -0
  1515. package/dist/src/util/misc/vectors.d.ts.map +0 -0
  1516. package/dist/src/util/misc/vectors.min.mjs +0 -0
  1517. package/dist/src/util/misc/vectors.min.mjs.map +0 -0
  1518. package/dist/src/util/misc/vectors.mjs +0 -0
  1519. package/dist/src/util/misc/vectors.mjs.map +0 -0
  1520. package/dist/src/util/path/index.d.ts +0 -0
  1521. package/dist/src/util/path/index.d.ts.map +0 -0
  1522. package/dist/src/util/path/index.min.mjs +0 -0
  1523. package/dist/src/util/path/index.min.mjs.map +0 -0
  1524. package/dist/src/util/path/index.mjs +0 -0
  1525. package/dist/src/util/path/index.mjs.map +0 -0
  1526. package/dist/src/util/path/regex.d.ts +0 -0
  1527. package/dist/src/util/path/regex.d.ts.map +0 -0
  1528. package/dist/src/util/path/regex.min.mjs +0 -0
  1529. package/dist/src/util/path/regex.min.mjs.map +0 -0
  1530. package/dist/src/util/path/regex.mjs +0 -0
  1531. package/dist/src/util/path/regex.mjs.map +0 -0
  1532. package/dist/src/util/path/typechecks.d.ts +0 -0
  1533. package/dist/src/util/path/typechecks.d.ts.map +0 -0
  1534. package/dist/src/util/path/typedefs.d.ts +0 -0
  1535. package/dist/src/util/path/typedefs.d.ts.map +0 -0
  1536. package/dist/src/util/transform_matrix_removal.d.ts +0 -0
  1537. package/dist/src/util/transform_matrix_removal.d.ts.map +0 -0
  1538. package/dist/src/util/transform_matrix_removal.min.mjs +0 -0
  1539. package/dist/src/util/transform_matrix_removal.min.mjs.map +0 -0
  1540. package/dist/src/util/transform_matrix_removal.mjs +0 -0
  1541. package/dist/src/util/transform_matrix_removal.mjs.map +0 -0
  1542. package/dist/src/util/typeAssertions.d.ts +0 -0
  1543. package/dist/src/util/typeAssertions.d.ts.map +0 -0
  1544. package/dist/src/util/typeAssertions.min.mjs +0 -0
  1545. package/dist/src/util/typeAssertions.min.mjs.map +0 -0
  1546. package/dist/src/util/typeAssertions.mjs +0 -0
  1547. package/dist/src/util/typeAssertions.mjs.map +0 -0
  1548. package/dist-extensions/aligning_guidelines/constant.mjs +0 -0
  1549. package/dist-extensions/aligning_guidelines/constant.mjs.map +0 -0
  1550. package/dist-extensions/aligning_guidelines/index.mjs +0 -0
  1551. package/dist-extensions/aligning_guidelines/index.mjs.map +0 -0
  1552. package/dist-extensions/aligning_guidelines/util/basic.mjs +0 -0
  1553. package/dist-extensions/aligning_guidelines/util/basic.mjs.map +0 -0
  1554. package/dist-extensions/aligning_guidelines/util/collect-line.mjs +0 -0
  1555. package/dist-extensions/aligning_guidelines/util/collect-line.mjs.map +0 -0
  1556. package/dist-extensions/aligning_guidelines/util/collect-point.mjs +0 -0
  1557. package/dist-extensions/aligning_guidelines/util/collect-point.mjs.map +0 -0
  1558. package/dist-extensions/aligning_guidelines/util/draw.mjs +0 -0
  1559. package/dist-extensions/aligning_guidelines/util/draw.mjs.map +0 -0
  1560. package/dist-extensions/aligning_guidelines/util/get-objects-by-target.mjs +0 -0
  1561. package/dist-extensions/aligning_guidelines/util/get-objects-by-target.mjs.map +0 -0
  1562. package/dist-extensions/data_updaters/gradient/index.mjs +0 -0
  1563. package/dist-extensions/data_updaters/gradient/index.mjs.map +0 -0
  1564. package/dist-extensions/data_updaters/origins/index.mjs +0 -0
  1565. package/dist-extensions/data_updaters/origins/index.mjs.map +0 -0
  1566. package/dist-extensions/extensions/aligning_guidelines/constant.d.ts +0 -0
  1567. package/dist-extensions/extensions/aligning_guidelines/constant.d.ts.map +0 -0
  1568. package/dist-extensions/extensions/aligning_guidelines/index.d.ts +0 -0
  1569. package/dist-extensions/extensions/aligning_guidelines/index.d.ts.map +0 -0
  1570. package/dist-extensions/extensions/aligning_guidelines/typedefs.d.ts +0 -0
  1571. package/dist-extensions/extensions/aligning_guidelines/typedefs.d.ts.map +0 -0
  1572. package/dist-extensions/extensions/aligning_guidelines/util/basic.d.ts +0 -0
  1573. package/dist-extensions/extensions/aligning_guidelines/util/basic.d.ts.map +0 -0
  1574. package/dist-extensions/extensions/aligning_guidelines/util/collect-line.d.ts +0 -0
  1575. package/dist-extensions/extensions/aligning_guidelines/util/collect-line.d.ts.map +0 -0
  1576. package/dist-extensions/extensions/aligning_guidelines/util/collect-point.d.ts +0 -0
  1577. package/dist-extensions/extensions/aligning_guidelines/util/collect-point.d.ts.map +0 -0
  1578. package/dist-extensions/extensions/aligning_guidelines/util/draw.d.ts +0 -0
  1579. package/dist-extensions/extensions/aligning_guidelines/util/draw.d.ts.map +0 -0
  1580. package/dist-extensions/extensions/aligning_guidelines/util/get-objects-by-target.d.ts +0 -0
  1581. package/dist-extensions/extensions/aligning_guidelines/util/get-objects-by-target.d.ts.map +0 -0
  1582. package/dist-extensions/extensions/data_updaters/gradient/index.d.ts +0 -0
  1583. package/dist-extensions/extensions/data_updaters/gradient/index.d.ts.map +0 -0
  1584. package/dist-extensions/extensions/data_updaters/origins/index.d.ts +0 -0
  1585. package/dist-extensions/extensions/data_updaters/origins/index.d.ts.map +0 -0
  1586. package/dist-extensions/extensions/index.d.ts +0 -0
  1587. package/dist-extensions/extensions/index.d.ts.map +0 -0
  1588. package/dist-extensions/fabric-extensions.min.js +0 -0
  1589. package/dist-extensions/fabric-extensions.min.js.map +0 -0
  1590. package/dist-extensions/fabric.d.ts +0 -0
  1591. package/dist-extensions/fabric.d.ts.map +0 -0
  1592. package/dist-extensions/index.d.ts +0 -0
  1593. package/dist-extensions/index.d.ts.map +0 -0
  1594. package/dist-extensions/index.mjs +0 -0
  1595. package/dist-extensions/index.mjs.map +0 -0
  1596. package/dist-extensions/src/ClassRegistry.d.ts +0 -0
  1597. package/dist-extensions/src/ClassRegistry.d.ts.map +0 -0
  1598. package/dist-extensions/src/Collection.d.ts +0 -0
  1599. package/dist-extensions/src/Collection.d.ts.map +0 -0
  1600. package/dist-extensions/src/CommonMethods.d.ts +0 -0
  1601. package/dist-extensions/src/CommonMethods.d.ts.map +0 -0
  1602. package/dist-extensions/src/EventTypeDefs.d.ts +0 -0
  1603. package/dist-extensions/src/EventTypeDefs.d.ts.map +0 -0
  1604. package/dist-extensions/src/Intersection.d.ts +0 -0
  1605. package/dist-extensions/src/Intersection.d.ts.map +0 -0
  1606. package/dist-extensions/src/LayoutManager/ActiveSelectionLayoutManager.d.ts +0 -0
  1607. package/dist-extensions/src/LayoutManager/ActiveSelectionLayoutManager.d.ts.map +0 -0
  1608. package/dist-extensions/src/LayoutManager/LayoutManager.d.ts +0 -0
  1609. package/dist-extensions/src/LayoutManager/LayoutManager.d.ts.map +0 -0
  1610. package/dist-extensions/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts +0 -0
  1611. package/dist-extensions/src/LayoutManager/LayoutStrategies/ClipPathLayout.d.ts.map +0 -0
  1612. package/dist-extensions/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts +0 -0
  1613. package/dist-extensions/src/LayoutManager/LayoutStrategies/FitContentLayout.d.ts.map +0 -0
  1614. package/dist-extensions/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts +0 -0
  1615. package/dist-extensions/src/LayoutManager/LayoutStrategies/FixedLayout.d.ts.map +0 -0
  1616. package/dist-extensions/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts +0 -0
  1617. package/dist-extensions/src/LayoutManager/LayoutStrategies/LayoutStrategy.d.ts.map +0 -0
  1618. package/dist-extensions/src/LayoutManager/LayoutStrategies/utils.d.ts +0 -0
  1619. package/dist-extensions/src/LayoutManager/LayoutStrategies/utils.d.ts.map +0 -0
  1620. package/dist-extensions/src/LayoutManager/constants.d.ts +0 -0
  1621. package/dist-extensions/src/LayoutManager/constants.d.ts.map +0 -0
  1622. package/dist-extensions/src/LayoutManager/index.d.ts +0 -0
  1623. package/dist-extensions/src/LayoutManager/index.d.ts.map +0 -0
  1624. package/dist-extensions/src/LayoutManager/types.d.ts +0 -0
  1625. package/dist-extensions/src/LayoutManager/types.d.ts.map +0 -0
  1626. package/dist-extensions/src/Observable.d.ts +0 -0
  1627. package/dist-extensions/src/Observable.d.ts.map +0 -0
  1628. package/dist-extensions/src/Pattern/Pattern.d.ts +0 -0
  1629. package/dist-extensions/src/Pattern/Pattern.d.ts.map +0 -0
  1630. package/dist-extensions/src/Pattern/index.d.ts +0 -0
  1631. package/dist-extensions/src/Pattern/index.d.ts.map +0 -0
  1632. package/dist-extensions/src/Pattern/types.d.ts +0 -0
  1633. package/dist-extensions/src/Pattern/types.d.ts.map +0 -0
  1634. package/dist-extensions/src/Point.d.ts +0 -0
  1635. package/dist-extensions/src/Point.d.ts.map +0 -0
  1636. package/dist-extensions/src/Shadow.d.ts +0 -0
  1637. package/dist-extensions/src/Shadow.d.ts.map +0 -0
  1638. package/dist-extensions/src/brushes/BaseBrush.d.ts +0 -0
  1639. package/dist-extensions/src/brushes/BaseBrush.d.ts.map +0 -0
  1640. package/dist-extensions/src/brushes/CircleBrush.d.ts +0 -0
  1641. package/dist-extensions/src/brushes/CircleBrush.d.ts.map +0 -0
  1642. package/dist-extensions/src/brushes/PatternBrush.d.ts +0 -0
  1643. package/dist-extensions/src/brushes/PatternBrush.d.ts.map +0 -0
  1644. package/dist-extensions/src/brushes/PencilBrush.d.ts +0 -0
  1645. package/dist-extensions/src/brushes/PencilBrush.d.ts.map +0 -0
  1646. package/dist-extensions/src/brushes/SprayBrush.d.ts +0 -0
  1647. package/dist-extensions/src/brushes/SprayBrush.d.ts.map +0 -0
  1648. package/dist-extensions/src/brushes/typedefs.d.ts +0 -0
  1649. package/dist-extensions/src/brushes/typedefs.d.ts.map +0 -0
  1650. package/dist-extensions/src/cache.d.ts +0 -0
  1651. package/dist-extensions/src/cache.d.ts.map +0 -0
  1652. package/dist-extensions/src/canvas/Canvas.d.ts +0 -0
  1653. package/dist-extensions/src/canvas/Canvas.d.ts.map +0 -0
  1654. package/dist-extensions/src/canvas/CanvasOptions.d.ts +0 -0
  1655. package/dist-extensions/src/canvas/CanvasOptions.d.ts.map +0 -0
  1656. package/dist-extensions/src/canvas/DOMManagers/CanvasDOMManager.d.ts +0 -0
  1657. package/dist-extensions/src/canvas/DOMManagers/CanvasDOMManager.d.ts.map +0 -0
  1658. package/dist-extensions/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts +0 -0
  1659. package/dist-extensions/src/canvas/DOMManagers/StaticCanvasDOMManager.d.ts.map +0 -0
  1660. package/dist-extensions/src/canvas/DOMManagers/util.d.ts +0 -0
  1661. package/dist-extensions/src/canvas/DOMManagers/util.d.ts.map +0 -0
  1662. package/dist-extensions/src/canvas/SelectableCanvas.d.ts +0 -0
  1663. package/dist-extensions/src/canvas/SelectableCanvas.d.ts.map +0 -0
  1664. package/dist-extensions/src/canvas/StaticCanvas.d.ts +0 -0
  1665. package/dist-extensions/src/canvas/StaticCanvas.d.ts.map +0 -0
  1666. package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts +0 -0
  1667. package/dist-extensions/src/canvas/StaticCanvasOptions.d.ts.map +0 -0
  1668. package/dist-extensions/src/canvas/TextEditingManager.d.ts +0 -0
  1669. package/dist-extensions/src/canvas/TextEditingManager.d.ts.map +0 -0
  1670. package/dist-extensions/src/color/Color.d.ts +0 -0
  1671. package/dist-extensions/src/color/Color.d.ts.map +0 -0
  1672. package/dist-extensions/src/color/color_map.d.ts +0 -0
  1673. package/dist-extensions/src/color/color_map.d.ts.map +0 -0
  1674. package/dist-extensions/src/color/constants.d.ts +0 -0
  1675. package/dist-extensions/src/color/constants.d.ts.map +0 -0
  1676. package/dist-extensions/src/color/typedefs.d.ts +0 -0
  1677. package/dist-extensions/src/color/typedefs.d.ts.map +0 -0
  1678. package/dist-extensions/src/color/util.d.ts +0 -0
  1679. package/dist-extensions/src/color/util.d.ts.map +0 -0
  1680. package/dist-extensions/src/config.d.ts +0 -0
  1681. package/dist-extensions/src/config.d.ts.map +0 -0
  1682. package/dist-extensions/src/constants.d.ts +0 -0
  1683. package/dist-extensions/src/constants.d.ts.map +0 -0
  1684. package/dist-extensions/src/controls/Control.d.ts +0 -0
  1685. package/dist-extensions/src/controls/Control.d.ts.map +0 -0
  1686. package/dist-extensions/src/controls/changeHeight.d.ts +0 -0
  1687. package/dist-extensions/src/controls/changeHeight.d.ts.map +0 -0
  1688. package/dist-extensions/src/controls/changeWidth.d.ts +0 -0
  1689. package/dist-extensions/src/controls/changeWidth.d.ts.map +0 -0
  1690. package/dist-extensions/src/controls/commonControls.d.ts +0 -0
  1691. package/dist-extensions/src/controls/commonControls.d.ts.map +0 -0
  1692. package/dist-extensions/src/controls/controlRendering.d.ts +0 -0
  1693. package/dist-extensions/src/controls/controlRendering.d.ts.map +0 -0
  1694. package/dist-extensions/src/controls/drag.d.ts +0 -0
  1695. package/dist-extensions/src/controls/drag.d.ts.map +0 -0
  1696. package/dist-extensions/src/controls/fireEvent.d.ts +0 -0
  1697. package/dist-extensions/src/controls/fireEvent.d.ts.map +0 -0
  1698. package/dist-extensions/src/controls/index.d.ts +0 -0
  1699. package/dist-extensions/src/controls/index.d.ts.map +0 -0
  1700. package/dist-extensions/src/controls/pathControl.d.ts +0 -0
  1701. package/dist-extensions/src/controls/pathControl.d.ts.map +0 -0
  1702. package/dist-extensions/src/controls/polyControl.d.ts +0 -0
  1703. package/dist-extensions/src/controls/polyControl.d.ts.map +0 -0
  1704. package/dist-extensions/src/controls/rotate.d.ts +0 -0
  1705. package/dist-extensions/src/controls/rotate.d.ts.map +0 -0
  1706. package/dist-extensions/src/controls/scale.d.ts +0 -0
  1707. package/dist-extensions/src/controls/scale.d.ts.map +0 -0
  1708. package/dist-extensions/src/controls/scaleSkew.d.ts +0 -0
  1709. package/dist-extensions/src/controls/scaleSkew.d.ts.map +0 -0
  1710. package/dist-extensions/src/controls/skew.d.ts +0 -0
  1711. package/dist-extensions/src/controls/skew.d.ts.map +0 -0
  1712. package/dist-extensions/src/controls/util.d.ts +0 -0
  1713. package/dist-extensions/src/controls/util.d.ts.map +0 -0
  1714. package/dist-extensions/src/controls/wrapWithFireEvent.d.ts +0 -0
  1715. package/dist-extensions/src/controls/wrapWithFireEvent.d.ts.map +0 -0
  1716. package/dist-extensions/src/controls/wrapWithFixedAnchor.d.ts +0 -0
  1717. package/dist-extensions/src/controls/wrapWithFixedAnchor.d.ts.map +0 -0
  1718. package/dist-extensions/src/env/browser.d.ts +0 -0
  1719. package/dist-extensions/src/env/browser.d.ts.map +0 -0
  1720. package/dist-extensions/src/env/index.d.ts +0 -0
  1721. package/dist-extensions/src/env/index.d.ts.map +0 -0
  1722. package/dist-extensions/src/env/types.d.ts +0 -0
  1723. package/dist-extensions/src/env/types.d.ts.map +0 -0
  1724. package/dist-extensions/src/filters/BaseFilter.d.ts +0 -0
  1725. package/dist-extensions/src/filters/BaseFilter.d.ts.map +0 -0
  1726. package/dist-extensions/src/filters/BlendColor.d.ts +0 -0
  1727. package/dist-extensions/src/filters/BlendColor.d.ts.map +0 -0
  1728. package/dist-extensions/src/filters/BlendImage.d.ts +0 -0
  1729. package/dist-extensions/src/filters/BlendImage.d.ts.map +0 -0
  1730. package/dist-extensions/src/filters/Blur.d.ts +0 -0
  1731. package/dist-extensions/src/filters/Blur.d.ts.map +0 -0
  1732. package/dist-extensions/src/filters/Brightness.d.ts +0 -0
  1733. package/dist-extensions/src/filters/Brightness.d.ts.map +0 -0
  1734. package/dist-extensions/src/filters/Canvas2dFilterBackend.d.ts +0 -0
  1735. package/dist-extensions/src/filters/Canvas2dFilterBackend.d.ts.map +0 -0
  1736. package/dist-extensions/src/filters/ColorMatrix.d.ts +0 -0
  1737. package/dist-extensions/src/filters/ColorMatrix.d.ts.map +0 -0
  1738. package/dist-extensions/src/filters/ColorMatrixFilters.d.ts +0 -0
  1739. package/dist-extensions/src/filters/ColorMatrixFilters.d.ts.map +0 -0
  1740. package/dist-extensions/src/filters/Composed.d.ts +0 -0
  1741. package/dist-extensions/src/filters/Composed.d.ts.map +0 -0
  1742. package/dist-extensions/src/filters/Contrast.d.ts +0 -0
  1743. package/dist-extensions/src/filters/Contrast.d.ts.map +0 -0
  1744. package/dist-extensions/src/filters/Convolute.d.ts +0 -0
  1745. package/dist-extensions/src/filters/Convolute.d.ts.map +0 -0
  1746. package/dist-extensions/src/filters/FilterBackend.d.ts +0 -0
  1747. package/dist-extensions/src/filters/FilterBackend.d.ts.map +0 -0
  1748. package/dist-extensions/src/filters/GLProbes/GLProbe.d.ts +0 -0
  1749. package/dist-extensions/src/filters/GLProbes/GLProbe.d.ts.map +0 -0
  1750. package/dist-extensions/src/filters/GLProbes/WebGLProbe.d.ts +0 -0
  1751. package/dist-extensions/src/filters/GLProbes/WebGLProbe.d.ts.map +0 -0
  1752. package/dist-extensions/src/filters/Gamma.d.ts +0 -0
  1753. package/dist-extensions/src/filters/Gamma.d.ts.map +0 -0
  1754. package/dist-extensions/src/filters/Grayscale.d.ts +0 -0
  1755. package/dist-extensions/src/filters/Grayscale.d.ts.map +0 -0
  1756. package/dist-extensions/src/filters/HueRotation.d.ts +0 -0
  1757. package/dist-extensions/src/filters/HueRotation.d.ts.map +0 -0
  1758. package/dist-extensions/src/filters/Invert.d.ts +0 -0
  1759. package/dist-extensions/src/filters/Invert.d.ts.map +0 -0
  1760. package/dist-extensions/src/filters/Noise.d.ts +0 -0
  1761. package/dist-extensions/src/filters/Noise.d.ts.map +0 -0
  1762. package/dist-extensions/src/filters/Pixelate.d.ts +0 -0
  1763. package/dist-extensions/src/filters/Pixelate.d.ts.map +0 -0
  1764. package/dist-extensions/src/filters/RemoveColor.d.ts +0 -0
  1765. package/dist-extensions/src/filters/RemoveColor.d.ts.map +0 -0
  1766. package/dist-extensions/src/filters/Resize.d.ts +0 -0
  1767. package/dist-extensions/src/filters/Resize.d.ts.map +0 -0
  1768. package/dist-extensions/src/filters/Saturation.d.ts +0 -0
  1769. package/dist-extensions/src/filters/Saturation.d.ts.map +0 -0
  1770. package/dist-extensions/src/filters/Vibrance.d.ts +0 -0
  1771. package/dist-extensions/src/filters/Vibrance.d.ts.map +0 -0
  1772. package/dist-extensions/src/filters/WebGLFilterBackend.d.ts +0 -0
  1773. package/dist-extensions/src/filters/WebGLFilterBackend.d.ts.map +0 -0
  1774. package/dist-extensions/src/filters/filters.d.ts +0 -0
  1775. package/dist-extensions/src/filters/filters.d.ts.map +0 -0
  1776. package/dist-extensions/src/filters/index.d.ts +0 -0
  1777. package/dist-extensions/src/filters/index.d.ts.map +0 -0
  1778. package/dist-extensions/src/filters/shaders/baseFilter.d.ts +0 -0
  1779. package/dist-extensions/src/filters/shaders/baseFilter.d.ts.map +0 -0
  1780. package/dist-extensions/src/filters/shaders/blendColor.d.ts +0 -0
  1781. package/dist-extensions/src/filters/shaders/blendColor.d.ts.map +0 -0
  1782. package/dist-extensions/src/filters/shaders/blendImage.d.ts +0 -0
  1783. package/dist-extensions/src/filters/shaders/blendImage.d.ts.map +0 -0
  1784. package/dist-extensions/src/filters/shaders/blur.d.ts +0 -0
  1785. package/dist-extensions/src/filters/shaders/blur.d.ts.map +0 -0
  1786. package/dist-extensions/src/filters/shaders/brightness.d.ts +0 -0
  1787. package/dist-extensions/src/filters/shaders/brightness.d.ts.map +0 -0
  1788. package/dist-extensions/src/filters/shaders/colorMatrix.d.ts +0 -0
  1789. package/dist-extensions/src/filters/shaders/colorMatrix.d.ts.map +0 -0
  1790. package/dist-extensions/src/filters/shaders/constrast.d.ts +0 -0
  1791. package/dist-extensions/src/filters/shaders/constrast.d.ts.map +0 -0
  1792. package/dist-extensions/src/filters/shaders/convolute.d.ts +0 -0
  1793. package/dist-extensions/src/filters/shaders/convolute.d.ts.map +0 -0
  1794. package/dist-extensions/src/filters/shaders/gamma.d.ts +0 -0
  1795. package/dist-extensions/src/filters/shaders/gamma.d.ts.map +0 -0
  1796. package/dist-extensions/src/filters/shaders/grayscale.d.ts +0 -0
  1797. package/dist-extensions/src/filters/shaders/grayscale.d.ts.map +0 -0
  1798. package/dist-extensions/src/filters/shaders/invert.d.ts +0 -0
  1799. package/dist-extensions/src/filters/shaders/invert.d.ts.map +0 -0
  1800. package/dist-extensions/src/filters/shaders/noise.d.ts +0 -0
  1801. package/dist-extensions/src/filters/shaders/noise.d.ts.map +0 -0
  1802. package/dist-extensions/src/filters/shaders/pixelate.d.ts +0 -0
  1803. package/dist-extensions/src/filters/shaders/pixelate.d.ts.map +0 -0
  1804. package/dist-extensions/src/filters/shaders/removeColor.d.ts +0 -0
  1805. package/dist-extensions/src/filters/shaders/removeColor.d.ts.map +0 -0
  1806. package/dist-extensions/src/filters/shaders/saturation.d.ts +0 -0
  1807. package/dist-extensions/src/filters/shaders/saturation.d.ts.map +0 -0
  1808. package/dist-extensions/src/filters/shaders/vibrance.d.ts +0 -0
  1809. package/dist-extensions/src/filters/shaders/vibrance.d.ts.map +0 -0
  1810. package/dist-extensions/src/filters/typedefs.d.ts +0 -0
  1811. package/dist-extensions/src/filters/typedefs.d.ts.map +0 -0
  1812. package/dist-extensions/src/filters/utils.d.ts +0 -0
  1813. package/dist-extensions/src/filters/utils.d.ts.map +0 -0
  1814. package/dist-extensions/src/gradient/Gradient.d.ts +0 -0
  1815. package/dist-extensions/src/gradient/Gradient.d.ts.map +0 -0
  1816. package/dist-extensions/src/gradient/constants.d.ts +0 -0
  1817. package/dist-extensions/src/gradient/constants.d.ts.map +0 -0
  1818. package/dist-extensions/src/gradient/index.d.ts +0 -0
  1819. package/dist-extensions/src/gradient/index.d.ts.map +0 -0
  1820. package/dist-extensions/src/gradient/parser/misc.d.ts +0 -0
  1821. package/dist-extensions/src/gradient/parser/misc.d.ts.map +0 -0
  1822. package/dist-extensions/src/gradient/parser/parseColorStops.d.ts +0 -0
  1823. package/dist-extensions/src/gradient/parser/parseColorStops.d.ts.map +0 -0
  1824. package/dist-extensions/src/gradient/parser/parseCoords.d.ts +0 -0
  1825. package/dist-extensions/src/gradient/parser/parseCoords.d.ts.map +0 -0
  1826. package/dist-extensions/src/gradient/typedefs.d.ts +0 -0
  1827. package/dist-extensions/src/gradient/typedefs.d.ts.map +0 -0
  1828. package/dist-extensions/src/parser/applyViewboxTransform.d.ts +0 -0
  1829. package/dist-extensions/src/parser/applyViewboxTransform.d.ts.map +0 -0
  1830. package/dist-extensions/src/parser/attributes.d.ts +0 -0
  1831. package/dist-extensions/src/parser/attributes.d.ts.map +0 -0
  1832. package/dist-extensions/src/parser/constants.d.ts +0 -0
  1833. package/dist-extensions/src/parser/constants.d.ts.map +0 -0
  1834. package/dist-extensions/src/parser/doesSomeParentMatch.d.ts +0 -0
  1835. package/dist-extensions/src/parser/doesSomeParentMatch.d.ts.map +0 -0
  1836. package/dist-extensions/src/parser/elementMatchesRule.d.ts +0 -0
  1837. package/dist-extensions/src/parser/elementMatchesRule.d.ts.map +0 -0
  1838. package/dist-extensions/src/parser/elements_parser.d.ts +0 -0
  1839. package/dist-extensions/src/parser/elements_parser.d.ts.map +0 -0
  1840. package/dist-extensions/src/parser/getCSSRules.d.ts +0 -0
  1841. package/dist-extensions/src/parser/getCSSRules.d.ts.map +0 -0
  1842. package/dist-extensions/src/parser/getGlobalStylesForElement.d.ts +0 -0
  1843. package/dist-extensions/src/parser/getGlobalStylesForElement.d.ts.map +0 -0
  1844. package/dist-extensions/src/parser/getGradientDefs.d.ts +0 -0
  1845. package/dist-extensions/src/parser/getGradientDefs.d.ts.map +0 -0
  1846. package/dist-extensions/src/parser/getMultipleNodes.d.ts +0 -0
  1847. package/dist-extensions/src/parser/getMultipleNodes.d.ts.map +0 -0
  1848. package/dist-extensions/src/parser/getSvgRegex.d.ts +0 -0
  1849. package/dist-extensions/src/parser/getSvgRegex.d.ts.map +0 -0
  1850. package/dist-extensions/src/parser/getTagName.d.ts +0 -0
  1851. package/dist-extensions/src/parser/getTagName.d.ts.map +0 -0
  1852. package/dist-extensions/src/parser/hasInvalidAncestor.d.ts +0 -0
  1853. package/dist-extensions/src/parser/hasInvalidAncestor.d.ts.map +0 -0
  1854. package/dist-extensions/src/parser/loadSVGFromString.d.ts +0 -0
  1855. package/dist-extensions/src/parser/loadSVGFromString.d.ts.map +0 -0
  1856. package/dist-extensions/src/parser/loadSVGFromURL.d.ts +0 -0
  1857. package/dist-extensions/src/parser/loadSVGFromURL.d.ts.map +0 -0
  1858. package/dist-extensions/src/parser/normalizeAttr.d.ts +0 -0
  1859. package/dist-extensions/src/parser/normalizeAttr.d.ts.map +0 -0
  1860. package/dist-extensions/src/parser/normalizeValue.d.ts +0 -0
  1861. package/dist-extensions/src/parser/normalizeValue.d.ts.map +0 -0
  1862. package/dist-extensions/src/parser/parseAttributes.d.ts +0 -0
  1863. package/dist-extensions/src/parser/parseAttributes.d.ts.map +0 -0
  1864. package/dist-extensions/src/parser/parseFontDeclaration.d.ts +0 -0
  1865. package/dist-extensions/src/parser/parseFontDeclaration.d.ts.map +0 -0
  1866. package/dist-extensions/src/parser/parsePointsAttribute.d.ts +0 -0
  1867. package/dist-extensions/src/parser/parsePointsAttribute.d.ts.map +0 -0
  1868. package/dist-extensions/src/parser/parseSVGDocument.d.ts +0 -0
  1869. package/dist-extensions/src/parser/parseSVGDocument.d.ts.map +0 -0
  1870. package/dist-extensions/src/parser/parseStyleAttribute.d.ts +0 -0
  1871. package/dist-extensions/src/parser/parseStyleAttribute.d.ts.map +0 -0
  1872. package/dist-extensions/src/parser/parseStyleObject.d.ts +0 -0
  1873. package/dist-extensions/src/parser/parseStyleObject.d.ts.map +0 -0
  1874. package/dist-extensions/src/parser/parseStyleString.d.ts +0 -0
  1875. package/dist-extensions/src/parser/parseStyleString.d.ts.map +0 -0
  1876. package/dist-extensions/src/parser/parseTransformAttribute.d.ts +0 -0
  1877. package/dist-extensions/src/parser/parseTransformAttribute.d.ts.map +0 -0
  1878. package/dist-extensions/src/parser/parseUseDirectives.d.ts +0 -0
  1879. package/dist-extensions/src/parser/parseUseDirectives.d.ts.map +0 -0
  1880. package/dist-extensions/src/parser/percent.d.ts +0 -0
  1881. package/dist-extensions/src/parser/percent.d.ts.map +0 -0
  1882. package/dist-extensions/src/parser/recursivelyParseGradientsXlink.d.ts +0 -0
  1883. package/dist-extensions/src/parser/recursivelyParseGradientsXlink.d.ts.map +0 -0
  1884. package/dist-extensions/src/parser/selectorMatches.d.ts +0 -0
  1885. package/dist-extensions/src/parser/selectorMatches.d.ts.map +0 -0
  1886. package/dist-extensions/src/parser/setStrokeFillOpacity.d.ts +0 -0
  1887. package/dist-extensions/src/parser/setStrokeFillOpacity.d.ts.map +0 -0
  1888. package/dist-extensions/src/parser/typedefs.d.ts +0 -0
  1889. package/dist-extensions/src/parser/typedefs.d.ts.map +0 -0
  1890. package/dist-extensions/src/shapes/ActiveSelection.d.ts +0 -0
  1891. package/dist-extensions/src/shapes/ActiveSelection.d.ts.map +0 -0
  1892. package/dist-extensions/src/shapes/Circle.d.ts +0 -0
  1893. package/dist-extensions/src/shapes/Circle.d.ts.map +0 -0
  1894. package/dist-extensions/src/shapes/Ellipse.d.ts +0 -0
  1895. package/dist-extensions/src/shapes/Ellipse.d.ts.map +0 -0
  1896. package/dist-extensions/src/shapes/Group.d.ts +0 -0
  1897. package/dist-extensions/src/shapes/Group.d.ts.map +0 -0
  1898. package/dist-extensions/src/shapes/IText/DraggableTextDelegate.d.ts +0 -0
  1899. package/dist-extensions/src/shapes/IText/DraggableTextDelegate.d.ts.map +0 -0
  1900. package/dist-extensions/src/shapes/IText/IText.d.ts +0 -0
  1901. package/dist-extensions/src/shapes/IText/IText.d.ts.map +0 -0
  1902. package/dist-extensions/src/shapes/IText/ITextBehavior.d.ts +0 -0
  1903. package/dist-extensions/src/shapes/IText/ITextBehavior.d.ts.map +1 -1
  1904. package/dist-extensions/src/shapes/IText/ITextClickBehavior.d.ts +0 -0
  1905. package/dist-extensions/src/shapes/IText/ITextClickBehavior.d.ts.map +0 -0
  1906. package/dist-extensions/src/shapes/IText/ITextKeyBehavior.d.ts +0 -0
  1907. package/dist-extensions/src/shapes/IText/ITextKeyBehavior.d.ts.map +1 -1
  1908. package/dist-extensions/src/shapes/IText/constants.d.ts +0 -0
  1909. package/dist-extensions/src/shapes/IText/constants.d.ts.map +0 -0
  1910. package/dist-extensions/src/shapes/Image.d.ts +0 -0
  1911. package/dist-extensions/src/shapes/Image.d.ts.map +0 -0
  1912. package/dist-extensions/src/shapes/Line.d.ts +0 -0
  1913. package/dist-extensions/src/shapes/Line.d.ts.map +0 -0
  1914. package/dist-extensions/src/shapes/Object/FabricObject.d.ts +0 -0
  1915. package/dist-extensions/src/shapes/Object/FabricObject.d.ts.map +0 -0
  1916. package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +0 -0
  1917. package/dist-extensions/src/shapes/Object/FabricObjectSVGExportMixin.d.ts.map +0 -0
  1918. package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts +0 -0
  1919. package/dist-extensions/src/shapes/Object/InteractiveObject.d.ts.map +0 -0
  1920. package/dist-extensions/src/shapes/Object/Object.d.ts +0 -0
  1921. package/dist-extensions/src/shapes/Object/Object.d.ts.map +0 -0
  1922. package/dist-extensions/src/shapes/Object/ObjectGeometry.d.ts +0 -0
  1923. package/dist-extensions/src/shapes/Object/ObjectGeometry.d.ts.map +0 -0
  1924. package/dist-extensions/src/shapes/Object/defaultValues.d.ts +0 -0
  1925. package/dist-extensions/src/shapes/Object/defaultValues.d.ts.map +0 -0
  1926. package/dist-extensions/src/shapes/Object/types/BaseProps.d.ts +0 -0
  1927. package/dist-extensions/src/shapes/Object/types/BaseProps.d.ts.map +0 -0
  1928. package/dist-extensions/src/shapes/Object/types/BorderProps.d.ts +0 -0
  1929. package/dist-extensions/src/shapes/Object/types/BorderProps.d.ts.map +0 -0
  1930. package/dist-extensions/src/shapes/Object/types/ControlProps.d.ts +0 -0
  1931. package/dist-extensions/src/shapes/Object/types/ControlProps.d.ts.map +0 -0
  1932. package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts +0 -0
  1933. package/dist-extensions/src/shapes/Object/types/FabricObjectProps.d.ts.map +0 -0
  1934. package/dist-extensions/src/shapes/Object/types/FillStrokeProps.d.ts +0 -0
  1935. package/dist-extensions/src/shapes/Object/types/FillStrokeProps.d.ts.map +0 -0
  1936. package/dist-extensions/src/shapes/Object/types/LockInteractionProps.d.ts +0 -0
  1937. package/dist-extensions/src/shapes/Object/types/LockInteractionProps.d.ts.map +0 -0
  1938. package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts +0 -0
  1939. package/dist-extensions/src/shapes/Object/types/ObjectProps.d.ts.map +0 -0
  1940. package/dist-extensions/src/shapes/Object/types/ObjectTransformProps.d.ts +0 -0
  1941. package/dist-extensions/src/shapes/Object/types/ObjectTransformProps.d.ts.map +0 -0
  1942. package/dist-extensions/src/shapes/Object/types/SerializedObjectProps.d.ts +0 -0
  1943. package/dist-extensions/src/shapes/Object/types/SerializedObjectProps.d.ts.map +0 -0
  1944. package/dist-extensions/src/shapes/Object/types/index.d.ts +0 -0
  1945. package/dist-extensions/src/shapes/Object/types/index.d.ts.map +0 -0
  1946. package/dist-extensions/src/shapes/Path.d.ts +0 -0
  1947. package/dist-extensions/src/shapes/Path.d.ts.map +0 -0
  1948. package/dist-extensions/src/shapes/Polygon.d.ts +0 -0
  1949. package/dist-extensions/src/shapes/Polygon.d.ts.map +0 -0
  1950. package/dist-extensions/src/shapes/Polyline.d.ts +0 -0
  1951. package/dist-extensions/src/shapes/Polyline.d.ts.map +0 -0
  1952. package/dist-extensions/src/shapes/Rect.d.ts +0 -0
  1953. package/dist-extensions/src/shapes/Rect.d.ts.map +0 -0
  1954. package/dist-extensions/src/shapes/Text/StyledText.d.ts +0 -0
  1955. package/dist-extensions/src/shapes/Text/StyledText.d.ts.map +0 -0
  1956. package/dist-extensions/src/shapes/Text/Text.d.ts +0 -0
  1957. package/dist-extensions/src/shapes/Text/Text.d.ts.map +0 -0
  1958. package/dist-extensions/src/shapes/Text/TextSVGExportMixin.d.ts +0 -0
  1959. package/dist-extensions/src/shapes/Text/TextSVGExportMixin.d.ts.map +0 -0
  1960. package/dist-extensions/src/shapes/Text/constants.d.ts +0 -0
  1961. package/dist-extensions/src/shapes/Text/constants.d.ts.map +0 -0
  1962. package/dist-extensions/src/shapes/Textbox.d.ts +0 -0
  1963. package/dist-extensions/src/shapes/Textbox.d.ts.map +0 -0
  1964. package/dist-extensions/src/shapes/Triangle.d.ts +0 -0
  1965. package/dist-extensions/src/shapes/Triangle.d.ts.map +0 -0
  1966. package/dist-extensions/src/text/browserLines.d.ts +0 -0
  1967. package/dist-extensions/src/text/browserLines.d.ts.map +0 -0
  1968. package/dist-extensions/src/text/ellipsis.d.ts +0 -0
  1969. package/dist-extensions/src/text/ellipsis.d.ts.map +0 -0
  1970. package/dist-extensions/src/text/hitTest.d.ts +0 -0
  1971. package/dist-extensions/src/text/hitTest.d.ts.map +0 -0
  1972. package/dist-extensions/src/text/layout.d.ts +0 -0
  1973. package/dist-extensions/src/text/layout.d.ts.map +0 -0
  1974. package/dist-extensions/src/text/measure.d.ts +0 -0
  1975. package/dist-extensions/src/text/measure.d.ts.map +0 -0
  1976. package/dist-extensions/src/text/overlayEditor.d.ts +0 -0
  1977. package/dist-extensions/src/text/overlayEditor.d.ts.map +0 -0
  1978. package/dist-extensions/src/text/unicode.d.ts +0 -0
  1979. package/dist-extensions/src/text/unicode.d.ts.map +0 -0
  1980. package/dist-extensions/src/typedefs.d.ts +0 -0
  1981. package/dist-extensions/src/typedefs.d.ts.map +0 -0
  1982. package/dist-extensions/src/util/animation/AnimationBase.d.ts +0 -0
  1983. package/dist-extensions/src/util/animation/AnimationBase.d.ts.map +0 -0
  1984. package/dist-extensions/src/util/animation/AnimationFrameProvider.d.ts +0 -0
  1985. package/dist-extensions/src/util/animation/AnimationFrameProvider.d.ts.map +0 -0
  1986. package/dist-extensions/src/util/animation/AnimationRegistry.d.ts +0 -0
  1987. package/dist-extensions/src/util/animation/AnimationRegistry.d.ts.map +0 -0
  1988. package/dist-extensions/src/util/animation/ArrayAnimation.d.ts +0 -0
  1989. package/dist-extensions/src/util/animation/ArrayAnimation.d.ts.map +0 -0
  1990. package/dist-extensions/src/util/animation/ColorAnimation.d.ts +0 -0
  1991. package/dist-extensions/src/util/animation/ColorAnimation.d.ts.map +0 -0
  1992. package/dist-extensions/src/util/animation/ValueAnimation.d.ts +0 -0
  1993. package/dist-extensions/src/util/animation/ValueAnimation.d.ts.map +0 -0
  1994. package/dist-extensions/src/util/animation/animate.d.ts +0 -0
  1995. package/dist-extensions/src/util/animation/animate.d.ts.map +0 -0
  1996. package/dist-extensions/src/util/animation/easing.d.ts +0 -0
  1997. package/dist-extensions/src/util/animation/easing.d.ts.map +0 -0
  1998. package/dist-extensions/src/util/animation/index.d.ts +0 -0
  1999. package/dist-extensions/src/util/animation/index.d.ts.map +0 -0
  2000. package/dist-extensions/src/util/animation/types.d.ts +0 -0
  2001. package/dist-extensions/src/util/animation/types.d.ts.map +0 -0
  2002. package/dist-extensions/src/util/applyMixins.d.ts +0 -0
  2003. package/dist-extensions/src/util/applyMixins.d.ts.map +0 -0
  2004. package/dist-extensions/src/util/dom_event.d.ts +0 -0
  2005. package/dist-extensions/src/util/dom_event.d.ts.map +0 -0
  2006. package/dist-extensions/src/util/dom_misc.d.ts +0 -0
  2007. package/dist-extensions/src/util/dom_misc.d.ts.map +0 -0
  2008. package/dist-extensions/src/util/index.d.ts +0 -0
  2009. package/dist-extensions/src/util/index.d.ts.map +0 -0
  2010. package/dist-extensions/src/util/internals/applyCanvasTransform.d.ts +0 -0
  2011. package/dist-extensions/src/util/internals/applyCanvasTransform.d.ts.map +0 -0
  2012. package/dist-extensions/src/util/internals/cleanupSvgAttribute.d.ts +0 -0
  2013. package/dist-extensions/src/util/internals/cleanupSvgAttribute.d.ts.map +0 -0
  2014. package/dist-extensions/src/util/internals/cloneStyles.d.ts +0 -0
  2015. package/dist-extensions/src/util/internals/cloneStyles.d.ts.map +0 -0
  2016. package/dist-extensions/src/util/internals/console.d.ts +0 -0
  2017. package/dist-extensions/src/util/internals/console.d.ts.map +0 -0
  2018. package/dist-extensions/src/util/internals/dom_style.d.ts +0 -0
  2019. package/dist-extensions/src/util/internals/dom_style.d.ts.map +0 -0
  2020. package/dist-extensions/src/util/internals/findRight.d.ts +0 -0
  2021. package/dist-extensions/src/util/internals/findRight.d.ts.map +0 -0
  2022. package/dist-extensions/src/util/internals/getRandomInt.d.ts +0 -0
  2023. package/dist-extensions/src/util/internals/getRandomInt.d.ts.map +0 -0
  2024. package/dist-extensions/src/util/internals/ifNaN.d.ts +0 -0
  2025. package/dist-extensions/src/util/internals/ifNaN.d.ts.map +0 -0
  2026. package/dist-extensions/src/util/internals/removeFromArray.d.ts +0 -0
  2027. package/dist-extensions/src/util/internals/removeFromArray.d.ts.map +0 -0
  2028. package/dist-extensions/src/util/internals/uid.d.ts +0 -0
  2029. package/dist-extensions/src/util/internals/uid.d.ts.map +0 -0
  2030. package/dist-extensions/src/util/lang_string.d.ts +0 -0
  2031. package/dist-extensions/src/util/lang_string.d.ts.map +0 -0
  2032. package/dist-extensions/src/util/misc/boundingBoxFromPoints.d.ts +0 -0
  2033. package/dist-extensions/src/util/misc/boundingBoxFromPoints.d.ts.map +0 -0
  2034. package/dist-extensions/src/util/misc/capValue.d.ts +0 -0
  2035. package/dist-extensions/src/util/misc/capValue.d.ts.map +0 -0
  2036. package/dist-extensions/src/util/misc/cornerRadius.d.ts +0 -0
  2037. package/dist-extensions/src/util/misc/cornerRadius.d.ts.map +0 -0
  2038. package/dist-extensions/src/util/misc/cos.d.ts +0 -0
  2039. package/dist-extensions/src/util/misc/cos.d.ts.map +0 -0
  2040. package/dist-extensions/src/util/misc/dom.d.ts +0 -0
  2041. package/dist-extensions/src/util/misc/dom.d.ts.map +0 -0
  2042. package/dist-extensions/src/util/misc/findScaleTo.d.ts +0 -0
  2043. package/dist-extensions/src/util/misc/findScaleTo.d.ts.map +0 -0
  2044. package/dist-extensions/src/util/misc/groupSVGElements.d.ts +0 -0
  2045. package/dist-extensions/src/util/misc/groupSVGElements.d.ts.map +0 -0
  2046. package/dist-extensions/src/util/misc/isTransparent.d.ts +0 -0
  2047. package/dist-extensions/src/util/misc/isTransparent.d.ts.map +0 -0
  2048. package/dist-extensions/src/util/misc/matrix.d.ts +0 -0
  2049. package/dist-extensions/src/util/misc/matrix.d.ts.map +0 -0
  2050. package/dist-extensions/src/util/misc/mergeClipPaths.d.ts +0 -0
  2051. package/dist-extensions/src/util/misc/mergeClipPaths.d.ts.map +0 -0
  2052. package/dist-extensions/src/util/misc/objectEnlive.d.ts +0 -0
  2053. package/dist-extensions/src/util/misc/objectEnlive.d.ts.map +0 -0
  2054. package/dist-extensions/src/util/misc/objectTransforms.d.ts +0 -0
  2055. package/dist-extensions/src/util/misc/objectTransforms.d.ts.map +0 -0
  2056. package/dist-extensions/src/util/misc/pick.d.ts +0 -0
  2057. package/dist-extensions/src/util/misc/pick.d.ts.map +0 -0
  2058. package/dist-extensions/src/util/misc/planeChange.d.ts +0 -0
  2059. package/dist-extensions/src/util/misc/planeChange.d.ts.map +0 -0
  2060. package/dist-extensions/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +0 -0
  2061. package/dist-extensions/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts.map +0 -0
  2062. package/dist-extensions/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +0 -0
  2063. package/dist-extensions/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts.map +0 -0
  2064. package/dist-extensions/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +0 -0
  2065. package/dist-extensions/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts.map +0 -0
  2066. package/dist-extensions/src/util/misc/projectStroke/index.d.ts +0 -0
  2067. package/dist-extensions/src/util/misc/projectStroke/index.d.ts.map +0 -0
  2068. package/dist-extensions/src/util/misc/projectStroke/types.d.ts +0 -0
  2069. package/dist-extensions/src/util/misc/projectStroke/types.d.ts.map +0 -0
  2070. package/dist-extensions/src/util/misc/radiansDegreesConversion.d.ts +0 -0
  2071. package/dist-extensions/src/util/misc/radiansDegreesConversion.d.ts.map +0 -0
  2072. package/dist-extensions/src/util/misc/resolveOrigin.d.ts +0 -0
  2073. package/dist-extensions/src/util/misc/resolveOrigin.d.ts.map +0 -0
  2074. package/dist-extensions/src/util/misc/sin.d.ts +0 -0
  2075. package/dist-extensions/src/util/misc/sin.d.ts.map +0 -0
  2076. package/dist-extensions/src/util/misc/svgExport.d.ts +0 -0
  2077. package/dist-extensions/src/util/misc/svgExport.d.ts.map +0 -0
  2078. package/dist-extensions/src/util/misc/svgParsing.d.ts +0 -0
  2079. package/dist-extensions/src/util/misc/svgParsing.d.ts.map +0 -0
  2080. package/dist-extensions/src/util/misc/textStyles.d.ts +0 -0
  2081. package/dist-extensions/src/util/misc/textStyles.d.ts.map +0 -0
  2082. package/dist-extensions/src/util/misc/toFixed.d.ts +0 -0
  2083. package/dist-extensions/src/util/misc/toFixed.d.ts.map +0 -0
  2084. package/dist-extensions/src/util/misc/vectors.d.ts +0 -0
  2085. package/dist-extensions/src/util/misc/vectors.d.ts.map +0 -0
  2086. package/dist-extensions/src/util/path/index.d.ts +0 -0
  2087. package/dist-extensions/src/util/path/index.d.ts.map +0 -0
  2088. package/dist-extensions/src/util/path/regex.d.ts +0 -0
  2089. package/dist-extensions/src/util/path/regex.d.ts.map +0 -0
  2090. package/dist-extensions/src/util/path/typedefs.d.ts +0 -0
  2091. package/dist-extensions/src/util/path/typedefs.d.ts.map +0 -0
  2092. package/dist-extensions/src/util/transform_matrix_removal.d.ts +0 -0
  2093. package/dist-extensions/src/util/transform_matrix_removal.d.ts.map +0 -0
  2094. package/dist-extensions/src/util/typeAssertions.d.ts +0 -0
  2095. package/dist-extensions/src/util/typeAssertions.d.ts.map +0 -0
  2096. package/docs/fabric-konva-gap-analysis.md +0 -0
  2097. package/docs/konva-text-behavior-spec.md +0 -0
  2098. package/docs/text-engine-design.md +0 -0
  2099. package/eslint.config.mjs +0 -0
  2100. package/examples/overlay-edit.html +416 -416
  2101. package/extensions/README.MD +0 -0
  2102. package/extensions/aligning_guidelines/README.MD +0 -0
  2103. package/extensions/aligning_guidelines/constant.ts +0 -0
  2104. package/extensions/aligning_guidelines/index.ts +0 -0
  2105. package/extensions/aligning_guidelines/typedefs.ts +0 -0
  2106. package/extensions/aligning_guidelines/util/basic.spec.ts +0 -0
  2107. package/extensions/aligning_guidelines/util/basic.ts +0 -0
  2108. package/extensions/aligning_guidelines/util/collect-line.ts +0 -0
  2109. package/extensions/aligning_guidelines/util/collect-point.ts +0 -0
  2110. package/extensions/aligning_guidelines/util/draw.ts +0 -0
  2111. package/extensions/aligning_guidelines/util/get-objects-by-target.ts +0 -0
  2112. package/extensions/data_updaters/README.md +0 -0
  2113. package/extensions/data_updaters/gradient/__snapshots__/index.spec.ts.snap +0 -0
  2114. package/extensions/data_updaters/gradient/index.spec.ts +0 -0
  2115. package/extensions/data_updaters/gradient/index.ts +0 -0
  2116. package/extensions/data_updaters/origins/README.md +0 -0
  2117. package/extensions/data_updaters/origins/index.spec.ts +0 -0
  2118. package/extensions/data_updaters/origins/index.ts +0 -0
  2119. package/extensions/index.ts +0 -0
  2120. package/fabric.ts +182 -182
  2121. package/index.node.ts +0 -0
  2122. package/index.ts +0 -0
  2123. package/lib/aligning_guidelines.js +0 -0
  2124. package/lib/centering_guidelines.js +0 -0
  2125. package/lib/event.js +0 -0
  2126. package/package.json +164 -164
  2127. package/playwright.config.ts +0 -0
  2128. package/playwright.setup.ts +0 -0
  2129. package/publish-next.js +0 -0
  2130. package/publish.js +0 -0
  2131. package/rollup.config.mjs +0 -0
  2132. package/scripts/bench-text.js +591 -591
  2133. package/scripts/build.mjs +0 -0
  2134. package/scripts/buildLock.mjs +0 -0
  2135. package/scripts/buildReporter.mjs +0 -0
  2136. package/scripts/buildStats.mjs +0 -0
  2137. package/scripts/dirname.mjs +0 -0
  2138. package/scripts/git.mjs +0 -0
  2139. package/scripts/index.mjs +0 -0
  2140. package/scripts/sandbox.mjs +0 -0
  2141. package/src/ClassRegistry.spec.ts +0 -0
  2142. package/src/ClassRegistry.ts +0 -0
  2143. package/src/Collection.spec.ts +0 -0
  2144. package/src/Collection.ts +0 -0
  2145. package/src/CommonMethods.ts +0 -0
  2146. package/src/EventTypeDefs.ts +0 -0
  2147. package/src/Intersection.spec.ts +0 -0
  2148. package/src/Intersection.ts +0 -0
  2149. package/src/LayoutManager/ActiveSelectionLayoutManager.spec.ts +0 -0
  2150. package/src/LayoutManager/ActiveSelectionLayoutManager.ts +0 -0
  2151. package/src/LayoutManager/LayoutManager.spec.ts +0 -0
  2152. package/src/LayoutManager/LayoutManager.ts +0 -0
  2153. package/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts +0 -0
  2154. package/src/LayoutManager/LayoutStrategies/FitContentLayout.ts +0 -0
  2155. package/src/LayoutManager/LayoutStrategies/FixedLayout.ts +0 -0
  2156. package/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts +0 -0
  2157. package/src/LayoutManager/LayoutStrategies/utils.ts +0 -0
  2158. package/src/LayoutManager/README.md +0 -0
  2159. package/src/LayoutManager/__snapshots__/LayoutManager.spec.ts.snap +0 -0
  2160. package/src/LayoutManager/constants.ts +0 -0
  2161. package/src/LayoutManager/index.ts +0 -0
  2162. package/src/LayoutManager/types.ts +0 -0
  2163. package/src/Observable.spec.ts +0 -0
  2164. package/src/Observable.ts +0 -0
  2165. package/src/Pattern/Pattern.spec.ts +0 -0
  2166. package/src/Pattern/Pattern.ts +0 -0
  2167. package/src/Pattern/index.ts +0 -0
  2168. package/src/Pattern/types.ts +0 -0
  2169. package/src/Point.spec.ts +0 -0
  2170. package/src/Point.ts +0 -0
  2171. package/src/Shadow.spec.ts +0 -0
  2172. package/src/Shadow.ts +0 -0
  2173. package/src/__snapshots__/Shadow.spec.ts.snap +0 -0
  2174. package/src/brushes/BaseBrush.spec.ts +0 -0
  2175. package/src/brushes/BaseBrush.ts +0 -0
  2176. package/src/brushes/CircleBrush.test.ts +0 -0
  2177. package/src/brushes/CircleBrush.ts +0 -0
  2178. package/src/brushes/PatternBrush.ts +0 -0
  2179. package/src/brushes/PencilBrush.spec.ts +0 -0
  2180. package/src/brushes/PencilBrush.ts +0 -0
  2181. package/src/brushes/SprayBrush.ts +0 -0
  2182. package/src/brushes/__snapshots__/PencilBrush.spec.ts.snap +0 -0
  2183. package/src/brushes/typedefs.ts +0 -0
  2184. package/src/cache.spec.ts +0 -0
  2185. package/src/cache.ts +0 -0
  2186. package/src/canvas/Canvas-dispose.spec.ts +0 -0
  2187. package/src/canvas/Canvas-events.spec.ts +0 -0
  2188. package/src/canvas/Canvas.spec.ts +0 -0
  2189. package/src/canvas/Canvas.ts +0 -0
  2190. package/src/canvas/CanvasOptions.ts +0 -0
  2191. package/src/canvas/DOMManagers/CanvasDOMManager.ts +0 -0
  2192. package/src/canvas/DOMManagers/StaticCanvasDOMManager.ts +0 -0
  2193. package/src/canvas/DOMManagers/util.spec.ts +0 -0
  2194. package/src/canvas/DOMManagers/util.ts +0 -0
  2195. package/src/canvas/SelectableCanvas.spec.ts +0 -0
  2196. package/src/canvas/SelectableCanvas.ts +0 -0
  2197. package/src/canvas/StaticCanvas.spec.ts +0 -0
  2198. package/src/canvas/StaticCanvas.ts +0 -0
  2199. package/src/canvas/StaticCanvasOptions.ts +0 -0
  2200. package/src/canvas/TextEditingManager.ts +0 -0
  2201. package/src/canvas/__tests__/SelectableCanvas.spec.ts +0 -0
  2202. package/src/canvas/__tests__/__snapshots__/eventData.test.ts.snap +0 -0
  2203. package/src/canvas/__tests__/eventData.test.ts +0 -0
  2204. package/src/canvas/canvas_gestures.mixin.ts +0 -0
  2205. package/src/color/Color.ts +0 -0
  2206. package/src/color/color.test.ts +0 -0
  2207. package/src/color/color_map.ts +0 -0
  2208. package/src/color/constants.ts +0 -0
  2209. package/src/color/typedefs.ts +0 -0
  2210. package/src/color/util.ts +0 -0
  2211. package/src/config.ts +0 -0
  2212. package/src/constants.ts +0 -0
  2213. package/src/controls/Control-cursor.spec.ts +0 -0
  2214. package/src/controls/Control-handlers.spec.ts +0 -0
  2215. package/src/controls/Control.spec.ts +0 -0
  2216. package/src/controls/Control.ts +0 -0
  2217. package/src/controls/changeHeight.ts +0 -0
  2218. package/src/controls/changeWidth.test.ts +0 -0
  2219. package/src/controls/changeWidth.ts +0 -0
  2220. package/src/controls/commonControls.ts +0 -0
  2221. package/src/controls/controlRendering.ts +0 -0
  2222. package/src/controls/drag.ts +0 -0
  2223. package/src/controls/fireEvent.ts +0 -0
  2224. package/src/controls/index.ts +0 -0
  2225. package/src/controls/pathControl.spec.ts +0 -0
  2226. package/src/controls/pathControl.ts +0 -0
  2227. package/src/controls/polyControl.spec.ts +0 -0
  2228. package/src/controls/polyControl.ts +0 -0
  2229. package/src/controls/rotate.ts +0 -0
  2230. package/src/controls/scale.test.ts +0 -0
  2231. package/src/controls/scale.ts +0 -0
  2232. package/src/controls/scaleSkew.ts +0 -0
  2233. package/src/controls/skew.ts +0 -0
  2234. package/src/controls/util.ts +0 -0
  2235. package/src/controls/wrapWithFireEvent.ts +0 -0
  2236. package/src/controls/wrapWithFixedAnchor.spec.ts +0 -0
  2237. package/src/controls/wrapWithFixedAnchor.ts +0 -0
  2238. package/src/env/browser.ts +0 -0
  2239. package/src/env/env.spec.ts +0 -0
  2240. package/src/env/index.ts +0 -0
  2241. package/src/env/node.ts +0 -0
  2242. package/src/env/types.ts +0 -0
  2243. package/src/filters/BaseFilter.spec.ts +0 -0
  2244. package/src/filters/BaseFilter.ts +0 -0
  2245. package/src/filters/BlendColor.ts +0 -0
  2246. package/src/filters/BlendImage.ts +0 -0
  2247. package/src/filters/Blur.ts +0 -0
  2248. package/src/filters/Boilerplate.ts +0 -0
  2249. package/src/filters/Brightness.ts +0 -0
  2250. package/src/filters/Canvas2dFilterBackend.ts +0 -0
  2251. package/src/filters/ColorMatrix.spec.ts +0 -0
  2252. package/src/filters/ColorMatrix.ts +0 -0
  2253. package/src/filters/ColorMatrixFilters.ts +0 -0
  2254. package/src/filters/Composed.ts +0 -0
  2255. package/src/filters/Contrast.ts +0 -0
  2256. package/src/filters/Convolute.ts +0 -0
  2257. package/src/filters/FilterBackend.ts +0 -0
  2258. package/src/filters/GLProbes/GLProbe.ts +0 -0
  2259. package/src/filters/GLProbes/NodeGLProbe.ts +0 -0
  2260. package/src/filters/GLProbes/WebGLProbe.ts +0 -0
  2261. package/src/filters/Gamma.ts +0 -0
  2262. package/src/filters/Grayscale.ts +0 -0
  2263. package/src/filters/HueRotation.ts +0 -0
  2264. package/src/filters/Invert.ts +0 -0
  2265. package/src/filters/Noise.ts +0 -0
  2266. package/src/filters/Pixelate.ts +0 -0
  2267. package/src/filters/RemoveColor.ts +0 -0
  2268. package/src/filters/Resize.ts +0 -0
  2269. package/src/filters/Saturation.ts +0 -0
  2270. package/src/filters/Vibrance.ts +0 -0
  2271. package/src/filters/WebGLFilterBackend.spec.ts +0 -0
  2272. package/src/filters/WebGLFilterBackend.ts +0 -0
  2273. package/src/filters/filters.ts +0 -0
  2274. package/src/filters/index.ts +0 -0
  2275. package/src/filters/shaders/baseFilter.ts +0 -0
  2276. package/src/filters/shaders/blendColor.ts +0 -0
  2277. package/src/filters/shaders/blendImage.ts +0 -0
  2278. package/src/filters/shaders/blur.ts +0 -0
  2279. package/src/filters/shaders/brightness.ts +0 -0
  2280. package/src/filters/shaders/colorMatrix.ts +0 -0
  2281. package/src/filters/shaders/constrast.ts +0 -0
  2282. package/src/filters/shaders/convolute.ts +0 -0
  2283. package/src/filters/shaders/gamma.ts +0 -0
  2284. package/src/filters/shaders/grayscale.ts +0 -0
  2285. package/src/filters/shaders/invert.ts +0 -0
  2286. package/src/filters/shaders/noise.ts +0 -0
  2287. package/src/filters/shaders/pixelate.ts +0 -0
  2288. package/src/filters/shaders/removeColor.ts +0 -0
  2289. package/src/filters/shaders/saturation.ts +0 -0
  2290. package/src/filters/shaders/vibrance.ts +0 -0
  2291. package/src/filters/typedefs.ts +0 -0
  2292. package/src/filters/utils.ts +0 -0
  2293. package/src/gradient/Gradient.spec.ts +0 -0
  2294. package/src/gradient/Gradient.ts +0 -0
  2295. package/src/gradient/constants.ts +0 -0
  2296. package/src/gradient/index.ts +0 -0
  2297. package/src/gradient/parser/misc.ts +0 -0
  2298. package/src/gradient/parser/parseColorStops.ts +0 -0
  2299. package/src/gradient/parser/parseCoords.ts +0 -0
  2300. package/src/gradient/typedefs.ts +0 -0
  2301. package/src/mixins/eraser_brush.mixin.ts +0 -0
  2302. package/src/parkinglot/canvas_animation.mixin.ts +0 -0
  2303. package/src/parkinglot/straighten.ts +0 -0
  2304. package/src/parser/applyViewboxTransform.spec.ts +0 -0
  2305. package/src/parser/applyViewboxTransform.ts +0 -0
  2306. package/src/parser/attributes.ts +0 -0
  2307. package/src/parser/constants.spec.ts +0 -0
  2308. package/src/parser/constants.ts +0 -0
  2309. package/src/parser/doesSomeParentMatch.ts +0 -0
  2310. package/src/parser/elementMatchesRule.ts +0 -0
  2311. package/src/parser/elements_parser.ts +0 -0
  2312. package/src/parser/getCSSRules.spec.ts +0 -0
  2313. package/src/parser/getCSSRules.ts +0 -0
  2314. package/src/parser/getGlobalStylesForElement.ts +0 -0
  2315. package/src/parser/getGradientDefs.ts +0 -0
  2316. package/src/parser/getMultipleNodes.ts +0 -0
  2317. package/src/parser/getSvgRegex.ts +0 -0
  2318. package/src/parser/getTagName.ts +0 -0
  2319. package/src/parser/hasInvalidAncestor.ts +0 -0
  2320. package/src/parser/loadSVGFromString.test.ts +0 -0
  2321. package/src/parser/loadSVGFromString.ts +0 -0
  2322. package/src/parser/loadSVGFromURL.ts +0 -0
  2323. package/src/parser/normalizeAttr.ts +0 -0
  2324. package/src/parser/normalizeValue.ts +0 -0
  2325. package/src/parser/parseAttributes.ts +0 -0
  2326. package/src/parser/parseFontDeclaration.ts +0 -0
  2327. package/src/parser/parsePointsAttribute.ts +0 -0
  2328. package/src/parser/parseSVGDocument.ts +0 -0
  2329. package/src/parser/parseStyleAttribute.ts +0 -0
  2330. package/src/parser/parseStyleObject.ts +0 -0
  2331. package/src/parser/parseStyleString.ts +0 -0
  2332. package/src/parser/parseTransformAttribute.ts +0 -0
  2333. package/src/parser/parseUseDirectives.test.ts +0 -0
  2334. package/src/parser/parseUseDirectives.ts +0 -0
  2335. package/src/parser/parser.spec.ts +0 -0
  2336. package/src/parser/percent.ts +0 -0
  2337. package/src/parser/recursivelyParseGradientsXlink.ts +0 -0
  2338. package/src/parser/selectorMatches.ts +0 -0
  2339. package/src/parser/setStrokeFillOpacity.ts +0 -0
  2340. package/src/parser/typedefs.ts +0 -0
  2341. package/src/shapes/ActiveSelection.spec.ts +0 -0
  2342. package/src/shapes/ActiveSelection.ts +0 -0
  2343. package/src/shapes/Circle.spec.ts +0 -0
  2344. package/src/shapes/Circle.ts +0 -0
  2345. package/src/shapes/Ellipse.spec.ts +0 -0
  2346. package/src/shapes/Ellipse.ts +0 -0
  2347. package/src/shapes/Group.spec.ts +0 -0
  2348. package/src/shapes/Group.ts +0 -0
  2349. package/src/shapes/IText/DraggableTextDelegate.ts +0 -0
  2350. package/src/shapes/IText/IText-click-behavior.spec.ts +0 -0
  2351. package/src/shapes/IText/IText.test.ts +0 -0
  2352. package/src/shapes/IText/IText.ts +846 -846
  2353. package/src/shapes/IText/ITextBehavior.test.ts +0 -0
  2354. package/src/shapes/IText/ITextBehavior.ts +1187 -1176
  2355. package/src/shapes/IText/ITextClickBehavior.ts +254 -254
  2356. package/src/shapes/IText/ITextKeyBehavior.test.ts +0 -0
  2357. package/src/shapes/IText/ITextKeyBehavior.ts +41 -0
  2358. package/src/shapes/IText/__snapshots__/IText.test.ts.snap +0 -0
  2359. package/src/shapes/IText/__snapshots__/ITextBehavior.test.ts.snap +0 -0
  2360. package/src/shapes/IText/constants.ts +0 -0
  2361. package/src/shapes/Image-filters.spec.ts +0 -0
  2362. package/src/shapes/Image.spec.ts +0 -0
  2363. package/src/shapes/Image.ts +0 -0
  2364. package/src/shapes/Line.spec.ts +0 -0
  2365. package/src/shapes/Line.ts +0 -0
  2366. package/src/shapes/Object/FabricObject.spec.ts +0 -0
  2367. package/src/shapes/Object/FabricObject.ts +0 -0
  2368. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +0 -0
  2369. package/src/shapes/Object/InteractiveObject.spec.ts +0 -0
  2370. package/src/shapes/Object/InteractiveObject.ts +0 -0
  2371. package/src/shapes/Object/Object-clip-path.spec.ts +0 -0
  2372. package/src/shapes/Object/Object-interactivity.spec.ts +0 -0
  2373. package/src/shapes/Object/Object.spec.ts +0 -0
  2374. package/src/shapes/Object/Object.ts +0 -0
  2375. package/src/shapes/Object/ObjectGeometry.spec.ts +0 -0
  2376. package/src/shapes/Object/ObjectGeometry.ts +0 -0
  2377. package/src/shapes/Object/ObjectOrigin.spec.ts +0 -0
  2378. package/src/shapes/Object/ObjectSerialization.spec.ts +0 -0
  2379. package/src/shapes/Object/StackedObject.spec.ts +0 -0
  2380. package/src/shapes/Object/__snapshots__/InteractiveObject.spec.ts.snap +0 -0
  2381. package/src/shapes/Object/defaultValues.ts +0 -0
  2382. package/src/shapes/Object/types/BaseProps.ts +0 -0
  2383. package/src/shapes/Object/types/BorderProps.ts +0 -0
  2384. package/src/shapes/Object/types/ControlProps.ts +0 -0
  2385. package/src/shapes/Object/types/FabricObjectProps.ts +0 -0
  2386. package/src/shapes/Object/types/FillStrokeProps.ts +0 -0
  2387. package/src/shapes/Object/types/LockInteractionProps.ts +0 -0
  2388. package/src/shapes/Object/types/ObjectProps.ts +0 -0
  2389. package/src/shapes/Object/types/ObjectTransformProps.ts +0 -0
  2390. package/src/shapes/Object/types/SerializedObjectProps.ts +0 -0
  2391. package/src/shapes/Object/types/index.ts +0 -0
  2392. package/src/shapes/Path.spec.ts +0 -0
  2393. package/src/shapes/Path.ts +0 -0
  2394. package/src/shapes/Polygon.spec.ts +0 -0
  2395. package/src/shapes/Polygon.ts +0 -0
  2396. package/src/shapes/Polyline.spec.ts +0 -0
  2397. package/src/shapes/Polyline.ts +0 -0
  2398. package/src/shapes/Rect.spec.ts +0 -0
  2399. package/src/shapes/Rect.ts +0 -0
  2400. package/src/shapes/Text/StyledText.spec.ts +0 -0
  2401. package/src/shapes/Text/StyledText.ts +0 -0
  2402. package/src/shapes/Text/Text.spec.ts +0 -0
  2403. package/src/shapes/Text/Text.ts +2459 -2459
  2404. package/src/shapes/Text/TextSVGExportMixin.spec.ts +0 -0
  2405. package/src/shapes/Text/TextSVGExportMixin.ts +0 -0
  2406. package/src/shapes/Text/__snapshots__/Text.spec.ts.snap +0 -0
  2407. package/src/shapes/Text/__snapshots__/TextSVGExportMixin.spec.ts.snap +0 -0
  2408. package/src/shapes/Text/constants.ts +134 -134
  2409. package/src/shapes/Textbox.spec.ts +0 -0
  2410. package/src/shapes/Textbox.ts +1320 -1320
  2411. package/src/shapes/Triangle.spec.ts +0 -0
  2412. package/src/shapes/Triangle.ts +0 -0
  2413. package/src/shapes/__snapshots__/Image.spec.ts.snap +0 -0
  2414. package/src/shapes/__snapshots__/Textbox.spec.ts.snap +0 -0
  2415. package/src/text/browserLines.ts +233 -233
  2416. package/src/text/ellipsis.ts +516 -516
  2417. package/src/text/hitTest.ts +623 -623
  2418. package/src/text/layout.ts +586 -586
  2419. package/src/text/measure.ts +626 -626
  2420. package/src/text/overlayEditor.ts +1047 -1047
  2421. package/src/text/unicode.ts +454 -454
  2422. package/src/typedefs.ts +0 -0
  2423. package/src/util/__snapshots__/index.spec.ts.snap +0 -0
  2424. package/src/util/animation/AnimationBase.ts +0 -0
  2425. package/src/util/animation/AnimationFrameProvider.ts +0 -0
  2426. package/src/util/animation/AnimationRegistry.ts +0 -0
  2427. package/src/util/animation/ArrayAnimation.ts +0 -0
  2428. package/src/util/animation/ColorAnimation.ts +0 -0
  2429. package/src/util/animation/ValueAnimation.ts +0 -0
  2430. package/src/util/animation/__snapshots__/animations.spec.ts.snap +0 -0
  2431. package/src/util/animation/animate.ts +0 -0
  2432. package/src/util/animation/animations.spec.ts +0 -0
  2433. package/src/util/animation/easing.ts +0 -0
  2434. package/src/util/animation/index.ts +0 -0
  2435. package/src/util/animation/types.ts +0 -0
  2436. package/src/util/applyMixins.ts +0 -0
  2437. package/src/util/dom_event.spec.ts +0 -0
  2438. package/src/util/dom_event.ts +0 -0
  2439. package/src/util/dom_misc.ts +0 -0
  2440. package/src/util/index.spec.ts +0 -0
  2441. package/src/util/index.ts +0 -0
  2442. package/src/util/internals/applyCanvasTransform.ts +0 -0
  2443. package/src/util/internals/cleanupSvgAttribute.test.ts +0 -0
  2444. package/src/util/internals/cleanupSvgAttribute.ts +0 -0
  2445. package/src/util/internals/cloneStyles.spec.ts +0 -0
  2446. package/src/util/internals/cloneStyles.ts +0 -0
  2447. package/src/util/internals/console.ts +0 -0
  2448. package/src/util/internals/dom_style.spec.ts +0 -0
  2449. package/src/util/internals/dom_style.ts +0 -0
  2450. package/src/util/internals/findRight.ts +0 -0
  2451. package/src/util/internals/getRandomInt.test.ts +0 -0
  2452. package/src/util/internals/getRandomInt.ts +0 -0
  2453. package/src/util/internals/ifNaN.ts +0 -0
  2454. package/src/util/internals/removeFromArray.spec.ts +0 -0
  2455. package/src/util/internals/removeFromArray.ts +0 -0
  2456. package/src/util/internals/uid.ts +0 -0
  2457. package/src/util/lang_string.spec.ts +0 -0
  2458. package/src/util/lang_string.ts +0 -0
  2459. package/src/util/misc/boundingBoxFromPoints.spec.ts +0 -0
  2460. package/src/util/misc/boundingBoxFromPoints.ts +0 -0
  2461. package/src/util/misc/capValue.spec.ts +0 -0
  2462. package/src/util/misc/capValue.ts +0 -0
  2463. package/src/util/misc/cornerRadius.spec.ts +0 -0
  2464. package/src/util/misc/cornerRadius.ts +0 -0
  2465. package/src/util/misc/cos.spec.ts +0 -0
  2466. package/src/util/misc/cos.ts +0 -0
  2467. package/src/util/misc/dom.spec.ts +0 -0
  2468. package/src/util/misc/dom.ts +0 -0
  2469. package/src/util/misc/findScaleTo.spec.ts +0 -0
  2470. package/src/util/misc/findScaleTo.ts +0 -0
  2471. package/src/util/misc/groupSVGElements.spec.ts +0 -0
  2472. package/src/util/misc/groupSVGElements.ts +0 -0
  2473. package/src/util/misc/isTransparent.ts +0 -0
  2474. package/src/util/misc/matrix.spec.ts +0 -0
  2475. package/src/util/misc/matrix.ts +0 -0
  2476. package/src/util/misc/mergeClipPaths.spec.ts +0 -0
  2477. package/src/util/misc/mergeClipPaths.ts +0 -0
  2478. package/src/util/misc/objectEnlive.spec.ts +0 -0
  2479. package/src/util/misc/objectEnlive.ts +0 -0
  2480. package/src/util/misc/objectTransforms.spec.ts +0 -0
  2481. package/src/util/misc/objectTransforms.ts +0 -0
  2482. package/src/util/misc/pick.spec.ts +0 -0
  2483. package/src/util/misc/pick.ts +0 -0
  2484. package/src/util/misc/planeChange.spec.ts +0 -0
  2485. package/src/util/misc/planeChange.ts +0 -0
  2486. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +0 -0
  2487. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +0 -0
  2488. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +0 -0
  2489. package/src/util/misc/projectStroke/index.ts +0 -0
  2490. package/src/util/misc/projectStroke/types.ts +0 -0
  2491. package/src/util/misc/radiansDegreesConversion.spec.ts +0 -0
  2492. package/src/util/misc/radiansDegreesConversion.ts +0 -0
  2493. package/src/util/misc/resolveOrigin.ts +0 -0
  2494. package/src/util/misc/sin.ts +0 -0
  2495. package/src/util/misc/svgExport.ts +0 -0
  2496. package/src/util/misc/svgParsing.spec.ts +0 -0
  2497. package/src/util/misc/svgParsing.ts +0 -0
  2498. package/src/util/misc/textStyles.ts +0 -0
  2499. package/src/util/misc/toFixed.spec.ts +0 -0
  2500. package/src/util/misc/toFixed.ts +0 -0
  2501. package/src/util/misc/vectors.spec.ts +0 -0
  2502. package/src/util/misc/vectors.ts +0 -0
  2503. package/src/util/path/__snapshots__/index.spec.ts.snap +0 -0
  2504. package/src/util/path/index.spec.ts +0 -0
  2505. package/src/util/path/index.ts +0 -0
  2506. package/src/util/path/regex.ts +0 -0
  2507. package/src/util/path/typechecks.ts +0 -0
  2508. package/src/util/path/typedefs.ts +0 -0
  2509. package/src/util/transform_matrix_removal.ts +0 -0
  2510. package/src/util/typeAssertions.spec.ts +0 -0
  2511. package/src/util/typeAssertions.ts +0 -0
  2512. package/tsconfig-extensions.json +0 -0
  2513. package/tsconfig.json +0 -0
  2514. package/tsconfig.spec.json +0 -0
  2515. package/typedoc.config.json +0 -0
  2516. package/vitest.config.ts +0 -0
  2517. package/vitest.d.ts +0 -0
  2518. package/vitest.env.d.ts +0 -0
  2519. package/vitest.extend.ts +0 -0
  2520. package/vitest.setup.ts +0 -0
  2521. package/dist/src/text/examples/arabicTextExample.d.ts +0 -60
  2522. package/dist/src/text/examples/arabicTextExample.d.ts.map +0 -1
  2523. package/dist/src/text/scriptUtils.d.ts +0 -142
  2524. package/dist/src/text/scriptUtils.d.ts.map +0 -1
  2525. package/dist/src/text/scriptUtils.min.mjs +0 -2
  2526. package/dist/src/text/scriptUtils.min.mjs.map +0 -1
  2527. package/dist/src/text/scriptUtils.mjs +0 -212
  2528. package/dist/src/text/scriptUtils.mjs.map +0 -1
  2529. package/dist-extensions/src/shapes/CustomLine.d.ts +0 -10
  2530. package/dist-extensions/src/shapes/CustomLine.d.ts.map +0 -1
  2531. package/dist-extensions/src/text/scriptUtils.d.ts +0 -142
  2532. package/dist-extensions/src/text/scriptUtils.d.ts.map +0 -1
  2533. package/fabric-test-editor.html +0 -3552
  2534. package/fabric-test2.html +0 -647
  2535. package/fonts/STV Bold.ttf +0 -0
  2536. package/fonts/STV Light.ttf +0 -0
  2537. package/fonts/STV Regular.ttf +0 -0
@@ -1,12 +1,12 @@
1
- /**
2
- * Browser Line Break Extraction
3
- *
4
- * Captures exact line breaks as rendered by the browser to ensure
5
- * pixel-perfect consistency between DOM editing and canvas rendering.
1
+ /**
2
+ * Browser Line Break Extraction
3
+ *
4
+ * Captures exact line breaks as rendered by the browser to ensure
5
+ * pixel-perfect consistency between DOM editing and canvas rendering.
6
6
  */
7
7
 
8
- /**
9
- * Segment text into graphemes safely using Intl.Segmenter or fallback
8
+ /**
9
+ * Segment text into graphemes safely using Intl.Segmenter or fallback
10
10
  */
11
11
  function segmentIntoGraphemes(text) {
12
12
  if (typeof Intl !== 'undefined' && Intl.Segmenter) {
@@ -20,9 +20,9 @@ function segmentIntoGraphemes(text) {
20
20
  return Array.from(text);
21
21
  }
22
22
 
23
- /**
24
- * Extract line break information from a textarea by creating a mirror element
25
- * with identical computed styles and measuring grapheme positions.
23
+ /**
24
+ * Extract line break information from a textarea by creating a mirror element
25
+ * with identical computed styles and measuring grapheme positions.
26
26
  */
27
27
  function extractLinesFromDOM(textarea) {
28
28
  const text = textarea.value;
@@ -117,16 +117,16 @@ function extractLinesFromDOM(textarea) {
117
117
  }
118
118
  }
119
119
 
120
- /**
121
- * Create a hash of layout-affecting properties to detect when browser lines are still valid
120
+ /**
121
+ * Create a hash of layout-affecting properties to detect when browser lines are still valid
122
122
  */
123
123
  function createLayoutHash(target) {
124
124
  const properties = [target.text, target.width, target.height, target.fontFamily, target.fontSize, target.fontWeight, target.fontStyle, target.lineHeight, target.charSpacing, target.textAlign, target.direction];
125
125
  return properties.map(p => String(p)).join('|');
126
126
  }
127
127
 
128
- /**
129
- * Check if stored browser lines are still valid for the current target state
128
+ /**
129
+ * Check if stored browser lines are still valid for the current target state
130
130
  */
131
131
  function areBrowserLinesValid(target, storedHash) {
132
132
  if (!storedHash || !target.__lastBrowserLines) {
@@ -136,24 +136,24 @@ function areBrowserLinesValid(target, storedHash) {
136
136
  return currentHash === storedHash;
137
137
  }
138
138
 
139
- /**
140
- * Store browser lines on a target object with validity hash
139
+ /**
140
+ * Store browser lines on a target object with validity hash
141
141
  */
142
142
  function storeBrowserLines(target, lines, layoutHash) {
143
143
  target.__lastBrowserLines = lines;
144
144
  target.__lastBrowserLinesHash = createLayoutHash(target);
145
145
  }
146
146
 
147
- /**
148
- * Clear stored browser lines from a target object
147
+ /**
148
+ * Clear stored browser lines from a target object
149
149
  */
150
150
  function clearBrowserLines(target) {
151
151
  delete target.__lastBrowserLines;
152
152
  delete target.__lastBrowserLinesHash;
153
153
  }
154
154
 
155
- /**
156
- * Get stored browser lines if they're still valid
155
+ /**
156
+ * Get stored browser lines if they're still valid
157
157
  */
158
158
  function getBrowserLines(target) {
159
159
  const lines = target.__lastBrowserLines;
@@ -1 +1 @@
1
- {"version":3,"file":"browserLines.mjs","sources":["../../../src/text/browserLines.ts"],"sourcesContent":["/**\r\n * Browser Line Break Extraction\r\n * \r\n * Captures exact line breaks as rendered by the browser to ensure\r\n * pixel-perfect consistency between DOM editing and canvas rendering.\r\n */\r\n\r\nexport interface BrowserLine {\r\n text: string;\r\n start: number; // character index in original text\r\n end: number; // character index in original text (exclusive)\r\n}\r\n\r\nexport interface BrowserLinesResult {\r\n lines: BrowserLine[];\r\n totalWidth: number;\r\n totalHeight: number;\r\n}\r\n\r\n/**\r\n * Segment text into graphemes safely using Intl.Segmenter or fallback\r\n */\r\nfunction segmentIntoGraphemes(text: string): string[] {\r\n if (typeof Intl !== 'undefined' && Intl.Segmenter) {\r\n const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\r\n return Array.from(segmenter.segment(text), s => s.segment);\r\n }\r\n \r\n // Fallback: Use Array.from which handles basic Unicode correctly\r\n return Array.from(text);\r\n}\r\n\r\n/**\r\n * Extract line break information from a textarea by creating a mirror element\r\n * with identical computed styles and measuring grapheme positions.\r\n */\r\nexport function extractLinesFromDOM(textarea: HTMLTextAreaElement): BrowserLinesResult {\r\n const text = textarea.value;\r\n if (!text) {\r\n return {\r\n lines: [],\r\n totalWidth: 0,\r\n totalHeight: 0\r\n };\r\n }\r\n\r\n // Get computed styles from the textarea\r\n const computedStyle = getComputedStyle(textarea);\r\n const container = textarea.parentElement;\r\n if (!container) {\r\n throw new Error('Textarea must be in DOM to extract lines');\r\n }\r\n\r\n // Create mirror div with identical styling\r\n const mirror = document.createElement('div');\r\n mirror.style.position = 'absolute';\r\n mirror.style.left = '-9999px';\r\n mirror.style.top = '-9999px';\r\n mirror.style.visibility = 'hidden';\r\n mirror.style.pointerEvents = 'none';\r\n \r\n // Copy all relevant text styling\r\n const stylesToCopy = [\r\n 'fontSize',\r\n 'fontFamily',\r\n 'fontWeight',\r\n 'fontStyle',\r\n 'lineHeight',\r\n 'letterSpacing',\r\n 'wordSpacing',\r\n 'textAlign',\r\n 'textTransform',\r\n 'whiteSpace',\r\n 'overflowWrap',\r\n 'wordBreak',\r\n 'direction',\r\n 'unicodeBidi',\r\n 'width',\r\n 'height',\r\n 'maxWidth',\r\n 'maxHeight',\r\n 'minWidth',\r\n 'minHeight',\r\n 'padding',\r\n 'paddingTop',\r\n 'paddingRight',\r\n 'paddingBottom',\r\n 'paddingLeft',\r\n 'border',\r\n 'borderTop',\r\n 'borderRight',\r\n 'borderBottom',\r\n 'borderLeft',\r\n 'boxSizing',\r\n ];\r\n \r\n stylesToCopy.forEach(prop => {\r\n (mirror.style as any)[prop] = (computedStyle as any)[prop];\r\n });\r\n\r\n // Ensure the mirror has the same dimensions and overflow behavior as textarea\r\n mirror.style.overflow = 'hidden';\r\n mirror.style.resize = 'none';\r\n\r\n container.appendChild(mirror);\r\n\r\n try {\r\n // Segment text into graphemes\r\n const graphemes = segmentIntoGraphemes(text);\r\n const spans: HTMLSpanElement[] = [];\r\n \r\n // Create a span for each grapheme\r\n graphemes.forEach((grapheme, index) => {\r\n const span = document.createElement('span');\r\n span.textContent = grapheme;\r\n span.setAttribute('data-index', index.toString());\r\n mirror.appendChild(span);\r\n spans.push(span);\r\n });\r\n\r\n // Group spans by their offsetTop (line position)\r\n const lineGroups = new Map<number, { spans: HTMLSpanElement[], indices: number[] }>();\r\n \r\n spans.forEach((span, index) => {\r\n const top = span.offsetTop;\r\n if (!lineGroups.has(top)) {\r\n lineGroups.set(top, { spans: [], indices: [] });\r\n }\r\n lineGroups.get(top)!.spans.push(span);\r\n lineGroups.get(top)!.indices.push(index);\r\n });\r\n\r\n // Convert line groups to BrowserLine objects\r\n const lines: BrowserLine[] = [];\r\n const sortedTops = Array.from(lineGroups.keys()).sort((a, b) => a - b);\r\n \r\n sortedTops.forEach(top => {\r\n const group = lineGroups.get(top)!;\r\n const sortedIndices = group.indices.sort((a, b) => a - b);\r\n \r\n const start = sortedIndices[0];\r\n const end = sortedIndices[sortedIndices.length - 1] + 1;\r\n const lineText = graphemes.slice(start, end).join('');\r\n \r\n lines.push({\r\n text: lineText,\r\n start,\r\n end,\r\n });\r\n });\r\n\r\n // Calculate total dimensions\r\n const totalWidth = Math.max(...spans.map(span => span.offsetLeft + span.offsetWidth));\r\n const totalHeight = spans.length > 0 ? \r\n Math.max(...spans.map(span => span.offsetTop + span.offsetHeight)) : 0;\r\n\r\n return {\r\n lines,\r\n totalWidth,\r\n totalHeight\r\n };\r\n \r\n } finally {\r\n // Clean up mirror element\r\n container.removeChild(mirror);\r\n }\r\n}\r\n\r\n/**\r\n * Create a hash of layout-affecting properties to detect when browser lines are still valid\r\n */\r\nexport function createLayoutHash(target: any): string {\r\n const properties = [\r\n target.text,\r\n target.width,\r\n target.height,\r\n target.fontFamily,\r\n target.fontSize,\r\n target.fontWeight,\r\n target.fontStyle,\r\n target.lineHeight,\r\n target.charSpacing,\r\n target.textAlign,\r\n target.direction,\r\n ];\r\n \r\n return properties.map(p => String(p)).join('|');\r\n}\r\n\r\n/**\r\n * Check if stored browser lines are still valid for the current target state\r\n */\r\nexport function areBrowserLinesValid(target: any, storedHash?: string): boolean {\r\n if (!storedHash || !(target as any).__lastBrowserLines) {\r\n return false;\r\n }\r\n \r\n const currentHash = createLayoutHash(target);\r\n return currentHash === storedHash;\r\n}\r\n\r\n/**\r\n * Store browser lines on a target object with validity hash\r\n */\r\nexport function storeBrowserLines(\r\n target: any, \r\n lines: BrowserLine[], \r\n layoutHash?: string\r\n): void {\r\n (target as any).__lastBrowserLines = lines;\r\n (target as any).__lastBrowserLinesHash = layoutHash || createLayoutHash(target);\r\n}\r\n\r\n/**\r\n * Clear stored browser lines from a target object\r\n */\r\nexport function clearBrowserLines(target: any): void {\r\n delete (target as any).__lastBrowserLines;\r\n delete (target as any).__lastBrowserLinesHash;\r\n}\r\n\r\n/**\r\n * Get stored browser lines if they're still valid\r\n */\r\nexport function getBrowserLines(target: any): BrowserLine[] | null {\r\n const lines = (target as any).__lastBrowserLines;\r\n const hash = (target as any).__lastBrowserLinesHash;\r\n \r\n if (lines && areBrowserLinesValid(target, hash)) {\r\n return lines;\r\n }\r\n \r\n return null;\r\n}"],"names":["segmentIntoGraphemes","text","Intl","Segmenter","segmenter","undefined","granularity","Array","from","segment","s","extractLinesFromDOM","textarea","value","lines","totalWidth","totalHeight","computedStyle","getComputedStyle","container","parentElement","Error","mirror","document","createElement","style","position","left","top","visibility","pointerEvents","stylesToCopy","forEach","prop","overflow","resize","appendChild","graphemes","spans","grapheme","index","span","textContent","setAttribute","toString","push","lineGroups","Map","offsetTop","has","set","indices","get","sortedTops","keys","sort","a","b","group","sortedIndices","start","end","length","lineText","slice","join","Math","max","map","offsetLeft","offsetWidth","offsetHeight","removeChild","createLayoutHash","target","properties","width","height","fontFamily","fontSize","fontWeight","fontStyle","lineHeight","charSpacing","textAlign","direction","p","String","areBrowserLinesValid","storedHash","__lastBrowserLines","currentHash","storeBrowserLines","layoutHash","__lastBrowserLinesHash","clearBrowserLines","getBrowserLines","hash"],"mappings":"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"}
1
+ {"version":3,"file":"browserLines.mjs","sources":["../../../src/text/browserLines.ts"],"sourcesContent":["/**\n * Browser Line Break Extraction\n * \n * Captures exact line breaks as rendered by the browser to ensure\n * pixel-perfect consistency between DOM editing and canvas rendering.\n */\n\nexport interface BrowserLine {\n text: string;\n start: number; // character index in original text\n end: number; // character index in original text (exclusive)\n}\n\nexport interface BrowserLinesResult {\n lines: BrowserLine[];\n totalWidth: number;\n totalHeight: number;\n}\n\n/**\n * Segment text into graphemes safely using Intl.Segmenter or fallback\n */\nfunction segmentIntoGraphemes(text: string): string[] {\n if (typeof Intl !== 'undefined' && Intl.Segmenter) {\n const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n return Array.from(segmenter.segment(text), s => s.segment);\n }\n \n // Fallback: Use Array.from which handles basic Unicode correctly\n return Array.from(text);\n}\n\n/**\n * Extract line break information from a textarea by creating a mirror element\n * with identical computed styles and measuring grapheme positions.\n */\nexport function extractLinesFromDOM(textarea: HTMLTextAreaElement): BrowserLinesResult {\n const text = textarea.value;\n if (!text) {\n return {\n lines: [],\n totalWidth: 0,\n totalHeight: 0\n };\n }\n\n // Get computed styles from the textarea\n const computedStyle = getComputedStyle(textarea);\n const container = textarea.parentElement;\n if (!container) {\n throw new Error('Textarea must be in DOM to extract lines');\n }\n\n // Create mirror div with identical styling\n const mirror = document.createElement('div');\n mirror.style.position = 'absolute';\n mirror.style.left = '-9999px';\n mirror.style.top = '-9999px';\n mirror.style.visibility = 'hidden';\n mirror.style.pointerEvents = 'none';\n \n // Copy all relevant text styling\n const stylesToCopy = [\n 'fontSize',\n 'fontFamily',\n 'fontWeight',\n 'fontStyle',\n 'lineHeight',\n 'letterSpacing',\n 'wordSpacing',\n 'textAlign',\n 'textTransform',\n 'whiteSpace',\n 'overflowWrap',\n 'wordBreak',\n 'direction',\n 'unicodeBidi',\n 'width',\n 'height',\n 'maxWidth',\n 'maxHeight',\n 'minWidth',\n 'minHeight',\n 'padding',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n 'border',\n 'borderTop',\n 'borderRight',\n 'borderBottom',\n 'borderLeft',\n 'boxSizing',\n ];\n \n stylesToCopy.forEach(prop => {\n (mirror.style as any)[prop] = (computedStyle as any)[prop];\n });\n\n // Ensure the mirror has the same dimensions and overflow behavior as textarea\n mirror.style.overflow = 'hidden';\n mirror.style.resize = 'none';\n\n container.appendChild(mirror);\n\n try {\n // Segment text into graphemes\n const graphemes = segmentIntoGraphemes(text);\n const spans: HTMLSpanElement[] = [];\n \n // Create a span for each grapheme\n graphemes.forEach((grapheme, index) => {\n const span = document.createElement('span');\n span.textContent = grapheme;\n span.setAttribute('data-index', index.toString());\n mirror.appendChild(span);\n spans.push(span);\n });\n\n // Group spans by their offsetTop (line position)\n const lineGroups = new Map<number, { spans: HTMLSpanElement[], indices: number[] }>();\n \n spans.forEach((span, index) => {\n const top = span.offsetTop;\n if (!lineGroups.has(top)) {\n lineGroups.set(top, { spans: [], indices: [] });\n }\n lineGroups.get(top)!.spans.push(span);\n lineGroups.get(top)!.indices.push(index);\n });\n\n // Convert line groups to BrowserLine objects\n const lines: BrowserLine[] = [];\n const sortedTops = Array.from(lineGroups.keys()).sort((a, b) => a - b);\n \n sortedTops.forEach(top => {\n const group = lineGroups.get(top)!;\n const sortedIndices = group.indices.sort((a, b) => a - b);\n \n const start = sortedIndices[0];\n const end = sortedIndices[sortedIndices.length - 1] + 1;\n const lineText = graphemes.slice(start, end).join('');\n \n lines.push({\n text: lineText,\n start,\n end,\n });\n });\n\n // Calculate total dimensions\n const totalWidth = Math.max(...spans.map(span => span.offsetLeft + span.offsetWidth));\n const totalHeight = spans.length > 0 ? \n Math.max(...spans.map(span => span.offsetTop + span.offsetHeight)) : 0;\n\n return {\n lines,\n totalWidth,\n totalHeight\n };\n \n } finally {\n // Clean up mirror element\n container.removeChild(mirror);\n }\n}\n\n/**\n * Create a hash of layout-affecting properties to detect when browser lines are still valid\n */\nexport function createLayoutHash(target: any): string {\n const properties = [\n target.text,\n target.width,\n target.height,\n target.fontFamily,\n target.fontSize,\n target.fontWeight,\n target.fontStyle,\n target.lineHeight,\n target.charSpacing,\n target.textAlign,\n target.direction,\n ];\n \n return properties.map(p => String(p)).join('|');\n}\n\n/**\n * Check if stored browser lines are still valid for the current target state\n */\nexport function areBrowserLinesValid(target: any, storedHash?: string): boolean {\n if (!storedHash || !(target as any).__lastBrowserLines) {\n return false;\n }\n \n const currentHash = createLayoutHash(target);\n return currentHash === storedHash;\n}\n\n/**\n * Store browser lines on a target object with validity hash\n */\nexport function storeBrowserLines(\n target: any, \n lines: BrowserLine[], \n layoutHash?: string\n): void {\n (target as any).__lastBrowserLines = lines;\n (target as any).__lastBrowserLinesHash = layoutHash || createLayoutHash(target);\n}\n\n/**\n * Clear stored browser lines from a target object\n */\nexport function clearBrowserLines(target: any): void {\n delete (target as any).__lastBrowserLines;\n delete (target as any).__lastBrowserLinesHash;\n}\n\n/**\n * Get stored browser lines if they're still valid\n */\nexport function getBrowserLines(target: any): BrowserLine[] | null {\n const lines = (target as any).__lastBrowserLines;\n const hash = (target as any).__lastBrowserLinesHash;\n \n if (lines && areBrowserLinesValid(target, hash)) {\n return lines;\n }\n \n return null;\n}"],"names":["segmentIntoGraphemes","text","Intl","Segmenter","segmenter","undefined","granularity","Array","from","segment","s","extractLinesFromDOM","textarea","value","lines","totalWidth","totalHeight","computedStyle","getComputedStyle","container","parentElement","Error","mirror","document","createElement","style","position","left","top","visibility","pointerEvents","stylesToCopy","forEach","prop","overflow","resize","appendChild","graphemes","spans","grapheme","index","span","textContent","setAttribute","toString","push","lineGroups","Map","offsetTop","has","set","indices","get","sortedTops","keys","sort","a","b","group","sortedIndices","start","end","length","lineText","slice","join","Math","max","map","offsetLeft","offsetWidth","offsetHeight","removeChild","createLayoutHash","target","properties","width","height","fontFamily","fontSize","fontWeight","fontStyle","lineHeight","charSpacing","textAlign","direction","p","String","areBrowserLinesValid","storedHash","__lastBrowserLines","currentHash","storeBrowserLines","layoutHash","__lastBrowserLinesHash","clearBrowserLines","getBrowserLines","hash"],"mappings":"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"}
File without changes
File without changes
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"ellipsis.min.mjs","sources":["../../../src/text/ellipsis.ts"],"sourcesContent":["/**\r\n * Ellipsis Text Truncation System\r\n * \r\n * Implements text truncation with ellipsis when content exceeds bounds,\r\n * using binary search for optimal truncation points.\r\n */\r\n\r\nimport { segmentGraphemes } from './unicode';\r\n\r\nexport interface EllipsisOptions {\r\n maxWidth?: number;\r\n maxHeight?: number;\r\n ellipsisChar: string; // Default: \"…\"\r\n measureFn: (text: string) => number | { width: number; height: number };\r\n}\r\n\r\nexport interface EllipsisResult {\r\n truncatedText: string;\r\n isTruncated: boolean;\r\n truncationIndex: number; // Grapheme index where truncation occurred\r\n ellipsisWidth: number;\r\n originalLength: number;\r\n}\r\n\r\n/**\r\n * Apply ellipsis truncation to text based on width/height constraints\r\n */\r\nexport function applyEllipsis(\r\n text: string,\r\n options: EllipsisOptions\r\n): EllipsisResult {\r\n const { maxWidth, maxHeight, ellipsisChar, measureFn } = options;\r\n \r\n if (!text) {\r\n return {\r\n truncatedText: '',\r\n isTruncated: false,\r\n truncationIndex: 0,\r\n ellipsisWidth: 0,\r\n originalLength: 0,\r\n };\r\n }\r\n\r\n // Measure ellipsis width\r\n const ellipsisWidth = typeof measureFn(ellipsisChar) === 'number' \r\n ? measureFn(ellipsisChar) as number\r\n : (measureFn(ellipsisChar) as { width: number }).width;\r\n\r\n // Check if truncation is needed\r\n const originalMeasurement = measureFn(text);\r\n const originalWidth = typeof originalMeasurement === 'number' \r\n ? originalMeasurement \r\n : originalMeasurement.width;\r\n const originalHeight = typeof originalMeasurement === 'number'\r\n ? 0 // Height constraint not applicable for single dimension measure\r\n : originalMeasurement.height;\r\n\r\n let needsTruncation = false;\r\n if (maxWidth && originalWidth > maxWidth) needsTruncation = true;\r\n if (maxHeight && originalHeight > maxHeight) needsTruncation = true;\r\n\r\n if (!needsTruncation) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: segmentGraphemes(text).length,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n }\r\n\r\n // Apply width-based truncation\r\n if (maxWidth) {\r\n const widthTruncated = truncateByWidth(text, maxWidth, ellipsisChar, ellipsisWidth, measureFn);\r\n return {\r\n ...widthTruncated,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n }\r\n\r\n // Apply height-based truncation (for multi-line text)\r\n if (maxHeight) {\r\n const heightTruncated = truncateByHeight(text, maxHeight, ellipsisChar, measureFn);\r\n return {\r\n ...heightTruncated,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n }\r\n\r\n // Fallback - should not reach here\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: segmentGraphemes(text).length,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate text based on width constraint using binary search\r\n */\r\nfunction truncateByWidth(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n ellipsisWidth: number,\r\n measureFn: (text: string) => number | { width: number; height: number }\r\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n // Binary search for optimal truncation point\r\n let low = 0;\r\n let high = graphemes.length;\r\n let bestFit = 0;\r\n\r\n while (low <= high) {\r\n const mid = Math.floor((low + high) / 2);\r\n const candidate = graphemes.slice(0, mid).join('');\r\n \r\n const measurement = measureFn(candidate);\r\n const candidateWidth = typeof measurement === 'number' \r\n ? measurement \r\n : measurement.width;\r\n\r\n if (candidateWidth <= availableWidth) {\r\n bestFit = mid;\r\n low = mid + 1;\r\n } else {\r\n high = mid - 1;\r\n }\r\n }\r\n\r\n // Handle edge cases\r\n if (bestFit === 0) {\r\n // Even single character doesn't fit - return ellipsis only\r\n return {\r\n truncatedText: ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: 0,\r\n };\r\n }\r\n\r\n if (bestFit === graphemes.length) {\r\n // Everything fits even with ellipsis space reserved\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n };\r\n }\r\n\r\n // Create truncated text with ellipsis\r\n const truncatedText = graphemes.slice(0, bestFit).join('') + ellipsisChar;\r\n\r\n return {\r\n truncatedText,\r\n isTruncated: true,\r\n truncationIndex: bestFit,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate text based on height constraint\r\n */\r\nfunction truncateByHeight(\r\n text: string,\r\n maxHeight: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number | { width: number; height: number }\r\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\r\n const lines = text.split('\\n');\r\n let accumulatedText = '';\r\n let lineIndex = 0;\r\n\r\n // Add lines until height exceeded\r\n for (lineIndex = 0; lineIndex < lines.length; lineIndex++) {\r\n const testText = lineIndex === 0 \r\n ? lines[lineIndex] \r\n : accumulatedText + '\\n' + lines[lineIndex];\r\n \r\n const measurement = measureFn(testText);\r\n const height = typeof measurement === 'number' \r\n ? 0 // Single dimension measure doesn't provide height\r\n : measurement.height;\r\n\r\n if (height > maxHeight && accumulatedText) {\r\n // Previous text fits, current doesn't - truncate at previous\r\n break;\r\n }\r\n\r\n accumulatedText = testText;\r\n\r\n // If this is the last line and it fits, no truncation needed\r\n if (lineIndex === lines.length - 1) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: segmentGraphemes(text).length,\r\n };\r\n }\r\n }\r\n\r\n // If we need to truncate the last fitting line to add ellipsis\r\n if (lineIndex > 0) {\r\n const lastFittingLine = lines[lineIndex - 1];\r\n const withEllipsis = lastFittingLine + ellipsisChar;\r\n const graphemes = segmentGraphemes(accumulatedText);\r\n\r\n return {\r\n truncatedText: accumulatedText.replace(/[^\\n]*$/, withEllipsis),\r\n isTruncated: true,\r\n truncationIndex: graphemes.length - segmentGraphemes(lastFittingLine).length + segmentGraphemes(withEllipsis).length - 1,\r\n };\r\n }\r\n\r\n // First line doesn't fit - try width-based truncation on first line\r\n const firstLineWidth = typeof measureFn === 'function' \r\n ? (measureFn(lines[0]) as any)?.width || 1000\r\n : 1000; // Fallback width\r\n\r\n return truncateByWidth(lines[0], firstLineWidth, ellipsisChar, 0, measureFn);\r\n}\r\n\r\n/**\r\n * Find optimal truncation point using binary search\r\n */\r\nexport function findTruncationPoint(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisWidth: number,\r\n measureFn: (text: string) => number\r\n): number {\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n let low = 0;\r\n let high = graphemes.length;\r\n\r\n while (low < high) {\r\n const mid = Math.floor((low + high + 1) / 2);\r\n const candidate = graphemes.slice(0, mid).join('');\r\n const width = measureFn(candidate);\r\n\r\n if (width <= availableWidth) {\r\n low = mid;\r\n } else {\r\n high = mid - 1;\r\n }\r\n }\r\n\r\n return low;\r\n}\r\n\r\n/**\r\n * Smart truncation that tries to break at word boundaries\r\n */\r\nexport function smartTruncate(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n \r\n // First try exact truncation\r\n const exactPoint = findTruncationPoint(text, maxWidth, ellipsisWidth, measureFn);\r\n const graphemes = segmentGraphemes(text);\r\n \r\n if (exactPoint === 0) {\r\n return {\r\n truncatedText: ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: 0,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n if (exactPoint >= graphemes.length) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n // Try to find a word boundary before the exact point\r\n const textUpToPoint = graphemes.slice(0, exactPoint).join('');\r\n const words = textUpToPoint.split(/(\\s+)/);\r\n \r\n if (words.length > 1) {\r\n // Try truncating at last complete word\r\n const wordsWithoutLast = words.slice(0, -2); // Remove last word and space\r\n const wordBoundaryText = wordsWithoutLast.join('');\r\n const wordBoundaryWidth = measureFn(wordBoundaryText);\r\n \r\n if (wordBoundaryWidth + ellipsisWidth <= maxWidth && wordBoundaryText.trim()) {\r\n const wordBoundaryGraphemes = segmentGraphemes(wordBoundaryText);\r\n return {\r\n truncatedText: wordBoundaryText.trim() + ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: wordBoundaryGraphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n }\r\n\r\n // Fall back to character truncation\r\n return {\r\n truncatedText: graphemes.slice(0, exactPoint).join('') + ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: exactPoint,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate multi-line text with ellipsis on the last visible line\r\n */\r\nexport function truncateMultiline(\r\n lines: string[],\r\n maxLines: number,\r\n ellipsisChar: string,\r\n maxWidth?: number,\r\n measureFn?: (text: string) => number\r\n): {\r\n truncatedLines: string[];\r\n isTruncated: boolean;\r\n lastLineIndex: number;\r\n} {\r\n if (lines.length <= maxLines) {\r\n return {\r\n truncatedLines: lines,\r\n isTruncated: false,\r\n lastLineIndex: lines.length - 1,\r\n };\r\n }\r\n\r\n // Take lines up to limit\r\n const visibleLines = lines.slice(0, maxLines);\r\n \r\n // Add ellipsis to last line if needed\r\n if (maxWidth && measureFn) {\r\n const lastLineIndex = visibleLines.length - 1;\r\n const lastLine = visibleLines[lastLineIndex];\r\n const lastLineWithEllipsis = lastLine + ellipsisChar;\r\n \r\n if (measureFn(lastLineWithEllipsis) > maxWidth) {\r\n // Last line + ellipsis doesn't fit, truncate it\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const truncationPoint = findTruncationPoint(lastLine, maxWidth, ellipsisWidth, measureFn);\r\n const graphemes = segmentGraphemes(lastLine);\r\n visibleLines[lastLineIndex] = graphemes.slice(0, truncationPoint).join('') + ellipsisChar;\r\n } else {\r\n visibleLines[lastLineIndex] = lastLineWithEllipsis;\r\n }\r\n } else {\r\n // Just add ellipsis to last line\r\n const lastLineIndex = visibleLines.length - 1;\r\n visibleLines[lastLineIndex] = visibleLines[lastLineIndex] + ellipsisChar;\r\n }\r\n\r\n return {\r\n truncatedLines: visibleLines,\r\n isTruncated: true,\r\n lastLineIndex: maxLines - 1,\r\n };\r\n}\r\n\r\n/**\r\n * Calculate ellipsis positioning for different alignments\r\n */\r\nexport function getEllipsisPosition(\r\n text: string,\r\n position: 'end' | 'middle' | 'start',\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const graphemes = segmentGraphemes(text);\r\n const totalWidth = measureFn(text);\r\n \r\n if (totalWidth <= maxWidth) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n switch (position) {\r\n case 'start':\r\n return truncateFromStart(text, maxWidth, ellipsisChar, measureFn);\r\n case 'middle':\r\n return truncateFromMiddle(text, maxWidth, ellipsisChar, measureFn);\r\n case 'end':\r\n default:\r\n return smartTruncate(text, maxWidth, ellipsisChar, measureFn);\r\n }\r\n}\r\n\r\n/**\r\n * Truncate from start with ellipsis at beginning\r\n */\r\nfunction truncateFromStart(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n let low = 0;\r\n let high = graphemes.length;\r\n\r\n while (low < high) {\r\n const mid = Math.floor((low + high) / 2);\r\n const candidate = graphemes.slice(mid).join('');\r\n const width = measureFn(candidate);\r\n\r\n if (width <= availableWidth) {\r\n high = mid;\r\n } else {\r\n low = mid + 1;\r\n }\r\n }\r\n\r\n if (low >= graphemes.length) {\r\n return {\r\n truncatedText: ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: 0,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n return {\r\n truncatedText: ellipsisChar + graphemes.slice(low).join(''),\r\n isTruncated: true,\r\n truncationIndex: low,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate from middle with ellipsis in center\r\n */\r\nfunction truncateFromMiddle(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n // Binary search for optimal split\r\n let low = 0;\r\n let high = Math.floor(graphemes.length / 2);\r\n\r\n while (low < high) {\r\n const startChars = Math.floor((low + high + 1) / 2);\r\n const endChars = startChars;\r\n \r\n const candidate = graphemes.slice(0, startChars).join('') + \r\n graphemes.slice(-endChars).join('');\r\n const width = measureFn(candidate);\r\n\r\n if (width <= availableWidth) {\r\n low = startChars;\r\n } else {\r\n high = startChars - 1;\r\n }\r\n }\r\n\r\n const startChars = low;\r\n const endChars = low;\r\n\r\n if (startChars + endChars >= graphemes.length) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n const truncatedText = graphemes.slice(0, startChars).join('') + \r\n ellipsisChar + \r\n graphemes.slice(-endChars).join('');\r\n\r\n return {\r\n truncatedText,\r\n isTruncated: true,\r\n truncationIndex: startChars,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n}"],"names":["applyEllipsis","text","options","maxWidth","maxHeight","ellipsisChar","measureFn","truncatedText","isTruncated","truncationIndex","ellipsisWidth","originalLength","width","originalMeasurement","originalWidth","originalHeight","height","needsTruncation","segmentGraphemes","length","truncateByWidth","heightTruncated","_measureFn","lines","split","accumulatedText","lineIndex","testText","measurement","lastFittingLine","withEllipsis","graphemes","replace","firstLineWidth","truncateByHeight","availableWidth","low","high","bestFit","mid","Math","floor","slice","join"],"mappings":"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"}
1
+ {"version":3,"file":"ellipsis.min.mjs","sources":["../../../src/text/ellipsis.ts"],"sourcesContent":["/**\n * Ellipsis Text Truncation System\n * \n * Implements text truncation with ellipsis when content exceeds bounds,\n * using binary search for optimal truncation points.\n */\n\nimport { segmentGraphemes } from './unicode';\n\nexport interface EllipsisOptions {\n maxWidth?: number;\n maxHeight?: number;\n ellipsisChar: string; // Default: \"…\"\n measureFn: (text: string) => number | { width: number; height: number };\n}\n\nexport interface EllipsisResult {\n truncatedText: string;\n isTruncated: boolean;\n truncationIndex: number; // Grapheme index where truncation occurred\n ellipsisWidth: number;\n originalLength: number;\n}\n\n/**\n * Apply ellipsis truncation to text based on width/height constraints\n */\nexport function applyEllipsis(\n text: string,\n options: EllipsisOptions\n): EllipsisResult {\n const { maxWidth, maxHeight, ellipsisChar, measureFn } = options;\n \n if (!text) {\n return {\n truncatedText: '',\n isTruncated: false,\n truncationIndex: 0,\n ellipsisWidth: 0,\n originalLength: 0,\n };\n }\n\n // Measure ellipsis width\n const ellipsisWidth = typeof measureFn(ellipsisChar) === 'number' \n ? measureFn(ellipsisChar) as number\n : (measureFn(ellipsisChar) as { width: number }).width;\n\n // Check if truncation is needed\n const originalMeasurement = measureFn(text);\n const originalWidth = typeof originalMeasurement === 'number' \n ? originalMeasurement \n : originalMeasurement.width;\n const originalHeight = typeof originalMeasurement === 'number'\n ? 0 // Height constraint not applicable for single dimension measure\n : originalMeasurement.height;\n\n let needsTruncation = false;\n if (maxWidth && originalWidth > maxWidth) needsTruncation = true;\n if (maxHeight && originalHeight > maxHeight) needsTruncation = true;\n\n if (!needsTruncation) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: segmentGraphemes(text).length,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n }\n\n // Apply width-based truncation\n if (maxWidth) {\n const widthTruncated = truncateByWidth(text, maxWidth, ellipsisChar, ellipsisWidth, measureFn);\n return {\n ...widthTruncated,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n }\n\n // Apply height-based truncation (for multi-line text)\n if (maxHeight) {\n const heightTruncated = truncateByHeight(text, maxHeight, ellipsisChar, measureFn);\n return {\n ...heightTruncated,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n }\n\n // Fallback - should not reach here\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: segmentGraphemes(text).length,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n}\n\n/**\n * Truncate text based on width constraint using binary search\n */\nfunction truncateByWidth(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n ellipsisWidth: number,\n measureFn: (text: string) => number | { width: number; height: number }\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n // Binary search for optimal truncation point\n let low = 0;\n let high = graphemes.length;\n let bestFit = 0;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = graphemes.slice(0, mid).join('');\n \n const measurement = measureFn(candidate);\n const candidateWidth = typeof measurement === 'number' \n ? measurement \n : measurement.width;\n\n if (candidateWidth <= availableWidth) {\n bestFit = mid;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n // Handle edge cases\n if (bestFit === 0) {\n // Even single character doesn't fit - return ellipsis only\n return {\n truncatedText: ellipsisChar,\n isTruncated: true,\n truncationIndex: 0,\n };\n }\n\n if (bestFit === graphemes.length) {\n // Everything fits even with ellipsis space reserved\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n };\n }\n\n // Create truncated text with ellipsis\n const truncatedText = graphemes.slice(0, bestFit).join('') + ellipsisChar;\n\n return {\n truncatedText,\n isTruncated: true,\n truncationIndex: bestFit,\n };\n}\n\n/**\n * Truncate text based on height constraint\n */\nfunction truncateByHeight(\n text: string,\n maxHeight: number,\n ellipsisChar: string,\n measureFn: (text: string) => number | { width: number; height: number }\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\n const lines = text.split('\\n');\n let accumulatedText = '';\n let lineIndex = 0;\n\n // Add lines until height exceeded\n for (lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n const testText = lineIndex === 0 \n ? lines[lineIndex] \n : accumulatedText + '\\n' + lines[lineIndex];\n \n const measurement = measureFn(testText);\n const height = typeof measurement === 'number' \n ? 0 // Single dimension measure doesn't provide height\n : measurement.height;\n\n if (height > maxHeight && accumulatedText) {\n // Previous text fits, current doesn't - truncate at previous\n break;\n }\n\n accumulatedText = testText;\n\n // If this is the last line and it fits, no truncation needed\n if (lineIndex === lines.length - 1) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: segmentGraphemes(text).length,\n };\n }\n }\n\n // If we need to truncate the last fitting line to add ellipsis\n if (lineIndex > 0) {\n const lastFittingLine = lines[lineIndex - 1];\n const withEllipsis = lastFittingLine + ellipsisChar;\n const graphemes = segmentGraphemes(accumulatedText);\n\n return {\n truncatedText: accumulatedText.replace(/[^\\n]*$/, withEllipsis),\n isTruncated: true,\n truncationIndex: graphemes.length - segmentGraphemes(lastFittingLine).length + segmentGraphemes(withEllipsis).length - 1,\n };\n }\n\n // First line doesn't fit - try width-based truncation on first line\n const firstLineWidth = typeof measureFn === 'function' \n ? (measureFn(lines[0]) as any)?.width || 1000\n : 1000; // Fallback width\n\n return truncateByWidth(lines[0], firstLineWidth, ellipsisChar, 0, measureFn);\n}\n\n/**\n * Find optimal truncation point using binary search\n */\nexport function findTruncationPoint(\n text: string,\n maxWidth: number,\n ellipsisWidth: number,\n measureFn: (text: string) => number\n): number {\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n let low = 0;\n let high = graphemes.length;\n\n while (low < high) {\n const mid = Math.floor((low + high + 1) / 2);\n const candidate = graphemes.slice(0, mid).join('');\n const width = measureFn(candidate);\n\n if (width <= availableWidth) {\n low = mid;\n } else {\n high = mid - 1;\n }\n }\n\n return low;\n}\n\n/**\n * Smart truncation that tries to break at word boundaries\n */\nexport function smartTruncate(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const availableWidth = maxWidth - ellipsisWidth;\n \n // First try exact truncation\n const exactPoint = findTruncationPoint(text, maxWidth, ellipsisWidth, measureFn);\n const graphemes = segmentGraphemes(text);\n \n if (exactPoint === 0) {\n return {\n truncatedText: ellipsisChar,\n isTruncated: true,\n truncationIndex: 0,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n if (exactPoint >= graphemes.length) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n // Try to find a word boundary before the exact point\n const textUpToPoint = graphemes.slice(0, exactPoint).join('');\n const words = textUpToPoint.split(/(\\s+)/);\n \n if (words.length > 1) {\n // Try truncating at last complete word\n const wordsWithoutLast = words.slice(0, -2); // Remove last word and space\n const wordBoundaryText = wordsWithoutLast.join('');\n const wordBoundaryWidth = measureFn(wordBoundaryText);\n \n if (wordBoundaryWidth + ellipsisWidth <= maxWidth && wordBoundaryText.trim()) {\n const wordBoundaryGraphemes = segmentGraphemes(wordBoundaryText);\n return {\n truncatedText: wordBoundaryText.trim() + ellipsisChar,\n isTruncated: true,\n truncationIndex: wordBoundaryGraphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n }\n\n // Fall back to character truncation\n return {\n truncatedText: graphemes.slice(0, exactPoint).join('') + ellipsisChar,\n isTruncated: true,\n truncationIndex: exactPoint,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n}\n\n/**\n * Truncate multi-line text with ellipsis on the last visible line\n */\nexport function truncateMultiline(\n lines: string[],\n maxLines: number,\n ellipsisChar: string,\n maxWidth?: number,\n measureFn?: (text: string) => number\n): {\n truncatedLines: string[];\n isTruncated: boolean;\n lastLineIndex: number;\n} {\n if (lines.length <= maxLines) {\n return {\n truncatedLines: lines,\n isTruncated: false,\n lastLineIndex: lines.length - 1,\n };\n }\n\n // Take lines up to limit\n const visibleLines = lines.slice(0, maxLines);\n \n // Add ellipsis to last line if needed\n if (maxWidth && measureFn) {\n const lastLineIndex = visibleLines.length - 1;\n const lastLine = visibleLines[lastLineIndex];\n const lastLineWithEllipsis = lastLine + ellipsisChar;\n \n if (measureFn(lastLineWithEllipsis) > maxWidth) {\n // Last line + ellipsis doesn't fit, truncate it\n const ellipsisWidth = measureFn(ellipsisChar);\n const truncationPoint = findTruncationPoint(lastLine, maxWidth, ellipsisWidth, measureFn);\n const graphemes = segmentGraphemes(lastLine);\n visibleLines[lastLineIndex] = graphemes.slice(0, truncationPoint).join('') + ellipsisChar;\n } else {\n visibleLines[lastLineIndex] = lastLineWithEllipsis;\n }\n } else {\n // Just add ellipsis to last line\n const lastLineIndex = visibleLines.length - 1;\n visibleLines[lastLineIndex] = visibleLines[lastLineIndex] + ellipsisChar;\n }\n\n return {\n truncatedLines: visibleLines,\n isTruncated: true,\n lastLineIndex: maxLines - 1,\n };\n}\n\n/**\n * Calculate ellipsis positioning for different alignments\n */\nexport function getEllipsisPosition(\n text: string,\n position: 'end' | 'middle' | 'start',\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const graphemes = segmentGraphemes(text);\n const totalWidth = measureFn(text);\n \n if (totalWidth <= maxWidth) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n switch (position) {\n case 'start':\n return truncateFromStart(text, maxWidth, ellipsisChar, measureFn);\n case 'middle':\n return truncateFromMiddle(text, maxWidth, ellipsisChar, measureFn);\n case 'end':\n default:\n return smartTruncate(text, maxWidth, ellipsisChar, measureFn);\n }\n}\n\n/**\n * Truncate from start with ellipsis at beginning\n */\nfunction truncateFromStart(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n let low = 0;\n let high = graphemes.length;\n\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = graphemes.slice(mid).join('');\n const width = measureFn(candidate);\n\n if (width <= availableWidth) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n\n if (low >= graphemes.length) {\n return {\n truncatedText: ellipsisChar,\n isTruncated: true,\n truncationIndex: 0,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n return {\n truncatedText: ellipsisChar + graphemes.slice(low).join(''),\n isTruncated: true,\n truncationIndex: low,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n}\n\n/**\n * Truncate from middle with ellipsis in center\n */\nfunction truncateFromMiddle(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n // Binary search for optimal split\n let low = 0;\n let high = Math.floor(graphemes.length / 2);\n\n while (low < high) {\n const startChars = Math.floor((low + high + 1) / 2);\n const endChars = startChars;\n \n const candidate = graphemes.slice(0, startChars).join('') + \n graphemes.slice(-endChars).join('');\n const width = measureFn(candidate);\n\n if (width <= availableWidth) {\n low = startChars;\n } else {\n high = startChars - 1;\n }\n }\n\n const startChars = low;\n const endChars = low;\n\n if (startChars + endChars >= graphemes.length) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n const truncatedText = graphemes.slice(0, startChars).join('') + \n ellipsisChar + \n graphemes.slice(-endChars).join('');\n\n return {\n truncatedText,\n isTruncated: true,\n truncationIndex: startChars,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n}"],"names":["applyEllipsis","text","options","maxWidth","maxHeight","ellipsisChar","measureFn","truncatedText","isTruncated","truncationIndex","ellipsisWidth","originalLength","width","originalMeasurement","originalWidth","originalHeight","height","needsTruncation","segmentGraphemes","length","truncateByWidth","heightTruncated","_measureFn","lines","split","accumulatedText","lineIndex","testText","measurement","lastFittingLine","withEllipsis","graphemes","replace","firstLineWidth","truncateByHeight","availableWidth","low","high","bestFit","mid","Math","floor","slice","join"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import { segmentGraphemes } from './unicode.mjs';
2
2
 
3
- /**
4
- * Ellipsis Text Truncation System
5
- *
6
- * Implements text truncation with ellipsis when content exceeds bounds,
7
- * using binary search for optimal truncation points.
3
+ /**
4
+ * Ellipsis Text Truncation System
5
+ *
6
+ * Implements text truncation with ellipsis when content exceeds bounds,
7
+ * using binary search for optimal truncation points.
8
8
  */
9
9
 
10
- /**
11
- * Apply ellipsis truncation to text based on width/height constraints
10
+ /**
11
+ * Apply ellipsis truncation to text based on width/height constraints
12
12
  */
13
13
  function applyEllipsis(text, options) {
14
14
  const {
@@ -78,8 +78,8 @@ function applyEllipsis(text, options) {
78
78
  };
79
79
  }
80
80
 
81
- /**
82
- * Truncate text based on width constraint using binary search
81
+ /**
82
+ * Truncate text based on width constraint using binary search
83
83
  */
84
84
  function truncateByWidth(text, maxWidth, ellipsisChar, ellipsisWidth, measureFn) {
85
85
  const graphemes = segmentGraphemes(text);
@@ -129,8 +129,8 @@ function truncateByWidth(text, maxWidth, ellipsisChar, ellipsisWidth, measureFn)
129
129
  };
130
130
  }
131
131
 
132
- /**
133
- * Truncate text based on height constraint
132
+ /**
133
+ * Truncate text based on height constraint
134
134
  */
135
135
  function truncateByHeight(text, maxHeight, ellipsisChar, measureFn) {
136
136
  var _measureFn;
@@ -1 +1 @@
1
- {"version":3,"file":"ellipsis.mjs","sources":["../../../src/text/ellipsis.ts"],"sourcesContent":["/**\r\n * Ellipsis Text Truncation System\r\n * \r\n * Implements text truncation with ellipsis when content exceeds bounds,\r\n * using binary search for optimal truncation points.\r\n */\r\n\r\nimport { segmentGraphemes } from './unicode';\r\n\r\nexport interface EllipsisOptions {\r\n maxWidth?: number;\r\n maxHeight?: number;\r\n ellipsisChar: string; // Default: \"…\"\r\n measureFn: (text: string) => number | { width: number; height: number };\r\n}\r\n\r\nexport interface EllipsisResult {\r\n truncatedText: string;\r\n isTruncated: boolean;\r\n truncationIndex: number; // Grapheme index where truncation occurred\r\n ellipsisWidth: number;\r\n originalLength: number;\r\n}\r\n\r\n/**\r\n * Apply ellipsis truncation to text based on width/height constraints\r\n */\r\nexport function applyEllipsis(\r\n text: string,\r\n options: EllipsisOptions\r\n): EllipsisResult {\r\n const { maxWidth, maxHeight, ellipsisChar, measureFn } = options;\r\n \r\n if (!text) {\r\n return {\r\n truncatedText: '',\r\n isTruncated: false,\r\n truncationIndex: 0,\r\n ellipsisWidth: 0,\r\n originalLength: 0,\r\n };\r\n }\r\n\r\n // Measure ellipsis width\r\n const ellipsisWidth = typeof measureFn(ellipsisChar) === 'number' \r\n ? measureFn(ellipsisChar) as number\r\n : (measureFn(ellipsisChar) as { width: number }).width;\r\n\r\n // Check if truncation is needed\r\n const originalMeasurement = measureFn(text);\r\n const originalWidth = typeof originalMeasurement === 'number' \r\n ? originalMeasurement \r\n : originalMeasurement.width;\r\n const originalHeight = typeof originalMeasurement === 'number'\r\n ? 0 // Height constraint not applicable for single dimension measure\r\n : originalMeasurement.height;\r\n\r\n let needsTruncation = false;\r\n if (maxWidth && originalWidth > maxWidth) needsTruncation = true;\r\n if (maxHeight && originalHeight > maxHeight) needsTruncation = true;\r\n\r\n if (!needsTruncation) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: segmentGraphemes(text).length,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n }\r\n\r\n // Apply width-based truncation\r\n if (maxWidth) {\r\n const widthTruncated = truncateByWidth(text, maxWidth, ellipsisChar, ellipsisWidth, measureFn);\r\n return {\r\n ...widthTruncated,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n }\r\n\r\n // Apply height-based truncation (for multi-line text)\r\n if (maxHeight) {\r\n const heightTruncated = truncateByHeight(text, maxHeight, ellipsisChar, measureFn);\r\n return {\r\n ...heightTruncated,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n }\r\n\r\n // Fallback - should not reach here\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: segmentGraphemes(text).length,\r\n ellipsisWidth,\r\n originalLength: segmentGraphemes(text).length,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate text based on width constraint using binary search\r\n */\r\nfunction truncateByWidth(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n ellipsisWidth: number,\r\n measureFn: (text: string) => number | { width: number; height: number }\r\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n // Binary search for optimal truncation point\r\n let low = 0;\r\n let high = graphemes.length;\r\n let bestFit = 0;\r\n\r\n while (low <= high) {\r\n const mid = Math.floor((low + high) / 2);\r\n const candidate = graphemes.slice(0, mid).join('');\r\n \r\n const measurement = measureFn(candidate);\r\n const candidateWidth = typeof measurement === 'number' \r\n ? measurement \r\n : measurement.width;\r\n\r\n if (candidateWidth <= availableWidth) {\r\n bestFit = mid;\r\n low = mid + 1;\r\n } else {\r\n high = mid - 1;\r\n }\r\n }\r\n\r\n // Handle edge cases\r\n if (bestFit === 0) {\r\n // Even single character doesn't fit - return ellipsis only\r\n return {\r\n truncatedText: ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: 0,\r\n };\r\n }\r\n\r\n if (bestFit === graphemes.length) {\r\n // Everything fits even with ellipsis space reserved\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n };\r\n }\r\n\r\n // Create truncated text with ellipsis\r\n const truncatedText = graphemes.slice(0, bestFit).join('') + ellipsisChar;\r\n\r\n return {\r\n truncatedText,\r\n isTruncated: true,\r\n truncationIndex: bestFit,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate text based on height constraint\r\n */\r\nfunction truncateByHeight(\r\n text: string,\r\n maxHeight: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number | { width: number; height: number }\r\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\r\n const lines = text.split('\\n');\r\n let accumulatedText = '';\r\n let lineIndex = 0;\r\n\r\n // Add lines until height exceeded\r\n for (lineIndex = 0; lineIndex < lines.length; lineIndex++) {\r\n const testText = lineIndex === 0 \r\n ? lines[lineIndex] \r\n : accumulatedText + '\\n' + lines[lineIndex];\r\n \r\n const measurement = measureFn(testText);\r\n const height = typeof measurement === 'number' \r\n ? 0 // Single dimension measure doesn't provide height\r\n : measurement.height;\r\n\r\n if (height > maxHeight && accumulatedText) {\r\n // Previous text fits, current doesn't - truncate at previous\r\n break;\r\n }\r\n\r\n accumulatedText = testText;\r\n\r\n // If this is the last line and it fits, no truncation needed\r\n if (lineIndex === lines.length - 1) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: segmentGraphemes(text).length,\r\n };\r\n }\r\n }\r\n\r\n // If we need to truncate the last fitting line to add ellipsis\r\n if (lineIndex > 0) {\r\n const lastFittingLine = lines[lineIndex - 1];\r\n const withEllipsis = lastFittingLine + ellipsisChar;\r\n const graphemes = segmentGraphemes(accumulatedText);\r\n\r\n return {\r\n truncatedText: accumulatedText.replace(/[^\\n]*$/, withEllipsis),\r\n isTruncated: true,\r\n truncationIndex: graphemes.length - segmentGraphemes(lastFittingLine).length + segmentGraphemes(withEllipsis).length - 1,\r\n };\r\n }\r\n\r\n // First line doesn't fit - try width-based truncation on first line\r\n const firstLineWidth = typeof measureFn === 'function' \r\n ? (measureFn(lines[0]) as any)?.width || 1000\r\n : 1000; // Fallback width\r\n\r\n return truncateByWidth(lines[0], firstLineWidth, ellipsisChar, 0, measureFn);\r\n}\r\n\r\n/**\r\n * Find optimal truncation point using binary search\r\n */\r\nexport function findTruncationPoint(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisWidth: number,\r\n measureFn: (text: string) => number\r\n): number {\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n let low = 0;\r\n let high = graphemes.length;\r\n\r\n while (low < high) {\r\n const mid = Math.floor((low + high + 1) / 2);\r\n const candidate = graphemes.slice(0, mid).join('');\r\n const width = measureFn(candidate);\r\n\r\n if (width <= availableWidth) {\r\n low = mid;\r\n } else {\r\n high = mid - 1;\r\n }\r\n }\r\n\r\n return low;\r\n}\r\n\r\n/**\r\n * Smart truncation that tries to break at word boundaries\r\n */\r\nexport function smartTruncate(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n \r\n // First try exact truncation\r\n const exactPoint = findTruncationPoint(text, maxWidth, ellipsisWidth, measureFn);\r\n const graphemes = segmentGraphemes(text);\r\n \r\n if (exactPoint === 0) {\r\n return {\r\n truncatedText: ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: 0,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n if (exactPoint >= graphemes.length) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n // Try to find a word boundary before the exact point\r\n const textUpToPoint = graphemes.slice(0, exactPoint).join('');\r\n const words = textUpToPoint.split(/(\\s+)/);\r\n \r\n if (words.length > 1) {\r\n // Try truncating at last complete word\r\n const wordsWithoutLast = words.slice(0, -2); // Remove last word and space\r\n const wordBoundaryText = wordsWithoutLast.join('');\r\n const wordBoundaryWidth = measureFn(wordBoundaryText);\r\n \r\n if (wordBoundaryWidth + ellipsisWidth <= maxWidth && wordBoundaryText.trim()) {\r\n const wordBoundaryGraphemes = segmentGraphemes(wordBoundaryText);\r\n return {\r\n truncatedText: wordBoundaryText.trim() + ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: wordBoundaryGraphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n }\r\n\r\n // Fall back to character truncation\r\n return {\r\n truncatedText: graphemes.slice(0, exactPoint).join('') + ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: exactPoint,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate multi-line text with ellipsis on the last visible line\r\n */\r\nexport function truncateMultiline(\r\n lines: string[],\r\n maxLines: number,\r\n ellipsisChar: string,\r\n maxWidth?: number,\r\n measureFn?: (text: string) => number\r\n): {\r\n truncatedLines: string[];\r\n isTruncated: boolean;\r\n lastLineIndex: number;\r\n} {\r\n if (lines.length <= maxLines) {\r\n return {\r\n truncatedLines: lines,\r\n isTruncated: false,\r\n lastLineIndex: lines.length - 1,\r\n };\r\n }\r\n\r\n // Take lines up to limit\r\n const visibleLines = lines.slice(0, maxLines);\r\n \r\n // Add ellipsis to last line if needed\r\n if (maxWidth && measureFn) {\r\n const lastLineIndex = visibleLines.length - 1;\r\n const lastLine = visibleLines[lastLineIndex];\r\n const lastLineWithEllipsis = lastLine + ellipsisChar;\r\n \r\n if (measureFn(lastLineWithEllipsis) > maxWidth) {\r\n // Last line + ellipsis doesn't fit, truncate it\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const truncationPoint = findTruncationPoint(lastLine, maxWidth, ellipsisWidth, measureFn);\r\n const graphemes = segmentGraphemes(lastLine);\r\n visibleLines[lastLineIndex] = graphemes.slice(0, truncationPoint).join('') + ellipsisChar;\r\n } else {\r\n visibleLines[lastLineIndex] = lastLineWithEllipsis;\r\n }\r\n } else {\r\n // Just add ellipsis to last line\r\n const lastLineIndex = visibleLines.length - 1;\r\n visibleLines[lastLineIndex] = visibleLines[lastLineIndex] + ellipsisChar;\r\n }\r\n\r\n return {\r\n truncatedLines: visibleLines,\r\n isTruncated: true,\r\n lastLineIndex: maxLines - 1,\r\n };\r\n}\r\n\r\n/**\r\n * Calculate ellipsis positioning for different alignments\r\n */\r\nexport function getEllipsisPosition(\r\n text: string,\r\n position: 'end' | 'middle' | 'start',\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const graphemes = segmentGraphemes(text);\r\n const totalWidth = measureFn(text);\r\n \r\n if (totalWidth <= maxWidth) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n switch (position) {\r\n case 'start':\r\n return truncateFromStart(text, maxWidth, ellipsisChar, measureFn);\r\n case 'middle':\r\n return truncateFromMiddle(text, maxWidth, ellipsisChar, measureFn);\r\n case 'end':\r\n default:\r\n return smartTruncate(text, maxWidth, ellipsisChar, measureFn);\r\n }\r\n}\r\n\r\n/**\r\n * Truncate from start with ellipsis at beginning\r\n */\r\nfunction truncateFromStart(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n let low = 0;\r\n let high = graphemes.length;\r\n\r\n while (low < high) {\r\n const mid = Math.floor((low + high) / 2);\r\n const candidate = graphemes.slice(mid).join('');\r\n const width = measureFn(candidate);\r\n\r\n if (width <= availableWidth) {\r\n high = mid;\r\n } else {\r\n low = mid + 1;\r\n }\r\n }\r\n\r\n if (low >= graphemes.length) {\r\n return {\r\n truncatedText: ellipsisChar,\r\n isTruncated: true,\r\n truncationIndex: 0,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n return {\r\n truncatedText: ellipsisChar + graphemes.slice(low).join(''),\r\n isTruncated: true,\r\n truncationIndex: low,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n}\r\n\r\n/**\r\n * Truncate from middle with ellipsis in center\r\n */\r\nfunction truncateFromMiddle(\r\n text: string,\r\n maxWidth: number,\r\n ellipsisChar: string,\r\n measureFn: (text: string) => number\r\n): EllipsisResult {\r\n const ellipsisWidth = measureFn(ellipsisChar);\r\n const graphemes = segmentGraphemes(text);\r\n const availableWidth = maxWidth - ellipsisWidth;\r\n\r\n // Binary search for optimal split\r\n let low = 0;\r\n let high = Math.floor(graphemes.length / 2);\r\n\r\n while (low < high) {\r\n const startChars = Math.floor((low + high + 1) / 2);\r\n const endChars = startChars;\r\n \r\n const candidate = graphemes.slice(0, startChars).join('') + \r\n graphemes.slice(-endChars).join('');\r\n const width = measureFn(candidate);\r\n\r\n if (width <= availableWidth) {\r\n low = startChars;\r\n } else {\r\n high = startChars - 1;\r\n }\r\n }\r\n\r\n const startChars = low;\r\n const endChars = low;\r\n\r\n if (startChars + endChars >= graphemes.length) {\r\n return {\r\n truncatedText: text,\r\n isTruncated: false,\r\n truncationIndex: graphemes.length,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n }\r\n\r\n const truncatedText = graphemes.slice(0, startChars).join('') + \r\n ellipsisChar + \r\n graphemes.slice(-endChars).join('');\r\n\r\n return {\r\n truncatedText,\r\n isTruncated: true,\r\n truncationIndex: startChars,\r\n ellipsisWidth,\r\n originalLength: graphemes.length,\r\n };\r\n}"],"names":["applyEllipsis","text","options","maxWidth","maxHeight","ellipsisChar","measureFn","truncatedText","isTruncated","truncationIndex","ellipsisWidth","originalLength","width","originalMeasurement","originalWidth","originalHeight","height","needsTruncation","segmentGraphemes","length","widthTruncated","truncateByWidth","heightTruncated","truncateByHeight","graphemes","availableWidth","low","high","bestFit","mid","Math","floor","candidate","slice","join","measurement","candidateWidth","_measureFn","lines","split","accumulatedText","lineIndex","testText","lastFittingLine","withEllipsis","replace","firstLineWidth"],"mappings":"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"}
1
+ {"version":3,"file":"ellipsis.mjs","sources":["../../../src/text/ellipsis.ts"],"sourcesContent":["/**\n * Ellipsis Text Truncation System\n * \n * Implements text truncation with ellipsis when content exceeds bounds,\n * using binary search for optimal truncation points.\n */\n\nimport { segmentGraphemes } from './unicode';\n\nexport interface EllipsisOptions {\n maxWidth?: number;\n maxHeight?: number;\n ellipsisChar: string; // Default: \"…\"\n measureFn: (text: string) => number | { width: number; height: number };\n}\n\nexport interface EllipsisResult {\n truncatedText: string;\n isTruncated: boolean;\n truncationIndex: number; // Grapheme index where truncation occurred\n ellipsisWidth: number;\n originalLength: number;\n}\n\n/**\n * Apply ellipsis truncation to text based on width/height constraints\n */\nexport function applyEllipsis(\n text: string,\n options: EllipsisOptions\n): EllipsisResult {\n const { maxWidth, maxHeight, ellipsisChar, measureFn } = options;\n \n if (!text) {\n return {\n truncatedText: '',\n isTruncated: false,\n truncationIndex: 0,\n ellipsisWidth: 0,\n originalLength: 0,\n };\n }\n\n // Measure ellipsis width\n const ellipsisWidth = typeof measureFn(ellipsisChar) === 'number' \n ? measureFn(ellipsisChar) as number\n : (measureFn(ellipsisChar) as { width: number }).width;\n\n // Check if truncation is needed\n const originalMeasurement = measureFn(text);\n const originalWidth = typeof originalMeasurement === 'number' \n ? originalMeasurement \n : originalMeasurement.width;\n const originalHeight = typeof originalMeasurement === 'number'\n ? 0 // Height constraint not applicable for single dimension measure\n : originalMeasurement.height;\n\n let needsTruncation = false;\n if (maxWidth && originalWidth > maxWidth) needsTruncation = true;\n if (maxHeight && originalHeight > maxHeight) needsTruncation = true;\n\n if (!needsTruncation) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: segmentGraphemes(text).length,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n }\n\n // Apply width-based truncation\n if (maxWidth) {\n const widthTruncated = truncateByWidth(text, maxWidth, ellipsisChar, ellipsisWidth, measureFn);\n return {\n ...widthTruncated,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n }\n\n // Apply height-based truncation (for multi-line text)\n if (maxHeight) {\n const heightTruncated = truncateByHeight(text, maxHeight, ellipsisChar, measureFn);\n return {\n ...heightTruncated,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n }\n\n // Fallback - should not reach here\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: segmentGraphemes(text).length,\n ellipsisWidth,\n originalLength: segmentGraphemes(text).length,\n };\n}\n\n/**\n * Truncate text based on width constraint using binary search\n */\nfunction truncateByWidth(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n ellipsisWidth: number,\n measureFn: (text: string) => number | { width: number; height: number }\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n // Binary search for optimal truncation point\n let low = 0;\n let high = graphemes.length;\n let bestFit = 0;\n\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = graphemes.slice(0, mid).join('');\n \n const measurement = measureFn(candidate);\n const candidateWidth = typeof measurement === 'number' \n ? measurement \n : measurement.width;\n\n if (candidateWidth <= availableWidth) {\n bestFit = mid;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n\n // Handle edge cases\n if (bestFit === 0) {\n // Even single character doesn't fit - return ellipsis only\n return {\n truncatedText: ellipsisChar,\n isTruncated: true,\n truncationIndex: 0,\n };\n }\n\n if (bestFit === graphemes.length) {\n // Everything fits even with ellipsis space reserved\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n };\n }\n\n // Create truncated text with ellipsis\n const truncatedText = graphemes.slice(0, bestFit).join('') + ellipsisChar;\n\n return {\n truncatedText,\n isTruncated: true,\n truncationIndex: bestFit,\n };\n}\n\n/**\n * Truncate text based on height constraint\n */\nfunction truncateByHeight(\n text: string,\n maxHeight: number,\n ellipsisChar: string,\n measureFn: (text: string) => number | { width: number; height: number }\n): Omit<EllipsisResult, 'ellipsisWidth' | 'originalLength'> {\n const lines = text.split('\\n');\n let accumulatedText = '';\n let lineIndex = 0;\n\n // Add lines until height exceeded\n for (lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n const testText = lineIndex === 0 \n ? lines[lineIndex] \n : accumulatedText + '\\n' + lines[lineIndex];\n \n const measurement = measureFn(testText);\n const height = typeof measurement === 'number' \n ? 0 // Single dimension measure doesn't provide height\n : measurement.height;\n\n if (height > maxHeight && accumulatedText) {\n // Previous text fits, current doesn't - truncate at previous\n break;\n }\n\n accumulatedText = testText;\n\n // If this is the last line and it fits, no truncation needed\n if (lineIndex === lines.length - 1) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: segmentGraphemes(text).length,\n };\n }\n }\n\n // If we need to truncate the last fitting line to add ellipsis\n if (lineIndex > 0) {\n const lastFittingLine = lines[lineIndex - 1];\n const withEllipsis = lastFittingLine + ellipsisChar;\n const graphemes = segmentGraphemes(accumulatedText);\n\n return {\n truncatedText: accumulatedText.replace(/[^\\n]*$/, withEllipsis),\n isTruncated: true,\n truncationIndex: graphemes.length - segmentGraphemes(lastFittingLine).length + segmentGraphemes(withEllipsis).length - 1,\n };\n }\n\n // First line doesn't fit - try width-based truncation on first line\n const firstLineWidth = typeof measureFn === 'function' \n ? (measureFn(lines[0]) as any)?.width || 1000\n : 1000; // Fallback width\n\n return truncateByWidth(lines[0], firstLineWidth, ellipsisChar, 0, measureFn);\n}\n\n/**\n * Find optimal truncation point using binary search\n */\nexport function findTruncationPoint(\n text: string,\n maxWidth: number,\n ellipsisWidth: number,\n measureFn: (text: string) => number\n): number {\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n let low = 0;\n let high = graphemes.length;\n\n while (low < high) {\n const mid = Math.floor((low + high + 1) / 2);\n const candidate = graphemes.slice(0, mid).join('');\n const width = measureFn(candidate);\n\n if (width <= availableWidth) {\n low = mid;\n } else {\n high = mid - 1;\n }\n }\n\n return low;\n}\n\n/**\n * Smart truncation that tries to break at word boundaries\n */\nexport function smartTruncate(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const availableWidth = maxWidth - ellipsisWidth;\n \n // First try exact truncation\n const exactPoint = findTruncationPoint(text, maxWidth, ellipsisWidth, measureFn);\n const graphemes = segmentGraphemes(text);\n \n if (exactPoint === 0) {\n return {\n truncatedText: ellipsisChar,\n isTruncated: true,\n truncationIndex: 0,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n if (exactPoint >= graphemes.length) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n // Try to find a word boundary before the exact point\n const textUpToPoint = graphemes.slice(0, exactPoint).join('');\n const words = textUpToPoint.split(/(\\s+)/);\n \n if (words.length > 1) {\n // Try truncating at last complete word\n const wordsWithoutLast = words.slice(0, -2); // Remove last word and space\n const wordBoundaryText = wordsWithoutLast.join('');\n const wordBoundaryWidth = measureFn(wordBoundaryText);\n \n if (wordBoundaryWidth + ellipsisWidth <= maxWidth && wordBoundaryText.trim()) {\n const wordBoundaryGraphemes = segmentGraphemes(wordBoundaryText);\n return {\n truncatedText: wordBoundaryText.trim() + ellipsisChar,\n isTruncated: true,\n truncationIndex: wordBoundaryGraphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n }\n\n // Fall back to character truncation\n return {\n truncatedText: graphemes.slice(0, exactPoint).join('') + ellipsisChar,\n isTruncated: true,\n truncationIndex: exactPoint,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n}\n\n/**\n * Truncate multi-line text with ellipsis on the last visible line\n */\nexport function truncateMultiline(\n lines: string[],\n maxLines: number,\n ellipsisChar: string,\n maxWidth?: number,\n measureFn?: (text: string) => number\n): {\n truncatedLines: string[];\n isTruncated: boolean;\n lastLineIndex: number;\n} {\n if (lines.length <= maxLines) {\n return {\n truncatedLines: lines,\n isTruncated: false,\n lastLineIndex: lines.length - 1,\n };\n }\n\n // Take lines up to limit\n const visibleLines = lines.slice(0, maxLines);\n \n // Add ellipsis to last line if needed\n if (maxWidth && measureFn) {\n const lastLineIndex = visibleLines.length - 1;\n const lastLine = visibleLines[lastLineIndex];\n const lastLineWithEllipsis = lastLine + ellipsisChar;\n \n if (measureFn(lastLineWithEllipsis) > maxWidth) {\n // Last line + ellipsis doesn't fit, truncate it\n const ellipsisWidth = measureFn(ellipsisChar);\n const truncationPoint = findTruncationPoint(lastLine, maxWidth, ellipsisWidth, measureFn);\n const graphemes = segmentGraphemes(lastLine);\n visibleLines[lastLineIndex] = graphemes.slice(0, truncationPoint).join('') + ellipsisChar;\n } else {\n visibleLines[lastLineIndex] = lastLineWithEllipsis;\n }\n } else {\n // Just add ellipsis to last line\n const lastLineIndex = visibleLines.length - 1;\n visibleLines[lastLineIndex] = visibleLines[lastLineIndex] + ellipsisChar;\n }\n\n return {\n truncatedLines: visibleLines,\n isTruncated: true,\n lastLineIndex: maxLines - 1,\n };\n}\n\n/**\n * Calculate ellipsis positioning for different alignments\n */\nexport function getEllipsisPosition(\n text: string,\n position: 'end' | 'middle' | 'start',\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const graphemes = segmentGraphemes(text);\n const totalWidth = measureFn(text);\n \n if (totalWidth <= maxWidth) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n switch (position) {\n case 'start':\n return truncateFromStart(text, maxWidth, ellipsisChar, measureFn);\n case 'middle':\n return truncateFromMiddle(text, maxWidth, ellipsisChar, measureFn);\n case 'end':\n default:\n return smartTruncate(text, maxWidth, ellipsisChar, measureFn);\n }\n}\n\n/**\n * Truncate from start with ellipsis at beginning\n */\nfunction truncateFromStart(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n let low = 0;\n let high = graphemes.length;\n\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n const candidate = graphemes.slice(mid).join('');\n const width = measureFn(candidate);\n\n if (width <= availableWidth) {\n high = mid;\n } else {\n low = mid + 1;\n }\n }\n\n if (low >= graphemes.length) {\n return {\n truncatedText: ellipsisChar,\n isTruncated: true,\n truncationIndex: 0,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n return {\n truncatedText: ellipsisChar + graphemes.slice(low).join(''),\n isTruncated: true,\n truncationIndex: low,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n}\n\n/**\n * Truncate from middle with ellipsis in center\n */\nfunction truncateFromMiddle(\n text: string,\n maxWidth: number,\n ellipsisChar: string,\n measureFn: (text: string) => number\n): EllipsisResult {\n const ellipsisWidth = measureFn(ellipsisChar);\n const graphemes = segmentGraphemes(text);\n const availableWidth = maxWidth - ellipsisWidth;\n\n // Binary search for optimal split\n let low = 0;\n let high = Math.floor(graphemes.length / 2);\n\n while (low < high) {\n const startChars = Math.floor((low + high + 1) / 2);\n const endChars = startChars;\n \n const candidate = graphemes.slice(0, startChars).join('') + \n graphemes.slice(-endChars).join('');\n const width = measureFn(candidate);\n\n if (width <= availableWidth) {\n low = startChars;\n } else {\n high = startChars - 1;\n }\n }\n\n const startChars = low;\n const endChars = low;\n\n if (startChars + endChars >= graphemes.length) {\n return {\n truncatedText: text,\n isTruncated: false,\n truncationIndex: graphemes.length,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n }\n\n const truncatedText = graphemes.slice(0, startChars).join('') + \n ellipsisChar + \n graphemes.slice(-endChars).join('');\n\n return {\n truncatedText,\n isTruncated: true,\n truncationIndex: startChars,\n ellipsisWidth,\n originalLength: graphemes.length,\n };\n}"],"names":["applyEllipsis","text","options","maxWidth","maxHeight","ellipsisChar","measureFn","truncatedText","isTruncated","truncationIndex","ellipsisWidth","originalLength","width","originalMeasurement","originalWidth","originalHeight","height","needsTruncation","segmentGraphemes","length","widthTruncated","truncateByWidth","heightTruncated","truncateByHeight","graphemes","availableWidth","low","high","bestFit","mid","Math","floor","candidate","slice","join","measurement","candidateWidth","_measureFn","lines","split","accumulatedText","lineIndex","testText","lastFittingLine","withEllipsis","replace","firstLineWidth"],"mappings":"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"}
File without changes
File without changes
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"hitTest.min.mjs","sources":["../../../src/text/hitTest.ts"],"sourcesContent":["/**\r\n * Hit Testing and Cursor Positioning System\r\n * \r\n * Maps pointer coordinates to text positions and provides cursor rectangles\r\n * for interactive text editing with grapheme-aware boundaries.\r\n */\r\n\r\nimport type { LayoutResult, LayoutLine, GraphemeBounds } from './layout';\r\nimport type { TextLayoutOptions } from './layout';\r\nimport { segmentGraphemes } from './unicode';\r\n\r\nexport interface HitTestResult {\r\n lineIndex: number;\r\n charIndex: number;\r\n graphemeIndex: number;\r\n isAtLineEnd: boolean;\r\n isAtTextEnd: boolean;\r\n insertionIndex: number; // For cursor positioning\r\n closestBound?: GraphemeBounds;\r\n}\r\n\r\nexport interface CursorRect {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n baseline: number;\r\n}\r\n\r\nexport interface SelectionRect extends CursorRect {\r\n lineIndex: number;\r\n startIndex: number;\r\n endIndex: number;\r\n}\r\n\r\n/**\r\n * Hit test a point against laid out text to find insertion position\r\n */\r\nexport function hitTest(\r\n x: number,\r\n y: number,\r\n layout: LayoutResult,\r\n options: TextLayoutOptions\r\n): HitTestResult {\r\n if (layout.lines.length === 0) {\r\n return {\r\n lineIndex: 0,\r\n charIndex: 0,\r\n graphemeIndex: 0,\r\n isAtLineEnd: true,\r\n isAtTextEnd: true,\r\n insertionIndex: 0,\r\n };\r\n }\r\n\r\n // Find the line containing the y coordinate\r\n const lineResult = findLineAtY(y, layout.lines);\r\n const line = layout.lines[lineResult.lineIndex];\r\n \r\n if (!line || line.bounds.length === 0) {\r\n return {\r\n lineIndex: lineResult.lineIndex,\r\n charIndex: 0,\r\n graphemeIndex: 0,\r\n isAtLineEnd: true,\r\n isAtTextEnd: lineResult.lineIndex >= layout.lines.length - 1,\r\n insertionIndex: calculateInsertionIndex(lineResult.lineIndex, 0, layout),\r\n };\r\n }\r\n\r\n // Find the character position within the line\r\n const charResult = findCharAtX(x, line, options);\r\n \r\n // Calculate total insertion index\r\n const insertionIndex = calculateInsertionIndex(\r\n lineResult.lineIndex, \r\n charResult.graphemeIndex, \r\n layout\r\n );\r\n\r\n return {\r\n lineIndex: lineResult.lineIndex,\r\n charIndex: charResult.charIndex,\r\n graphemeIndex: charResult.graphemeIndex,\r\n isAtLineEnd: charResult.isAtLineEnd,\r\n isAtTextEnd: lineResult.lineIndex >= layout.lines.length - 1 && charResult.isAtLineEnd,\r\n insertionIndex,\r\n closestBound: charResult.closestBound,\r\n };\r\n}\r\n\r\n/**\r\n * Get cursor rectangle for a given insertion index\r\n */\r\nexport function getCursorRect(\r\n insertionIndex: number,\r\n layout: LayoutResult,\r\n options: TextLayoutOptions\r\n): CursorRect {\r\n if (layout.lines.length === 0) {\r\n return {\r\n x: 0,\r\n y: 0,\r\n width: 2, // Default cursor width\r\n height: options.fontSize,\r\n baseline: options.fontSize * 0.8,\r\n };\r\n }\r\n\r\n const position = findPositionFromIndex(insertionIndex, layout);\r\n const line = layout.lines[position.lineIndex];\r\n\r\n if (!line) {\r\n // Past end of text\r\n const lastLine = layout.lines[layout.lines.length - 1];\r\n return {\r\n x: lastLine.width,\r\n y: (layout.lines.length - 1) * (options.fontSize * options.lineHeight),\r\n width: 2,\r\n height: options.fontSize * options.lineHeight,\r\n baseline: options.fontSize * 0.8,\r\n };\r\n }\r\n\r\n // Get position within line\r\n let x = 0;\r\n if (position.graphemeIndex > 0 && line.bounds.length > 0) {\r\n const boundIndex = Math.min(position.graphemeIndex - 1, line.bounds.length - 1);\r\n const bound = line.bounds[boundIndex];\r\n x = bound.x + bound.kernedWidth;\r\n }\r\n\r\n const y = calculateLineY(position.lineIndex, layout, options);\r\n\r\n return {\r\n x,\r\n y,\r\n width: 2, // Standard cursor width\r\n height: line.height,\r\n baseline: y + line.baseline,\r\n };\r\n}\r\n\r\n/**\r\n * Get selection rectangles for a range of text\r\n */\r\nexport function getSelectionRects(\r\n startIndex: number,\r\n endIndex: number,\r\n layout: LayoutResult,\r\n options: TextLayoutOptions\r\n): SelectionRect[] {\r\n if (startIndex >= endIndex || layout.lines.length === 0) {\r\n return [];\r\n }\r\n\r\n const startPos = findPositionFromIndex(startIndex, layout);\r\n const endPos = findPositionFromIndex(endIndex, layout);\r\n const rects: SelectionRect[] = [];\r\n\r\n // Handle selection across multiple lines\r\n for (let lineIndex = startPos.lineIndex; lineIndex <= endPos.lineIndex; lineIndex++) {\r\n const line = layout.lines[lineIndex];\r\n if (!line) continue;\r\n\r\n // Determine start and end positions within this line\r\n const lineStartIndex = lineIndex === startPos.lineIndex ? startPos.graphemeIndex : 0;\r\n const lineEndIndex = lineIndex === endPos.lineIndex \r\n ? endPos.graphemeIndex \r\n : line.graphemes.length;\r\n\r\n if (lineStartIndex >= lineEndIndex) continue;\r\n\r\n // Calculate selection rectangle for this line\r\n const rect = getLineSelectionRect(\r\n line,\r\n lineIndex,\r\n lineStartIndex,\r\n lineEndIndex,\r\n layout,\r\n options\r\n );\r\n\r\n if (rect) {\r\n rects.push(rect);\r\n }\r\n }\r\n\r\n return rects;\r\n}\r\n\r\n/**\r\n * Get grapheme boundaries for text navigation\r\n */\r\nexport function getGraphemeBoundaries(text: string): number[] {\r\n const graphemes = segmentGraphemes(text);\r\n const boundaries: number[] = [0];\r\n let stringIndex = 0;\r\n\r\n for (const grapheme of graphemes) {\r\n stringIndex += grapheme.length;\r\n boundaries.push(stringIndex);\r\n }\r\n\r\n return boundaries;\r\n}\r\n\r\n/**\r\n * Map string index to grapheme index\r\n */\r\nexport function mapStringIndexToGraphemeIndex(text: string, stringIndex: number): number {\r\n const graphemes = segmentGraphemes(text);\r\n let currentStringIndex = 0;\r\n\r\n for (let i = 0; i < graphemes.length; i++) {\r\n if (currentStringIndex >= stringIndex) {\r\n return i;\r\n }\r\n currentStringIndex += graphemes[i].length;\r\n }\r\n\r\n return graphemes.length;\r\n}\r\n\r\n/**\r\n * Map grapheme index to string index\r\n */\r\nexport function mapGraphemeIndexToStringIndex(text: string, graphemeIndex: number): number {\r\n const graphemes = segmentGraphemes(text);\r\n let stringIndex = 0;\r\n\r\n for (let i = 0; i < graphemeIndex && i < graphemes.length; i++) {\r\n stringIndex += graphemes[i].length;\r\n }\r\n\r\n return stringIndex;\r\n}\r\n\r\n// Private helper functions\r\n\r\n/**\r\n * Find which line contains the given Y coordinate\r\n */\r\nfunction findLineAtY(y: number, lines: LayoutLine[]): { lineIndex: number; offsetY: number } {\r\n let currentY = 0;\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n const line = lines[i];\r\n if (y >= currentY && y < currentY + line.height) {\r\n return { lineIndex: i, offsetY: y - currentY };\r\n }\r\n currentY += line.height;\r\n }\r\n\r\n // Y is past all lines - return last line\r\n return { \r\n lineIndex: lines.length - 1, \r\n offsetY: lines[lines.length - 1]?.height || 0 \r\n };\r\n}\r\n\r\n/**\r\n * Find character position within a line at given X coordinate\r\n */\r\nfunction findCharAtX(\r\n x: number,\r\n line: LayoutLine,\r\n options: TextLayoutOptions\r\n): {\r\n charIndex: number;\r\n graphemeIndex: number;\r\n isAtLineEnd: boolean;\r\n closestBound?: GraphemeBounds;\r\n} {\r\n if (line.bounds.length === 0) {\r\n return {\r\n charIndex: 0,\r\n graphemeIndex: 0,\r\n isAtLineEnd: true,\r\n };\r\n }\r\n\r\n // Create visual ordering: sort bounds by visual X position (left-to-right)\r\n // This handles mixed LTR/RTL content where visual order != logical order\r\n const visualBounds = line.bounds.map((bound, logicalIndex) => ({\r\n bound,\r\n logicalIndex,\r\n visualX: bound.x,\r\n visualXEnd: bound.x + bound.kernedWidth,\r\n })).sort((a, b) => a.visualX - b.visualX);\r\n\r\n // Find leftmost and rightmost visual positions\r\n const leftmostX = visualBounds[0].visualX;\r\n const rightmostX = visualBounds[visualBounds.length - 1].visualXEnd;\r\n\r\n // Handle clicks before the line starts\r\n if (x < leftmostX) {\r\n // Find the character that appears visually first\r\n const firstVisualBound = visualBounds[0];\r\n return {\r\n charIndex: firstVisualBound.bound.charIndex,\r\n graphemeIndex: firstVisualBound.bound.graphemeIndex,\r\n isAtLineEnd: false,\r\n closestBound: firstVisualBound.bound,\r\n };\r\n }\r\n\r\n // Handle clicks after the line ends\r\n if (x >= rightmostX) {\r\n // Find the character that appears visually last\r\n const lastVisualBound = visualBounds[visualBounds.length - 1];\r\n return {\r\n charIndex: lastVisualBound.bound.charIndex + 1,\r\n graphemeIndex: lastVisualBound.bound.graphemeIndex + 1,\r\n isAtLineEnd: true,\r\n closestBound: lastVisualBound.bound,\r\n };\r\n }\r\n\r\n // Find the character containing the X coordinate\r\n for (let i = 0; i < visualBounds.length; i++) {\r\n const { bound, visualX, visualXEnd } = visualBounds[i];\r\n \r\n if (x >= visualX && x < visualXEnd) {\r\n // Determine if closer to start or end of character\r\n const midpoint = visualX + (visualXEnd - visualX) / 2;\r\n const insertBeforeChar = x < midpoint;\r\n \r\n if (insertBeforeChar) {\r\n return {\r\n charIndex: bound.charIndex,\r\n graphemeIndex: bound.graphemeIndex,\r\n isAtLineEnd: false,\r\n closestBound: bound,\r\n };\r\n } else {\r\n // Insert after this character\r\n return {\r\n charIndex: bound.charIndex + 1,\r\n graphemeIndex: bound.graphemeIndex + 1,\r\n isAtLineEnd: false,\r\n closestBound: bound,\r\n };\r\n }\r\n }\r\n \r\n // Check if x is in the gap between this character and the next\r\n if (i < visualBounds.length - 1) {\r\n const nextVisual = visualBounds[i + 1];\r\n if (x >= visualXEnd && x < nextVisual.visualX) {\r\n // Click in gap - place cursor after current character\r\n return {\r\n charIndex: bound.charIndex + 1,\r\n graphemeIndex: bound.graphemeIndex + 1,\r\n isAtLineEnd: false,\r\n closestBound: bound,\r\n };\r\n }\r\n }\r\n }\r\n\r\n // Fallback - find closest character\r\n const closestBound = visualBounds.reduce((closest, current) => {\r\n const closestDistance = Math.abs((closest.visualX + closest.visualXEnd) / 2 - x);\r\n const currentDistance = Math.abs((current.visualX + current.visualXEnd) / 2 - x);\r\n return currentDistance < closestDistance ? current : closest;\r\n });\r\n\r\n return {\r\n charIndex: closestBound.bound.charIndex,\r\n graphemeIndex: closestBound.bound.graphemeIndex,\r\n isAtLineEnd: false,\r\n closestBound: closestBound.bound,\r\n };\r\n}\r\n\r\n/**\r\n * Calculate total insertion index from line and character indices\r\n */\r\nfunction calculateInsertionIndex(\r\n lineIndex: number,\r\n graphemeIndex: number,\r\n layout: LayoutResult\r\n): number {\r\n let insertionIndex = 0;\r\n\r\n // Add characters from all previous lines\r\n for (let i = 0; i < lineIndex && i < layout.lines.length; i++) {\r\n insertionIndex += layout.lines[i].graphemes.length;\r\n // Add newline character (except for last line)\r\n if (i < layout.lines.length - 1) {\r\n insertionIndex += 1; // \\n character\r\n }\r\n }\r\n\r\n // Add characters within current line\r\n insertionIndex += graphemeIndex;\r\n\r\n return insertionIndex;\r\n}\r\n\r\n/**\r\n * Find line and grapheme position from insertion index\r\n */\r\nfunction findPositionFromIndex(\r\n insertionIndex: number,\r\n layout: LayoutResult\r\n): { lineIndex: number; graphemeIndex: number } {\r\n let currentIndex = 0;\r\n\r\n for (let lineIndex = 0; lineIndex < layout.lines.length; lineIndex++) {\r\n const line = layout.lines[lineIndex];\r\n const lineLength = line.graphemes.length;\r\n\r\n // Check if index is within this line\r\n if (insertionIndex >= currentIndex && insertionIndex <= currentIndex + lineLength) {\r\n return {\r\n lineIndex,\r\n graphemeIndex: insertionIndex - currentIndex,\r\n };\r\n }\r\n\r\n // Move to next line\r\n currentIndex += lineLength;\r\n \r\n // Add newline character (except after last line)\r\n if (lineIndex < layout.lines.length - 1) {\r\n currentIndex += 1; // \\n character\r\n \r\n // If insertion index is exactly at the newline\r\n if (insertionIndex === currentIndex - 1) {\r\n return {\r\n lineIndex,\r\n graphemeIndex: lineLength,\r\n };\r\n }\r\n }\r\n }\r\n\r\n // Index is past end of text\r\n const lastLineIndex = layout.lines.length - 1;\r\n const lastLine = layout.lines[lastLineIndex];\r\n \r\n return {\r\n lineIndex: lastLineIndex,\r\n graphemeIndex: lastLine ? lastLine.graphemes.length : 0,\r\n };\r\n}\r\n\r\n/**\r\n * Calculate Y position of a line\r\n */\r\nfunction calculateLineY(\r\n lineIndex: number,\r\n layout: LayoutResult,\r\n options: TextLayoutOptions\r\n): number {\r\n let y = 0;\r\n\r\n for (let i = 0; i < lineIndex && i < layout.lines.length; i++) {\r\n y += layout.lines[i].height;\r\n }\r\n\r\n return y;\r\n}\r\n\r\n/**\r\n * Get selection rectangle for a portion of a line\r\n */\r\nfunction getLineSelectionRect(\r\n line: LayoutLine,\r\n lineIndex: number,\r\n startGraphemeIndex: number,\r\n endGraphemeIndex: number,\r\n layout: LayoutResult,\r\n options: TextLayoutOptions\r\n): SelectionRect | null {\r\n if (startGraphemeIndex >= endGraphemeIndex || line.bounds.length === 0) {\r\n return null;\r\n }\r\n\r\n // Calculate start X\r\n let startX = 0;\r\n if (startGraphemeIndex > 0 && startGraphemeIndex <= line.bounds.length) {\r\n const startBound = line.bounds[startGraphemeIndex - 1];\r\n startX = startBound.x + startBound.kernedWidth;\r\n }\r\n\r\n // Calculate end X\r\n let endX = line.width;\r\n if (endGraphemeIndex > 0 && endGraphemeIndex <= line.bounds.length) {\r\n const endBound = line.bounds[endGraphemeIndex - 1];\r\n endX = endBound.x + endBound.kernedWidth;\r\n }\r\n\r\n const y = calculateLineY(lineIndex, layout, options);\r\n\r\n return {\r\n x: Math.min(startX, endX),\r\n y,\r\n width: Math.abs(endX - startX),\r\n height: line.height,\r\n baseline: y + line.baseline,\r\n lineIndex,\r\n startIndex: startGraphemeIndex,\r\n endIndex: endGraphemeIndex,\r\n };\r\n}\r\n\r\n/**\r\n * Get word boundaries for double-click selection\r\n */\r\nexport function getWordBoundaries(\r\n text: string,\r\n graphemeIndex: number\r\n): { start: number; end: number } {\r\n const graphemes = segmentGraphemes(text);\r\n \r\n if (graphemeIndex >= graphemes.length) {\r\n return { start: graphemes.length, end: graphemes.length };\r\n }\r\n\r\n // Find word boundaries\r\n let start = graphemeIndex;\r\n let end = graphemeIndex;\r\n\r\n // Expand backwards to find word start\r\n while (start > 0 && !isWordBoundary(graphemes[start - 1])) {\r\n start--;\r\n }\r\n\r\n // Expand forwards to find word end\r\n while (end < graphemes.length && !isWordBoundary(graphemes[end])) {\r\n end++;\r\n }\r\n\r\n return { start, end };\r\n}\r\n\r\n/**\r\n * Get line boundaries for triple-click selection\r\n */\r\nexport function getLineBoundaries(\r\n insertionIndex: number,\r\n layout: LayoutResult\r\n): { start: number; end: number } {\r\n const position = findPositionFromIndex(insertionIndex, layout);\r\n const line = layout.lines[position.lineIndex];\r\n \r\n if (!line) {\r\n return { start: insertionIndex, end: insertionIndex };\r\n }\r\n\r\n // Calculate line start and end indices\r\n const lineStart = calculateInsertionIndex(position.lineIndex, 0, layout);\r\n const lineEnd = calculateInsertionIndex(\r\n position.lineIndex, \r\n line.graphemes.length, \r\n layout\r\n );\r\n\r\n return { start: lineStart, end: lineEnd };\r\n}\r\n\r\n/**\r\n * Check if a character is a word boundary\r\n */\r\nfunction isWordBoundary(grapheme: string): boolean {\r\n return /\\s/.test(grapheme) || /[^\\w]/.test(grapheme);\r\n}\r\n\r\n/**\r\n * Find closest cursor position to a point (for drag operations)\r\n */\r\nexport function findClosestCursorPosition(\r\n x: number,\r\n y: number,\r\n layout: LayoutResult,\r\n options: TextLayoutOptions\r\n): number {\r\n const hitResult = hitTest(x, y, layout, options);\r\n return hitResult.insertionIndex;\r\n}\r\n\r\n/**\r\n * Get bounding box for a range of text\r\n */\r\nexport function getTextRangeBounds(\r\n startIndex: number,\r\n endIndex: number,\r\n layout: LayoutResult,\r\n options: TextLayoutOptions\r\n): {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n rects: SelectionRect[];\r\n} {\r\n const rects = getSelectionRects(startIndex, endIndex, layout, options);\r\n \r\n if (rects.length === 0) {\r\n return {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n rects: [],\r\n };\r\n }\r\n\r\n const minX = Math.min(...rects.map(r => r.x));\r\n const maxX = Math.max(...rects.map(r => r.x + r.width));\r\n const minY = Math.min(...rects.map(r => r.y));\r\n const maxY = Math.max(...rects.map(r => r.y + r.height));\r\n\r\n return {\r\n x: minX,\r\n y: minY,\r\n width: maxX - minX,\r\n height: maxY - minY,\r\n rects,\r\n };\r\n}"],"names":["hitTest","x","y","layout","options","lines","length","lineIndex","charIndex","graphemeIndex","isAtLineEnd","isAtTextEnd","insertionIndex","lineResult","_lines","currentY","i","line","height","offsetY","findLineAtY","bounds","calculateInsertionIndex","charResult","visualBounds","map","bound","logicalIndex","visualX","visualXEnd","kernedWidth","sort","a","b","leftmostX","rightmostX","firstVisualBound","closestBound","lastVisualBound","nextVisual","reduce","closest","current","closestDistance","Math","abs","findCharAtX","getCursorRect","width","fontSize","baseline","position","currentIndex","lineLength","graphemes","lastLineIndex","lastLine","findPositionFromIndex","lineHeight","boundIndex","min","calculateLineY"],"mappings":"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"}
1
+ {"version":3,"file":"hitTest.min.mjs","sources":["../../../src/text/hitTest.ts"],"sourcesContent":["/**\n * Hit Testing and Cursor Positioning System\n * \n * Maps pointer coordinates to text positions and provides cursor rectangles\n * for interactive text editing with grapheme-aware boundaries.\n */\n\nimport type { LayoutResult, LayoutLine, GraphemeBounds } from './layout';\nimport type { TextLayoutOptions } from './layout';\nimport { segmentGraphemes } from './unicode';\n\nexport interface HitTestResult {\n lineIndex: number;\n charIndex: number;\n graphemeIndex: number;\n isAtLineEnd: boolean;\n isAtTextEnd: boolean;\n insertionIndex: number; // For cursor positioning\n closestBound?: GraphemeBounds;\n}\n\nexport interface CursorRect {\n x: number;\n y: number;\n width: number;\n height: number;\n baseline: number;\n}\n\nexport interface SelectionRect extends CursorRect {\n lineIndex: number;\n startIndex: number;\n endIndex: number;\n}\n\n/**\n * Hit test a point against laid out text to find insertion position\n */\nexport function hitTest(\n x: number,\n y: number,\n layout: LayoutResult,\n options: TextLayoutOptions\n): HitTestResult {\n if (layout.lines.length === 0) {\n return {\n lineIndex: 0,\n charIndex: 0,\n graphemeIndex: 0,\n isAtLineEnd: true,\n isAtTextEnd: true,\n insertionIndex: 0,\n };\n }\n\n // Find the line containing the y coordinate\n const lineResult = findLineAtY(y, layout.lines);\n const line = layout.lines[lineResult.lineIndex];\n \n if (!line || line.bounds.length === 0) {\n return {\n lineIndex: lineResult.lineIndex,\n charIndex: 0,\n graphemeIndex: 0,\n isAtLineEnd: true,\n isAtTextEnd: lineResult.lineIndex >= layout.lines.length - 1,\n insertionIndex: calculateInsertionIndex(lineResult.lineIndex, 0, layout),\n };\n }\n\n // Find the character position within the line\n const charResult = findCharAtX(x, line, options);\n \n // Calculate total insertion index\n const insertionIndex = calculateInsertionIndex(\n lineResult.lineIndex, \n charResult.graphemeIndex, \n layout\n );\n\n return {\n lineIndex: lineResult.lineIndex,\n charIndex: charResult.charIndex,\n graphemeIndex: charResult.graphemeIndex,\n isAtLineEnd: charResult.isAtLineEnd,\n isAtTextEnd: lineResult.lineIndex >= layout.lines.length - 1 && charResult.isAtLineEnd,\n insertionIndex,\n closestBound: charResult.closestBound,\n };\n}\n\n/**\n * Get cursor rectangle for a given insertion index\n */\nexport function getCursorRect(\n insertionIndex: number,\n layout: LayoutResult,\n options: TextLayoutOptions\n): CursorRect {\n if (layout.lines.length === 0) {\n return {\n x: 0,\n y: 0,\n width: 2, // Default cursor width\n height: options.fontSize,\n baseline: options.fontSize * 0.8,\n };\n }\n\n const position = findPositionFromIndex(insertionIndex, layout);\n const line = layout.lines[position.lineIndex];\n\n if (!line) {\n // Past end of text\n const lastLine = layout.lines[layout.lines.length - 1];\n return {\n x: lastLine.width,\n y: (layout.lines.length - 1) * (options.fontSize * options.lineHeight),\n width: 2,\n height: options.fontSize * options.lineHeight,\n baseline: options.fontSize * 0.8,\n };\n }\n\n // Get position within line\n let x = 0;\n if (position.graphemeIndex > 0 && line.bounds.length > 0) {\n const boundIndex = Math.min(position.graphemeIndex - 1, line.bounds.length - 1);\n const bound = line.bounds[boundIndex];\n x = bound.x + bound.kernedWidth;\n }\n\n const y = calculateLineY(position.lineIndex, layout, options);\n\n return {\n x,\n y,\n width: 2, // Standard cursor width\n height: line.height,\n baseline: y + line.baseline,\n };\n}\n\n/**\n * Get selection rectangles for a range of text\n */\nexport function getSelectionRects(\n startIndex: number,\n endIndex: number,\n layout: LayoutResult,\n options: TextLayoutOptions\n): SelectionRect[] {\n if (startIndex >= endIndex || layout.lines.length === 0) {\n return [];\n }\n\n const startPos = findPositionFromIndex(startIndex, layout);\n const endPos = findPositionFromIndex(endIndex, layout);\n const rects: SelectionRect[] = [];\n\n // Handle selection across multiple lines\n for (let lineIndex = startPos.lineIndex; lineIndex <= endPos.lineIndex; lineIndex++) {\n const line = layout.lines[lineIndex];\n if (!line) continue;\n\n // Determine start and end positions within this line\n const lineStartIndex = lineIndex === startPos.lineIndex ? startPos.graphemeIndex : 0;\n const lineEndIndex = lineIndex === endPos.lineIndex \n ? endPos.graphemeIndex \n : line.graphemes.length;\n\n if (lineStartIndex >= lineEndIndex) continue;\n\n // Calculate selection rectangle for this line\n const rect = getLineSelectionRect(\n line,\n lineIndex,\n lineStartIndex,\n lineEndIndex,\n layout,\n options\n );\n\n if (rect) {\n rects.push(rect);\n }\n }\n\n return rects;\n}\n\n/**\n * Get grapheme boundaries for text navigation\n */\nexport function getGraphemeBoundaries(text: string): number[] {\n const graphemes = segmentGraphemes(text);\n const boundaries: number[] = [0];\n let stringIndex = 0;\n\n for (const grapheme of graphemes) {\n stringIndex += grapheme.length;\n boundaries.push(stringIndex);\n }\n\n return boundaries;\n}\n\n/**\n * Map string index to grapheme index\n */\nexport function mapStringIndexToGraphemeIndex(text: string, stringIndex: number): number {\n const graphemes = segmentGraphemes(text);\n let currentStringIndex = 0;\n\n for (let i = 0; i < graphemes.length; i++) {\n if (currentStringIndex >= stringIndex) {\n return i;\n }\n currentStringIndex += graphemes[i].length;\n }\n\n return graphemes.length;\n}\n\n/**\n * Map grapheme index to string index\n */\nexport function mapGraphemeIndexToStringIndex(text: string, graphemeIndex: number): number {\n const graphemes = segmentGraphemes(text);\n let stringIndex = 0;\n\n for (let i = 0; i < graphemeIndex && i < graphemes.length; i++) {\n stringIndex += graphemes[i].length;\n }\n\n return stringIndex;\n}\n\n// Private helper functions\n\n/**\n * Find which line contains the given Y coordinate\n */\nfunction findLineAtY(y: number, lines: LayoutLine[]): { lineIndex: number; offsetY: number } {\n let currentY = 0;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (y >= currentY && y < currentY + line.height) {\n return { lineIndex: i, offsetY: y - currentY };\n }\n currentY += line.height;\n }\n\n // Y is past all lines - return last line\n return { \n lineIndex: lines.length - 1, \n offsetY: lines[lines.length - 1]?.height || 0 \n };\n}\n\n/**\n * Find character position within a line at given X coordinate\n */\nfunction findCharAtX(\n x: number,\n line: LayoutLine,\n options: TextLayoutOptions\n): {\n charIndex: number;\n graphemeIndex: number;\n isAtLineEnd: boolean;\n closestBound?: GraphemeBounds;\n} {\n if (line.bounds.length === 0) {\n return {\n charIndex: 0,\n graphemeIndex: 0,\n isAtLineEnd: true,\n };\n }\n\n // Create visual ordering: sort bounds by visual X position (left-to-right)\n // This handles mixed LTR/RTL content where visual order != logical order\n const visualBounds = line.bounds.map((bound, logicalIndex) => ({\n bound,\n logicalIndex,\n visualX: bound.x,\n visualXEnd: bound.x + bound.kernedWidth,\n })).sort((a, b) => a.visualX - b.visualX);\n\n // Find leftmost and rightmost visual positions\n const leftmostX = visualBounds[0].visualX;\n const rightmostX = visualBounds[visualBounds.length - 1].visualXEnd;\n\n // Handle clicks before the line starts\n if (x < leftmostX) {\n // Find the character that appears visually first\n const firstVisualBound = visualBounds[0];\n return {\n charIndex: firstVisualBound.bound.charIndex,\n graphemeIndex: firstVisualBound.bound.graphemeIndex,\n isAtLineEnd: false,\n closestBound: firstVisualBound.bound,\n };\n }\n\n // Handle clicks after the line ends\n if (x >= rightmostX) {\n // Find the character that appears visually last\n const lastVisualBound = visualBounds[visualBounds.length - 1];\n return {\n charIndex: lastVisualBound.bound.charIndex + 1,\n graphemeIndex: lastVisualBound.bound.graphemeIndex + 1,\n isAtLineEnd: true,\n closestBound: lastVisualBound.bound,\n };\n }\n\n // Find the character containing the X coordinate\n for (let i = 0; i < visualBounds.length; i++) {\n const { bound, visualX, visualXEnd } = visualBounds[i];\n \n if (x >= visualX && x < visualXEnd) {\n // Determine if closer to start or end of character\n const midpoint = visualX + (visualXEnd - visualX) / 2;\n const insertBeforeChar = x < midpoint;\n \n if (insertBeforeChar) {\n return {\n charIndex: bound.charIndex,\n graphemeIndex: bound.graphemeIndex,\n isAtLineEnd: false,\n closestBound: bound,\n };\n } else {\n // Insert after this character\n return {\n charIndex: bound.charIndex + 1,\n graphemeIndex: bound.graphemeIndex + 1,\n isAtLineEnd: false,\n closestBound: bound,\n };\n }\n }\n \n // Check if x is in the gap between this character and the next\n if (i < visualBounds.length - 1) {\n const nextVisual = visualBounds[i + 1];\n if (x >= visualXEnd && x < nextVisual.visualX) {\n // Click in gap - place cursor after current character\n return {\n charIndex: bound.charIndex + 1,\n graphemeIndex: bound.graphemeIndex + 1,\n isAtLineEnd: false,\n closestBound: bound,\n };\n }\n }\n }\n\n // Fallback - find closest character\n const closestBound = visualBounds.reduce((closest, current) => {\n const closestDistance = Math.abs((closest.visualX + closest.visualXEnd) / 2 - x);\n const currentDistance = Math.abs((current.visualX + current.visualXEnd) / 2 - x);\n return currentDistance < closestDistance ? current : closest;\n });\n\n return {\n charIndex: closestBound.bound.charIndex,\n graphemeIndex: closestBound.bound.graphemeIndex,\n isAtLineEnd: false,\n closestBound: closestBound.bound,\n };\n}\n\n/**\n * Calculate total insertion index from line and character indices\n */\nfunction calculateInsertionIndex(\n lineIndex: number,\n graphemeIndex: number,\n layout: LayoutResult\n): number {\n let insertionIndex = 0;\n\n // Add characters from all previous lines\n for (let i = 0; i < lineIndex && i < layout.lines.length; i++) {\n insertionIndex += layout.lines[i].graphemes.length;\n // Add newline character (except for last line)\n if (i < layout.lines.length - 1) {\n insertionIndex += 1; // \\n character\n }\n }\n\n // Add characters within current line\n insertionIndex += graphemeIndex;\n\n return insertionIndex;\n}\n\n/**\n * Find line and grapheme position from insertion index\n */\nfunction findPositionFromIndex(\n insertionIndex: number,\n layout: LayoutResult\n): { lineIndex: number; graphemeIndex: number } {\n let currentIndex = 0;\n\n for (let lineIndex = 0; lineIndex < layout.lines.length; lineIndex++) {\n const line = layout.lines[lineIndex];\n const lineLength = line.graphemes.length;\n\n // Check if index is within this line\n if (insertionIndex >= currentIndex && insertionIndex <= currentIndex + lineLength) {\n return {\n lineIndex,\n graphemeIndex: insertionIndex - currentIndex,\n };\n }\n\n // Move to next line\n currentIndex += lineLength;\n \n // Add newline character (except after last line)\n if (lineIndex < layout.lines.length - 1) {\n currentIndex += 1; // \\n character\n \n // If insertion index is exactly at the newline\n if (insertionIndex === currentIndex - 1) {\n return {\n lineIndex,\n graphemeIndex: lineLength,\n };\n }\n }\n }\n\n // Index is past end of text\n const lastLineIndex = layout.lines.length - 1;\n const lastLine = layout.lines[lastLineIndex];\n \n return {\n lineIndex: lastLineIndex,\n graphemeIndex: lastLine ? lastLine.graphemes.length : 0,\n };\n}\n\n/**\n * Calculate Y position of a line\n */\nfunction calculateLineY(\n lineIndex: number,\n layout: LayoutResult,\n options: TextLayoutOptions\n): number {\n let y = 0;\n\n for (let i = 0; i < lineIndex && i < layout.lines.length; i++) {\n y += layout.lines[i].height;\n }\n\n return y;\n}\n\n/**\n * Get selection rectangle for a portion of a line\n */\nfunction getLineSelectionRect(\n line: LayoutLine,\n lineIndex: number,\n startGraphemeIndex: number,\n endGraphemeIndex: number,\n layout: LayoutResult,\n options: TextLayoutOptions\n): SelectionRect | null {\n if (startGraphemeIndex >= endGraphemeIndex || line.bounds.length === 0) {\n return null;\n }\n\n // Calculate start X\n let startX = 0;\n if (startGraphemeIndex > 0 && startGraphemeIndex <= line.bounds.length) {\n const startBound = line.bounds[startGraphemeIndex - 1];\n startX = startBound.x + startBound.kernedWidth;\n }\n\n // Calculate end X\n let endX = line.width;\n if (endGraphemeIndex > 0 && endGraphemeIndex <= line.bounds.length) {\n const endBound = line.bounds[endGraphemeIndex - 1];\n endX = endBound.x + endBound.kernedWidth;\n }\n\n const y = calculateLineY(lineIndex, layout, options);\n\n return {\n x: Math.min(startX, endX),\n y,\n width: Math.abs(endX - startX),\n height: line.height,\n baseline: y + line.baseline,\n lineIndex,\n startIndex: startGraphemeIndex,\n endIndex: endGraphemeIndex,\n };\n}\n\n/**\n * Get word boundaries for double-click selection\n */\nexport function getWordBoundaries(\n text: string,\n graphemeIndex: number\n): { start: number; end: number } {\n const graphemes = segmentGraphemes(text);\n \n if (graphemeIndex >= graphemes.length) {\n return { start: graphemes.length, end: graphemes.length };\n }\n\n // Find word boundaries\n let start = graphemeIndex;\n let end = graphemeIndex;\n\n // Expand backwards to find word start\n while (start > 0 && !isWordBoundary(graphemes[start - 1])) {\n start--;\n }\n\n // Expand forwards to find word end\n while (end < graphemes.length && !isWordBoundary(graphemes[end])) {\n end++;\n }\n\n return { start, end };\n}\n\n/**\n * Get line boundaries for triple-click selection\n */\nexport function getLineBoundaries(\n insertionIndex: number,\n layout: LayoutResult\n): { start: number; end: number } {\n const position = findPositionFromIndex(insertionIndex, layout);\n const line = layout.lines[position.lineIndex];\n \n if (!line) {\n return { start: insertionIndex, end: insertionIndex };\n }\n\n // Calculate line start and end indices\n const lineStart = calculateInsertionIndex(position.lineIndex, 0, layout);\n const lineEnd = calculateInsertionIndex(\n position.lineIndex, \n line.graphemes.length, \n layout\n );\n\n return { start: lineStart, end: lineEnd };\n}\n\n/**\n * Check if a character is a word boundary\n */\nfunction isWordBoundary(grapheme: string): boolean {\n return /\\s/.test(grapheme) || /[^\\w]/.test(grapheme);\n}\n\n/**\n * Find closest cursor position to a point (for drag operations)\n */\nexport function findClosestCursorPosition(\n x: number,\n y: number,\n layout: LayoutResult,\n options: TextLayoutOptions\n): number {\n const hitResult = hitTest(x, y, layout, options);\n return hitResult.insertionIndex;\n}\n\n/**\n * Get bounding box for a range of text\n */\nexport function getTextRangeBounds(\n startIndex: number,\n endIndex: number,\n layout: LayoutResult,\n options: TextLayoutOptions\n): {\n x: number;\n y: number;\n width: number;\n height: number;\n rects: SelectionRect[];\n} {\n const rects = getSelectionRects(startIndex, endIndex, layout, options);\n \n if (rects.length === 0) {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n rects: [],\n };\n }\n\n const minX = Math.min(...rects.map(r => r.x));\n const maxX = Math.max(...rects.map(r => r.x + r.width));\n const minY = Math.min(...rects.map(r => r.y));\n const maxY = Math.max(...rects.map(r => r.y + r.height));\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n rects,\n };\n}"],"names":["hitTest","x","y","layout","options","lines","length","lineIndex","charIndex","graphemeIndex","isAtLineEnd","isAtTextEnd","insertionIndex","lineResult","_lines","currentY","i","line","height","offsetY","findLineAtY","bounds","calculateInsertionIndex","charResult","visualBounds","map","bound","logicalIndex","visualX","visualXEnd","kernedWidth","sort","a","b","leftmostX","rightmostX","firstVisualBound","closestBound","lastVisualBound","nextVisual","reduce","closest","current","closestDistance","Math","abs","findCharAtX","getCursorRect","width","fontSize","baseline","position","currentIndex","lineLength","graphemes","lastLineIndex","lastLine","findPositionFromIndex","lineHeight","boundIndex","min","calculateLineY"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import '../config.mjs';
2
2
 
3
- /**
4
- * Hit Testing and Cursor Positioning System
5
- *
6
- * Maps pointer coordinates to text positions and provides cursor rectangles
7
- * for interactive text editing with grapheme-aware boundaries.
3
+ /**
4
+ * Hit Testing and Cursor Positioning System
5
+ *
6
+ * Maps pointer coordinates to text positions and provides cursor rectangles
7
+ * for interactive text editing with grapheme-aware boundaries.
8
8
  */
9
9
 
10
- /**
11
- * Hit test a point against laid out text to find insertion position
10
+ /**
11
+ * Hit test a point against laid out text to find insertion position
12
12
  */
13
13
  function hitTest(x, y, layout, options) {
14
14
  if (layout.lines.length === 0) {
@@ -52,8 +52,8 @@ function hitTest(x, y, layout, options) {
52
52
  };
53
53
  }
54
54
 
55
- /**
56
- * Get cursor rectangle for a given insertion index
55
+ /**
56
+ * Get cursor rectangle for a given insertion index
57
57
  */
58
58
  function getCursorRect(insertionIndex, layout, options) {
59
59
  if (layout.lines.length === 0) {
@@ -100,8 +100,8 @@ function getCursorRect(insertionIndex, layout, options) {
100
100
 
101
101
  // Private helper functions
102
102
 
103
- /**
104
- * Find which line contains the given Y coordinate
103
+ /**
104
+ * Find which line contains the given Y coordinate
105
105
  */
106
106
  function findLineAtY(y, lines) {
107
107
  var _lines;
@@ -124,8 +124,8 @@ function findLineAtY(y, lines) {
124
124
  };
125
125
  }
126
126
 
127
- /**
128
- * Find character position within a line at given X coordinate
127
+ /**
128
+ * Find character position within a line at given X coordinate
129
129
  */
130
130
  function findCharAtX(x, line, options) {
131
131
  if (line.bounds.length === 0) {
@@ -231,8 +231,8 @@ function findCharAtX(x, line, options) {
231
231
  };
232
232
  }
233
233
 
234
- /**
235
- * Calculate total insertion index from line and character indices
234
+ /**
235
+ * Calculate total insertion index from line and character indices
236
236
  */
237
237
  function calculateInsertionIndex(lineIndex, graphemeIndex, layout) {
238
238
  let insertionIndex = 0;
@@ -251,8 +251,8 @@ function calculateInsertionIndex(lineIndex, graphemeIndex, layout) {
251
251
  return insertionIndex;
252
252
  }
253
253
 
254
- /**
255
- * Find line and grapheme position from insertion index
254
+ /**
255
+ * Find line and grapheme position from insertion index
256
256
  */
257
257
  function findPositionFromIndex(insertionIndex, layout) {
258
258
  let currentIndex = 0;
@@ -294,8 +294,8 @@ function findPositionFromIndex(insertionIndex, layout) {
294
294
  };
295
295
  }
296
296
 
297
- /**
298
- * Calculate Y position of a line
297
+ /**
298
+ * Calculate Y position of a line
299
299
  */
300
300
  function calculateLineY(lineIndex, layout, options) {
301
301
  let y = 0;