@lightningtv/renderer 3.0.0-beta1 → 3.2.4

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 (503) hide show
  1. package/NOTICE +4 -0
  2. package/README.md +22 -28
  3. package/dist/exports/canvas-shaders.js +0 -16
  4. package/dist/exports/canvas-shaders.js.map +1 -1
  5. package/dist/exports/canvas.d.ts +1 -1
  6. package/dist/exports/canvas.js +1 -19
  7. package/dist/exports/canvas.js.map +1 -1
  8. package/dist/exports/index.d.ts +2 -5
  9. package/dist/exports/index.js +1 -23
  10. package/dist/exports/index.js.map +1 -1
  11. package/dist/exports/inspector.js +0 -18
  12. package/dist/exports/inspector.js.map +1 -1
  13. package/dist/exports/utils.d.ts +2 -1
  14. package/dist/exports/utils.js +2 -19
  15. package/dist/exports/utils.js.map +1 -1
  16. package/dist/exports/webgl-shaders.js +0 -16
  17. package/dist/exports/webgl-shaders.js.map +1 -1
  18. package/dist/exports/webgl.d.ts +2 -1
  19. package/dist/exports/webgl.js +2 -19
  20. package/dist/exports/webgl.js.map +1 -1
  21. package/dist/src/common/CommonTypes.d.ts +15 -3
  22. package/dist/src/common/CommonTypes.js +0 -18
  23. package/dist/src/common/CommonTypes.js.map +1 -1
  24. package/dist/src/common/EventEmitter.js +0 -18
  25. package/dist/src/common/EventEmitter.js.map +1 -1
  26. package/dist/src/common/IEventEmitter.js +0 -16
  27. package/dist/src/common/IEventEmitter.js.map +1 -1
  28. package/dist/src/core/Autosizer.d.ts +35 -0
  29. package/dist/src/core/Autosizer.js +178 -0
  30. package/dist/src/core/Autosizer.js.map +1 -0
  31. package/dist/src/core/CoreNode.d.ts +139 -101
  32. package/dist/src/core/CoreNode.js +813 -528
  33. package/dist/src/core/CoreNode.js.map +1 -1
  34. package/dist/src/core/CoreShaderManager.d.ts +3 -3
  35. package/dist/src/core/CoreShaderManager.js +0 -18
  36. package/dist/src/core/CoreShaderManager.js.map +1 -1
  37. package/dist/src/core/CoreTextNode.d.ts +75 -87
  38. package/dist/src/core/CoreTextNode.js +380 -258
  39. package/dist/src/core/CoreTextNode.js.map +1 -1
  40. package/dist/src/core/CoreTextureManager.d.ts +25 -14
  41. package/dist/src/core/CoreTextureManager.js +83 -140
  42. package/dist/src/core/CoreTextureManager.js.map +1 -1
  43. package/dist/src/core/Stage.d.ts +102 -36
  44. package/dist/src/core/Stage.js +424 -191
  45. package/dist/src/core/Stage.js.map +1 -1
  46. package/dist/src/core/TextureError.d.ts +11 -0
  47. package/dist/src/core/TextureError.js +37 -0
  48. package/dist/src/core/TextureError.js.map +1 -0
  49. package/dist/src/core/TextureMemoryManager.d.ts +11 -4
  50. package/dist/src/core/TextureMemoryManager.js +114 -134
  51. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  52. package/dist/src/core/animations/AnimationManager.js +0 -18
  53. package/dist/src/core/animations/AnimationManager.js.map +1 -1
  54. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  55. package/dist/src/core/animations/CoreAnimation.js +8 -24
  56. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  57. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  58. package/dist/src/core/animations/CoreAnimationController.js +11 -22
  59. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  60. package/dist/src/core/lib/ContextSpy.js +0 -18
  61. package/dist/src/core/lib/ContextSpy.js.map +1 -1
  62. package/dist/src/core/lib/ImageWorker.d.ts +2 -2
  63. package/dist/src/core/lib/ImageWorker.js +33 -31
  64. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  65. package/dist/src/core/lib/Matrix3d.d.ts +1 -0
  66. package/dist/src/core/lib/Matrix3d.js +7 -19
  67. package/dist/src/core/lib/Matrix3d.js.map +1 -1
  68. package/dist/src/core/lib/RenderCoords.d.ts +9 -10
  69. package/dist/src/core/lib/RenderCoords.js +27 -55
  70. package/dist/src/core/lib/RenderCoords.js.map +1 -1
  71. package/dist/src/core/lib/WebGlContextWrapper.d.ts +78 -3
  72. package/dist/src/core/lib/WebGlContextWrapper.js +150 -25
  73. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  74. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  75. package/dist/src/core/lib/collectionUtils.js +82 -0
  76. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  77. package/dist/src/core/lib/colorCache.d.ts +1 -0
  78. package/dist/src/core/lib/colorCache.js +19 -0
  79. package/dist/src/core/lib/colorCache.js.map +1 -0
  80. package/dist/src/core/{renderers/canvas/internal/ColorUtils.js → lib/colorParser.js} +1 -19
  81. package/dist/src/core/lib/colorParser.js.map +1 -0
  82. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  83. package/dist/src/core/lib/textureCompression.js +320 -85
  84. package/dist/src/core/lib/textureCompression.js.map +1 -1
  85. package/dist/src/core/lib/textureSvg.js +0 -18
  86. package/dist/src/core/lib/textureSvg.js.map +1 -1
  87. package/dist/src/core/lib/utils.d.ts +8 -1
  88. package/dist/src/core/lib/utils.js +44 -20
  89. package/dist/src/core/lib/utils.js.map +1 -1
  90. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  91. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  92. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  93. package/dist/src/core/platforms/Platform.d.ts +42 -0
  94. package/dist/src/core/platforms/Platform.js +4 -0
  95. package/dist/src/core/platforms/Platform.js.map +1 -0
  96. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  97. package/dist/src/core/platforms/web/WebPlatform.js +90 -0
  98. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  99. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  100. package/dist/src/core/renderers/CoreContextTexture.js +0 -18
  101. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  102. package/dist/src/core/renderers/CoreRenderOp.js +0 -18
  103. package/dist/src/core/renderers/CoreRenderOp.js.map +1 -1
  104. package/dist/src/core/renderers/CoreRenderer.d.ts +15 -3
  105. package/dist/src/core/renderers/CoreRenderer.js +1 -18
  106. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  107. package/dist/src/core/renderers/CoreShaderNode.d.ts +13 -3
  108. package/dist/src/core/renderers/CoreShaderNode.js +25 -2
  109. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  110. package/dist/src/core/renderers/CoreShaderProgram.js +0 -18
  111. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -1
  112. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +4 -5
  113. package/dist/src/core/renderers/canvas/CanvasRenderer.js +89 -83
  114. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  115. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -21
  116. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  117. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  118. package/dist/src/core/renderers/canvas/CanvasTexture.js +18 -31
  119. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  120. package/dist/src/core/renderers/webgl/BatchRenderOp.d.ts +25 -0
  121. package/dist/src/core/renderers/webgl/BatchRenderOp.js +60 -0
  122. package/dist/src/core/renderers/webgl/BatchRenderOp.js.map +1 -0
  123. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  124. package/dist/src/core/renderers/webgl/SdfRenderOp.js +80 -0
  125. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  126. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  127. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -24
  128. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  129. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  130. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -23
  131. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  132. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  133. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -70
  134. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  135. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +34 -20
  136. package/dist/src/core/renderers/webgl/WebGlRenderer.js +319 -195
  137. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  138. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -3
  139. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  140. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  141. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +9 -7
  142. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +99 -48
  143. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  144. package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +1 -0
  145. package/dist/src/core/renderers/webgl/internal/BufferCollection.js +12 -21
  146. package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -1
  147. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +0 -18
  148. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  149. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +0 -18
  150. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  151. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +0 -18
  152. package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -1
  153. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  154. package/dist/src/core/shaders/canvas/Border.js +67 -41
  155. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  156. package/dist/src/core/shaders/canvas/HolePunch.js +3 -19
  157. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  158. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -21
  159. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  160. package/dist/src/core/shaders/canvas/RadialGradient.js +14 -28
  161. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  162. package/dist/src/core/shaders/canvas/Rounded.js +1 -17
  163. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  164. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  165. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +44 -22
  166. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  167. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  168. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +47 -25
  169. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  170. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +9 -21
  171. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  172. package/dist/src/core/shaders/canvas/Shadow.js +0 -16
  173. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  174. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  175. package/dist/src/core/shaders/canvas/utils/render.js +31 -34
  176. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  177. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +12 -2
  178. package/dist/src/core/shaders/templates/BorderTemplate.js +31 -27
  179. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  180. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  181. package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -19
  182. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  183. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +0 -16
  184. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -1
  185. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  186. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -18
  187. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  188. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -17
  189. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  190. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  191. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +0 -16
  192. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -1
  193. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +4 -2
  194. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +3 -17
  195. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -1
  196. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  197. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +0 -16
  198. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -1
  199. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  200. package/dist/src/core/shaders/templates/ShadowTemplate.js +0 -16
  201. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -1
  202. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  203. package/dist/src/core/shaders/utils.js +25 -0
  204. package/dist/src/core/shaders/utils.js.map +1 -0
  205. package/dist/src/core/shaders/webgl/Border.js +118 -51
  206. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  207. package/dist/src/core/shaders/webgl/Default.js +6 -41
  208. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  209. package/dist/src/core/shaders/webgl/HolePunch.js +4 -19
  210. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  211. package/dist/src/core/shaders/webgl/LinearGradient.js +73 -34
  212. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  213. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -48
  214. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  215. package/dist/src/core/shaders/webgl/Rounded.js +25 -23
  216. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  217. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +160 -55
  218. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  219. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +168 -58
  220. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  221. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +73 -34
  222. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  223. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  224. package/dist/src/core/shaders/webgl/SdfShader.js +8 -36
  225. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  226. package/dist/src/core/shaders/webgl/Shadow.js +39 -34
  227. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  228. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  229. package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
  230. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  231. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  232. package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
  233. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  234. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
  235. package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
  236. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  237. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +18 -0
  238. package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
  239. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  240. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  241. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  242. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  243. package/dist/src/core/text-rendering/TextRenderer.d.ts +384 -0
  244. package/dist/src/core/text-rendering/TextRenderer.js +2 -0
  245. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  246. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  247. package/dist/src/core/text-rendering/Utils.js +66 -0
  248. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  249. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  250. package/dist/src/core/textures/ColorTexture.js +3 -22
  251. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  252. package/dist/src/core/textures/ImageTexture.d.ts +13 -6
  253. package/dist/src/core/textures/ImageTexture.js +57 -66
  254. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  255. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  256. package/dist/src/core/textures/NoiseTexture.js +8 -26
  257. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  258. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  259. package/dist/src/core/textures/RenderTexture.js +12 -30
  260. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  261. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  262. package/dist/src/core/textures/SubTexture.js +19 -55
  263. package/dist/src/core/textures/SubTexture.js.map +1 -1
  264. package/dist/src/core/textures/Texture.d.ts +90 -12
  265. package/dist/src/core/textures/Texture.js +160 -35
  266. package/dist/src/core/textures/Texture.js.map +1 -1
  267. package/dist/src/core/utils.d.ts +2 -1
  268. package/dist/src/core/utils.js +1 -19
  269. package/dist/src/core/utils.js.map +1 -1
  270. package/dist/src/main-api/INode.js.map +1 -1
  271. package/dist/src/main-api/Inspector.d.ts +135 -2
  272. package/dist/src/main-api/Inspector.js +507 -30
  273. package/dist/src/main-api/Inspector.js.map +1 -1
  274. package/dist/src/main-api/Renderer.d.ts +294 -81
  275. package/dist/src/main-api/Renderer.js +225 -96
  276. package/dist/src/main-api/Renderer.js.map +1 -1
  277. package/dist/src/utils.d.ts +19 -6
  278. package/dist/src/utils.js +32 -27
  279. package/dist/src/utils.js.map +1 -1
  280. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  281. package/dist/tsconfig.tsbuildinfo +1 -0
  282. package/exports/canvas-shaders.ts +0 -17
  283. package/exports/canvas.ts +1 -19
  284. package/exports/index.ts +6 -27
  285. package/exports/inspector.ts +0 -19
  286. package/exports/utils.ts +7 -19
  287. package/exports/webgl-shaders.ts +0 -16
  288. package/exports/webgl.ts +3 -20
  289. package/package.json +23 -22
  290. package/src/common/CommonTypes.ts +20 -22
  291. package/src/common/EventEmitter.ts +0 -19
  292. package/src/common/IAnimationController.ts +0 -18
  293. package/src/common/IEventEmitter.ts +0 -17
  294. package/src/core/Autosizer.ts +205 -0
  295. package/src/core/CoreNode.test.ts +376 -45
  296. package/src/core/CoreNode.ts +1017 -656
  297. package/src/core/CoreShaderManager.ts +3 -21
  298. package/src/core/CoreTextNode.ts +457 -314
  299. package/src/core/CoreTextureManager.ts +123 -168
  300. package/src/core/Stage.ts +526 -236
  301. package/src/core/TextureError.ts +46 -0
  302. package/src/core/TextureMemoryManager.ts +150 -167
  303. package/src/core/animations/AnimationManager.ts +0 -19
  304. package/src/core/animations/CoreAnimation.ts +15 -32
  305. package/src/core/animations/CoreAnimationController.ts +13 -23
  306. package/src/core/lib/ContextSpy.ts +0 -19
  307. package/src/core/lib/ImageWorker.ts +45 -32
  308. package/src/core/lib/Matrix3d.ts +7 -20
  309. package/src/core/lib/RenderCoords.ts +36 -67
  310. package/src/core/lib/WebGlContextWrapper.ts +196 -72
  311. package/src/core/lib/collectionUtils.ts +99 -0
  312. package/src/core/lib/colorCache.ts +20 -0
  313. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -21
  314. package/src/core/lib/textureCompression.ts +433 -93
  315. package/src/core/lib/textureSvg.ts +0 -19
  316. package/src/core/lib/utils.ts +58 -19
  317. package/src/core/lib/validateImageBitmap.ts +17 -6
  318. package/src/core/platforms/Platform.ts +64 -0
  319. package/src/core/platforms/web/WebPlatform.ts +132 -0
  320. package/src/core/renderers/CoreContextTexture.ts +2 -20
  321. package/src/core/renderers/CoreRenderOp.ts +0 -19
  322. package/src/core/renderers/CoreRenderer.ts +16 -23
  323. package/src/core/renderers/CoreShaderNode.ts +37 -6
  324. package/src/core/renderers/CoreShaderProgram.ts +0 -19
  325. package/src/core/renderers/canvas/CanvasRenderer.ts +108 -137
  326. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -23
  327. package/src/core/renderers/canvas/CanvasTexture.ts +25 -37
  328. package/src/core/renderers/webgl/SdfRenderOp.ts +88 -0
  329. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -34
  330. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -24
  331. package/src/core/renderers/webgl/WebGlCtxTexture.ts +134 -103
  332. package/src/core/renderers/webgl/WebGlRenderer.ts +368 -233
  333. package/src/core/renderers/webgl/WebGlShaderNode.ts +4 -7
  334. package/src/core/renderers/webgl/WebGlShaderProgram.ts +122 -76
  335. package/src/core/renderers/webgl/internal/BufferCollection.ts +15 -23
  336. package/src/core/renderers/webgl/internal/RendererUtils.ts +0 -19
  337. package/src/core/renderers/webgl/internal/ShaderUtils.ts +0 -19
  338. package/src/core/renderers/webgl/internal/WebGlUtils.ts +0 -19
  339. package/src/core/shaders/canvas/Border.ts +91 -50
  340. package/src/core/shaders/canvas/HolePunch.ts +4 -28
  341. package/src/core/shaders/canvas/LinearGradient.ts +10 -25
  342. package/src/core/shaders/canvas/RadialGradient.ts +23 -54
  343. package/src/core/shaders/canvas/Rounded.ts +2 -19
  344. package/src/core/shaders/canvas/RoundedWithBorder.ts +72 -35
  345. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +77 -47
  346. package/src/core/shaders/canvas/RoundedWithShadow.ts +21 -34
  347. package/src/core/shaders/canvas/Shadow.ts +0 -17
  348. package/src/core/shaders/canvas/utils/render.ts +45 -53
  349. package/src/core/shaders/templates/BorderTemplate.ts +42 -29
  350. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -22
  351. package/src/core/shaders/templates/LinearGradientTemplate.ts +0 -17
  352. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -25
  353. package/src/core/shaders/templates/RoundedTemplate.ts +1 -18
  354. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -18
  355. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +7 -19
  356. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -18
  357. package/src/core/shaders/templates/ShadowTemplate.ts +1 -18
  358. package/src/core/shaders/utils.ts +30 -0
  359. package/src/core/shaders/webgl/Border.ts +118 -55
  360. package/src/core/shaders/webgl/Default.ts +6 -43
  361. package/src/core/shaders/webgl/HolePunch.ts +4 -24
  362. package/src/core/shaders/webgl/LinearGradient.ts +73 -35
  363. package/src/core/shaders/webgl/RadialGradient.ts +58 -51
  364. package/src/core/shaders/webgl/Rounded.ts +25 -45
  365. package/src/core/shaders/webgl/RoundedWithBorder.ts +161 -63
  366. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +169 -68
  367. package/src/core/shaders/webgl/RoundedWithShadow.ts +73 -39
  368. package/src/core/shaders/webgl/SdfShader.ts +8 -41
  369. package/src/core/shaders/webgl/Shadow.ts +39 -35
  370. package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
  371. package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
  372. package/src/core/text-rendering/SdfFontHandler.ts +566 -0
  373. package/src/core/text-rendering/SdfTextRenderer.ts +406 -0
  374. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  375. package/src/core/text-rendering/TextRenderer.ts +426 -0
  376. package/src/core/text-rendering/Utils.ts +80 -0
  377. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
  378. package/src/core/textures/ColorTexture.ts +7 -24
  379. package/src/core/textures/ImageTexture.ts +110 -92
  380. package/src/core/textures/NoiseTexture.ts +14 -31
  381. package/src/core/textures/RenderTexture.ts +18 -35
  382. package/src/core/textures/SubTexture.ts +25 -65
  383. package/src/core/textures/Texture.ts +214 -46
  384. package/src/core/utils.ts +9 -26
  385. package/src/main-api/INode.ts +0 -18
  386. package/src/main-api/Inspector.ts +794 -38
  387. package/src/main-api/Renderer.ts +519 -159
  388. package/src/utils.ts +64 -29
  389. package/dist/src/core/platform.d.ts +0 -10
  390. package/dist/src/core/platform.js +0 -56
  391. package/dist/src/core/platform.js.map +0 -1
  392. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -1
  393. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -217
  394. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
  395. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
  396. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -36
  397. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +0 -107
  398. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +0 -1
  399. package/dist/src/core/shaders/templates/shaderUtils.js +0 -41
  400. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  401. package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +0 -2
  402. package/dist/src/core/shaders/webgl/DefaultBatched.js +0 -104
  403. package/dist/src/core/shaders/webgl/DefaultBatched.js.map +0 -1
  404. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
  405. package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
  406. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
  407. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
  408. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
  409. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
  410. package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
  411. package/dist/src/core/text-rendering/TrFontManager.js +0 -131
  412. package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
  413. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
  414. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
  415. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
  416. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
  417. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
  418. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
  419. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
  420. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
  421. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
  422. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
  423. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
  424. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
  425. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
  426. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
  427. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
  428. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
  429. package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
  430. package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
  431. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
  432. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
  433. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
  434. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -126
  435. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
  436. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
  437. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -91
  438. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -611
  439. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
  440. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
  441. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
  442. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
  443. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
  444. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
  445. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
  446. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
  447. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
  448. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
  449. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
  450. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
  451. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
  452. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
  453. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
  454. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
  455. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
  456. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
  457. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
  458. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
  459. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
  460. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
  461. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
  462. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
  463. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
  464. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
  465. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
  466. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
  467. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -370
  468. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
  469. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
  470. package/scripts/please-use-pnpm.js +0 -13
  471. package/src/core/platform.ts +0 -64
  472. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  473. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -145
  474. package/src/core/shaders/templates/shaderUtils.ts +0 -47
  475. package/src/core/shaders/webgl/DefaultBatched.ts +0 -129
  476. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  477. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  478. package/src/core/text-rendering/TrFontManager.ts +0 -183
  479. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  480. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  481. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  482. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  483. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  484. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  485. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  486. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  487. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  488. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -841
  489. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  490. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  491. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  492. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  493. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  494. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  495. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  496. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  497. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  498. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  499. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  500. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  501. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  502. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
  503. /package/dist/src/core/{renderers/canvas/internal/ColorUtils.d.ts → lib/colorParser.d.ts} +0 -0
