@solidtv/renderer 1.0.0

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