@lightningjs/renderer 3.0.0-beta14 → 3.0.0-beta15

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 (271) hide show
  1. package/dist/exports/index.d.ts +1 -0
  2. package/dist/exports/index.js.map +1 -1
  3. package/dist/src/core/CoreNode.d.ts +1 -1
  4. package/dist/src/core/CoreTextNode.d.ts +0 -2
  5. package/dist/src/core/CoreTextNode.js +4 -16
  6. package/dist/src/core/CoreTextNode.js.map +1 -1
  7. package/dist/src/core/Stage.js +2 -3
  8. package/dist/src/core/Stage.js.map +1 -1
  9. package/dist/src/core/TextureError.d.ts +11 -0
  10. package/dist/src/core/TextureError.js +37 -0
  11. package/dist/src/core/TextureError.js.map +1 -0
  12. package/dist/src/core/animations/CoreAnimation.d.ts +3 -2
  13. package/dist/src/core/animations/CoreAnimation.js +3 -2
  14. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  15. package/dist/src/core/lib/WebGlContextWrapper.d.ts +5 -5
  16. package/dist/src/core/lib/textureCompression.js +1 -1
  17. package/dist/src/core/lib/textureCompression.js.map +1 -1
  18. package/dist/src/core/platform.d.ts +10 -0
  19. package/dist/src/core/platform.js +81 -0
  20. package/dist/src/core/platform.js.map +1 -0
  21. package/dist/src/core/renderers/CoreShader.d.ts +9 -0
  22. package/{src/core/text-rendering/sdf/index.ts → dist/src/core/renderers/CoreShader.js} +11 -3
  23. package/dist/src/core/renderers/CoreShader.js.map +1 -0
  24. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
  25. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
  26. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
  27. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +17 -0
  28. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +125 -0
  29. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
  30. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +14 -0
  31. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +138 -0
  32. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -0
  33. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +19 -0
  34. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +58 -0
  35. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -0
  36. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
  37. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +43 -0
  38. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
  39. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
  40. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
  41. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
  42. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
  43. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
  44. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
  45. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +65 -0
  46. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +269 -0
  47. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
  48. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
  49. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +114 -0
  50. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
  51. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
  52. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +616 -0
  53. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
  54. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +83 -0
  55. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +233 -0
  56. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
  57. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
  58. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +87 -0
  59. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
  60. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
  61. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +119 -0
  62. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
  63. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
  64. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +413 -0
  65. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
  66. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
  67. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +131 -0
  68. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
  69. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
  70. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +160 -0
  71. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
  72. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
  73. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
  74. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
  75. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
  76. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
  77. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
  78. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
  79. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
  80. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
  81. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
  82. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
  83. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
  84. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
  85. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
  86. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
  87. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
  88. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
  89. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
  90. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
  91. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
  92. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
  93. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
  94. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
  95. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
  96. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
  97. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
  98. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
  99. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
  100. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
  101. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
  102. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +35 -0
  103. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +129 -0
  104. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
  105. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +39 -0
  106. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +116 -0
  107. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
  108. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
  109. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
  110. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
  111. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
  112. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
  113. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
  114. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
  115. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
  116. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
  117. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +1 -1
  118. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  119. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +1 -1
  120. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  121. package/dist/src/core/shaders/webgl/LinearGradient.js +26 -3
  122. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  123. package/dist/src/core/shaders/webgl/RadialGradient.js +49 -27
  124. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  125. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  126. package/dist/src/core/shaders/webgl/SdfShader.js +1 -10
  127. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  128. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +21 -3
  129. package/dist/src/core/text-rendering/CanvasFontHandler.js +94 -32
  130. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -1
  131. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +2 -7
  132. package/dist/src/core/text-rendering/CanvasTextRenderer.js +51 -260
  133. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -1
  134. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +35 -5
  135. package/dist/src/core/text-rendering/SdfFontHandler.js +76 -56
  136. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
  137. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +1 -1
  138. package/dist/src/core/text-rendering/SdfTextRenderer.js +38 -82
  139. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
  140. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +19 -0
  141. package/dist/src/core/text-rendering/{sdf/Utils.js → TextLayoutEngine.js} +125 -105
  142. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  143. package/dist/src/core/text-rendering/TextRenderer.d.ts +30 -13
  144. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +12 -0
  145. package/dist/src/core/text-rendering/TextRenderingUtils.js +14 -0
  146. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +1 -0
  147. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +72 -0
  148. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +217 -0
  149. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -0
  150. package/dist/src/core/text-rendering/TrFontManager.d.ts +26 -0
  151. package/dist/src/core/text-rendering/TrFontManager.js +131 -0
  152. package/dist/src/core/text-rendering/TrFontManager.js.map +1 -0
  153. package/dist/src/core/text-rendering/Utils.d.ts +1 -42
  154. package/dist/src/core/text-rendering/Utils.js +4 -132
  155. package/dist/src/core/text-rendering/Utils.js.map +1 -1
  156. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +39 -0
  157. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +125 -0
  158. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -0
  159. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +103 -0
  160. package/dist/src/core/text-rendering/{sdf/index.js → font-face-types/SdfTrFontFace/internal/FontShaper.js} +4 -3
  161. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +1 -0
  162. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +62 -0
  163. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +88 -0
  164. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -0
  165. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +118 -0
  166. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +63 -0
  167. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -0
  168. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +14 -0
  169. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +66 -0
  170. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -0
  171. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +1 -0
  172. package/dist/src/core/text-rendering/font-face-types/utils.js +38 -0
  173. package/dist/src/core/text-rendering/font-face-types/utils.js.map +1 -0
  174. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +59 -0
  175. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +397 -0
  176. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -0
  177. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +120 -0
  178. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +551 -0
  179. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -0
  180. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +92 -0
  181. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +607 -0
  182. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -0
  183. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +12 -0
  184. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +61 -0
  185. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +1 -0
  186. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +33 -0
  187. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +52 -0
  188. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +1 -0
  189. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +13 -0
  190. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +32 -0
  191. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +1 -0
  192. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +23 -0
  193. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +84 -0
  194. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -0
  195. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +4 -0
  196. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +34 -0
  197. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +1 -0
  198. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +20 -0
  199. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +308 -0
  200. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -0
  201. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +10 -0
  202. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +40 -0
  203. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +1 -0
  204. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +26 -0
  205. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +70 -0
  206. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -0
  207. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +16 -0
  208. package/dist/src/core/text-rendering/{canvas/Settings.js → renderers/SdfTextRenderer/internal/util.js} +22 -3
  209. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +1 -0
  210. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +373 -0
  211. package/dist/src/core/text-rendering/renderers/TextRenderer.js +178 -0
  212. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -0
  213. package/dist/src/core/utils.d.ts +2 -1
  214. package/dist/src/core/utils.js +1 -1
  215. package/dist/src/core/utils.js.map +1 -1
  216. package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
  217. package/dist/src/main-api/DynamicShaderController.js +58 -0
  218. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  219. package/dist/src/main-api/Inspector.d.ts +124 -0
  220. package/dist/src/main-api/Inspector.js +283 -8
  221. package/dist/src/main-api/Inspector.js.map +1 -1
  222. package/dist/src/main-api/Renderer.d.ts +150 -26
  223. package/dist/src/main-api/Renderer.js +27 -25
  224. package/dist/src/main-api/Renderer.js.map +1 -1
  225. package/dist/src/main-api/ShaderController.d.ts +31 -0
  226. package/dist/src/main-api/ShaderController.js +37 -0
  227. package/dist/src/main-api/ShaderController.js.map +1 -0
  228. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  229. package/exports/index.ts +1 -0
  230. package/package.json +14 -15
  231. package/src/core/CoreTextNode.ts +4 -22
  232. package/src/core/Stage.ts +2 -3
  233. package/src/core/animations/CoreAnimation.ts +8 -7
  234. package/src/core/lib/textureCompression.ts +4 -2
  235. package/src/core/shaders/canvas/RoundedWithBorder.ts +1 -1
  236. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +1 -1
  237. package/src/core/shaders/webgl/LinearGradient.ts +26 -3
  238. package/src/core/shaders/webgl/RadialGradient.ts +50 -28
  239. package/src/core/shaders/webgl/SdfShader.ts +1 -12
  240. package/src/core/text-rendering/CanvasFontHandler.ts +136 -39
  241. package/src/core/text-rendering/CanvasTextRenderer.ts +75 -440
  242. package/src/core/text-rendering/SdfFontHandler.ts +94 -60
  243. package/src/core/text-rendering/SdfTextRenderer.ts +62 -116
  244. package/src/core/text-rendering/{sdf/Utils.ts → TextLayoutEngine.ts} +209 -143
  245. package/src/core/text-rendering/TextRenderer.ts +36 -13
  246. package/src/core/text-rendering/Utils.ts +5 -163
  247. package/src/core/text-rendering/{sdf/Utils.test.ts → tests/Canvas.test.ts} +98 -122
  248. package/src/core/text-rendering/tests/SdfTests.test.ts +414 -0
  249. package/src/core/utils.ts +9 -7
  250. package/src/main-api/Inspector.ts +502 -12
  251. package/src/main-api/Renderer.ts +158 -26
  252. package/dist/src/core/text-rendering/canvas/Settings.d.ts +0 -64
  253. package/dist/src/core/text-rendering/canvas/Settings.js.map +0 -1
  254. package/dist/src/core/text-rendering/canvas/Utils.d.ts +0 -20
  255. package/dist/src/core/text-rendering/canvas/Utils.js +0 -144
  256. package/dist/src/core/text-rendering/canvas/Utils.js.map +0 -1
  257. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.d.ts +0 -60
  258. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js +0 -183
  259. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js.map +0 -1
  260. package/dist/src/core/text-rendering/canvas/draw.d.ts +0 -5
  261. package/dist/src/core/text-rendering/canvas/draw.js +0 -132
  262. package/dist/src/core/text-rendering/canvas/draw.js.map +0 -1
  263. package/dist/src/core/text-rendering/sdf/Utils.d.ts +0 -26
  264. package/dist/src/core/text-rendering/sdf/Utils.js.map +0 -1
  265. package/dist/src/core/text-rendering/sdf/index.d.ts +0 -1
  266. package/dist/src/core/text-rendering/sdf/index.js.map +0 -1
  267. package/src/core/text-rendering/canvas/Settings.ts +0 -99
  268. package/src/core/text-rendering/canvas/Utils.test.ts +0 -206
  269. package/src/core/text-rendering/canvas/Utils.ts +0 -178
  270. package/src/core/text-rendering/canvas/calculateRenderInfo.ts +0 -299
  271. package/src/core/text-rendering/canvas/draw.ts +0 -165
