@lightningjs/renderer 3.0.0-beta2 → 3.0.0-beta20

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 (551) hide show
  1. package/README.md +16 -26
  2. package/dist/exports/canvas.d.ts +1 -1
  3. package/dist/exports/canvas.js +1 -1
  4. package/dist/exports/canvas.js.map +1 -1
  5. package/dist/exports/index.d.ts +2 -5
  6. package/dist/exports/index.js +1 -5
  7. package/dist/exports/index.js.map +1 -1
  8. package/dist/exports/utils.d.ts +2 -1
  9. package/dist/exports/utils.js +2 -1
  10. package/dist/exports/utils.js.map +1 -1
  11. package/dist/exports/webgl.d.ts +2 -1
  12. package/dist/exports/webgl.js +2 -1
  13. package/dist/exports/webgl.js.map +1 -1
  14. package/dist/src/common/CommonTypes.d.ts +13 -2
  15. package/dist/src/core/Autosizer.d.ts +35 -0
  16. package/dist/src/core/Autosizer.js +196 -0
  17. package/dist/src/core/Autosizer.js.map +1 -0
  18. package/dist/src/core/CoreNode.d.ts +73 -95
  19. package/dist/src/core/CoreNode.js +599 -461
  20. package/dist/src/core/CoreNode.js.map +1 -1
  21. package/dist/src/core/CoreShaderManager.d.ts +3 -5
  22. package/dist/src/core/CoreShaderManager.js.map +1 -1
  23. package/dist/src/core/CoreTextNode.d.ts +74 -87
  24. package/dist/src/core/CoreTextNode.js +357 -232
  25. package/dist/src/core/CoreTextNode.js.map +1 -1
  26. package/dist/src/core/CoreTextureManager.d.ts +25 -13
  27. package/dist/src/core/CoreTextureManager.js +80 -104
  28. package/dist/src/core/CoreTextureManager.js.map +1 -1
  29. package/dist/src/core/Stage.d.ts +92 -33
  30. package/dist/src/core/Stage.js +313 -151
  31. package/dist/src/core/Stage.js.map +1 -1
  32. package/dist/src/core/TextureError.d.ts +11 -0
  33. package/dist/src/core/TextureError.js +37 -0
  34. package/dist/src/core/TextureError.js.map +1 -0
  35. package/dist/src/core/TextureMemoryManager.d.ts +11 -4
  36. package/dist/src/core/TextureMemoryManager.js +128 -109
  37. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  38. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  39. package/dist/src/core/animations/CoreAnimation.js +8 -3
  40. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  41. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  42. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  43. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  44. package/dist/src/core/lib/ImageWorker.js +1 -1
  45. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  46. package/dist/src/core/lib/WebGlContextWrapper.d.ts +41 -3
  47. package/dist/src/core/lib/WebGlContextWrapper.js +104 -27
  48. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  49. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  50. package/dist/src/core/lib/collectionUtils.js +100 -0
  51. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  52. package/dist/src/core/lib/colorCache.d.ts +1 -0
  53. package/dist/src/core/lib/colorCache.js +19 -0
  54. package/dist/src/core/lib/colorCache.js.map +1 -0
  55. package/dist/src/core/lib/colorParser.d.ts +21 -0
  56. package/dist/src/core/lib/colorParser.js +72 -0
  57. package/dist/src/core/lib/colorParser.js.map +1 -0
  58. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  59. package/dist/src/core/lib/textureCompression.js +320 -67
  60. package/dist/src/core/lib/textureCompression.js.map +1 -1
  61. package/dist/src/core/lib/utils.d.ts +2 -0
  62. package/dist/src/core/lib/utils.js +22 -0
  63. package/dist/src/core/lib/utils.js.map +1 -1
  64. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  65. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  66. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  67. package/dist/src/core/platform.js +30 -5
  68. package/dist/src/core/platform.js.map +1 -1
  69. package/dist/src/core/platforms/Platform.d.ts +42 -0
  70. package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
  71. package/dist/src/core/platforms/Platform.js.map +1 -0
  72. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  73. package/dist/src/core/platforms/web/WebPlatform.js +87 -0
  74. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  75. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  76. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  77. package/dist/src/core/renderers/CoreRenderer.d.ts +7 -2
  78. package/dist/src/core/renderers/CoreRenderer.js +1 -0
  79. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  80. package/dist/src/core/renderers/CoreShaderNode.d.ts +8 -1
  81. package/dist/src/core/renderers/CoreShaderNode.js +11 -0
  82. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  83. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +2 -1
  84. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +11 -9
  85. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  86. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -2
  87. package/dist/src/core/renderers/canvas/CanvasRenderer.js +32 -59
  88. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  89. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
  90. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  91. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  92. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  93. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  94. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  95. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  96. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  97. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  98. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  99. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  100. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
  101. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  102. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +18 -6
  103. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +86 -41
  104. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  105. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
  106. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +53 -17
  107. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  108. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -7
  109. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +21 -50
  110. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  111. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  112. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  113. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  114. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  115. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  116. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  117. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  118. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +95 -49
  119. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  120. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +3 -2
  121. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +14 -5
  122. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  123. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +5 -3
  124. package/dist/src/core/renderers/webgl/WebGlRenderer.js +141 -112
  125. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  126. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  127. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  128. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +6 -3
  129. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +47 -18
  130. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  131. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
  132. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
  133. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -11
  134. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  135. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +5 -10
  136. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  137. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +5 -10
  138. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  139. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -12
  140. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  141. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
  142. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
  143. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
  144. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
  145. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
  146. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
  147. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +24 -19
  148. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  149. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +1 -0
  150. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +32 -5
  151. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  152. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
  153. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
  154. package/dist/src/core/shaders/canvas/Border.js +5 -5
  155. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  156. package/dist/src/core/shaders/canvas/HolePunch.js +3 -3
  157. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  158. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -5
  159. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  160. package/dist/src/core/shaders/canvas/RadialGradient.js +14 -12
  161. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  162. package/dist/src/core/shaders/canvas/Rounded.js +1 -1
  163. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  164. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +14 -6
  165. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  166. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
  167. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  168. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
  169. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  170. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +2 -2
  171. package/dist/src/core/shaders/templates/BorderTemplate.js +11 -11
  172. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  173. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  174. package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -3
  175. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  176. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  177. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  178. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  179. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  180. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  181. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  182. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  183. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  184. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  185. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  186. package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
  187. package/dist/src/core/shaders/utils.js.map +1 -0
  188. package/dist/src/core/shaders/webgl/Border.js +57 -34
  189. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  190. package/dist/src/core/shaders/webgl/Default.js +6 -7
  191. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  192. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  193. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  194. package/dist/src/core/shaders/webgl/LinearGradient.js +33 -8
  195. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  196. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -32
  197. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  198. package/dist/src/core/shaders/webgl/Rounded.js +4 -2
  199. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  200. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +81 -37
  201. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  202. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +93 -42
  203. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  204. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +3 -2
  205. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  206. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  207. package/dist/src/core/shaders/webgl/SdfShader.js +7 -17
  208. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  209. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  210. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  211. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  212. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  213. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  214. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  215. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  216. package/dist/src/core/text-rendering/SdfFontHandler.js +391 -0
  217. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  218. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  219. package/dist/src/core/text-rendering/SdfTextRenderer.js +311 -0
  220. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  221. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  222. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  223. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  224. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  225. package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
  226. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  227. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  228. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  229. package/dist/src/core/text-rendering/Utils.js +84 -0
  230. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  231. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  232. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  233. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
  234. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  235. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  236. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +35 -38
  237. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  238. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
  239. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  240. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  241. package/dist/src/core/textures/ColorTexture.js +3 -4
  242. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  243. package/dist/src/core/textures/ImageTexture.d.ts +11 -4
  244. package/dist/src/core/textures/ImageTexture.js +31 -40
  245. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  246. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  247. package/dist/src/core/textures/NoiseTexture.js +8 -8
  248. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  249. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  250. package/dist/src/core/textures/RenderTexture.js +12 -12
  251. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  252. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  253. package/dist/src/core/textures/SubTexture.js +19 -37
  254. package/dist/src/core/textures/SubTexture.js.map +1 -1
  255. package/dist/src/core/textures/Texture.d.ts +87 -10
  256. package/dist/src/core/textures/Texture.js +160 -17
  257. package/dist/src/core/textures/Texture.js.map +1 -1
  258. package/dist/src/core/utils.d.ts +3 -2
  259. package/dist/src/core/utils.js +1 -1
  260. package/dist/src/core/utils.js.map +1 -1
  261. package/dist/src/main-api/INode.d.ts +2 -2
  262. package/dist/src/main-api/Inspector.d.ts +130 -1
  263. package/dist/src/main-api/Inspector.js +341 -27
  264. package/dist/src/main-api/Inspector.js.map +1 -1
  265. package/dist/src/main-api/Renderer.d.ts +285 -82
  266. package/dist/src/main-api/Renderer.js +221 -76
  267. package/dist/src/main-api/Renderer.js.map +1 -1
  268. package/dist/src/utils.d.ts +1 -6
  269. package/dist/src/utils.js +2 -9
  270. package/dist/src/utils.js.map +1 -1
  271. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  272. package/dist/tsconfig.tsbuildinfo +1 -0
  273. package/exports/canvas.ts +1 -1
  274. package/exports/index.ts +2 -8
  275. package/exports/utils.ts +7 -1
  276. package/exports/webgl.ts +3 -1
  277. package/package.json +15 -17
  278. package/src/common/CommonTypes.ts +18 -2
  279. package/src/core/CoreNode.test.ts +63 -15
  280. package/src/core/CoreNode.ts +709 -582
  281. package/src/core/CoreShaderManager.ts +5 -10
  282. package/src/core/CoreTextNode.ts +424 -286
  283. package/src/core/CoreTextureManager.ts +110 -130
  284. package/src/core/Stage.ts +394 -195
  285. package/src/core/TextureError.ts +46 -0
  286. package/src/core/TextureMemoryManager.ts +164 -141
  287. package/src/core/animations/CoreAnimation.ts +15 -9
  288. package/src/core/animations/CoreAnimationController.ts +13 -4
  289. package/src/core/lib/ImageWorker.ts +7 -1
  290. package/src/core/lib/WebGlContextWrapper.ts +126 -78
  291. package/src/core/lib/collectionUtils.ts +118 -0
  292. package/src/core/lib/colorCache.ts +20 -0
  293. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
  294. package/src/core/lib/textureCompression.ts +433 -75
  295. package/src/core/lib/utils.ts +26 -0
  296. package/src/core/lib/validateImageBitmap.ts +17 -6
  297. package/src/core/platforms/Platform.ts +83 -0
  298. package/src/core/platforms/web/WebPlatform.ts +132 -0
  299. package/src/core/renderers/CoreContextTexture.ts +2 -1
  300. package/src/core/renderers/CoreRenderer.ts +7 -3
  301. package/src/core/renderers/CoreShaderNode.ts +18 -3
  302. package/src/core/renderers/canvas/CanvasRenderer.ts +48 -82
  303. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -6
  304. package/src/core/renderers/canvas/CanvasTexture.ts +22 -18
  305. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -15
  306. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -5
  307. package/src/core/renderers/webgl/WebGlCtxTexture.ts +124 -81
  308. package/src/core/renderers/webgl/WebGlRenderOp.ts +21 -12
  309. package/src/core/renderers/webgl/WebGlRenderer.ts +172 -137
  310. package/src/core/renderers/webgl/WebGlShaderNode.ts +2 -4
  311. package/src/core/renderers/webgl/WebGlShaderProgram.ts +58 -20
  312. package/src/core/shaders/canvas/Border.ts +5 -8
  313. package/src/core/shaders/canvas/HolePunch.ts +4 -11
  314. package/src/core/shaders/canvas/LinearGradient.ts +10 -8
  315. package/src/core/shaders/canvas/RadialGradient.ts +23 -37
  316. package/src/core/shaders/canvas/Rounded.ts +2 -2
  317. package/src/core/shaders/canvas/RoundedWithBorder.ts +20 -16
  318. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +17 -17
  319. package/src/core/shaders/canvas/RoundedWithShadow.ts +10 -9
  320. package/src/core/shaders/templates/BorderTemplate.ts +12 -12
  321. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -5
  322. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -8
  323. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  324. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  325. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  326. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  327. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  328. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  329. package/src/core/shaders/webgl/Border.ts +57 -37
  330. package/src/core/shaders/webgl/Default.ts +6 -7
  331. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  332. package/src/core/shaders/webgl/LinearGradient.ts +33 -8
  333. package/src/core/shaders/webgl/RadialGradient.ts +58 -34
  334. package/src/core/shaders/webgl/Rounded.ts +4 -6
  335. package/src/core/shaders/webgl/RoundedWithBorder.ts +82 -44
  336. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +93 -50
  337. package/src/core/shaders/webgl/RoundedWithShadow.ts +3 -6
  338. package/src/core/shaders/webgl/SdfShader.ts +7 -19
  339. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  340. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  341. package/src/core/text-rendering/SdfFontHandler.ts +591 -0
  342. package/src/core/text-rendering/SdfTextRenderer.ts +411 -0
  343. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  344. package/src/core/text-rendering/TextRenderer.ts +444 -0
  345. package/src/core/text-rendering/Utils.ts +99 -0
  346. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  347. package/src/core/textures/ColorTexture.ts +7 -5
  348. package/src/core/textures/ImageTexture.ts +78 -66
  349. package/src/core/textures/NoiseTexture.ts +14 -12
  350. package/src/core/textures/RenderTexture.ts +18 -16
  351. package/src/core/textures/SubTexture.ts +25 -46
  352. package/src/core/textures/Texture.ts +207 -24
  353. package/src/core/utils.ts +9 -7
  354. package/src/main-api/INode.ts +4 -3
  355. package/src/main-api/Inspector.ts +571 -33
  356. package/src/main-api/Renderer.ts +505 -139
  357. package/src/utils.ts +10 -10
  358. package/dist/exports/core-api.d.ts +0 -74
  359. package/dist/exports/core-api.js +0 -96
  360. package/dist/exports/core-api.js.map +0 -1
  361. package/dist/exports/main-api.d.ts +0 -30
  362. package/dist/exports/main-api.js +0 -45
  363. package/dist/exports/main-api.js.map +0 -1
  364. package/dist/src/core/CoreExtension.d.ts +0 -12
  365. package/dist/src/core/CoreExtension.js +0 -29
  366. package/dist/src/core/CoreExtension.js.map +0 -1
  367. package/dist/src/core/CoreStuff.d.ts +0 -1
  368. package/dist/src/core/CoreStuff.js +0 -138
  369. package/dist/src/core/CoreStuff.js.map +0 -1
  370. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  371. package/dist/src/core/CoreTexturizer.js +0 -47
  372. package/dist/src/core/CoreTexturizer.js.map +0 -1
  373. package/dist/src/core/LngNode.d.ts +0 -736
  374. package/dist/src/core/LngNode.js +0 -1174
  375. package/dist/src/core/LngNode.js.map +0 -1
  376. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  377. package/dist/src/core/Matrix2DContext.js +0 -45
  378. package/dist/src/core/Matrix2DContext.js.map +0 -1
  379. package/dist/src/core/ShaderNode.d.ts +0 -10
  380. package/dist/src/core/ShaderNode.js +0 -30
  381. package/dist/src/core/ShaderNode.js.map +0 -1
  382. package/dist/src/core/TextNode.d.ts +0 -103
  383. package/dist/src/core/TextNode.js +0 -331
  384. package/dist/src/core/TextNode.js.map +0 -1
  385. package/dist/src/core/lib/Coords.d.ts +0 -14
  386. package/dist/src/core/lib/Coords.js +0 -55
  387. package/dist/src/core/lib/Coords.js.map +0 -1
  388. package/dist/src/core/lib/glm/common.d.ts +0 -162
  389. package/dist/src/core/lib/glm/common.js +0 -81
  390. package/dist/src/core/lib/glm/common.js.map +0 -1
  391. package/dist/src/core/lib/glm/index.d.ts +0 -11
  392. package/dist/src/core/lib/glm/index.js +0 -30
  393. package/dist/src/core/lib/glm/index.js.map +0 -1
  394. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  395. package/dist/src/core/lib/glm/mat2.js +0 -396
  396. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  397. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  398. package/dist/src/core/lib/glm/mat2d.js +0 -442
  399. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  400. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  401. package/dist/src/core/lib/glm/mat3.js +0 -680
  402. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  403. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  404. package/dist/src/core/lib/glm/mat4.js +0 -1802
  405. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  406. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  407. package/dist/src/core/lib/glm/quat.js +0 -693
  408. package/dist/src/core/lib/glm/quat.js.map +0 -1
  409. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  410. package/dist/src/core/lib/glm/quat2.js +0 -754
  411. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  412. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  413. package/dist/src/core/lib/glm/vec2.js +0 -569
  414. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  415. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  416. package/dist/src/core/lib/glm/vec3.js +0 -720
  417. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  418. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  419. package/dist/src/core/lib/glm/vec4.js +0 -608
  420. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  421. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  422. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  423. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  424. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  425. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  426. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  427. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  428. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  429. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  430. package/dist/src/core/scene/Scene.d.ts +0 -59
  431. package/dist/src/core/scene/Scene.js +0 -106
  432. package/dist/src/core/scene/Scene.js.map +0 -1
  433. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  434. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  435. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  436. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  437. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  438. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  439. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  440. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  441. package/dist/src/main-api/IShaderController.d.ts +0 -14
  442. package/dist/src/main-api/IShaderController.js +0 -30
  443. package/dist/src/main-api/IShaderController.js.map +0 -1
  444. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  445. package/dist/src/main-api/IShaderNode.js +0 -19
  446. package/dist/src/main-api/IShaderNode.js.map +0 -1
  447. package/dist/src/main-api/RendererMain.d.ts +0 -375
  448. package/dist/src/main-api/RendererMain.js +0 -365
  449. package/dist/src/main-api/RendererMain.js.map +0 -1
  450. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  451. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  452. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  453. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  454. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  455. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  456. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  457. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  458. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  459. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  460. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  461. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  462. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  463. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  464. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  465. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  466. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  467. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  468. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  469. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  470. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  471. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  472. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  473. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  474. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  475. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  476. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  477. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  478. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  479. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  480. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  481. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  482. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  483. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  484. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  485. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  486. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  487. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  488. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  489. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  490. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  491. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  492. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  493. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  494. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  495. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  496. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  497. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  498. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  499. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  500. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  501. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  502. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  503. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  504. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  505. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  506. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  507. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  508. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  509. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  510. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  511. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  512. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  513. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  514. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  515. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  516. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  517. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  518. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  519. package/dist/src/render-drivers/utils.d.ts +0 -12
  520. package/dist/src/render-drivers/utils.js +0 -69
  521. package/dist/src/render-drivers/utils.js.map +0 -1
  522. package/scripts/please-use-pnpm.js +0 -13
  523. package/src/core/platform.ts +0 -64
  524. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  525. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  526. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  527. package/src/core/text-rendering/TrFontManager.ts +0 -183
  528. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  529. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  530. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  531. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  532. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  533. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  534. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  535. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  536. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  537. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -840
  538. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  539. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  540. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  541. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  542. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  543. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  544. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  545. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  546. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  547. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  548. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  549. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  550. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  551. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
