@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,436 @@
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
+
20
+ import { isZeroWidthSpace } from '../Utils.js';
21
+ import * as SdfFontHandler from '../SdfFontHandler.js';
22
+ import type { TextLineStruct, WrappedLinesStruct } from '../TextRenderer.js';
23
+
24
+ export const measureLines = (
25
+ lines: string[],
26
+ fontFamily: string,
27
+ letterSpacing: number,
28
+ fontScale: number,
29
+ maxLines: number,
30
+ hasMaxLines: boolean,
31
+ ): WrappedLinesStruct => {
32
+ const measuredLines: TextLineStruct[] = [];
33
+ const designLetterSpacing = letterSpacing * fontScale;
34
+ let remainingLines = hasMaxLines === true ? maxLines : lines.length;
35
+ let i = 0;
36
+
37
+ while (remainingLines > 0) {
38
+ const line = lines[i];
39
+ if (line === undefined) {
40
+ continue;
41
+ }
42
+ const width = measureText(line, fontFamily, designLetterSpacing);
43
+ measuredLines.push([line, width]);
44
+ i++;
45
+ remainingLines--;
46
+ }
47
+
48
+ return [
49
+ measuredLines,
50
+ remainingLines,
51
+ hasMaxLines === true ? lines.length - measuredLines.length > 0 : false,
52
+ ];
53
+ };
54
+ /**
55
+ * Wrap text for SDF rendering with proper width constraints
56
+ */
57
+ export const wrapText = (
58
+ text: string,
59
+ fontFamily: string,
60
+ fontScale: number,
61
+ maxWidth: number,
62
+ letterSpacing: number,
63
+ overflowSuffix: string,
64
+ wordBreak: string,
65
+ maxLines: number,
66
+ hasMaxLines: boolean,
67
+ ): WrappedLinesStruct => {
68
+ const lines = text.split('\n');
69
+ const wrappedLines: TextLineStruct[] = [];
70
+ const maxWidthInDesignUnits = maxWidth / fontScale;
71
+ const designLetterSpacing = letterSpacing * fontScale;
72
+
73
+ // Calculate space width for line wrapping
74
+ const spaceWidth = measureText(' ', fontFamily, designLetterSpacing);
75
+
76
+ let wrappedLine: TextLineStruct[] = [];
77
+ let remainingLines = maxLines;
78
+ let hasRemainingText = true;
79
+
80
+ for (let i = 0; i < lines.length; i++) {
81
+ const line = lines[i]!;
82
+
83
+ [wrappedLine, remainingLines, hasRemainingText] = wrapLine(
84
+ line,
85
+ fontFamily,
86
+ maxWidthInDesignUnits,
87
+ designLetterSpacing,
88
+ spaceWidth,
89
+ overflowSuffix,
90
+ wordBreak,
91
+ remainingLines,
92
+ hasMaxLines,
93
+ );
94
+
95
+ wrappedLines.push(...wrappedLine);
96
+ }
97
+
98
+ return [wrappedLines, remainingLines, hasRemainingText];
99
+ };
100
+
101
+ /**
102
+ * Wrap a single line of text for SDF rendering
103
+ */
104
+ export const wrapLine = (
105
+ line: string,
106
+ fontFamily: string,
107
+ maxWidth: number,
108
+ designLetterSpacing: number,
109
+ spaceWidth: number,
110
+ overflowSuffix: string,
111
+ wordBreak: string,
112
+ remainingLines: number,
113
+ hasMaxLines: boolean,
114
+ ): WrappedLinesStruct => {
115
+ // Use the same space regex as Canvas renderer to handle ZWSP
116
+ const spaceRegex = / |\u200B/g;
117
+ const words = line.split(spaceRegex);
118
+ const spaces = line.match(spaceRegex) || [];
119
+ const wrappedLines: TextLineStruct[] = [];
120
+ let currentLine = '';
121
+ let currentLineWidth = 0;
122
+ let hasRemainingText = true;
123
+
124
+ let i = 0;
125
+
126
+ for (; i < words.length; i++) {
127
+ const word = words[i];
128
+ if (word === undefined) {
129
+ continue;
130
+ }
131
+ const space = spaces[i - 1] || '';
132
+ const wordWidth = measureText(word, fontFamily, designLetterSpacing);
133
+ // For width calculation, treat ZWSP as having 0 width but regular space functionality
134
+ const effectiveSpaceWidth = space === '\u200B' ? 0 : spaceWidth;
135
+ const totalWidth = currentLineWidth + effectiveSpaceWidth + wordWidth;
136
+
137
+ if (
138
+ (i === 0 && wordWidth <= maxWidth) ||
139
+ (i > 0 && totalWidth <= maxWidth)
140
+ ) {
141
+ // Word fits on current line
142
+ if (currentLine.length > 0) {
143
+ // Add space - for ZWSP, don't add anything to output (it's invisible)
144
+ if (space !== '\u200B') {
145
+ currentLine += space;
146
+ currentLineWidth += effectiveSpaceWidth;
147
+ }
148
+ }
149
+ currentLine += word;
150
+ currentLineWidth += wordWidth;
151
+ } else {
152
+ if (remainingLines === 1) {
153
+ if (currentLine.length > 0) {
154
+ // Add space - for ZWSP, don't add anything to output (it's invisible)
155
+ if (space !== '\u200B') {
156
+ currentLine += space;
157
+ currentLineWidth += effectiveSpaceWidth;
158
+ }
159
+ }
160
+ currentLine += word;
161
+ currentLineWidth += wordWidth;
162
+ remainingLines = 0;
163
+ hasRemainingText = i < words.length;
164
+ break;
165
+ }
166
+
167
+ if (wordBreak !== 'break-all' && currentLine.length > 0) {
168
+ wrappedLines.push([currentLine, currentLineWidth]);
169
+ currentLine = '';
170
+ currentLineWidth = 0;
171
+ remainingLines--;
172
+ }
173
+
174
+ if (wordBreak !== 'break-all') {
175
+ currentLine = word;
176
+ currentLineWidth = wordWidth;
177
+ }
178
+
179
+ if (wordBreak === 'break-word') {
180
+ const [lines, rl, rt] = breakWord(
181
+ word,
182
+ fontFamily,
183
+ maxWidth,
184
+ designLetterSpacing,
185
+ remainingLines,
186
+ hasMaxLines,
187
+ );
188
+ remainingLines = rl;
189
+ hasRemainingText = rt;
190
+ if (lines.length === 1) {
191
+ [currentLine, currentLineWidth] = lines[lines.length - 1]!;
192
+ } else {
193
+ for (let j = 0; j < lines.length; j++) {
194
+ [currentLine, currentLineWidth] = lines[j]!;
195
+ if (j < lines.length - 1) {
196
+ wrappedLines.push(lines[j]!);
197
+ }
198
+ }
199
+ }
200
+ } 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;
205
+ let linebreak = false;
206
+ if (
207
+ currentLineWidth + firstLetterWidth + effectiveSpaceWidth >
208
+ maxWidth
209
+ ) {
210
+ wrappedLines.push([currentLine, currentLineWidth]);
211
+ remainingLines -= 1;
212
+ currentLine = '';
213
+ currentLineWidth = 0;
214
+ linebreak = true;
215
+ }
216
+ const initial = maxWidth - currentLineWidth;
217
+ const [lines, rl, rt] = breakAll(
218
+ word,
219
+ fontFamily,
220
+ initial,
221
+ maxWidth,
222
+ designLetterSpacing,
223
+ remainingLines,
224
+ hasMaxLines,
225
+ );
226
+ remainingLines = rl;
227
+ hasRemainingText = rt;
228
+ if (linebreak === false) {
229
+ const [text, width] = lines[0]!;
230
+ currentLine += ' ' + text;
231
+ currentLineWidth = width;
232
+ wrappedLines.push([currentLine, currentLineWidth]);
233
+ }
234
+
235
+ for (let j = 1; j < lines.length; j++) {
236
+ [currentLine, currentLineWidth] = lines[j]!;
237
+ if (j < lines.length - 1) {
238
+ wrappedLines.push([currentLine, currentLineWidth]);
239
+ }
240
+ }
241
+ }
242
+ }
243
+ }
244
+
245
+ // Add the last line if it has content
246
+ if (currentLine.length > 0 && remainingLines === 0) {
247
+ currentLine = truncateLineWithSuffix(
248
+ currentLine,
249
+ fontFamily,
250
+ maxWidth,
251
+ designLetterSpacing,
252
+ overflowSuffix,
253
+ );
254
+ }
255
+
256
+ if (currentLine.length > 0) {
257
+ wrappedLines.push([currentLine, currentLineWidth]);
258
+ } else {
259
+ wrappedLines.push(['', 0]);
260
+ }
261
+ return [wrappedLines, remainingLines, hasRemainingText];
262
+ };
263
+
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
+ /**
307
+ * Truncate a line with overflow suffix to fit within width
308
+ */
309
+ export const truncateLineWithSuffix = (
310
+ line: string,
311
+ fontFamily: string,
312
+ maxWidth: number,
313
+ designLetterSpacing: number,
314
+ overflowSuffix: string,
315
+ ): string => {
316
+ const suffixWidth = measureText(
317
+ overflowSuffix,
318
+ fontFamily,
319
+ designLetterSpacing,
320
+ );
321
+
322
+ if (suffixWidth >= maxWidth) {
323
+ return overflowSuffix.substring(0, Math.max(1, overflowSuffix.length - 1));
324
+ }
325
+
326
+ let truncatedLine = line;
327
+ while (truncatedLine.length > 0) {
328
+ const lineWidth = measureText(
329
+ truncatedLine,
330
+ fontFamily,
331
+ designLetterSpacing,
332
+ );
333
+ if (lineWidth + suffixWidth <= maxWidth) {
334
+ return truncatedLine + overflowSuffix;
335
+ }
336
+ truncatedLine = truncatedLine.substring(0, truncatedLine.length - 1);
337
+ }
338
+
339
+ return overflowSuffix;
340
+ };
341
+
342
+ /**
343
+ * wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
344
+ */
345
+ export const breakWord = (
346
+ word: string,
347
+ fontFamily: string,
348
+ maxWidth: number,
349
+ designLetterSpacing: number,
350
+ remainingLines: number,
351
+ hasMaxLines: boolean,
352
+ ): WrappedLinesStruct => {
353
+ const lines: TextLineStruct[] = [];
354
+ let currentPart = '';
355
+ let currentWidth = 0;
356
+ let i = 0;
357
+
358
+ for (let i = 0; i < word.length; i++) {
359
+ const char = word.charAt(i);
360
+ const codepoint = char.codePointAt(0);
361
+ if (codepoint === undefined) continue;
362
+
363
+ const glyph = SdfFontHandler.getGlyph(fontFamily, codepoint);
364
+ if (glyph === null) continue;
365
+
366
+ const charWidth = glyph.xadvance + designLetterSpacing;
367
+
368
+ if (currentWidth + charWidth > maxWidth && currentPart.length > 0) {
369
+ remainingLines--;
370
+ if (remainingLines === 0) {
371
+ break;
372
+ }
373
+ lines.push([currentPart, currentWidth]);
374
+ currentPart = char;
375
+ currentWidth = charWidth;
376
+ } else {
377
+ currentPart += char;
378
+ currentWidth += charWidth;
379
+ }
380
+ }
381
+
382
+ if (currentPart.length > 0) {
383
+ lines.push([currentPart, currentWidth]);
384
+ }
385
+
386
+ return [lines, remainingLines, i < word.length - 1];
387
+ };
388
+
389
+ /**
390
+ * wordbreak function: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word
391
+ */
392
+ export const breakAll = (
393
+ word: string,
394
+ fontFamily: string,
395
+ initial: number,
396
+ maxWidth: number,
397
+ designLetterSpacing: number,
398
+ remainingLines: number,
399
+ hasMaxLines: boolean,
400
+ ): WrappedLinesStruct => {
401
+ const lines: TextLineStruct[] = [];
402
+ let currentPart = '';
403
+ let currentWidth = 0;
404
+ let max = initial;
405
+ let i = 0;
406
+ let hasRemainingText = false;
407
+
408
+ for (; i < word.length; i++) {
409
+ if (remainingLines === 0) {
410
+ hasRemainingText = true;
411
+ break;
412
+ }
413
+ 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;
419
+ if (currentWidth + charWidth > max && currentPart.length > 0) {
420
+ lines.push([currentPart, currentWidth]);
421
+ currentPart = char;
422
+ currentWidth = charWidth;
423
+ max = maxWidth;
424
+ remainingLines--;
425
+ } else {
426
+ currentPart += char;
427
+ currentWidth += charWidth;
428
+ }
429
+ }
430
+
431
+ if (currentPart.length > 0) {
432
+ lines.push([currentPart, currentWidth]);
433
+ }
434
+
435
+ return [lines, remainingLines, hasRemainingText];
436
+ };
@@ -0,0 +1,20 @@
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
+
20
+ export * from './Utils.js';
@@ -23,9 +23,15 @@ import {
23
23
  isCompressedTextureContainer,
24
24
  loadCompressedTexture,
25
25
  } from '../lib/textureCompression.js';