@@ -1,37 +1,142 @@
1
- /*
2
- * If not stated otherwise in this file or this component's LICENSE file the
3
- * following copyright and licenses apply:
4
- *
5
- * Copyright 2025 Comcast Cable Communications Management, LLC.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the License);
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- */
1
+ import type {
2
+ FontMetrics,
3
+ MeasureTextFn,
4
+ NormalizedFontMetrics,
5
+ TextLayoutStruct,
6
+ TextLineStruct,
7
+ WrappedLinesStruct,
8
+ } from './TextRenderer.js';
9
+
10
+ export const defaultFontMetrics: FontMetrics = {
11
+ ascender: 800,
12
+ descender: -200,
13
+ lineGap: 200,
14
+ unitsPerEm: 1000,
15
+ };
16
+
17
+ export const normalizeFontMetrics = (
18
+ metrics: FontMetrics,
19
+ fontSize: number,
20
+ ): NormalizedFontMetrics => {
21
+ const scale = fontSize / metrics.unitsPerEm;
22
+ return {
23
+ ascender: metrics.ascender * scale,
24
+ descender: metrics.descender * scale,
25
+ lineGap: metrics.lineGap * scale,
26
+ };
27
+ };
28
+
29
+ export const mapTextLayout = (
30
+ measureText: MeasureTextFn,
31
+ metrics: NormalizedFontMetrics,
32
+ text: string,
33
+ textAlign: string,
34
+ verticalAlign: string,
35
+ fontFamily: string,
36
+ lineHeight: number,
37
+ overflowSuffix: string,
38
+ wordBreak: string,
39
+ letterSpacing: number,
40
+ maxLines: number,
41
+ maxWidth: number,
42
+ maxHeight: number,
43
+ ): TextLayoutStruct => {
44
+ const ascPx = metrics.ascender;
45
+ const descPx = metrics.descender;
46
+
47
+ const bareLineHeight = ascPx - descPx;
48
+ const lineHeightPx =
49
+ lineHeight <= 3 ? lineHeight * bareLineHeight : lineHeight;
50
+ const lineHeightDelta = lineHeightPx - bareLineHeight;
51
+ const halfDelta = lineHeightDelta * 0.5;
52
+
53
+ let effectiveMaxLines = maxLines;
54
+ if (maxHeight > 0) {
55
+ const maxFromHeight = Math.floor(maxHeight / lineHeightPx);
56
+ if (effectiveMaxLines === 0 || maxFromHeight < effectiveMaxLines) {
57
+ effectiveMaxLines = maxFromHeight;
58
+ }
59
+ }
60
+
61
+ const wrappedText = maxWidth > 0;
62
+ //wrapText or just measureLines based on maxWidth
63
+ const [lines, remainingLines, remainingText] =
64
+ wrappedText === true
65
+ ? wrapText(
66
+ measureText,
67
+ text,
68
+ fontFamily,
69
+ maxWidth,
70
+ letterSpacing,
71
+ overflowSuffix,
72
+ wordBreak,
73
+ maxLines,
74
+ )
75
+ : measureLines(
76
+ measureText,
77
+ text.split('\n'),
78
+ fontFamily,
79
+ letterSpacing,
80
+ maxLines,
81
+ );
82
+
83
+ let effectiveLineAmount = lines.length;
84
+ let effectiveMaxWidth = lines[0]![1];
85
+
86
+ //check for longest line
87
+ if (effectiveLineAmount > 1) {
88
+ for (let i = 1; i < effectiveLineAmount; i++) {
89
+ effectiveMaxWidth = Math.max(effectiveMaxWidth, lines[i]![1]);
90
+ }
91
+ }
92
+
93
+ //update line x offsets
94
+ if (textAlign !== 'left') {
95
+ const maxW = wrappedText === true ? maxWidth : effectiveMaxWidth;
96
+ for (let i = 0; i < effectiveLineAmount; i++) {
97
+ const line = lines[i]!;
98
+ const w = line[1];
99
+ line[2] = textAlign === 'right' ? maxW - w : (maxW - w) / 2;
100
+ }
101
+ }
102
+
103
+ const effectiveMaxHeight = effectiveLineAmount * lineHeightPx;
104
+
105
+ let firstBaseLine = halfDelta;
106
+ if (maxHeight > 0 && verticalAlign !== 'top') {
107
+ if (verticalAlign === 'middle') {
108
+ firstBaseLine += (maxHeight - effectiveMaxHeight) / 2;
109
+ } else {
110
+ firstBaseLine += maxHeight - effectiveMaxHeight;
111
+ }
112
+ }
113
+
114
+ const startY = firstBaseLine;
115
+ for (let i = 0; i < effectiveLineAmount; i++) {
116
+ const line = lines[i] as TextLineStruct;
117
+ line[3] = startY + lineHeightPx * i;
118
+ }
19
119
 
20
- import { isZeroWidthSpace } from '../Utils.js';
21
- import * as SdfFontHandler from '../SdfFontHandler.js';
22
- import type { TextLineStruct, WrappedLinesStruct } from '../TextRenderer.js';
120
+ return [
121
+ lines,
122
+ remainingLines,
123
+ remainingText,
124
+ bareLineHeight,
125
+ lineHeightPx,
126
+ effectiveMaxWidth,
127
+ effectiveMaxHeight,
128
+ ];
129
+ };
23
130
 