@@ -1,29 +1,12 @@
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 2023 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
1
  import { describe, expect, it, vi } from 'vitest';
21
2
  import { CoreNode, type CoreNodeProps, UpdateType } from './CoreNode.js';
22
3
  import { Stage } from './Stage.js';
4
+ import { CoreRenderer } from './renderers/CoreRenderer.js';
23
5
  import { mock } from 'vitest-mock-extended';
24
6
  import { type TextureOptions } from './CoreTextureManager.js';
25
7
  import { createBound } from './lib/utils.js';
26
8
  import { ImageTexture } from './textures/ImageTexture.js';
9
+ import { Matrix3d } from './lib/Matrix3d.js';
27
10
 
28
11
  describe('set color()', () => {
29
12
  const defaultProps: CoreNodeProps = {
@@ -40,7 +23,7 @@ describe('set color()', () => {
40
23
  colorTl: 0,
41
24
  colorTop: 0,
42
25
  colorTr: 0,
43
- height: 0,
26
+ h: 0,
44
27
  mount: 0,
45
28
  mountX: 0,
46
29
  mountY: 0,
@@ -50,20 +33,17 @@ describe('set color()', () => {
50
33
  pivotY: 0,
51
34
  rotation: 0,
52
35
  rtt: false,
53
- scale: 0,
54
- scaleX: 0,
55
- scaleY: 0,
36
+ scale: 1,
37
+ scaleX: 1,
38
+ scaleY: 1,
56
39
  shader: null,
57
40
  src: '',
58
41
  texture: null,
59
42
  textureOptions: {} as TextureOptions,
60
- width: 0,
43
+ w: 0,
61
44
  x: 0,
62
45
  y: 0,
63
46
  zIndex: 0,
64
- zIndexLocked: 0,
65
- preventCleanup: false,
66
- strictBounds: false,
67
47
  };
68
48
 
69
49
  const clippingRect = {
@@ -80,6 +60,7 @@ describe('set color()', () => {
80
60
  defaultTexture: {
81
61
  state: 'loaded',
82
62
  },
63
+ renderer: mock<CoreRenderer>() as CoreRenderer,
83
64
  });
84
65
 
85
66
  describe('set color()', () => {
@@ -107,11 +88,11 @@ describe('set color()', () => {
107
88
  it('should set update type.', () => {
108
89
  const node = new CoreNode(stage, defaultProps);
109
90
  node.updateType = 0;
110
-
111
- node.color = 0xffffffff;
112
91
  node.color = 0xffffffff;
113
92
 
114
- expect(node.updateType).toBe(UpdateType.PremultipliedColors);
93
+ expect(node.updateType).toBe(
94
+ UpdateType.PremultipliedColors | UpdateType.IsRenderable,
95
+ );
115
96
  });
116
97
  });
117
98
 
@@ -122,12 +103,17 @@ describe('set color()', () => {
122
103
  });
123
104
 
124
105
  it('visible node that is a color texture', () => {
125
- const node = new CoreNode(stage, defaultProps);
106
+ const parent = new CoreNode(stage, defaultProps);
107
+ // Manually set parent properties that update() might read
108
+ parent.globalTransform = Matrix3d.identity();
109
+ parent.worldAlpha = 1;
110
+
111
+ const node = new CoreNode(stage, { ...defaultProps, parent });
126
112
  node.alpha = 1;
127
113
  node.x = 0;
128
114
  node.y = 0;
129
- node.width = 100;
130
- node.height = 100;
115
+ node.w = 100;
116
+ node.h = 100;
131
117
  node.color = 0xffffffff;
132
118
 
133
119
  node.update(0, clippingRect);
@@ -135,12 +121,16 @@ describe('set color()', () => {
135
121
  });
136
122
 
137
123
  it('visible node that is a texture', () => {
138
- const node = new CoreNode(stage, defaultProps);
124
+ const parent = new CoreNode(stage, defaultProps);
125
+ parent.globalTransform = Matrix3d.identity();
126
+ parent.worldAlpha = 1;
127
+
128
+ const node = new CoreNode(stage, { ...defaultProps, parent });
139
129
  node.alpha = 1;
140
130
  node.x = 0;
141
131
  node.y = 0;
142
- node.width = 100;
143
- node.height = 100;
132
+ node.w = 100;
133
+ node.h = 100;
144
134
  node.texture = mock<ImageTexture>({
145
135
  state: 'initial',
146
136
  });
@@ -149,6 +139,7 @@ describe('set color()', () => {
149
139
  expect(node.isRenderable).toBe(false);
150
140
 
151
141
  node.texture.state = 'loaded';
142
+ node.textureLoaded = true;
152
143
  node.setUpdateType(UpdateType.IsRenderable);
153
144
  node.update(1, clippingRect);
154
145
 
@@ -156,27 +147,37 @@ describe('set color()', () => {
156
147
  });
157
148
 
158
149
  it('a node with a texture with alpha 0 should not be renderable', () => {
159
- const node = new CoreNode(stage, defaultProps);
150
+ const parent = new CoreNode(stage, defaultProps);
151
+ parent.globalTransform = Matrix3d.identity();
152
+ parent.worldAlpha = 1;
153
+
154
+ const node = new CoreNode(stage, { ...defaultProps, parent });
155
+ expect(node.isRenderable).toBe(false);
160
156
  node.alpha = 0;
161
157
  node.x = 0;
162
158
  node.y = 0;
163
- node.width = 100;
164
- node.height = 100;
159
+ node.w = 100;
160
+ node.h = 100;
165
161
  node.texture = mock<ImageTexture>({
166
162
  state: 'loaded',
167
163
  });
164
+ node.textureLoaded = true;
168
165
 
169
166
  node.update(0, clippingRect);
170
167
  expect(node.isRenderable).toBe(false);
171
168
  });
172
169
 
173
170
  it('a node with a texture that is OutOfBounds should not be renderable', () => {
174
- const node = new CoreNode(stage, defaultProps);
171
+ const parent = new CoreNode(stage, defaultProps);
172
+ parent.globalTransform = Matrix3d.identity();
173
+ parent.worldAlpha = 1;
174
+
175
+ const node = new CoreNode(stage, { ...defaultProps, parent });
175
176
  node.alpha = 1;
176
177
  node.x = 300;
177
178
  node.y = 300;
178
- node.width = 100;
179
- node.height = 100;
179
+ node.w = 100;
180
+ node.h = 100;
180
181
  node.texture = mock<ImageTexture>({
181
182
  state: 'loaded',
182
183
  });
@@ -186,12 +187,16 @@ describe('set color()', () => {
186
187
  });
187
188
 
188
189
  it('a node with a freed texture should not be renderable', () => {
189
- const node = new CoreNode(stage, defaultProps);
190
+ const parent = new CoreNode(stage, defaultProps);
191
+ parent.globalTransform = Matrix3d.identity();
192
+ parent.worldAlpha = 1;
193
+
194
+ const node = new CoreNode(stage, { ...defaultProps, parent });
190
195
  node.alpha = 1;
191
196
  node.x = 0;
192
197
  node.y = 0;
193
- node.width = 100;
194
- node.height = 100;
198
+ node.w = 100;
199
+ node.h = 100;
195
200
  node.texture = mock<ImageTexture>({
196
201
  state: 'freed',
197
202
  });
@@ -199,5 +204,331 @@ describe('set color()', () => {
199
204
  node.update(0, clippingRect);
200
205
  expect(node.isRenderable).toBe(false);
201
206
  });
207
+
208
+ it('should emit renderable event when isRenderable status changes', () => {
209
+ const parent = new CoreNode(stage, defaultProps);
210
+ parent.globalTransform = Matrix3d.identity();
211
+ parent.worldAlpha = 1;
212
+
213
+ const node = new CoreNode(stage, { ...defaultProps, parent });
214
+ const eventCallback = vi.fn();
215
+
216
+ // Listen for the renderableChanged event
217
+ node.on('renderable', eventCallback);
218
+
219
+ // Set up node as a color texture that should be renderable
220
+ node.alpha = 1;
221
+ node.x = 0;
222
+ node.y = 0;
223
+ node.w = 100;
224
+ node.h = 100;
225
+ node.color = 0xffffffff;
226
+
227
+ // Initial state should be false
228
+ expect(node.isRenderable).toBe(false);
229
+ expect(eventCallback).not.toHaveBeenCalled();
230
+
231
+ // Update should make it renderable (false -> true)
232
+ node.update(0, clippingRect);
233
+ expect(node.isRenderable).toBe(true);
234
+ expect(eventCallback).toHaveBeenCalledWith(node, {
235
+ type: 'renderable',
236
+ isRenderable: true,
237
+ });
238
+
239
+ // Reset the mock
240
+ eventCallback.mockClear();
241
+
242
+ // Make node invisible (alpha = 0) to make it not renderable (true -> false)
243
+ node.alpha = 0;
244
+ node.update(1, clippingRect);
245
+ expect(node.isRenderable).toBe(false);
246
+ expect(eventCallback).toHaveBeenCalledWith(node, {
247
+ type: 'renderable',
248
+ isRenderable: false,
249
+ });
250
+
251
+ // Reset the mock again
252
+ eventCallback.mockClear();
253
+
254
+ // Setting same value shouldn't trigger event
255
+ node.alpha = 0;
256
+ node.update(2, clippingRect);
257
+ expect(node.isRenderable).toBe(false);
258
+ expect(eventCallback).not.toHaveBeenCalled();
259
+ });
260
+ });
261
+
262
+ describe('autosize system', () => {
263
+ it('should initialize with autosize disabled', () => {
264
+ const node = new CoreNode(stage, defaultProps);
265
+ expect(node.autosize).toBe(false);
266
+ });
267
+
268
+ it('should enable texture autosize when texture is present', () => {
269
+ const node = new CoreNode(stage, defaultProps);
270
+ const mockTexture = mock<ImageTexture>();
271
+ mockTexture.state = 'loading';
272
+
273
+ node.texture = mockTexture;
274
+ node.autosize = true;
275
+
276
+ // Should not create autosize manager for texture mode
277
+ expect((node as any).autosizer).toBeTruthy();
278
+ });
279
+
280
+ it('should enable children autosize when no texture but has children', () => {
281
+ const parent = new CoreNode(stage, defaultProps);
282
+ const child = new CoreNode(stage, defaultProps);
283
+
284
+ parent.autosize = true;
285
+ child.parent = parent;
286
+
287
+ // Should create autosize manager for children mode
288
+ expect((parent as any).autosizer).toBeTruthy();
289
+ });
290
+
291
+ it('should prioritize texture autosize over children autosize', () => {
292
+ const parent = new CoreNode(stage, defaultProps);
293
+ const child = new CoreNode(stage, defaultProps);
294
+ const mockTexture = mock<ImageTexture>();
295
+ mockTexture.state = 'loading';
296
+
297
+ child.parent = parent;
298
+ parent.texture = mockTexture;
299
+ parent.autosize = true;
300
+
301
+ expect(parent.autosize).toBe(true);
302
+ // Should NOT create autosize manager when texture is present
303
+ expect((parent as any).autosizer).toBeTruthy();
304
+ });
305
+
306
+ it('should switch from children to texture autosize when texture is added', () => {
307
+ const parent = new CoreNode(stage, defaultProps);
308
+ const child = new CoreNode(stage, defaultProps);
309
+
310
+ child.parent = parent;
311
+ parent.autosize = true;
312
+ expect((parent as any).autosizer).toBeTruthy();
313
+
314
+ // Add texture - should switch to texture autosize
315
+ const mockTexture = mock<ImageTexture>();
316
+ mockTexture.state = 'loading';
317
+ parent.texture = mockTexture;
318
+
319
+ expect((parent as any).autosizer).toBeTruthy();
320
+ });
321
+
322
+ it('should switch from texture to children autosize when texture is removed', () => {
323
+ const parent = new CoreNode(stage, defaultProps);
324
+ const child = new CoreNode(stage, defaultProps);
325
+ const mockTexture = mock<ImageTexture>();
326
+ mockTexture.state = 'loading';
327
+
328
+ child.parent = parent;
329
+ parent.texture = mockTexture;
330
+ parent.autosize = true;
331
+ expect((parent as any).autosizer).toBeTruthy();
332
+
333
+ // Remove texture - should switch to children autosize
334
+ parent.texture = null;
335
+ expect((parent as any).autosizer).toBeTruthy();
336
+ });
337
+
338
+ it('should cleanup autosize manager when disabled', () => {
339
+ const parent = new CoreNode(stage, defaultProps);
340
+ const child = new CoreNode(stage, defaultProps);
341
+
342
+ child.parent = parent;
343
+ parent.autosize = true;
344
+ expect((parent as any).autosizer).toBeTruthy();
345
+
346
+ parent.autosize = false;
347
+ expect((parent as any).autosizer).toBeFalsy();
348
+ });
349
+
350
+ it('should establish autosize chain when child is added to autosize parent', () => {
351
+ const parent = new CoreNode(stage, defaultProps);
352
+ const child = new CoreNode(stage, defaultProps);
353
+
354
+ // Enable autosize BEFORE adding child
355
+ parent.autosize = true;
356
+ child.parent = parent;
357
+
358
+ expect((child as any).parentAutosizer).toBe(parent.autosizer);
359
+ expect((parent as any).autosizer.childMap.size).toBe(1);
360
+ });
361
+
362
+ it('should remove from autosize chain when child is removed', () => {
363
+ const parent = new CoreNode(stage, defaultProps);
364
+ const child = new CoreNode(stage, defaultProps);
365
+
366
+ // Enable autosize BEFORE adding child
367
+ parent.autosize = true;
368
+ child.parent = parent;
369
+ expect((parent as any).autosizer.childMap.size).toBe(1);
370
+
371
+ child.parent = null;
372
+ expect((child as any).parentAutosizer).toBeNull();
373
+ });
374
+ });
375
+
376
+ describe('isSimple optimization', () => {
377
+ it('should be simple by default', () => {
378
+ const node = new CoreNode(stage, defaultProps);
379
+ expect(node.isSimple).toBe(true);
380
+ });
381
+
382
+ it('should not be simple if rotated', () => {
383
+ const node = new CoreNode(stage, defaultProps);
384
+ node.rotation = 0.1;
385
+ expect(node.isSimple).toBe(false);
386
+ node.rotation = 0;
387
+ expect(node.isSimple).toBe(true);
388
+ });
389
+
390
+ it('should not be simple if scaled', () => {
391
+ const node = new CoreNode(stage, defaultProps);
392
+ node.scale = 1.1;
393
+ expect(node.isSimple).toBe(false);
394
+ node.scale = 1;
395
+ expect(node.isSimple).toBe(true);
396
+
397
+ node.scaleX = 1.1;
398
+ expect(node.isSimple).toBe(false);
399
+ node.scaleX = 1;
400
+ expect(node.isSimple).toBe(true);
401
+
402
+ node.scaleY = 1.1;
403
+ expect(node.isSimple).toBe(false);
404
+ node.scaleY = 1;
405
+ expect(node.isSimple).toBe(true);
406
+ });
407
+
408
+ it('should not be simple if mounted', () => {
409
+ const node = new CoreNode(stage, defaultProps);
410
+ node.mount = 0.5;
411
+ expect(node.isSimple).toBe(false);
412
+ node.mount = 0;
413
+ expect(node.isSimple).toBe(true);
414
+
415
+ node.mountX = 0.5;
416
+ expect(node.isSimple).toBe(false);
417
+ node.mountX = 0;
418
+ expect(node.isSimple).toBe(true);
419
+
420
+ node.mountY = 0.5;
421
+ expect(node.isSimple).toBe(false);
422
+ node.mountY = 0;
423
+ expect(node.isSimple).toBe(true);
424
+ });
425
+
426
+ it('should not be simple if texture is contained', () => {
427
+ const node = new CoreNode(stage, defaultProps);
428
+ const mockTexture = mock<ImageTexture>({
429
+ state: 'loaded',
430
+ dimensions: { w: 100, h: 100 },
431
+ });
432
+
433
+ node.texture = mockTexture;
434
+ expect(node.isSimple).toBe(true); // Default resizeMode is not contained
435
+
436
+ node.textureOptions = { resizeMode: { type: 'contain' } };
437
+ expect(node.isSimple).toBe(false);
438
+
439
+ node.textureOptions = { resizeMode: { type: 'cover' } };
440
+ expect(node.isSimple).toBe(true);
441
+ });
442
+
443
+ it('should update local transform correctly when simple', () => {
444
+ const parent = new CoreNode(stage, defaultProps);
445
+ parent.globalTransform = Matrix3d.identity();
446
+ const node = new CoreNode(stage, { ...defaultProps, parent });
447
+ node.x = 100;
448
+ node.y = 50;
449
+ node.props.w = 50;
450
+ node.props.h = 50;
451
+ node.update(0, clippingRect);
452
+
453
+ expect(node.localTransform!.tx).toBe(100);
454
+ expect(node.localTransform!.ty).toBe(50);
455
+ expect(node.localTransform!.ta).toBe(1);
456
+ expect(node.localTransform!.td).toBe(1);
457
+ expect(node.isSimple).toBe(true);
458
+ });
459
+
460
+ it('should update local transform correctly when not simple (rotation)', () => {
461
+ const parent = new CoreNode(stage, defaultProps);
462
+ parent.globalTransform = Matrix3d.identity();
463
+ const node = new CoreNode(stage, { ...defaultProps, parent });
464
+ node.x = 100;
465
+ node.y = 50;
466
+ node.props.w = 100; // use props.w directly to avoid trigger setters if exist (though setters exist)
467
+ node.props.h = 100;
468
+ node.pivot = 0.5;
469
+ node.rotation = Math.PI / 2; // 90 degrees
470
+ node.update(0, clippingRect);
471
+
472
+ // Expected: 90 deg rotation around center (50,50) relative to (100,50)
473
+ // Center of node is at (100+50, 50+50) = (150, 100) if mount is 0.
474
+ // Rotation happens closely to how matrix works.
475
+ // Just verifying tx/ty are not just x/y
476
+ expect(node.localTransform!.tx).toBe(200);
477
+ expect(node.localTransform!.ty).toBe(50);
478
+ expect(node.isSimple).toBe(false);
479
+ });
480
+ });
481
+
482
+ describe('isSimple Global Transform', () => {
483
+ it('should calculate global transform correctly when simple', () => {
484
+ const parent = new CoreNode(stage, defaultProps);
485
+ parent.globalTransform = Matrix3d.translate(10, 20);
486
+
487
+ const node = new CoreNode(stage, { ...defaultProps, parent });
488
+ node.x = 100;
489
+ node.y = 50;
490
+ // node is simple by default
491
+
492
+ node.update(0, clippingRect);
493
+
494
+ // Parent (10, 20) + Node (100, 50) = (110, 70)
495
+ expect(node.globalTransform!.tx).toBe(110);
496
+ expect(node.globalTransform!.ty).toBe(70);
497
+ expect(node.globalTransform!.ta).toBe(1);
498
+ expect(node.globalTransform!.td).toBe(1);
499
+ expect(node.isSimple).toBe(true);
500
+ });
501
+
502
+ it('should calculate global transform correctly when not simple', () => {
503
+ const parent = new CoreNode(stage, defaultProps);
504
+ parent.globalTransform = Matrix3d.translate(10, 20);
505
+
506
+ const node = new CoreNode(stage, { ...defaultProps, parent });
507
+ node.x = 100;
508
+ node.y = 50;
509
+ node.w = 100;
510
+ node.h = 100;
511
+ node.pivotX = 0.5;
512
+ node.pivotY = 0.5;
513
+ node.rotation = Math.PI / 2; // 90 deg
514
+
515
+ node.update(0, clippingRect);
516
+
517
+ // Parent (10, 20) + Node (100, 50) + Rotation
518
+ // The translation part of global transform should be affected by parent
519
+ // But rotation happens at node level.
520
+ // Matrix calc: Parent * Node
521
+ // [1 0 10] [0 -1 200]* <-- node local: rot 90 around 50,50 (center) relative to 100,50
522
+ // [0 1 20] * [1 0 50]
523
+ // [0 0 1] [0 0 1]
524
+ // *Wait, previous test established local tx=200, ty=50 for rotation
525
+
526
+ // Global tx = 1*200 + 0*50 + 10 = 210
527
+ // Global ty = 0*200 + 1*50 + 20 = 70
528
+
529
+ expect(node.globalTransform!.tx).toBe(210);
530
+ expect(node.globalTransform!.ty).toBe(70);
531
+ expect(node.isSimple).toBe(false);
532
+ });
202
533
  });
203
534
  });