@lightningjs/renderer 3.0.0-beta1 → 3.0.0-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 (490) hide show
  1. package/README.md +13 -27
  2. package/dist/exports/canvas.d.ts +1 -1
  3. package/dist/exports/canvas.js +1 -1
  4. package/dist/exports/canvas.js.map +1 -1
  5. package/dist/exports/index.d.ts +1 -5
  6. package/dist/exports/index.js +1 -5
  7. package/dist/exports/index.js.map +1 -1
  8. package/dist/exports/utils.d.ts +2 -1
  9. package/dist/exports/utils.js +2 -1
  10. package/dist/exports/utils.js.map +1 -1
  11. package/dist/exports/webgl.d.ts +2 -1
  12. package/dist/exports/webgl.js +2 -1
  13. package/dist/exports/webgl.js.map +1 -1
  14. package/dist/src/core/CoreNode.d.ts +45 -69
  15. package/dist/src/core/CoreNode.js +323 -305
  16. package/dist/src/core/CoreNode.js.map +1 -1
  17. package/dist/src/core/CoreShaderManager.d.ts +3 -5
  18. package/dist/src/core/CoreShaderManager.js.map +1 -1
  19. package/dist/src/core/CoreTextNode.d.ts +61 -87
  20. package/dist/src/core/CoreTextNode.js +276 -235
  21. package/dist/src/core/CoreTextNode.js.map +1 -1
  22. package/dist/src/core/CoreTextureManager.d.ts +9 -11
  23. package/dist/src/core/CoreTextureManager.js +80 -91
  24. package/dist/src/core/CoreTextureManager.js.map +1 -1
  25. package/dist/src/core/Stage.d.ts +75 -31
  26. package/dist/src/core/Stage.js +270 -136
  27. package/dist/src/core/Stage.js.map +1 -1
  28. package/dist/src/core/TextureMemoryManager.d.ts +10 -1
  29. package/dist/src/core/TextureMemoryManager.js +112 -78
  30. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  31. package/dist/src/core/animations/CoreAnimation.js +5 -0
  32. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  33. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  34. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  35. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  36. package/dist/src/core/lib/ImageWorker.js +3 -2
  37. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  38. package/dist/src/core/lib/RenderCoords.d.ts +9 -10
  39. package/dist/src/core/lib/RenderCoords.js +43 -55
  40. package/dist/src/core/lib/RenderCoords.js.map +1 -1
  41. package/dist/src/core/lib/WebGlContextWrapper.d.ts +51 -2
  42. package/dist/src/core/lib/WebGlContextWrapper.js +92 -22
  43. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  44. package/dist/src/core/lib/colorCache.d.ts +1 -0
  45. package/dist/src/core/lib/colorCache.js +19 -0
  46. package/dist/src/core/lib/colorCache.js.map +1 -0
  47. package/dist/src/core/lib/colorParser.d.ts +21 -0
  48. package/dist/src/core/lib/colorParser.js +72 -0
  49. package/dist/src/core/lib/colorParser.js.map +1 -0
  50. package/dist/src/core/lib/utils.d.ts +3 -0
  51. package/dist/src/core/lib/utils.js +42 -0
  52. package/dist/src/core/lib/utils.js.map +1 -1
  53. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  54. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  55. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  56. package/dist/src/core/platform.js +29 -4
  57. package/dist/src/core/platform.js.map +1 -1
  58. package/dist/src/core/platforms/Platform.d.ts +37 -0
  59. package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
  60. package/dist/src/core/platforms/Platform.js.map +1 -0
  61. package/dist/src/core/platforms/web/WebPlatform.d.ts +9 -0
  62. package/dist/src/core/platforms/web/WebPlatform.js +84 -0
  63. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  64. package/dist/src/core/renderers/CoreContextTexture.d.ts +1 -1
  65. package/dist/src/core/renderers/CoreRenderer.d.ts +5 -2
  66. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  67. package/dist/src/core/renderers/CoreShaderNode.d.ts +3 -3
  68. package/dist/src/core/renderers/CoreShaderNode.js +8 -2
  69. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  70. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +1 -1
  71. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +7 -6
  72. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  73. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -2
  74. package/dist/src/core/renderers/canvas/CanvasRenderer.js +10 -21
  75. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  76. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
  77. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  78. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +2 -2
  79. package/dist/src/core/renderers/canvas/CanvasTexture.js +11 -9
  80. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  81. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  82. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  83. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  84. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  85. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  86. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  87. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
  88. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  89. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +5 -6
  90. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +30 -18
  91. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  92. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +5 -2
  93. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  94. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +3 -1
  95. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  96. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +3 -0
  97. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  98. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +5 -6
  99. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +30 -21
  100. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  101. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +10 -2
  102. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +37 -19
  103. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  104. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +5 -3
  105. package/dist/src/core/renderers/webgl/WebGlRenderer.js +144 -117
  106. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  107. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -1
  108. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  109. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  110. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +5 -3
  111. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +55 -31
  112. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  113. package/dist/src/core/shaders/canvas/Border.js +1 -1
  114. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  115. package/dist/src/core/shaders/canvas/LinearGradient.js +5 -3
  116. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  117. package/dist/src/core/shaders/canvas/RadialGradient.js +13 -11
  118. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  119. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +14 -6
  120. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  121. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
  122. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  123. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
  124. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  125. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +1 -1
  126. package/dist/src/core/shaders/templates/BorderTemplate.js +1 -1
  127. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  128. package/dist/src/core/shaders/templates/HolePunchTemplate.js +1 -1
  129. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  130. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  131. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  132. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  133. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  134. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  135. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  136. package/dist/src/core/shaders/utils.d.ts +5 -0
  137. package/dist/src/core/shaders/utils.js +41 -0
  138. package/dist/src/core/shaders/utils.js.map +1 -0
  139. package/dist/src/core/shaders/webgl/Border.js +57 -34
  140. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  141. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  142. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  143. package/dist/src/core/shaders/webgl/LinearGradient.js +5 -4
  144. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  145. package/dist/src/core/shaders/webgl/RadialGradient.js +6 -5
  146. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  147. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +79 -36
  148. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  149. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +92 -42
  150. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  151. package/dist/src/core/shaders/webgl/SdfShader.js +1 -1
  152. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  153. package/dist/src/core/shaders/webgl/Spinner.js +2 -0
  154. package/dist/src/core/shaders/webgl/Spinner.js.map +1 -0
  155. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +41 -0
  156. package/dist/src/core/text-rendering/CanvasFontHandler.js +159 -0
  157. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  158. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +22 -0
  159. package/dist/src/core/text-rendering/CanvasTextRenderer.js +366 -0
  160. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  161. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +152 -0
  162. package/dist/src/core/text-rendering/SdfFontHandler.js +368 -0
  163. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  164. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  165. package/dist/src/core/text-rendering/SdfTextRenderer.js +355 -0
  166. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  167. package/dist/src/core/text-rendering/TextRenderer.d.ts +351 -0
  168. package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
  169. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  170. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  171. package/dist/src/core/text-rendering/Utils.d.ts +71 -0
  172. package/dist/src/core/text-rendering/Utils.js +212 -0
  173. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  174. package/dist/src/core/text-rendering/canvas/Settings.d.ts +64 -0
  175. package/dist/src/{main-api/texture-usage-trackers/TextureUsageTracker.js → core/text-rendering/canvas/Settings.js} +3 -11
  176. package/dist/src/core/text-rendering/canvas/Settings.js.map +1 -0
  177. package/dist/src/core/text-rendering/canvas/Utils.d.ts +20 -0
  178. package/dist/src/core/text-rendering/canvas/Utils.js +144 -0
  179. package/dist/src/core/text-rendering/canvas/Utils.js.map +1 -0
  180. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.d.ts +60 -0
  181. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js +183 -0
  182. package/dist/src/core/text-rendering/canvas/calculateRenderInfo.js.map +1 -0
  183. package/dist/src/core/text-rendering/canvas/draw.d.ts +5 -0
  184. package/dist/src/core/text-rendering/canvas/draw.js +132 -0
  185. package/dist/src/core/text-rendering/canvas/draw.js.map +1 -0
  186. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  187. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  188. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
  189. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  190. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  191. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +30 -34
  192. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  193. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
  194. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  195. package/dist/src/core/text-rendering/sdf/PeekableGenerator.d.ts +12 -0
  196. package/dist/src/core/text-rendering/sdf/PeekableGenerator.js +61 -0
  197. package/dist/src/core/text-rendering/sdf/PeekableGenerator.js.map +1 -0
  198. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.d.ts +45 -0
  199. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js +69 -0
  200. package/dist/src/core/text-rendering/sdf/SimpleFontShaper.js.map +1 -0
  201. package/dist/src/core/text-rendering/sdf/Utils.d.ts +26 -0
  202. package/dist/src/core/text-rendering/sdf/Utils.js +304 -0
  203. package/dist/src/core/text-rendering/sdf/Utils.js.map +1 -0
  204. package/dist/src/core/text-rendering/sdf/index.d.ts +1 -0
  205. package/dist/src/core/{CoreExtension.js → text-rendering/sdf/index.js} +3 -12
  206. package/dist/src/core/text-rendering/sdf/index.js.map +1 -0
  207. package/dist/src/core/textures/ImageTexture.d.ts +4 -3
  208. package/dist/src/core/textures/ImageTexture.js +36 -9
  209. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  210. package/dist/src/core/textures/Texture.d.ts +21 -2
  211. package/dist/src/core/textures/Texture.js +37 -6
  212. package/dist/src/core/textures/Texture.js.map +1 -1
  213. package/dist/src/core/utils.d.ts +1 -1
  214. package/dist/src/main-api/INode.d.ts +2 -2
  215. package/dist/src/main-api/Inspector.d.ts +6 -1
  216. package/dist/src/main-api/Inspector.js +43 -7
  217. package/dist/src/main-api/Inspector.js.map +1 -1
  218. package/dist/src/main-api/Renderer.d.ts +122 -46
  219. package/dist/src/main-api/Renderer.js +174 -37
  220. package/dist/src/main-api/Renderer.js.map +1 -1
  221. package/dist/src/utils.d.ts +1 -6
  222. package/dist/src/utils.js +2 -9
  223. package/dist/src/utils.js.map +1 -1
  224. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  225. package/exports/canvas.ts +1 -1
  226. package/exports/index.ts +1 -8
  227. package/exports/utils.ts +7 -1
  228. package/exports/webgl.ts +3 -1
  229. package/package.json +2 -3
  230. package/src/core/CoreNode.test.ts +0 -1
  231. package/src/core/CoreNode.ts +403 -388
  232. package/src/core/CoreShaderManager.ts +5 -10
  233. package/src/core/CoreTextNode.ts +337 -302
  234. package/src/core/CoreTextureManager.ts +78 -110
  235. package/src/core/Stage.ts +344 -178
  236. package/src/core/TextureMemoryManager.ts +150 -100
  237. package/src/core/animations/CoreAnimation.ts +7 -0
  238. package/src/core/animations/CoreAnimationController.ts +13 -4
  239. package/src/core/lib/ImageWorker.ts +9 -2
  240. package/src/core/lib/RenderCoords.ts +52 -67
  241. package/src/core/lib/WebGlContextWrapper.ts +125 -68
  242. package/src/core/lib/colorCache.ts +20 -0
  243. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
  244. package/src/core/lib/utils.ts +51 -0
  245. package/src/core/lib/validateImageBitmap.ts +17 -6
  246. package/src/core/platforms/Platform.ts +77 -0
  247. package/src/core/platforms/web/WebPlatform.ts +121 -0
  248. package/src/core/renderers/CoreContextTexture.ts +1 -1
  249. package/src/core/renderers/CoreRenderer.ts +5 -2
  250. package/src/core/renderers/CoreShaderNode.ts +10 -6
  251. package/src/core/renderers/canvas/CanvasRenderer.ts +12 -28
  252. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -6
  253. package/src/core/renderers/canvas/CanvasTexture.ts +17 -14
  254. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +5 -0
  255. package/src/core/renderers/webgl/WebGlCtxTexture.ts +52 -43
  256. package/src/core/renderers/webgl/WebGlRenderOp.ts +46 -24
  257. package/src/core/renderers/webgl/WebGlRenderer.ts +177 -145
  258. package/src/core/renderers/webgl/WebGlShaderNode.ts +7 -5
  259. package/src/core/renderers/webgl/WebGlShaderProgram.ts +68 -37
  260. package/src/core/shaders/canvas/Border.ts +1 -4
  261. package/src/core/shaders/canvas/LinearGradient.ts +8 -6
  262. package/src/core/shaders/canvas/RadialGradient.ts +22 -36
  263. package/src/core/shaders/canvas/RoundedWithBorder.ts +17 -11
  264. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +14 -12
  265. package/src/core/shaders/canvas/RoundedWithShadow.ts +8 -7
  266. package/src/core/shaders/templates/BorderTemplate.ts +1 -1
  267. package/src/core/shaders/templates/HolePunchTemplate.ts +1 -1
  268. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  269. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  270. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  271. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  272. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  273. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  274. package/src/core/shaders/webgl/Border.ts +57 -37
  275. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  276. package/src/core/shaders/webgl/LinearGradient.ts +5 -4
  277. package/src/core/shaders/webgl/RadialGradient.ts +7 -6
  278. package/src/core/shaders/webgl/RoundedWithBorder.ts +80 -39
  279. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +92 -50
  280. package/src/core/shaders/webgl/SdfShader.ts +1 -4
  281. package/src/core/text-rendering/CanvasFontHandler.ts +210 -0
  282. package/src/core/text-rendering/CanvasTextRenderer.ts +622 -0
  283. package/src/core/text-rendering/SdfFontHandler.ts +554 -0
  284. package/src/core/text-rendering/SdfTextRenderer.ts +466 -0
  285. package/src/core/text-rendering/TextRenderer.ts +406 -0
  286. package/src/core/text-rendering/{TextTextureRendererUtils.ts → Utils.ts} +5 -11
  287. package/src/core/text-rendering/canvas/Settings.ts +99 -0
  288. package/src/core/text-rendering/canvas/Utils.test.ts +206 -0
  289. package/src/core/text-rendering/canvas/Utils.ts +178 -0
  290. package/src/core/text-rendering/canvas/calculateRenderInfo.ts +299 -0
  291. package/src/core/text-rendering/canvas/draw.ts +165 -0
  292. package/src/core/text-rendering/sdf/Utils.test.ts +402 -0
  293. package/src/core/text-rendering/sdf/Utils.ts +436 -0
  294. package/src/core/text-rendering/sdf/index.ts +20 -0
  295. package/src/core/textures/ImageTexture.ts +69 -27
  296. package/src/core/textures/Texture.ts +50 -6
  297. package/src/main-api/INode.ts +4 -3
  298. package/src/main-api/Inspector.ts +53 -8
  299. package/src/main-api/Renderer.ts +311 -87
  300. package/src/utils.ts +10 -10
  301. package/dist/exports/core-api.d.ts +0 -74
  302. package/dist/exports/core-api.js +0 -96
  303. package/dist/exports/core-api.js.map +0 -1
  304. package/dist/exports/main-api.d.ts +0 -30
  305. package/dist/exports/main-api.js +0 -45
  306. package/dist/exports/main-api.js.map +0 -1
  307. package/dist/src/core/CoreExtension.d.ts +0 -12
  308. package/dist/src/core/CoreExtension.js.map +0 -1
  309. package/dist/src/core/CoreStuff.js +0 -138
  310. package/dist/src/core/CoreStuff.js.map +0 -1
  311. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  312. package/dist/src/core/CoreTexturizer.js +0 -47
  313. package/dist/src/core/CoreTexturizer.js.map +0 -1
  314. package/dist/src/core/LngNode.d.ts +0 -736
  315. package/dist/src/core/LngNode.js +0 -1174
  316. package/dist/src/core/LngNode.js.map +0 -1
  317. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  318. package/dist/src/core/Matrix2DContext.js +0 -45
  319. package/dist/src/core/Matrix2DContext.js.map +0 -1
  320. package/dist/src/core/ShaderNode.d.ts +0 -10
  321. package/dist/src/core/ShaderNode.js +0 -30
  322. package/dist/src/core/ShaderNode.js.map +0 -1
  323. package/dist/src/core/TextNode.d.ts +0 -103
  324. package/dist/src/core/TextNode.js +0 -331
  325. package/dist/src/core/TextNode.js.map +0 -1
  326. package/dist/src/core/lib/Coords.d.ts +0 -14
  327. package/dist/src/core/lib/Coords.js +0 -55
  328. package/dist/src/core/lib/Coords.js.map +0 -1
  329. package/dist/src/core/lib/glm/common.d.ts +0 -162
  330. package/dist/src/core/lib/glm/common.js +0 -81
  331. package/dist/src/core/lib/glm/common.js.map +0 -1
  332. package/dist/src/core/lib/glm/index.d.ts +0 -11
  333. package/dist/src/core/lib/glm/index.js +0 -30
  334. package/dist/src/core/lib/glm/index.js.map +0 -1
  335. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  336. package/dist/src/core/lib/glm/mat2.js +0 -396
  337. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  338. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  339. package/dist/src/core/lib/glm/mat2d.js +0 -442
  340. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  341. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  342. package/dist/src/core/lib/glm/mat3.js +0 -680
  343. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  344. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  345. package/dist/src/core/lib/glm/mat4.js +0 -1802
  346. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  347. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  348. package/dist/src/core/lib/glm/quat.js +0 -693
  349. package/dist/src/core/lib/glm/quat.js.map +0 -1
  350. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  351. package/dist/src/core/lib/glm/quat2.js +0 -754
  352. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  353. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  354. package/dist/src/core/lib/glm/vec2.js +0 -569
  355. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  356. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  357. package/dist/src/core/lib/glm/vec3.js +0 -720
  358. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  359. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  360. package/dist/src/core/lib/glm/vec4.js +0 -608
  361. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  362. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  363. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  364. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  365. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  366. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  367. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  368. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  369. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  370. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  371. package/dist/src/core/scene/Scene.d.ts +0 -59
  372. package/dist/src/core/scene/Scene.js +0 -106
  373. package/dist/src/core/scene/Scene.js.map +0 -1
  374. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  375. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  376. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  377. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  378. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  379. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  380. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  381. package/dist/src/main-api/IShaderController.d.ts +0 -14
  382. package/dist/src/main-api/IShaderController.js +0 -30
  383. package/dist/src/main-api/IShaderController.js.map +0 -1
  384. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  385. package/dist/src/main-api/IShaderNode.js +0 -19
  386. package/dist/src/main-api/IShaderNode.js.map +0 -1
  387. package/dist/src/main-api/RendererMain.d.ts +0 -375
  388. package/dist/src/main-api/RendererMain.js +0 -365
  389. package/dist/src/main-api/RendererMain.js.map +0 -1
  390. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  391. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  392. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  393. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  394. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  395. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  396. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  397. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  398. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  399. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  400. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  401. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  402. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  403. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  404. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  405. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  406. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  407. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  408. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  409. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  410. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  411. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  412. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  413. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  414. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  415. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  416. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  417. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  418. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  419. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  420. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  421. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  422. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  423. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  424. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  425. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  426. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  427. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  428. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  429. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  430. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  431. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  432. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  433. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  434. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  435. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  436. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  437. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  438. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  439. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  440. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  441. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  442. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  443. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  444. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  445. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  446. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  447. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  448. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  449. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  450. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  451. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  452. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  453. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  454. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  455. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  456. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  457. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  458. package/dist/src/render-drivers/utils.d.ts +0 -12
  459. package/dist/src/render-drivers/utils.js +0 -69
  460. package/dist/src/render-drivers/utils.js.map +0 -1
  461. package/scripts/please-use-pnpm.js +0 -13
  462. package/src/core/platform.ts +0 -64
  463. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  464. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  465. package/src/core/text-rendering/TrFontManager.ts +0 -183
  466. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  467. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  468. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  469. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  470. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  471. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  472. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  473. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  474. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  475. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -841
  476. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  477. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  478. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  479. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  480. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  481. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  482. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  483. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  484. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  485. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  486. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  487. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  488. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  489. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
  490. /package/dist/src/core/{CoreStuff.d.ts → shaders/webgl/Spinner.d.ts} +0 -0