@@ -5,9 +5,61 @@ import {
5
5
  } from '../core/CoreNode.js';
6
6
  import { type RendererMainSettings } from './Renderer.js';
7
7
  import type { AnimationSettings } from '../core/animations/CoreAnimation.js';
8
- import type { IAnimationController } from '../common/IAnimationController.js';
8
+ import type {
9
+ IAnimationController,
10
+ AnimationControllerState,
11
+ } from '../common/IAnimationController.js';
9
12
  import { isProductionEnvironment } from '../utils.js';
10
- import type { CoreTextNode, CoreTextNodeProps } from '../core/CoreTextNode.js';
13
+ import { CoreTextNode, type CoreTextNodeProps } from '../core/CoreTextNode.js';
14
+
15
+ /**
16
+ * Inspector Options
17
+ *
18
+ * Configuration options for the Inspector's performance monitoring features.
19
+ */
20
+ export interface InspectorOptions {
21
+ /**
22
+ * Enable performance monitoring for setter calls
23
+ *
24
+ * @defaultValue true
25
+ */
26
+ enablePerformanceMonitoring: boolean;
27
+
28
+ /**
29
+ * Threshold for excessive setter calls before logging a warning
30
+ *
31
+ * @defaultValue 100
32
+ */
33
+ excessiveCallThreshold: number;
34
+
35
+ /**
36
+ * Time interval in milliseconds to reset the setter call counters
37
+ *
38
+ * @defaultValue 5000
39
+ */
40
+ resetInterval: number;
41
+
42
+ /**
43
+ * Enable animation monitoring and statistics tracking
44
+ *
45
+ * @defaultValue true
46
+ */
47
+ enableAnimationMonitoring: boolean;
48
+
49
+ /**
50
+ * Maximum number of animations to keep in history for statistics
51
+ *
52
+ * @defaultValue 1000
53
+ */
54
+ maxAnimationHistory: number;
55
+
56
+ /**
57
+ * Automatically print animation statistics every X seconds (0 to disable)
58
+ *
59
+ * @defaultValue 0
60
+ */
61
+ animationStatsInterval: number;
62
+ }
11
63
 