24
131
  export const measureLines = (
132
+ measureText: MeasureTextFn,
25
133
  lines: string[],
26
134
  fontFamily: string,
27
135
  letterSpacing: number,
28
- fontScale: number,
29
136
  maxLines: number,
30
- hasMaxLines: boolean,
31
137
  ): WrappedLinesStruct => {
32
138
  const measuredLines: TextLineStruct[] = [];
33
- const designLetterSpacing = letterSpacing * fontScale;
34
- let remainingLines = hasMaxLines === true ? maxLines : lines.length;
139
+ let remainingLines = maxLines > 0 ? maxLines : lines.length;
35
140
  let i = 0;
36
141
 
37
142
  while (remainingLines > 0) {
@@ -41,71 +146,90 @@ export const measureLines = (
41
146
  if (line === undefined) {
42
147
  continue;
43
148
  }
44
- const width = measureText(line, fontFamily, designLetterSpacing);
45
- measuredLines.push([line, width]);
149
+ const width = measureText(line, fontFamily, letterSpacing);
150
+ measuredLines.push([line, width, 0, 0]);
46
151
  }
47
152
 
48
153
  return [
49
154
  measuredLines,
50
155
  remainingLines,
51
- hasMaxLines === true ? lines.length - measuredLines.length > 0 : false,
156
+ maxLines > 0 ? lines.length - measuredLines.length > 0 : false,
52
157
  ];
53
158
  };
54
- /**
55
- * Wrap text for SDF rendering with proper width constraints
56
- */
159
+
57
160
  export const wrapText = (
161
+ measureText: MeasureTextFn,
58
162
  text: string,
59
163
  fontFamily: string,
60
- fontScale: number,
61
164
  maxWidth: number,
62
165
  letterSpacing: number,
63
166
  overflowSuffix: string,
64
167
  wordBreak: string,
65
168
  maxLines: number,
66
- hasMaxLines: boolean,
67
169
  ): WrappedLinesStruct => {
68
170
  const lines = text.split('\n');
69
171
  const wrappedLines: TextLineStruct[] = [];
70
- const maxWidthInDesignUnits = maxWidth / fontScale;
71
- const designLetterSpacing = letterSpacing * fontScale;
72
172
 
73
173
  // Calculate space width for line wrapping
74
- const spaceWidth = measureText(' ', fontFamily, designLetterSpacing);
174
+ const spaceWidth = measureText(' ', fontFamily, letterSpacing);
75
175
 
76
176
  let wrappedLine: TextLineStruct[] = [];
77
177
  let remainingLines = maxLines;
78
178
  let hasRemainingText = true;
179
+ let hasMaxLines = maxLines > 0;
79
180
 
80
181
  for (let i = 0; i < lines.length; i++) {
81
- const line = lines[i]!;
182
+ const line = lines[i];
183
+ if (line === undefined) {
184
+ continue;
185
+ }
82
186
 
83
- [wrappedLine, remainingLines, hasRemainingText] = wrapLine(
84
- line,
85
- fontFamily,
86
- maxWidthInDesignUnits,
87
- designLetterSpacing,
88
- spaceWidth,
89
- overflowSuffix,
90
- wordBreak,
91
- remainingLines,
92
- hasMaxLines,
93
- );
187
+ [wrappedLine, remainingLines, hasRemainingText] =
188
+ line.length > 0
189
+ ? wrapLine(
190
+ measureText,
191
+ line,
192
+ fontFamily,
193
+ maxWidth,
194
+ letterSpacing,
195
+ spaceWidth,
196
+ overflowSuffix,
197
+ wordBreak,
198
+ remainingLines,
199
+ hasMaxLines,
200
+ )
201
+ : [[['', 0, 0, 0]], remainingLines, i < lines.length - 1];
94
202
 
203
+ remainingLines--;
95
204
  wrappedLines.push(...wrappedLine);
205
+
206
+ if (hasMaxLines === true && remainingLines <= 0) {
207
+ const lastLine = wrappedLines[wrappedLines.length - 1]!;
208
+ if (i < lines.length - 1) {
209
+ if (lastLine[0].endsWith(overflowSuffix) === false) {
210
+ lastLine[0] = truncateLineWithSuffix(
211
+ measureText,
212
+ lastLine[0],
213
+ fontFamily,
214
+ maxWidth,
215
+ letterSpacing,
216
+ overflowSuffix,
217
+ );
218
+ }
219
+ }
220
+ break;
221
+ }
96
222
  }
97
223
 
98
224
  return [wrappedLines, remainingLines, hasRemainingText];
99
225
  };
100
226
 
101
- /**
102
- * Wrap a single line of text for SDF rendering
103
- */
104
227
  export const wrapLine = (
228
+ measureText: MeasureTextFn,
105
229
  line: string,
106
230
  fontFamily: string,
107
231
  maxWidth: number,
108
- designLetterSpacing: number,
232
+ letterSpacing: number,
109
233
  spaceWidth: number,
110
234
  overflowSuffix: string,
111
235
  wordBreak: string,
@@ -129,7 +253,7 @@ export const wrapLine = (
129
253
  continue;
130
254
  }
131
255
  const space = spaces[i - 1] || '';
132
- const wordWidth = measureText(word, fontFamily, designLetterSpacing);
256
+ const wordWidth = measureText(word, fontFamily, letterSpacing);
133
257
  // For width calculation, treat ZWSP as having 0 width but regular space functionality
134
258
  const effectiveSpaceWidth = space === '\u200B' ? 0 : spaceWidth;
135
259
  const totalWidth = currentLineWidth + effectiveSpaceWidth + wordWidth;
@@ -165,25 +289,23 @@ export const wrapLine = (
165
289
  }
166
290
 
167
291
  if (wordBreak !== 'break-all' && currentLine.length > 0) {
168
- wrappedLines.push([currentLine, currentLineWidth]);
169
- currentLine = '';
170
- currentLineWidth = 0;
171
- remainingLines--;
292
+ wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
172
293
  }
173
294
 
174
295
  if (wordBreak !== 'break-all') {
296
+ remainingLines--;
175
297
  currentLine = word;
176
298
  currentLineWidth = wordWidth;
177
299
  }
178
300
 
179
301
  if (wordBreak === 'break-word') {
180
302
  const [lines, rl, rt] = breakWord(
303
+ measureText,
181
304
  word,
182
305
  fontFamily,
183
306
  maxWidth,
184
- designLetterSpacing,
307
+ letterSpacing,
185
308
  remainingLines,
186
- hasMaxLines,
187
309
  );
188
310
  remainingLines = rl;
189
311
  hasRemainingText = rt;
@@ -198,16 +320,17 @@ export const wrapLine = (
198
320
  }
199
321
  }
200
322
  } else if (wordBreak === 'break-all') {
201
- const codepoint = word.codePointAt(0)!;
202
- const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
203
- const firstLetterWidth =
204
- glyph !== null ? glyph.xadvance + designLetterSpacing : 0;
323
+ const firstLetterWidth = measureText(
324
+ word.charAt(0),
325
+ fontFamily,
326
+ letterSpacing,
327
+ );
205
328
  let linebreak = false;
206
329
  if (
207
330
  currentLineWidth + firstLetterWidth + effectiveSpaceWidth >
208
331
  maxWidth
209
332
  ) {
210
- wrappedLines.push([currentLine, currentLineWidth]);
333
+ wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
211
334
  remainingLines -= 1;
212
335
  currentLine = '';
213
336
  currentLineWidth = 0;
@@ -215,13 +338,13 @@ export const wrapLine = (
215
338
  }
216
339
  const initial = maxWidth - currentLineWidth;
217
340
  const [lines, rl, rt] = breakAll(
341
+ measureText,
218
342
  word,
219
343
  fontFamily,
220
344
  initial,
221
345
  maxWidth,
222
- designLetterSpacing,
346
+ letterSpacing,
223
347
  remainingLines,
224
- hasMaxLines,
225
348
  );
226
349
  remainingLines = rl;
227
350
  hasRemainingText = rt;
@@ -229,13 +352,13 @@ export const wrapLine = (
229
352
  const [text, width] = lines[0]!;
230
353
  currentLine += ' ' + text;
231
354
  currentLineWidth = width;
232
- wrappedLines.push([currentLine, currentLineWidth]);
355
+ wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
233
356
  }
234
357
 
235
358
  for (let j = 1; j < lines.length; j++) {
236
359
  [currentLine, currentLineWidth] = lines[j]!;
237
360
  if (j < lines.length - 1) {
238
- wrappedLines.push([currentLine, currentLineWidth]);
361
+ wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
239
362
  }
240
363
  }
241
364
  }
@@ -243,81 +366,35 @@ export const wrapLine = (
243
366
  }
244
367
 
245
368
  // Add the last line if it has content
246
- if (currentLine.length > 0 && remainingLines === 0) {
369
+ if (currentLine.length > 0 && hasMaxLines === true && remainingLines === 0) {
247
370
  currentLine = truncateLineWithSuffix(
371
+ measureText,
248
372
  currentLine,
249
373
  fontFamily,
250
374
  maxWidth,
251
- designLetterSpacing,
375
+ letterSpacing,
252
376
  overflowSuffix,
253
377
  );
254
378
  }
255
379
 
256
380
  if (currentLine.length > 0) {
257
- wrappedLines.push([currentLine, currentLineWidth]);
258
- } else {
259
- wrappedLines.push(['', 0]);
381
+ wrappedLines.push([currentLine, currentLineWidth, 0, 0]);
260
382
  }
261
383
  return [wrappedLines, remainingLines, hasRemainingText];
262
384
  };
263
385
 
264
- /**
265
- * Measure the width of text in SDF design units
266
- */
267
- export const measureText = (
268
- text: string,
269
- fontFamily: string,
270
- designLetterSpacing: number,
271
- ): number => {
272
- let width = 0;
273
- let prevCodepoint = 0;
274
- for (let i = 0; i < text.length; i++) {
275
- const char = text.charAt(i);
276
- const codepoint = text.codePointAt(i);
277
- if (codepoint === undefined) continue;
278
-
279
- // Skip zero-width spaces in width calculations
280
- if (isZeroWidthSpace(char)) {
281
- continue;
282
- }
283
-
284
- const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
285
- if (glyph === null) continue;
286
-
287
- let advance = glyph.xadvance;
288
-
289
- // Add kerning if there's a previous character
290
- if (prevCodepoint !== 0) {
291
- const kerning = SdfFontHandler.getKerning(
292
- fontFamily,
293
- prevCodepoint,
294
- codepoint,
295
- );
296
- advance += kerning;
297
- }
298
-
299
- width += advance + designLetterSpacing;
300
- prevCodepoint = codepoint;
301
- }
302
-
303
- return width;
304
- };
305
-
306
386
  /**
307
387
  * Truncate a line with overflow suffix to fit within width
308
388
  */
309
389
  export const truncateLineWithSuffix = (
390
+ measureText: MeasureTextFn,
310
391
  line: string,
311
392
  fontFamily: string,
312
393
  maxWidth: number,
313
- designLetterSpacing: number,
394
+ letterSpacing: number,
314
395
  overflowSuffix: string,
315
396
  ): string => {
316
- const suffixWidth = measureText(
317
- overflowSuffix,
318
- fontFamily,
319
- designLetterSpacing,
320
- );
397
+ const suffixWidth = measureText(overflowSuffix, fontFamily, letterSpacing);
321
398
 
322
399
  if (suffixWidth >= maxWidth) {
323
400
  return overflowSuffix.substring(0, Math.max(1, overflowSuffix.length - 1));
@@ -325,11 +402,7 @@ export const truncateLineWithSuffix = (
325
402
 
326
403
  let truncatedLine = line;
327
404
  while (truncatedLine.length > 0) {
328
- const lineWidth = measureText(
329
- truncatedLine,
330
- fontFamily,
331
- designLetterSpacing,
332
- );
405
+ const lineWidth = measureText(truncatedLine, fontFamily, letterSpacing);
333
406
  if (lineWidth + suffixWidth <= maxWidth) {
334
407
  return truncatedLine + overflowSuffix;
335
408
  }
@@ -343,12 +416,12 @@ export const truncateLineWithSuffix = (
343
416
  * wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
344
417
  */
345
418
  export const breakWord = (
419
+ measureText: MeasureTextFn,
346
420
  word: string,
347
421
  fontFamily: string,
348
422
  maxWidth: number,
349
- designLetterSpacing: number,
423
+ letterSpacing: number,
350
424
  remainingLines: number,
351
- hasMaxLines: boolean,
352
425
  ): WrappedLinesStruct => {
353
426
  const lines: TextLineStruct[] = [];
354
427
  let currentPart = '';
@@ -360,17 +433,14 @@ export const breakWord = (
360
433
  const codepoint = char.codePointAt(0);
361
434
  if (codepoint === undefined) continue;
362
435
 
363
- const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
364
- if (glyph === null) continue;
365
-
366
- const charWidth = glyph.xadvance + designLetterSpacing;
436
+ const charWidth = measureText(char, fontFamily, letterSpacing);
367
437
 
368
438
  if (currentWidth + charWidth > maxWidth && currentPart.length > 0) {
369
439
  remainingLines--;
370
440
  if (remainingLines === 0) {
371
441
  break;
372
442
  }
373
- lines.push([currentPart, currentWidth]);
443
+ lines.push([currentPart, currentWidth, 0, 0]);
374
444
  currentPart = char;
375
445
  currentWidth = charWidth;
376
446
  } else {
@@ -380,7 +450,7 @@ export const breakWord = (
380
450
  }
381
451
 
382
452
  if (currentPart.length > 0) {
383
- lines.push([currentPart, currentWidth]);
453
+ lines.push([currentPart, currentWidth, 0, 0]);
384
454
  }
385
455
 
386
456
  return [lines, remainingLines, i < word.length - 1];
@@ -390,13 +460,13 @@ export const breakWord = (
390
460
  * wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
391
461
  */
392
462
  export const breakAll = (
463
+ measureText: MeasureTextFn,
393
464
  word: string,
394
465
  fontFamily: string,
395
466
  initial: number,
396
467
  maxWidth: number,
397
- designLetterSpacing: number,
468
+ letterSpacing: number,
398
469
  remainingLines: number,
399
- hasMaxLines: boolean,
400
470
  ): WrappedLinesStruct => {
401
471
  const lines: TextLineStruct[] = [];
402
472
  let currentPart = '';
@@ -411,13 +481,9 @@ export const breakAll = (
411
481
  break;
412
482
  }
413
483
  const char = word.charAt(i);
414
- const codepoint = char.codePointAt(0)!;
415
- const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
416
- if (glyph === null) continue;
417
-
418
- const charWidth = glyph.xadvance + designLetterSpacing;
484
+ const charWidth = measureText(char, fontFamily, letterSpacing);
419
485
  if (currentWidth + charWidth > max && currentPart.length > 0) {
420
- lines.push([currentPart, currentWidth]);
486
+ lines.push([currentPart, currentWidth, 0, 0]);
421
487
  currentPart = char;
422
488
  currentWidth = charWidth;
423
489
  max = maxWidth;
@@ -429,7 +495,7 @@ export const breakAll = (
429
495
  }
430
496
 
431
497
  if (currentPart.length > 0) {
432
- lines.push([currentPart, currentWidth]);
498
+ lines.push([currentPart, currentWidth, 0, 0]);
433
499
  }
434
500
 
435
501
  return [lines, remainingLines, hasRemainingText];
@@ -198,16 +198,6 @@ export interface TrProps extends TrFontProps {
198
198
  * @default 0
199
199
  */
200
200
  maxLines: number;
201
- /**
202
- * Baseline for text
203
- *
204
- * @remarks
205
- * This property sets the text baseline used when drawing text.
206
- * Not yet implemented in the SDF renderer.
207
- *
208
- * @default alphabetic
209
- */
210
- textBaseline: TextBaseline;
211
201
  /**
212
202
  * Vertical Align for text when lineHeight > fontSize
213
203
  *
@@ -335,6 +325,15 @@ export interface FontLoadOptions {
335
325
  atlasDataUrl?: string;
336
326
  }
337
327
 
328
+ /**
329
+ * Measure Width of Text function to be defined in font handlers, used in TextLayoutEngine
330
+ */
331
+ export type MeasureTextFn = (
332
+ text: string,
333
+ fontFamily: string,
334
+ letterSpacing: number,
335
+ ) => number;
336
+
338
337
  export interface FontHandler {
339
338
  init: (
340
339
  c: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,
@@ -350,7 +349,7 @@ export interface FontHandler {
350
349
  fontFamily: string,
351
350
  fontSize: number,
352
351
  ) => NormalizedFontMetrics;
353
- setFontMetrics: (fontFamily: string, metrics: NormalizedFontMetrics) => void;
352
+ measureText: MeasureTextFn;
354
353
  }
355
354
 
356
355
  export interface TextRenderProps {
@@ -371,6 +370,8 @@ export interface TextRenderProps {
371
370
  export interface TextRenderInfo {
372
371
  width: number;
373
372
  height: number;
373
+ hasRemainingText?: boolean;
374
+ remainingLines?: number;
374
375
  imageData?: ImageData | null; // Image data for Canvas Text Renderer
375
376
  layout?: TextLayout; // Layout data for SDF renderer caching
376
377
  }
@@ -378,7 +379,7 @@ export interface TextRenderInfo {
378
379
  export interface TextRenderer {
379
380
  type: 'canvas' | 'sdf';
380
381
  font: FontHandler;
381
- renderText: (stage: Stage, props: CoreTextNodeProps) => TextRenderInfo;
382
+ renderText: (props: CoreTextNodeProps) => TextRenderInfo;
382
383
  // Updated to accept layout data and return vertex buffer for performance
383
384
  addQuads: (layout?: TextLayout) => Float32Array | null;
384
385
  renderQuads: (
@@ -394,8 +395,10 @@ export interface TextRenderer {
394
395
  * Text line struct for text mapping
395
396
  * 0 - text
396
397
  * 1 - width
398
+ * 2 - line offset x
399
+ * 3 - line offset y
397
400
  */
398
- export type TextLineStruct = [string, number];
401
+ export type TextLineStruct = [string, number, number, number];
399
402
 
400
403
  /**
401
404
  * Wrapped lines struct for text mapping
@@ -404,3 +407,23 @@ export type TextLineStruct = [string, number];
404
407
  * 2 - remaining text
405
408
  */
406
409
  export type WrappedLinesStruct = [TextLineStruct[], number, boolean];
410
+
411
+ /**
412
+ * Wrapped lines struct for text mapping
413
+ * 0 - line structs
414
+ * 1 - remaining lines
415
+ * 2 - remaining text
416
+ * 3 - bare line height
417
+ * 4 - line height pixels
418
+ * 5 - effective width
419
+ * 6 - effective height
420
+ */
421
+ export type TextLayoutStruct = [
422
+ TextLineStruct[],
423
+ number,
424
+ boolean,
425
+ number,
426
+ number,
427
+ number,
428
+ number,
429
+ ];