26
- import { convertUrlToAbsolute, isBase64Image } from '../lib/utils.js';
26
+ import {
27
+ convertUrlToAbsolute,
28
+ dataURIToBlob,
29
+ isBase64Image,
30
+ } from '../lib/utils.js';
27
31
  import { isSvgImage, loadSvg } from '../lib/textureSvg.js';
28
- import { fetchJson } from '../text-rendering/font-face-types/utils.js';
32
+ import { fetchJson } from '../lib/utils.js';
33
+ import type { Platform } from '../platforms/Platform.js';
34
+ import { isProductionEnvironment } from '../../utils.js';
29
35
 
30
36
  /**
31
37
  * Properties of the {@link ImageTexture}
@@ -40,7 +46,7 @@ export interface ImageTextureProps {
40
46
  *
41
47
  * @default ''
42
48
  */
43
- src?: string | ImageData | (() => ImageData | null);
49
+ src?: string | Blob | ImageData | (() => ImageData | null);
44
50
  /**
45
51
  * Whether to premultiply the alpha channel into the color channels of the
46
52
  * image.
@@ -120,12 +126,15 @@ export interface ImageTextureProps {
120
126
  * {@link ImageTextureProps.premultiplyAlpha} prop to `false`.
121
127
  */
122
128
  export class ImageTexture extends Texture {
123
- public props: Required<ImageTextureProps>;
129
+ private platform: Platform;
124
130
 
131
+ public props: Required<ImageTextureProps>;
125
132
  public override type: TextureType = TextureType.image;
126
133
 
127
134
  constructor(txManager: CoreTextureManager, props: ImageTextureProps) {
128
135
  super(txManager);
136
+
137
+ this.platform = txManager.platform;
129
138
  this.props = ImageTexture.resolveDefaults(props);
130
139
  }
131
140
 
@@ -133,27 +142,32 @@ export class ImageTexture extends Texture {
133
142
  return mimeType.indexOf('image/png') !== -1;
134
143
  }
135
144
 
136
- async loadImageFallback(src: string, hasAlpha: boolean) {
145
+ async loadImageFallback(src: string | Blob, hasAlpha: boolean) {
137
146
  const img = new Image();
138
147
 
139
- if (isBase64Image(src) === false) {
148
+ if (typeof src === 'string' && isBase64Image(src) === false) {
140
149
  img.crossOrigin = 'anonymous';
141
150
  }
142
151
 
143
- return new Promise<{ data: HTMLImageElement; premultiplyAlpha: boolean }>(
144
- (resolve) => {
145
- img.onload = () => {
146
- resolve({ data: img, premultiplyAlpha: hasAlpha });
147
- };
152
+ return new Promise<{
153
+ data: HTMLImageElement | null;
154
+ premultiplyAlpha: boolean;
155
+ }>((resolve) => {
156
+ img.onload = () => {
157
+ resolve({ data: img, premultiplyAlpha: hasAlpha });
158
+ };
148
159
 
149
- img.onerror = () => {
150
- console.warn('Image loading failed, returning fallback object.');
151
- resolve({ data: img, premultiplyAlpha: hasAlpha });
152
- };
160
+ img.onerror = () => {
161
+ console.warn('Image loading failed, returning fallback object.');
162
+ resolve({ data: null, premultiplyAlpha: hasAlpha });
163
+ };
153
164
 
165
+ if (src instanceof Blob) {
166
+ img.src = URL.createObjectURL(src);
167
+ } else {
154
168
  img.src = src;
155
- },
156
- );
169
+ }
170
+ });
157
171
  }
158
172
 
159
173
  async createImageBitmap(
@@ -172,23 +186,30 @@ export class ImageTexture extends Texture {
172
186
 
173
187
  if (imageBitmapSupported.full === true && sw !== null && sh !== null) {
174
188
  // createImageBitmap with crop
175
- const bitmap = await createImageBitmap(blob, sx || 0, sy || 0, sw, sh, {
176
- premultiplyAlpha: hasAlphaChannel ? 'premultiply' : 'none',
177
- colorSpaceConversion: 'none',
178
- imageOrientation: 'none',
179
- });
189
+ const bitmap = await this.platform.createImageBitmap(
190
+ blob,
191
+ sx || 0,
192
+ sy || 0,
193
+ sw,
194
+ sh,
195
+ {
196
+ premultiplyAlpha: hasAlphaChannel ? 'premultiply' : 'none',
197
+ colorSpaceConversion: 'none',
198
+ imageOrientation: 'none',
199
+ },
200
+ );
180
201
  return { data: bitmap, premultiplyAlpha: hasAlphaChannel };
181
202
  } else if (imageBitmapSupported.basic === true) {
182
203
  // basic createImageBitmap without options or crop
183
204
  // this is supported for Chrome v50 to v52/54 that doesn't support options
184
205
  return {
185
- data: await createImageBitmap(blob),
206
+ data: await this.platform.createImageBitmap(blob),
186
207
  premultiplyAlpha: hasAlphaChannel,
187
208
  };
188
209
  }
189
210
 
190
211
  // default createImageBitmap without crop but with options
191
- const bitmap = await createImageBitmap(blob, {
212
+ const bitmap = await this.platform.createImageBitmap(blob, {
192
213
  premultiplyAlpha: hasAlphaChannel ? 'premultiply' : 'none',
193
214
  colorSpaceConversion: 'none',
194
215
  imageOrientation: 'none',
@@ -215,9 +236,16 @@ export class ImageTexture extends Texture {
215
236
  );
216
237
  }
217
238
 
218
- const blob = await fetchJson(src, 'blob').then(
219
- (response) => response as Blob,
220
- );
239
+ let blob;
240
+
241
+ if (isBase64Image(src) === true) {
242
+ blob = dataURIToBlob(src);
243
+ } else {
244
+ blob = await fetchJson(src, 'blob').then(
245
+ (response) => response as Blob,
246
+ );
247
+ }
248
+
221
249
  return this.createImageBitmap(blob, premultiplyAlpha, sx, sy, sw, sh);
222
250
  }
223
251
 
@@ -230,6 +258,12 @@ export class ImageTexture extends Texture {
230
258
  resp = await this.determineImageTypeAndLoadImage();
231
259
  } catch (e) {
232
260
  this.setState('failed', e as Error);
261
+
262
+ // log error only in development
263
+ if (isProductionEnvironment === false) {
264
+ console.error('ImageTexture:', e);
265
+ }
266
+
233
267
  return {
234
268
  data: null,
235
269
  };
@@ -274,6 +308,14 @@ export class ImageTexture extends Texture {
274
308
  }
275
309
 
276
310
  if (typeof src !== 'string') {
311
+ if (src instanceof Blob) {
312
+ if (this.txManager.hasCreateImageBitmap === true) {
313
+ const { sx, sy, sw, sh } = this.props;
314
+ return this.createImageBitmap(src, premultiplyAlpha, sx, sy, sw, sh);
315
+ } else {
316
+ return this.loadImageFallback(src, premultiplyAlpha ?? true);
317
+ }
318
+ }
277
319
  if (src instanceof ImageData) {
278
320
  return {
279
321
  data: src,