@@ -0,0 +1,165 @@
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
+ */
19
+ import { calcHeight, measureText } from './Utils.js';
20
+ import type { RenderInfo } from './calculateRenderInfo.js';
21
+ import type { LineType } from './calculateRenderInfo.js';
22
+ import { normalizeCanvasColor } from '../../lib/colorCache.js';
23
+
24
+ const MAX_TEXTURE_DIMENSION = 4096;
25
+
26
+ export const draw = (
27
+ canvas: OffscreenCanvas | HTMLCanvasElement,
28
+ context: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D,
29
+ renderInfo: RenderInfo,
30
+ linesOverride?: { lines: string[]; lineWidths: number[] },
31
+ ) => {
32
+ const fontSize = renderInfo.fontSize;
33
+ const lineHeight = renderInfo.lineHeight as number;
34
+ const precision = renderInfo.precision;
35
+ const lines = linesOverride?.lines || renderInfo.lines;
36
+ const lineWidths = linesOverride?.lineWidths || renderInfo.lineWidths;
37
+ const height =
38
+ linesOverride !== undefined
39
+ ? calcHeight(
40
+ renderInfo.textBaseline,
41
+ fontSize,
42
+ lineHeight,
43
+ linesOverride.lines.length,
44
+ 0,
45
+ )
46
+ : renderInfo.height;
47
+
48
+ // Add extra margin to prevent issue with clipped text when scaling.
49
+ canvas.width = Math.min(
50
+ Math.ceil(renderInfo.width + renderInfo.textRenderIssueMargin),
51
+ MAX_TEXTURE_DIMENSION,
52
+ );
53
+ canvas.height = Math.min(Math.ceil(height), MAX_TEXTURE_DIMENSION);
54
+
55
+ // Canvas context has been reset.
56
+ context.font = `${renderInfo.fontStyle} ${fontSize}px ${renderInfo.fontFamily}`;
57
+ context.textBaseline = renderInfo.textBaseline;
58
+
59
+ if (fontSize >= 128) {
60
+ context.globalAlpha = 0.01;
61
+ context.fillRect(0, 0, 0.01, 0.01);
62
+ context.globalAlpha = 1.0;
63
+ }
64
+
65
+ if (renderInfo.cutSx || renderInfo.cutSy) {
66
+ context.translate(-renderInfo.cutSx, -renderInfo.cutSy);
67
+ }
68
+
69
+ let linePositionX: number;
70
+ let linePositionY: number;
71
+ const drawLines: LineType[] = [];
72
+ const metrics = renderInfo.metrics;
73
+ const ascenderPx = metrics ? metrics.ascender * fontSize : fontSize;
74
+ const bareLineHeightPx = metrics
75
+ ? (metrics.ascender - metrics.descender) * fontSize
76
+ : fontSize;
77
+
78
+ for (let i = 0, n = lines.length; i < n; i++) {
79
+ linePositionX = i === 0 ? renderInfo.textIndent : 0;
80
+ linePositionY = i * lineHeight + ascenderPx;
81
+ if (renderInfo.verticalAlign == 'middle') {
82
+ linePositionY += (lineHeight - bareLineHeightPx) / 2;
83
+ } else if (renderInfo.verticalAlign == 'bottom') {
84
+ linePositionY += lineHeight - bareLineHeightPx;
85
+ }
86
+ if (renderInfo.textAlign === 'right') {
87
+ linePositionX += renderInfo.innerWidth - lineWidths[i]!;
88
+ } else if (renderInfo.textAlign === 'center') {
89
+ linePositionX += (renderInfo.innerWidth - lineWidths[i]!) / 2;
90
+ }
91
+ linePositionX += renderInfo.paddingLeft;
92
+ drawLines.push({
93
+ text: lines[i]!,
94
+ x: linePositionX,
95
+ y: linePositionY,
96
+ w: lineWidths[i]!,
97
+ });
98
+ }
99
+
100
+ // Highlight
101
+ if (renderInfo.highlight) {
102
+ const color = renderInfo.highlightColor;
103
+ const hlHeight = renderInfo.highlightHeight * precision || fontSize * 1.5;
104
+ const offset = renderInfo.highlightOffset * precision;
105
+ const hlPaddingLeft =
106
+ renderInfo.highlightPaddingLeft !== null
107
+ ? renderInfo.highlightPaddingLeft * precision
108
+ : renderInfo.paddingLeft;
109
+ const hlPaddingRight =
110
+ renderInfo.highlightPaddingRight !== null
111
+ ? renderInfo.highlightPaddingRight * precision
112
+ : renderInfo.paddingRight;
113
+ context.fillStyle = normalizeCanvasColor(color);
114
+ for (let i = 0; i < drawLines.length; i++) {
115
+ const drawLine = drawLines[i]!;
116
+ context.fillRect(
117
+ drawLine.x - hlPaddingLeft,
118
+ drawLine.y - renderInfo.offsetY + offset,
119
+ drawLine.w + hlPaddingRight + hlPaddingLeft,
120
+ hlHeight,
121
+ );
122
+ }
123
+ }
124
+
125
+ // Text shadow
126
+ let prevShadowSettings: null | [string, number, number, number] = null;
127
+ if (renderInfo.shadow) {
128
+ prevShadowSettings = [
129
+ context.shadowColor,
130
+ context.shadowOffsetX,
131
+ context.shadowOffsetY,
132
+ context.shadowBlur,
133
+ ];
134
+ context.shadowColor = normalizeCanvasColor(renderInfo.shadowColor);
135
+ context.shadowOffsetX = renderInfo.shadowOffsetX * precision;
136
+ context.shadowOffsetY = renderInfo.shadowOffsetY * precision;
137
+ context.shadowBlur = renderInfo.shadowBlur * precision;
138
+ }
139
+
140
+ context.fillStyle = normalizeCanvasColor(renderInfo.textColor);
141
+ for (let i = 0, n = drawLines.length; i < n; i++) {
142
+ const drawLine = drawLines[i]!;
143
+ if (renderInfo.letterSpacing === 0) {
144
+ context.fillText(drawLine.text, drawLine.x, drawLine.y);
145
+ } else {
146
+ const textSplit = drawLine.text.split('');
147
+ let x = drawLine.x;
148
+ for (let i = 0, j = textSplit.length; i < j; i++) {
149
+ context.fillText(textSplit[i]!, x, drawLine.y);
150
+ x += measureText(context, textSplit[i]!, renderInfo.letterSpacing);
151
+ }
152
+ }
153
+ }
154
+
155
+ if (prevShadowSettings) {
156
+ context.shadowColor = prevShadowSettings[0];
157
+ context.shadowOffsetX = prevShadowSettings[1];
158
+ context.shadowOffsetY = prevShadowSettings[2];
159
+ context.shadowBlur = prevShadowSettings[3];
160
+ }
161
+
162
+ if (renderInfo.cutSx || renderInfo.cutSy) {
163
+ context.translate(renderInfo.cutSx, renderInfo.cutSy);
164
+ }
165
+ };
@@ -0,0 +1,402 @@
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 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
+ */
19
+
20
+ import { describe, it, expect, beforeAll, vi } from 'vitest';
21
+ import {
22
+ wrapText,
23
+ wrapLine,
24
+ measureText,
25
+ truncateLineWithSuffix,
26
+ breakWord,
27
+ } from './Utils.js';
28
+ import * as SdfFontHandler from '../SdfFontHandler.js';
29
+
30
+ // Mock font data for testing
31
+ const mockFontData: SdfFontHandler.SdfFontData = {
32
+ info: {
33
+ face: 'Arial',
34
+ size: 16,
35
+ bold: 0,
36
+ italic: 0,
37
+ charset: [],
38
+ unicode: 1,
39
+ stretchH: 100,
40
+ smooth: 1,
41
+ aa: 1,
42
+ padding: [0, 0, 0, 0],
43
+ spacing: [0, 0],
44
+ outline: 0,
45
+ },
46
+ common: {
47
+ lineHeight: 20,
48
+ base: 16,
49
+ scaleW: 512,
50
+ scaleH: 512,
51
+ pages: 1,
52
+ packed: 0,
53
+ alphaChnl: 0,
54
+ redChnl: 0,
55
+ greenChnl: 0,
56
+ blueChnl: 0,
57
+ },
58
+ distanceField: {
59
+ fieldType: 'msdf',
60
+ distanceRange: 4,
61
+ },
62
+ pages: ['font.png'],
63
+ chars: [],
64
+ kernings: [],
65
+ };
66
+
67
+ // Mock SdfFontHandler functions
68
+ const mockGetGlyph = (_fontFamily: string, codepoint: number) => {
69
+ // Mock glyph data - each character is 10 units wide for easy testing
70
+ return {
71
+ id: codepoint,
72
+ char: String.fromCharCode(codepoint),
73
+ x: 0,
74
+ y: 0,
75
+ width: 10,
76
+ height: 16,
77
+ xoffset: 0,
78
+ yoffset: 0,
79
+ xadvance: 10,
80
+ page: 0,
81
+ chnl: 0,
82
+ };
83
+ };
84
+
85
+ const mockGetKerning = () => {
86
+ // No kerning for simplicity
87
+ return 0;
88
+ };
89
+
90
+ describe('SDF Text Utils', () => {
91
+ beforeAll(() => {
92
+ // Mock the SdfFontHandler functions
93
+ vi.spyOn(SdfFontHandler, 'getGlyph').mockImplementation(mockGetGlyph);
94
+ vi.spyOn(SdfFontHandler, 'getKerning').mockImplementation(mockGetKerning);
95
+ });
96
+
97
+ describe('measureText', () => {
98
+ it('should measure text width correctly', () => {
99
+ const width = measureText('hello', 'Arial', 0);
100
+ expect(width).toBe(50); // 5 characters * 10 units each
101
+ });
102
+
103
+ it('should handle empty text', () => {
104
+ const width = measureText('', 'Arial', 0);
105
+ expect(width).toBe(0);
106
+ });
107
+
108
+ it('should account for letter spacing', () => {
109
+ const width = measureText('hello', 'Arial', 2);
110
+ expect(width).toBe(60); // 5 characters * 10 units + 5 * 2 letter spacing
111
+ });
112
+
113
+ it('should skip zero-width spaces', () => {
114
+ const width = measureText('hel\u200Blo', 'Arial', 0);
115
+ expect(width).toBe(50); // ZWSP should not contribute to width
116
+ });
117
+ });
118
+
119
+ describe('wrapLine', () => {
120
+ it('should wrap text that exceeds max width', () => {
121
+ const result = wrapLine(
122
+ 'hello world test',
123
+ 'Arial',
124
+ 100, // maxWidth (10 characters at 10 units each)
125
+ 0, // designLetterSpacing
126
+ 10, // spaceWidth
127
+ '',
128
+ 'normal',
129
+ 0,
130
+ false,
131
+ );
132
+
133
+ const [lines] = result;
134
+ const [line1] = lines![0]!;
135
+ const [line2] = lines![1]!;
136
+
137
+ expect(line1).toEqual('hello'); // Break at space, not ZWSP
138
+ expect(line2).toEqual('world test');
139
+ });
140
+
141
+ it('should handle single word that fits', () => {
142
+ const result = wrapLine(
143
+ 'hello',
144
+ 'Arial',
145
+ 100,
146
+ 0,
147
+ 10, // spaceWidth
148
+ '',
149
+ 'normal',
150
+ 0,
151
+ false,
152
+ );
153
+ expect(result[0][0]).toEqual(['hello', 50]);
154
+ });
155
+
156
+ it('should break long words', () => {
157
+ const result = wrapLine(
158
+ 'verylongwordthatdoesnotfit',
159
+ 'Arial',
160
+ 100, // Only 10 characters fit (each char = 10 units)
161
+ 0,
162
+ 10, // spaceWidth
163
+ '',
164
+ 'normal',
165
+ 0,
166
+ false,
167
+ );
168
+ expect(result.length).toBeGreaterThan(1);
169
+ // The first line should exist and be appropriately sized
170
+ expect(result[0]).toBeDefined();
171
+ if (result[0][0]) {
172
+ expect(result[0][0].length).toBeLessThanOrEqual(10);
173
+ }
174
+ });
175
+
176
+ it('should handle ZWSP as word break opportunity', () => {
177
+ // Test 1: ZWSP should provide break opportunity when needed
178
+ const result1 = wrapLine(
179
+ 'hello\u200Bworld test',
180
+ 'Arial',
181
+ 100, // 10 characters max - 'helloworld' = 100 units (fits), ' test' = 50 units (exceeds)
182
+ 0,
183
+ 10, // spaceWidth
184
+ '',
185
+ 'normal',
186
+ 0,
187
+ false,
188
+ );
189
+
190
+ const [lines] = result1;
191
+ const [line1] = lines![0]!;
192
+ const [line2] = lines![1]!;
193
+
194
+ expect(line1).toEqual('helloworld'); // Break at space, not ZWSP
195
+ expect(line2).toEqual('test');
196
+
197
+ // Test 2: ZWSP should NOT break when text fits on one line
198
+ const result2 = wrapLine(
199
+ 'hi\u200Bthere',
200
+ 'Arial',
201
+ 200, // Wide enough for all text (7 characters = 70 units)
202
+ 0,
203
+ 10, // spaceWidth
204
+ '',
205
+ 'normal',
206
+ 0,
207
+ false,
208
+ );
209
+ expect(result2[0][0]).toEqual(['hithere', 70]); // ZWSP is invisible, no space added
210
+
211
+ // Test 3: ZWSP should break when it's the only break opportunity
212
+ const result3 = wrapLine(
213
+ 'verylongword\u200Bmore',
214
+ 'Arial',
215
+ 100, // 10 characters max - forces break at ZWSP
216
+ 0,
217
+ 10, // spaceWidth
218
+ '',
219
+ 'normal',
220
+ 0,
221
+ false,
222
+ );
223
+ expect(result3.length).toBeGreaterThan(1); // Should break at ZWSP position
224
+ expect(result3[0][0]).toEqual(['verylongword', 120]);
225
+ });
226
+
227
+ it('should truncate with suffix when max lines reached', () => {
228
+ const result = wrapLine(
229
+ 'hello world test more',
230
+ 'Arial',
231
+ 100,
232
+ 0,
233
+ 10, // spaceWidth
234
+ '...',
235
+ 'normal',
236
+ 1, // remainingLines = 1
237
+ false,
238
+ );
239
+ expect(result[0]).toHaveLength(1);
240
+ expect(result[0][0]?.[0]).toContain('...');
241
+ });
242
+ });
243
+
244
+ describe('wrapText', () => {
245
+ it('should wrap multiple lines', () => {
246
+ const result = wrapText(
247
+ 'line one\nline two that is longer',
248
+ 'Arial',
249
+ 1.0,
250
+ 100,
251
+ 0,
252
+ '',
253
+ 'normal',
254
+ 0,
255
+ false,
256
+ );
257
+ expect(result[0].length).toBeGreaterThan(2);
258
+ expect(result[0][0]).toStrictEqual(['line one', 80]);
259
+ });
260
+
261
+ it('should handle empty lines', () => {
262
+ const result = wrapText(
263
+ 'line one\n\nline three',
264
+ 'Arial',
265
+ 1.0,
266
+ 100,
267
+ 0,
268
+ '',
269
+ 'normal',
270
+ 0,
271
+ false,
272
+ );
273
+ expect(result[0][1]?.[0]).toBe('');
274
+ });
275
+
276
+ it('should respect max lines limit', () => {
277
+ const result = wrapText(
278
+ 'line one\\nline two\\nline three\\nline four',
279
+ 'Arial',
280
+ 1.0,
281
+ 100,
282
+ 0,
283
+ '',
284
+ 'normal',
285
+ 2, // maxLines = 2
286
+ true,
287
+ );
288
+ const [lines] = result;
289
+ expect(lines).toHaveLength(2);
290
+ });
291
+ });
292
+
293
+ describe('truncateLineWithSuffix', () => {
294
+ it('should truncate line and add suffix', () => {
295
+ const result = truncateLineWithSuffix(
296
+ 'this is a very long line',
297
+ 'Arial',
298
+ 100, // Max width for 10 characters
299
+ 0,
300
+ '...',
301
+ );
302
+ expect(result).toContain('...');
303
+ expect(result.length).toBeLessThanOrEqual(10);
304
+ });
305
+
306
+ it('should return suffix if suffix is too long', () => {
307
+ const result = truncateLineWithSuffix(
308
+ 'hello',
309
+ 'Arial',
310
+ 30, // Only 3 characters fit
311
+ 0,
312
+ 'verylongsuffix',
313
+ );
314
+ expect(result).toMatch(/verylongsuffi/); // Truncated suffix
315
+ });
316
+
317
+ it('should return original line with suffix (current behavior)', () => {
318
+ // Note: The current implementation always adds the suffix, even if the line fits.
319
+ // This is the expected behavior when used in overflow contexts where the suffix
320
+ // indicates that content was truncated at the line limit.
321
+ const result = truncateLineWithSuffix('short', 'Arial', 100, 0, '...');
322
+ expect(result).toBe('short...');
323
+ });
324
+ });
325
+
326
+ describe('breakLongWord', () => {
327
+ it('should break word into multiple lines', () => {
328
+ const result = breakWord(
329
+ 'verylongword',
330
+ 'Arial',
331
+ 50, // 5 characters max per line
332
+ 0,
333
+ 0,
334
+ false,
335
+ );
336
+ expect(result[0].length).toBeGreaterThan(1);
337
+ expect(result[0][0]?.[0]).toHaveLength(5);
338
+ });
339
+
340
+ it('should handle single character word', () => {
341
+ const result = breakWord('a', 'Arial', 50, 0, 0, false);
342
+ expect(result[0][0]).toStrictEqual(['a', 10]);
343
+ });
344
+
345
+ it('should truncate with suffix when max lines reached', () => {
346
+ const result = breakWord(
347
+ 'verylongword',
348
+ 'Arial',
349
+ 50,
350
+ 0,
351
+ 1, // remainingLines = 1
352
+ true,
353
+ );
354
+ expect(result[0]).toHaveLength(1);
355
+ });
356
+
357
+ it('should handle empty word', () => {
358
+ const result = breakWord('', 'Arial', 50, 0, 0, true);
359
+ expect(result[0]).toEqual([]);
360
+ });
361
+ });
362
+
363
+ describe('Integration tests', () => {
364
+ it('should handle complex text with ZWSP and wrapping', () => {
365
+ const text =
366
+ 'This is a test\u200Bwith zero-width\u200Bspaces that should wrap properly';
367
+ const result = wrapText(
368
+ text,
369
+ 'Arial',
370
+ 1.0,
371
+ 200, // 20 characters max per line
372
+ 0,
373
+ '...',
374
+ 'normal',
375
+ 0,
376
+ false,
377
+ );
378
+ expect(result.length).toBeGreaterThan(1);
379
+ const [lines] = result;
380
+ // Should split at ZWSP and regular spaces
381
+ expect(lines.some((line) => line[0].includes('zero-width'))).toBe(true);
382
+ });
383
+
384
+ it('should handle mixed content with long words and ZWSP', () => {
385
+ const text = 'Short\u200Bverylongwordthatmustbebroken\u200Bshort';
386
+ const result = wrapText(
387
+ text,
388
+ 'Arial',
389
+ 1.0,
390
+ 100, // 10 characters max per line
391
+ 0,
392
+ '',
393
+ 'normal',
394
+ 0,
395
+ false,
396
+ );
397
+ expect(result.length).toBeGreaterThan(2);
398
+ expect(result[0][0]?.[0]).toBe('Short');
399
+ expect(result[0][result.length - 1]?.[0]).toBe('short');
400
+ });
401
+ });
402
+ });