12
64
  /**
13
65
  * Inspector
@@ -48,16 +100,16 @@ const stylePropertyMap: {
48
100
  y: (y) => {
49
101
  return { prop: 'top', value: `${y}px` };
50
102
  },
51
- width: (w) => {
103
+ w: (w) => {
52
104
  if (w === 0) {
53
- return null;
105
+ return { prop: 'width', value: 'auto' };
54
106
  }
55
107
 
56
108
  return { prop: 'width', value: `${w}px` };
57
109
  },
58
- height: (h) => {
110
+ h: (h) => {
59
111
  if (h === 0) {
60
- return null;
112
+ return { prop: 'height', value: 'auto' };
61
113
  }
62
114
 
63
115
  return { prop: 'height', value: `${h}px` };
@@ -79,8 +131,6 @@ const stylePropertyMap: {
79
131
  zIndex: () => 'z-index',
80
132
  fontFamily: () => 'font-family',
81
133
  fontStyle: () => 'font-style',
82
- fontWeight: () => 'font-weight',
83
- fontStretch: () => 'font-stretch',
84
134
  letterSpacing: () => 'letter-spacing',
85
135
  textAlign: () => 'text-align',
86
136
  overflowSuffix: () => 'overflow-suffix',
@@ -161,23 +211,86 @@ const knownProperties = new Set<string>([
161
211
  'src',
162
212
  'parent',
163
213
  'data',
214
+ 'text',
164
215
  ]);
165
216
 
166
217
  export class Inspector {
167
218
  private root: HTMLElement | null = null;
168
219
  private canvas: HTMLCanvasElement | null = null;
220
+ private mutationObserver: MutationObserver = new MutationObserver(() => {});
221
+ private resizeObserver: ResizeObserver = new ResizeObserver(() => {});
169
222
  private height = 1080;
170
223
  private width = 1920;
171
224
  private scaleX = 1;
172
225
  private scaleY = 1;
173
226
 
227
+ // Performance monitoring for frequent setter calls
228
+ private static setterCallCount = new Map<
229
+ string,
230
+ { count: number; lastReset: number; nodeId: number }
231
+ >();
232
+
233
+ // Animation monitoring structures
234
+ private static activeAnimations = new Map<
235
+ string,
236
+ {
237
+ nodeId: number;
238
+ animationId: string;
239
+ startTime: number;
240
+ props: CoreNodeAnimateProps;
241
+ settings: AnimationSettings;
242
+ controller: IAnimationController;
243
+ state: AnimationControllerState;
244
+ }
245
+ >();
246
+
247
+ private static animationHistory: Array<{
248
+ nodeId: number;
249
+ animationId: string;
250
+ startTime: number;
251
+ endTime: number;
252
+ duration: number;
253
+ actualDuration: number;
254
+ props: CoreNodeAnimateProps;
255
+ settings: AnimationSettings;
256
+ completionType: 'finished' | 'stopped' | 'cancelled';
257
+ }> = [];
258
+
259
+ // Performance monitoring settings (configured via constructor)
260
+ private performanceSettings: InspectorOptions = {
261
+ enablePerformanceMonitoring: false,
262
+ excessiveCallThreshold: 100,
263
+ resetInterval: 5000,
264
+ enableAnimationMonitoring: false,
265
+ maxAnimationHistory: 1000,
266
+ animationStatsInterval: 0,
267
+ };
268
+
269
+ // Animation stats printing timer
270
+ private animationStatsTimer: number | null = null;
271
+
174
272
  constructor(canvas: HTMLCanvasElement, settings: RendererMainSettings) {
175
- if (isProductionEnvironment()) return;
273
+ if (isProductionEnvironment === true) return;
176
274
 
177
275
  if (!settings) {
178
276
  throw new Error('settings is required');
179
277
  }
180
278
 
279
+ // Initialize performance monitoring settings with defaults
280
+ this.performanceSettings = {
281
+ enablePerformanceMonitoring:
282
+ settings.inspectorOptions?.enablePerformanceMonitoring ?? false,
283
+ excessiveCallThreshold:
284
+ settings.inspectorOptions?.excessiveCallThreshold ?? 100,
285
+ resetInterval: settings.inspectorOptions?.resetInterval ?? 5000,
286
+ enableAnimationMonitoring:
287
+ settings.inspectorOptions?.enableAnimationMonitoring ?? false,
288
+ maxAnimationHistory:
289
+ settings.inspectorOptions?.maxAnimationHistory ?? 1000,
290
+ animationStatsInterval:
291
+ settings.inspectorOptions?.animationStatsInterval ?? 0,
292
+ };
293
+
181
294
  // calc dimensions based on the devicePixelRatio
182
295
  this.height = Math.ceil(
183
296
  settings.appHeight ?? 1080 / (settings.deviceLogicalPixelRatio ?? 1),
@@ -196,25 +309,395 @@ export class Inspector {
196
309
  document.body.appendChild(this.root);
197
310
 
198
311
  //listen for changes on canvas
199
- const mutationObserver = new MutationObserver(
312
+ this.mutationObserver = new MutationObserver(
200
313
  this.setRootPosition.bind(this),
201
314
  );
202
- mutationObserver.observe(canvas, {
315
+ this.mutationObserver.observe(canvas, {
203
316
  attributes: true,
204
317
  childList: false,
205
318
  subtree: false,
206
319
  });
207
320
 
208
321
  // Create a ResizeObserver to watch for changes in the element's size
209
- const resizeObserver = new ResizeObserver(this.setRootPosition.bind(this));
210
- resizeObserver.observe(canvas);
322
+ this.resizeObserver = new ResizeObserver(this.setRootPosition.bind(this));
323
+ this.resizeObserver.observe(canvas);
211
324
 
212
325
  //listen for changes on window
213
326
  window.addEventListener('resize', this.setRootPosition.bind(this));
214
327
 
328
+ // Start animation stats timer if enabled
329
+ this.startAnimationStatsTimer();
330
+
215
331
  console.warn('Inspector is enabled, this will impact performance');
216
332
  }
217
333
 
334
+ /**
335
+ * Track setter calls for performance monitoring
336
+ * Only active when Inspector is loaded
337
+ */
338
+ private trackSetterCall(nodeId: number, setterName: string): void {
339
+ if (!this.performanceSettings.enablePerformanceMonitoring) {
340
+ return;
341
+ }
342
+
343
+ const key = `${nodeId}_${setterName}`;
344
+ const now = Date.now();
345
+ const existing = Inspector.setterCallCount.get(key);
346
+
347
+ if (!existing) {
348
+ Inspector.setterCallCount.set(key, { count: 1, lastReset: now, nodeId });
349
+ return;
350
+ }
351
+
352
+ // Reset counter if enough time has passed
353
+ if (now - existing.lastReset > this.performanceSettings.resetInterval) {
354
+ existing.count = 1;
355
+ existing.lastReset = now;
356
+ return;
357
+ }
358
+
359
+ existing.count++;
360
+
361
+ // Log if threshold exceeded
362
+ if (existing.count === this.performanceSettings.excessiveCallThreshold) {
363
+ console.warn(
364
+ `🚨 Inspector Performance Warning: Setter '${setterName}' called ${existing.count} times in ${this.performanceSettings.resetInterval}ms on node ${nodeId}`,
365
+ );
366
+ } else if (
367
+ existing.count > this.performanceSettings.excessiveCallThreshold &&
368
+ existing.count % 50 === 0
369
+ ) {
370
+ console.warn(
371
+ `🚨 Inspector Performance Warning: Setter '${setterName}' called ${existing.count} times in ${this.performanceSettings.resetInterval}ms on node ${nodeId} (continuing...)`,
372
+ );
373
+ }
374
+ }
375
+
376
+ /**
377
+ * Get current performance monitoring statistics
378
+ */
379
+ public static getPerformanceStats(): Array<{
380
+ nodeId: number;
381
+ setterName: string;
382
+ count: number;
383
+ timeWindow: number;
384
+ }> {
385
+ const stats: Array<{
386
+ nodeId: number;
387
+ setterName: string;
388
+ count: number;
389
+ timeWindow: number;
390
+ }> = [];
391
+ const now = Date.now();
392
+
393
+ Inspector.setterCallCount.forEach((data, key) => {
394
+ const parts = key.split('_');
395
+ const nodeIdStr = parts[0];
396
+ const setterName = parts[1];
397
+
398
+ if (nodeIdStr && setterName) {
399
+ const timeWindow = now - data.lastReset;
400
+
401
+ stats.push({
402
+ nodeId: parseInt(nodeIdStr, 10),
403
+ setterName,
404
+ count: data.count,
405
+ timeWindow,
406
+ });
407
+ }
408
+ });
409
+
410
+ return stats.sort((a, b) => b.count - a.count);
411
+ }
412
+
413
+ /**
414
+ * Clear performance monitoring statistics
415
+ */
416
+ public static clearPerformanceStats(): void {
417
+ Inspector.setterCallCount.clear();
418
+ }
419
+
420
+ /**
421
+ * Generate a unique animation ID
422
+ */
423
+ private static generateAnimationId(): string {
424
+ return `anim_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
425
+ }
426
+
427
+ /**
428
+ * Wrap animation controller with monitoring capabilities
429
+ */
430
+ private wrapAnimationController(
431
+ controller: IAnimationController,
432
+ nodeId: number,
433
+ props: CoreNodeAnimateProps,
434
+ settings: AnimationSettings,
435
+ div: HTMLElement,
436
+ ): IAnimationController {
437
+ if (!this.performanceSettings.enableAnimationMonitoring) {
438
+ // Just add the basic DOM animation without tracking
439
+ const originalStart = controller.start.bind(controller);
440
+ controller.start = () => {
441
+ this.animateNode(div, props, settings);
442
+ return originalStart();
443
+ };
444
+ return controller;
445
+ }
446
+
447
+ const animationId = Inspector.generateAnimationId();
448
+
449
+ // Create wrapper controller
450
+ const wrappedController: IAnimationController = {
451
+ start: () => {
452
+ this.trackAnimationStart(
453
+ animationId,
454
+ nodeId,
455
+ props,
456
+ settings,
457
+ controller,
458
+ );
459
+ this.animateNode(div, props, settings);
460
+ return controller.start();
461
+ },
462
+
463
+ stop: () => {
464
+ this.trackAnimationEnd(animationId, 'stopped');
465
+ return controller.stop();
466
+ },
467
+
468
+ pause: () => {
469
+ this.updateAnimationState(animationId, 'paused');
470
+ return controller.pause();
471
+ },
472
+
473
+ restore: () => {
474
+ this.trackAnimationEnd(animationId, 'cancelled');
475
+ return controller.restore();
476
+ },
477
+
478
+ waitUntilStopped: () => {
479
+ return controller.waitUntilStopped().then(() => {
480
+ this.trackAnimationEnd(animationId, 'finished');
481
+ });
482
+ },
483
+
484
+ get state() {
485
+ return controller.state;
486
+ },
487
+
488
+ // Event emitter methods
489
+ on: controller.on.bind(controller),
490
+ off: controller.off.bind(controller),
491
+ once: controller.once.bind(controller),
492
+ emit: controller.emit.bind(controller),
493
+ };
494
+
495
+ // Track animation events
496
+ controller.on('animating', () => {
497
+ this.updateAnimationState(animationId, 'running');
498
+ });
499
+
500
+ controller.on('stopped', () => {
501
+ this.trackAnimationEnd(animationId, 'finished');
502
+ });
503
+
504
+ return wrappedController;
505
+ }
506
+
507
+ /**
508
+ * Track animation start
509
+ */
510
+ private trackAnimationStart(
511
+ animationId: string,
512
+ nodeId: number,
513
+ props: CoreNodeAnimateProps,
514
+ settings: AnimationSettings,
515
+ controller: IAnimationController,
516
+ ): void {
517
+ const startTime = Date.now();
518
+
519
+ Inspector.activeAnimations.set(animationId, {
520
+ nodeId,
521
+ animationId,
522
+ startTime,
523
+ props,
524
+ settings,
525
+ controller,
526
+ state: 'scheduled',
527
+ });
528
+ }
529
+
530
+ /**
531
+ * Update animation state
532
+ */
533
+ private updateAnimationState(
534
+ animationId: string,
535
+ state: AnimationControllerState,
536
+ ): void {
537
+ const animation = Inspector.activeAnimations.get(animationId);
538
+ if (animation) {
539
+ animation.state = state;
540
+ }
541
+ }
542
+
543
+ /**
544
+ * Track animation end
545
+ */
546
+ private trackAnimationEnd(
547
+ animationId: string,
548
+ completionType: 'finished' | 'stopped' | 'cancelled',
549
+ ): void {
550
+ const animation = Inspector.activeAnimations.get(animationId);
551
+ if (!animation) return;
552
+
553
+ const endTime = Date.now();
554
+ const actualDuration = endTime - animation.startTime;
555
+ const expectedDuration = animation.settings.duration || 1000;
556
+
557
+ // Move to history
558
+ Inspector.animationHistory.unshift({
559
+ nodeId: animation.nodeId,
560
+ animationId: animation.animationId,
561
+ startTime: animation.startTime,
562
+ endTime,
563
+ duration: expectedDuration,
564
+ actualDuration,
565
+ props: animation.props,
566
+ settings: animation.settings,
567
+ completionType,
568
+ });
569
+
570
+ // Limit history size for performance
571
+ if (
572
+ Inspector.animationHistory.length >
573
+ this.performanceSettings.maxAnimationHistory
574
+ ) {
575
+ Inspector.animationHistory.splice(
576
+ this.performanceSettings.maxAnimationHistory,
577
+ );
578
+ }
579
+
580
+ // Remove from active animations
581
+ Inspector.activeAnimations.delete(animationId);
582
+ }
583
+
584
+ /**
585
+ * Get currently active animations
586
+ */
587
+ public static getActiveAnimations(): Array<{
588
+ nodeId: number;
589
+ animationId: string;
590
+ startTime: number;
591
+ duration: number;
592
+ elapsedTime: number;
593
+ props: CoreNodeAnimateProps;
594
+ settings: AnimationSettings;
595
+ state: AnimationControllerState;
596
+ }> {
597
+ const now = Date.now();
598
+ const activeAnimations: Array<{
599
+ nodeId: number;
600
+ animationId: string;
601
+ startTime: number;
602
+ duration: number;
603
+ elapsedTime: number;
604
+ props: CoreNodeAnimateProps;
605
+ settings: AnimationSettings;
606
+ state: AnimationControllerState;
607
+ }> = [];
608
+
609
+ Inspector.activeAnimations.forEach((animation) => {
610
+ activeAnimations.push({
611
+ nodeId: animation.nodeId,
612
+ animationId: animation.animationId,
613
+ startTime: animation.startTime,
614
+ duration: animation.settings.duration || 1000,
615
+ elapsedTime: now - animation.startTime,
616
+ props: animation.props,
617
+ settings: animation.settings,
618
+ state: animation.state,
619
+ });
620
+ });
621
+
622
+ return activeAnimations.sort((a, b) => b.startTime - a.startTime);
623
+ }
624
+
625
+ /**
626
+ * Get animation statistics
627
+ */
628
+ public static getAnimationStats(): {
629
+ totalAnimations: number;
630
+ activeCount: number;
631
+ averageDuration: number;
632
+ } {
633
+ const totalAnimations = Inspector.animationHistory.length;
634
+ const activeCount = Inspector.activeAnimations.size;
635
+
636
+ // Calculate average duration from finished animations only
637
+ const finishedAnimations = Inspector.animationHistory.filter(
638
+ (anim) => anim.completionType === 'finished',
639
+ );
640
+
641
+ const averageDuration =
642
+ finishedAnimations.length > 0
643
+ ? finishedAnimations.reduce(
644
+ (sum, anim) => sum + anim.actualDuration,
645
+ 0,
646
+ ) / finishedAnimations.length
647
+ : 0;
648
+
649
+ return {
650
+ totalAnimations,
651
+ activeCount,
652
+ averageDuration,
653
+ };
654
+ }
655
+
656
+ /**
657
+ * Clear animation monitoring data
658
+ */
659
+ public static clearAnimationStats(): void {
660
+ Inspector.activeAnimations.clear();
661
+ Inspector.animationHistory.length = 0;
662
+ }
663
+
664
+ /**
665
+ * Start the animation stats timer if enabled
666
+ */
667
+ private startAnimationStatsTimer(): void {
668
+ console.log(
669
+ `Starting animation stats timer with interval: ${this.performanceSettings.animationStatsInterval} seconds`,
670
+ );
671
+
672
+ if (this.performanceSettings.animationStatsInterval > 0) {
673
+ this.animationStatsTimer = setInterval(() => {
674
+ this.printAnimationStats();
675
+ }, this.performanceSettings.animationStatsInterval * 1000) as unknown as number;
676
+ }
677
+ }
678
+
679
+ /**
680
+ * Stop the animation stats timer
681
+ */
682
+ private stopAnimationStatsTimer(): void {
683
+ if (this.animationStatsTimer) {
684
+ clearInterval(this.animationStatsTimer);
685
+ this.animationStatsTimer = null;
686
+ }
687
+ }
688
+
689
+ /**
690
+ * Print current animation statistics to console
691
+ */
692
+ private printAnimationStats(): void {
693
+ const stats = Inspector.getAnimationStats();
694
+
695
+ console.log(
696
+ `🎬 Animation Stats: ${stats.activeCount} active, ${
697
+ stats.totalAnimations
698
+ } completed, ${Math.round(stats.averageDuration)}ms avg duration`,
699
+ );
700
+ }
218
701
  setRootPosition() {
219
702
  if (this.root === null || this.canvas === null) {
220
703
  return;
@@ -259,6 +742,24 @@ export class Inspector {
259
742
  return div;
260
743
  }
261
744
 
745
+ createNodes(node: CoreNode): boolean {
746
+ if (this.root === null) {
747
+ return false;
748
+ }
749
+
750
+ const div = this.root.querySelector(`[id="${node.id}"]`);
751
+ if (div === null && node instanceof CoreTextNode) {
752
+ this.createTextNode(node);
753
+ } else if (div === null && node instanceof CoreNode) {
754
+ this.createNode(node);
755
+ }
756
+
757
+ for (const child of node.children) {
758
+ this.createNodes(child);
759
+ }
760
+ return true;
761
+ }
762
+
262
763
  createNode(node: CoreNode): CoreNode {
263
764
  const div = this.createDiv(node.id, node.props);
264
765
  (div as HTMLElement & { node: CoreNode }).node = node;
@@ -304,6 +805,9 @@ export class Inspector {
304
805
  return originalProp?.get?.call(node);
305
806
  },
306
807
  set: (value) => {
808
+ // Track setter call for performance monitoring
809
+ this.trackSetterCall(node.id, property);
810
+
307
811
  originalProp?.set?.call(node, value);
308
812
  this.updateNodeProperty(
309
813
  div,
@@ -323,6 +827,7 @@ export class Inspector {
323
827
  this.destroyNode(node.id);
324
828
  originalDestroy.call(node);
325
829
  },
830
+ configurable: true,
326
831
  });
327
832
 
328
833
  const originalAnimate = node.animate;
@@ -333,21 +838,39 @@ export class Inspector {
333
838
  ): IAnimationController => {
334
839
  const animationController = originalAnimate.call(node, props, settings);
335
840
 
336
- const originalStart =
337
- animationController.start.bind(animationController);
338
- animationController.start = () => {
339
- this.animateNode(div, props, settings);
340
-
341
- return originalStart();
342
- };
343
-
344
- return animationController;
841
+ // Wrap animation controller with monitoring
842
+ return this.wrapAnimationController(
843
+ animationController,
844
+ node.id,
845
+ props,
846
+ settings,
847
+ div,
848
+ );
345
849
  },
850
+ configurable: true,
346
851
  });
347
852
 
348
853
  return node;
349
854
  }
350
855
 
856
+ public destroy() {
857
+ // Stop animation stats timer
858
+ this.stopAnimationStatsTimer();
859
+
860
+ // Remove DOM observers
861
+ this.mutationObserver.disconnect();
862
+ this.resizeObserver.disconnect();
863
+
864
+ // Remove resize listener
865
+ window.removeEventListener('resize', this.setRootPosition.bind(this));
866
+ if (this.root && this.root.parentNode) {
867
+ this.root.remove();
868
+ }
869
+
870
+ // Clean up animation monitoring data
871
+ Inspector.clearAnimationStats();
872
+ }
873
+
351
874
  destroyNode(id: number) {
352
875
  const div = document.getElementById(id.toString());
353
876
  div?.remove();
@@ -386,9 +909,11 @@ export class Inspector {
386
909
  if (property === 'text') {
387
910
  div.innerHTML = String(value);
388
911
 
389
- // hide text because we can't render SDF fonts
390
- // it would look weird and obstruct the WebGL rendering
391
- div.style.visibility = 'hidden';
912
+ // Keep DOM text invisible without breaking visibility checks
913
+ // Use very low opacity (0.001) instead of 0 so Playwright still detects it
914
+ div.style.opacity = '0.001';
915
+ div.style.pointerEvents = 'none';
916
+ div.style.userSelect = 'none';
392
917
  return;
393
918
  }
394
919
 
@@ -430,14 +955,14 @@ export class Inspector {
430
955
  let value = mappedStyleResponse.value;
431
956
  if (property === 'x') {
432
957
  const mount = props.mountX;
433
- const width = props.width;
958
+ const width = props.w;
434
959
 
435
960
  if (mount) {
436
961
  value = `${parseInt(value) - width * mount}px`;
437
962
  }
438
963
  } else if (property === 'y') {
439
964
  const mount = props.mountY;
440
- const height = props.height;
965
+ const height = props.h;
441
966
 
442
967
  if (mount) {
443
968
  value = `${parseInt(value) - height * mount}px`;
@@ -475,6 +1000,19 @@ export class Inspector {
475
1000
  }
476
1001
  }
477
1002
 
1003
+ updateViewport(
1004
+ width: number,
1005
+ height: number,
1006
+ deviceLogicalPixelRatio: number,
1007
+ ) {
1008
+ this.scaleX = deviceLogicalPixelRatio ?? 1;
1009
+ this.scaleY = deviceLogicalPixelRatio ?? 1;
1010
+
1011
+ this.width = width;
1012
+ this.height = height;
1013
+ this.setRootPosition();
1014
+ }
1015
+
478
1016
  // simple animation handler
479
1017
  animateNode(
480
1018
  div: HTMLElement,
@@ -493,8 +1031,8 @@ export class Inspector {
493
1031
  const {
494
1032
  x,
495
1033
  y,
496
- width,
497
- height,
1034
+ w,
1035
+ h,
498
1036
  alpha = 1,
499
1037
  rotation = 0,
500
1038
  scale = 1,
@@ -506,10 +1044,10 @@ export class Inspector {
506
1044
  // ignoring loops and repeats for now, as that might be a bit too much for the inspector
507
1045
  function animate() {
508
1046
  setTimeout(() => {
509
- div.style.top = `${y - height * mountY}px`;
510
- div.style.left = `${x - width * mountX}px`;
511
- div.style.width = `${width}px`;
512
- div.style.height = `${height}px`;
1047
+ div.style.top = `${y - h * mountY}px`;
1048
+ div.style.left = `${x - w * mountX}px`;
1049
+ div.style.width = `${w}px`;
1050
+ div.style.height = `${h}px`;
513
1051
  div.style.opacity = `${alpha}`;
514
1052
  div.style.rotate = `${rotation}rad`;
515
1053
  div.style.scale = `${scale}`;